@budibase/server 1.0.49 → 1.0.50-alpha.3

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 (381) 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.2c37968e.js → index.9fe798bd.js} +252 -249
  8. package/builder/assets/index.c0cc369d.css +6 -0
  9. package/builder/assets/{vendor.f9faf6ab.js → vendor.5ad9695a.js} +202 -106
  10. package/builder/index.html +3 -3
  11. package/coverage/clover.xml +3105 -2814
  12. package/coverage/coverage-final.json +106 -101
  13. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/application.js.html +257 -152
  16. package/coverage/lcov-report/api/controllers/auth.js.html +22 -13
  17. package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
  18. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
  20. package/coverage/lcov-report/api/controllers/component.js.html +13 -16
  21. package/coverage/lcov-report/api/controllers/datasource.js.html +81 -51
  22. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  23. package/coverage/lcov-report/api/controllers/index.html +78 -78
  24. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
  26. package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
  27. package/coverage/lcov-report/api/controllers/migrations.js.html +119 -0
  28. package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
  29. package/coverage/lcov-report/api/controllers/query/index.html +10 -10
  30. package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
  31. package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
  32. package/coverage/lcov-report/api/controllers/role.js.html +16 -16
  33. package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
  34. package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
  35. package/coverage/lcov-report/api/controllers/row/index.html +55 -40
  36. package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
  37. package/coverage/lcov-report/api/controllers/row/internal.js.html +118 -226
  38. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +52 -34
  39. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +548 -0
  40. package/coverage/lcov-report/api/controllers/row/utils.js.html +47 -62
  41. package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
  42. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  43. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +599 -0
  44. package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
  45. package/coverage/lcov-report/api/controllers/table/index.html +58 -43
  46. package/coverage/lcov-report/api/controllers/table/index.js.html +58 -82
  47. package/coverage/lcov-report/api/controllers/table/internal.js.html +81 -66
  48. package/coverage/lcov-report/api/controllers/table/utils.js.html +218 -110
  49. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/user.js.html +79 -76
  51. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  52. package/coverage/lcov-report/api/controllers/view/index.html +16 -16
  53. package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
  54. package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
  55. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  56. package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
  57. package/coverage/lcov-report/api/index.html +1 -1
  58. package/coverage/lcov-report/api/index.js.html +8 -8
  59. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/index.html +18 -18
  71. package/coverage/lcov-report/api/routes/index.js.html +3 -3
  72. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/{hosting.js.html → migrations.js.html} +17 -14
  76. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/static.js.html +17 -2
  84. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  87. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  88. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/actions.js.html +24 -24
  90. package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
  91. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  92. package/coverage/lcov-report/automations/index.html +18 -18
  93. package/coverage/lcov-report/automations/index.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  95. package/coverage/lcov-report/automations/steps/createRow.js.html +13 -22
  96. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  97. package/coverage/lcov-report/automations/steps/deleteRow.js.html +11 -20
  98. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  99. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  100. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  101. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  102. package/coverage/lcov-report/automations/steps/index.html +13 -13
  103. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  104. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  105. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  106. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  107. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  108. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  109. package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
  110. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  111. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  112. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  115. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  116. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  118. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  119. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  120. package/coverage/lcov-report/automations/triggers.js.html +61 -55
  121. package/coverage/lcov-report/automations/utils.js.html +54 -42
  122. package/coverage/lcov-report/constants/index.html +5 -5
  123. package/coverage/lcov-report/constants/index.js.html +53 -26
  124. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  125. package/coverage/lcov-report/constants/screens.js.html +4 -4
  126. package/coverage/lcov-report/db/client.js.html +18 -18
  127. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  128. package/coverage/lcov-report/db/index.html +15 -15
  129. package/coverage/lcov-report/db/index.js.html +3 -3
  130. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +25 -37
  131. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  132. package/coverage/lcov-report/db/linkedRows/index.js.html +51 -96
  133. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +42 -42
  134. package/coverage/lcov-report/db/newid.js.html +4 -4
  135. package/coverage/lcov-report/db/utils.js.html +87 -87
  136. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  137. package/coverage/lcov-report/events/index.html +1 -1
  138. package/coverage/lcov-report/events/index.js.html +5 -5
  139. package/coverage/lcov-report/events/utils.js.html +3 -3
  140. package/coverage/lcov-report/index.html +135 -120
  141. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  142. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  143. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  144. package/coverage/lcov-report/middleware/authorized.js.html +173 -65
  145. package/coverage/lcov-report/middleware/builder.js.html +10 -10
  146. package/coverage/lcov-report/middleware/currentapp.js.html +95 -83
  147. package/coverage/lcov-report/middleware/index.html +38 -38
  148. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  149. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  150. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  151. package/coverage/lcov-report/middleware/usageQuota.js.html +281 -53
  152. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  153. package/coverage/lcov-report/threads/automation.js.html +30 -24
  154. package/coverage/lcov-report/threads/index.html +26 -26
  155. package/coverage/lcov-report/threads/index.js.html +10 -10
  156. package/coverage/lcov-report/threads/query.js.html +39 -24
  157. package/coverage/lcov-report/threads/utils.js.html +14 -14
  158. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  159. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  160. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  161. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  162. package/coverage/lcov-report/utilities/global.js.html +58 -49
  163. package/coverage/lcov-report/utilities/index.html +37 -37
  164. package/coverage/lcov-report/utilities/index.js.html +43 -73
  165. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
  166. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  167. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  168. package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
  169. package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
  170. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +97 -103
  171. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +75 -27
  172. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  173. package/coverage/lcov-report/utilities/security.js.html +8 -8
  174. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  175. package/coverage/lcov-report/utilities/usageQuota/index.html +141 -0
  176. package/coverage/lcov-report/utilities/usageQuota/index.js.html +359 -0
  177. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +305 -0
  178. package/coverage/lcov-report/{api/controllers/hosting.js.html → utilities/usageQuota/usageQuoteReset.js.html} +36 -48
  179. package/coverage/lcov-report/utilities/users.js.html +9 -9
  180. package/coverage/lcov-report/utilities/workerRequests.js.html +43 -112
  181. package/coverage/lcov.info +5010 -4425
  182. package/dist/api/controllers/application.js +90 -60
  183. package/dist/api/controllers/auth.js +8 -5
  184. package/dist/api/controllers/automation.js +14 -19
  185. package/dist/api/controllers/cloud.js +2 -3
  186. package/dist/api/controllers/component.js +3 -4
  187. package/dist/api/controllers/datasource.js +20 -10
  188. package/dist/api/controllers/deploy/Deployment.js +3 -6
  189. package/dist/api/controllers/deploy/index.js +12 -13
  190. package/dist/api/controllers/dev.js +5 -5
  191. package/dist/api/controllers/layout.js +3 -3
  192. package/dist/api/controllers/metadata.js +4 -4
  193. package/dist/api/controllers/migrations.js +21 -0
  194. package/dist/api/controllers/permission.js +4 -4
  195. package/dist/api/controllers/query/import/index.js +4 -6
  196. package/dist/api/controllers/query/index.js +11 -10
  197. package/dist/api/controllers/role.js +5 -5
  198. package/dist/api/controllers/routing.js +5 -6
  199. package/dist/api/controllers/row/ExternalRequest.js +90 -67
  200. package/dist/api/controllers/row/external.js +14 -22
  201. package/dist/api/controllers/row/internal.js +55 -93
  202. package/dist/api/controllers/row/internalSearch.js +23 -17
  203. package/dist/api/controllers/row/staticFormula.js +147 -0
  204. package/dist/api/controllers/row/utils.js +13 -14
  205. package/dist/api/controllers/screen.js +5 -7
  206. package/dist/api/controllers/static/index.js +62 -16
  207. package/dist/api/controllers/table/bulkFormula.js +159 -0
  208. package/dist/api/controllers/table/external.js +7 -10
  209. package/dist/api/controllers/table/index.js +16 -13
  210. package/dist/api/controllers/table/internal.js +22 -16
  211. package/dist/api/controllers/table/utils.js +62 -35
  212. package/dist/api/controllers/user.js +43 -43
  213. package/dist/api/controllers/view/index.js +8 -10
  214. package/dist/api/controllers/view/utils.js +9 -4
  215. package/dist/api/controllers/webhook.js +10 -8
  216. package/dist/api/routes/index.js +2 -2
  217. package/dist/api/routes/migrations.js +9 -0
  218. package/dist/api/routes/static.js +2 -1
  219. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  220. package/dist/app.js +35 -5
  221. package/dist/automations/automationUtils.js +2 -3
  222. package/dist/automations/steps/createRow.js +3 -5
  223. package/dist/automations/steps/deleteRow.js +1 -4
  224. package/dist/automations/steps/updateRow.js +1 -1
  225. package/dist/automations/triggers.js +27 -25
  226. package/dist/automations/utils.js +10 -5
  227. package/dist/constants/index.js +7 -0
  228. package/dist/db/linkedRows/LinkController.js +3 -7
  229. package/dist/db/linkedRows/index.js +16 -27
  230. package/dist/db/linkedRows/linkUtils.js +6 -6
  231. package/dist/db/views/staticViews.js +9 -10
  232. package/dist/definitions/datasource.js +1 -0
  233. package/dist/environment.js +4 -1
  234. package/dist/integrations/base/sql.js +62 -21
  235. package/dist/integrations/googlesheets.js +340 -0
  236. package/dist/integrations/index.js +3 -0
  237. package/dist/integrations/utils.js +60 -9
  238. package/dist/middleware/authorized.js +57 -30
  239. package/dist/middleware/builder.js +2 -2
  240. package/dist/middleware/currentapp.js +41 -37
  241. package/dist/middleware/usageQuota.js +82 -15
  242. package/dist/migrations/functions/appUrls.js +46 -0
  243. package/dist/migrations/functions/quotas1.js +50 -0
  244. package/dist/migrations/functions/usageQuotas/index.js +20 -0
  245. package/dist/migrations/functions/usageQuotas/syncApps.js +29 -0
  246. package/dist/migrations/functions/usageQuotas/syncRows.js +33 -0
  247. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  248. package/dist/migrations/index.js +62 -0
  249. package/dist/package.json +8 -5
  250. package/dist/tests/utilities/TestConfiguration.js +80 -50
  251. package/dist/threads/automation.js +13 -11
  252. package/dist/threads/query.js +15 -11
  253. package/dist/tsconfig.tsbuildinfo +1 -1
  254. package/dist/utilities/fileSystem/index.js +4 -3
  255. package/dist/utilities/global.js +15 -12
  256. package/dist/utilities/index.js +7 -17
  257. package/dist/utilities/routing/index.js +5 -5
  258. package/dist/utilities/rowProcessor/index.js +23 -17
  259. package/dist/utilities/rowProcessor/utils.js +14 -4
  260. package/dist/utilities/{usageQuota.js → usageQuota/index.js} +45 -31
  261. package/dist/utilities/usageQuota/rows.js +78 -0
  262. package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
  263. package/dist/utilities/users.js +3 -3
  264. package/dist/utilities/workerRequests.js +4 -24
  265. package/nodemon.json +1 -1
  266. package/package.json +9 -6
  267. package/scripts/integrations/mssql/data/Dockerfile +1 -1
  268. package/scripts/integrations/mssql/data/setup.sql +17 -4
  269. package/scripts/integrations/postgres/init.sql +11 -6
  270. package/scripts/likeCypress.ts +1 -1
  271. package/src/api/controllers/application.js +85 -50
  272. package/src/api/controllers/auth.js +8 -5
  273. package/src/api/controllers/automation.js +13 -23
  274. package/src/api/controllers/cloud.js +2 -3
  275. package/src/api/controllers/component.js +3 -4
  276. package/src/api/controllers/datasource.js +21 -11
  277. package/src/api/controllers/deploy/Deployment.js +3 -7
  278. package/src/api/controllers/deploy/index.js +20 -13
  279. package/src/api/controllers/dev.js +5 -5
  280. package/src/api/controllers/layout.js +3 -3
  281. package/src/api/controllers/metadata.js +4 -9
  282. package/src/api/controllers/migrations.js +13 -0
  283. package/src/api/controllers/permission.js +4 -4
  284. package/src/api/controllers/query/import/index.ts +4 -6
  285. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  286. package/src/api/controllers/query/index.js +11 -10
  287. package/src/api/controllers/role.js +5 -5
  288. package/src/api/controllers/routing.js +5 -6
  289. package/src/api/controllers/row/ExternalRequest.ts +67 -43
  290. package/src/api/controllers/row/external.js +27 -58
  291. package/src/api/controllers/row/internal.js +54 -90
  292. package/src/api/controllers/row/internalSearch.js +23 -17
  293. package/src/api/controllers/row/staticFormula.js +156 -0
  294. package/src/api/controllers/row/utils.js +13 -18
  295. package/src/api/controllers/screen.js +5 -7
  296. package/src/api/controllers/static/index.js +66 -15
  297. package/src/api/controllers/table/bulkFormula.js +173 -0
  298. package/src/api/controllers/table/external.js +7 -10
  299. package/src/api/controllers/table/index.js +20 -28
  300. package/src/api/controllers/table/internal.js +24 -19
  301. package/src/api/controllers/table/utils.js +78 -42
  302. package/src/api/controllers/user.js +46 -45
  303. package/src/api/controllers/view/index.js +8 -10
  304. package/src/api/controllers/view/utils.js +9 -4
  305. package/src/api/controllers/webhook.js +10 -8
  306. package/src/api/routes/index.js +2 -2
  307. package/src/api/routes/migrations.js +14 -0
  308. package/src/api/routes/static.js +5 -0
  309. package/src/api/routes/tests/application.spec.js +2 -2
  310. package/src/api/routes/tests/auth.spec.js +1 -2
  311. package/src/api/routes/tests/automation.spec.js +1 -0
  312. package/src/api/routes/tests/misc.spec.js +0 -1
  313. package/src/api/routes/tests/routing.spec.js +21 -12
  314. package/src/api/routes/tests/row.spec.js +7 -4
  315. package/src/api/routes/tests/static.spec.js +98 -0
  316. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  317. package/src/app.ts +18 -5
  318. package/src/automations/automationUtils.js +2 -3
  319. package/src/automations/steps/createRow.js +2 -5
  320. package/src/automations/steps/deleteRow.js +1 -4
  321. package/src/automations/steps/updateRow.js +1 -1
  322. package/src/automations/triggers.js +33 -31
  323. package/src/automations/utils.js +9 -5
  324. package/src/constants/index.js +9 -0
  325. package/src/db/linkedRows/LinkController.js +3 -7
  326. package/src/db/linkedRows/index.js +16 -31
  327. package/src/db/linkedRows/linkUtils.js +6 -6
  328. package/src/db/tests/linkController.spec.js +0 -1
  329. package/src/db/tests/linkTests.spec.js +5 -6
  330. package/src/db/views/staticViews.js +8 -10
  331. package/src/definitions/common.ts +3 -0
  332. package/src/definitions/datasource.ts +3 -0
  333. package/src/environment.js +4 -1
  334. package/src/integrations/base/sql.ts +75 -29
  335. package/src/integrations/googlesheets.ts +353 -0
  336. package/src/integrations/index.ts +3 -0
  337. package/src/integrations/tests/sql.spec.js +16 -0
  338. package/src/integrations/utils.ts +75 -12
  339. package/src/middleware/authorized.js +66 -30
  340. package/src/middleware/builder.js +2 -2
  341. package/src/middleware/currentapp.js +50 -46
  342. package/src/middleware/tests/authorized.spec.js +13 -6
  343. package/src/middleware/tests/currentapp.spec.js +6 -0
  344. package/src/middleware/tests/usageQuota.spec.js +18 -24
  345. package/src/middleware/usageQuota.js +93 -17
  346. package/src/migrations/functions/appUrls.ts +34 -0
  347. package/src/migrations/functions/quotas1.ts +20 -0
  348. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  349. package/src/migrations/functions/tests/quotas1.spec.js +27 -0
  350. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  351. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  352. package/src/migrations/functions/usageQuotas/syncApps.ts +18 -0
  353. package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
  354. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +37 -0
  355. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +43 -0
  356. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  357. package/src/migrations/index.ts +56 -0
  358. package/src/module.d.ts +3 -0
  359. package/src/tests/utilities/TestConfiguration.js +82 -55
  360. package/src/threads/automation.js +17 -15
  361. package/src/threads/query.js +17 -12
  362. package/src/utilities/fileSystem/index.js +4 -3
  363. package/src/utilities/global.js +15 -12
  364. package/src/utilities/index.js +7 -17
  365. package/src/utilities/routing/index.js +5 -5
  366. package/src/utilities/rowProcessor/index.js +25 -27
  367. package/src/utilities/rowProcessor/utils.js +23 -7
  368. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  369. package/src/utilities/usageQuota/index.js +93 -0
  370. package/src/utilities/usageQuota/rows.js +75 -0
  371. package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
  372. package/src/utilities/users.js +3 -3
  373. package/src/utilities/workerRequests.js +4 -27
  374. package/tsconfig.json +4 -2
  375. package/builder/assets/index.39e01193.css +0 -1
  376. package/dist/api/controllers/hosting.js +0 -30
  377. package/dist/api/routes/hosting.js +0 -11
  378. package/src/api/controllers/hosting.js +0 -22
  379. package/src/api/routes/hosting.js +0 -13
  380. package/src/api/routes/tests/hosting.spec.js +0 -36
  381. package/src/utilities/usageQuota.js +0 -73
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">59.52% </span>
26
+ <span class="strong">58.01% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>75/126</span>
28
+ <span class='fraction'>76/131</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">45.74% </span>
33
+ <span class="strong">43% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>43/94</span>
35
+ <span class='fraction'>43/100</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">52.63% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/19</span>
42
+ <span class='fraction'>10/20</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">61.66% </span>
47
+ <span class="strong">60.48% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>74/120</span>
49
+ <span class='fraction'>75/124</span>
50
50
  </div>
