@budibase/server 1.0.47 → 1.0.49-alpha.10

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 (379) 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.937b2767.js → index.506eca43.js} +249 -246
  8. package/builder/assets/index.83c0944f.css +1 -0
  9. package/builder/assets/{vendor.f9faf6ab.js → vendor.d526bfe8.js} +12 -12
  10. package/builder/index.html +3 -3
  11. package/coverage/clover.xml +3069 -2773
  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 +76 -76
  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 +282 -111
  49. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/user.js.html +47 -50
  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 +11 -11
  123. package/coverage/lcov-report/constants/index.js.html +68 -32
  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 +138 -123
  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 +36 -42
  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 +4989 -4390
  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 +89 -65
  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 +61 -12
  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 +77 -37
  212. package/dist/api/controllers/user.js +18 -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 -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 +12 -5
  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 +56 -14
  235. package/dist/integrations/googlesheets.js +340 -0
  236. package/dist/integrations/index.js +3 -0
  237. package/dist/integrations/utils.js +60 -8
  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 +17 -19
  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/postgres/init.sql +11 -6
  268. package/scripts/likeCypress.ts +1 -1
  269. package/src/api/controllers/application.js +85 -50
  270. package/src/api/controllers/auth.js +8 -5
  271. package/src/api/controllers/automation.js +13 -23
  272. package/src/api/controllers/cloud.js +2 -3
  273. package/src/api/controllers/component.js +3 -4
  274. package/src/api/controllers/datasource.js +21 -11
  275. package/src/api/controllers/deploy/Deployment.js +3 -7
  276. package/src/api/controllers/deploy/index.js +20 -13
  277. package/src/api/controllers/dev.js +5 -5
  278. package/src/api/controllers/layout.js +3 -3
  279. package/src/api/controllers/metadata.js +4 -9
  280. package/src/api/controllers/migrations.js +13 -0
  281. package/src/api/controllers/permission.js +4 -4
  282. package/src/api/controllers/query/import/index.ts +4 -6
  283. package/src/api/controllers/query/import/tests/index.spec.js +2 -1
  284. package/src/api/controllers/query/index.js +11 -10
  285. package/src/api/controllers/role.js +5 -5
  286. package/src/api/controllers/routing.js +5 -6
  287. package/src/api/controllers/row/ExternalRequest.ts +66 -42
  288. package/src/api/controllers/row/external.js +27 -58
  289. package/src/api/controllers/row/internal.js +54 -90
  290. package/src/api/controllers/row/internalSearch.js +23 -17
  291. package/src/api/controllers/row/staticFormula.js +156 -0
  292. package/src/api/controllers/row/utils.js +13 -18
  293. package/src/api/controllers/screen.js +5 -7
  294. package/src/api/controllers/static/index.js +65 -12
  295. package/src/api/controllers/table/bulkFormula.js +173 -0
  296. package/src/api/controllers/table/external.js +7 -10
  297. package/src/api/controllers/table/index.js +20 -28
  298. package/src/api/controllers/table/internal.js +24 -19
  299. package/src/api/controllers/table/utils.js +101 -44
  300. package/src/api/controllers/user.js +19 -20
  301. package/src/api/controllers/view/index.js +8 -10
  302. package/src/api/controllers/view/utils.js +9 -4
  303. package/src/api/controllers/webhook.js +10 -8
  304. package/src/api/routes/index.js +2 -2
  305. package/src/api/routes/migrations.js +14 -0
  306. package/src/api/routes/static.js +5 -0
  307. package/src/api/routes/tests/application.spec.js +2 -2
  308. package/src/api/routes/tests/auth.spec.js +1 -2
  309. package/src/api/routes/tests/automation.spec.js +1 -0
  310. package/src/api/routes/tests/misc.spec.js +0 -1
  311. package/src/api/routes/tests/routing.spec.js +21 -12
  312. package/src/api/routes/tests/row.spec.js +7 -4
  313. package/src/api/routes/tests/static.spec.js +98 -0
  314. package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
  315. package/src/app.ts +18 -5
  316. package/src/automations/automationUtils.js +2 -3
  317. package/src/automations/steps/createRow.js +2 -5
  318. package/src/automations/steps/deleteRow.js +1 -4
  319. package/src/automations/steps/updateRow.js +1 -1
  320. package/src/automations/triggers.js +33 -31
  321. package/src/automations/utils.js +9 -5
  322. package/src/constants/index.js +17 -5
  323. package/src/db/linkedRows/LinkController.js +3 -7
  324. package/src/db/linkedRows/index.js +16 -31
  325. package/src/db/linkedRows/linkUtils.js +6 -6
  326. package/src/db/tests/linkController.spec.js +0 -1
  327. package/src/db/tests/linkTests.spec.js +5 -6
  328. package/src/db/views/staticViews.js +8 -10
  329. package/src/definitions/common.ts +3 -0
  330. package/src/definitions/datasource.ts +3 -0
  331. package/src/environment.js +4 -1
  332. package/src/integrations/base/sql.ts +69 -21
  333. package/src/integrations/googlesheets.ts +353 -0
  334. package/src/integrations/index.ts +3 -0
  335. package/src/integrations/tests/sql.spec.js +16 -0
  336. package/src/integrations/utils.ts +75 -11
  337. package/src/middleware/authorized.js +66 -30
  338. package/src/middleware/builder.js +2 -2
  339. package/src/middleware/currentapp.js +50 -46
  340. package/src/middleware/tests/authorized.spec.js +13 -6
  341. package/src/middleware/tests/currentapp.spec.js +6 -0
  342. package/src/middleware/tests/usageQuota.spec.js +18 -24
  343. package/src/middleware/usageQuota.js +93 -17
  344. package/src/migrations/functions/appUrls.ts +34 -0
  345. package/src/migrations/functions/quotas1.ts +20 -0
  346. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  347. package/src/migrations/functions/tests/quotas1.spec.js +27 -0
  348. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  349. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  350. package/src/migrations/functions/usageQuotas/syncApps.ts +18 -0
  351. package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
  352. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +37 -0
  353. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +43 -0
  354. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  355. package/src/migrations/index.ts +56 -0
  356. package/src/module.d.ts +3 -0
  357. package/src/tests/utilities/TestConfiguration.js +82 -55
  358. package/src/threads/automation.js +17 -15
  359. package/src/threads/query.js +19 -21
  360. package/src/utilities/fileSystem/index.js +4 -3
  361. package/src/utilities/global.js +15 -12
  362. package/src/utilities/index.js +7 -17
  363. package/src/utilities/routing/index.js +5 -5
  364. package/src/utilities/rowProcessor/index.js +25 -27
  365. package/src/utilities/rowProcessor/utils.js +23 -7
  366. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  367. package/src/utilities/usageQuota/index.js +93 -0
  368. package/src/utilities/usageQuota/rows.js +75 -0
  369. package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
  370. package/src/utilities/users.js +3 -3
  371. package/src/utilities/workerRequests.js +4 -27
  372. package/tsconfig.json +2 -1
  373. package/builder/assets/index.39e01193.css +0 -1
  374. package/dist/api/controllers/hosting.js +0 -30
  375. package/dist/api/routes/hosting.js +0 -11
  376. package/src/api/controllers/hosting.js +0 -22
  377. package/src/api/routes/hosting.js +0 -13
  378. package/src/api/routes/tests/hosting.spec.js +0 -36
  379. package/src/utilities/usageQuota.js +0 -73
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">66.85% </span>
26
+ <span class="strong">63.9% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>117/175</span>
28
+ <span class='fraction'>131/205</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">45.55% </span>
33
+ <span class="strong">40% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>41/90</span>
35
+ <span class='fraction'>38/95</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">62.96% </span>
40
+ <span class="strong">58.82% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>17/27</span>
42
+ <span class='fraction'>20/34</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">67.44% </span>
47
+ <span class="strong">64.32% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>116/172</span>
49
+ <span class='fraction'>128/199</span>
50
50
  </div>
