@budibase/server 1.0.49-alpha.3 → 1.0.49-alpha.7

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 (320) 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.21e57eb4.js → index.b7cd931c.js} +1 -1
  8. package/builder/index.html +1 -1
  9. package/coverage/clover.xml +1917 -1929
  10. package/coverage/coverage-final.json +54 -54
  11. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/application.js.html +58 -37
  14. package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
  15. package/coverage/lcov-report/api/controllers/automation.js.html +21 -51
  16. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
  18. package/coverage/lcov-report/api/controllers/component.js.html +10 -13
  19. package/coverage/lcov-report/api/controllers/datasource.js.html +17 -23
  20. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  21. package/coverage/lcov-report/api/controllers/index.html +52 -52
  22. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/layout.js.html +4 -4
  24. package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
  25. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/permission.js.html +6 -6
  27. package/coverage/lcov-report/api/controllers/query/index.html +10 -10
  28. package/coverage/lcov-report/api/controllers/query/index.js.html +21 -18
  29. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  31. package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
  32. package/coverage/lcov-report/api/controllers/row/external.js.html +6 -12
  33. package/coverage/lcov-report/api/controllers/row/index.html +22 -22
  34. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/row/internal.js.html +37 -82
  36. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +19 -25
  37. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +14 -17
  38. package/coverage/lcov-report/api/controllers/row/utils.js.html +15 -12
  39. package/coverage/lcov-report/api/controllers/screen.js.html +10 -16
  40. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +20 -50
  42. package/coverage/lcov-report/api/controllers/table/external.js.html +15 -24
  43. package/coverage/lcov-report/api/controllers/table/index.html +37 -37
  44. package/coverage/lcov-report/api/controllers/table/index.js.html +7 -7
  45. package/coverage/lcov-report/api/controllers/table/internal.js.html +36 -45
  46. package/coverage/lcov-report/api/controllers/table/utils.js.html +40 -76
  47. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/user.js.html +26 -35
  49. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  51. package/coverage/lcov-report/api/controllers/view/index.js.html +15 -21
  52. package/coverage/lcov-report/api/controllers/view/utils.js.html +25 -10
  53. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  54. package/coverage/lcov-report/api/controllers/webhook.js.html +21 -15
  55. package/coverage/lcov-report/api/index.html +1 -1
  56. package/coverage/lcov-report/api/index.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/index.html +1 -1
  69. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  84. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  87. package/coverage/lcov-report/automations/actions.js.html +1 -1
  88. package/coverage/lcov-report/automations/automationUtils.js.html +4 -7
  89. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  90. package/coverage/lcov-report/automations/index.html +18 -18
  91. package/coverage/lcov-report/automations/index.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/createRow.js.html +2 -5
  94. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/index.html +1 -1
  101. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/updateRow.js.html +2 -2
  108. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  109. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  115. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  116. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  117. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  118. package/coverage/lcov-report/automations/triggers.js.html +46 -40
  119. package/coverage/lcov-report/automations/utils.js.html +24 -12
  120. package/coverage/lcov-report/constants/index.html +1 -1
  121. package/coverage/lcov-report/constants/index.js.html +1 -1
  122. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  123. package/coverage/lcov-report/constants/screens.js.html +1 -1
  124. package/coverage/lcov-report/db/client.js.html +18 -18
  125. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  126. package/coverage/lcov-report/db/index.html +1 -1
  127. package/coverage/lcov-report/db/index.js.html +3 -3
  128. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +11 -23
  129. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  130. package/coverage/lcov-report/db/linkedRows/index.js.html +24 -66
  131. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +28 -28
  132. package/coverage/lcov-report/db/newid.js.html +1 -1
  133. package/coverage/lcov-report/db/utils.js.html +5 -5
  134. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  135. package/coverage/lcov-report/events/index.html +1 -1
  136. package/coverage/lcov-report/events/index.js.html +1 -1
  137. package/coverage/lcov-report/events/utils.js.html +1 -1
  138. package/coverage/lcov-report/index.html +88 -88
  139. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  140. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  141. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  142. package/coverage/lcov-report/middleware/authorized.js.html +21 -15
  143. package/coverage/lcov-report/middleware/builder.js.html +3 -3
  144. package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
  145. package/coverage/lcov-report/middleware/index.html +28 -28
  146. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  147. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  148. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  149. package/coverage/lcov-report/middleware/usageQuota.js.html +29 -29
  150. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  151. package/coverage/lcov-report/threads/automation.js.html +30 -24
  152. package/coverage/lcov-report/threads/index.html +16 -16
  153. package/coverage/lcov-report/threads/index.js.html +1 -1
  154. package/coverage/lcov-report/threads/query.js.html +17 -17
  155. package/coverage/lcov-report/threads/utils.js.html +1 -1
  156. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  157. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  158. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  159. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  160. package/coverage/lcov-report/utilities/global.js.html +44 -35
  161. package/coverage/lcov-report/utilities/index.html +27 -27
  162. package/coverage/lcov-report/utilities/index.js.html +40 -70
  163. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  164. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  165. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  166. package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
  167. package/coverage/lcov-report/utilities/rowProcessor/index.html +11 -11
  168. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +16 -58
  169. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  170. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  171. package/coverage/lcov-report/utilities/security.js.html +1 -1
  172. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  174. package/coverage/lcov-report/utilities/usageQuota/index.js.html +5 -2
  175. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
  176. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  177. package/coverage/lcov-report/utilities/users.js.html +5 -5
  178. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  179. package/coverage/lcov.info +3189 -3198
  180. package/dist/api/controllers/application.js +31 -28
  181. package/dist/api/controllers/auth.js +4 -5
  182. package/dist/api/controllers/automation.js +14 -19
  183. package/dist/api/controllers/cloud.js +2 -3
  184. package/dist/api/controllers/component.js +3 -4
  185. package/dist/api/controllers/datasource.js +9 -10
  186. package/dist/api/controllers/deploy/Deployment.js +3 -6
  187. package/dist/api/controllers/deploy/index.js +12 -13
  188. package/dist/api/controllers/dev.js +5 -5
  189. package/dist/api/controllers/layout.js +3 -3
  190. package/dist/api/controllers/metadata.js +4 -4
  191. package/dist/api/controllers/permission.js +4 -4
  192. package/dist/api/controllers/query/import/index.js +4 -6
  193. package/dist/api/controllers/query/index.js +11 -10
  194. package/dist/api/controllers/role.js +5 -5
  195. package/dist/api/controllers/routing.js +5 -6
  196. package/dist/api/controllers/row/ExternalRequest.js +76 -63
  197. package/dist/api/controllers/row/external.js +4 -4
  198. package/dist/api/controllers/row/internal.js +29 -44
  199. package/dist/api/controllers/row/internalSearch.js +11 -13
  200. package/dist/api/controllers/row/staticFormula.js +11 -11
  201. package/dist/api/controllers/row/utils.js +7 -6
  202. package/dist/api/controllers/screen.js +5 -7
  203. package/dist/api/controllers/static/index.js +4 -4
  204. package/dist/api/controllers/table/bulkFormula.js +14 -15
  205. package/dist/api/controllers/table/external.js +7 -10
  206. package/dist/api/controllers/table/index.js +5 -5
  207. package/dist/api/controllers/table/internal.js +16 -19
  208. package/dist/api/controllers/table/utils.js +29 -31
  209. package/dist/api/controllers/user.js +16 -20
  210. package/dist/api/controllers/view/index.js +8 -10
  211. package/dist/api/controllers/view/utils.js +9 -4
  212. package/dist/api/controllers/webhook.js +10 -8
  213. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  214. package/dist/automations/automationUtils.js +2 -3
  215. package/dist/automations/steps/createRow.js +1 -1
  216. package/dist/automations/steps/updateRow.js +1 -1
  217. package/dist/automations/triggers.js +27 -25
  218. package/dist/automations/utils.js +10 -5
  219. package/dist/db/linkedRows/LinkController.js +3 -7
  220. package/dist/db/linkedRows/index.js +16 -26
  221. package/dist/db/linkedRows/linkUtils.js +6 -6
  222. package/dist/db/views/staticViews.js +9 -10
  223. package/dist/environment.js +2 -1
  224. package/dist/integrations/utils.js +3 -0
  225. package/dist/middleware/authorized.js +5 -3
  226. package/dist/middleware/builder.js +2 -2
  227. package/dist/middleware/currentapp.js +41 -37
  228. package/dist/middleware/usageQuota.js +2 -2
  229. package/dist/migrations/functions/usageQuotas/syncApps.js +6 -9
  230. package/dist/migrations/functions/usageQuotas/syncRows.js +7 -9
  231. package/dist/package.json +4 -4
  232. package/dist/tests/utilities/TestConfiguration.js +67 -44
  233. package/dist/threads/automation.js +13 -11
  234. package/dist/threads/query.js +11 -11
  235. package/dist/tsconfig.tsbuildinfo +1 -1
  236. package/dist/utilities/fileSystem/index.js +4 -3
  237. package/dist/utilities/global.js +15 -12
  238. package/dist/utilities/index.js +7 -17
  239. package/dist/utilities/routing/index.js +5 -5
  240. package/dist/utilities/rowProcessor/index.js +9 -10
  241. package/dist/utilities/usageQuota/index.js +1 -0
  242. package/dist/utilities/usageQuota/rows.js +1 -0
  243. package/dist/utilities/users.js +3 -3
  244. package/dist/utilities/workerRequests.js +4 -4
  245. package/package.json +5 -5
  246. package/scripts/likeCypress.ts +1 -1
  247. package/src/api/controllers/application.js +35 -28
  248. package/src/api/controllers/auth.js +4 -5
  249. package/src/api/controllers/automation.js +13 -23
  250. package/src/api/controllers/cloud.js +2 -3
  251. package/src/api/controllers/component.js +3 -4
  252. package/src/api/controllers/datasource.js +9 -11
  253. package/src/api/controllers/deploy/Deployment.js +3 -7
  254. package/src/api/controllers/deploy/index.js +20 -13
  255. package/src/api/controllers/dev.js +5 -5
  256. package/src/api/controllers/layout.js +3 -3
  257. package/src/api/controllers/metadata.js +4 -9
  258. package/src/api/controllers/permission.js +4 -4
  259. package/src/api/controllers/query/import/index.ts +4 -6
  260. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  261. package/src/api/controllers/query/index.js +11 -10
  262. package/src/api/controllers/role.js +5 -5
  263. package/src/api/controllers/routing.js +5 -6
  264. package/src/api/controllers/row/ExternalRequest.ts +53 -42
  265. package/src/api/controllers/row/external.js +4 -6
  266. package/src/api/controllers/row/internal.js +29 -44
  267. package/src/api/controllers/row/internalSearch.js +11 -13
  268. package/src/api/controllers/row/staticFormula.js +10 -11
  269. package/src/api/controllers/row/utils.js +7 -6
  270. package/src/api/controllers/screen.js +5 -7
  271. package/src/api/controllers/static/index.js +4 -4
  272. package/src/api/controllers/table/bulkFormula.js +13 -23
  273. package/src/api/controllers/table/external.js +7 -10
  274. package/src/api/controllers/table/index.js +5 -5
  275. package/src/api/controllers/table/internal.js +18 -21
  276. package/src/api/controllers/table/utils.js +29 -41
  277. package/src/api/controllers/user.js +17 -20
  278. package/src/api/controllers/view/index.js +8 -10
  279. package/src/api/controllers/view/utils.js +9 -4
  280. package/src/api/controllers/webhook.js +10 -8
  281. package/src/api/routes/tests/automation.spec.js +1 -0
  282. package/src/api/routes/tests/misc.spec.js +0 -1
  283. package/src/api/routes/tests/routing.spec.js +21 -12
  284. package/src/api/routes/tests/row.spec.js +7 -4
  285. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  286. package/src/automations/automationUtils.js +2 -3
  287. package/src/automations/steps/createRow.js +0 -1
  288. package/src/automations/steps/updateRow.js +1 -1
  289. package/src/automations/triggers.js +33 -31
  290. package/src/automations/utils.js +9 -5
  291. package/src/db/linkedRows/LinkController.js +3 -7
  292. package/src/db/linkedRows/index.js +16 -30
  293. package/src/db/linkedRows/linkUtils.js +6 -6
  294. package/src/db/tests/linkController.spec.js +0 -1
  295. package/src/db/tests/linkTests.spec.js +5 -6
  296. package/src/db/views/staticViews.js +8 -10
  297. package/src/environment.js +2 -1
  298. package/src/integrations/utils.ts +4 -1
  299. package/src/middleware/authorized.js +5 -3
  300. package/src/middleware/builder.js +2 -2
  301. package/src/middleware/currentapp.js +50 -46
  302. package/src/middleware/tests/authorized.spec.js +7 -2
  303. package/src/middleware/tests/currentapp.spec.js +6 -0
  304. package/src/middleware/usageQuota.js +2 -2
  305. package/src/migrations/functions/usageQuotas/syncApps.ts +4 -4
  306. package/src/migrations/functions/usageQuotas/syncRows.ts +5 -4
  307. package/src/module.d.ts +3 -0
  308. package/src/tests/utilities/TestConfiguration.js +69 -50
  309. package/src/threads/automation.js +17 -15
  310. package/src/threads/query.js +12 -12
  311. package/src/utilities/fileSystem/index.js +4 -3
  312. package/src/utilities/global.js +15 -12
  313. package/src/utilities/index.js +7 -17
  314. package/src/utilities/routing/index.js +5 -5
  315. package/src/utilities/rowProcessor/index.js +9 -23
  316. package/src/utilities/usageQuota/index.js +1 -0
  317. package/src/utilities/usageQuota/rows.js +1 -0
  318. package/src/utilities/users.js +3 -3
  319. package/src/utilities/workerRequests.js +4 -4
  320. package/tsconfig.json +2 -1
