@budibase/server 2.2.26 → 2.2.27-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (779) hide show
  1. package/Dockerfile +1 -1
  2. package/__mocks__/aws-sdk.ts +20 -1
  3. package/__mocks__/node-fetch.ts +80 -0
  4. package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
  5. package/builder/assets/bg.29e85dd5.png +0 -0
  6. package/builder/assets/bulgaria.bd68393d.png +0 -0
  7. package/builder/assets/covanta.72c46c1e.png +0 -0
  8. package/builder/assets/index.3dd03883.css +6 -0
  9. package/builder/assets/index.77ae0e4d.js +1802 -0
  10. package/builder/assets/schnellecke.cf1837a8.png +0 -0
  11. package/builder/index.html +3 -3
  12. package/coverage/clover.xml +12565 -8055
  13. package/coverage/coverage-final.json +365 -276
  14. package/coverage/lcov-report/index.html +721 -466
  15. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +9 -9
  16. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +6 -6
  17. package/coverage/lcov-report/src/api/controllers/application.ts.html +364 -268
  18. package/coverage/lcov-report/src/api/controllers/auth.ts.html +12 -12
  19. package/coverage/lcov-report/src/api/controllers/automation.ts.html +61 -61
  20. package/coverage/lcov-report/src/api/controllers/backup.ts.html +8 -8
  21. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +89 -77
  22. package/coverage/lcov-report/src/api/controllers/component.ts.html +12 -12
  23. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +122 -98
  24. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +21 -18
  25. package/coverage/lcov-report/src/api/controllers/deploy/index.html +21 -21
  26. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +142 -196
  27. package/coverage/lcov-report/src/api/controllers/dev.ts.html +33 -33
  28. package/coverage/lcov-report/src/api/controllers/index.html +125 -125
  29. package/coverage/lcov-report/src/api/controllers/integration.ts.html +5 -5
  30. package/coverage/lcov-report/src/api/controllers/layout.ts.html +18 -18
  31. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +11 -11
  32. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +6 -6
  33. package/coverage/lcov-report/src/api/controllers/permission.ts.html +35 -35
  34. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +20 -20
  35. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +62 -62
  36. package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
  37. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
  38. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +56 -56
  39. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
  40. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
  41. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
  42. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +75 -24
  43. package/coverage/lcov-report/src/api/controllers/public/index.html +58 -58
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +7 -7
  45. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +25 -25
  46. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +9 -9
  47. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +8 -8
  48. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +4 -4
  49. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +4 -4
  50. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +4 -4
  51. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +15 -15
  52. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +21 -21
  53. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +21 -21
  54. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +27 -27
  55. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +8 -8
  56. package/coverage/lcov-report/src/api/controllers/query/import/index.html +8 -8
  57. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +11 -11
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +14 -14
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +14 -14
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +8 -8
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +12 -12
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +23 -23
  63. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +16 -16
  64. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +20 -20
  65. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/curl/curl.spec.js.html +391 -0
  66. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/curl/index.html +116 -0
  67. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/index.html +116 -0
  68. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/openapi2.spec.js.html +796 -0
  69. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/index.html +116 -0
  70. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js.html +805 -0
  71. package/coverage/lcov-report/src/api/controllers/query/import/tests/index.html +116 -0
  72. package/coverage/lcov-report/src/api/controllers/query/import/tests/index.spec.js.html +568 -0
  73. package/coverage/lcov-report/src/api/controllers/query/index.html +20 -20
  74. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +131 -107
  75. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +11 -11
  76. package/coverage/lcov-report/src/api/controllers/role.ts.html +9 -9
  77. package/coverage/lcov-report/src/api/controllers/routing.ts.html +10 -10
  78. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +56 -41
  79. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +87 -57
  80. package/coverage/lcov-report/src/api/controllers/row/index.html +66 -66
  81. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +26 -26
  82. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +171 -96
  83. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +146 -146
  84. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +30 -21
  85. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +143 -26
  86. package/coverage/lcov-report/src/api/controllers/screen.ts.html +31 -31
  87. package/coverage/lcov-report/src/api/controllers/script.ts.html +19 -19
  88. package/coverage/lcov-report/src/api/controllers/static/index.html +18 -18
  89. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +56 -71
  90. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +61 -61
  91. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +56 -50
  92. package/coverage/lcov-report/src/api/controllers/table/index.html +51 -51
  93. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +157 -70
  94. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +68 -71
  95. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +109 -112
  96. package/coverage/lcov-report/src/api/controllers/templates.ts.html +21 -21
  97. package/coverage/lcov-report/src/api/controllers/user.ts.html +161 -137
  98. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +64 -19
  99. package/coverage/lcov-report/src/api/controllers/view/index.html +38 -38
  100. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +97 -133
  101. package/coverage/lcov-report/src/api/controllers/view/tests/index.html +116 -0
  102. package/coverage/lcov-report/src/api/controllers/view/tests/viewBuilder.spec.js.html +277 -0
  103. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +31 -31
  104. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +37 -37
  105. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +78 -72
  106. package/coverage/lcov-report/src/api/index.html +15 -15
  107. package/coverage/lcov-report/src/api/index.ts.html +40 -40
  108. package/coverage/lcov-report/src/api/routes/analytics.ts.html +10 -10
  109. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +11 -11
  110. package/coverage/lcov-report/src/api/routes/application.ts.html +46 -13
  111. package/coverage/lcov-report/src/api/routes/auth.ts.html +9 -9
  112. package/coverage/lcov-report/src/api/routes/automation.ts.html +14 -14
  113. package/coverage/lcov-report/src/api/routes/backup.ts.html +11 -11
  114. package/coverage/lcov-report/src/api/routes/cloud.ts.html +11 -11
  115. package/coverage/lcov-report/src/api/routes/component.ts.html +11 -11
  116. package/coverage/lcov-report/src/api/routes/datasource.ts.html +12 -12
  117. package/coverage/lcov-report/src/api/routes/deploy.ts.html +11 -14
  118. package/coverage/lcov-report/src/api/routes/dev.ts.html +17 -17
  119. package/coverage/lcov-report/src/api/routes/index.html +68 -68
  120. package/coverage/lcov-report/src/api/routes/index.ts.html +49 -40
  121. package/coverage/lcov-report/src/api/routes/integration.ts.html +11 -11
  122. package/coverage/lcov-report/src/api/routes/layout.ts.html +11 -11
  123. package/coverage/lcov-report/src/api/routes/metadata.ts.html +12 -12
  124. package/coverage/lcov-report/src/api/routes/migrations.ts.html +10 -10
  125. package/coverage/lcov-report/src/api/routes/permission.ts.html +12 -12
  126. package/coverage/lcov-report/src/api/routes/plugin.ts.html +10 -10
  127. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +147 -15
  128. package/coverage/lcov-report/src/api/routes/public/index.html +27 -27
  129. package/coverage/lcov-report/src/api/routes/public/index.ts.html +60 -60
  130. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
  131. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
  132. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +11 -11
  133. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +14 -14
  134. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +14 -14
  135. package/coverage/lcov-report/src/api/routes/public/tests/compare.spec.js.html +583 -0
  136. package/coverage/lcov-report/src/api/routes/public/tests/index.html +41 -11
  137. package/coverage/lcov-report/src/api/routes/public/tests/users.spec.js.html +199 -0
  138. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +5 -5
  139. package/coverage/lcov-report/src/api/routes/public/users.ts.html +14 -14
  140. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +21 -21
  141. package/coverage/lcov-report/src/api/routes/public/utils/index.html +5 -5
  142. package/coverage/lcov-report/src/api/routes/query.ts.html +14 -14
  143. package/coverage/lcov-report/src/api/routes/role.ts.html +12 -12
  144. package/coverage/lcov-report/src/api/routes/routing.ts.html +11 -11
  145. package/coverage/lcov-report/src/api/routes/row.ts.html +14 -14
  146. package/coverage/lcov-report/src/api/routes/screen.ts.html +12 -12
  147. package/coverage/lcov-report/src/api/routes/script.ts.html +13 -13
  148. package/coverage/lcov-report/src/api/routes/static.ts.html +18 -18
  149. package/coverage/lcov-report/src/api/routes/table.ts.html +29 -98
  150. package/coverage/lcov-report/src/api/routes/templates.ts.html +11 -11
  151. package/coverage/lcov-report/src/api/routes/tests/analytics.spec.js.html +271 -0
  152. package/coverage/lcov-report/src/api/routes/tests/apikeys.spec.js.html +259 -0
  153. package/coverage/lcov-report/src/api/routes/tests/application.spec.ts.html +1066 -0
  154. package/coverage/lcov-report/src/api/routes/tests/auth.spec.js.html +154 -0
  155. package/coverage/lcov-report/src/api/routes/tests/automation.spec.js.html +1123 -0
  156. package/coverage/lcov-report/src/api/routes/tests/backup.spec.ts.html +223 -0
  157. package/coverage/lcov-report/src/api/routes/tests/cloud.seq.spec.ts.html +262 -0
  158. package/coverage/lcov-report/src/api/routes/tests/component.spec.js.html +178 -0
  159. package/coverage/lcov-report/src/api/routes/tests/datasource.spec.ts.html +799 -0
  160. package/coverage/lcov-report/src/api/routes/tests/dev.spec.js.html +202 -0
  161. package/coverage/lcov-report/src/api/routes/tests/index.html +521 -0
  162. package/coverage/lcov-report/src/api/routes/tests/integration.spec.js.html +238 -0
  163. package/coverage/lcov-report/src/api/routes/tests/internalSearch.spec.js.html +670 -0
  164. package/coverage/lcov-report/src/api/routes/tests/layout.spec.js.html +259 -0
  165. package/coverage/lcov-report/src/api/routes/tests/metadata.spec.js.html +280 -0
  166. package/coverage/lcov-report/src/api/routes/tests/misc.spec.js.html +358 -0
  167. package/coverage/lcov-report/src/api/routes/tests/permissions.spec.js.html +484 -0
  168. package/coverage/lcov-report/src/api/routes/tests/plugin.spec.ts.html +622 -0
  169. package/coverage/lcov-report/src/api/routes/tests/query.seq.spec.js.html +1696 -0
  170. package/coverage/lcov-report/src/api/routes/tests/role.spec.js.html +478 -0
  171. package/coverage/lcov-report/src/api/routes/tests/routing.spec.js.html +430 -0
  172. package/coverage/lcov-report/src/api/routes/tests/row.spec.js.html +1804 -0
  173. package/coverage/lcov-report/src/api/routes/tests/screen.spec.js.html +391 -0
  174. package/coverage/lcov-report/src/api/routes/tests/static.spec.js.html +541 -0
  175. package/coverage/lcov-report/src/api/routes/tests/table.spec.js.html +991 -0
  176. package/coverage/lcov-report/src/api/routes/tests/templates.spec.js.html +154 -0
  177. package/coverage/lcov-report/src/api/routes/tests/user.spec.js.html +688 -0
  178. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +116 -47
  179. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +27 -27
  180. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +42 -36
  181. package/coverage/lcov-report/src/api/routes/tests/view.spec.js.html +1342 -0
  182. package/coverage/lcov-report/src/api/routes/tests/webhook.spec.js.html +484 -0
  183. package/coverage/lcov-report/src/api/routes/user.ts.html +12 -12
  184. package/coverage/lcov-report/src/api/routes/utils/index.html +3 -3
  185. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +44 -44
  186. package/coverage/lcov-report/src/api/routes/view.ts.html +13 -13
  187. package/coverage/lcov-report/src/api/routes/webhook.ts.html +13 -13
  188. package/coverage/lcov-report/src/app.ts.html +57 -48
  189. package/coverage/lcov-report/src/automations/actions.ts.html +31 -31
  190. package/coverage/lcov-report/src/automations/automationUtils.ts.html +127 -55
  191. package/coverage/lcov-report/src/automations/bullboard.ts.html +19 -19
  192. package/coverage/lcov-report/src/automations/index.html +58 -58
  193. package/coverage/lcov-report/src/automations/index.ts.html +23 -23
  194. package/coverage/lcov-report/src/automations/logging/index.html +3 -3
  195. package/coverage/lcov-report/src/automations/logging/index.ts.html +15 -15
  196. package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
  197. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +9 -9
  198. package/coverage/lcov-report/src/automations/steps/delay.ts.html +7 -7
  199. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +9 -9
  200. package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
  201. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
  202. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
  203. package/coverage/lcov-report/src/automations/steps/filter.ts.html +12 -12
  204. package/coverage/lcov-report/src/automations/steps/index.html +129 -129
  205. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +10 -10
  206. package/coverage/lcov-report/src/automations/steps/loop.ts.html +5 -5
  207. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +19 -19
  208. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +43 -43
  209. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
  210. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +19 -19
  211. package/coverage/lcov-report/src/automations/steps/slack.ts.html +10 -10
  212. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +12 -12
  213. package/coverage/lcov-report/src/automations/steps/utils.ts.html +18 -18
  214. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
  215. package/coverage/lcov-report/src/automations/tests/automation.spec.js.html +337 -0
  216. package/coverage/lcov-report/src/automations/tests/bash.spec.js.html +187 -0
  217. package/coverage/lcov-report/src/automations/tests/createRow.spec.ts.html +223 -0
  218. package/coverage/lcov-report/src/automations/tests/delay.spec.js.html +133 -0
  219. package/coverage/lcov-report/src/automations/tests/deleteRow.spec.ts.html +250 -0
  220. package/coverage/lcov-report/src/automations/tests/discord.spec.js.html +166 -0
  221. package/coverage/lcov-report/src/automations/tests/executeQuery.spec.js.html +229 -0
  222. package/coverage/lcov-report/src/automations/tests/executeScript.spec.js.html +229 -0
  223. package/coverage/lcov-report/src/automations/tests/filter.spec.js.html +232 -0
  224. package/coverage/lcov-report/src/automations/tests/index.html +341 -0
  225. package/coverage/lcov-report/src/automations/tests/loop.spec.ts.html +220 -0
  226. package/coverage/lcov-report/src/automations/tests/outgoingWebhook.spec.js.html +202 -0
  227. package/coverage/lcov-report/src/automations/tests/queryRows.spec.js.html +436 -0
  228. package/coverage/lcov-report/src/automations/tests/sendSmtpEmail.spec.js.html +298 -0
  229. package/coverage/lcov-report/src/automations/tests/serverLog.spec.js.html +151 -0
  230. package/coverage/lcov-report/src/automations/tests/updateRow.spec.js.html +217 -0
  231. package/coverage/lcov-report/src/automations/tests/utilities/index.html +15 -15
  232. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +32 -32
  233. package/coverage/lcov-report/src/automations/tests/zapier.spec.js.html +166 -0
  234. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +6 -6
  235. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +6 -6
  236. package/coverage/lcov-report/src/automations/triggerInfo/index.html +17 -17
  237. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +10 -10
  238. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +6 -6
  239. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +6 -6
  240. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +6 -6
  241. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +6 -6
  242. package/coverage/lcov-report/src/automations/triggers.ts.html +61 -46
  243. package/coverage/lcov-report/src/automations/unitTests/automationUtils.spec.ts.html +280 -0
  244. package/coverage/lcov-report/src/automations/unitTests/index.html +116 -0
  245. package/coverage/lcov-report/src/automations/utils.ts.html +84 -84
  246. package/coverage/lcov-report/src/constants/index.html +19 -19
  247. package/coverage/lcov-report/src/constants/index.ts.html +103 -103
  248. package/coverage/lcov-report/src/constants/layouts.ts.html +9 -9
  249. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  250. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +45 -45
  251. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +8 -8
  252. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +8 -8
  253. package/coverage/lcov-report/src/db/defaultData/index.html +43 -43
  254. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +8 -8
  255. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +8 -8
  256. package/coverage/lcov-report/src/db/dynamoClient.ts.html +26 -26
  257. package/coverage/lcov-report/src/db/inMemoryView.ts.html +13 -13
  258. package/coverage/lcov-report/src/db/index.html +43 -43
  259. package/coverage/lcov-report/src/db/index.ts.html +20 -20
  260. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +38 -38
  261. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +7 -7
  262. package/coverage/lcov-report/src/db/linkedRows/index.html +37 -37
  263. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +40 -40
  264. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +27 -27
  265. package/coverage/lcov-report/src/db/newid.ts.html +5 -5
  266. package/coverage/lcov-report/src/db/tests/index.html +131 -0
  267. package/coverage/lcov-report/src/db/tests/linkController.spec.js.html +793 -0
  268. package/coverage/lcov-report/src/db/tests/linkTests.spec.js.html +277 -0
  269. package/coverage/lcov-report/src/db/utils.ts.html +92 -92
  270. package/coverage/lcov-report/src/definitions/automations.ts.html +9 -6
  271. package/coverage/lcov-report/src/definitions/index.html +5 -20
  272. package/coverage/lcov-report/src/environment.ts.html +49 -37
  273. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +14 -14
  274. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +8 -8
  275. package/coverage/lcov-report/src/events/index.html +20 -20
  276. package/coverage/lcov-report/src/events/index.ts.html +7 -7
  277. package/coverage/lcov-report/src/events/utils.ts.html +11 -11
  278. package/coverage/lcov-report/src/index.html +48 -48
  279. package/coverage/lcov-report/src/index.ts.html +8 -8
  280. package/coverage/lcov-report/src/integrations/airtable.ts.html +10 -10
  281. package/coverage/lcov-report/src/integrations/arangodb.ts.html +9 -9
  282. package/coverage/lcov-report/src/integrations/base/index.html +29 -29
  283. package/coverage/lcov-report/src/integrations/base/query.ts.html +15 -9
  284. package/coverage/lcov-report/src/integrations/base/sql.ts.html +38 -38
  285. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +23 -23
  286. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  287. package/coverage/lcov-report/src/integrations/couchdb.ts.html +109 -31
  288. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +17 -17
  289. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +27 -15
  290. package/coverage/lcov-report/src/integrations/firebase.ts.html +12 -12
  291. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +42 -42
  292. package/coverage/lcov-report/src/integrations/index.html +130 -130
  293. package/coverage/lcov-report/src/integrations/index.ts.html +50 -62
  294. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +31 -31
  295. package/coverage/lcov-report/src/integrations/mongodb.ts.html +421 -289
  296. package/coverage/lcov-report/src/integrations/mysql.ts.html +28 -28
  297. package/coverage/lcov-report/src/integrations/oracle.ts.html +31 -31
  298. package/coverage/lcov-report/src/integrations/postgres.ts.html +54 -54
  299. package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
  300. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +24 -159
  301. package/coverage/lcov-report/src/integrations/redis.ts.html +8 -8
  302. package/coverage/lcov-report/src/integrations/rest.ts.html +43 -52
  303. package/coverage/lcov-report/src/integrations/s3.ts.html +17 -17
  304. package/coverage/lcov-report/src/integrations/snowflake.ts.html +15 -15
  305. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  306. package/coverage/lcov-report/src/integrations/tests/airtable.spec.ts.html +310 -0
  307. package/coverage/lcov-report/src/integrations/tests/arangodb.spec.ts.html +199 -0
  308. package/coverage/lcov-report/src/integrations/tests/couchdb.spec.ts.html +349 -0
  309. package/coverage/lcov-report/src/integrations/tests/dynamodb.spec.ts.html +550 -0
  310. package/coverage/lcov-report/src/integrations/tests/elasticsearch.spec.ts.html +331 -0
  311. package/coverage/lcov-report/src/integrations/tests/firebase.spec.ts.html +376 -0
  312. package/coverage/lcov-report/src/integrations/tests/index.html +230 -5
  313. package/coverage/lcov-report/src/integrations/tests/microsoftSqlServer.spec.ts.html +253 -0
  314. package/coverage/lcov-report/src/integrations/tests/mongo.spec.ts.html +1087 -0
  315. package/coverage/lcov-report/src/integrations/tests/mysql.spec.ts.html +484 -0
  316. package/coverage/lcov-report/src/integrations/tests/oracle.spec.ts.html +373 -0
  317. package/coverage/lcov-report/src/integrations/tests/postgres.spec.ts.html +328 -0
  318. package/coverage/lcov-report/src/integrations/tests/redis.spec.ts.html +337 -0
  319. package/coverage/lcov-report/src/integrations/tests/rest.spec.ts.html +1870 -0
  320. package/coverage/lcov-report/src/integrations/tests/s3.spec.ts.html +421 -0
  321. package/coverage/lcov-report/src/integrations/tests/sql.spec.ts.html +1753 -0
  322. package/coverage/lcov-report/src/integrations/utils.ts.html +54 -54
  323. package/coverage/lcov-report/src/middleware/appInfo.ts.html +11 -11
  324. package/coverage/lcov-report/src/middleware/authorized.ts.html +49 -37
  325. package/coverage/lcov-report/src/middleware/builder.ts.html +26 -26
  326. package/coverage/lcov-report/src/middleware/currentapp.ts.html +60 -57
  327. package/coverage/lcov-report/src/middleware/index.html +44 -44
  328. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +10 -10
  329. package/coverage/lcov-report/src/middleware/publicApi.ts.html +9 -9
  330. package/coverage/lcov-report/src/middleware/resourceId.ts.html +23 -23
  331. package/coverage/lcov-report/src/middleware/selfhost.ts.html +2 -2
  332. package/coverage/lcov-report/src/middleware/tests/authorized.spec.js.html +574 -0
  333. package/coverage/lcov-report/src/middleware/tests/currentapp.spec.js.html +814 -0
  334. package/coverage/lcov-report/src/middleware/tests/index.html +161 -0
  335. package/coverage/lcov-report/src/middleware/tests/resourceId.spec.js.html +397 -0
  336. package/coverage/lcov-report/src/middleware/tests/selfhost.spec.js.html +214 -0
  337. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  338. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +6 -6
  339. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +7 -7
  340. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +7 -7
  341. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +31 -31
  342. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +8 -8
  343. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +13 -13
  344. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +7 -7
  345. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +7 -7
  346. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +8 -8
  347. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +21 -21
  348. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +17 -14
  349. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +19 -19
  350. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +9 -9
  351. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +13 -13
  352. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +23 -23
  353. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +26 -26
  354. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +7 -7
  355. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +14 -14
  356. package/coverage/lcov-report/src/migrations/functions/index.html +18 -18
  357. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +8 -8
  358. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +11 -11
  359. package/coverage/lcov-report/src/migrations/functions/tests/appUrls.spec.js.html +163 -0
  360. package/coverage/lcov-report/src/migrations/functions/tests/index.html +161 -0
  361. package/coverage/lcov-report/src/migrations/functions/tests/syncQuotas.spec.js.html +163 -0
  362. package/coverage/lcov-report/src/migrations/functions/tests/tableSettings.spec.ts.html +517 -0
  363. package/coverage/lcov-report/src/migrations/functions/tests/userEmailViewCasing.spec.js.html +190 -0
  364. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +11 -11
  365. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +3 -3
  366. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +6 -6
  367. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +8 -8
  368. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +7 -7
  369. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/index.html +131 -0
  370. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts.html +190 -0
  371. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts.html +244 -0
  372. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +4 -4
  373. package/coverage/lcov-report/src/migrations/index.html +15 -15
  374. package/coverage/lcov-report/src/migrations/index.ts.html +43 -43
  375. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +4 -4
  376. package/coverage/lcov-report/src/migrations/tests/index.html +26 -11
  377. package/coverage/lcov-report/src/migrations/tests/index.spec.ts.html +535 -0
  378. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +3 -3
  379. package/coverage/lcov-report/src/sdk/app/applications/index.html +20 -20
  380. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +6 -6
  381. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
  382. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +15 -15
  383. package/coverage/lcov-report/src/sdk/app/automations/index.html +7 -7
  384. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +5 -5
  385. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +14 -14
  386. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +5 -5
  387. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +30 -30
  388. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +45 -57
  389. package/coverage/lcov-report/src/sdk/app/backups/index.html +42 -42
  390. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +7 -7
  391. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
  392. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +493 -0
  393. package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
  394. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
  395. package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
  396. package/coverage/lcov-report/src/{utilities/statusCodes.ts.html → sdk/app/queries/index.ts.html} +22 -28
  397. package/coverage/lcov-report/src/{definitions/datasource.ts.html → sdk/app/queries/queries.ts.html} +82 -82
  398. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +8 -8
  399. package/coverage/lcov-report/src/sdk/app/rows/index.html +8 -8
  400. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +6 -6
  401. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  402. package/coverage/lcov-report/src/sdk/app/tables/index.html +15 -15
  403. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +30 -21
  404. package/coverage/lcov-report/src/sdk/index.html +7 -7
  405. package/coverage/lcov-report/src/sdk/index.ts.html +24 -12
  406. package/coverage/lcov-report/src/sdk/tests/attachments.spec.ts.html +313 -0
  407. package/coverage/lcov-report/src/sdk/tests/index.html +116 -0
  408. package/coverage/lcov-report/src/sdk/users/index.html +10 -10
  409. package/coverage/lcov-report/src/sdk/users/index.ts.html +5 -5
  410. package/coverage/lcov-report/src/sdk/users/utils.ts.html +35 -35
  411. package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
  412. package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
  413. package/coverage/lcov-report/src/startup.ts.html +48 -63
  414. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +421 -187
  415. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +20 -20
  416. package/coverage/lcov-report/src/tests/utilities/index.html +35 -35
  417. package/coverage/lcov-report/src/tests/utilities/index.ts.html +2 -2
  418. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +236 -47
  419. package/coverage/lcov-report/src/threads/automation.ts.html +212 -251
  420. package/coverage/lcov-report/src/threads/index.html +46 -46
  421. package/coverage/lcov-report/src/threads/index.ts.html +39 -39
  422. package/coverage/lcov-report/src/threads/query.ts.html +140 -101
  423. package/coverage/lcov-report/src/threads/utils.ts.html +29 -29
  424. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +5 -5
  425. package/coverage/lcov-report/src/utilities/centralPath.ts.html +11 -11
  426. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  427. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +20 -20
  428. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +601 -0
  429. package/coverage/lcov-report/src/utilities/fileSystem/index.html +88 -28
  430. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  431. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +277 -0
  432. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +9 -9
  433. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  434. package/coverage/lcov-report/src/utilities/global.ts.html +60 -60
  435. package/coverage/lcov-report/src/utilities/index.html +102 -117
  436. package/coverage/lcov-report/src/utilities/index.ts.html +47 -179
  437. package/coverage/lcov-report/src/utilities/redis.ts.html +38 -38
  438. package/coverage/lcov-report/src/utilities/{plugins.ts.html → retry.ts.html} +31 -43
  439. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  440. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  441. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +34 -34
  442. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +72 -45
  443. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +9 -9
  444. package/coverage/lcov-report/src/utilities/rowProcessor/tests/index.html +116 -0
  445. package/coverage/lcov-report/src/utilities/rowProcessor/tests/utils.spec.ts.html +256 -0
  446. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +52 -52
  447. package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +174 -234
  448. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +33 -33
  449. package/coverage/lcov-report/src/utilities/security.ts.html +30 -30
  450. package/coverage/lcov-report/src/utilities/usageQuota/index.html +9 -9
  451. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +37 -37
  452. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +3 -3
  453. package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
  454. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +92 -65
  455. package/coverage/lcov-report/src/watch.ts.html +20 -20
  456. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  457. package/coverage/lcov.info +24966 -17056
  458. package/dist/api/controllers/application.js +120 -109
  459. package/dist/api/controllers/cloud.js +6 -2
  460. package/dist/api/controllers/datasource.js +24 -15
  461. package/dist/api/controllers/deploy/index.js +43 -60
  462. package/dist/api/controllers/plugin/index.js +6 -6
  463. package/dist/api/controllers/public/applications.js +22 -1
  464. package/dist/api/controllers/query/index.js +23 -13
  465. package/dist/api/controllers/row/ExternalRequest.js +12 -4
  466. package/dist/api/controllers/row/external.js +20 -13
  467. package/dist/api/controllers/row/internal.js +52 -27
  468. package/dist/api/controllers/row/staticFormula.js +1 -1
  469. package/dist/api/controllers/row/utils.js +35 -3
  470. package/dist/api/controllers/static/index.js +47 -47
  471. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  472. package/dist/api/controllers/table/external.js +16 -35
  473. package/dist/api/controllers/table/index.js +44 -15
  474. package/dist/api/controllers/table/internal.js +6 -7
  475. package/dist/api/controllers/table/utils.js +9 -9
  476. package/dist/api/controllers/user.js +14 -6
  477. package/dist/api/controllers/view/exporters.js +22 -6
  478. package/dist/api/controllers/view/index.js +23 -58
  479. package/dist/api/controllers/view/viewBuilder.js +15 -2
  480. package/dist/api/controllers/webhook.js +45 -43
  481. package/dist/api/routes/analytics.js +2 -1
  482. package/dist/api/routes/apikeys.js +2 -1
  483. package/dist/api/routes/application.js +5 -1
  484. package/dist/api/routes/auth.js +2 -1
  485. package/dist/api/routes/automation.js +2 -1
  486. package/dist/api/routes/backup.js +2 -1
  487. package/dist/api/routes/cloud.js +2 -1
  488. package/dist/api/routes/component.js +2 -1
  489. package/dist/api/routes/datasource.js +2 -1
  490. package/dist/api/routes/deploy.js +3 -3
  491. package/dist/api/routes/dev.js +2 -1
  492. package/dist/api/routes/index.js +2 -0
  493. package/dist/api/routes/integration.js +2 -1
  494. package/dist/api/routes/layout.js +2 -1
  495. package/dist/api/routes/metadata.js +2 -1
  496. package/dist/api/routes/migrations.js +2 -1
  497. package/dist/api/routes/permission.js +2 -1
  498. package/dist/api/routes/public/applications.js +37 -0
  499. package/dist/api/routes/public/middleware/mapper.js +3 -0
  500. package/dist/api/routes/query.js +2 -1
  501. package/dist/api/routes/role.js +2 -1
  502. package/dist/api/routes/routing.js +2 -1
  503. package/dist/api/routes/row.js +2 -2
  504. package/dist/api/routes/screen.js +2 -1
  505. package/dist/api/routes/script.js +2 -1
  506. package/dist/api/routes/static.js +6 -5
  507. package/dist/api/routes/table.js +8 -38
  508. package/dist/api/routes/templates.js +2 -1
  509. package/dist/api/routes/user.js +2 -1
  510. package/dist/api/routes/utils/validators.js +1 -1
  511. package/dist/api/routes/view.js +2 -1
  512. package/dist/api/routes/webhook.js +2 -1
  513. package/dist/app.js +10 -8
  514. package/dist/automations/automationUtils.js +26 -1
  515. package/dist/automations/logging/index.js +5 -25
  516. package/dist/automations/triggers.js +1 -0
  517. package/dist/db/index.js +5 -2
  518. package/dist/db/linkedRows/LinkController.js +2 -1
  519. package/dist/db/linkedRows/LinkDocument.js +2 -1
  520. package/dist/db/newid.js +4 -2
  521. package/dist/definitions/datasource.js +0 -6
  522. package/dist/environment.js +7 -2
  523. package/dist/events/AutomationEmitter.js +2 -1
  524. package/dist/events/BudibaseEmitter.js +2 -1
  525. package/dist/events/index.js +2 -1
  526. package/dist/index.js +2 -2
  527. package/dist/integrations/base/query.js +7 -2
  528. package/dist/integrations/base/sqlTable.js +14 -14
  529. package/dist/integrations/couchdb.js +34 -8
  530. package/dist/integrations/dynamodb.js +8 -5
  531. package/dist/integrations/elasticsearch.js +7 -3
  532. package/dist/integrations/googlesheets.js +1 -1
  533. package/dist/integrations/index.js +6 -7
  534. package/dist/integrations/mongodb.js +311 -271
  535. package/dist/integrations/mysql.js +2 -2
  536. package/dist/integrations/queries/sql.js +73 -100
  537. package/dist/integrations/rest.js +16 -18
  538. package/dist/middleware/authorized.js +2 -1
  539. package/dist/middleware/builder.js +4 -2
  540. package/dist/middleware/currentapp.js +6 -3
  541. package/dist/middleware/publicApi.js +4 -2
  542. package/dist/middleware/selfhost.js +4 -1
  543. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  544. package/dist/package.json +14 -8
  545. package/dist/sdk/app/backups/imports.js +2 -6
  546. package/dist/sdk/app/datasources/datasources.js +147 -0
  547. package/dist/sdk/app/datasources/index.js +27 -0
  548. package/dist/sdk/app/queries/index.js +27 -0
  549. package/dist/sdk/app/queries/queries.js +60 -0
  550. package/dist/sdk/app/tables/index.js +6 -2
  551. package/dist/sdk/index.js +4 -0
  552. package/dist/sdk/utils/index.js +29 -0
  553. package/dist/startup.js +17 -17
  554. package/dist/threads/automation.js +22 -35
  555. package/dist/threads/index.js +4 -4
  556. package/dist/threads/query.js +27 -13
  557. package/dist/tsconfig.build.tsbuildinfo +1 -1
  558. package/dist/utilities/fileSystem/app.js +97 -0
  559. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  560. package/dist/utilities/fileSystem/filesystem.js +184 -0
  561. package/dist/utilities/fileSystem/index.js +18 -342
  562. package/dist/utilities/fileSystem/plugin.js +66 -0
  563. package/dist/utilities/fileSystem/template.js +47 -0
  564. package/dist/utilities/index.js +1 -44
  565. package/dist/utilities/retry.js +30 -0
  566. package/dist/utilities/rowProcessor/index.js +12 -4
  567. package/dist/utilities/schema.js +108 -0
  568. package/dist/utilities/scriptRunner.js +2 -1
  569. package/dist/utilities/statusCodes.js +2 -1
  570. package/dist/utilities/workerRequests.js +2 -0
  571. package/dist/watch.js +2 -25
  572. package/jest-testcontainers-config.js +8 -0
  573. package/jest.config.ts +33 -13
  574. package/package.json +15 -9
  575. package/scripts/dev/manage.js +3 -2
  576. package/specs/openapi.json +84 -0
  577. package/specs/openapi.yaml +53 -0
  578. package/specs/resources/application.js +19 -0
  579. package/src/api/controllers/application.ts +142 -110
  580. package/src/api/controllers/auth.ts +2 -2
  581. package/src/api/controllers/cloud.ts +10 -6
  582. package/src/api/controllers/datasource.ts +33 -25
  583. package/src/api/controllers/deploy/Deployment.ts +1 -0
  584. package/src/api/controllers/deploy/index.ts +40 -58
  585. package/src/api/controllers/plugin/index.ts +14 -9
  586. package/src/api/controllers/public/applications.ts +17 -0
  587. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  588. package/src/api/controllers/query/index.ts +49 -41
  589. package/src/api/controllers/row/ExternalRequest.ts +8 -3
  590. package/src/api/controllers/row/external.ts +24 -14
  591. package/src/api/controllers/row/internal.ts +66 -41
  592. package/src/api/controllers/row/staticFormula.ts +5 -2
  593. package/src/api/controllers/row/utils.ts +42 -3
  594. package/src/api/controllers/static/index.ts +22 -27
  595. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  596. package/src/api/controllers/table/external.ts +18 -16
  597. package/src/api/controllers/table/index.ts +46 -17
  598. package/src/api/controllers/table/internal.ts +6 -7
  599. package/src/api/controllers/table/utils.ts +12 -13
  600. package/src/api/controllers/user.ts +21 -13
  601. package/src/api/controllers/view/exporters.ts +20 -5
  602. package/src/api/controllers/view/index.ts +30 -42
  603. package/src/api/controllers/view/tests/viewBuilder.spec.js +1 -1
  604. package/src/api/controllers/view/viewBuilder.ts +1 -1
  605. package/src/api/controllers/webhook.ts +48 -46
  606. package/src/api/routes/analytics.ts +1 -1
  607. package/src/api/routes/apikeys.ts +1 -1
  608. package/src/api/routes/application.ts +12 -1
  609. package/src/api/routes/auth.ts +1 -1
  610. package/src/api/routes/automation.ts +1 -1
  611. package/src/api/routes/backup.ts +1 -1
  612. package/src/api/routes/cloud.ts +1 -1
  613. package/src/api/routes/component.ts +1 -1
  614. package/src/api/routes/datasource.ts +1 -1
  615. package/src/api/routes/deploy.ts +1 -2
  616. package/src/api/routes/dev.ts +1 -1
  617. package/src/api/routes/index.ts +6 -3
  618. package/src/api/routes/integration.ts +1 -1
  619. package/src/api/routes/layout.ts +1 -1
  620. package/src/api/routes/metadata.ts +1 -1
  621. package/src/api/routes/migrations.ts +1 -1
  622. package/src/api/routes/permission.ts +1 -1
  623. package/src/api/routes/public/applications.ts +44 -0
  624. package/src/api/routes/public/middleware/mapper.ts +4 -0
  625. package/src/api/routes/query.ts +1 -1
  626. package/src/api/routes/role.ts +1 -1
  627. package/src/api/routes/routing.ts +1 -1
  628. package/src/api/routes/row.ts +1 -1
  629. package/src/api/routes/screen.ts +1 -1
  630. package/src/api/routes/script.ts +1 -1
  631. package/src/api/routes/static.ts +2 -2
  632. package/src/api/routes/table.ts +16 -39
  633. package/src/api/routes/templates.ts +1 -1
  634. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +1 -1
  635. package/src/api/routes/tests/analytics.spec.js +4 -1
  636. package/src/api/routes/tests/apikeys.spec.js +1 -1
  637. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +112 -22
  638. package/src/api/routes/tests/auth.spec.js +2 -2
  639. package/src/api/routes/tests/automation.spec.js +5 -1
  640. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -15
  641. package/src/api/routes/tests/cloud.seq.spec.ts +59 -0
  642. package/src/api/routes/tests/component.spec.js +1 -1
  643. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  644. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  645. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  646. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +76 -17
  647. package/src/api/routes/tests/dev.spec.js +1 -1
  648. package/src/api/routes/tests/integration.spec.js +1 -1
  649. package/src/api/routes/tests/layout.spec.js +1 -1
  650. package/src/api/routes/tests/metadata.spec.js +1 -1
  651. package/src/api/routes/tests/misc.spec.js +5 -11
  652. package/src/api/routes/tests/permissions.spec.js +5 -2
  653. package/src/api/routes/tests/plugin.spec.ts +179 -0
  654. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +21 -1
  655. package/src/api/routes/tests/role.spec.js +6 -1
  656. package/src/api/routes/tests/routing.spec.js +2 -3
  657. package/src/api/routes/tests/row.spec.js +15 -5
  658. package/src/api/routes/tests/screen.spec.js +1 -1
  659. package/src/api/routes/tests/static.spec.js +4 -18
  660. package/src/api/routes/tests/table.spec.js +17 -33
  661. package/src/api/routes/tests/templates.spec.js +1 -1
  662. package/src/api/routes/tests/user.spec.js +108 -0
  663. package/src/api/routes/tests/utilities/TestFunctions.ts +26 -3
  664. package/src/api/routes/tests/utilities/index.ts +7 -5
  665. package/src/api/routes/tests/view.spec.js +4 -1
  666. package/src/api/routes/tests/webhook.spec.js +12 -3
  667. package/src/api/routes/user.ts +1 -1
  668. package/src/api/routes/utils/validators.ts +1 -1
  669. package/src/api/routes/view.ts +1 -1
  670. package/src/api/routes/webhook.ts +1 -1
  671. package/src/app.ts +7 -4
  672. package/src/automations/automationUtils.ts +24 -0
  673. package/src/automations/logging/index.ts +1 -1
  674. package/src/automations/tests/automation.spec.js +4 -4
  675. package/src/automations/tests/bash.spec.js +34 -0
  676. package/src/automations/tests/discord.spec.js +27 -0
  677. package/src/automations/tests/executeQuery.spec.js +48 -0
  678. package/src/automations/tests/executeScript.spec.js +48 -0
  679. package/src/automations/tests/loop.spec.ts +45 -0
  680. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  681. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  682. package/src/automations/tests/serverLog.spec.js +22 -0
  683. package/src/automations/tests/updateRow.spec.js +1 -1
  684. package/src/automations/tests/utilities/index.ts +2 -2
  685. package/src/automations/tests/zapier.spec.js +27 -0
  686. package/src/automations/triggers.ts +6 -1
  687. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  688. package/src/db/index.ts +1 -1
  689. package/src/db/linkedRows/LinkController.ts +1 -1
  690. package/src/db/linkedRows/LinkDocument.ts +1 -1
  691. package/src/db/newid.ts +1 -1
  692. package/src/db/tests/linkController.spec.js +5 -2
  693. package/src/db/tests/linkTests.spec.js +1 -1
  694. package/src/definitions/automations.ts +1 -0
  695. package/src/definitions/datasource.ts +0 -41
  696. package/src/definitions/openapi.ts +10 -0
  697. package/src/environment.ts +6 -2
  698. package/src/events/AutomationEmitter.ts +1 -1
  699. package/src/events/BudibaseEmitter.ts +1 -1
  700. package/src/events/index.ts +1 -1
  701. package/src/index.ts +1 -1
  702. package/src/integrations/base/query.ts +3 -1
  703. package/src/integrations/base/sqlTable.ts +1 -1
  704. package/src/integrations/couchdb.ts +40 -14
  705. package/src/integrations/dynamodb.ts +3 -3
  706. package/src/integrations/elasticsearch.ts +8 -4
  707. package/src/integrations/googlesheets.ts +1 -1
  708. package/src/integrations/index.ts +5 -9
  709. package/src/integrations/mongodb.ts +315 -271
  710. package/src/integrations/mysql.ts +1 -1
  711. package/src/integrations/queries/sql.ts +5 -50
  712. package/src/integrations/rest.ts +16 -19
  713. package/src/integrations/tests/couchdb.spec.ts +33 -21
  714. package/src/integrations/tests/rest.spec.ts +19 -15
  715. package/src/middleware/authorized.ts +5 -1
  716. package/src/middleware/builder.ts +1 -1
  717. package/src/middleware/currentapp.ts +4 -3
  718. package/src/middleware/publicApi.ts +1 -1
  719. package/src/middleware/selfhost.ts +1 -1
  720. package/src/middleware/tests/authorized.spec.js +1 -1
  721. package/src/middleware/tests/currentapp.spec.js +1 -1
  722. package/src/middleware/tests/selfhost.spec.js +1 -1
  723. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  724. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  725. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  726. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  727. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
  728. package/src/migrations/tests/index.spec.ts +3 -2
  729. package/src/sdk/app/backups/imports.ts +2 -6
  730. package/src/sdk/app/datasources/datasources.ts +136 -0
  731. package/src/sdk/app/datasources/index.ts +5 -0
  732. package/src/sdk/app/queries/index.ts +5 -0
  733. package/src/sdk/app/queries/queries.ts +50 -0
  734. package/src/sdk/app/tables/index.ts +6 -3
  735. package/src/sdk/index.ts +4 -0
  736. package/src/sdk/tests/attachments.spec.ts +1 -4
  737. package/src/sdk/utils/index.ts +16 -0
  738. package/src/startup.ts +3 -8
  739. package/src/tests/jestEnv.ts +9 -0
  740. package/src/tests/jestSetup.ts +8 -20
  741. package/src/tests/utilities/TestConfiguration.ts +127 -49
  742. package/src/tests/utilities/structures.ts +65 -2
  743. package/src/threads/automation.ts +22 -35
  744. package/src/threads/definitions.ts +3 -0
  745. package/src/threads/index.ts +1 -1
  746. package/src/threads/query.ts +28 -15
  747. package/src/utilities/fileSystem/app.ts +86 -0
  748. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  749. package/src/utilities/fileSystem/filesystem.ts +172 -0
  750. package/src/utilities/fileSystem/index.ts +5 -348
  751. package/src/utilities/fileSystem/plugin.ts +64 -0
  752. package/src/utilities/fileSystem/template.ts +36 -0
  753. package/src/utilities/index.ts +1 -45
  754. package/src/utilities/retry.ts +18 -0
  755. package/src/utilities/rowProcessor/index.ts +17 -8
  756. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  757. package/src/utilities/schema.ts +141 -0
  758. package/src/utilities/scriptRunner.ts +1 -1
  759. package/src/utilities/statusCodes.ts +1 -1
  760. package/src/utilities/workerRequests.ts +10 -1
  761. package/src/watch.ts +1 -1
  762. package/tsconfig.build.json +2 -0
  763. package/tsconfig.json +2 -1
  764. package/builder/assets/index.96b9ffed.css +0 -6
  765. package/builder/assets/index.fae8f9eb.js +0 -1024
  766. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  767. package/dist/api/routes/tests/utilities/index.js +0 -131
  768. package/dist/automations/tests/utilities/index.js +0 -81
  769. package/dist/tests/utilities/TestConfiguration.js +0 -562
  770. package/dist/tests/utilities/controllers.js +0 -40
  771. package/dist/tests/utilities/structures.js +0 -168
  772. package/dist/utilities/csvParser.js +0 -152
  773. package/dist/utilities/plugins.js +0 -26
  774. package/src/api/routes/tests/deployment.spec.ts +0 -25
  775. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  776. package/src/utilities/csvParser.ts +0 -161
  777. package/src/utilities/plugins.ts +0 -22
  778. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  779. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">88.8% </span>