51
51
 
52
52
 
@@ -417,35 +417,120 @@
417
417
  <a name='L358'></a><a href='#L358'>358</a>
418
418
  <a name='L359'></a><a href='#L359'>359</a>
419
419
  <a name='L360'></a><a href='#L360'>360</a>
420
- <a name='L361'></a><a href='#L361'>361</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
421
- <span class="cline-any cline-yes">34x</span>
420
+ <a name='L361'></a><a href='#L361'>361</a>
421
+ <a name='L362'></a><a href='#L362'>362</a>
422
+ <a name='L363'></a><a href='#L363'>363</a>
423
+ <a name='L364'></a><a href='#L364'>364</a>
424
+ <a name='L365'></a><a href='#L365'>365</a>
425
+ <a name='L366'></a><a href='#L366'>366</a>
426
+ <a name='L367'></a><a href='#L367'>367</a>
427
+ <a name='L368'></a><a href='#L368'>368</a>
428
+ <a name='L369'></a><a href='#L369'>369</a>
429
+ <a name='L370'></a><a href='#L370'>370</a>
430
+ <a name='L371'></a><a href='#L371'>371</a>
431
+ <a name='L372'></a><a href='#L372'>372</a>
432
+ <a name='L373'></a><a href='#L373'>373</a>
433
+ <a name='L374'></a><a href='#L374'>374</a>
434
+ <a name='L375'></a><a href='#L375'>375</a>
435
+ <a name='L376'></a><a href='#L376'>376</a>
436
+ <a name='L377'></a><a href='#L377'>377</a>
437
+ <a name='L378'></a><a href='#L378'>378</a>
438
+ <a name='L379'></a><a href='#L379'>379</a>
439
+ <a name='L380'></a><a href='#L380'>380</a>
440
+ <a name='L381'></a><a href='#L381'>381</a>
441
+ <a name='L382'></a><a href='#L382'>382</a>
442
+ <a name='L383'></a><a href='#L383'>383</a>
443
+ <a name='L384'></a><a href='#L384'>384</a>
444
+ <a name='L385'></a><a href='#L385'>385</a>
445
+ <a name='L386'></a><a href='#L386'>386</a>
446
+ <a name='L387'></a><a href='#L387'>387</a>
447
+ <a name='L388'></a><a href='#L388'>388</a>
448
+ <a name='L389'></a><a href='#L389'>389</a>
449
+ <a name='L390'></a><a href='#L390'>390</a>
450
+ <a name='L391'></a><a href='#L391'>391</a>
451
+ <a name='L392'></a><a href='#L392'>392</a>
452
+ <a name='L393'></a><a href='#L393'>393</a>
453
+ <a name='L394'></a><a href='#L394'>394</a>
454
+ <a name='L395'></a><a href='#L395'>395</a>
455
+ <a name='L396'></a><a href='#L396'>396</a>
456
+ <a name='L397'></a><a href='#L397'>397</a>
457
+ <a name='L398'></a><a href='#L398'>398</a>
458
+ <a name='L399'></a><a href='#L399'>399</a>
459
+ <a name='L400'></a><a href='#L400'>400</a>
460
+ <a name='L401'></a><a href='#L401'>401</a>
461
+ <a name='L402'></a><a href='#L402'>402</a>
462
+ <a name='L403'></a><a href='#L403'>403</a>
463
+ <a name='L404'></a><a href='#L404'>404</a>
464
+ <a name='L405'></a><a href='#L405'>405</a>
465
+ <a name='L406'></a><a href='#L406'>406</a>
466
+ <a name='L407'></a><a href='#L407'>407</a>
467
+ <a name='L408'></a><a href='#L408'>408</a>
468
+ <a name='L409'></a><a href='#L409'>409</a>
469
+ <a name='L410'></a><a href='#L410'>410</a>
470
+ <a name='L411'></a><a href='#L411'>411</a>
471
+ <a name='L412'></a><a href='#L412'>412</a>
472
+ <a name='L413'></a><a href='#L413'>413</a>
473
+ <a name='L414'></a><a href='#L414'>414</a>
474
+ <a name='L415'></a><a href='#L415'>415</a>
475
+ <a name='L416'></a><a href='#L416'>416</a>
476
+ <a name='L417'></a><a href='#L417'>417</a>
477
+ <a name='L418'></a><a href='#L418'>418</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-yes">39x</span>
485
+ <span class="cline-any cline-yes">39x</span>
486
+ <span class="cline-any cline-yes">39x</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-yes">39x</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-yes">39x</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-yes">39x</span>
501
+ <span class="cline-any cline-yes">39x</span>
502
+ <span class="cline-any cline-yes">39x</span>
503
+ <span class="cline-any cline-yes">39x</span>
504
+ <span class="cline-any cline-yes">39x</span>
505
+ <span class="cline-any cline-yes">39x</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-yes">39x</span>
508
+ <span class="cline-any cline-no">&nbsp;</span>
509
+ <span class="cline-any cline-no">&nbsp;</span>
422
510
  <span class="cline-any cline-neutral">&nbsp;</span>