51
51
 
52
52
 
@@ -396,28 +396,26 @@
396
396
  <a name='L337'></a><a href='#L337'>337</a>
397
397
  <a name='L338'></a><a href='#L338'>338</a>
398
398
  <a name='L339'></a><a href='#L339'>339</a>
399
- <a name='L340'></a><a href='#L340'>340</a>
400
- <a name='L341'></a><a href='#L341'>341</a>
401
- <a name='L342'></a><a href='#L342'>342</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
402
- <span class="cline-any cline-yes">34x</span>
403
- <span class="cline-any cline-yes">34x</span>
404
- <span class="cline-any cline-yes">34x</span>
405
- <span class="cline-any cline-yes">34x</span>
406
- <span class="cline-any cline-yes">34x</span>
407
- <span class="cline-any cline-yes">34x</span>
399
+ <a name='L340'></a><a href='#L340'>340</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
400
+ <span class="cline-any cline-yes">39x</span>
401
+ <span class="cline-any cline-yes">39x</span>
402
+ <span class="cline-any cline-yes">39x</span>
403
+ <span class="cline-any cline-yes">39x</span>
404
+ <span class="cline-any cline-yes">39x</span>
405
+ <span class="cline-any cline-yes">39x</span>
408
406
  <span class="cline-any cline-neutral">&nbsp;</span>
