@budibase/server 1.0.49-alpha.0 → 1.0.49-alpha.12

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 (357) 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.8184eed9.js → index.0bdf1cad.js} +195 -194
  8. package/builder/assets/{index.dd9e386f.css → index.83c0944f.css} +1 -1
  9. package/builder/assets/{vendor.3bd2f661.js → vendor.d526bfe8.js} +1 -1
  10. package/builder/index.html +3 -3
  11. package/coverage/clover.xml +2927 -2819
  12. package/coverage/coverage-final.json +104 -103
  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 +157 -136
  16. package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
  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 +10 -13
  21. package/coverage/lcov-report/api/controllers/datasource.js.html +31 -37
  22. package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
  23. package/coverage/lcov-report/api/controllers/index.html +69 -54
  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/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
  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 +52 -37
  36. package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
  37. package/coverage/lcov-report/api/controllers/row/internal.js.html +108 -216
  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 +27 -24
  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 +57 -42
  46. package/coverage/lcov-report/api/controllers/table/index.js.html +28 -70
  47. package/coverage/lcov-report/api/controllers/table/internal.js.html +56 -47
  48. package/coverage/lcov-report/api/controllers/table/utils.js.html +169 -85
  49. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/user.js.html +43 -52
  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 +3 -3
  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 +22 -7
  71. package/coverage/lcov-report/api/routes/index.js.html +10 -4
  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/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
  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 +1 -1
  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 +7 -10
  96. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  97. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  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 +1 -1
  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 +42 -27
  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 +1 -1
  129. package/coverage/lcov-report/db/index.js.html +3 -3
  130. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +15 -27
  131. package/coverage/lcov-report/db/linkedRows/index.html +27 -27
  132. package/coverage/lcov-report/db/linkedRows/index.js.html +40 -85
  133. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +40 -40
  134. package/coverage/lcov-report/db/newid.js.html +4 -4
  135. package/coverage/lcov-report/db/utils.js.html +75 -75
  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 +107 -122
  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 +21 -15
  145. package/coverage/lcov-report/middleware/builder.js.html +3 -3
  146. package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
  147. package/coverage/lcov-report/middleware/index.html +28 -28
  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 +29 -35
  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 +25 -25
  155. package/coverage/lcov-report/threads/index.js.html +10 -10
  156. package/coverage/lcov-report/threads/query.js.html +26 -47
  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 +57 -48
  163. package/coverage/lcov-report/utilities/index.html +27 -27
  164. package/coverage/lcov-report/utilities/index.js.html +42 -72
  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 +65 -71
  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 +1 -1
  176. package/coverage/lcov-report/utilities/usageQuota/index.js.html +13 -10
  177. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
  178. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  179. package/coverage/lcov-report/utilities/users.js.html +9 -9
  180. package/coverage/lcov-report/utilities/workerRequests.js.html +16 -16
  181. package/coverage/lcov.info +4620 -4358
  182. package/dist/api/controllers/application.js +49 -48
  183. package/dist/api/controllers/auth.js +4 -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 +9 -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 +7 -6
  205. package/dist/api/controllers/screen.js +5 -7
  206. package/dist/api/controllers/static/index.js +4 -4
  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 +7 -10
  210. package/dist/api/controllers/table/internal.js +20 -16
  211. package/dist/api/controllers/table/utils.js +54 -34
  212. package/dist/api/controllers/user.js +16 -20
  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 -0
  217. package/dist/api/routes/migrations.js +9 -0
  218. package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
  219. package/dist/app.js +35 -5
  220. package/dist/automations/automationUtils.js +2 -3
  221. package/dist/automations/steps/createRow.js +1 -1
  222. package/dist/automations/steps/updateRow.js +1 -1
  223. package/dist/automations/triggers.js +27 -25
  224. package/dist/automations/utils.js +10 -5
  225. package/dist/constants/index.js +4 -0
  226. package/dist/db/linkedRows/LinkController.js +3 -7
  227. package/dist/db/linkedRows/index.js +16 -27
  228. package/dist/db/linkedRows/linkUtils.js +6 -6
  229. package/dist/db/views/staticViews.js +9 -10
  230. package/dist/environment.js +3 -1
  231. package/dist/integrations/base/sql.js +43 -8
  232. package/dist/integrations/utils.js +3 -0
  233. package/dist/middleware/authorized.js +5 -3
  234. package/dist/middleware/builder.js +2 -2
  235. package/dist/middleware/currentapp.js +41 -37
  236. package/dist/middleware/usageQuota.js +2 -4
  237. package/dist/migrations/functions/appUrls.js +46 -0
  238. package/dist/migrations/functions/quotas1.js +50 -0
  239. package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
  240. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +12 -9
  241. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +16 -12
  242. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  243. package/dist/migrations/index.js +62 -0
  244. package/dist/package.json +4 -4
  245. package/dist/tests/utilities/TestConfiguration.js +70 -44
  246. package/dist/threads/automation.js +13 -11
  247. package/dist/threads/query.js +13 -19
  248. package/dist/tsconfig.tsbuildinfo +1 -1
  249. package/dist/utilities/fileSystem/index.js +4 -3
  250. package/dist/utilities/global.js +15 -12
  251. package/dist/utilities/index.js +7 -17
  252. package/dist/utilities/routing/index.js +5 -5
  253. package/dist/utilities/rowProcessor/index.js +23 -17
  254. package/dist/utilities/rowProcessor/utils.js +14 -4
  255. package/dist/utilities/usageQuota/index.js +1 -0
  256. package/dist/utilities/usageQuota/rows.js +1 -0
  257. package/dist/utilities/users.js +3 -3
  258. package/dist/utilities/workerRequests.js +4 -4
  259. package/package.json +5 -5
  260. package/scripts/integrations/postgres/init.sql +11 -6
  261. package/scripts/likeCypress.ts +1 -1
  262. package/src/api/controllers/application.js +38 -31
  263. package/src/api/controllers/auth.js +4 -5
  264. package/src/api/controllers/automation.js +13 -23
  265. package/src/api/controllers/cloud.js +2 -3
  266. package/src/api/controllers/component.js +3 -4
  267. package/src/api/controllers/datasource.js +9 -11
  268. package/src/api/controllers/deploy/Deployment.js +3 -7
  269. package/src/api/controllers/deploy/index.js +20 -13
  270. package/src/api/controllers/dev.js +5 -5
  271. package/src/api/controllers/layout.js +3 -3
  272. package/src/api/controllers/metadata.js +4 -9
  273. package/src/api/controllers/migrations.js +13 -0
  274. package/src/api/controllers/permission.js +4 -4
  275. package/src/api/controllers/query/import/index.ts +4 -6
  276. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  277. package/src/api/controllers/query/index.js +11 -10
  278. package/src/api/controllers/role.js +5 -5
  279. package/src/api/controllers/routing.js +5 -6
  280. package/src/api/controllers/row/ExternalRequest.ts +67 -43
  281. package/src/api/controllers/row/external.js +27 -58
  282. package/src/api/controllers/row/internal.js +54 -90
  283. package/src/api/controllers/row/internalSearch.js +23 -17
  284. package/src/api/controllers/row/staticFormula.js +156 -0
  285. package/src/api/controllers/row/utils.js +7 -6
  286. package/src/api/controllers/screen.js +5 -7
  287. package/src/api/controllers/static/index.js +4 -4
  288. package/src/api/controllers/table/bulkFormula.js +173 -0
  289. package/src/api/controllers/table/external.js +7 -10
  290. package/src/api/controllers/table/index.js +7 -21
  291. package/src/api/controllers/table/internal.js +22 -19
  292. package/src/api/controllers/table/utils.js +70 -42
  293. package/src/api/controllers/user.js +17 -20
  294. package/src/api/controllers/view/index.js +8 -10
  295. package/src/api/controllers/view/utils.js +9 -4
  296. package/src/api/controllers/webhook.js +10 -8
  297. package/src/api/routes/index.js +2 -0
  298. package/src/api/routes/migrations.js +14 -0
  299. package/src/api/routes/tests/automation.spec.js +1 -0
  300. package/src/api/routes/tests/misc.spec.js +0 -1
  301. package/src/api/routes/tests/routing.spec.js +21 -12
  302. package/src/api/routes/tests/row.spec.js +7 -4
  303. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  304. package/src/app.ts +18 -5
  305. package/src/automations/automationUtils.js +2 -3
  306. package/src/automations/steps/createRow.js +0 -1
  307. package/src/automations/steps/updateRow.js +1 -1
  308. package/src/automations/triggers.js +33 -31
  309. package/src/automations/utils.js +9 -5
  310. package/src/constants/index.js +5 -0
  311. package/src/db/linkedRows/LinkController.js +3 -7
  312. package/src/db/linkedRows/index.js +16 -31
  313. package/src/db/linkedRows/linkUtils.js +6 -6
  314. package/src/db/tests/linkController.spec.js +0 -1
  315. package/src/db/tests/linkTests.spec.js +5 -6
  316. package/src/db/views/staticViews.js +8 -10
  317. package/src/definitions/common.ts +3 -0
  318. package/src/environment.js +3 -1
  319. package/src/integrations/base/sql.ts +55 -14
  320. package/src/integrations/utils.ts +4 -1
  321. package/src/middleware/authorized.js +5 -3
  322. package/src/middleware/builder.js +2 -2
  323. package/src/middleware/currentapp.js +50 -46
  324. package/src/middleware/tests/authorized.spec.js +7 -2
  325. package/src/middleware/tests/currentapp.spec.js +6 -0
  326. package/src/middleware/usageQuota.js +2 -4
  327. package/src/migrations/functions/appUrls.ts +34 -0
  328. package/src/migrations/functions/quotas1.ts +20 -0
  329. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  330. package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
  331. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  332. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  333. package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +6 -6
  334. package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
  335. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
  336. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
  337. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  338. package/src/migrations/index.ts +56 -0
  339. package/src/module.d.ts +3 -0
  340. package/src/tests/utilities/TestConfiguration.js +73 -50
  341. package/src/threads/automation.js +17 -15
  342. package/src/threads/query.js +14 -21
  343. package/src/utilities/fileSystem/index.js +4 -3
  344. package/src/utilities/global.js +15 -12
  345. package/src/utilities/index.js +7 -17
  346. package/src/utilities/routing/index.js +5 -5
  347. package/src/utilities/rowProcessor/index.js +25 -27
  348. package/src/utilities/rowProcessor/utils.js +23 -7
  349. package/src/utilities/usageQuota/index.js +1 -0
  350. package/src/utilities/usageQuota/rows.js +1 -0
  351. package/src/utilities/users.js +3 -3
  352. package/src/utilities/workerRequests.js +4 -4
  353. package/tsconfig.json +2 -1
  354. package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
  355. package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
  356. package/src/migrations/usageQuotas/index.js +0 -24
  357. package/src/migrations/usageQuotas/syncRows.js +0 -21