423
511
  <span class="cline-any cline-neutral">&nbsp;</span>
424
512
  <span class="cline-any cline-neutral">&nbsp;</span>
425
513
  <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-yes">34x</span>
427
- <span class="cline-any cline-yes">34x</span>
428
- <span class="cline-any cline-yes">34x</span>
429
- <span class="cline-any cline-yes">34x</span>
430
- <span class="cline-any cline-yes">34x</span>
514
+ <span class="cline-any cline-no">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-no">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
431
518
  <span class="cline-any cline-neutral">&nbsp;</span>
432
519
  <span class="cline-any cline-neutral">&nbsp;</span>
433
520
  <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-yes">34x</span>
435
- <span class="cline-any cline-yes">34x</span>
436
- <span class="cline-any cline-yes">34x</span>
437
521
  <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-yes">34x</span>
439
- <span class="cline-any cline-yes">99x</span>
440
- <span class="cline-any cline-yes">99x</span>
441
- <span class="cline-any cline-yes">99x</span>
442
- <span class="cline-any cline-yes">99x</span>
522
+ <span class="cline-any cline-yes">39x</span>
523
+ <span class="cline-any cline-yes">101x</span>
524
+ <span class="cline-any cline-yes">101x</span>
525
+ <span class="cline-any cline-yes">101x</span>
526
+ <span class="cline-any cline-yes">101x</span>
527
+ <span class="cline-any cline-yes">101x</span>
443
528
  <span class="cline-any cline-yes">4x</span>
444
529
  <span class="cline-any cline-yes">11x</span>
445
530
  <span class="cline-any cline-neutral">&nbsp;</span>
446
531
  <span class="cline-any cline-neutral">&nbsp;</span>
447
532
  <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-yes">99x</span>
533
+ <span class="cline-any cline-yes">101x</span>
449
534
  <span class="cline-any cline-neutral">&nbsp;</span>
450
535
  <span class="cline-any cline-yes">1x</span>
451
536
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -456,6 +541,8 @@
456
541
  <span class="cline-any cline-yes">1x</span>
457
542
  <span class="cline-any cline-yes">1x</span>
458
543
  <span class="cline-any cline-yes">1x</span>
544
+ <span class="cline-any cline-yes">1x</span>
545
+ <span class="cline-any cline-yes">1x</span>
459
546
  <span class="cline-any cline-no">&nbsp;</span>
460
547
  <span class="cline-any cline-no">&nbsp;</span>
461
548
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -464,13 +551,15 @@
464
551
  <span class="cline-any cline-neutral">&nbsp;</span>
465
552
  <span class="cline-any cline-neutral">&nbsp;</span>
466
553
  <span class="cline-any cline-yes">1x</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-yes">1x</span>
467
556
  <span class="cline-any cline-yes">1x</span>
468
557
  <span class="cline-any cline-neutral">&nbsp;</span>
469
- <span class="cline-any cline-yes">99x</span>
558
+ <span class="cline-any cline-yes">101x</span>
470
559
  <span class="cline-any cline-neutral">&nbsp;</span>
471
560
  <span class="cline-any cline-neutral">&nbsp;</span>
472
561
  <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-yes">34x</span>
562
+ <span class="cline-any cline-yes">39x</span>
474
563
  <span class="cline-any cline-yes">4x</span>