409
407
  <span class="cline-any cline-neutral">&nbsp;</span>
410
408
  <span class="cline-any cline-neutral">&nbsp;</span>
411
409
  <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-yes">34x</span>
413
- <span class="cline-any cline-yes">34x</span>
410
+ <span class="cline-any cline-yes">39x</span>
411
+ <span class="cline-any cline-yes">39x</span>
414
412
  <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-yes">34x</span>
413
+ <span class="cline-any cline-yes">39x</span>
416
414
  <span class="cline-any cline-neutral">&nbsp;</span>
417
415
  <span class="cline-any cline-neutral">&nbsp;</span>
418
416
  <span class="cline-any cline-neutral">&nbsp;</span>
419
417
  <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-yes">34x</span>
418
+ <span class="cline-any cline-yes">39x</span>
421
419
  <span class="cline-any cline-neutral">&nbsp;</span>
422
420
  <span class="cline-any cline-neutral">&nbsp;</span>
423
421
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -536,13 +534,13 @@
536
534
  <span class="cline-any cline-neutral">&nbsp;</span>
537
535
  <span class="cline-any cline-neutral">&nbsp;</span>
538
536
  <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-yes">73x</span>
540
- <span class="cline-any cline-yes">73x</span>
537
+ <span class="cline-any cline-yes">76x</span>
538
+ <span class="cline-any cline-yes">76x</span>
541
539
  <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-yes">73x</span>
