@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,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">32.5% </span>
26
+ <span class="strong">31.4% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>39/120</span>
28
+ <span class='fraction'>38/121</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">31.25% </span>
40
+ <span class="strong">29.41% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/16</span>
42
+ <span class='fraction'>5/17</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">32.77% </span>
47
+ <span class="strong">31.66% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>39/119</span>
49
+ <span class='fraction'>38/120</span>
50
50
  </div>
51
51
 
52
52
 
@@ -290,26 +290,28 @@
290
290
  <a name='L231'></a><a href='#L231'>231</a>
291
291
  <a name='L232'></a><a href='#L232'>232</a>
292
292
  <a name='L233'></a><a href='#L233'>233</a>
293
- <a name='L234'></a><a href='#L234'>234</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
293
+ <a name='L234'></a><a href='#L234'>234</a>
294
+ <a name='L235'></a><a href='#L235'>235</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
294
295
  <span class="cline-any cline-neutral">&nbsp;</span>
295
296
  <span class="cline-any cline-neutral">&nbsp;</span>
296
297
  <span class="cline-any cline-neutral">&nbsp;</span>
298
+ <span class="cline-any cline-yes">39x</span>
299
+ <span class="cline-any cline-yes">39x</span>
300
+ <span class="cline-any cline-yes">39x</span>
301
+ <span class="cline-any cline-yes">39x</span>
302
+ <span class="cline-any cline-yes">39x</span>
303
+ <span class="cline-any cline-yes">39x</span>
297
304
  <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-yes">34x</span>
299
- <span class="cline-any cline-yes">34x</span>
300
- <span class="cline-any cline-yes">34x</span>
301
- <span class="cline-any cline-yes">34x</span>
302
- <span class="cline-any cline-yes">34x</span>
303
- <span class="cline-any cline-yes">34x</span>
304
305
  <span class="cline-any cline-neutral">&nbsp;</span>
305
306
  <span class="cline-any cline-neutral">&nbsp;</span>
306
307
  <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-yes">34x</span>
308
- <span class="cline-any cline-yes">34x</span>
309
- <span class="cline-any cline-yes">34x</span>
308
+ <span class="cline-any cline-yes">39x</span>
309
+ <span class="cline-any cline-yes">39x</span>
310
+ <span class="cline-any cline-yes">39x</span>
310
311
  <span class="cline-any cline-neutral">&nbsp;</span>
311
312
  <span class="cline-any cline-neutral">&nbsp;</span>
312
313
  <span class="cline-any cline-yes">2x</span>
314
+ <span class="cline-any cline-yes">2x</span>
313
315
  <span class="cline-any cline-neutral">&nbsp;</span>
314
316
  <span class="cline-any cline-neutral">&nbsp;</span>
315
317
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -346,13 +348,10 @@
346
348
  <span class="cline-any cline-no">&nbsp;</span>
347
349
  <span class="cline-any cline-neutral">&nbsp;</span>
348
350
  <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-yes">34x</span>
351
+ <span class="cline-any cline-yes">39x</span>
350
352
  <span class="cline-any cline-neutral">&nbsp;</span>
351
353
  <span class="cline-any cline-no">&nbsp;</span>
352
354
  <span class="cline-any cline-no">&nbsp;</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-neutral">&nbsp;</span>
356
355
  <span class="cline-any cline-no">&nbsp;</span>
357
356
  <span class="cline-any cline-no">&nbsp;</span>
358
357
  <span class="cline-any cline-no">&nbsp;</span>
@@ -363,7 +362,7 @@
363
362
  <span class="cline-any cline-no">&nbsp;</span>
364
363
  <span class="cline-any cline-neutral">&nbsp;</span>
365
364
  <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-yes">34x</span>
365
+ <span class="cline-any cline-yes">39x</span>
367
366
  <span class="cline-any cline-no">&nbsp;</span>
368
367
  <span class="cline-any cline-neutral">&nbsp;</span>