475
564
  <span class="cline-any cline-no">&nbsp;</span>
476
565
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -490,9 +579,9 @@
490
579
  <span class="cline-any cline-yes">4x</span>
491
580
  <span class="cline-any cline-neutral">&nbsp;</span>
492
581
  <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-yes">34x</span>
494
- <span class="cline-any cline-yes">100x</span>
495
- <span class="cline-any cline-yes">99x</span>
582
+ <span class="cline-any cline-yes">39x</span>
583
+ <span class="cline-any cline-yes">102x</span>
584
+ <span class="cline-any cline-yes">101x</span>
496
585
  <span class="cline-any cline-neutral">&nbsp;</span>
497
586
  <span class="cline-any cline-neutral">&nbsp;</span>
498
587
  <span class="cline-any cline-yes">1x</span>
@@ -531,15 +620,19 @@
531
620
  <span class="cline-any cline-neutral">&nbsp;</span>
532
621
  <span class="cline-any cline-neutral">&nbsp;</span>
533
622
  <span class="cline-any cline-yes">1x</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-yes">1x</span>
626
+ <span class="cline-any cline-yes">1x</span>
534
627
  <span class="cline-any cline-yes">1x</span>
535
628
  <span class="cline-any cline-yes">1x</span>
536
629
  <span class="cline-any cline-yes">1x</span>
537
630
  <span class="cline-any cline-neutral">&nbsp;</span>
538
631
  <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-yes">34x</span>
540
- <span class="cline-any cline-yes">99x</span>
632
+ <span class="cline-any cline-yes">39x</span>
633
+ <span class="cline-any cline-yes">101x</span>
541
634
  <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-yes">99x</span>
635
+ <span class="cline-any cline-yes">101x</span>
543
636
  <span class="cline-any cline-yes">2x</span>
544
637
  <span class="cline-any cline-yes">2x</span>
545
638
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -577,12 +670,12 @@
577
670
  <span class="cline-any cline-neutral">&nbsp;</span>
578
671
  <span class="cline-any cline-neutral">&nbsp;</span>
579
672
  <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-yes">99x</span>
673
+ <span class="cline-any cline-yes">101x</span>
581
674
  <span class="cline-any cline-neutral">&nbsp;</span>
582
675
  <span class="cline-any cline-neutral">&nbsp;</span>
583
- <span class="cline-any cline-yes">34x</span>
676
+ <span class="cline-any cline-yes">39x</span>
584
677
  <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-yes">99x</span>
678
+ <span class="cline-any cline-yes">101x</span>
586
679
  <span class="cline-any cline-yes">1x</span>
587
680
  <span class="cline-any cline-neutral">&nbsp;</span>
588
681
  <span class="cline-any cline-yes">5x</span>
@@ -590,60 +683,62 @@
590
683
  <span class="cline-any cline-neutral">&nbsp;</span>
591
684
  <span class="cline-any cline-neutral">&nbsp;</span>
592
685
  <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-yes">99x</span>
686
+ <span class="cline-any cline-yes">101x</span>
594
687
  <span class="cline-any cline-neutral">&nbsp;</span>
595
688
  <span class="cline-any cline-neutral">&nbsp;</span>
596
689
  <span class="cline-any cline-neutral">&nbsp;</span>
597
690
  <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-yes">99x</span>
599
- <span class="cline-any cline-yes">99x</span>
600
- <span class="cline-any cline-yes">99x</span>
601
- <span class="cline-any cline-yes">99x</span>
691
+ <span class="cline-any cline-yes">101x</span>
692
+ <span class="cline-any cline-yes">101x</span>
693
+ <span class="cline-any cline-yes">101x</span>
694
+ <span class="cline-any cline-yes">101x</span>
602
695
  <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-yes">99x</span>
604
- <span class="cline-any cline-yes">99x</span>
696
+ <span class="cline-any cline-yes">101x</span>
605
697
  <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-yes">99x</span>
607
698
  <span class="cline-any cline-neutral">&nbsp;</span>
608
699
  <span class="cline-any cline-neutral">&nbsp;</span>
609
700
  <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-yes">99x</span>
701
+ <span class="cline-any cline-yes">101x</span>
612
702
  <span class="cline-any cline-yes">4x</span>
613
703
  <span class="cline-any cline-neutral">&nbsp;</span>
614
- <span class="cline-any cline-yes">99x</span>
615
- <span class="cline-any cline-yes">99x</span>
704
+ <span class="cline-any cline-yes">101x</span>
705
+ <span class="cline-any cline-yes">101x</span>
706
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
707
  <span class="cline-any cline-neutral">&nbsp;</span>
617
708
  <span class="cline-any cline-neutral">&nbsp;</span>
618
709
  <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-yes">101x</span>
711
+ <span class="cline-any cline-yes">101x</span>
712
+ <span class="cline-any cline-yes">101x</span>
619
713
  <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-yes">99x</span>
621
714
  <span class="cline-any cline-neutral">&nbsp;</span>
622
715
  <span class="cline-any cline-neutral">&nbsp;</span>
623
716
  <span class="cline-any cline-neutral">&nbsp;</span>
717
+ <span class="cline-any cline-yes">101x</span>
718
+ <span class="cline-any cline-yes">101x</span>
719
+ <span class="cline-any cline-yes">101x</span>
624
720
  <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-yes">99x</span>
626
- <span class="cline-any cline-yes">99x</span>
627
721
  <span class="cline-any cline-neutral">&nbsp;</span>