26
+ <span class="strong">89.65% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>246/277</span>
28
+ <span class='fraction'>260/290</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">68.03% </span>
33
+ <span class="strong">65.47% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>83/122</span>
35
+ <span class='fraction'>55/84</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">92.85% </span>
40
+ <span class="strong">94.54% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>39/42</span>
42
+ <span class='fraction'>52/55</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">88.38% </span>
47
+ <span class="strong">89.28% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>236/267</span>
49
+ <span class='fraction'>250/280</span>
50
50
  </div>
51
51
 
52
52
 
@@ -665,15 +665,46 @@
665
665
  <a name='L600'></a><a href='#L600'>600</a>
666
666
  <a name='L601'></a><a href='#L601'>601</a>
667
667
  <a name='L602'></a><a href='#L602'>602</a>
668
- <a name='L603'></a><a href='#L603'>603</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">46x</span>
669
- <span class="cline-any cline-yes">46x</span>
670
- <span class="cline-any cline-yes">46x</span>
668
+ <a name='L603'></a><a href='#L603'>603</a>
669
+ <a name='L604'></a><a href='#L604'>604</a>
670
+ <a name='L605'></a><a href='#L605'>605</a>
671
+ <a name='L606'></a><a href='#L606'>606</a>
672
+ <a name='L607'></a><a href='#L607'>607</a>
673
+ <a name='L608'></a><a href='#L608'>608</a>
674
+ <a name='L609'></a><a href='#L609'>609</a>
675
+ <a name='L610'></a><a href='#L610'>610</a>
676
+ <a name='L611'></a><a href='#L611'>611</a>
677
+ <a name='L612'></a><a href='#L612'>612</a>
678
+ <a name='L613'></a><a href='#L613'>613</a>
679
+ <a name='L614'></a><a href='#L614'>614</a>
680
+ <a name='L615'></a><a href='#L615'>615</a>
681
+ <a name='L616'></a><a href='#L616'>616</a>
682
+ <a name='L617'></a><a href='#L617'>617</a>
683
+ <a name='L618'></a><a href='#L618'>618</a>
684
+ <a name='L619'></a><a href='#L619'>619</a>
685
+ <a name='L620'></a><a href='#L620'>620</a>
686
+ <a name='L621'></a><a href='#L621'>621</a>
687
+ <a name='L622'></a><a href='#L622'>622</a>
688
+ <a name='L623'></a><a href='#L623'>623</a>
689
+ <a name='L624'></a><a href='#L624'>624</a>
690
+ <a name='L625'></a><a href='#L625'>625</a>
691
+ <a name='L626'></a><a href='#L626'>626</a>
692
+ <a name='L627'></a><a href='#L627'>627</a>
693
+ <a name='L628'></a><a href='#L628'>628</a>
694
+ <a name='L629'></a><a href='#L629'>629</a>
695
+ <a name='L630'></a><a href='#L630'>630</a>
696
+ <a name='L631'></a><a href='#L631'>631</a>
697
+ <a name='L632'></a><a href='#L632'>632</a>
698
+ <a name='L633'></a><a href='#L633'>633</a>
699
+ <a name='L634'></a><a href='#L634'>634</a>
700
+ <a name='L635'></a><a href='#L635'>635</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">55x</span>
701
+ <span class="cline-any cline-yes">55x</span>
671
702
  <span class="cline-any cline-neutral">&nbsp;</span>