543
- <span class="cline-any cline-yes">73x</span>
544
- <span class="cline-any cline-yes">206x</span>
545
- <span class="cline-any cline-yes">206x</span>
540
+ <span class="cline-any cline-yes">76x</span>
541
+ <span class="cline-any cline-yes">76x</span>
542
+ <span class="cline-any cline-yes">212x</span>
543
+ <span class="cline-any cline-yes">212x</span>
546
544
  <span class="cline-any cline-neutral">&nbsp;</span>
547
545
  <span class="cline-any cline-no">&nbsp;</span>
548
546
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -576,29 +574,31 @@
576
574
  <span class="cline-any cline-no">&nbsp;</span>
577
575
  <span class="cline-any cline-neutral">&nbsp;</span>
578
576
  <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-yes">73x</span>
577
+ <span class="cline-any cline-yes">76x</span>
580
578
  <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-yes">34x</span>
579
+ <span class="cline-any cline-yes">39x</span>
582
580
  <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-yes">39x</span>
583
582
  <span class="cline-any cline-neutral">&nbsp;</span>
584
583
  <span class="cline-any cline-neutral">&nbsp;</span>
585
584
  <span class="cline-any cline-neutral">&nbsp;</span>
586
585
  <span class="cline-any cline-neutral">&nbsp;</span>
587
586
  <span class="cline-any cline-neutral">&nbsp;</span>
588
587
  <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-yes">34x</span>
590
588
  <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-yes">174x</span>
589
+ <span class="cline-any cline-yes">39x</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-yes">180x</span>
592
592
  <span class="cline-any cline-no">&nbsp;</span>
593
593
  <span class="cline-any cline-neutral">&nbsp;</span>
594
594
  <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-yes">174x</span>
595
+ <span class="cline-any cline-yes">180x</span>
596
596
  <span class="cline-any cline-yes">16x</span>
597
- <span class="cline-any cline-yes">158x</span>
597
+ <span class="cline-any cline-yes">164x</span>
598
598
  <span class="cline-any cline-yes">22x</span>
599
599
  <span class="cline-any cline-neutral">&nbsp;</span>
600
600
  <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-yes">136x</span>
601
+ <span class="cline-any cline-yes">142x</span>
602
602
  <span class="cline-any cline-neutral">&nbsp;</span>
603
603
  <span class="cline-any cline-neutral">&nbsp;</span>
604
604
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -610,45 +610,42 @@
610
610
  <span class="cline-any cline-neutral">&nbsp;</span>
611
611
  <span class="cline-any cline-neutral">&nbsp;</span>
612
612
  <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">34x</span>
613
+ <span class="cline-any cline-yes">39x</span>
614
614
  <span class="cline-any cline-neutral">&nbsp;</span>
615
615
  <span class="cline-any cline-neutral">&nbsp;</span>
616
616
  <span class="cline-any cline-neutral">&nbsp;</span>
617
617
  <span class="cline-any cline-neutral">&nbsp;</span>