628
722
  <span class="cline-any cline-neutral">&nbsp;</span>
723
+ <span class="cline-any cline-yes">101x</span>
629
724
  <span class="cline-any cline-neutral">&nbsp;</span>
630
725
  <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-yes">99x</span>
632
- <span class="cline-any cline-yes">99x</span>
633
726
  <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-yes">39x</span>
728
+ <span class="cline-any cline-yes">207x</span>
729
+ <span class="cline-any cline-yes">207x</span>
634
730
  <span class="cline-any cline-neutral">&nbsp;</span>
635
731
  <span class="cline-any cline-neutral">&nbsp;</span>
636
732
  <span class="cline-any cline-neutral">&nbsp;</span>
637
733
  <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-yes">99x</span>
734
+ <span class="cline-any cline-yes">474x</span>
639
735
  <span class="cline-any cline-neutral">&nbsp;</span>
640
736
  <span class="cline-any cline-neutral">&nbsp;</span>
641
737
  <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-yes">99x</span>
643
738
  <span class="cline-any cline-neutral">&nbsp;</span>
644
739
  <span class="cline-any cline-neutral">&nbsp;</span>
645
740
  <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-yes">34x</span>
741
+ <span class="cline-any cline-yes">39x</span>
647
742
  <span class="cline-any cline-no">&nbsp;</span>
648
743
  <span class="cline-any cline-no">&nbsp;</span>
649
744
  <span class="cline-any cline-no">&nbsp;</span>
@@ -652,22 +747,24 @@
652
747
  <span class="cline-any cline-no">&nbsp;</span>
653
748
  <span class="cline-any cline-neutral">&nbsp;</span>
654
749
  <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-yes">34x</span>
750
+ <span class="cline-any cline-yes">39x</span>
656
751
  <span class="cline-any cline-no">&nbsp;</span>
657
752
  <span class="cline-any cline-no">&nbsp;</span>
658
753
  <span class="cline-any cline-neutral">&nbsp;</span>
659
754
  <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-yes">34x</span>
755
+ <span class="cline-any cline-yes">39x</span>
661
756
  <span class="cline-any cline-yes">30x</span>
662
757
  <span class="cline-any cline-yes">30x</span>
663
758
  <span class="cline-any cline-no">&nbsp;</span>
664
759
  <span class="cline-any cline-no">&nbsp;</span>
760
+ <span class="cline-any cline-no">&nbsp;</span>
761
+ <span class="cline-any cline-no">&nbsp;</span>
665
762
  <span class="cline-any cline-neutral">&nbsp;</span>
666
763
  <span class="cline-any cline-yes">30x</span>
667
764
  <span class="cline-any cline-neutral">&nbsp;</span>
668
765
  <span class="cline-any cline-neutral">&nbsp;</span>
669
766
  <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">34x</span>
767
+ <span class="cline-any cline-yes">39x</span>
671
768
  <span class="cline-any cline-yes">1x</span>
672
769
  <span class="cline-any cline-yes">1x</span>
673
770
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -739,15 +836,15 @@
739
836
  <span class="cline-any cline-neutral">&nbsp;</span>
740
837
  <span class="cline-any cline-neutral">&nbsp;</span>
741
838
  <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-yes">34x</span>
839
+ <span class="cline-any cline-yes">39x</span>
743
840
  <span class="cline-any cline-no">&nbsp;</span>
744
841
  <span class="cline-any cline-neutral">&nbsp;</span>
745
842
  <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-yes">34x</span>
843
+ <span class="cline-any cline-yes">39x</span>
747
844
  <span class="cline-any cline-no">&nbsp;</span>
748
845
  <span class="cline-any cline-neutral">&nbsp;</span>
749
846
  <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-yes">34x</span>
847
+ <span class="cline-any cline-yes">39x</span>
751
848
  <span class="cline-any cline-no">&nbsp;</span>
752
849
  <span class="cline-any cline-neutral">&nbsp;</span>
753
850
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -759,9 +856,26 @@
759
856
  <span class="cline-any cline-no">&nbsp;</span>
760
857
  <span class="cline-any cline-neutral">&nbsp;</span>
761
858
  <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-yes">34x</span>
763
- <span class="cline-any cline-yes">99x</span>
764
- <span class="cline-any cline-yes">95x</span>
859
+ <span class="cline-any cline-yes">39x</span>
860
+ <span class="cline-any cline-no">&nbsp;</span>
861
+ <span class="cline-any cline-neutral">&nbsp;</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
+ <span class="cline-any cline-no">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-no">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</span>
868
+ <span class="cline-any cline-no">&nbsp;</span>
869
+ <span class="cline-any cline-no">&nbsp;</span>
870
+ <span class="cline-any cline-no">&nbsp;</span>
871
+ <span class="cline-any cline-neutral">&nbsp;</span>
872
+ <span class="cline-any cline-neutral">&nbsp;</span>
873
+ <span class="cline-any cline-no">&nbsp;</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-neutral">&nbsp;</span>
876
+ <span class="cline-any cline-yes">39x</span>
877
+ <span class="cline-any cline-yes">101x</span>
878
+ <span class="cline-any cline-yes">97x</span>
765
879
  <span class="cline-any cline-neutral">&nbsp;</span>
766
880
  <span class="cline-any cline-yes">4x</span>
767
881
  <span class="cline-any cline-yes">11x</span>