672
703
  <span class="cline-any cline-neutral">&nbsp;</span>
673
704
  <span class="cline-any cline-neutral">&nbsp;</span>
674
705
  <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-yes">46x</span>
676
- <span class="cline-any cline-yes">46x</span>
706
+ <span class="cline-any cline-yes">55x</span>
707
+ <span class="cline-any cline-yes">55x</span>
677
708
  <span class="cline-any cline-neutral">&nbsp;</span>
678
709
  <span class="cline-any cline-neutral">&nbsp;</span>
679
710
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -681,7 +712,7 @@
681
712
  <span class="cline-any cline-neutral">&nbsp;</span>
682
713
  <span class="cline-any cline-neutral">&nbsp;</span>
683
714
  <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-yes">46x</span>
715
+ <span class="cline-any cline-yes">55x</span>
685
716
  <span class="cline-any cline-neutral">&nbsp;</span>
686
717
  <span class="cline-any cline-neutral">&nbsp;</span>
687
718
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -691,35 +722,33 @@
691
722
  <span class="cline-any cline-neutral">&nbsp;</span>
692
723
  <span class="cline-any cline-neutral">&nbsp;</span>
693
724
  <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-yes">46x</span>
695
- <span class="cline-any cline-yes">46x</span>
696
- <span class="cline-any cline-yes">46x</span>
697
- <span class="cline-any cline-yes">46x</span>
698
725
  <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-yes">55x</span>