618
618
  <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-yes">73x</span>
619
+ <span class="cline-any cline-yes">76x</span>
620
620
  <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-yes">73x</span>
622
- <span class="cline-any cline-yes">73x</span>
623
- <span class="cline-any cline-yes">73x</span>
624
- <span class="cline-any cline-yes">332x</span>
621
+ <span class="cline-any cline-yes">76x</span>
622
+ <span class="cline-any cline-yes">76x</span>
623
+ <span class="cline-any cline-yes">76x</span>
624
+ <span class="cline-any cline-yes">344x</span>
625
625
  <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-yes">332x</span>
627
- <span class="cline-any cline-yes">159x</span>
626
+ <span class="cline-any cline-yes">344x</span>
627
+ <span class="cline-any cline-yes">165x</span>
628
628
  <span class="cline-any cline-yes">3x</span>
629
629
  <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-yes">159x</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-yes">165x</span>
632
631
  <span class="cline-any cline-neutral">&nbsp;</span>
633
632
  <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-yes">173x</span>
633
+ <span class="cline-any cline-yes">179x</span>
635
634
  <span class="cline-any cline-no">&nbsp;</span>
636
635
  <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-yes">173x</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-neutral">&nbsp;</span>
640
636
  <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-yes">73x</span>
642
- <span class="cline-any cline-yes">68x</span>
643
- <span class="cline-any cline-yes">68x</span>
644
637
  <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-yes">179x</span>
645
639
  <span class="cline-any cline-neutral">&nbsp;</span>
646
640
  <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-yes">73x</span>
648
641
  <span class="cline-any cline-neutral">&nbsp;</span>
642
+ <span class="cline-any cline-yes">76x</span>
643
+ <span class="cline-any cline-yes">71x</span>
644
+ <span class="cline-any cline-yes">71x</span>
649
645
  <span class="cline-any cline-neutral">&nbsp;</span>
650
646
  <span class="cline-any cline-neutral">&nbsp;</span>
651
647
  <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-yes">76x</span>
652
649
  <span class="cline-any cline-neutral">&nbsp;</span>
653
650
  <span class="cline-any cline-neutral">&nbsp;</span>
654
651
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -657,27 +654,24 @@
657
654
  <span class="cline-any cline-neutral">&nbsp;</span>
658
655
  <span class="cline-any cline-neutral">&nbsp;</span>
659
656
  <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-yes">34x</span>
661
657
  <span class="cline-any cline-neutral">&nbsp;</span>
662
658
  <span class="cline-any cline-neutral">&nbsp;</span>
663
659
  <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-yes">39x</span>
661
+ <span class="cline-any cline-yes">103x</span>
662
+ <span class="cline-any cline-yes">103x</span>
663
+ <span class="cline-any cline-yes">90x</span>
664
+ <span class="cline-any cline-yes">90x</span>
664
665
  <span class="cline-any cline-neutral">&nbsp;</span>
665
666
  <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-yes">100x</span>
667
- <span class="cline-any cline-yes">100x</span>
668
- <span class="cline-any cline-yes">100x</span>
669
- <span class="cline-any cline-yes">87x</span>
670
- <span class="cline-any cline-yes">87x</span>
667
+ <span class="cline-any cline-yes">103x</span>
671
668
  <span class="cline-any cline-neutral">&nbsp;</span>
672
669
  <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-yes">100x</span>
670
+ <span class="cline-any cline-yes">103x</span>
674
671
  <span class="cline-any cline-neutral">&nbsp;</span>
675
672
  <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-yes">100x</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-yes">100x</span>
680
- <span class="cline-any cline-yes">296x</span>
673
+ <span class="cline-any cline-yes">103x</span>
674
+ <span class="cline-any cline-yes">302x</span>
681
675
  <span class="cline-any cline-yes">8x</span>
682
676
  <span class="cline-any cline-yes">8x</span>
683
677
  <span class="cline-any cline-yes">6x</span>
@@ -688,16 +682,14 @@
688
682
  <span class="cline-any cline-neutral">&nbsp;</span>
689
683
  <span class="cline-any cline-neutral">&nbsp;</span>
690
684
  <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-yes">100x</span>
685
+ <span class="cline-any cline-yes">103x</span>
692
686
  <span class="cline-any cline-yes">26x</span>
693
687
  <span class="cline-any cline-neutral">&nbsp;</span>
688
+ <span class="cline-any cline-yes">103x</span>
694
689
  <span class="cline-any cline-neutral">&nbsp;</span>
695
690
  <span class="cline-any cline-neutral">&nbsp;</span>
696
691
  <span class="cline-any cline-neutral">&nbsp;</span>
697
692
  <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-yes">100x</span>
699
- <span class="cline-any cline-neutral">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
693
  <span class="cline-any cline-neutral">&nbsp;</span>
702
694
  <span class="cline-any cline-neutral">&nbsp;</span>
703
695
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -706,14 +698,14 @@
706
698
  <span class="cline-any cline-neutral">&nbsp;</span>
707
699
  <span class="cline-any cline-neutral">&nbsp;</span>
708
700
  <span class="cline-any cline-neutral">&nbsp;</span>
701
+ <span class="cline-any cline-yes">39x</span>
702
+ <span class="cline-any cline-yes">11x</span>
703
+ <span class="cline-any cline-yes">11x</span>
704
+ <span class="cline-any cline-yes">11x</span>
709
705
  <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-yes">34x</span>
711
- <span class="cline-any cline-yes">8x</span>
712
- <span class="cline-any cline-yes">8x</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-yes">8x</span>
715
- <span class="cline-any cline-yes">8x</span>
716
- <span class="cline-any cline-yes">8x</span>
706
+ <span class="cline-any cline-yes">11x</span>
707
+ <span class="cline-any cline-yes">11x</span>
708
+ <span class="cline-any cline-yes">11x</span>
717
709
  <span class="cline-any cline-neutral">&nbsp;</span>
718
710
  <span class="cline-any cline-neutral">&nbsp;</span>