369
368
  <span class="cline-any cline-no">&nbsp;</span>
@@ -401,6 +400,7 @@
401
400
  <span class="cline-any cline-neutral">&nbsp;</span>
402
401
  <span class="cline-any cline-no">&nbsp;</span>
403
402
  <span class="cline-any cline-no">&nbsp;</span>
403
+ <span class="cline-any cline-no">&nbsp;</span>
404
404
  <span class="cline-any cline-neutral">&nbsp;</span>
405
405
  <span class="cline-any cline-no">&nbsp;</span>
406
406
  <span class="cline-any cline-no">&nbsp;</span>
@@ -429,12 +429,13 @@
429
429
  <span class="cline-any cline-neutral">&nbsp;</span>
430
430
  <span class="cline-any cline-neutral">&nbsp;</span>
431
431
  <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
433
  <span class="cline-any cline-no">&nbsp;</span>
433
434
  <span class="cline-any cline-neutral">&nbsp;</span>
434
435
  <span class="cline-any cline-neutral">&nbsp;</span>
435
436
  <span class="cline-any cline-neutral">&nbsp;</span>
436
437
  <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-yes">34x</span>
438
+ <span class="cline-any cline-yes">39x</span>
438
439
  <span class="cline-any cline-yes">2x</span>
439
440
  <span class="cline-any cline-yes">2x</span>
440
441
  <span class="cline-any cline-yes">2x</span>
@@ -454,7 +455,9 @@
454
455
  <span class="cline-any cline-yes">2x</span>
455
456
  <span class="cline-any cline-neutral">&nbsp;</span>
456
457
  <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-yes">34x</span>
458
+ <span class="cline-any cline-yes">39x</span>
459
+ <span class="cline-any cline-neutral">&nbsp;</span>
460
+ <span class="cline-any cline-no">&nbsp;</span>
458
461
  <span class="cline-any cline-neutral">&nbsp;</span>
459
462
  <span class="cline-any cline-no">&nbsp;</span>
460
463
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -462,8 +465,7 @@
462
465
  <span class="cline-any cline-no">&nbsp;</span>
463
466
  <span class="cline-any cline-neutral">&nbsp;</span>
464
467
  <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-yes">34x</span>
466
- <span class="cline-any cline-yes">1x</span>
468
+ <span class="cline-any cline-yes">39x</span>
467
469
  <span class="cline-any cline-yes">1x</span>
468
470
  <span class="cline-any cline-yes">1x</span>
469
471
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -475,7 +477,7 @@
475
477
  <span class="cline-any cline-yes">1x</span>
476
478
  <span class="cline-any cline-neutral">&nbsp;</span>
477
479
  <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-yes">34x</span>
480
+ <span class="cline-any cline-yes">39x</span>
479
481
  <span class="cline-any cline-yes">1x</span>
480
482
  <span class="cline-any cline-yes">1x</span>
481
483
  <span class="cline-any cline-yes">1x</span>
@@ -488,11 +490,11 @@
488
490
  <span class="cline-any cline-neutral">&nbsp;</span>
489
491
  <span class="cline-any cline-neutral">&nbsp;</span>
490
492
  <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-yes">34x</span>
493
+ <span class="cline-any cline-yes">39x</span>
492
494
  <span class="cline-any cline-yes">1x</span>
493
495
  <span class="cline-any cline-neutral">&nbsp;</span>
494
496
  <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-yes">34x</span>
497
+ <span class="cline-any cline-yes">39x</span>
496
498
  <span class="cline-any cline-no">&nbsp;</span>
497
499
  <span class="cline-any cline-no">&nbsp;</span>
498
500
  <span class="cline-any cline-no">&nbsp;</span>
@@ -511,7 +513,7 @@
511
513
  <span class="cline-any cline-no">&nbsp;</span>
512
514
  <span class="cline-any cline-neutral">&nbsp;</span>
513
515
  <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-yes">34x</span>
516
+ <span class="cline-any cline-yes">39x</span>
515
517
  <span class="cline-any cline-no">&nbsp;</span>