727
+ <span class="cline-any cline-yes">55x</span>
728
+ <span class="cline-any cline-yes">55x</span>
729
+ <span class="cline-any cline-yes">55x</span>
730
+ <span class="cline-any cline-yes">55x</span>
731
+ <span class="cline-any cline-yes">55x</span>
699
732
  <span class="cline-any cline-neutral">&nbsp;</span>
700
733
  <span class="cline-any cline-neutral">&nbsp;</span>
701
734
  <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-yes">46x</span>
703
- <span class="cline-any cline-yes">46x</span>
704
735
  <span class="cline-any cline-neutral">&nbsp;</span>
705
736
  <span class="cline-any cline-neutral">&nbsp;</span>
737
+ <span class="cline-any cline-yes">55x</span>
738
+ <span class="cline-any cline-yes">55x</span>
739
+ <span class="cline-any cline-yes">55x</span>
740
+ <span class="cline-any cline-yes">55x</span>
706
741
  <span class="cline-any cline-neutral">&nbsp;</span>
707
742
  <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-yes">46x</span>
709
- <span class="cline-any cline-yes">46x</span>
710
- <span class="cline-any cline-yes">46x</span>
711
- <span class="cline-any cline-yes">46x</span>
712
- <span class="cline-any cline-yes">46x</span>
713
743
  <span class="cline-any cline-neutral">&nbsp;</span>
