@budibase/server 1.0.49-alpha.1 → 1.0.49-alpha.13

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 (353) hide show
  1. package/__mocks__/arangojs.ts +1 -1
  2. package/__mocks__/aws-sdk.ts +4 -4
  3. package/__mocks__/mongodb.ts +4 -5
  4. package/__mocks__/mssql.ts +3 -3
  5. package/__mocks__/node-fetch.ts +2 -1
  6. package/__mocks__/pg.ts +3 -5
  7. package/builder/assets/{index.ba78c49d.css → index.83c0944f.css} +1 -1
  8. package/builder/assets/{index.ed1cf508.js → index.f686d3cd.js} +184 -184
  9. package/builder/index.html +2 -2
  10. package/coverage/clover.xml +2656 -2712
  11. package/coverage/coverage-final.json +104 -105
  12. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/application.js.html +157 -136
  15. package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
  16. package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
  17. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
  19. package/coverage/lcov-report/api/controllers/component.js.html +10 -13
  20. package/coverage/lcov-report/api/controllers/datasource.js.html +31 -37
  21. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  22. package/coverage/lcov-report/api/controllers/index.html +69 -54
  23. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
  25. package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
  26. package/coverage/lcov-report/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
  27. package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
  28. package/coverage/lcov-report/api/controllers/query/index.html +10 -10
  29. package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
  30. package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
  31. package/coverage/lcov-report/api/controllers/role.js.html +16 -16
  32. package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
  33. package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
  34. package/coverage/lcov-report/api/controllers/row/index.html +28 -28
  35. package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
  36. package/coverage/lcov-report/api/controllers/row/internal.js.html +60 -105
  37. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +25 -31
  38. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +21 -24
  39. package/coverage/lcov-report/api/controllers/row/utils.js.html +27 -24
  40. package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
  41. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  42. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +27 -57
  43. package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
  44. package/coverage/lcov-report/api/controllers/table/index.html +37 -37
  45. package/coverage/lcov-report/api/controllers/table/index.js.html +20 -20
  46. package/coverage/lcov-report/api/controllers/table/internal.js.html +45 -54
  47. package/coverage/lcov-report/api/controllers/table/utils.js.html +67 -103
  48. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  49. package/coverage/lcov-report/api/controllers/user.js.html +43 -52
  50. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  51. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  52. package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
  53. package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
  54. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  55. package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
  56. package/coverage/lcov-report/api/index.html +1 -1
  57. package/coverage/lcov-report/api/index.js.html +3 -3
  58. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/index.html +22 -7
  70. package/coverage/lcov-report/api/routes/index.js.html +10 -4
  71. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  74. package/coverage/lcov-report/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
  75. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  84. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  87. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  88. package/coverage/lcov-report/automations/actions.js.html +24 -24
  89. package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
  90. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  91. package/coverage/lcov-report/automations/index.html +18 -18
  92. package/coverage/lcov-report/automations/index.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  94. package/coverage/lcov-report/automations/steps/createRow.js.html +7 -10
  95. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  96. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  97. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  98. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  99. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  100. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  101. package/coverage/lcov-report/automations/steps/index.html +1 -1
  102. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  103. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  104. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  105. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  106. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  107. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  108. package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
  109. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  110. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  111. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  114. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  115. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  118. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  119. package/coverage/lcov-report/automations/triggers.js.html +61 -55
  120. package/coverage/lcov-report/automations/utils.js.html +54 -42
  121. package/coverage/lcov-report/constants/index.html +1 -1
  122. package/coverage/lcov-report/constants/index.js.html +26 -26
  123. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  124. package/coverage/lcov-report/constants/screens.js.html +4 -4
  125. package/coverage/lcov-report/db/client.js.html +18 -18
  126. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  127. package/coverage/lcov-report/db/index.html +1 -1
  128. package/coverage/lcov-report/db/index.js.html +3 -3
  129. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +15 -27
  130. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  131. package/coverage/lcov-report/db/linkedRows/index.js.html +40 -82
  132. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +40 -40
  133. package/coverage/lcov-report/db/newid.js.html +4 -4
  134. package/coverage/lcov-report/db/utils.js.html +74 -74
  135. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  136. package/coverage/lcov-report/events/index.html +1 -1
  137. package/coverage/lcov-report/events/index.js.html +5 -5
  138. package/coverage/lcov-report/events/utils.js.html +3 -3
  139. package/coverage/lcov-report/index.html +97 -112
  140. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  141. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  142. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  143. package/coverage/lcov-report/middleware/authorized.js.html +21 -15
  144. package/coverage/lcov-report/middleware/builder.js.html +3 -3
  145. package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
  146. package/coverage/lcov-report/middleware/index.html +28 -28
  147. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  148. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  149. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  150. package/coverage/lcov-report/middleware/usageQuota.js.html +29 -35
  151. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  152. package/coverage/lcov-report/threads/automation.js.html +30 -24
  153. package/coverage/lcov-report/threads/index.html +25 -25
  154. package/coverage/lcov-report/threads/index.js.html +10 -10
  155. package/coverage/lcov-report/threads/query.js.html +26 -47
  156. package/coverage/lcov-report/threads/utils.js.html +14 -14
  157. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  158. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  159. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  160. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  161. package/coverage/lcov-report/utilities/global.js.html +57 -48
  162. package/coverage/lcov-report/utilities/index.html +27 -27
  163. package/coverage/lcov-report/utilities/index.js.html +42 -72
  164. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
  165. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  166. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  167. package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
  168. package/coverage/lcov-report/utilities/rowProcessor/index.html +11 -11
  169. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +32 -74
  170. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +4 -4
  171. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  172. package/coverage/lcov-report/utilities/security.js.html +8 -8
  173. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  174. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  175. package/coverage/lcov-report/utilities/usageQuota/index.js.html +13 -10
  176. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
  177. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  178. package/coverage/lcov-report/utilities/users.js.html +9 -9
  179. package/coverage/lcov-report/utilities/workerRequests.js.html +16 -16
  180. package/coverage/lcov.info +4018 -4092
  181. package/dist/api/controllers/application.js +49 -48
  182. package/dist/api/controllers/auth.js +4 -5
  183. package/dist/api/controllers/automation.js +14 -19
  184. package/dist/api/controllers/cloud.js +2 -3
  185. package/dist/api/controllers/component.js +3 -4
  186. package/dist/api/controllers/datasource.js +9 -10
  187. package/dist/api/controllers/deploy/Deployment.js +3 -6
  188. package/dist/api/controllers/deploy/index.js +12 -13
  189. package/dist/api/controllers/dev.js +5 -5
  190. package/dist/api/controllers/layout.js +3 -3
  191. package/dist/api/controllers/metadata.js +4 -4
  192. package/dist/api/controllers/migrations.js +21 -0
  193. package/dist/api/controllers/permission.js +4 -4
  194. package/dist/api/controllers/query/import/index.js +4 -6
  195. package/dist/api/controllers/query/index.js +11 -10
  196. package/dist/api/controllers/role.js +5 -5
  197. package/dist/api/controllers/routing.js +5 -6
  198. package/dist/api/controllers/row/ExternalRequest.js +90 -67
  199. package/dist/api/controllers/row/external.js +14 -22
  200. package/dist/api/controllers/row/internal.js +29 -44
  201. package/dist/api/controllers/row/internalSearch.js +11 -13
  202. package/dist/api/controllers/row/staticFormula.js +11 -11
  203. package/dist/api/controllers/row/utils.js +7 -6
  204. package/dist/api/controllers/screen.js +5 -7
  205. package/dist/api/controllers/static/index.js +4 -4
  206. package/dist/api/controllers/table/bulkFormula.js +14 -15
  207. package/dist/api/controllers/table/external.js +7 -10
  208. package/dist/api/controllers/table/index.js +5 -5
  209. package/dist/api/controllers/table/internal.js +16 -19
  210. package/dist/api/controllers/table/utils.js +29 -31
  211. package/dist/api/controllers/user.js +16 -20
  212. package/dist/api/controllers/view/index.js +8 -10
  213. package/dist/api/controllers/view/utils.js +9 -4
  214. package/dist/api/controllers/webhook.js +10 -8
  215. package/dist/api/routes/index.js +2 -0
  216. package/dist/api/routes/migrations.js +9 -0
  217. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  218. package/dist/app.js +35 -5
  219. package/dist/automations/automationUtils.js +2 -3
  220. package/dist/automations/steps/createRow.js +1 -1
  221. package/dist/automations/steps/updateRow.js +1 -1
  222. package/dist/automations/triggers.js +27 -25
  223. package/dist/automations/utils.js +10 -5
  224. package/dist/db/linkedRows/LinkController.js +3 -7
  225. package/dist/db/linkedRows/index.js +16 -26
  226. package/dist/db/linkedRows/linkUtils.js +6 -6
  227. package/dist/db/views/staticViews.js +9 -10
  228. package/dist/environment.js +3 -1
  229. package/dist/integrations/base/sql.js +49 -15
  230. package/dist/integrations/utils.js +3 -0
  231. package/dist/middleware/authorized.js +5 -3
  232. package/dist/middleware/builder.js +2 -2
  233. package/dist/middleware/currentapp.js +41 -37
  234. package/dist/middleware/usageQuota.js +2 -4
  235. package/dist/migrations/functions/appUrls.js +46 -0
  236. package/dist/migrations/functions/quotas1.js +50 -0
  237. package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
  238. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +12 -9
  239. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +16 -12
  240. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  241. package/dist/migrations/index.js +62 -0
  242. package/dist/package.json +4 -4
  243. package/dist/tests/utilities/TestConfiguration.js +70 -44
  244. package/dist/threads/automation.js +13 -11
  245. package/dist/threads/query.js +13 -19
  246. package/dist/tsconfig.tsbuildinfo +1 -1
  247. package/dist/utilities/fileSystem/index.js +4 -3
  248. package/dist/utilities/global.js +15 -12
  249. package/dist/utilities/index.js +7 -17
  250. package/dist/utilities/routing/index.js +5 -5
  251. package/dist/utilities/rowProcessor/index.js +9 -10
  252. package/dist/utilities/usageQuota/index.js +1 -0
  253. package/dist/utilities/usageQuota/rows.js +1 -0
  254. package/dist/utilities/users.js +3 -3
  255. package/dist/utilities/workerRequests.js +4 -4
  256. package/package.json +5 -5
  257. package/scripts/integrations/mssql/data/Dockerfile +1 -1
  258. package/scripts/integrations/mssql/data/setup.sql +17 -4
  259. package/scripts/integrations/postgres/init.sql +11 -6
  260. package/scripts/likeCypress.ts +1 -1
  261. package/src/api/controllers/application.js +38 -31
  262. package/src/api/controllers/auth.js +4 -5
  263. package/src/api/controllers/automation.js +13 -23
  264. package/src/api/controllers/cloud.js +2 -3
  265. package/src/api/controllers/component.js +3 -4
  266. package/src/api/controllers/datasource.js +9 -11
  267. package/src/api/controllers/deploy/Deployment.js +3 -7
  268. package/src/api/controllers/deploy/index.js +20 -13
  269. package/src/api/controllers/dev.js +5 -5
  270. package/src/api/controllers/layout.js +3 -3
  271. package/src/api/controllers/metadata.js +4 -9
  272. package/src/api/controllers/migrations.js +13 -0
  273. package/src/api/controllers/permission.js +4 -4
  274. package/src/api/controllers/query/import/index.ts +4 -6
  275. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  276. package/src/api/controllers/query/index.js +11 -10
  277. package/src/api/controllers/role.js +5 -5
  278. package/src/api/controllers/routing.js +5 -6
  279. package/src/api/controllers/row/ExternalRequest.ts +67 -43
  280. package/src/api/controllers/row/external.js +27 -58
  281. package/src/api/controllers/row/internal.js +29 -44
  282. package/src/api/controllers/row/internalSearch.js +11 -13
  283. package/src/api/controllers/row/staticFormula.js +10 -11
  284. package/src/api/controllers/row/utils.js +7 -6
  285. package/src/api/controllers/screen.js +5 -7
  286. package/src/api/controllers/static/index.js +4 -4
  287. package/src/api/controllers/table/bulkFormula.js +13 -23
  288. package/src/api/controllers/table/external.js +7 -10
  289. package/src/api/controllers/table/index.js +5 -5
  290. package/src/api/controllers/table/internal.js +18 -21
  291. package/src/api/controllers/table/utils.js +29 -41
  292. package/src/api/controllers/user.js +17 -20
  293. package/src/api/controllers/view/index.js +8 -10
  294. package/src/api/controllers/view/utils.js +9 -4
  295. package/src/api/controllers/webhook.js +10 -8
  296. package/src/api/routes/index.js +2 -0
  297. package/src/api/routes/migrations.js +14 -0
  298. package/src/api/routes/tests/automation.spec.js +1 -0
  299. package/src/api/routes/tests/misc.spec.js +0 -1
  300. package/src/api/routes/tests/routing.spec.js +21 -12
  301. package/src/api/routes/tests/row.spec.js +7 -4
  302. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  303. package/src/app.ts +18 -5
  304. package/src/automations/automationUtils.js +2 -3
  305. package/src/automations/steps/createRow.js +0 -1
  306. package/src/automations/steps/updateRow.js +1 -1
  307. package/src/automations/triggers.js +33 -31
  308. package/src/automations/utils.js +9 -5
  309. package/src/db/linkedRows/LinkController.js +3 -7
  310. package/src/db/linkedRows/index.js +16 -30
  311. package/src/db/linkedRows/linkUtils.js +6 -6
  312. package/src/db/tests/linkController.spec.js +0 -1
  313. package/src/db/tests/linkTests.spec.js +5 -6
  314. package/src/db/views/staticViews.js +8 -10
  315. package/src/environment.js +3 -1
  316. package/src/integrations/base/sql.ts +61 -22
  317. package/src/integrations/utils.ts +4 -1
  318. package/src/middleware/authorized.js +5 -3
  319. package/src/middleware/builder.js +2 -2
  320. package/src/middleware/currentapp.js +50 -46
  321. package/src/middleware/tests/authorized.spec.js +7 -2
  322. package/src/middleware/tests/currentapp.spec.js +6 -0
  323. package/src/middleware/usageQuota.js +2 -4
  324. package/src/migrations/functions/appUrls.ts +34 -0
  325. package/src/migrations/functions/quotas1.ts +20 -0
  326. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  327. package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
  328. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  329. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  330. package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +6 -6
  331. package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
  332. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
  333. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
  334. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  335. package/src/migrations/index.ts +56 -0
  336. package/src/module.d.ts +3 -0
  337. package/src/tests/utilities/TestConfiguration.js +73 -50
  338. package/src/threads/automation.js +17 -15
  339. package/src/threads/query.js +14 -21
  340. package/src/utilities/fileSystem/index.js +4 -3
  341. package/src/utilities/global.js +15 -12
  342. package/src/utilities/index.js +7 -17
  343. package/src/utilities/routing/index.js +5 -5
  344. package/src/utilities/rowProcessor/index.js +9 -23
  345. package/src/utilities/usageQuota/index.js +1 -0
  346. package/src/utilities/usageQuota/rows.js +1 -0
  347. package/src/utilities/users.js +3 -3
  348. package/src/utilities/workerRequests.js +4 -4
  349. package/tsconfig.json +2 -1
  350. package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
  351. package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
  352. package/src/migrations/usageQuotas/index.js +0 -24
  353. package/src/migrations/usageQuotas/syncRows.js +0 -21
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const linkRows = require("../../../db/linkedRows")
3
2
  const {
4
3
  generateRowID,
@@ -25,6 +24,7 @@ const {
25
24
  getFromMemoryDoc,
26
25
  } = require("../view/utils")
27
26
  const { cloneDeep } = require("lodash/fp")
27
+ const { getAppDB } = require("@budibase/backend-core/context")
28
28
  const { finaliseRow, updateRelatedFormula } = require("./staticFormula")
29
29
 
30
30
  const CALCULATION_TYPES = {
@@ -76,8 +76,7 @@ async function getRawTableData(ctx, db, tableId) {
76
76
  }
77
77
 
78
78
  exports.patch = async ctx => {
79
- const appId = ctx.appId
80
- const db = new CouchDB(appId)
79
+ const db = getAppDB()
81
80
  const inputs = ctx.request.body
82
81
  const tableId = inputs.tableId
83
82
  const isUserTable = tableId === InternalTables.USER_METADATA
@@ -116,14 +115,13 @@ exports.patch = async ctx => {
116
115
 
117
116
  // returned row is cleaned and prepared for writing to DB
118
117
  row = await linkRows.updateLinks({
119
- appId,
120
118
  eventType: linkRows.EventType.ROW_UPDATE,
121
119
  row,
122
120
  tableId: row.tableId,
123
121
  table,
124
122
  })
125
123
  // check if any attachments removed
126
- await cleanupAttachments(appId, table, { oldRow, row })
124
+ await cleanupAttachments(table, { oldRow, row })
127
125
 
128
126
  if (isUserTable) {
129
127
  // the row has been updated, need to put it into the ctx
@@ -132,15 +130,14 @@ exports.patch = async ctx => {
132
130
  return { row: ctx.body, table }
133
131
  }
134
132
 
135
- return finaliseRow(ctx.appId, table, row, {
133
+ return finaliseRow(table, row, {
136
134
  oldTable: dbTable,
137
135
  updateFormula: true,
138
136
  })
139
137
  }
140
138
 
141
139
  exports.save = async function (ctx) {
142
- const appId = ctx.appId
143
- const db = new CouchDB(appId)
140
+ const db = getAppDB()
144
141
  let inputs = ctx.request.body
145
142
  inputs.tableId = ctx.params.tableId
146
143
 
@@ -162,21 +159,19 @@ exports.save = async function (ctx) {
162
159
 
163
160
  // make sure link rows are up to date
164
161
  row = await linkRows.updateLinks({
165
- appId,
166
162
  eventType: linkRows.EventType.ROW_SAVE,
167
163
  row,
168
164
  tableId: row.tableId,
169
165
  table,
170
166
  })
171
167
 
172
- return finaliseRow(ctx.appId, table, row, {
168
+ return finaliseRow(table, row, {
173
169
  oldTable: dbTable,
174
170
  updateFormula: true,
175
171
  })
176
172
  }
177
173
 
178
174
  exports.fetchView = async ctx => {
179
- const appId = ctx.appId
180
175
  const viewName = ctx.params.viewName
181
176
 
182
177
  // if this is a table view being looked for just transfer to that
@@ -185,7 +180,7 @@ exports.fetchView = async ctx => {
185
180
  return exports.fetch(ctx)
186
181
  }
187
182
 
188
- const db = new CouchDB(appId)
183
+ const db = getAppDB()
189
184
  const { calculation, group, field } = ctx.query
190
185
  const viewInfo = await getView(db, viewName)
191
186
  let response
@@ -212,7 +207,7 @@ exports.fetchView = async ctx => {
212
207
  schema: {},
213
208
  }
214
209
  }
215
- rows = await outputProcessing(ctx, table, response.rows)
210
+ rows = await outputProcessing(table, response.rows)
216
211
  }
217
212
 
218
213
  if (calculation === CALCULATION_TYPES.STATS) {
@@ -239,27 +234,24 @@ exports.fetchView = async ctx => {
239
234
  }
240
235
 
241
236
  exports.fetch = async ctx => {
242
- const appId = ctx.appId
243
- const db = new CouchDB(appId)
237
+ const db = getAppDB()
244
238
 
245
239
  const tableId = ctx.params.tableId
246
240
  let table = await db.get(tableId)
247
241
  let rows = await getRawTableData(ctx, db, tableId)
248
- return outputProcessing(ctx, table, rows)
242
+ return outputProcessing(table, rows)
249
243
  }
250
244
 
251
245
  exports.find = async ctx => {
252
- const appId = ctx.appId
253
- const db = new CouchDB(appId)
246
+ const db = getAppDB()
254
247
  const table = await db.get(ctx.params.tableId)
255
- let row = await findRow(ctx, db, ctx.params.tableId, ctx.params.rowId)
256
- row = await outputProcessing(ctx, table, row)
248
+ let row = await findRow(ctx, ctx.params.tableId, ctx.params.rowId)
249
+ row = await outputProcessing(table, row)
257
250
  return row
258
251
  }
259
252
 
260
253
  exports.destroy = async function (ctx) {
261
- const appId = ctx.appId
262
- const db = new CouchDB(appId)
254
+ const db = getAppDB()
263
255
  const { _id, _rev } = ctx.request.body
264
256
  let row = await db.get(_id)
265
257
 
@@ -268,18 +260,17 @@ exports.destroy = async function (ctx) {
268
260
  }
269
261
  const table = await db.get(row.tableId)
270
262
  // update the row to include full relationships before deleting them
271
- row = await outputProcessing(ctx, table, row, { squash: false })
263
+ row = await outputProcessing(table, row, { squash: false })
272
264
  // now remove the relationships
273
265
  await linkRows.updateLinks({
274
- appId,
275
266
  eventType: linkRows.EventType.ROW_DELETE,
276
267
  row,
277
268
  tableId: row.tableId,
278
269
  })
279
270
  // remove any attachments that were on the row from object storage
280
- await cleanupAttachments(appId, table, { row })
271
+ await cleanupAttachments(table, { row })
281
272
  // remove any static formula
282
- await updateRelatedFormula(appId, table, row)
273
+ await updateRelatedFormula(table, row)
283
274
 
284
275
  let response
285
276
  if (ctx.params.tableId === InternalTables.USER_METADATA) {
@@ -295,20 +286,18 @@ exports.destroy = async function (ctx) {
295
286
  }
296
287
 
297
288
  exports.bulkDestroy = async ctx => {
298
- const appId = ctx.appId
299
- const db = new CouchDB(appId)
289
+ const db = getAppDB()
300
290
  const tableId = ctx.params.tableId
301
291
  const table = await db.get(tableId)
302
292
  let { rows } = ctx.request.body
303
293
 
304
294
  // before carrying out any updates, make sure the rows are ready to be returned
305
295
  // they need to be the full rows (including previous relationships) for automations
306
- rows = await outputProcessing(ctx, table, rows, { squash: false })
296
+ rows = await outputProcessing(table, rows, { squash: false })
307
297
 
308
298
  // remove the relationships first
309
299
  let updates = rows.map(row =>
310
300
  linkRows.updateLinks({
311
- appId,
312
301
  eventType: linkRows.EventType.ROW_DELETE,
313
302
  row,
314
303
  tableId: row.tableId,
@@ -327,8 +316,8 @@ exports.bulkDestroy = async ctx => {
327
316
  await db.bulkDocs(rows.map(row => ({ ...row, _deleted: true })))
328
317
  }
329
318
  // remove any attachments that were on the rows from object storage
330
- await cleanupAttachments(appId, table, { rows })
331
- await updateRelatedFormula(appId, table, rows)
319
+ await cleanupAttachments(table, { rows })
320
+ await updateRelatedFormula(table, rows)
332
321
  await Promise.all(updates)
333
322
  return { response: { ok: true }, rows }
334
323
  }
@@ -339,28 +328,27 @@ exports.search = async ctx => {
339
328
  return { rows: await exports.fetch(ctx) }
340
329
  }
341
330
 
342
- const appId = ctx.appId
343
331
  const { tableId } = ctx.params
344
- const db = new CouchDB(appId)
332
+ const db = getAppDB()
345
333
  const { paginate, query, ...params } = ctx.request.body
346
334
  params.version = ctx.version
347
335
  params.tableId = tableId
348
336
 
349
337
  let response
350
338
  if (paginate) {
351
- response = await paginatedSearch(appId, query, params)
339
+ response = await paginatedSearch(query, params)
352
340
  } else {
353
- response = await fullSearch(appId, query, params)
341
+ response = await fullSearch(query, params)
354
342
  }
355
343
 
356
344
  // Enrich search results with relationships
357
345
  if (response.rows && response.rows.length) {
358
346
  // enrich with global users if from users table
359
347
  if (tableId === InternalTables.USER_METADATA) {
360
- response.rows = await getGlobalUsersFromMetadata(appId, response.rows)
348
+ response.rows = await getGlobalUsersFromMetadata(response.rows)
361
349
  }
362
350
  const table = await db.get(tableId)
363
- response.rows = await outputProcessing(ctx, table, response.rows)
351
+ response.rows = await outputProcessing(table, response.rows)
364
352
  }
365
353
 
366
354
  return response
@@ -368,25 +356,22 @@ exports.search = async ctx => {
368
356
 
369
357
  exports.validate = async ctx => {
370
358
  return validate({
371
- appId: ctx.appId,
372
359
  tableId: ctx.params.tableId,
373
360
  row: ctx.request.body,
374
361
  })
375
362
  }
376
363
 
377
364
  exports.fetchEnrichedRow = async ctx => {
378
- const appId = ctx.appId
379
- const db = new CouchDB(appId)
365
+ const db = getAppDB()
380
366
  const tableId = ctx.params.tableId
381
367
  const rowId = ctx.params.rowId
382
368
  // need table to work out where links go in row
383
369
  let [table, row] = await Promise.all([
384
370
  db.get(tableId),
385
- findRow(ctx, db, tableId, rowId),
371
+ findRow(ctx, tableId, rowId),
386
372
  ])
387
373
  // get the link docs
388
374
  const linkVals = await linkRows.getLinkDocuments({
389
- appId,
390
375
  tableId,
391
376
  rowId,
392
377
  })
@@ -413,7 +398,7 @@ exports.fetchEnrichedRow = async ctx => {
413
398
  for (let [tableId, rows] of Object.entries(groups)) {
414
399
  // need to include the IDs in these rows for any links they may have
415
400
  linkedRows = linkedRows.concat(
416
- await outputProcessing(ctx, tables[tableId], rows)
401
+ await outputProcessing(tables[tableId], rows)
417
402
  )
418
403
  }
419
404
 
@@ -1,14 +1,14 @@
1
1
  const { SearchIndexes } = require("../../../db/utils")
2
2
  const fetch = require("node-fetch")
3
3
  const { getCouchUrl } = require("@budibase/backend-core/db")
4
+ const { getAppId } = require("@budibase/backend-core/context")
4
5
 
5
6
  /**
6
7
  * Class to build lucene query URLs.
7
8
  * Optionally takes a base lucene query object.
8
9
  */
9
10
  class QueryBuilder {
10
- constructor(appId, base) {
11
- this.appId = appId
11
+ constructor(base) {
12
12
  this.query = {
13
13
  string: {},
14
14
  fuzzy: {},
@@ -241,7 +241,8 @@ class QueryBuilder {
241
241
  }
242
242
 
243
243
  async run() {
244
- const url = `${getCouchUrl()}/${this.appId}/_design/database/_search/${
244
+ const appId = getAppId()
245
+ const url = `${getCouchUrl()}/${appId}/_design/database/_search/${
245
246
  SearchIndexes.ROWS
246
247
  }`
247
248
  const body = this.buildSearchBody()
@@ -278,7 +279,6 @@ const runQuery = async (url, body) => {
278
279
  * Gets round the fixed limit of 200 results from a query by fetching as many
279
280
  * pages as required and concatenating the results. This recursively operates
280
281
  * until enough results have been found.
281
- * @param appId {string} The app ID to search
282
282
  * @param query {object} The JSON query structure
283
283
  * @param params {object} The search params including:
284
284
  * tableId {string} The table ID to search
@@ -291,7 +291,7 @@ const runQuery = async (url, body) => {
291
291
  * rows {array|null} Current results in the recursive search
292
292
  * @returns {Promise<*[]|*>}
293
293
  */
294
- const recursiveSearch = async (appId, query, params) => {
294
+ const recursiveSearch = async (query, params) => {
295
295
  const bookmark = params.bookmark
296
296
  const rows = params.rows || []
297
297
  if (rows.length >= params.limit) {
@@ -301,7 +301,7 @@ const recursiveSearch = async (appId, query, params) => {
301
301
  if (rows.length > params.limit - 200) {
302
302
  pageSize = params.limit - rows.length
303
303
  }
304
- const page = await new QueryBuilder(appId, query)
304
+ const page = await new QueryBuilder(query)
305
305
  .setVersion(params.version)
306
306
  .setTable(params.tableId)
307
307
  .setBookmark(bookmark)
@@ -321,14 +321,13 @@ const recursiveSearch = async (appId, query, params) => {
321
321
  bookmark: page.bookmark,
322
322
  rows: [...rows, ...page.rows],
323
323
  }
324
- return await recursiveSearch(appId, query, newParams)
324
+ return await recursiveSearch(query, newParams)
325
325
  }
326
326
 
327
327
  /**
328
328
  * Performs a paginated search. A bookmark will be returned to allow the next
329
329
  * page to be fetched. There is a max limit off 200 results per page in a
330
330
  * paginated search.
331
- * @param appId {string} The app ID to search
332
331
  * @param query {object} The JSON query structure
333
332
  * @param params {object} The search params including:
334
333
  * tableId {string} The table ID to search
@@ -340,13 +339,13 @@ const recursiveSearch = async (appId, query, params) => {
340
339
  * bookmark {string} The bookmark to resume from
341
340
  * @returns {Promise<{hasNextPage: boolean, rows: *[]}>}
342
341
  */
343
- exports.paginatedSearch = async (appId, query, params) => {
342
+ exports.paginatedSearch = async (query, params) => {
344
343
  let limit = params.limit
345
344
  if (limit == null || isNaN(limit) || limit < 0) {
346
345
  limit = 50
347
346
  }
348
347
  limit = Math.min(limit, 200)
349
- const search = new QueryBuilder(appId, query)
348
+ const search = new QueryBuilder(query)
350
349
  .setVersion(params.version)
351
350
  .setTable(params.tableId)
352
351
  .setSort(params.sort)
@@ -375,7 +374,6 @@ exports.paginatedSearch = async (appId, query, params) => {
375
374
  * desired amount of results. There is a limit of 1000 results to avoid
376
375
  * heavy performance hits, and to avoid client components breaking from
377
376
  * handling too much data.
378
- * @param appId {string} The app ID to search
379
377
  * @param query {object} The JSON query structure
380
378
  * @param params {object} The search params including:
381
379
  * tableId {string} The table ID to search
@@ -386,12 +384,12 @@ exports.paginatedSearch = async (appId, query, params) => {
386
384
  * limit {number} The desired number of results
387
385
  * @returns {Promise<{rows: *}>}
388
386
  */
389
- exports.fullSearch = async (appId, query, params) => {
387
+ exports.fullSearch = async (query, params) => {
390
388
  let limit = params.limit
391
389
  if (limit == null || isNaN(limit) || limit < 0) {
392
390
  limit = 1000
393
391
  }
394
392
  params.limit = Math.min(limit, 1000)
395
- const rows = await recursiveSearch(appId, query, params)
393
+ const rows = await recursiveSearch(query, params)
396
394
  return { rows }
397
395
  }
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const { getRowParams } = require("../../../db/utils")
3
2
  const {
4
3
  outputProcessing,
@@ -8,6 +7,7 @@ const {
8
7
  const { FieldTypes, FormulaTypes } = require("../../../constants")
9
8
  const { isEqual } = require("lodash")
10
9
  const { cloneDeep } = require("lodash/fp")
10
+ const { getAppDB } = require("@budibase/backend-core/context")
11
11
 
12
12
  /**
13
13
  * This function runs through a list of enriched rows, looks at the rows which
@@ -15,8 +15,8 @@ const { cloneDeep } = require("lodash/fp")
15
15
  * updated.
16
16
  * NOTE: this will only for affect static formulas.
17
17
  */
18
- exports.updateRelatedFormula = async (appId, table, enrichedRows) => {
19
- const db = new CouchDB(appId)
18
+ exports.updateRelatedFormula = async (table, enrichedRows) => {
19
+ const db = getAppDB()
20
20
  // no formula to update, we're done
21
21
  if (!table.relatedFormula) {
22
22
  return
@@ -57,7 +57,7 @@ exports.updateRelatedFormula = async (appId, table, enrichedRows) => {
57
57
  // re-enrich rows for all the related, don't update the related formula for them
58
58
  promises = promises.concat(
59
59
  relatedRows[tableId].map(related =>
60
- exports.finaliseRow(appId, relatedTable, related, {
60
+ exports.finaliseRow(relatedTable, related, {
61
61
  updateFormula: false,
62
62
  })
63
63
  )
@@ -69,8 +69,8 @@ exports.updateRelatedFormula = async (appId, table, enrichedRows) => {
69
69
  await Promise.all(promises)
70
70
  }
71
71
 
72
- exports.updateAllFormulasInTable = async (appId, table) => {
73
- const db = new CouchDB(appId)
72
+ exports.updateAllFormulasInTable = async table => {
73
+ const db = getAppDB()
74
74
  // start by getting the raw rows (which will be written back to DB after update)
75
75
  let rows = (
76
76
  await db.allDocs(
@@ -81,7 +81,7 @@ exports.updateAllFormulasInTable = async (appId, table) => {
81
81
  ).rows.map(row => row.doc)
82
82
  // now enrich the rows, note the clone so that we have the base state of the
83
83
  // rows so that we don't write any of the enriched information back
84
- let enrichedRows = await outputProcessing({ appId }, table, cloneDeep(rows), {
84
+ let enrichedRows = await outputProcessing(table, cloneDeep(rows), {
85
85
  squash: false,
86
86
  })
87
87
  const updatedRows = []
@@ -109,15 +109,14 @@ exports.updateAllFormulasInTable = async (appId, table) => {
109
109
  * expects the row to be totally enriched/contain all relationships.
110
110
  */
111
111
  exports.finaliseRow = async (
112
- appId,
113
112
  table,
114
113
  row,
115
114
  { oldTable, updateFormula } = { updateFormula: true }
116
115
  ) => {
117
- const db = new CouchDB(appId)
116
+ const db = getAppDB()
118
117
  row.type = "row"
119
118
  // process the row before return, to include relationships
120
- let enrichedRow = await outputProcessing({ appId }, table, cloneDeep(row), {
119
+ let enrichedRow = await outputProcessing(table, cloneDeep(row), {
121
120
  squash: false,
122
121
  })
123
122
  // use enriched row to generate formulas for saving, specifically only use as context
@@ -151,7 +150,7 @@ exports.finaliseRow = async (
151
150
  enrichedRow = await processFormulas(table, enrichedRow, { dynamic: false })
152
151
  // this updates the related formulas in other rows based on the relations to this row
153
152
  if (updateFormula) {
154
- await exports.updateRelatedFormula(appId, table, enrichedRow)
153
+ await exports.updateRelatedFormula(table, enrichedRow)
155
154
  }
156
155
  return { row: enrichedRow, table }
157
156
  }
@@ -1,11 +1,11 @@
1
1
  const validateJs = require("validate.js")
2
2
  const { cloneDeep } = require("lodash/fp")
3
- const CouchDB = require("../../../db")
4
3
  const { InternalTables } = require("../../../db/utils")
5
4
  const userController = require("../user")
6
5
  const { FieldTypes } = require("../../../constants")
7
6
  const { processStringSync } = require("@budibase/string-templates")
8
7
  const { makeExternalQuery } = require("../../../integrations/base/utils")
8
+ const { getAppDB } = require("@budibase/backend-core/context")
9
9
 
10
10
  validateJs.extend(validateJs.validators.datetime, {
11
11
  parse: function (value) {
@@ -17,14 +17,15 @@ validateJs.extend(validateJs.validators.datetime, {
17
17
  },
18
18
  })
19
19
 
20
- exports.getDatasourceAndQuery = async (appId, json) => {
20
+ exports.getDatasourceAndQuery = async json => {
21
21
  const datasourceId = json.endpoint.datasourceId
22
- const db = new CouchDB(appId)
22
+ const db = getAppDB()
23
23
  const datasource = await db.get(datasourceId)
24
24
  return makeExternalQuery(datasource, json)
25
25
  }
26
26
 
27
- exports.findRow = async (ctx, db, tableId, rowId) => {
27
+ exports.findRow = async (ctx, tableId, rowId) => {
28
+ const db = getAppDB()
28
29
  let row
29
30
  // TODO remove special user case in future
30
31
  if (tableId === InternalTables.USER_METADATA) {
@@ -42,9 +43,9 @@ exports.findRow = async (ctx, db, tableId, rowId) => {
42
43
  return row
43
44
  }
44
45
 
45
- exports.validate = async ({ appId, tableId, row, table }) => {
46
+ exports.validate = async ({ tableId, row, table }) => {
46
47
  if (!table) {
47
- const db = new CouchDB(appId)
48
+ const db = getAppDB()
48
49
  table = await db.get(tableId)
49
50
  }
50
51
  const errors = {}
@@ -1,10 +1,9 @@
1
- const CouchDB = require("../../db")
2
1
  const { getScreenParams, generateScreenID } = require("../../db/utils")
3
2
  const { AccessController } = require("@budibase/backend-core/roles")
3
+ const { getAppDB } = require("@budibase/backend-core/context")
4
4
 
5
5
  exports.fetch = async ctx => {
6
- const appId = ctx.appId
7
- const db = new CouchDB(appId)
6
+ const db = getAppDB()
8
7
 
9
8
  const screens = (
10
9
  await db.allDocs(
@@ -14,15 +13,14 @@ exports.fetch = async ctx => {
14
13
  )
15
14
  ).rows.map(element => element.doc)
16
15
 
17
- ctx.body = await new AccessController(appId).checkScreensAccess(
16
+ ctx.body = await new AccessController().checkScreensAccess(
18
17
  screens,
19
18
  ctx.user.role._id
20
19
  )
21
20
  }
22
21
 
23
22
  exports.save = async ctx => {
24
- const appId = ctx.appId
25
- const db = new CouchDB(appId)
23
+ const db = getAppDB()
26
24
  let screen = ctx.request.body
27
25
 
28
26
  if (!screen._id) {
@@ -39,7 +37,7 @@ exports.save = async ctx => {
39
37
  }
40
38
 
41
39
  exports.destroy = async ctx => {
42
- const db = new CouchDB(ctx.appId)
40
+ const db = getAppDB()
43
41
  await db.remove(ctx.params.screenId, ctx.params.screenRev)
44
42
  ctx.body = {
45
43
  message: "Screen deleted successfully",
@@ -6,7 +6,6 @@ const uuid = require("uuid")
6
6
  const { ObjectStoreBuckets } = require("../../../constants")
7
7
  const { processString } = require("@budibase/string-templates")
8
8
  const { getAllApps } = require("@budibase/backend-core/db")
9
- const CouchDB = require("../../../db")
10
9
  const {
11
10
  loadHandlebarsFile,
12
11
  NODE_MODULES_PATH,
@@ -17,6 +16,7 @@ const { clientLibraryPath } = require("../../../utilities")
17
16
  const { upload } = require("../../../utilities/fileSystem")
18
17
  const { attachmentsRelativeURL } = require("../../../utilities")
19
18
  const { DocumentTypes } = require("../../../db/utils")
19
+ const { getAppDB } = require("@budibase/backend-core/context")
20
20
  const AWS = require("aws-sdk")
21
21
  const AWS_REGION = env.AWS_REGION ? env.AWS_REGION : "eu-west-1"
22
22
 
@@ -44,7 +44,7 @@ async function getAppIdFromUrl(ctx) {
44
44
  let possibleAppUrl = `/${encodeURI(ctx.params.appId).toLowerCase()}`
45
45
 
46
46
  // search prod apps for a url that matches, exclude dev where id is always used
47
- const apps = await getAllApps(CouchDB, { dev: false })
47
+ const apps = await getAllApps({ dev: false })
48
48
  const app = apps.filter(
49
49
  a => a.url && a.url.toLowerCase() === possibleAppUrl
50
50
  )[0]
@@ -85,7 +85,7 @@ exports.uploadFile = async function (ctx) {
85
85
  exports.serveApp = async function (ctx) {
86
86
  let appId = await getAppIdFromUrl(ctx)
87
87
  const App = require("./templates/BudibaseApp.svelte").default
88
- const db = new CouchDB(appId, { skip_setup: true })
88
+ const db = getAppDB({ skip_setup: true })
89
89
  const appInfo = await db.get(DocumentTypes.APP_METADATA)
90
90
 
91
91
  const { head, html, css } = App.render({
@@ -111,7 +111,7 @@ exports.serveClientLibrary = async function (ctx) {
111
111
  }
112
112
 
113
113
  exports.getSignedUploadURL = async function (ctx) {
114
- const database = new CouchDB(ctx.appId)
114
+ const database = getAppDB()
115
115
 
116
116
  // Ensure datasource is valid
117
117
  let datasource
@@ -1,10 +1,10 @@
1
- const CouchDB = require("../../../db")
2
1
  const { FieldTypes, FormulaTypes } = require("../../../constants")
3
2
  const { getAllInternalTables, clearColumns } = require("./utils")
4
3
  const { doesContainStrings } = require("@budibase/string-templates")
5
4
  const { cloneDeep } = require("lodash/fp")
6
5
  const { isEqual, uniq } = require("lodash")
7
6
  const { updateAllFormulasInTable } = require("../row/staticFormula")
7
+ const { getAppDB } = require("@budibase/backend-core/context")
8
8
 
9
9
  function isStaticFormula(column) {
10
10
  return (
@@ -37,14 +37,9 @@ function getFormulaThatUseColumn(table, columnNames) {
37
37
  * This functions checks for when a related table, column or related column is deleted, if any
38
38
  * tables need to have the formula column removed.
39
39
  */
40
- async function checkIfFormulaNeedsCleared(
41
- appId,
42
- table,
43
- { oldTable, deletion }
44
- ) {
45
- const db = new CouchDB(appId)
40
+ async function checkIfFormulaNeedsCleared(table, { oldTable, deletion }) {
46
41
  // start by retrieving all tables, remove the current table from the list
47
- const tables = (await getAllInternalTables(appId)).filter(
42
+ const tables = (await getAllInternalTables()).filter(
48
43
  tbl => tbl._id !== table._id
49
44
  )
50
45
  const schemaToUse = oldTable ? oldTable.schema : table.schema
@@ -60,7 +55,7 @@ async function checkIfFormulaNeedsCleared(
60
55
  }
61
56
  const columnsToDelete = getFormulaThatUseColumn(tableToUse, removed.name)
62
57
  if (columnsToDelete.length > 0) {
63
- await clearColumns(db, table, columnsToDelete)
58
+ await clearColumns(table, columnsToDelete)
64
59
  }
65
60
  // need a special case, where a column has been removed from this table, but was used
66
61
  // in a different, related tables formula
@@ -85,7 +80,7 @@ async function checkIfFormulaNeedsCleared(
85
80
  )
86
81
  }
87
82
  if (relatedFormulaToRemove.length > 0) {
88
- await clearColumns(db, relatedTable, uniq(relatedFormulaToRemove))
83
+ await clearColumns(relatedTable, uniq(relatedFormulaToRemove))
89
84
  }
90
85
  }
91
86
  }
@@ -99,13 +94,12 @@ async function checkIfFormulaNeedsCleared(
99
94
  * specifically only for static formula.
100
95
  */
101
96
  async function updateRelatedFormulaLinksOnTables(
102
- appId,
103
97
  table,
104
98
  { deletion } = { deletion: false }
105
99
  ) {
106
- const db = new CouchDB(appId)
100
+ const db = getAppDB()
107
101
  // start by retrieving all tables, remove the current table from the list
108
- const tables = (await getAllInternalTables(appId)).filter(
102
+ const tables = (await getAllInternalTables()).filter(
109
103
  tbl => tbl._id !== table._id
110
104
  )
111
105
  // clone the tables, so we can compare at end
@@ -155,7 +149,7 @@ async function updateRelatedFormulaLinksOnTables(
155
149
  }
156
150
  }
157
151
 
158
- async function checkIfFormulaUpdated(appId, table, { oldTable }) {
152
+ async function checkIfFormulaUpdated(table, { oldTable }) {
159
153
  // look to see if any formula values have changed
160
154
  const shouldUpdate = Object.values(table.schema).find(
161
155
  column =>
@@ -166,18 +160,14 @@ async function checkIfFormulaUpdated(appId, table, { oldTable }) {
166
160
  )
167
161
  // if a static formula column has updated, then need to run the update
168
162
  if (shouldUpdate != null) {
169
- await updateAllFormulasInTable(appId, table)
163
+ await updateAllFormulasInTable(table)
170
164
  }
171
165
  }
172
166
 
173
- exports.runStaticFormulaChecks = async (
174
- appId,
175
- table,
176
- { oldTable, deletion }
177
- ) => {
178
- await updateRelatedFormulaLinksOnTables(appId, table, { deletion })
179
- await checkIfFormulaNeedsCleared(appId, table, { oldTable, deletion })
167
+ exports.runStaticFormulaChecks = async (table, { oldTable, deletion }) => {
168
+ await updateRelatedFormulaLinksOnTables(table, { deletion })
169
+ await checkIfFormulaNeedsCleared(table, { oldTable, deletion })
180
170
  if (!deletion) {
181
- await checkIfFormulaUpdated(appId, table, { oldTable })
171
+ await checkIfFormulaUpdated(table, { oldTable })
182
172
  }
183
173
  }