@@ -776,26 +890,54 @@
776
890
  <span class="cline-any cline-yes">4x</span>
777
891
  <span class="cline-any cline-neutral">&nbsp;</span>
778
892
  <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-yes">34x</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../../db")
781
- const csvParser = require("../../../utilities/csvParser")
893
+ <span class="cline-any cline-yes">39x</span>
894
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const csvParser = require("../../../utilities/csvParser")
782
895
  const {
783
896
  getRowParams,
784
897
  generateRowID,
785
898
  InternalTables,
899
+ getTableParams,
900
+ BudibaseInternalDB,
786
901
  } = require("../../../db/utils")
787
- const { isEqual } = require("lodash/fp")
902
+ const { isEqual } = require("lodash")
788
903
  const { AutoFieldSubTypes, FieldTypes } = require("../../../constants")
789
- const { inputProcessing } = require("../../../utilities/rowProcessor")
790
- const { USERS_TABLE_SCHEMA, SwitchableTypes } = require("../../../constants")
904
+ const {
905
+ inputProcessing,
906
+ cleanupAttachments,
907
+ } = require("../../../utilities/rowProcessor")
908
+ const {
909
+ USERS_TABLE_SCHEMA,
910
+ SwitchableTypes,
911
+ CanSwitchTypes,
912
+ } = require("../../../constants")
791
913
  const {
792
914
  isExternalTable,
793
915
  breakExternalTableId,
916
+ isSQL,
794
917
  } = require("../../../integrations/utils")
795
918
  const { getViews, saveView } = require("../view/utils")
796
919
  const viewTemplate = require("../view/viewBuilder")
920
+ const usageQuota = require("../../../utilities/usageQuota")
921
+ const { getAppDB } = require("@budibase/backend-core/context")
922
+ const { cloneDeep } = require("lodash/fp")
923
+ &nbsp;
924
+ exports.clearColumns = <span class="fstat-no" title="function not covered" >as</span>ync (table, columnNames) =&gt; {
925
+ const db = <span class="cstat-no" title="statement not covered" >getAppDB()</span>
926
+ const rows = <span class="cstat-no" title="statement not covered" >await db.allDocs(</span>
927
+ getRowParams(table._id, null, {
928
+ include_docs: true,
929
+ })
930
+ )
931
+ <span class="cstat-no" title="statement not covered" > return db.bulkDocs(</span>
932
+ rows.rows.map(<span class="fstat-no" title="function not covered" >({</span> doc }) =&gt; {
933
+ <span class="cstat-no" title="statement not covered" > columnNames.forEach(<span class="fstat-no" title="function not covered" >co</span>lName =&gt; <span class="cstat-no" title="statement not covered" >delete doc[colName])</span></span>
934
+ <span class="cstat-no" title="statement not covered" > return doc</span>
935
+ })
936
+ )
937
+ }
797
938
  &nbsp;
798
- exports.checkForColumnUpdates = async (db, oldTable, updatedTable) =&gt; {
939
+ exports.checkForColumnUpdates = async (oldTable, updatedTable) =&gt; {
940
+ const db = getAppDB()
799
941
  let updatedRows = []
800
942
  const rename = updatedTable._rename
801
943
  let deletedColumns = []
@@ -812,18 +954,22 @@ exports.checkForColumnUpdates = async (db, oldTable, updatedTable) =&gt; {
812
954
  include_docs: true,
813
955
  })
814
956
  )