714
744
  <span class="cline-any cline-neutral">&nbsp;</span>
715
745
  <span class="cline-any cline-neutral">&nbsp;</span>
716
746
  <span class="cline-any cline-neutral">&nbsp;</span>
717
747
  <span class="cline-any cline-neutral">&nbsp;</span>
718
748
  <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-yes">46x</span>
721
- <span class="cline-any cline-yes">46x</span>
722
- <span class="cline-any cline-yes">46x</span>
749
+ <span class="cline-any cline-yes">55x</span>
750
+ <span class="cline-any cline-yes">55x</span>
751
+ <span class="cline-any cline-yes">55x</span>
723
752
  <span class="cline-any cline-neutral">&nbsp;</span>
724
753
  <span class="cline-any cline-neutral">&nbsp;</span>
725
754
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -756,10 +785,10 @@
756
785
  <span class="cline-any cline-neutral">&nbsp;</span>
757
786
  <span class="cline-any cline-neutral">&nbsp;</span>
758
787
  <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-yes">254x</span>
760
- <span class="cline-any cline-yes">4x</span>
788
+ <span class="cline-any cline-yes">131x</span>
789
+ <span class="cline-any cline-yes">8x</span>
761
790
  <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-yes">1169x</span>
791
+ <span class="cline-any cline-yes">131x</span>
763
792
  <span class="cline-any cline-no">&nbsp;</span>
764
793
  <span class="cline-any cline-neutral">&nbsp;</span>
765
794
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -771,25 +800,24 @@
771
800
  <span class="cline-any cline-neutral">&nbsp;</span>
772
801
  <span class="cline-any cline-neutral">&nbsp;</span>
773
802
  <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-yes">254x</span>
803
+ <span class="cline-any cline-yes">131x</span>
775
804
  <span class="cline-any cline-no">&nbsp;</span>
776
805
  <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-yes">254x</span>
778
- <span class="cline-any cline-yes">4x</span>
806
+ <span class="cline-any cline-yes">131x</span>
807
+ <span class="cline-any cline-yes">8x</span>
779
808
  <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-yes">1169x</span>
809
+ <span class="cline-any cline-yes">131x</span>
781
810
  <span class="cline-any cline-no">&nbsp;</span>
782
811
  <span class="cline-any cline-neutral">&nbsp;</span>
783
812
  <span class="cline-any cline-neutral">&nbsp;</span>
784
813
  <span class="cline-any cline-neutral">&nbsp;</span>
785
814
  <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-yes">251x</span>
787
- <span class="cline-any cline-yes">251x</span>
788
- <span class="cline-any cline-yes">251x</span>
789
- <span class="cline-any cline-yes">251x</span>
790
815
  <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-yes">251x</span>
792
- <span class="cline-any cline-yes">251x</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span>
817
+ <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-neutral">&nbsp;</span>
819
+ <span class="cline-any cline-yes">128x</span>
820
+ <span class="cline-any cline-yes">128x</span>
793
821
  <span class="cline-any cline-neutral">&nbsp;</span>
794
822
  <span class="cline-any cline-neutral">&nbsp;</span>
795
823
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -798,30 +826,30 @@
798
826
  <span class="cline-any cline-neutral">&nbsp;</span>
799
827
  <span class="cline-any cline-neutral">&nbsp;</span>
800
828
  <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-yes">251x</span>
802
- <span class="cline-any cline-yes">251x</span>
803
- <span class="cline-any cline-yes">251x</span>
829
+ <span class="cline-any cline-yes">128x</span>
830
+ <span class="cline-any cline-yes">128x</span>
831
+ <span class="cline-any cline-yes">128x</span>
804
832
  <span class="cline-any cline-neutral">&nbsp;</span>
805
833
  <span class="cline-any cline-neutral">&nbsp;</span>
806
834
  <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-yes">251x</span>
835
+ <span class="cline-any cline-yes">128x</span>
808
836
  <span class="cline-any cline-yes">1x</span>
809
837
  <span class="cline-any cline-yes">1x</span>
810
838
  <span class="cline-any cline-no">&nbsp;</span>
811
839
  <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-yes">250x</span>
840
+ <span class="cline-any cline-yes">127x</span>
813
841
  <span class="cline-any cline-yes">2x</span>
814
842
  <span class="cline-any cline-neutral">&nbsp;</span>
815
843
  <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-yes">248x</span>
844
+ <span class="cline-any cline-yes">125x</span>
817
845
  <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-yes">248x</span>
846
+ <span class="cline-any cline-yes">125x</span>
819
847
  <span class="cline-any cline-neutral">&nbsp;</span>
820
848
  <span class="cline-any cline-no">&nbsp;</span>
821
849
  <span class="cline-any cline-neutral">&nbsp;</span>
822
850
  <span class="cline-any cline-neutral">&nbsp;</span>
823
851
  <span class="cline-any cline-neutral">&nbsp;</span>
824
- <span class="cline-any cline-yes">251x</span>
852
+ <span class="cline-any cline-yes">128x</span>
825
853
  <span class="cline-any cline-neutral">&nbsp;</span>
826
854
  <span class="cline-any cline-neutral">&nbsp;</span>
827
855
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -831,32 +859,32 @@
831
859
  <span class="cline-any cline-no">&nbsp;</span>
832
860
  <span class="cline-any cline-neutral">&nbsp;</span>
833
861
  <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-yes">46x</span>
835
- <span class="cline-any cline-yes">15x</span>
836
- <span class="cline-any cline-yes">15x</span>
837
- <span class="cline-any cline-yes">15x</span>
862
+ <span class="cline-any cline-yes">56x</span>
863
+ <span class="cline-any cline-yes">4x</span>
864
+ <span class="cline-any cline-yes">4x</span>
865
+ <span class="cline-any cline-yes">4x</span>
838
866
  <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-yes">15x</span>
840
- <span class="cline-any cline-yes">23x</span>
841
- <span class="cline-any cline-yes">23x</span>
867
+ <span class="cline-any cline-yes">4x</span>
868
+ <span class="cline-any cline-yes">10x</span>
869
+ <span class="cline-any cline-yes">10x</span>
842
870
  <span class="cline-any cline-neutral">&nbsp;</span>
843
- <span class="cline-any cline-yes">15x</span>
844
- <span class="cline-any cline-yes">15x</span>
845
- <span class="cline-any cline-yes">15x</span>
846
- <span class="cline-any cline-yes">23x</span>
847
- <span class="cline-any cline-yes">23x</span>
871
+ <span class="cline-any cline-yes">4x</span>
872
+ <span class="cline-any cline-yes">4x</span>
873
+ <span class="cline-any cline-yes">4x</span>
874
+ <span class="cline-any cline-yes">10x</span>
875
+ <span class="cline-any cline-yes">10x</span>
848
876
  <span class="cline-any cline-no">&nbsp;</span>
849
877
  <span class="cline-any cline-neutral">&nbsp;</span>
850
878
  <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-yes">23x</span>
879
+ <span class="cline-any cline-yes">10x</span>
852
880
  <span class="cline-any cline-neutral">&nbsp;</span>
853
881
  <span class="cline-any cline-neutral">&nbsp;</span>
854
882
  <span class="cline-any cline-neutral">&nbsp;</span>
855
883
  <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-yes">15x</span>
884
+ <span class="cline-any cline-yes">4x</span>
857
885
  <span class="cline-any cline-neutral">&nbsp;</span>
858
886
  <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-yes">46x</span>
887
+ <span class="cline-any cline-yes">55x</span>
860
888
  <span class="cline-any cline-yes">1x</span>
861
889
  <span class="cline-any cline-yes">1x</span>
862
890
  <span class="cline-any cline-yes">1x</span>
@@ -871,7 +899,7 @@
871
899
  <span class="cline-any cline-neutral">&nbsp;</span>
872
900
  <span class="cline-any cline-neutral">&nbsp;</span>
873
901
  <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-yes">46x</span>
902
+ <span class="cline-any cline-yes">59x</span>
875
903
  <span class="cline-any cline-yes">6x</span>
876
904
  <span class="cline-any cline-yes">6x</span>
877
905
  <span class="cline-any cline-yes">6x</span>
@@ -881,6 +909,8 @@
881
909
  <span class="cline-any cline-yes">6x</span>
882
910
  <span class="cline-any cline-neutral">&nbsp;</span>
883
911
  <span class="cline-any cline-neutral">&nbsp;</span>
912
+ <span class="cline-any cline-neutral">&nbsp;</span>
913
+ <span class="cline-any cline-neutral">&nbsp;</span>
884
914
  <span class="cline-any cline-yes">6x</span>
885
915
  <span class="cline-any cline-no">&nbsp;</span>
886
916
  <span class="cline-any cline-no">&nbsp;</span>
@@ -892,32 +922,44 @@
892
922
  <span class="cline-any cline-neutral">&nbsp;</span>
893
923
  <span class="cline-any cline-neutral">&nbsp;</span>
894
924
  <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-yes">6x</span>
926
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
927
  <span class="cline-any cline-neutral">&nbsp;</span>
896
928
  <span class="cline-any cline-neutral">&nbsp;</span>
897
929
  <span class="cline-any cline-neutral">&nbsp;</span>
898
930
  <span class="cline-any cline-neutral">&nbsp;</span>
899
- <span class="cline-any cline-yes">251x</span>
900
- <span class="cline-any cline-yes">251x</span>
901
- <span class="cline-any cline-yes">251x</span>
902
- <span class="cline-any cline-yes">251x</span>
903
- <span class="cline-any cline-yes">251x</span>
904
- <span class="cline-any cline-yes">251x</span>
905
931
  <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-yes">251x</span>
907
- <span class="cline-any cline-yes">251x</span>
908
932
  <span class="cline-any cline-neutral">&nbsp;</span>
909
933
  <span class="cline-any cline-neutral">&nbsp;</span>
934
+ <span class="cline-any cline-yes">128x</span>
935
+ <span class="cline-any cline-yes">128x</span>
936
+ <span class="cline-any cline-yes">128x</span>
937
+ <span class="cline-any cline-yes">128x</span>
938
+ <span class="cline-any cline-yes">128x</span>
939
+ <span class="cline-any cline-yes">128x</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-yes">128x</span>
942
+ <span class="cline-any cline-yes">128x</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-yes">128x</span>
948
+ <span class="cline-any cline-yes">4x</span>
949
+ <span class="cline-any cline-neutral">&nbsp;</span>
950
+ <span class="cline-any cline-yes">128x</span>
951
+ <span class="cline-any cline-yes">128x</span>
952
+ <span class="cline-any cline-yes">128x</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-yes">128x</span>
955
+ <span class="cline-any cline-yes">128x</span>
956
+ <span class="cline-any cline-neutral">&nbsp;</span>
910
957
  <span class="cline-any cline-neutral">&nbsp;</span>
911
958
  <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-yes">251x</span>
913
- <span class="cline-any cline-yes">2x</span>
914
959
  <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-yes">251x</span>
916
- <span class="cline-any cline-yes">251x</span>
917
- <span class="cline-any cline-yes">251x</span>
918
- <span class="cline-any cline-yes">251x</span>
960
+ <span class="cline-any cline-yes">128x</span>
919
961
  <span class="cline-any cline-neutral">&nbsp;</span>
920
- <span class="cline-any cline-yes">251x</span>
962
+ <span class="cline-any cline-yes">128x</span>
921
963
  <span class="cline-any cline-neutral">&nbsp;</span>
922
964
  <span class="cline-any cline-neutral">&nbsp;</span>
923
965
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -952,8 +994,8 @@
952
994
  <span class="cline-any cline-neutral">&nbsp;</span>
953
995
  <span class="cline-any cline-neutral">&nbsp;</span>
954
996
  <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-yes">251x</span>
956
- <span class="cline-any cline-yes">251x</span>
997
+ <span class="cline-any cline-yes">128x</span>
998
+ <span class="cline-any cline-yes">128x</span>
957
999
  <span class="cline-any cline-yes">1x</span>
958
1000
  <span class="cline-any cline-neutral">&nbsp;</span>
959
1001
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -979,23 +1021,24 @@
979
1021
  <span class="cline-any cline-neutral">&nbsp;</span>