@@ -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">37x</span>
402
- <span class="cline-any cline-yes">37x</span>
403
- <span class="cline-any cline-yes">37x</span>
404
- <span class="cline-any cline-yes">37x</span>
405
- <span class="cline-any cline-yes">37x</span>
406
- <span class="cline-any cline-yes">37x</span>
407
- <span class="cline-any cline-yes">37x</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">37x</span>
413
- <span class="cline-any cline-yes">37x</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">37x</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">37x</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>
@@ -578,15 +576,17 @@
578
576
  <span class="cline-any cline-neutral">&nbsp;</span>
579
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">37x</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">37x</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-yes">39x</span>
590
590
  <span class="cline-any cline-neutral">&nbsp;</span>
591
591
  <span class="cline-any cline-yes">180x</span>
592
592
  <span class="cline-any cline-no">&nbsp;</span>
@@ -610,7 +610,7 @@
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">37x</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>
@@ -630,10 +630,11 @@
630
630
  <span class="cline-any cline-yes">165x</span>
631
631
  <span class="cline-any cline-neutral">&nbsp;</span>
632
632
  <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
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>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
638
  <span class="cline-any cline-yes">179x</span>
638
639
  <span class="cline-any cline-neutral">&nbsp;</span>
639
640
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -656,14 +657,7 @@
656
657
  <span class="cline-any cline-neutral">&nbsp;</span>