@@ -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
  }
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const {
3
2
  buildExternalTableId,
4
3
  breakExternalTableId,
@@ -19,6 +18,7 @@ const { makeExternalQuery } = require("../../../integrations/base/utils")
19
18
  const { cloneDeep } = require("lodash/fp")
20
19
  const csvParser = require("../../../utilities/csvParser")
21
20
  const { handleRequest } = require("../row/external")
21
+ const { getAppDB } = require("@budibase/backend-core/context")
22
22
 
23
23
  async function makeTableRequest(
24
24
  datasource,
@@ -159,7 +159,6 @@ function isRelationshipSetup(column) {
159
159
  }
160
160
 
161
161
  exports.save = async function (ctx) {
162
- const appId = ctx.appId
163
162
  const table = ctx.request.body
164
163
  // can't do this right now
165
164
  delete table.dataImport
@@ -176,14 +175,14 @@ exports.save = async function (ctx) {
176
175
 
177
176
  let oldTable
178
177
  if (ctx.request.body && ctx.request.body._id) {
179
- oldTable = await getTable(appId, ctx.request.body._id)
178
+ oldTable = await getTable(ctx.request.body._id)
180
179
  }
181
180
 
182
181
  if (hasTypeChanged(tableToSave, oldTable)) {
183
182
  ctx.throw(400, "A column type has changed.")
184
183
  }
185
184
 
186
- const db = new CouchDB(appId)
185
+ const db = getAppDB()
187
186
  const datasource = await db.get(datasourceId)
188
187
  const oldTables = cloneDeep(datasource.entities)
189
188
  const tables = datasource.entities
@@ -267,14 +266,13 @@ exports.save = async function (ctx) {
267
266
  }
268
267
 
269
268
  exports.destroy = async function (ctx) {
270
- const appId = ctx.appId
271
- const tableToDelete = await getTable(appId, ctx.params.tableId)
269
+ const tableToDelete = await getTable(ctx.params.tableId)
272
270
  if (!tableToDelete || !tableToDelete.created) {
273
271
  ctx.throw(400, "Cannot delete tables which weren't created in Budibase.")
274
272
  }
275
273
  const datasourceId = getDatasourceId(tableToDelete)
276
274
 
277
- const db = new CouchDB(appId)
275
+ const db = getAppDB()
278
276
  const datasource = await db.get(datasourceId)
279
277
  const tables = datasource.entities
280
278
 
@@ -290,8 +288,7 @@ exports.destroy = async function (ctx) {
290
288
  }
291
289
 
292
290
  exports.bulkImport = async function (ctx) {
293
- const appId = ctx.appId
294
- const table = await getTable(appId, ctx.params.tableId)
291
+ const table = await getTable(ctx.params.tableId)
295
292
  const { dataImport } = ctx.request.body
296
293
  if (!dataImport || !dataImport.schema || !dataImport.csvString) {
297
294
  ctx.throw(400, "Provided data import information is invalid.")
@@ -300,7 +297,7 @@ exports.bulkImport = async function (ctx) {
300
297
  ...dataImport,
301
298
  existingTable: table,
302
299
  })
303
- await handleRequest(appId, DataSourceOperation.BULK_CREATE, table._id, {
300
+ await handleRequest(DataSourceOperation.BULK_CREATE, table._id, {
304
301
  rows,
305
302
  })
306
303
  return table
@@ -1,9 +1,9 @@
1
- const CouchDB = require("../../../db")
2
1
  const internal = require("./internal")
3
2
  const external = require("./external")
4
3
  const csvParser = require("../../../utilities/csvParser")
5
4
  const { isExternalTable, isSQL } = require("../../../integrations/utils")
6
5
  const { getDatasourceParams } = require("../../../db/utils")
6
+ const { getAppDB } = require("@budibase/backend-core/context")
7
7
  const { getTable, getAllInternalTables } = require("./utils")
8
8
 
9
9
  function pickApi({ tableId, table }) {
@@ -20,9 +20,9 @@ function pickApi({ tableId, table }) {
20
20
 
21
21
  // covers both internal and external
22
22
  exports.fetch = async function (ctx) {
23
- const db = new CouchDB(ctx.appId)
23
+ const db = getAppDB()
24
24
 
25
- const internal = await getAllInternalTables(ctx.appId)
25
+ const internal = await getAllInternalTables()
26
26
 
27
27
  const externalTables = await db.allDocs(
28
28
  getDatasourceParams("plus", {
@@ -49,7 +49,7 @@ exports.fetch = async function (ctx) {
49
49
 
50
50
  exports.find = async function (ctx) {
51
51
  const tableId = ctx.params.id
52
- ctx.body = await getTable(ctx.appId, tableId)
52
+ ctx.body = await getTable(tableId)
53
53
  }
54
54
 
55
55
  exports.save = async function (ctx) {
@@ -88,7 +88,7 @@ exports.validateCSVSchema = async function (ctx) {
88
88
  const { csvString, schema = {}, tableId } = ctx.request.body
89
89
  let existingTable
90
90
  if (tableId) {
91
- existingTable = await getTable(ctx.appId, tableId)
91
+ existingTable = await getTable(tableId)
92
92
  }
93
93
  let result = await csvParser.parse(csvString, schema)
94
94
  if (existingTable) {
@@ -1,4 +1,3 @@
1
- const CouchDB = require("../../../db")
2
1
  const linkRows = require("../../../db/linkedRows")
3
2
  const { getRowParams, generateTableID } = require("../../../db/utils")
4
3
  const { FieldTypes } = require("../../../constants")
@@ -9,12 +8,13 @@ const {
9
8
  handleDataImport,
10
9
  } = require("./utils")
11
10
  const usageQuota = require("../../../utilities/usageQuota")
11
+ const { getAppDB } = require("@budibase/backend-core/context")
12
+ const env = require("../../../environment")
12
13
  const { cleanupAttachments } = require("../../../utilities/rowProcessor")
13
14
  const { runStaticFormulaChecks } = require("./bulkFormula")
14
15
 
15
16
  exports.save = async function (ctx) {
16
- const appId = ctx.appId
17
- const db = new CouchDB(appId)
17
+ const db = getAppDB()
18
18
  const { dataImport, ...rest } = ctx.request.body
19
19
  let tableToSave = {
20
20
  type: "table",
@@ -36,8 +36,7 @@ exports.save = async function (ctx) {
36
36
  // saving a table is a complex operation, involving many different steps, this
37
37
  // has been broken out into a utility to make it more obvious/easier to manipulate
38
38
  const tableSaveFunctions = new TableSaveFunctions({
39
- db,
40
- ctx,
39
+ user: ctx.user,
41
40
  oldTable,
42
41
  dataImport,
43
42
  })
@@ -82,7 +81,6 @@ exports.save = async function (ctx) {
82
81
  // update linked rows
83
82
  try {
84
83
  const linkResp = await linkRows.updateLinks({
85
- appId,
86
84
  eventType: oldTable
87
85
  ? linkRows.EventType.TABLE_UPDATED
88
86
  : linkRows.EventType.TABLE_SAVE,
@@ -107,13 +105,12 @@ exports.save = async function (ctx) {
107
105
 
108
106
  tableToSave = await tableSaveFunctions.after(tableToSave)
109
107
  // has to run after, make sure it has _id
110
- await runStaticFormulaChecks(appId, tableToSave, { oldTable })
108
+ await runStaticFormulaChecks(tableToSave, { oldTable })
111
109
  return tableToSave
112
110
  }
113
111
 
114
112
  exports.destroy = async function (ctx) {
115
- const appId = ctx.appId
116
- const db = new CouchDB(appId)
113
+ const db = getAppDB()
117
114
  const tableToDelete = await db.get(ctx.params.tableId)
118
115
 
119
116
  // Delete all rows for that table
@@ -127,7 +124,6 @@ exports.destroy = async function (ctx) {
127
124
 
128
125
  // update linked rows
129
126
  await linkRows.updateLinks({
130
- appId,
131
127
  eventType: linkRows.EventType.TABLE_DELETE,
132
128
  table: tableToDelete,
133
129
  })
@@ -136,24 +132,25 @@ exports.destroy = async function (ctx) {
136
132
  await db.remove(tableToDelete)
137
133
 
138
134
  // remove table search index
139
- const currentIndexes = await db.getIndexes()
140
- const existingIndex = currentIndexes.indexes.find(
141
- existing => existing.name === `search:${ctx.params.tableId}`
142
- )
143
- if (existingIndex) {
144
- await db.deleteIndex(existingIndex)
135
+ if (!env.isTest()) {
136
+ const currentIndexes = await db.getIndexes()
137
+ const existingIndex = currentIndexes.indexes.find(
138
+ existing => existing.name === `search:${ctx.params.tableId}`
139
+ )
140
+ if (existingIndex) {
141
+ await db.deleteIndex(existingIndex)
142
+ }
145
143
  }
146
144
 
147
145
  // has to run after, make sure it has _id
148
- await runStaticFormulaChecks(appId, tableToDelete, { deletion: true })
149
- await cleanupAttachments(appId, tableToDelete, { rows })
146
+ await runStaticFormulaChecks(tableToDelete, { deletion: true })
147
+ await cleanupAttachments(tableToDelete, { rows })
150
148
  return tableToDelete
151
149
  }
152
150
 
153
151
  exports.bulkImport = async function (ctx) {
154
- const appId = ctx.appId
155
- const table = await getTable(appId, ctx.params.tableId)
152
+ const table = await getTable(ctx.params.tableId)
156
153
  const { dataImport } = ctx.request.body
157
- await handleDataImport(appId, ctx.user, table, dataImport)
154
+ await handleDataImport(ctx.user, table, dataImport)
158
155
  return table
159
156
  }