980
1022
  <span class="cline-any cline-neutral">&nbsp;</span>
981
1023
  <span class="cline-any cline-neutral">&nbsp;</span>
982
- <span class="cline-any cline-yes">251x</span>
983
- <span class="cline-any cline-yes">251x</span>
1024
+ <span class="cline-any cline-yes">128x</span>
1025
+ <span class="cline-any cline-yes">128x</span>
984
1026
  <span class="cline-any cline-neutral">&nbsp;</span>
985
1027
  <span class="cline-any cline-neutral">&nbsp;</span>
986
1028
  <span class="cline-any cline-neutral">&nbsp;</span>
987
1029
  <span class="cline-any cline-neutral">&nbsp;</span>
988
1030
  <span class="cline-any cline-neutral">&nbsp;</span>
989
1031
  <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-yes">251x</span>
991
- <span class="cline-any cline-yes">251x</span>
1032
+ <span class="cline-any cline-yes">128x</span>
1033
+ <span class="cline-any cline-yes">128x</span>
992
1034
  <span class="cline-any cline-neutral">&nbsp;</span>
993
1035
  <span class="cline-any cline-neutral">&nbsp;</span>
994
1036
  <span class="cline-any cline-neutral">&nbsp;</span>
995
- <span class="cline-any cline-yes">251x</span>
996
1037
  <span class="cline-any cline-neutral">&nbsp;</span>
997
- <span class="cline-any cline-yes">251x</span>
998
- <span class="cline-any cline-yes">251x</span>
1038
+ <span class="cline-any cline-yes">128x</span>
1039
+ <span class="cline-any cline-neutral">&nbsp;</span>
1040
+ <span class="cline-any cline-yes">128x</span>
1041
+ <span class="cline-any cline-yes">128x</span>
999
1042
  <span class="cline-any cline-neutral">&nbsp;</span>
1000
1043
  <span class="cline-any cline-yes">3x</span>
1001
1044
  <span class="cline-any cline-yes">1x</span>
@@ -1009,23 +1052,23 @@
1009
1052
  <span class="cline-any cline-no">&nbsp;</span>
1010
1053
  <span class="cline-any cline-neutral">&nbsp;</span>
1011
1054
  <span class="cline-any cline-neutral">&nbsp;</span>
1012
- <span class="cline-any cline-yes">251x</span>
1055
+ <span class="cline-any cline-yes">128x</span>
1013
1056
  <span class="cline-any cline-neutral">&nbsp;</span>
1014
- <span class="cline-any cline-yes">251x</span>
1015
- <span class="cline-any cline-yes">254x</span>
1057
+ <span class="cline-any cline-yes">128x</span>
1058
+ <span class="cline-any cline-yes">131x</span>
1016
1059
  <span class="cline-any cline-neutral">&nbsp;</span>
1017
1060
  <span class="cline-any cline-neutral">&nbsp;</span>
1018
1061
  <span class="cline-any cline-neutral">&nbsp;</span>
1019
1062
  <span class="cline-any cline-neutral">&nbsp;</span>
1020
- <span class="cline-any cline-yes">251x</span>
1021
- <span class="cline-any cline-yes">251x</span>
1063
+ <span class="cline-any cline-yes">128x</span>
1064
+ <span class="cline-any cline-yes">128x</span>
1022
1065
  <span class="cline-any cline-neutral">&nbsp;</span>
1023
1066
  <span class="cline-any cline-neutral">&nbsp;</span>
1024
1067
  <span class="cline-any cline-neutral">&nbsp;</span>
1025
1068
  <span class="cline-any cline-neutral">&nbsp;</span>
1026
- <span class="cline-any cline-yes">251x</span>
1069
+ <span class="cline-any cline-yes">128x</span>
1027
1070
  <span class="cline-any cline-neutral">&nbsp;</span>
1028
- <span class="cline-any cline-yes">251x</span>
1071
+ <span class="cline-any cline-yes">128x</span>
1029
1072
  <span class="cline-any cline-yes">3x</span>
1030
1073
  <span class="cline-any cline-yes">3x</span>
1031
1074
  <span class="cline-any cline-yes">3x</span>
@@ -1047,17 +1090,17 @@
1047
1090
  <span class="cline-any cline-neutral">&nbsp;</span>
1048
1091
  <span class="cline-any cline-neutral">&nbsp;</span>
1049
1092
  <span class="cline-any cline-neutral">&nbsp;</span>
1050
- <span class="cline-any cline-yes">46x</span>
1051
- <span class="cline-any cline-yes">251x</span>
1052
- <span class="cline-any cline-yes">251x</span>
1053
- <span class="cline-any cline-yes">251x</span>
1054
- <span class="cline-any cline-yes">251x</span>
1055
- <span class="cline-any cline-yes">251x</span>
1093
+ <span class="cline-any cline-yes">179x</span>
1094
+ <span class="cline-any cline-yes">128x</span>
1095
+ <span class="cline-any cline-yes">128x</span>
1096
+ <span class="cline-any cline-yes">128x</span>
1097
+ <span class="cline-any cline-yes">128x</span>
1098
+ <span class="cline-any cline-yes">128x</span>
1056
1099
  <span class="cline-any cline-neutral">&nbsp;</span>
1057
1100
  <span class="cline-any cline-neutral">&nbsp;</span>
1058
1101
  <span class="cline-any cline-neutral">&nbsp;</span>
1059
1102
  <span class="cline-any cline-neutral">&nbsp;</span>
1060
- <span class="cline-any cline-yes">46x</span>
1103
+ <span class="cline-any cline-yes">56x</span>
1061
1104
  <span class="cline-any cline-yes">3x</span>
1062
1105
  <span class="cline-any cline-neutral">&nbsp;</span>
1063
1106
  <span class="cline-any cline-yes">3x</span>
@@ -1077,7 +1120,7 @@
1077
1120
  <span class="cline-any cline-yes">3x</span>
1078
1121
  <span class="cline-any cline-neutral">&nbsp;</span>
1079
1122
  <span class="cline-any cline-neutral">&nbsp;</span>
1080
- <span class="cline-any cline-yes">46x</span>
1123
+ <span class="cline-any cline-yes">55x</span>
1081
1124
  <span class="cline-any cline-neutral">&nbsp;</span>
1082
1125
  <span class="cline-any cline-yes">2x</span>
1083
1126
  <span class="cline-any cline-yes">2x</span>
@@ -1101,7 +1144,7 @@
1101
1144
  <span class="cline-any cline-yes">2x</span>
1102
1145
  <span class="cline-any cline-neutral">&nbsp;</span>
1103
1146
  <span class="cline-any cline-neutral">&nbsp;</span>
1104
- <span class="cline-any cline-yes">46x</span>
1147
+ <span class="cline-any cline-yes">55x</span>
1105
1148
  <span class="cline-any cline-neutral">&nbsp;</span>
1106
1149
  <span class="cline-any cline-yes">1x</span>
1107
1150
  <span class="cline-any cline-yes">1x</span>
@@ -1127,75 +1170,96 @@
1127
1170
  <span class="cline-any cline-yes">1x</span>
1128
1171
  <span class="cline-any cline-neutral">&nbsp;</span>
1129
1172
  <span class="cline-any cline-neutral">&nbsp;</span>
1173
+ <span class="cline-any cline-yes">55x</span>
1174
+ <span class="cline-any cline-yes">5x</span>
1175
+ <span class="cline-any cline-yes">5x</span>
1130
1176
  <span class="cline-any cline-neutral">&nbsp;</span>
1131
- <span class="cline-any cline-yes">23x</span>
1132
- <span class="cline-any cline-yes">23x</span>
1133
- <span class="cline-any cline-neutral">&nbsp;</span>
1134
- <span class="cline-any cline-yes">23x</span>
1135
- <span class="cline-any cline-yes">1x</span>
1136
- <span class="cline-any cline-yes">1x</span>
1177
+ <span class="cline-any cline-yes">5x</span>
1178
+ <span class="cline-any cline-yes">5x</span>
1137
1179
  <span class="cline-any cline-neutral">&nbsp;</span>
1138
- <span class="cline-any cline-yes">1x</span>
1180
+ <span class="cline-any cline-yes">5x</span>
1139
1181
  <span class="cline-any cline-neutral">&nbsp;</span>
1140
1182
  <span class="cline-any cline-neutral">&nbsp;</span>
1141
- <span class="cline-any cline-yes">23x</span>
1142
- <span class="cline-any cline-yes">23x</span>
1143
- <span class="cline-any cline-yes">23x</span>
1183
+ <span class="cline-any cline-yes">5x</span>
1144
1184
  <span class="cline-any cline-neutral">&nbsp;</span>
1145
- <span class="cline-any cline-yes">23x</span>
1146
- <span class="cline-any cline-yes">1x</span>
1185
+ <span class="cline-any cline-yes">5x</span>
1186
+ <span class="cline-any cline-yes">5x</span>
1147
1187
  <span class="cline-any cline-neutral">&nbsp;</span>
1148
- <span class="cline-any cline-yes">22x</span>
1149
- <span class="cline-any cline-yes">22x</span>
1150
1188
  <span class="cline-any cline-neutral">&nbsp;</span>
1151
1189
  <span class="cline-any cline-neutral">&nbsp;</span>
1190
+ <span class="cline-any cline-yes">7x</span>
1191
+ <span class="cline-any cline-yes">7x</span>
1192
+ <span class="cline-any cline-yes">7x</span>
1152
1193
  <span class="cline-any cline-neutral">&nbsp;</span>
1153
1194
  <span class="cline-any cline-neutral">&nbsp;</span>
1195
+ <span class="cline-any cline-yes">7x</span>
1154
1196
  <span class="cline-any cline-neutral">&nbsp;</span>
1197
+ <span class="cline-any cline-yes">3x</span>
1198
+ <span class="cline-any cline-yes">3x</span>
1155
1199
  <span class="cline-any cline-neutral">&nbsp;</span>
1156
1200
  <span class="cline-any cline-neutral">&nbsp;</span>
1157
- <span class="cline-any cline-yes">23x</span>
1158
- <span class="cline-any cline-yes">1x</span>
1201
+ <span class="cline-any cline-yes">7x</span>
1159
1202
  <span class="cline-any cline-neutral">&nbsp;</span>
1203
+ <span class="cline-any cline-yes">7x</span>
1204
+ <span class="cline-any cline-yes">7x</span>
1205
+ <span class="cline-any cline-yes">7x</span>
1206
+ <span class="cline-any cline-yes">7x</span>
1160
1207
  <span class="cline-any cline-neutral">&nbsp;</span>
1208
+ <span class="cline-any cline-yes">7x</span>
1209
+ <span class="cline-any cline-no">&nbsp;</span>
1161
1210
  <span class="cline-any cline-neutral">&nbsp;</span>
1162
- <span class="cline-any cline-yes">22x</span>
1163
1211
  <span class="cline-any cline-neutral">&nbsp;</span>
1164
- <span class="cline-any cline-yes">23x</span>
1165
- <span class="cline-any cline-yes">23x</span>
1212
+ <span class="cline-any cline-yes">7x</span>
1213
+ <span class="cline-any cline-yes">7x</span>
1214
+ <span class="cline-any cline-yes">7x</span>
1166
1215
  <span class="cline-any cline-neutral">&nbsp;</span>
1167
1216
  <span class="cline-any cline-neutral">&nbsp;</span>
1168
1217
  <span class="cline-any cline-neutral">&nbsp;</span>
1169
- <span class="cline-any cline-yes">23x</span>
1170
- <span class="cline-any cline-yes">23x</span>
1218
+ <span class="cline-any cline-yes">9x</span>
1219
+ <span class="cline-any cline-yes">9x</span>
1171
1220
  <span class="cline-any cline-neutral">&nbsp;</span>
1172
1221
  <span class="cline-any cline-neutral">&nbsp;</span>
1173
1222
  <span class="cline-any cline-neutral">&nbsp;</span>
1174
- <span class="cline-any cline-yes">23x</span>
1175
- <span class="cline-any cline-yes">23x</span>
1176
- <span class="cline-any cline-yes">23x</span>
1223
+ <span class="cline-any cline-yes">9x</span>
1224
+ <span class="cline-any cline-yes">9x</span>
1225
+ <span class="cline-any cline-yes">9x</span>
1177
1226
  <span class="cline-any cline-no">&nbsp;</span>
1178
1227
  <span class="cline-any cline-neutral">&nbsp;</span>
1179
1228
  <span class="cline-any cline-neutral">&nbsp;</span>
1180
1229
  <span class="cline-any cline-neutral">&nbsp;</span>