815
- updatedRows = rows.rows.map(({ doc }) =&gt; {
957
+ const rawRows = rows.rows.map(({ doc }) =&gt; doc)
958
+ updatedRows = rawRows.map(row =&gt; {
959
+ row = cloneDeep(row)
816
960
  if (rename) {
817
- doc[rename.updated] = doc[rename.old]
818
- delete doc[rename.old]
961
+ row[rename.updated] = row[rename.old]
962
+ delete row[rename.old]
819
963
  } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (deletedColumns.length !== 0) {</span>
820
- <span class="cstat-no" title="statement not covered" > deletedColumns.forEach(<span class="fstat-no" title="function not covered" >co</span>lName =&gt; <span class="cstat-no" title="statement not covered" >delete doc[colName])</span></span>
964
+ <span class="cstat-no" title="statement not covered" > deletedColumns.forEach(<span class="fstat-no" title="function not covered" >co</span>lName =&gt; <span class="cstat-no" title="statement not covered" >delete row[colName])</span></span>
821
965
  }
822
- return doc
966
+ return row
823
967
  })
824
968
  &nbsp;
969
+ // cleanup any attachments from object storage for deleted attachment columns
970
+ await cleanupAttachments(updatedTable, { oldTable, rows: rawRows })
825
971
  // Update views
826
- await exports.checkForViewUpdates(db, updatedTable, rename, deletedColumns)
972
+ await exports.checkForViewUpdates(updatedTable, rename, deletedColumns)
827
973
  delete updatedTable._rename
828
974
  }
829
975
  return { rows: updatedRows, table: updatedTable }
@@ -850,12 +996,12 @@ exports.makeSureTableUpToDate = (table, tableToSave) =&gt; {
850
996
  return tableToSave
851
997
  }
852
998
  &nbsp;
853
- exports.handleDataImport = async (appId, user, table, dataImport) =&gt; {
999
+ exports.handleDataImport = async (user, table, dataImport) =&gt; {
854
1000
  if (!dataImport || !dataImport.csvString) {
855
1001
  return table
856
1002
  }
857
1003
  &nbsp;
858
- const db = new CouchDB(appId)
1004
+ const db = getAppDB()
859
1005
  // Populate the table with rows imported from CSV in a bulk update
860
1006
  const data = await csvParser.transform({
861
1007
  ...dataImport,
@@ -890,14 +1036,18 @@ exports.handleDataImport = async (appId, user, table, dataImport) =&gt; {
890
1036
  finalData.push(row)
891
1037
  }
892
1038
  &nbsp;
1039
+ await usageQuota.update(usageQuota.Properties.ROW, finalData.length, {
1040
+ dryRun: true,
1041
+ })
893
1042
  await db.bulkDocs(finalData)
1043
+ await usageQuota.update(usageQuota.Properties.ROW, finalData.length)
894
1044
  let response = await db.put(table)
895
1045
  table._rev = response._rev
896
1046
  return table
897
1047
  }
898
1048
  &nbsp;
899
- exports.handleSearchIndexes = async (appId, table) =&gt; {
900
- const db = new CouchDB(appId)
1049
+ exports.handleSearchIndexes = async table =&gt; {
1050
+ const db = getAppDB()
901
1051
  // create relevant search indexes
902
1052
  if (table.indexes &amp;&amp; table.indexes.length &gt; 0) {
903
1053
  const currentIndexes = await db.getIndexes()
@@ -954,12 +1104,9 @@ exports.checkStaticTables = table =&gt; {
954
1104
  }
955
1105
  &nbsp;
956
1106
  class TableSaveFunctions {
957
- constructor({ db, ctx, oldTable, dataImport }) {
958
- this.db = db
959
- this.ctx = ctx
960
- if (this.ctx &amp;&amp; this.ctx.user) {
961
- this.appId = this.ctx.appId
962
- }
1107
+ constructor({ user, oldTable, dataImport }) {
1108
+ this.db = getAppDB()
1109
+ this.user = user
963
1110
  this.oldTable = oldTable
964
1111
  this.dataImport = dataImport
965
1112
  // any rows that need updated
@@ -977,24 +1124,15 @@ class TableSaveFunctions {
977
1124
  &nbsp;
978
1125
  // when confirmed valid
979
1126
  async mid(table) {
980
- let response = await exports.checkForColumnUpdates(
981
- this.db,
982
- this.oldTable,
983
- table
984
- )
1127
+ let response = await exports.checkForColumnUpdates(this.oldTable, table)
985
1128
  this.rows = this.rows.concat(response.rows)
986
1129
  return table
987
1130
  }
988
1131
  &nbsp;
989
1132
  // after saving
990
1133
  async after(table) {
991
- table = await exports.handleSearchIndexes(this.appId, table)
992
- table = await exports.handleDataImport(
993
- this.appId,
994
- this.ctx.user,
995
- table,
996
- this.dataImport
997
- )
1134
+ table = await exports.handleSearchIndexes(table)
1135
+ table = await exports.handleDataImport(this.user, table, this.dataImport)
998
1136
  return table
999
1137
  }
1000
1138
  &nbsp;
@@ -1003,8 +1141,22 @@ class TableSaveFunctions {
1003
1141
  }
1004
1142
  }
1005
1143
  &nbsp;
1006
- exports.getAllExternalTables = <span class="fstat-no" title="function not covered" >as</span>ync (appId, datasourceId) =&gt; {
1007
- const db = <span class="cstat-no" title="statement not covered" >new CouchDB(appId)</span>
1144
+ exports.getAllInternalTables = async () =&gt; {
1145
+ const db = getAppDB()
1146
+ const internalTables = await db.allDocs(
1147
+ getTableParams(null, {
1148
+ include_docs: true,
1149
+ })
1150
+ )
1151
+ return internalTables.rows.map(tableDoc =&gt; ({
1152
+ ...tableDoc.doc,
1153
+ type: "internal",
1154
+ sourceId: BudibaseInternalDB._id,
1155
+ }))
1156
+ }
1157
+ &nbsp;
1158
+ exports.getAllExternalTables = <span class="fstat-no" title="function not covered" >as</span>ync datasourceId =&gt; {
1159
+ const db = <span class="cstat-no" title="statement not covered" >getAppDB()</span>
1008
1160
  const datasource = <span class="cstat-no" title="statement not covered" >await db.get(datasourceId)</span>
1009
1161
  <span class="cstat-no" title="statement not covered" > if (!datasource || !datasource.entities) {</span>
1010
1162
  <span class="cstat-no" title="statement not covered" > throw "Datasource is not configured fully."</span>
@@ -1012,23 +1164,25 @@ exports.getAllExternalTables = <span class="fstat-no" title="function not covere
1012
1164
  <span class="cstat-no" title="statement not covered" > return datasource.entities</span>
1013
1165
  }
1014
1166
  &nbsp;
1015
- exports.getExternalTable = <span class="fstat-no" title="function not covered" >as</span>ync (appId, datasourceId, tableName) =&gt; {
1016
- const entities = <span class="cstat-no" title="statement not covered" >await exports.getAllExternalTables(appId, datasourceId)</span>
1167
+ exports.getExternalTable = <span class="fstat-no" title="function not covered" >as</span>ync (datasourceId, tableName) =&gt; {
1168
+ const entities = <span class="cstat-no" title="statement not covered" >await exports.getAllExternalTables(datasourceId)</span>
1017
1169
  <span class="cstat-no" title="statement not covered" > return entities[tableName]</span>
1018
1170
  }
1019
1171
  &nbsp;
1020
- exports.getTable = async (appId, tableId) =&gt; {
1021
- const db = new CouchDB(appId)
1172
+ exports.getTable = async tableId =&gt; {
1173
+ const db = getAppDB()
1022
1174
  <span class="missing-if-branch" title="if path not taken" >I</span>if (isExternalTable(tableId)) {
1023
1175
  let { datasourceId, tableName } = <span class="cstat-no" title="statement not covered" >breakExternalTableId(tableId)</span>
1024
- <span class="cstat-no" title="statement not covered" > return exports.getExternalTable(appId, datasourceId, tableName)</span>
1176
+ const datasource = <span class="cstat-no" title="statement not covered" >await db.get(datasourceId)</span>
1177
+ const table = <span class="cstat-no" title="statement not covered" >await exports.getExternalTable(datasourceId, tableName)</span>
1178
+ <span class="cstat-no" title="statement not covered" > return { ...table, sql: isSQL(datasource) }</span>
1025
1179
  } else {
1026
1180
  return db.get(tableId)
1027
1181
  }
1028
1182
  }
1029
1183
  &nbsp;
1030
- exports.checkForViewUpdates = async (db, table, rename, deletedColumns) =&gt; {
1031
- const views = await getViews(db)
1184
+ exports.checkForViewUpdates = async (table, rename, deletedColumns) =&gt; {
1185
+ const views = await getViews()
1032
1186
  const tableViews = views.filter(<span class="fstat-no" title="function not covered" >vi</span>ew =&gt; <span class="cstat-no" title="statement not covered" >view.meta.tableId === table._id)</span>
1033
1187
  &nbsp;
1034
1188
  // Check each table view to see if impacted by this table action
@@ -1090,7 +1244,7 @@ exports.checkForViewUpdates = async (db, table, rename, deletedColumns) =&gt; {
1090
1244
  // Update view if required
1091
1245
  <span class="cstat-no" title="statement not covered" > if (needsUpdated) {</span>
1092
1246
  const newViewTemplate = <span class="cstat-no" title="statement not covered" >viewTemplate(view.meta)</span>
1093
- <span class="cstat-no" title="statement not covered" > await saveView(db, null, view.name, newViewTemplate)</span>
1247
+ <span class="cstat-no" title="statement not covered" > await saveView(null, view.name, newViewTemplate)</span>
1094
1248
  <span class="cstat-no" title="statement not covered" > if (!newViewTemplate.meta.schema) {</span>
1095
1249
  <span class="cstat-no" title="statement not covered" > newViewTemplate.meta.schema = table.schema</span>
1096
1250
  }
@@ -1119,6 +1273,23 @@ exports.foreignKeyStructure = <span class="fstat-no" title="function not covered
1119
1273
  <span class="cstat-no" title="statement not covered" > return structure</span>
1120
1274
  }
1121
1275
  &nbsp;
1276
+ exports.areSwitchableTypes = <span class="fstat-no" title="function not covered" >(t</span>ype1, type2) =&gt; {
1277
+ <span class="cstat-no" title="statement not covered" > if (</span>
1278
+ SwitchableTypes.indexOf(type1) === -1 &amp;&amp;
1279
+ SwitchableTypes.indexOf(type2) === -1
1280
+ ) {
1281
+ <span class="cstat-no" title="statement not covered" > return false</span>
1282
+ }
1283
+ <span class="cstat-no" title="statement not covered" > for (let option of CanSwitchTypes) {</span>
1284
+ const index1 = <span class="cstat-no" title="statement not covered" >option.indexOf(type1),</span>
1285
+ index2 = <span class="cstat-no" title="statement not covered" >option.indexOf(type2)</span>
1286
+ <span class="cstat-no" title="statement not covered" > if (index1 !== -1 &amp;&amp; index2 !== -1 &amp;&amp; index1 !== index2) {</span>
1287
+ <span class="cstat-no" title="statement not covered" > return true</span>
1288
+ }
1289
+ }
1290
+ <span class="cstat-no" title="statement not covered" > return false</span>
1291
+ }
1292
+ &nbsp;
1122
1293
  exports.hasTypeChanged = (table, oldTable) =&gt; {
1123
1294
  if (!oldTable) {
1124
1295
  return false
@@ -1129,7 +1300,7 @@ exports.hasTypeChanged = (table, oldTable) =&gt; {
1129
1300
  continue
1130
1301
  }
1131
1302
  const newType = table.schema[key].type
1132
- <span class="missing-if-branch" title="if path not taken" >I</span>if (oldType !== newType &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >SwitchableTypes.indexOf(oldType) === -1)</span> {
1303
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (oldType !== newType &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!exports.areSwitchableTypes(oldType, newType))</span> {
1133
1304
  <span class="cstat-no" title="statement not covered" > return true</span>
1134
1305
  }
1135
1306
  }
@@ -1144,7 +1315,7 @@ exports.TableSaveFunctions = TableSaveFunctions
1144
1315
  <div class='footer quiet pad2 space-top1 center small'>
1145
1316
  Code coverage generated by
1146
1317
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1147
- at Mon Jan 24 2022 15:48:00 GMT+0000 (Coordinated Universal Time)
1318
+ at Fri Feb 04 2022 10:32:19 GMT+0000 (Coordinated Universal Time)
1148
1319
  </div>
1149
1320
  </div>
1150
1321
  <script src="../../../prettify.js"></script>