719
711
  <span class="cline-any cline-no">&nbsp;</span>
@@ -725,11 +717,15 @@
725
717
  <span class="cline-any cline-no">&nbsp;</span>
726
718
  <span class="cline-any cline-no">&nbsp;</span>
727
719
  <span class="cline-any cline-no">&nbsp;</span>
720
+ <span class="cline-any cline-no">&nbsp;</span>
728
721
  <span class="cline-any cline-neutral">&nbsp;</span>
729
722
  <span class="cline-any cline-neutral">&nbsp;</span>
730
723
  <span class="cline-any cline-no">&nbsp;</span>
731
724
  <span class="cline-any cline-no">&nbsp;</span>
732
725
  <span class="cline-any cline-no">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-no">&nbsp;</span>
728
+ <span class="cline-any cline-no">&nbsp;</span>
733
729
  <span class="cline-any cline-no">&nbsp;</span>
734
730
  <span class="cline-any cline-no">&nbsp;</span>
735
731
  <span class="cline-any cline-no">&nbsp;</span>
@@ -748,10 +744,10 @@ const { deleteFiles } = require("../../utilities/fileSystem/utilities")
748
744
  const { ObjectStoreBuckets } = require("../../constants")
749
745
  const {
750
746
  isProdAppID,
751
- getDeployedAppID,
747
+ getProdAppID,
752
748
  dbExists,
753
749
  } = require("@budibase/backend-core/db")
754
- const CouchDB = require("../../db")
750
+ const { getAppId } = require("@budibase/backend-core/context")
755
751
  &nbsp;
756
752
  const BASE_AUTO_ID = 1
757
753
  &nbsp;
@@ -921,6 +917,8 @@ function processAutoColumn(
921
917
  }
922
918
  exports.processAutoColumn = processAutoColumn
923
919
  &nbsp;
920
+ exports.processFormulas = processFormulas
921
+ &nbsp;
924
922
  /**
925
923
  * This will coerce a value to the correct types based on the type transform map
926
924
  * @param {object} row The value to coerce
@@ -970,11 +968,12 @@ exports.inputProcessing = (
970
968
  }
971
969
  continue
972
970
  }
973
- // specific case to delete formula values if they get saved
974
- // type coercion cannot completely remove the field, so have to do it here
971
+ // remove any formula values, they are to be generated
975
972
  <span class="missing-if-branch" title="if path not taken" >I</span>if (field.type === FieldTypes.FORMULA) {
976
973
  <span class="cstat-no" title="statement not covered" > delete clonedRow[key]</span>
977
- } else {
974
+ }
975
+ // otherwise coerce what is there to correct types
976
+ else {
978
977
  clonedRow[key] = exports.coerce(value, field.type)
979
978
  }
980
979
  }
@@ -991,30 +990,23 @@ exports.inputProcessing = (
991
990
  /**
992
991
  * This function enriches the input rows with anything they are supposed to contain, for example
993
992
  * link records or attachment links.
994
- * @param {object} ctx the request which is looking for enriched rows.
995
993
  * @param {object} table the table from which these rows came from originally, this is used to determine
996
994
  * the schema of the rows and then enrich.
997
995
  * @param {object[]|object} rows the rows which are to be enriched.
998
996
  * @param {object} opts used to set some options for the output, such as disabling relationship squashing.
999
997
  * @returns {object[]|object} the enriched rows will be returned.
1000
998
  */