1181
- <span class="cline-any cline-yes">46x</span>
1182
- <span class="cline-any cline-yes">23x</span>
1183
- <span class="cline-any cline-yes">23x</span>
1184
- <span class="cline-any cline-yes">23x</span>
1185
- <span class="cline-any cline-yes">23x</span>
1186
- <span class="cline-any cline-yes">23x</span>
1230
+ <span class="cline-any cline-yes">60x</span>
1231
+ <span class="cline-any cline-yes">7x</span>
1232
+ <span class="cline-any cline-yes">7x</span>
1233
+ <span class="cline-any cline-yes">7x</span>
1234
+ <span class="cline-any cline-yes">7x</span>
1235
+ <span class="cline-any cline-yes">7x</span>
1187
1236
  <span class="cline-any cline-neutral">&nbsp;</span>
1188
1237
  <span class="cline-any cline-neutral">&nbsp;</span>
1189
- <span class="cline-any cline-yes">46x</span>
1190
- <span class="cline-any cline-no">&nbsp;</span>
1191
- <span class="cline-any cline-no">&nbsp;</span>
1192
- <span class="cline-any cline-no">&nbsp;</span>
1238
+ <span class="cline-any cline-yes">55x</span>
1239
+ <span class="cline-any cline-yes">2x</span>
1240
+ <span class="cline-any cline-yes">2x</span>
1193
1241
  <span class="cline-any cline-neutral">&nbsp;</span>
1242
+ <span class="cline-any cline-neutral">&nbsp;</span>
1243
+ <span class="cline-any cline-yes">2x</span>
1194
1244
  <span class="cline-any cline-no">&nbsp;</span>
1195
1245
  <span class="cline-any cline-neutral">&nbsp;</span>
1196
1246
  <span class="cline-any cline-neutral">&nbsp;</span>
1247
+ <span class="cline-any cline-yes">2x</span>
1248
+ <span class="cline-any cline-yes">2x</span>
1249
+ <span class="cline-any cline-yes">2x</span>
1250
+ <span class="cline-any cline-yes">2x</span>
1251
+ <span class="cline-any cline-neutral">&nbsp;</span>
1197
1252
  <span class="cline-any cline-neutral">&nbsp;</span>
1198
- <span class="cline-any cline-yes">46x</span>
1253
+ <span class="cline-any cline-yes">55x</span>
1254
+ <span class="cline-any cline-yes">3x</span>
1255
+ <span class="cline-any cline-yes">3x</span>
1256
+ <span class="cline-any cline-yes">3x</span>
1257
+ <span class="cline-any cline-neutral">&nbsp;</span>
1258
+ <span class="cline-any cline-yes">1x</span>
1259
+ <span class="cline-any cline-neutral">&nbsp;</span>
1260
+ <span class="cline-any cline-neutral">&nbsp;</span>
1261
+ <span class="cline-any cline-neutral">&nbsp;</span>
1262
+ <span class="cline-any cline-no">&nbsp;</span>
1199
1263
  <span class="cline-any cline-yes">6x</span>
1200
1264
  <span class="cline-any cline-yes">6x</span>
1201
1265
  <span class="cline-any cline-yes">6x</span>
@@ -1292,21 +1356,18 @@ import {
1292
1356
  errors,
1293
1357
  events,
1294
1358
  migrations,
1359
+ objectStore,
1295
1360
  } from "@budibase/backend-core"
1296
1361
  import { USERS_TABLE_SCHEMA } from "../../constants"
1297
1362
  import { buildDefaultDocs } from "../../db/defaultData/datasource_bb_default"
1298
1363
  import { removeAppFromUserRoles } from "../../utilities/workerRequests"
1299
- import {
1300
- clientLibraryPath,
1301
- stringToReadStream,
1302
- isQsTrue,
1303
- } from "../../utilities"
1364
+ import { stringToReadStream, isQsTrue } from "../../utilities"
1304
1365
  import { getLocksById } from "../../utilities/redis"
1305
1366
  import {
1306
1367
  updateClientLibrary,
1307
1368
  backupClientLibrary,
1308
1369
  revertClientLibrary,
1309
- } from "../../utilities/fileSystem/clientLibrary"
1370
+ } from "../../utilities/fileSystem"
1310
1371
  import { cleanupAutomations } from "../../automations/utils"
1311
1372
  import { checkAppMetadata } from "../../automations/logging"
1312
1373
  import { getUniqueRows } from "../../utilities/usageQuota/rows"
@@ -1318,9 +1379,9 @@ import {
1318
1379
  MigrationType,
1319
1380
  BBContext,
1320
1381
  Database,
1382
+ UserCtx,
1321
1383
  } from "@budibase/types"
1322
1384
  import { BASE_LAYOUT_PROP_IDS } from "../../constants/layouts"
1323
- import { enrichPluginURLs } from "../../utilities/plugins"
1324
1385
  import sdk from "../../sdk"
1325
1386
  &nbsp;
1326
1387
  // utility function, need to do away with this
@@ -1347,7 +1408,7 @@ async function getScreens() {
1347
1408
  }
1348
1409
  &nbsp;
1349
1410
  function getUserRoleId(ctx: BBContext) {
1350
- return !ctx.user<span class="branch-0 cbranch-no" title="branch not covered" >?.r</span>ole || !ctx.user.role._id
1411
+ return !ctx.user?.role || !ctx.user.role._id
1351
1412
  ? <span class="branch-0 cbranch-no" title="branch not covered" >roles.BUILTIN_ROLE_IDS.PUBLIC</span>
1352
1413
  : ctx.user.role._id
1353
1414
  }
@@ -1384,12 +1445,11 @@ function checkAppName(
1384
1445
  }
1385
1446
  }
1386
1447
  &nbsp;