516
518
  <span class="cline-any cline-no">&nbsp;</span>
517
519
  <span class="cline-any cline-no">&nbsp;</span>
@@ -523,8 +525,7 @@
523
525
  <span class="cline-any cline-neutral">&nbsp;</span>
524
526
  <span class="cline-any cline-no">&nbsp;</span>
525
527
  <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../db")
527
- const {
528
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const {
528
529
  generateUserMetadataID,
529
530
  getUserMetadataParams,
530
531
  generateUserFlagID,
@@ -536,12 +537,14 @@ const { isEqual } = require("lodash")
536
537
  const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
537
538
  const {
538
539
  getDevelopmentAppID,
539
- getDeployedAppIDs,
540
+ getProdAppIDs,
541
+ dbExists,
540
542
  } = require("@budibase/backend-core/db")
541
- const { doesDatabaseExist } = require("../../utilities")
542
543
  const { UserStatus } = require("@budibase/backend-core/constants")
544
+ const { getAppDB, doInAppContext } = require("@budibase/backend-core/context")
543
545
  &nbsp;
544
- async function rawMetadata(db) {
546
+ async function rawMetadata() {
547
+ const db = getAppDB()
545
548
  return (
546
549
  await db.allDocs(
547
550
  getUserMetadataParams(null, {
@@ -579,13 +582,10 @@ function <span class="fstat-no" title="function not covered" >combineMetadataAnd
579
582
  <span class="cstat-no" title="statement not covered" > return null</span>
580
583
  }
581
584
  &nbsp;
582
- exports.syncGlobalUsers = <span class="fstat-no" title="function not covered" >as</span>ync appId =&gt; {
585
+ exports.syncGlobalUsers = <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {
583
586
  // sync user metadata
584
- const db = <span class="cstat-no" title="statement not covered" >new CouchDB(appId)</span>
585
- const [users, metadata] = <span class="cstat-no" title="statement not covered" >await Promise.all([</span>
586
- getGlobalUsers(appId),
587
- rawMetadata(db),
588
- ])
587
+ const db = <span class="cstat-no" title="statement not covered" >getAppDB()</span>
588
+ const [users, metadata] = <span class="cstat-no" title="statement not covered" >await Promise.all([getGlobalUsers(), rawMetadata()])</span>
589
589
  const toWrite = <span class="cstat-no" title="statement not covered" >[]</span>
590
590
  <span class="cstat-no" title="statement not covered" > for (let user of users) {</span>
591
591
  const combined = <span class="cstat-no" title="statement not covered" >await combineMetadataAndUser(user, metadata)</span>
@@ -619,7 +619,7 @@ exports.syncUser = <span class="fstat-no" title="function not covered" >as</span
619
619
  let prodAppIds
620
620
  // if they are a builder then get all production app IDs
621
621
  <span class="cstat-no" title="statement not covered" > if ((user.builder &amp;&amp; user.builder.global) || deleting) {</span>
622
- <span class="cstat-no" title="statement not covered" > prodAppIds = await getDeployedAppIDs(CouchDB)</span>
622
+ <span class="cstat-no" title="statement not covered" > prodAppIds = await getProdAppIDs()</span>
623
623
  } else {
624
624
  <span class="cstat-no" title="statement not covered" > prodAppIds = Object.entries(roles)</span>
625
625
  .filter(<span class="fstat-no" title="function not covered" >en</span>try =&gt; <span class="cstat-no" title="statement not covered" >entry[1] !== BUILTIN_ROLE_IDS.PUBLIC)</span>
@@ -629,37 +629,39 @@ exports.syncUser = <span class="fstat-no" title="function not covered" >as</span
629
629
  const roleId = <span class="cstat-no" title="statement not covered" >roles[prodAppId]</span>
630
630
  const devAppId = <span class="cstat-no" title="statement not covered" >getDevelopmentAppID(prodAppId)</span>
631
631
  <span class="cstat-no" title="statement not covered" > for (let appId of [prodAppId, devAppId]) {</span>
632
- <span class="cstat-no" title="statement not covered" > if (!(await doesDatabaseExist(appId))) {</span>
632
+ <span class="cstat-no" title="statement not covered" > if (!(await dbExists(appId))) {</span>
633
633
  <span class="cstat-no" title="statement not covered" > continue</span>
634
634
  }
635
- const db = <span class="cstat-no" title="statement not covered" >new CouchDB(appId)</span>
636
- const metadataId = <span class="cstat-no" title="statement not covered" >generateUserMetadataID(userId)</span>
637
- let metadata
638
- <span class="cstat-no" title="statement not covered" > try {</span>
639
- <span class="cstat-no" title="statement not covered" > metadata = await db.get(metadataId)</span>
640
- } catch (err) {
641
- <span class="cstat-no" title="statement not covered" > if (deleting) {</span>
642
- <span class="cstat-no" title="statement not covered" > continue</span>
635
+ <span class="cstat-no" title="statement not covered" > await doInAppContext(appId, <span class="fstat-no" title="function not covered" >as</span>ync () =&gt; {</span>
636
+ const db = <span class="cstat-no" title="statement not covered" >getAppDB()</span>
637
+ const metadataId = <span class="cstat-no" title="statement not covered" >generateUserMetadataID(userId)</span>
638
+ let metadata
639
+ <span class="cstat-no" title="statement not covered" > try {</span>
640
+ <span class="cstat-no" title="statement not covered" > metadata = await db.get(metadataId)</span>
641
+ } catch (err) {
642
+ <span class="cstat-no" title="statement not covered" > if (deleting) {</span>
643
+ <span class="cstat-no" title="statement not covered" > return</span>
644
+ }
645
+ <span class="cstat-no" title="statement not covered" > metadata = {</span>
646
+ tableId: InternalTables.USER_METADATA,
647
+ }
643
648
  }
644
- <span class="cstat-no" title="statement not covered" > metadata = {</span>
645
- tableId: InternalTables.USER_METADATA,
649
+ // assign the roleId for the metadata doc
650
+ <span class="cstat-no" title="statement not covered" > if (roleId) {</span>
651
+ <span class="cstat-no" title="statement not covered" > metadata.roleId = roleId</span>
646
652
  }
647
- }
648
- // assign the roleId for the metadata doc
649
- <span class="cstat-no" title="statement not covered" > if (roleId) {</span>
650
- <span class="cstat-no" title="statement not covered" > metadata.roleId = roleId</span>
651
- }
652
- let combined = <span class="cstat-no" title="statement not covered" >!deleting</span>
653
- ? combineMetadataAndUser(user, metadata)
654
- : {
655
- ...metadata,
656
- status: UserStatus.INACTIVE,
657
- metadata: BUILTIN_ROLE_IDS.PUBLIC,
658
- }
659
- // if its null then there was no updates required
660
- <span class="cstat-no" title="statement not covered" > if (combined) {</span>
661
- <span class="cstat-no" title="statement not covered" > await db.put(combined)</span>
662
- }
653
+ let combined = <span class="cstat-no" title="statement not covered" >!deleting</span>
654
+ ? combineMetadataAndUser(user, metadata)
655
+ : {
656
+ ...metadata,
657
+ status: UserStatus.INACTIVE,
658
+ metadata: BUILTIN_ROLE_IDS.PUBLIC,
659
+ }
660
+ // if its null then there was no updates required
661
+ <span class="cstat-no" title="statement not covered" > if (combined) {</span>
662
+ <span class="cstat-no" title="statement not covered" > await db.put(combined)</span>
663
+ }
664
+ })
663
665
  }
664
666
  }
665
667
  <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
@@ -668,8 +670,8 @@ exports.syncUser = <span class="fstat-no" title="function not covered" >as</span
668
670
  }
669
671
  &nbsp;
670
672
  exports.fetchMetadata = async function (ctx) {
671
- const database = new CouchDB(ctx.appId)
672
- const global = await getGlobalUsers(ctx.appId)
673
+ const database = getAppDB()
674
+ const global = await getGlobalUsers()
673
675
  const metadata = await rawMetadata(database)
674
676
  const users = []
675
677
  for (let user of global) {
@@ -692,12 +694,13 @@ exports.updateSelfMetadata = <span class="fstat-no" title="function not covered"
692
694
  <span class="cstat-no" title="statement not covered" > ctx.request.body._id = ctx.user._id</span>
693
695
  // make sure no stale rev
694
696
  <span class="cstat-no" title="statement not covered" > delete ctx.request.body._rev</span>
697
+ // make sure no csrf token
698
+ <span class="cstat-no" title="statement not covered" > delete ctx.request.body.csrfToken</span>
695
699
  <span class="cstat-no" title="statement not covered" > await exports.updateMetadata(ctx)</span>
696
700
  }
697
701
  &nbsp;
698
702
  exports.updateMetadata = async function (ctx) {
699
- const appId = ctx.appId
700
- const db = new CouchDB(appId)
703
+ const db = getAppDB()
701
704
  const user = ctx.request.body
702
705
  // this isn't applicable to the user
703
706
  delete user.roles
@@ -709,7 +712,7 @@ exports.updateMetadata = async function (ctx) {
709
712
  }
710
713
  &nbsp;
711
714
  exports.destroyMetadata = async function (ctx) {
712
- const db = new CouchDB(ctx.appId)
715
+ const db = getAppDB()
713
716
  try {
714
717
  const dbUser = await db.get(ctx.params.id)
715
718
  <span class="cstat-no" title="statement not covered" > await db.remove(dbUser._id, dbUser._rev)</span>
@@ -732,7 +735,7 @@ exports.setFlag = <span class="fstat-no" title="function not covered" >as</span>
732
735
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Must supply a 'flag' field in request body.")</span>
733
736
  }
734
737
  const flagDocId = <span class="cstat-no" title="statement not covered" >generateUserFlagID(userId)</span>
735
- const db = <span class="cstat-no" title="statement not covered" >new CouchDB(ctx.appId)</span>
738
+ const db = <span class="cstat-no" title="statement not covered" >getAppDB()</span>
736
739
  let doc
737
740
  <span class="cstat-no" title="statement not covered" > try {</span>
738
741
  <span class="cstat-no" title="statement not covered" > doc = await db.get(flagDocId)</span>
@@ -747,7 +750,7 @@ exports.setFlag = <span class="fstat-no" title="function not covered" >as</span>
747
750
  exports.getFlags = <span class="fstat-no" title="function not covered" >as</span>ync function (ctx) {
748
751
  const userId = <span class="cstat-no" title="statement not covered" >ctx.user._id</span>
749
752
  const docId = <span class="cstat-no" title="statement not covered" >generateUserFlagID(userId)</span>
750
- const db = <span class="cstat-no" title="statement not covered" >new CouchDB(ctx.appId)</span>
753
+ const db = <span class="cstat-no" title="statement not covered" >getAppDB()</span>
751
754
  let doc
752
755
  <span class="cstat-no" title="statement not covered" > try {</span>
753
756
  <span class="cstat-no" title="statement not covered" > doc = await db.get(docId)</span>
@@ -763,7 +766,7 @@ exports.getFlags = <span class="fstat-no" title="function not covered" >as</span
763
766
  <div class='footer quiet pad2 space-top1 center small'>
764
767
  Code coverage generated by
765
768
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
766
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
769
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
767
770
  </div>
768
771
  </div>
769
772
  <script src="../../prettify.js"></script>
@@ -80,7 +80,7 @@
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">33x</span>
83
+ <a name='L24'></a><a href='#L24'>24</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">38x</span>
84
84
  <span class="cline-any cline-yes">2x</span>
85
85
  <span class="cline-any cline-neutral">&nbsp;</span>
86
86
  <span class="cline-any cline-yes">1x</span>
@@ -95,11 +95,11 @@
95
95
  <span class="cline-any cline-yes">1x</span>
96
96
  <span class="cline-any cline-neutral">&nbsp;</span>
97
97
  <span class="cline-any cline-neutral">&nbsp;</span>
98
- <span class="cline-any cline-yes">33x</span>
98
+ <span class="cline-any cline-yes">38x</span>
99
99
  <span class="cline-any cline-yes">1x</span>
100
100
  <span class="cline-any cline-neutral">&nbsp;</span>
101
101
  <span class="cline-any cline-neutral">&nbsp;</span>
102
- <span class="cline-any cline-yes">33x</span>
102
+ <span class="cline-any cline-yes">38x</span>
103
103
  <span class="cline-any cline-neutral">&nbsp;</span>
104
104
  <span class="cline-any cline-neutral">&nbsp;</span>
105
105
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -133,7 +133,7 @@ exports.ExportFormats = {
133
133
  <div class='footer quiet pad2 space-top1 center small'>
134
134
  Code coverage generated by
135
135
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
136
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
136
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
137
137
  </div>
138
138
  </div>
139
139
  <script src="../../../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">73.43% </span>
26
+ <span class="strong">73.84% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>141/192</span>
28
+ <span class='fraction'>144/195</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">73.68% </span>
47
+ <span class="strong">74.09% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>140/190</span>
49
+ <span class='fraction'>143/193</span>
50
50
  </div>
51
51
 
52
52
 
@@ -89,32 +89,32 @@
89
89
 
90
90
  <tr>
91
91
  <td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
92
- <td data-value="88.73" class="pic high">
92
+ <td data-value="88.4" class="pic high">
93
93
  <div class="chart"><div class="cover-fill" style="width: 88%"></div><div class="cover-empty" style="width: 12%"></div></div>
94
94
  </td>
95
- <td data-value="88.73" class="pct high">88.73%</td>
96
- <td data-value="71" class="abs high">63/71</td>
95
+ <td data-value="88.4" class="pct high">88.4%</td>
96
+ <td data-value="69" class="abs high">61/69</td>
97
97
  <td data-value="72" class="pct medium">72%</td>
98
98
  <td data-value="25" class="abs medium">18/25</td>
99
99
  <td data-value="62.5" class="pct medium">62.5%</td>
100
100
  <td data-value="8" class="abs medium">5/8</td>
101
- <td data-value="90" class="pct high">90%</td>
102
- <td data-value="70" class="abs high">63/70</td>
101
+ <td data-value="89.7" class="pct high">89.7%</td>
102
+ <td data-value="68" class="abs high">61/68</td>
103
103
  </tr>
104
104
 
105
105
  <tr>
106
106
  <td class="file medium" data-value="utils.js"><a href="utils.js.html">utils.js</a></td>
107
- <td data-value="50" class="pic medium">
108
- <div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div>
107
+ <td data-value="53.08" class="pic medium">
108
+ <div class="chart"><div class="cover-fill" style="width: 53%"></div><div class="cover-empty" style="width: 47%"></div></div>
109
109
  </td>
110
- <td data-value="50" class="pct medium">50%</td>
111
- <td data-value="76" class="abs medium">38/76</td>
110
+ <td data-value="53.08" class="pct medium">53.08%</td>
111
+ <td data-value="81" class="abs medium">43/81</td>
112
112
  <td data-value="34.61" class="pct low">34.61%</td>
113
113
  <td data-value="26" class="abs low">9/26</td>
114
114
  <td data-value="66.66" class="pct medium">66.66%</td>
115
115
  <td data-value="9" class="abs medium">6/9</td>
116
- <td data-value="50" class="pct medium">50%</td>
117
- <td data-value="76" class="abs medium">38/76</td>
116
+ <td data-value="53.08" class="pct medium">53.08%</td>
117
+ <td data-value="81" class="abs medium">43/81</td>
118
118
  </tr>
119
119
 
120
120
  <tr>
@@ -140,7 +140,7 @@
140
140
  <div class='footer quiet pad2 space-top1 center small'>
141
141
  Code coverage generated by
142
142
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
143
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
143
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
144
144
  </div>
145
145
  </div>
146
146
  <script src="../../../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">88.73% </span>
26
+ <span class="strong">88.4% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>63/71</span>
28
+ <span class='fraction'>61/69</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">90% </span>
47
+ <span class="strong">89.7% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>63/70</span>
49
+ <span class='fraction'>61/68</span>
50
50
  </div>
51
51
 
52
52
 
@@ -176,23 +176,20 @@
176
176
  <a name='L117'></a><a href='#L117'>117</a>
177
177
  <a name='L118'></a><a href='#L118'>118</a>
178
178
  <a name='L119'></a><a href='#L119'>119</a>
179
- <a name='L120'></a><a href='#L120'>120</a>
180
- <a name='L121'></a><a href='#L121'>121</a>
181
- <a name='L122'></a><a href='#L122'>122</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
182
- <span class="cline-any cline-yes">33x</span>
183
- <span class="cline-any cline-yes">33x</span>
184
- <span class="cline-any cline-yes">33x</span>
185
- <span class="cline-any cline-yes">33x</span>
186
- <span class="cline-any cline-yes">33x</span>
187
- <span class="cline-any cline-yes">33x</span>
188
- <span class="cline-any cline-yes">33x</span>
189
- <span class="cline-any cline-neutral">&nbsp;</span>
190
- <span class="cline-any cline-yes">33x</span>
191
- <span class="cline-any cline-yes">1x</span>
179
+ <a name='L120'></a><a href='#L120'>120</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">38x</span>
180
+ <span class="cline-any cline-yes">38x</span>
181
+ <span class="cline-any cline-yes">38x</span>
182
+ <span class="cline-any cline-yes">38x</span>
183
+ <span class="cline-any cline-yes">38x</span>
184
+ <span class="cline-any cline-yes">38x</span>
185
+ <span class="cline-any cline-yes">38x</span>
186
+ <span class="cline-any cline-yes">38x</span>
187
+ <span class="cline-any cline-neutral">&nbsp;</span>
188
+ <span class="cline-any cline-yes">38x</span>
192
189
  <span class="cline-any cline-yes">1x</span>
193
190
  <span class="cline-any cline-neutral">&nbsp;</span>
194
191
  <span class="cline-any cline-neutral">&nbsp;</span>
195
- <span class="cline-any cline-yes">33x</span>
192
+ <span class="cline-any cline-yes">38x</span>
196
193
  <span class="cline-any cline-yes">8x</span>
197
194
  <span class="cline-any cline-yes">8x</span>
198
195
  <span class="cline-any cline-yes">8x</span>
@@ -221,7 +218,7 @@
221
218
  <span class="cline-any cline-neutral">&nbsp;</span>
222
219
  <span class="cline-any cline-neutral">&nbsp;</span>
223
220
  <span class="cline-any cline-neutral">&nbsp;</span>
224
- <span class="cline-any cline-yes">33x</span>
221
+ <span class="cline-any cline-yes">38x</span>
225
222
  <span class="cline-any cline-yes">1x</span>
226
223
  <span class="cline-any cline-yes">1x</span>
227
224
  <span class="cline-any cline-yes">1x</span>
@@ -232,8 +229,7 @@
232
229
  <span class="cline-any cline-yes">1x</span>
233
230
  <span class="cline-any cline-neutral">&nbsp;</span>
234
231
  <span class="cline-any cline-neutral">&nbsp;</span>
235
- <span class="cline-any cline-yes">33x</span>
236
- <span class="cline-any cline-yes">2x</span>
232
+ <span class="cline-any cline-yes">38x</span>
237
233
  <span class="cline-any cline-yes">2x</span>
238
234
  <span class="cline-any cline-yes">2x</span>
239
235
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -299,22 +295,21 @@
299
295
  <span class="cline-any cline-yes">2x</span>
300
296
  <span class="cline-any cline-yes">2x</span>
301
297
  <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../../db")
303
- const viewTemplate = require("./viewBuilder")
298
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const viewTemplate = require("./viewBuilder")
304
299
  const { apiFileReturn } = require("../../../utilities/fileSystem")
305
300
  const exporters = require("./exporters")
306
301
  const { saveView, getView, getViews, deleteView } = require("./utils")
307
302
  const { fetchView } = require("../row")
308
303
  const { getTable } = require("../table/utils")
309
304
  const { FieldTypes } = require("../../../constants")
305
+ const { getAppDB } = require("@budibase/backend-core/context")
310
306
  &nbsp;
311
307
  exports.fetch = async ctx =&gt; {
312
- const db = new CouchDB(ctx.appId)
313
- ctx.body = await getViews(db)
308
+ ctx.body = await getViews()
314
309
  }
315
310
  &nbsp;
316
311
  exports.save = async ctx =&gt; {
317
- const db = new CouchDB(ctx.appId)
312
+ const db = getAppDB()
318
313
  const { originalName, ...viewToSave } = ctx.request.body
319
314
  const view = viewTemplate(viewToSave)
320
315
  &nbsp;
@@ -322,7 +317,7 @@ exports.save = async ctx =&gt; {
322
317
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Cannot create view without a name")</span>
323
318
  }
324
319
  &nbsp;
325
- await saveView(db, originalName, viewToSave.name, view)
320
+ await saveView(originalName, viewToSave.name, view)
326
321
  &nbsp;
327
322
  // add views to table document
328
323
  const table = await db.get(ctx.request.body.tableId)
@@ -343,9 +338,9 @@ exports.save = async ctx =&gt; {
343
338
  }
344
339
  &nbsp;
345
340
  exports.destroy = async ctx =&gt; {
346
- const db = new CouchDB(ctx.appId)
341
+ const db = getAppDB()
347
342
  const viewName = decodeURI(ctx.params.viewName)
348
- const view = await deleteView(db, viewName)
343
+ const view = await deleteView(viewName)
349
344
  const table = await db.get(view.meta.tableId)
350
345
  delete table.views[viewName]
351
346
  await db.put(table)
@@ -354,9 +349,8 @@ exports.destroy = async ctx =&gt; {
354
349
  }
355
350
  &nbsp;
356
351
  exports.exportView = async ctx =&gt; {
357
- const db = new CouchDB(ctx.appId)
358
352
  const viewName = decodeURI(ctx.query.view)
359
- const view = await getView(db, viewName)
353
+ const view = await getView(viewName)
360
354
  &nbsp;
361
355
  const format = ctx.query.format
362
356
  <span class="missing-if-branch" title="if path not taken" >I</span>if (!format || !Object.values(exporters.ExportFormats).includes(format)) {
@@ -384,7 +378,7 @@ exports.exportView = async ctx =&gt; {
384
378
  let schema = view &amp;&amp; view.meta &amp;&amp; view.meta.schema
385
379
  if (!schema) {
386
380
  const tableId = ctx.params.tableId || view.meta.tableId
387
- const table = await getTable(ctx.appId, tableId)
381
+ const table = await getTable(tableId)
388
382
  schema = table.schema
389
383
  }
390
384
  &nbsp;
@@ -427,7 +421,7 @@ exports.exportView = async ctx =&gt; {
427
421
  <div class='footer quiet pad2 space-top1 center small'>
428
422
  Code coverage generated by
429
423
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
430
- at Fri Feb 04 2022 12:19:28 GMT+0000 (Coordinated Universal Time)
424
+ at Tue Feb 08 2022 15:32:15 GMT+0000 (Coordinated Universal Time)
431
425
  </div>
432
426
  </div>
433
427
  <script src="../../../prettify.js"></script>