1001
- exports.outputProcessing = async (
1002
- ctx,
1003
- table,
1004
- rows,
1005
- opts = { squash: true }
1006
- ) =&gt; {
1007
- const appId = ctx.appId
999
+ exports.outputProcessing = async (table, rows, opts = { squash: true }) =&gt; {
1008
1000
  let wasArray = true
1009
1001
  if (!(rows instanceof Array)) {
1010
1002
  rows = [rows]
1011
1003
  wasArray = false
1012
1004
  }
1013
1005
  // attach any linked row information
1014
- let enriched = await linkRows.attachFullLinkedDocs(ctx, table, rows)
1006
+ let enriched = await linkRows.attachFullLinkedDocs(table, rows)
1015
1007
  &nbsp;
1016
1008
  // process formulas
1017
- enriched = processFormulas(table, enriched)
1009
+ enriched = processFormulas(table, enriched, { dynamic: true })
1018
1010
  &nbsp;
1019
1011
  // update the attachments URL depending on hosting
1020
1012
  for (let [property, column] of Object.entries(table.schema)) {
@@ -1030,29 +1022,27 @@ exports.outputProcessing = async (
1030
1022
  }
1031
1023
  }
1032
1024
  if (opts.squash) {
1033
- enriched = await linkRows.squashLinksToPrimaryDisplay(
1034
- appId,
1035
- table,
1036
- enriched
1037
- )
1025
+ enriched = await linkRows.squashLinksToPrimaryDisplay(table, enriched)
1038
1026
  }
1039
1027
  return wasArray ? enriched : enriched[0]
1040
1028
  }
1041
1029
  &nbsp;
1042
1030
  /**
1043
1031
  * Clean up any attachments that were attached to a row.
1044
- * @param {string} appId The ID of the app from which a row is being deleted.
1045
1032
  * @param {object} table The table from which a row is being removed.
1046
1033
  * @param {any} row optional - the row being removed.
1047
1034
  * @param {any} rows optional - if multiple rows being deleted can do this in bulk.
1048
1035
  * @param {any} oldRow optional - if updating a row this will determine the difference.
1036
+ * @param {any} oldTable optional - if updating a table, can supply the old table to look for
1037
+ * deleted attachment columns.
1049
1038
  * @return {Promise&lt;void&gt;} When all attachments have been removed this will return.
1050
1039
  */
1051
- exports.cleanupAttachments = async (appId, table, { row, rows, oldRow }) =&gt; {
1040
+ exports.cleanupAttachments = async (table, { row, rows, oldRow, oldTable }) =&gt; {
1041
+ const appId = getAppId()
1052
1042
  if (!isProdAppID(appId)) {
1053
- const prodAppId = getDeployedAppID(appId)
1043
+ const prodAppId = getProdAppID(appId)
1054
1044
  // if prod exists, then don't allow deleting
1055
- const exists = await dbExists(CouchDB, prodAppId)
1045
+ const exists = await dbExists(prodAppId)
1056
1046
  if (exists) {
1057
1047
  return
1058
1048
  }
@@ -1063,12 +1053,16 @@ exports.cleanupAttachments = async (appId, table, { row, rows, oldRow }) =&gt; {
1063
1053
  <span class="cstat-no" title="statement not covered" > files = files.concat(row[key].map(<span class="fstat-no" title="function not covered" >at</span>tachment =&gt; <span class="cstat-no" title="statement not covered" >attachment.key)</span>)</span>
1064
1054
  }
1065
1055
  }
1066
- <span class="cstat-no" title="statement not covered" > for (let [key, schema] of Object.entries(table.schema)) {</span>
1056
+ const schemaToUse = <span class="cstat-no" title="statement not covered" >oldTable ? oldTable.schema : table.schema</span>
1057
+ <span class="cstat-no" title="statement not covered" > for (let [key, schema] of Object.entries(schemaToUse)) {</span>
1067
1058
  <span class="cstat-no" title="statement not covered" > if (schema.type !== FieldTypes.ATTACHMENT) {</span>
1068
1059
  <span class="cstat-no" title="statement not covered" > continue</span>
1069
1060
  }
1070
- // if updating, need to manage the differences
1071
- <span class="cstat-no" title="statement not covered" > if (oldRow &amp;&amp; row) {</span>
1061
+ // old table had this column, new table doesn't - delete it
1062
+ <span class="cstat-no" title="statement not covered" > if (oldTable &amp;&amp; !table.schema[key]) {</span>
1063
+ <span class="cstat-no" title="statement not covered" > rows.forEach(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; <span class="cstat-no" title="statement not covered" >addFiles(row, key))</span></span>
1064
+ } else <span class="cstat-no" title="statement not covered" >if (oldRow &amp;&amp; row) {</span>
1065
+ // if updating, need to manage the differences
1072
1066
  <span class="cstat-no" title="statement not covered" > files = files.concat(getRemovedAttachmentKeys(oldRow, row, key))</span>
1073
1067
  } else <span class="cstat-no" title="statement not covered" >if (row) {</span>
1074
1068
  <span class="cstat-no" title="statement not covered" > addFiles(row, key)</span>
@@ -1087,7 +1081,7 @@ exports.cleanupAttachments = async (appId, table, { row, rows, oldRow }) =&gt; {
1087
1081
  <div class='footer quiet pad2 space-top1 center small'>
1088
1082
  Code coverage generated by
1089
1083
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1090
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
1084
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
1091
1085
  </div>
1092
1086
  </div>
1093
1087
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">83.33% </span>
26
+ <span class="strong">66.66% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/12</span>
28
+ <span class='fraction'>12/18</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">83.33% </span>
33
+ <span class="strong">50% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>5/6</span>
35
+ <span class='fraction'>9/18</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">50% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/2</span>
42
+ <span class='fraction'>1/1</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">90.9% </span>
47
+ <span class="strong">70.58% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/11</span>
49
+ <span class='fraction'>12/17</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line high'></div>
58
+ <div class='status-line medium'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -80,49 +80,97 @@
80
80
  <a name='L21'></a><a href='#L21'>21</a>
81
81
  <a name='L22'></a><a href='#L22'>22</a>
82
82
  <a name='L23'></a><a href='#L23'>23</a>
83
- <a name='L24'></a><a href='#L24'>24</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
84
- <span class="cline-any cline-yes">34x</span>
83
+ <a name='L24'></a><a href='#L24'>24</a>
84
+ <a name='L25'></a><a href='#L25'>25</a>
85
+ <a name='L26'></a><a href='#L26'>26</a>
86
+ <a name='L27'></a><a href='#L27'>27</a>
87
+ <a name='L28'></a><a href='#L28'>28</a>
88
+ <a name='L29'></a><a href='#L29'>29</a>
89
+ <a name='L30'></a><a href='#L30'>30</a>
90
+ <a name='L31'></a><a href='#L31'>31</a>
91
+ <a name='L32'></a><a href='#L32'>32</a>
92
+ <a name='L33'></a><a href='#L33'>33</a>
93
+ <a name='L34'></a><a href='#L34'>34</a>
94
+ <a name='L35'></a><a href='#L35'>35</a>
95
+ <a name='L36'></a><a href='#L36'>36</a>
96
+ <a name='L37'></a><a href='#L37'>37</a>
97
+ <a name='L38'></a><a href='#L38'>38</a>
98
+ <a name='L39'></a><a href='#L39'>39</a>
99
+ <a name='L40'></a><a href='#L40'>40</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
100
+ <span class="cline-any cline-yes">39x</span>
101
+ <span class="cline-any cline-neutral">&nbsp;</span>
102
+ <span class="cline-any cline-neutral">&nbsp;</span>
103
+ <span class="cline-any cline-neutral">&nbsp;</span>
104
+ <span class="cline-any cline-neutral">&nbsp;</span>
105
+ <span class="cline-any cline-yes">39x</span>
106
+ <span class="cline-any cline-neutral">&nbsp;</span>
107
+ <span class="cline-any cline-neutral">&nbsp;</span>
108
+ <span class="cline-any cline-neutral">&nbsp;</span>
85
109
  <span class="cline-any cline-neutral">&nbsp;</span>
110
+ <span class="cline-any cline-yes">267x</span>
111
+ <span class="cline-any cline-yes">267x</span>
112
+ <span class="cline-any cline-yes">164x</span>
113
+ <span class="cline-any cline-yes">164x</span>
86
114
  <span class="cline-any cline-neutral">&nbsp;</span>
115
+ <span class="cline-any cline-yes">267x</span>
116
+ <span class="cline-any cline-yes">776x</span>
117
+ <span class="cline-any cline-yes">776x</span>
87
118
  <span class="cline-any cline-neutral">&nbsp;</span>
88
119
  <span class="cline-any cline-neutral">&nbsp;</span>
89
- <span class="cline-any cline-yes">34x</span>
90
- <span class="cline-any cline-yes">118x</span>
91
- <span class="cline-any cline-yes">118x</span>
92
- <span class="cline-any cline-yes">18x</span>
93
120
  <span class="cline-any cline-neutral">&nbsp;</span>
94
- <span class="cline-any cline-yes">118x</span>
95
- <span class="cline-any cline-yes">364x</span>
96
- <span class="cline-any cline-yes">364x</span>
97
121
  <span class="cline-any cline-neutral">&nbsp;</span>
122
+ <span class="cline-any cline-yes">776x</span>
98
123
  <span class="cline-any cline-neutral">&nbsp;</span>
124
+ <span class="cline-any cline-neutral">&nbsp;</span>
125
+ <span class="cline-any cline-no">&nbsp;</span>
126
+ <span class="cline-any cline-no">&nbsp;</span>
127
+ <span class="cline-any cline-no">&nbsp;</span>
128
+ <span class="cline-any cline-no">&nbsp;</span>
99
129
  <span class="cline-any cline-no">&nbsp;</span>
100
130
  <span class="cline-any cline-neutral">&nbsp;</span>
101
131
  <span class="cline-any cline-neutral">&nbsp;</span>
102
132
  <span class="cline-any cline-neutral">&nbsp;</span>
103
133
  <span class="cline-any cline-neutral">&nbsp;</span>
104
- <span class="cline-any cline-yes">118x</span>
105
134
  <span class="cline-any cline-neutral">&nbsp;</span>
106
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { FieldTypes } = require("../../constants")
135
+ <span class="cline-any cline-neutral">&nbsp;</span>
136
+ <span class="cline-any cline-yes">267x</span>
137
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { FieldTypes, FormulaTypes } = require("../../constants")
107
139
  const { processStringSync } = require("@budibase/string-templates")
108
140
  &nbsp;
109
141
  /**
110
142
  * Looks through the rows provided and finds formulas - which it then processes.
111
143
  */
112
- exports.processFormulas = (table, rows) =&gt; {
144
+ exports.processFormulas = (
145
+ table,
146
+ rows,
147
+ { dynamic, contextRows } = { dynamic: true }
148
+ ) =&gt; {
113
149
  const single = !Array.isArray(rows)
114
150
  if (single) {
115
151
  rows = [rows]
152
+ contextRows = contextRows ? [contextRows] : contextRows
116
153
  }
117
154
  for (let [column, schema] of Object.entries(table.schema)) {
118
- if (schema.type !== FieldTypes.FORMULA) {
155
+ const isStatic = schema.formulaType === FormulaTypes.STATIC
156
+ if (
157
+ schema.type !== FieldTypes.FORMULA ||
158
+ (<span class="branch-1 cbranch-no" title="branch not covered" >dynamic </span>&amp;&amp; <span class="branch-2 cbranch-no" title="branch not covered" >isStatic)</span> ||
159
+ (<span class="branch-3 cbranch-no" title="branch not covered" >!dynamic </span>&amp;&amp; <span class="branch-4 cbranch-no" title="branch not covered" >!isStatic)</span>
160
+ ) {
119
161
  continue
120
162
  }
121
163
  // iterate through rows and process formula
122
- <span class="cstat-no" title="statement not covered" > rows = rows.map(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
123
- ...row,
124
- [column]: processStringSync(schema.formula, row),
125
- }))
164
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; rows.length; i++) {</span>
165
+ <span class="cstat-no" title="statement not covered" > if (schema.formula) {</span>
166
+ let row = <span class="cstat-no" title="statement not covered" >rows[i]</span>
167
+ let context = <span class="cstat-no" title="statement not covered" >contextRows ? contextRows[i] : row</span>
168
+ <span class="cstat-no" title="statement not covered" > rows[i] = {</span>
169
+ ...row,
170
+ [column]: processStringSync(schema.formula, context),
171
+ }
172
+ }
173
+ }
126
174
  }
127
175
  return single ? rows[0] : rows
128
176
  }
@@ -133,7 +181,7 @@ exports.processFormulas = (table, rows) =&gt; {
133
181
  <div class='footer quiet pad2 space-top1 center small'>
134
182
  Code coverage generated by
135
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
136
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
184
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
137
185
  </div>
138
186
  </div>
139
187
  <script src="../../prettify.js"></script>
@@ -81,9 +81,9 @@
81
81
  <a name='L22'></a><a href='#L22'>22</a>
82
82
  <a name='L23'></a><a href='#L23'>23</a>
83
83
  <a name='L24'></a><a href='#L24'>24</a>
84
- <a name='L25'></a><a href='#L25'>25</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
85
- <span class="cline-any cline-yes">34x</span>
86
- <span class="cline-any cline-yes">34x</span>
84
+ <a name='L25'></a><a href='#L25'>25</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
85
+ <span class="cline-any cline-yes">39x</span>
86
+ <span class="cline-any cline-yes">39x</span>
87
87
  <span class="cline-any cline-neutral">&nbsp;</span>
88
88
  <span class="cline-any cline-neutral">&nbsp;</span>
89
89
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -104,7 +104,7 @@
104
104
  <span class="cline-any cline-neutral">&nbsp;</span>
105
105
  <span class="cline-any cline-neutral">&nbsp;</span>
106
106
  <span class="cline-any cline-neutral">&nbsp;</span>
107
- <span class="cline-any cline-yes">34x</span>
107
+ <span class="cline-any cline-yes">39x</span>
108
108
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const fetch = require("node-fetch")
109
109
  const { VM, VMScript } = require("vm2")
110
110
  const JS_TIMEOUT_MS = 1000
@@ -136,7 +136,7 @@ module.exports = ScriptRunner
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
139
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
139
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  </div>
142
142
  <script src="../prettify.js"></script>