1387
- async function createInstance(template: any, includeSampleData: boolean) {
1388
- const tenantId = tenancy.isMultiTenant() ? <span class="branch-0 cbranch-no" title="branch not covered" >tenancy.getTenantId() </span>: null
1389
- const baseAppId = generateAppID(tenantId)
1390
- const appId = generateDevAppID(baseAppId)
1391
- await context.updateAppId(appId)
1392
- &nbsp;
1448
+ async function createInstance(
1449
+ appId: string,
1450
+ template: any,
1451
+ includeSampleData: boolean
1452
+ ) {
1393
1453
  const db = context.getAppDB()
1394
1454
  await db.put({
1395
1455
  _id: "_design/database",
@@ -1426,7 +1486,7 @@ async function createInstance(template: any, includeSampleData: boolean) {
1426
1486
  return { _id: appId }
1427
1487
  }
1428
1488
  &nbsp;
1429
- async function <span class="fstat-no" title="function not covered" >addDefaultTables(</span>db: Database) {
1489
+ async function <span class="fstat-no" title="function not covered" >addDefaultTables(d</span>b: Database) {
1430
1490
  const defaultDbDocs = <span class="cstat-no" title="statement not covered" >buildDefaultDocs()</span>
1431
1491
  &nbsp;
1432
1492
  // add in the default db data docs - tables, datasource, rows and links
@@ -1442,7 +1502,7 @@ export async function fetch(ctx: BBContext) {
1442
1502
  .filter((app: any) =&gt; app.status === "development")
1443
1503
  .map((app: any) =&gt; app.appId)
1444
1504
  // get the locks for all the dev apps
1445
- if (dev || <span class="branch-1 cbranch-no" title="branch not covered" >all)</span> {
1505
+ if (dev || all) {
1446
1506
  const locks = await getLocksById(appIds)
1447
1507
  for (let app of apps) {
1448
1508
  const lock = locks[app.appId]
@@ -1473,27 +1533,34 @@ export async function fetchAppDefinition(ctx: BBContext) {
1473
1533
  }
1474
1534
  }
1475
1535
  &nbsp;
1476
- export async function fetchAppPackage(ctx: BBContext) {
1536
+ export async function fetchAppPackage(ctx: UserCtx) {
1477
1537
  const db = context.getAppDB()
1478
1538
  let application = await db.get(DocumentType.APP_METADATA)
1479
1539
  const layouts = await getLayouts()
1480
1540
  let screens = await getScreens()
1481
1541
  &nbsp;
1482
1542
  // Enrich plugin URLs
1483
- application.usedPlugins = enrichPluginURLs(application.usedPlugins)
1543
+ application.usedPlugins = objectStore.enrichPluginURLs(
1544
+ application.usedPlugins
1545
+ )
1484
1546
  &nbsp;
1485
1547
  // Only filter screens if the user is not a builder
1486
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!(ctx.user<span class="branch-0 cbranch-no" title="branch not covered" >?.b</span>uilder &amp;&amp; ctx.user.builder.global)) {
1548
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!(ctx.user.builder &amp;&amp; ctx.user.builder.global)) {
1487
1549
  const userRoleId = <span class="cstat-no" title="statement not covered" >getUserRoleId(ctx)</span>
1488
1550
  const accessController = <span class="cstat-no" title="statement not covered" >new roles.AccessController()</span>
1489
1551
  <span class="cstat-no" title="statement not covered" > screens = await accessController.checkScreensAccess(screens, userRoleId)</span>
1490
1552
  }
1553
+ &nbsp;
1554
+ const clientLibPath = objectStore.clientLibraryUrl(
1555
+ ctx.params.appId,
1556
+ application.version
1557
+ )
1491
1558
  &nbsp;
1492
1559
  ctx.body = {
1493
1560
  application,
1494
1561
  screens,
1495
1562
  layouts,
1496
- clientLibPath: clientLibraryPath(ctx.params.appId, application.version),
1563
+ clientLibPath,
1497
1564
  }
1498
1565
  }
1499
1566
  &nbsp;
@@ -1515,82 +1582,90 @@ async function performAppCreate(ctx: BBContext) {
1515
1582
  instanceConfig.file = ctx.request.files.templateFile
1516
1583
  }
1517
1584
  const includeSampleData = isQsTrue(ctx.request.body.sampleData)
1518
- const instance = await createInstance(instanceConfig, includeSampleData)
1519
- const appId = instance._id
1520
- const db = context.getAppDB()
1585
+ const tenantId = tenancy.isMultiTenant() ? tenancy.getTenantId() : null
1586
+ const appId = generateDevAppID(generateAppID(tenantId))
1521
1587
  &nbsp;
1522
- let newApplication: App = {
1523
- _id: DocumentType.APP_METADATA,
1524
- _rev: undefined,
1525
- appId,
1526
- type: "app",
1527
- version: packageJson.version,
1528
- componentLibraries: ["@budibase/standard-components"],
1529
- name: name,
1530
- url: url,
1531
- template: templateKey,
1532
- instance,
1533
- tenantId: tenancy.getTenantId(),
1534
- updatedAt: new Date().toISOString(),
1535
- createdAt: new Date().toISOString(),
1536
- status: AppStatus.DEV,
1537
- navigation: {
1538
- navigation: "Top",
1539
- title: name,
1540
- navWidth: "Large",
1541
- navBackground: "var(--spectrum-global-color-gray-100)",
1542
- links: [
1543
- {
1544
- url: "/home",
1545
- text: "Home",
1546
- },
1547
- ],
1548
- },
1549
- theme: "spectrum--light",
1550
- customTheme: {
1551
- buttonBorderRadius: "16px",
1552
- },
1553
- }
1588
+ return await context.doInAppContext(appId, async () =&gt; {
1589
+ const instance = await createInstance(
1590
+ appId,
1591
+ instanceConfig,
1592
+ includeSampleData
1593
+ )
1594
+ const db = context.getAppDB()
1554
1595
  &nbsp;
1555
- // If we used a template or imported an app there will be an existing doc.
1556
- // Fetch and migrate some metadata from the existing app.
1557
- try {
1558
- const existing: App = await db.get(DocumentType.APP_METADATA)
1559
- const keys: (keyof App)[] = [
1560
- "_rev",
1561
- "navigation",
1562
- "theme",
1563
- "customTheme",
1564
- "icon",
1565
- ]
1566
- keys.forEach(key =&gt; {
1567
- if (existing[key]) {
1568
- // @ts-ignore
1569
- newApplication[key] = existing[key]
1570
- }
1571
- })
1596
+ let newApplication: App = {
1597
+ _id: DocumentType.APP_METADATA,
1598
+ _rev: undefined,
1599
+ appId,
1600
+ type: "app",
1601
+ version: packageJson.version,
1602
+ componentLibraries: ["@budibase/standard-components"],
1603
+ name: name,
1604
+ url: url,
1605
+ template: templateKey,
1606
+ instance,
1607
+ tenantId: tenancy.getTenantId(),
1608
+ updatedAt: new Date().toISOString(),
1609
+ createdAt: new Date().toISOString(),
1610
+ status: AppStatus.DEV,
1611
+ navigation: {
1612
+ navigation: "Top",
1613
+ title: name,
1614
+ navWidth: "Large",
1615
+ navBackground: "var(--spectrum-global-color-gray-100)",
1616
+ links: [
1617
+ {
1618
+ url: "/home",
1619
+ text: "Home",
1620
+ },
1621
+ ],
1622
+ },
1623
+ theme: "spectrum--light",
1624
+ customTheme: {
1625
+ buttonBorderRadius: "16px",
1626
+ },
1627
+ }
1572
1628
  &nbsp;
1573
- // Migrate navigation settings and screens if required
1574
- if (existing) {
1575
- const navigation = await migrateAppNavigation()
1576
- if (navigation) {
1577
- newApplication.navigation = navigation
1629
+ // If we used a template or imported an app there will be an existing doc.
1630
+ // Fetch and migrate some metadata from the existing app.
1631
+ try {
1632
+ const existing: App = await db.get(DocumentType.APP_METADATA)
1633
+ const keys: (keyof App)[] = [
1634
+ "_rev",
1635
+ "navigation",
1636
+ "theme",
1637
+ "customTheme",
1638
+ "icon",
1639
+ ]
1640
+ keys.forEach(key =&gt; {
1641
+ if (existing[key]) {
1642
+ // @ts-ignore
1643
+ newApplication[key] = existing[key]
1644
+ }
1645
+ })
1646
+ &nbsp;
1647
+ // Migrate navigation settings and screens if required
1648
+ if (existing) {
1649
+ const navigation = await migrateAppNavigation()
1650
+ if (navigation) {
1651
+ newApplication.navigation = navigation
1652
+ }
1578
1653
  }
1654
+ } catch (err) {
1655
+ // Nothing to do
1579
1656
  }
1580
- } catch (err) {
1581
- // Nothing to do
1582
- }
1583
1657
  &nbsp;
1584
- const response = await db.put(newApplication, { force: true })
1585
- newApplication._rev = response.rev
1658
+ const response = await db.put(newApplication, { force: true })
1659
+ newApplication._rev = response.rev
1586
1660
  &nbsp;
1587
- /* istanbul ignore next */
1588
- if (!env.isTest()) {
1589
- await createApp(appId)
1590
- }
1661
+ /* istanbul ignore next */
1662
+ if (!env.isTest()) {
1663
+ await createApp(appId)
1664
+ }
1591
1665
  &nbsp;
1592
- await cache.app.invalidateAppMetadata(appId, newApplication)
1593
- return newApplication
1666
+ await cache.app.invalidateAppMetadata(appId, newApplication)
1667
+ return newApplication
1668
+ })
1594
1669
  }
1595
1670
  &nbsp;
1596
1671
  async function creationEvents(request: any, app: App) {
@@ -1603,7 +1678,7 @@ async function creationEvents(request: any, app: App) {
1603
1678
  creationFns.push(a =&gt; events.app.templateImported(a, body.templateKey))
1604
1679
  }
1605
1680
  // from file
1606
- else if (request.files<span class="branch-0 cbranch-no" title="branch not covered" >?.t</span>emplateFile) {
1681
+ else if (request.files?.templateFile) {
1607
1682
  creationFns.push(a =&gt; events.app.fileImported(a))
1608
1683
  }
1609
1684
  // unknown
@@ -1632,14 +1707,14 @@ async function appPostCreate(ctx: BBContext, app: App) {
1632
1707
  const rowCount = rows ? rows.length : <span class="branch-1 cbranch-no" title="branch not covered" >0</span>
1633
1708
  <span class="missing-if-branch" title="if path not taken" >I</span>if (rowCount) {
1634
1709
  <span class="cstat-no" title="statement not covered" > try {</span>
1635
- <span class="cstat-no" title="statement not covered" > await context.doInAppContext(app.appId, <span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1710
+ <span class="cstat-no" title="statement not covered" > await context.doInAppContext(app.appId, <span class="fstat-no" title="function not covered" >() =&gt; {</span></span>
1636
1711
  <span class="cstat-no" title="statement not covered" > return quotas.addRows(rowCount)</span>
1637
1712
  })
1638
1713
  } catch (err: any) {
1639
1714
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (err.code &amp;&amp; err.code === errors.codes.USAGE_LIMIT_EXCEEDED) {</span>
1640
1715
  // this import resulted in row usage exceeding the quota
1641
1716
  // delete the app
1642
- // skip pre- and post-steps as no rows have been added to quotas yet
1717
+ // skip pre and post-steps as no rows have been added to quotas yet
1643
1718
  <span class="cstat-no" title="statement not covered" > ctx.params.appId = app.appId</span>
1644
1719
  <span class="cstat-no" title="statement not covered" > await destroyApp(ctx)</span>
1645
1720
  }
@@ -1729,41 +1804,47 @@ export async function revertClient(ctx: BBContext) {
1729
1804
  ctx.body = app
1730
1805
  }
1731
1806
  &nbsp;
1807
+ const unpublishApp = async (ctx: any) =&gt; {
1808
+ let appId = ctx.params.appId
1809
+ appId = dbCore.getProdAppID(appId)
1810
+ &nbsp;
1811
+ const db = context.getProdAppDB()
1812
+ const result = await db.destroy()
1813
+ &nbsp;
1814
+ await events.app.unpublished({ appId } as App)
1815
+ &nbsp;
1816
+ // automations only in production
1817
+ await cleanupAutomations(appId)
1818
+ &nbsp;
1819
+ await cache.app.invalidateAppMetadata(appId)
1820
+ return result
1821
+ }
1822
+ &nbsp;
1732
1823
  async function destroyApp(ctx: BBContext) {
1733
1824
  let appId = ctx.params.appId
1734
- let isUnpublish = ctx.query &amp;&amp; ctx.query.unpublish
1825
+ appId = dbCore.getProdAppID(appId)
1826
+ const devAppId = dbCore.getDevAppID(appId)
1735
1827
  &nbsp;
1736
- if (isUnpublish) {
1737
- appId = dbCore.getProdAppID(appId)
1738
- const devAppId = dbCore.getDevAppID(appId)
1739
- // sync before removing the published app
1828
+ // check if we need to unpublish first
1829
+ if (await dbCore.dbExists(appId)) {
1830
+ // app is deployed, run through unpublish flow
1740
1831
  await sdk.applications.syncApp(devAppId)
1832
+ await unpublishApp(ctx)
1741
1833
  }
1742
1834
  &nbsp;
1743
- const db = isUnpublish ? context.getProdAppDB() : context.getAppDB()
1835
+ const db = dbCore.getDB(devAppId)
1836
+ // standard app deletion flow
1744
1837
  const app = await db.get(DocumentType.APP_METADATA)
1745
1838
  const result = await db.destroy()
1839
+ await quotas.removeApp()
1840
+ await events.app.deleted(app)
1746
1841
  &nbsp;
1747
- if (isUnpublish) {
1748
- await events.app.unpublished(app)
1749
- } else {
1750
- await quotas.removeApp()
1751
- await events.app.deleted(app)
1842
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!env.isTest()) {
1843
+ <span class="cstat-no" title="statement not covered" > await deleteApp(appId)</span>
1752
1844
  }
1753
1845
  &nbsp;
1754
- /* istanbul ignore next */
1755
- if (!env.isTest() &amp;&amp; !isUnpublish) {
1756
- await deleteApp(appId)
1757
- }
1758
- // automations only in production
1759
- if (isUnpublish) {
1760
- await cleanupAutomations(appId)
1761
- }
1762
- // remove app role when the dev app is deleted (no trace of app anymore)
1763
- else {
1764
- await removeAppFromUserRoles(ctx, appId)
1765
- }
1766
- await cache.app.invalidateAppMetadata(appId)
1846
+ await removeAppFromUserRoles(ctx, appId)
1847
+ await cache.app.invalidateAppMetadata(devAppId)
1767
1848
  return result
1768
1849
  }
1769
1850
  &nbsp;
@@ -1788,16 +1869,31 @@ export async function destroy(ctx: BBContext) {
1788
1869
  ctx.body = result
1789
1870
  }
1790
1871
  &nbsp;
1791
- export async function <span class="fstat-no" title="function not covered" >sync(</span>ctx: BBContext) {
1792
- const appId = <span class="cstat-no" title="statement not covered" >ctx.params.appId</span>
1793
- <span class="cstat-no" title="statement not covered" > try {</span>
1794
- <span class="cstat-no" title="statement not covered" > ctx.body = await sdk.applications.syncApp(appId)</span>
1872
+ export const unpublish = async (ctx: BBContext) =&gt; {
1873
+ const prodAppId = dbCore.getProdAppID(ctx.params.appId)
1874
+ const dbExists = await dbCore.dbExists(prodAppId)
1875
+ &nbsp;
1876
+ // check app has been published
1877
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!dbExists) {
1878
+ <span class="cstat-no" title="statement not covered" > return ctx.throw(400, "App has not been published.")</span>
1879
+ }
1880
+ &nbsp;
1881
+ await preDestroyApp(ctx)
1882
+ await unpublishApp(ctx)
1883
+ await postDestroyApp(ctx)
1884
+ ctx.status = 204
1885
+ }
1886
+ &nbsp;
1887
+ export async function sync(ctx: BBContext) {
1888
+ const appId = ctx.params.appId
1889
+ try {
1890
+ ctx.body = await sdk.applications.syncApp(appId)
1795
1891
  } catch (err: any) {
1796
- <span class="cstat-no" title="statement not covered" > ctx.throw(err.status || 400, err.message)</span>
1892
+ ctx.throw(err.status || 400, err.message)
1797
1893
  }
1798
1894
  }
1799
1895
  &nbsp;
1800
- export async function updateAppPackage(appPackage: any, appId: any) {
1896
+ export async function <span class="cstat-no" title="statement not covered" >updateAppPackage<span class="fstat-no" title="function not covered" >(</span>a</span>ppPackage: any, appId: any) {
1801
1897
  return context.doInAppContext(appId, async () =&gt; {
1802
1898
  const db = context.getAppDB()
1803
1899
  const application = await db.get(DocumentType.APP_METADATA)
@@ -1831,14 +1927,14 @@ async function migrateAppNavigation() {
1831
1927
  }
1832
1928
  const layout = layouts.find(layout =&gt; layout._id === screen.layoutId)
1833
1929
  screen.layoutId = undefined
1834
- screen.showNavigation = layout<span class="branch-0 cbranch-no" title="branch not covered" >?.p</span>rops.navigation !== "None"
1835
- screen.width = layout<span class="branch-0 cbranch-no" title="branch not covered" >?.p</span>rops.width || <span class="branch-1 cbranch-no" title="branch not covered" >"Large"</span>
1930
+ screen.showNavigation = layout?.props.navigation !== "None"
1931
+ screen.width = layout?.props.width || <span class="branch-1 cbranch-no" title="branch not covered" >"Large"</span>
1836
1932
  await db.put(screen)
1837
1933
  }
1838
1934
  &nbsp;
1839
1935
  // Migrate layout navigation settings
1840
1936
  const { name, customTheme } = existing
1841
- const layout = layouts<span class="branch-0 cbranch-no" title="branch not covered" >?.f</span>ind(
1937
+ const layout = layouts?.find(
1842
1938
  (layout: Layout) =&gt; layout._id === BASE_LAYOUT_PROP_IDS.PRIVATE
1843
1939
  )
1844
1940
  if (layout &amp;&amp; !existing.navigation) {
@@ -1847,9 +1943,9 @@ async function migrateAppNavigation() {
1847
1943
  title: name,
1848
1944
  navWidth: "Large",
1849
1945
  navBackground:
1850
- customTheme<span class="branch-0 cbranch-no" title="branch not covered" >?.n</span>avBackground || <span class="branch-1 cbranch-no" title="branch not covered" >"var(--spectrum-global-color-gray-50)",</span>
1946
+ customTheme?.navBackground || <span class="branch-1 cbranch-no" title="branch not covered" >"var(--spectrum-global-color-gray-50)",</span>
1851
1947
  navTextColor:
1852
- customTheme<span class="branch-0 cbranch-no" title="branch not covered" >?.n</span>avTextColor || <span class="branch-1 cbranch-no" title="branch not covered" >"var(--spectrum-global-color-gray-800)",</span>
1948
+ customTheme?.navTextColor || <span class="branch-1 cbranch-no" title="branch not covered" >"var(--spectrum-global-color-gray-800)",</span>
1853
1949
  }
1854
1950
  if (layout) {
1855
1951
  navigationSettings.hideLogo = layout.props.hideLogo
@@ -1876,7 +1972,7 @@ async function migrateAppNavigation() {
1876
1972
  <div class='footer quiet pad2 space-top1 center small'>
1877
1973
  Code coverage generated by
1878
1974
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1879
- at Thu Feb 02 2023 11:56:48 GMT+0000 (Coordinated Universal Time)
1975
+ at Mon Feb 06 2023 09:24:58 GMT+0000 (Coordinated Universal Time)
1880
1976
  </div>
1881
1977
  <script src="../../../prettify.js"></script>
1882
1978
  <script>