657
658
  <span class="cline-any cline-neutral">&nbsp;</span>
658
659
  <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-yes">37x</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-yes">103x</span>
660
+ <span class="cline-any cline-yes">39x</span>
667
661
  <span class="cline-any cline-yes">103x</span>
668
662
  <span class="cline-any cline-yes">103x</span>
669
663
  <span class="cline-any cline-yes">90x</span>
@@ -691,10 +685,6 @@
691
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>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
688
  <span class="cline-any cline-yes">103x</span>
699
689
  <span class="cline-any cline-neutral">&nbsp;</span>
700
690
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -707,13 +697,15 @@
707
697
  <span class="cline-any cline-neutral">&nbsp;</span>
708
698
  <span class="cline-any cline-neutral">&nbsp;</span>
709
699
  <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-yes">37x</span>
711
- <span class="cline-any cline-yes">8x</span>
712
- <span class="cline-any cline-yes">8x</span>
713
700
  <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>
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>
705
+ <span class="cline-any cline-neutral">&nbsp;</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 Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
1084
+ at Fri Feb 04 2022 13:16:14 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">37x</span>
84
- <span class="cline-any cline-yes">37x</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">37x</span>
90
- <span class="cline-any cline-yes">121x</span>
91
- <span class="cline-any cline-yes">121x</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">121x</span>
95
- <span class="cline-any cline-yes">370x</span>
96
- <span class="cline-any cline-yes">370x</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">121x</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 Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
184
+ at Fri Feb 04 2022 13:16:14 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">37x</span>
85
- <span class="cline-any cline-yes">37x</span>
86
- <span class="cline-any cline-yes">37x</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">37x</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 Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
139
+ at Fri Feb 04 2022 13:16:14 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  </div>
142
142
  <script src="../prettify.js"></script>
@@ -132,19 +132,19 @@
132
132
  <span class="cline-any cline-neutral">&nbsp;</span>
133
133
  <span class="cline-any cline-neutral">&nbsp;</span>
134
134
  <span class="cline-any cline-neutral">&nbsp;</span>
135
- <span class="cline-any cline-yes">36x</span>
135
+ <span class="cline-any cline-yes">38x</span>
136
136
  <span class="cline-any cline-neutral">&nbsp;</span>
137
137
  <span class="cline-any cline-neutral">&nbsp;</span>
138
138
  <span class="cline-any cline-neutral">&nbsp;</span>
139
- <span class="cline-any cline-yes">36x</span>
140
- <span class="cline-any cline-yes">36x</span>
139
+ <span class="cline-any cline-yes">38x</span>
140
+ <span class="cline-any cline-yes">38x</span>
141
141
  <span class="cline-any cline-neutral">&nbsp;</span>
142
- <span class="cline-any cline-yes">36x</span>
142
+ <span class="cline-any cline-yes">38x</span>
143
143
  <span class="cline-any cline-neutral">&nbsp;</span>
144
144
  <span class="cline-any cline-neutral">&nbsp;</span>
145
145
  <span class="cline-any cline-neutral">&nbsp;</span>
146
146
  <span class="cline-any cline-neutral">&nbsp;</span>
147
- <span class="cline-any cline-yes">36x</span>
147
+ <span class="cline-any cline-yes">38x</span>
148
148
  <span class="cline-any cline-yes">4x</span>
149
149
  <span class="cline-any cline-yes">84x</span>
150
150
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -170,7 +170,7 @@
170
170
  <span class="cline-any cline-neutral">&nbsp;</span>
171
171
  <span class="cline-any cline-neutral">&nbsp;</span>
172
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
- <span class="cline-any cline-yes">36x</span>
173
+ <span class="cline-any cline-yes">38x</span>
174
174
  <span class="cline-any cline-yes">4x</span>
175
175
  <span class="cline-any cline-yes">4x</span>
176
176
  <span class="cline-any cline-yes">4x</span>
@@ -196,7 +196,7 @@
196
196
  <span class="cline-any cline-yes">4x</span>
197
197
  <span class="cline-any cline-neutral">&nbsp;</span>
198
198
  <span class="cline-any cline-neutral">&nbsp;</span>
199
- <span class="cline-any cline-yes">36x</span>
199
+ <span class="cline-any cline-yes">38x</span>
200
200
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const {
201
201
  PermissionLevels,
202
202
  PermissionTypes,
@@ -274,7 +274,7 @@ exports.CURRENTLY_SUPPORTED_LEVELS = CURRENTLY_SUPPORTED_LEVELS
274
274
  <div class='footer quiet pad2 space-top1 center small'>
275
275
  Code coverage generated by
276
276
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
277
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
277
+ at Fri Feb 04 2022 13:16:14 GMT+0000 (Coordinated Universal Time)
278
278
  </div>
279
279
  </div>
280
280
  <script src="../prettify.js"></script>
@@ -85,7 +85,7 @@
85
85
  <div class='footer quiet pad2 space-top1 center small'>
86
86
  Code coverage generated by
87
87
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
88
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
88
+ at Fri Feb 04 2022 13:16:14 GMT+0000 (Coordinated Universal Time)
89
89
  </div>
90
90
  </div>
91
91
  <script src="../prettify.js"></script>
@@ -125,7 +125,7 @@
125
125
  <div class='footer quiet pad2 space-top1 center small'>
126
126
  Code coverage generated by
127
127
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
128
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
128
+ at Fri Feb 04 2022 13:16:14 GMT+0000 (Coordinated Universal Time)
129
129
  </div>
130
130
  </div>
131
131
  <script src="../../prettify.js"></script>