@budibase/server 2.0.39 → 2.0.40-alpha.0

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 (295) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/__mocks__/node-fetch.ts +12 -2
  3. package/builder/assets/backups-default.8c011f1b.png +0 -0
  4. package/builder/assets/{index.e0ddd30b.css → index.442de33f.css} +2 -2
  5. package/builder/assets/{index.b20dee52.js → index.d7b4247d.js} +340 -332
  6. package/builder/index.html +2 -2
  7. package/coverage/clover.xml +1125 -1250
  8. package/coverage/coverage-final.json +73 -77
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
  10. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +79 -67
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/dev.js.html +21 -21
  14. package/coverage/lcov-report/api/controllers/index.html +17 -47
  15. package/coverage/lcov-report/api/controllers/integration.js.html +4 -4
  16. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/metadata.js.html +9 -9
  18. package/coverage/lcov-report/api/controllers/migrations.js.html +4 -4
  19. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/validation.js.html +4 -4
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +13 -13
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +15 -15
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +13 -13
  30. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +12 -9
  32. package/coverage/lcov-report/api/controllers/table/external.js.html +10 -10
  33. package/coverage/lcov-report/api/controllers/table/index.html +16 -16
  34. package/coverage/lcov-report/api/controllers/table/index.js.html +5 -5
  35. package/coverage/lcov-report/api/controllers/templates.js.html +6 -6
  36. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.js.html +3 -3
  40. package/coverage/lcov-report/api/controllers/view/utils.js.html +13 -13
  41. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +8 -8
  42. package/coverage/lcov-report/api/index.html +1 -1
  43. package/coverage/lcov-report/api/index.js.html +30 -30
  44. package/coverage/lcov-report/api/routes/analytics.js.html +7 -7
  45. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
  46. package/coverage/lcov-report/api/routes/automation.js.html +11 -11
  47. package/coverage/lcov-report/api/routes/cloud.js.html +8 -8
  48. package/coverage/lcov-report/api/routes/component.js.html +8 -8
  49. package/coverage/lcov-report/api/routes/datasource.js.html +9 -9
  50. package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
  51. package/coverage/lcov-report/api/routes/dev.js.html +13 -13
  52. package/coverage/lcov-report/api/routes/index.html +5 -35
  53. package/coverage/lcov-report/api/routes/integration.js.html +8 -8
  54. package/coverage/lcov-report/api/routes/layout.js.html +8 -8
  55. package/coverage/lcov-report/api/routes/metadata.js.html +9 -9
  56. package/coverage/lcov-report/api/routes/migrations.js.html +7 -7
  57. package/coverage/lcov-report/api/routes/permission.js.html +9 -9
  58. package/coverage/lcov-report/api/routes/query.js.html +10 -10
  59. package/coverage/lcov-report/api/routes/role.js.html +9 -9
  60. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  61. package/coverage/lcov-report/api/routes/screen.js.html +9 -9
  62. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/table.js.html +10 -10
  64. package/coverage/lcov-report/api/routes/templates.js.html +8 -8
  65. package/coverage/lcov-report/api/routes/user.js.html +8 -8
  66. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  67. package/coverage/lcov-report/api/routes/utils/validators.js.html +45 -45
  68. package/coverage/lcov-report/api/routes/view.js.html +10 -10
  69. package/coverage/lcov-report/automations/actions.js.html +1 -1
  70. package/coverage/lcov-report/automations/automationUtils.js.html +6 -6
  71. package/coverage/lcov-report/automations/bullboard.js.html +24 -84
  72. package/coverage/lcov-report/automations/index.html +21 -21
  73. package/coverage/lcov-report/automations/index.js.html +9 -9
  74. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  75. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  76. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  77. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  78. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/index.html +15 -15
  81. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/updateRow.js.html +3 -3
  89. package/coverage/lcov-report/automations/steps/utils.js.html +10 -10
  90. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  91. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  92. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  93. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  94. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  95. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggers.js.html +49 -49
  100. package/coverage/lcov-report/constants/index.html +5 -5
  101. package/coverage/lcov-report/constants/index.js.html +10 -28
  102. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  103. package/coverage/lcov-report/constants/screens.js.html +1 -1
  104. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  105. package/coverage/lcov-report/db/index.html +19 -19
  106. package/coverage/lcov-report/db/index.js.html +1 -1
  107. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +17 -17
  108. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  109. package/coverage/lcov-report/db/linkedRows/index.js.html +28 -28
  110. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +15 -15
  111. package/coverage/lcov-report/db/newid.js.html +2 -2
  112. package/coverage/lcov-report/db/utils.js.html +37 -316
  113. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  114. package/coverage/lcov-report/events/index.html +1 -1
  115. package/coverage/lcov-report/events/index.js.html +3 -3
  116. package/coverage/lcov-report/events/utils.js.html +9 -9
  117. package/coverage/lcov-report/index.html +88 -88
  118. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  119. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  120. package/coverage/lcov-report/middleware/appInfo.js.html +5 -5
  121. package/coverage/lcov-report/middleware/builder.js.html +19 -19
  122. package/coverage/lcov-report/middleware/currentapp.js.html +49 -49
  123. package/coverage/lcov-report/middleware/index.html +1 -1
  124. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  125. package/coverage/lcov-report/middleware/publicApi.js.html +5 -5
  126. package/coverage/lcov-report/middleware/resourceId.js.html +28 -28
  127. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  128. package/coverage/lcov-report/middleware/utils.js.html +4 -4
  129. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  130. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  131. package/coverage/lcov-report/utilities/csvParser.js.html +15 -12
  132. package/coverage/lcov-report/utilities/global.js.html +31 -31
  133. package/coverage/lcov-report/utilities/index.html +28 -28
  134. package/coverage/lcov-report/utilities/index.js.html +8 -8
  135. package/coverage/lcov-report/utilities/plugins.js.html +1 -1
  136. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +52 -52
  137. package/coverage/lcov-report/utilities/queue/index.html +21 -21
  138. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  139. package/coverage/lcov-report/utilities/routing/index.js.html +6 -6
  140. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  141. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +72 -57
  142. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +15 -15
  143. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  144. package/coverage/lcov-report/utilities/security.js.html +2 -2
  145. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  146. package/coverage/lcov-report/utilities/usageQuota/index.html +14 -14
  147. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +23 -11
  148. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  149. package/coverage/lcov-report/utilities/users.js.html +1 -1
  150. package/coverage/lcov-report/utilities/workerRequests.js.html +46 -46
  151. package/coverage/lcov.info +1691 -1899
  152. package/dist/api/controllers/application.js +4 -7
  153. package/dist/api/controllers/backup.js +19 -13
  154. package/dist/api/controllers/cloud.js +38 -35
  155. package/dist/api/controllers/deploy/index.js +11 -2
  156. package/dist/api/controllers/dev.js +1 -1
  157. package/dist/api/controllers/query/index.js +7 -2
  158. package/dist/api/controllers/row/index.js +40 -66
  159. package/dist/api/controllers/row/internal.js +1 -1
  160. package/dist/api/controllers/static/index.js +3 -2
  161. package/dist/api/controllers/static/templates/BudibaseApp.svelte +11 -0
  162. package/dist/api/controllers/static/templates/preview.hbs +10 -0
  163. package/dist/api/controllers/table/bulkFormula.js +4 -3
  164. package/dist/api/controllers/table/external.js +5 -4
  165. package/dist/api/controllers/table/index.js +4 -4
  166. package/dist/api/controllers/table/internal.js +10 -3
  167. package/dist/api/controllers/table/utils.js +7 -49
  168. package/dist/api/controllers/view/index.js +2 -2
  169. package/dist/api/controllers/webhook.js +88 -89
  170. package/dist/api/routes/backup.js +34 -7
  171. package/dist/api/routes/index.js +9 -4
  172. package/dist/api/routes/utils/validators.js +2 -2
  173. package/dist/api/routes/webhook.js +39 -11
  174. package/dist/app.js +2 -68
  175. package/dist/automations/automationUtils.js +2 -2
  176. package/dist/automations/bullboard.js +12 -35
  177. package/dist/automations/index.js +4 -4
  178. package/dist/automations/steps/updateRow.js +2 -2
  179. package/dist/automations/triggers.js +6 -6
  180. package/dist/automations/utils.js +23 -49
  181. package/dist/constants/index.js +4 -8
  182. package/dist/db/utils.js +10 -75
  183. package/dist/index.js +1 -0
  184. package/dist/integrations/arangodb.js +2 -0
  185. package/dist/integrations/base/sqlTable.js +1 -0
  186. package/dist/integrations/mongodb.js +300 -11
  187. package/dist/integrations/rest.js +38 -5
  188. package/dist/migrations/functions/backfill/app/tables.js +5 -8
  189. package/dist/migrations/functions/{quotas1.js → syncQuotas.js} +3 -7
  190. package/dist/migrations/functions/usageQuotas/syncApps.js +0 -1
  191. package/dist/migrations/functions/{pluginCount.js → usageQuotas/syncPlugins.js} +1 -3
  192. package/dist/migrations/functions/usageQuotas/syncRows.js +9 -5
  193. package/dist/migrations/index.js +10 -38
  194. package/dist/package.json +14 -14
  195. package/dist/sdk/app/automations/index.js +29 -0
  196. package/dist/sdk/app/automations/webhook.js +54 -0
  197. package/dist/sdk/app/backups/constants.js +5 -0
  198. package/dist/sdk/app/backups/exports.js +172 -0
  199. package/dist/sdk/app/backups/imports.js +190 -0
  200. package/dist/sdk/app/backups/index.js +29 -0
  201. package/dist/sdk/app/backups/statistics.js +73 -0
  202. package/dist/sdk/app/tables/index.js +61 -0
  203. package/dist/sdk/index.js +17 -0
  204. package/dist/startup.js +152 -0
  205. package/dist/tests/utilities/TestConfiguration.js +12 -2
  206. package/dist/threads/automation.js +12 -17
  207. package/dist/tsconfig.build.tsbuildinfo +1 -1
  208. package/dist/utilities/csvParser.js +1 -0
  209. package/dist/utilities/fileSystem/index.js +3 -95
  210. package/dist/utilities/fileSystem/utilities.js +2 -1
  211. package/dist/utilities/rowProcessor/index.js +5 -0
  212. package/dist/utilities/usageQuota/rows.js +6 -4
  213. package/package.json +15 -15
  214. package/specs/openapi.json +3 -0
  215. package/specs/openapi.yaml +3 -0
  216. package/src/api/controllers/application.ts +5 -12
  217. package/src/api/controllers/{backup.js → backup.ts} +7 -7
  218. package/src/api/controllers/cloud.js +44 -40
  219. package/src/api/controllers/deploy/index.ts +20 -8
  220. package/src/api/controllers/dev.js +1 -1
  221. package/src/api/controllers/query/index.ts +8 -2
  222. package/src/api/controllers/row/index.ts +50 -65
  223. package/src/api/controllers/row/internal.js +1 -1
  224. package/src/api/controllers/static/index.ts +4 -2
  225. package/src/api/controllers/static/templates/BudibaseApp.svelte +11 -0
  226. package/src/api/controllers/static/templates/preview.hbs +10 -0
  227. package/src/api/controllers/table/bulkFormula.js +4 -3
  228. package/src/api/controllers/table/external.js +4 -4
  229. package/src/api/controllers/table/index.js +4 -4
  230. package/src/api/controllers/table/internal.ts +8 -9
  231. package/src/api/controllers/table/utils.ts +4 -53
  232. package/src/api/controllers/view/index.js +2 -2
  233. package/src/api/controllers/{webhook.js → webhook.ts} +33 -48
  234. package/src/api/routes/backup.ts +10 -0
  235. package/src/api/routes/index.ts +11 -5
  236. package/src/api/routes/tests/backup.spec.js +1 -1
  237. package/src/api/routes/tests/{deployment.spec.js → deployment.spec.ts} +4 -4
  238. package/src/api/routes/tests/row.spec.js +22 -27
  239. package/src/api/routes/utils/validators.js +2 -2
  240. package/src/api/routes/{webhook.js → webhook.ts} +7 -6
  241. package/src/app.ts +3 -91
  242. package/src/automations/automationUtils.js +2 -2
  243. package/src/automations/bullboard.js +14 -34
  244. package/src/automations/index.js +4 -4
  245. package/src/automations/steps/updateRow.js +2 -2
  246. package/src/automations/tests/automation.spec.js +1 -6
  247. package/src/automations/triggers.js +6 -6
  248. package/src/automations/utils.ts +30 -32
  249. package/src/constants/index.js +4 -10
  250. package/src/db/utils.js +17 -110
  251. package/src/definitions/automations.ts +1 -18
  252. package/src/definitions/datasource.ts +1 -0
  253. package/src/index.ts +1 -0
  254. package/src/integrations/arangodb.ts +2 -0
  255. package/src/integrations/base/sqlTable.ts +1 -0
  256. package/src/integrations/mongodb.ts +290 -27
  257. package/src/integrations/rest.ts +17 -5
  258. package/src/integrations/tests/mongo.spec.ts +19 -19
  259. package/src/integrations/tests/rest.spec.ts +38 -22
  260. package/src/migrations/functions/backfill/app/tables.ts +7 -13
  261. package/src/migrations/functions/backfill/global.ts +1 -1
  262. package/src/migrations/functions/{quotas1.ts → syncQuotas.ts} +3 -8
  263. package/src/migrations/functions/tests/{quotas1.spec.js → syncQuotas.spec.js} +6 -5
  264. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +6 -4
  265. package/src/migrations/functions/usageQuotas/syncApps.ts +0 -1
  266. package/src/migrations/functions/usageQuotas/syncPlugins.ts +10 -0
  267. package/src/migrations/functions/usageQuotas/syncRows.ts +15 -6
  268. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +9 -1
  269. package/src/migrations/index.ts +21 -45
  270. package/src/migrations/tests/index.spec.ts +0 -1
  271. package/src/sdk/app/automations/index.ts +5 -0
  272. package/src/sdk/app/automations/webhook.ts +43 -0
  273. package/src/sdk/app/backups/constants.ts +2 -0
  274. package/src/sdk/app/backups/exports.ts +171 -0
  275. package/src/sdk/app/backups/imports.ts +206 -0
  276. package/src/sdk/app/backups/index.ts +9 -0
  277. package/src/sdk/app/backups/statistics.ts +78 -0
  278. package/src/sdk/app/tables/index.ts +61 -0
  279. package/src/sdk/index.ts +15 -0
  280. package/src/startup.ts +138 -0
  281. package/src/tests/utilities/TestConfiguration.js +12 -2
  282. package/src/threads/automation.ts +20 -27
  283. package/src/utilities/csvParser.js +1 -0
  284. package/src/utilities/fileSystem/index.js +2 -119
  285. package/src/utilities/fileSystem/utilities.js +2 -0
  286. package/src/utilities/rowProcessor/index.js +5 -0
  287. package/src/utilities/usageQuota/rows.js +7 -3
  288. package/coverage/lcov-report/api/controllers/backup.js.html +0 -142
  289. package/coverage/lcov-report/api/controllers/webhook.js.html +0 -424
  290. package/coverage/lcov-report/api/routes/backup.js.html +0 -115
  291. package/coverage/lcov-report/api/routes/webhook.js.html +0 -163
  292. package/dist/automations/listeners.js +0 -102
  293. package/src/api/routes/backup.js +0 -10
  294. package/src/automations/listeners.ts +0 -78
  295. package/src/migrations/functions/pluginCount.ts +0 -12
@@ -117,10 +117,10 @@
117
117
  <a name='L52'></a><a href='#L52'>52</a>
118
118
  <a name='L53'></a><a href='#L53'>53</a>
119
119
  <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">28x</span>
121
- <span class="cline-any cline-yes">28x</span>
120
+ <a name='L55'></a><a href='#L55'>55</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">44x</span>
121
+ <span class="cline-any cline-yes">44x</span>
122
122
  <span class="cline-any cline-neutral">&nbsp;</span>
123
- <span class="cline-any cline-yes">28x</span>
123
+ <span class="cline-any cline-yes">44x</span>
124
124
  <span class="cline-any cline-neutral">&nbsp;</span>
125
125
  <span class="cline-any cline-neutral">&nbsp;</span>
126
126
  <span class="cline-any cline-yes">2x</span>
@@ -141,7 +141,7 @@
141
141
  <span class="cline-any cline-yes">1x</span>
142
142
  <span class="cline-any cline-neutral">&nbsp;</span>
143
143
  <span class="cline-any cline-neutral">&nbsp;</span>
144
- <span class="cline-any cline-yes">28x</span>
144
+ <span class="cline-any cline-yes">44x</span>
145
145
  <span class="cline-any cline-yes">1x</span>
146
146
  <span class="cline-any cline-yes">1x</span>
147
147
  <span class="cline-any cline-yes">1x</span>
@@ -151,7 +151,7 @@
151
151
  <span class="cline-any cline-neutral">&nbsp;</span>
152
152
  <span class="cline-any cline-neutral">&nbsp;</span>
153
153
  <span class="cline-any cline-neutral">&nbsp;</span>
154
- <span class="cline-any cline-yes">28x</span>
154
+ <span class="cline-any cline-yes">44x</span>
155
155
  <span class="cline-any cline-yes">1x</span>
156
156
  <span class="cline-any cline-yes">1x</span>
157
157
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -232,7 +232,7 @@ exports.update = async function (ctx) {
232
232
  <div class='footer quiet pad2 space-top1 center small'>
233
233
  Code coverage generated by
234
234
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
235
- at Mon Oct 31 2022 11:02:40 GMT+0000 (Coordinated Universal Time)
235
+ at Mon Oct 31 2022 14:00:24 GMT+0000 (Coordinated Universal Time)
236
236
  </div>
237
237
  <script src="../../prettify.js"></script>
238
238
  <script>
@@ -925,7 +925,7 @@ exports.test = async function (ctx) {
925
925
  <div class='footer quiet pad2 space-top1 center small'>
926
926
  Code coverage generated by
927
927
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
928
- at Mon Oct 31 2022 11:02:40 GMT+0000 (Coordinated Universal Time)
928
+ at Mon Oct 31 2022 14:00:24 GMT+0000 (Coordinated Universal Time)
929
929
  </div>
930
930
  <script src="../../prettify.js"></script>
931
931
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">18.18% </span>
26
+ <span class="strong">21.42% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/55</span>
28
+ <span class='fraction'>12/56</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
33
  <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/23</span>
35
+ <span class='fraction'>0/25</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/8</span>
42
+ <span class='fraction'>0/10</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">18.51% </span>
47
+ <span class="strong">21.81% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/54</span>
49
+ <span class='fraction'>12/55</span>
50
50
  </div>
51
51
 
52
52
 
@@ -173,20 +173,27 @@
173
173
  <a name='L108'></a><a href='#L108'>108</a>
174
174
  <a name='L109'></a><a href='#L109'>109</a>
175
175
  <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">28x</span>
177
- <span class="cline-any cline-yes">28x</span>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">44x</span>
181
+ <span class="cline-any cline-yes">44x</span>
182
+ <span class="cline-any cline-yes">44x</span>
183
+ <span class="cline-any cline-yes">44x</span>
184
+ <span class="cline-any cline-yes">44x</span>
185
+ <span class="cline-any cline-yes">44x</span>
186
+ <span class="cline-any cline-yes">44x</span>
187
+ <span class="cline-any cline-yes">44x</span>
188
+ <span class="cline-any cline-yes">44x</span>
178
189
  <span class="cline-any cline-neutral">&nbsp;</span>
179
190
  <span class="cline-any cline-neutral">&nbsp;</span>
191
+ <span class="cline-any cline-no">&nbsp;</span>
192
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
193
  <span class="cline-any cline-neutral">&nbsp;</span>
181
194
  <span class="cline-any cline-neutral">&nbsp;</span>
182
- <span class="cline-any cline-yes">28x</span>
183
- <span class="cline-any cline-yes">28x</span>
184
- <span class="cline-any cline-yes">28x</span>
185
- <span class="cline-any cline-yes">28x</span>
186
- <span class="cline-any cline-yes">28x</span>
187
195
  <span class="cline-any cline-neutral">&nbsp;</span>
188
196
  <span class="cline-any cline-neutral">&nbsp;</span>
189
- <span class="cline-any cline-no">&nbsp;</span>
190
197
  <span class="cline-any cline-neutral">&nbsp;</span>
191
198
  <span class="cline-any cline-neutral">&nbsp;</span>
192
199
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -197,25 +204,19 @@
197
204
  <span class="cline-any cline-no">&nbsp;</span>
198
205
  <span class="cline-any cline-neutral">&nbsp;</span>
199
206
  <span class="cline-any cline-neutral">&nbsp;</span>
200
- <span class="cline-any cline-yes">28x</span>
201
- <span class="cline-any cline-no">&nbsp;</span>
202
- <span class="cline-any cline-no">&nbsp;</span>
203
207
  <span class="cline-any cline-neutral">&nbsp;</span>
204
208
  <span class="cline-any cline-no">&nbsp;</span>
205
- <span class="cline-any cline-no">&nbsp;</span>
206
- <span class="cline-any cline-no">&nbsp;</span>
207
209
  <span class="cline-any cline-neutral">&nbsp;</span>
208
- <span class="cline-any cline-no">&nbsp;</span>
209
210
  <span class="cline-any cline-neutral">&nbsp;</span>
210
211
  <span class="cline-any cline-neutral">&nbsp;</span>
211
- <span class="cline-any cline-no">&nbsp;</span>
212
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
213
  <span class="cline-any cline-no">&nbsp;</span>
213
214
  <span class="cline-any cline-neutral">&nbsp;</span>
214
215
  <span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-yes">44x</span>
215
217
  <span class="cline-any cline-no">&nbsp;</span>
216
218
  <span class="cline-any cline-no">&nbsp;</span>
217
219
  <span class="cline-any cline-neutral">&nbsp;</span>
218
- <span class="cline-any cline-neutral">&nbsp;</span>
219
220
  <span class="cline-any cline-no">&nbsp;</span>
220
221
  <span class="cline-any cline-no">&nbsp;</span>
221
222
  <span class="cline-any cline-no">&nbsp;</span>
@@ -223,10 +224,14 @@
223
224
  <span class="cline-any cline-neutral">&nbsp;</span>
224
225
  <span class="cline-any cline-neutral">&nbsp;</span>
225
226
  <span class="cline-any cline-no">&nbsp;</span>
227
+ <span class="cline-any cline-no">&nbsp;</span>
228
+ <span class="cline-any cline-no">&nbsp;</span>
229
+ <span class="cline-any cline-no">&nbsp;</span>
226
230
  <span class="cline-any cline-neutral">&nbsp;</span>
227
231
  <span class="cline-any cline-neutral">&nbsp;</span>
228
232
  <span class="cline-any cline-neutral">&nbsp;</span>
229
- <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-no">&nbsp;</span>
234
+ <span class="cline-any cline-no">&nbsp;</span>
230
235
  <span class="cline-any cline-no">&nbsp;</span>
231
236
  <span class="cline-any cline-neutral">&nbsp;</span>
232
237
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -238,13 +243,13 @@
238
243
  <span class="cline-any cline-no">&nbsp;</span>
239
244
  <span class="cline-any cline-neutral">&nbsp;</span>
240
245
  <span class="cline-any cline-neutral">&nbsp;</span>
241
- <span class="cline-any cline-yes">28x</span>
246
+ <span class="cline-any cline-yes">44x</span>
242
247
  <span class="cline-any cline-no">&nbsp;</span>
243
248
  <span class="cline-any cline-neutral">&nbsp;</span>
244
249
  <span class="cline-any cline-neutral">&nbsp;</span>
245
250
  <span class="cline-any cline-neutral">&nbsp;</span>
246
251
  <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-yes">28x</span>
252
+ <span class="cline-any cline-yes">44x</span>
248
253
  <span class="cline-any cline-no">&nbsp;</span>
249
254
  <span class="cline-any cline-no">&nbsp;</span>
250
255
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -257,10 +262,13 @@
257
262
  <span class="cline-any cline-neutral">&nbsp;</span>
258
263
  <span class="cline-any cline-no">&nbsp;</span>
259
264
  <span class="cline-any cline-no">&nbsp;</span>
265
+ <span class="cline-any cline-neutral">&nbsp;</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
268
  <span class="cline-any cline-no">&nbsp;</span>
261
269
  <span class="cline-any cline-no">&nbsp;</span>
262
- <span class="cline-any cline-neutral">&nbsp;</span>
263
270
  <span class="cline-any cline-no">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
272
  <span class="cline-any cline-no">&nbsp;</span>
265
273
  <span class="cline-any cline-neutral">&nbsp;</span>
266
274
  <span class="cline-any cline-no">&nbsp;</span>
@@ -285,59 +293,60 @@
285
293
  <span class="cline-any cline-neutral">&nbsp;</span>
286
294
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const env = require("../../environment")
287
295
  const { getAllApps, getGlobalDBName } = require("@budibase/backend-core/db")
288
- const {
289
- exportDB,
290
- sendTempFile,
291
- readFileSync,
292
- } = require("../../utilities/fileSystem")
293
- const { stringToReadStream } = require("../../utilities")
294
296
  const { getGlobalDB } = require("@budibase/backend-core/tenancy")
295
- const { create } = require("./application")
297
+ const { streamFile } = require("../../utilities/fileSystem")
298
+ const { stringToReadStream } = require("../../utilities")
296
299
  const { getDocParams, DocumentType, isDevAppID } = require("../../db/utils")
300
+ const { create } = require("./application")
301
+ const { join } = require("path")
302
+ const sdk = require("../../sdk")
297
303
  &nbsp;
298
- async function <span class="fstat-no" title="function not covered" >createApp(</span>appName, appImport) {
304
+ async function <span class="fstat-no" title="function not covered" >createApp(</span>appName, appDirectory) {
299
305
  const ctx = <span class="cstat-no" title="statement not covered" >{</span>
300
306
  request: {
301
307
  body: {
302
- templateString: appImport,
308
+ useTemplate: true,
303
309
  name: appName,
304
310
  },
311
+ files: {
312
+ templateFile: {
313
+ path: appDirectory,
314
+ },
315
+ },
305
316
  },
306
317
  }
307
318
  <span class="cstat-no" title="statement not covered" > return create(ctx)</span>
308
319
  }
309
320
  &nbsp;
321
+ async function <span class="fstat-no" title="function not covered" >getAllDocType(</span>db, docType) {
322
+ const response = <span class="cstat-no" title="statement not covered" >await db.allDocs(</span>
323
+ getDocParams(docType, null, {
324
+ include_docs: true,
325
+ })
326
+ )
327
+ <span class="cstat-no" title="statement not covered" > return response.rows.map(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; <span class="cstat-no" title="statement not covered" >row.doc)</span></span>
328
+ }
329
+ &nbsp;
310
330
  exports.exportApps = <span class="fstat-no" title="function not covered" >as</span>ync ctx =&gt; {
311
331
  <span class="cstat-no" title="statement not covered" > if (env.SELF_HOSTED || !env.MULTI_TENANCY) {</span>
312
332
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Exporting only allowed in multi-tenant cloud environments.")</span>
313
333
  }
314
334
  const apps = <span class="cstat-no" title="statement not covered" >await getAllApps({ all: true })</span>
315
- const globalDBString = <span class="cstat-no" title="statement not covered" >await exportDB(getGlobalDBName(), {</span>
335
+ const globalDBString = <span class="cstat-no" title="statement not covered" >await sdk.backups.exportDB(getGlobalDBName(), {</span>
316
336
  filter: <span class="fstat-no" title="function not covered" >do</span>c =&gt; <span class="cstat-no" title="statement not covered" >!doc._id.startsWith(DocumentType.USER),</span>
317
337
  })
318
- let allDBs = <span class="cstat-no" title="statement not covered" >{</span>
319
- global: globalDBString,
320
- }
321
- <span class="cstat-no" title="statement not covered" > for (let app of apps) {</span>
322
- const appId = <span class="cstat-no" title="statement not covered" >app.appId || app._id</span>
323
- // only export the dev apps as they will be the latest, the user can republish the apps
324
- // in their self hosted environment
325
- <span class="cstat-no" title="statement not covered" > if (isDevAppID(appId)) {</span>
326
- <span class="cstat-no" title="statement not covered" > allDBs[app.name] = await exportDB(appId)</span>
327
- }
328
- }
329
- const filename = <span class="cstat-no" title="statement not covered" >`cloud-export-${new Date().getTime()}.txt`</span>
330
- <span class="cstat-no" title="statement not covered" > ctx.attachment(filename)</span>
331
- <span class="cstat-no" title="statement not covered" > ctx.body = sendTempFile(JSON.stringify(allDBs))</span>
332
- }
333
- &nbsp;
334
- async function <span class="fstat-no" title="function not covered" >getAllDocType(</span>db, docType) {
335
- const response = <span class="cstat-no" title="statement not covered" >await db.allDocs(</span>
336
- getDocParams(docType, null, {
337
- include_docs: true,
338
- })
338
+ // only export the dev apps as they will be the latest, the user can republish the apps
339
+ // in their self-hosted environment
340
+ let appMetadata = <span class="cstat-no" title="statement not covered" >apps</span>
341
+ .filter(<span class="fstat-no" title="function not covered" >ap</span>p =&gt; <span class="cstat-no" title="statement not covered" >isDevAppID(app.appId || app._id))</span>
342
+ .map(<span class="fstat-no" title="function not covered" >ap</span>p =&gt; (<span class="cstat-no" title="statement not covered" >{ appId: app.appId || app._id, name: app.name })</span>)
343
+ const tmpPath = <span class="cstat-no" title="statement not covered" >await sdk.backups.exportMultipleApps(</span>
344
+ appMetadata,
345
+ globalDBString
339
346
  )
340
- <span class="cstat-no" title="statement not covered" > return response.rows.map(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; <span class="cstat-no" title="statement not covered" >row.doc)</span></span>
347
+ const filename = <span class="cstat-no" title="statement not covered" >`cloud-export-${new Date().getTime()}.tar.gz`</span>
348
+ <span class="cstat-no" title="statement not covered" > ctx.attachment(filename)</span>
349
+ <span class="cstat-no" title="statement not covered" > ctx.body = streamFile(tmpPath)</span>
341
350
  }
342
351
  &nbsp;
343
352
  async function <span class="fstat-no" title="function not covered" >hasBeenImported(</span>) {
@@ -365,17 +374,20 @@ exports.importApps = <span class="fstat-no" title="function not covered" >as</sp
365
374
  "Import file is required and environment must be fresh to import apps."
366
375
  )
367
376
  }
368
- const importFile = <span class="cstat-no" title="statement not covered" >ctx.request.files.importFile</span>
369
- const importString = <span class="cstat-no" title="statement not covered" >readFileSync(importFile.path)</span>
370
- const dbs = <span class="cstat-no" title="statement not covered" >JSON.parse(importString)</span>
371
- const globalDbImport = <span class="cstat-no" title="statement not covered" >dbs.global</span>
372
- // remove from the list of apps
373
- <span class="cstat-no" title="statement not covered" > delete dbs.global</span>
377
+ <span class="cstat-no" title="statement not covered" > if (ctx.request.files.importFile.type !== "application/gzip") {</span>
378
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Import file must be a gzipped tarball.")</span>
379
+ }
380
+ &nbsp;
381
+ // initially get all the app databases out of the tarball
382
+ const tmpPath = <span class="cstat-no" title="statement not covered" >sdk.backups.untarFile(ctx.request.files.importFile)</span>
383
+ const globalDbImport = <span class="cstat-no" title="statement not covered" >sdk.backups.getGlobalDBFile(tmpPath)</span>
384
+ const appNames = <span class="cstat-no" title="statement not covered" >sdk.backups.getListOfAppsInMulti(tmpPath)</span>
385
+ &nbsp;
374
386
  const globalDb = <span class="cstat-no" title="statement not covered" >getGlobalDB()</span>
375
387
  // load the global db first
376
388
  <span class="cstat-no" title="statement not covered" > await globalDb.load(stringToReadStream(globalDbImport))</span>
377
- <span class="cstat-no" title="statement not covered" > for (let [appName, appImport] of Object.entries(dbs)) {</span>
378
- <span class="cstat-no" title="statement not covered" > await createApp(appName, appImport)</span>
389
+ <span class="cstat-no" title="statement not covered" > for (let appName of appNames) {</span>
390
+ <span class="cstat-no" title="statement not covered" > await createApp(appName, join(tmpPath, appName))</span>
379
391
  }
380
392
  &nbsp;
381
393
  // if there are any users make sure to remove them
@@ -400,7 +412,7 @@ exports.importApps = <span class="fstat-no" title="function not covered" >as</sp
400
412
  <div class='footer quiet pad2 space-top1 center small'>
401
413
  Code coverage generated by
402
414
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
403
- at Mon Oct 31 2022 11:02:40 GMT+0000 (Coordinated Universal Time)
415
+ at Mon Oct 31 2022 14:00:24 GMT+0000 (Coordinated Universal Time)
404
416
  </div>
405
417
  <script src="../../prettify.js"></script>
406
418
  <script>
@@ -919,7 +919,7 @@ const buildSchemaHelper = <span class="fstat-no" title="function not covered" >a
919
919
  <div class='footer quiet pad2 space-top1 center small'>
920
920
  Code coverage generated by
921
921
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
922
- at Mon Oct 31 2022 11:02:40 GMT+0000 (Coordinated Universal Time)
922
+ at Mon Oct 31 2022 14:00:24 GMT+0000 (Coordinated Universal Time)
923
923
  </div>
924
924
  <script src="../../prettify.js"></script>
925
925
  <script>
@@ -198,16 +198,16 @@
198
198
  <a name='L133'></a><a href='#L133'>133</a>
199
199
  <a name='L134'></a><a href='#L134'>134</a>
200
200
  <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">28x</span>
202
- <span class="cline-any cline-yes">28x</span>
203
- <span class="cline-any cline-yes">28x</span>
204
- <span class="cline-any cline-yes">28x</span>
205
- <span class="cline-any cline-yes">28x</span>
206
- <span class="cline-any cline-yes">28x</span>
207
- <span class="cline-any cline-yes">28x</span>
208
- <span class="cline-any cline-yes">28x</span>
209
- <span class="cline-any cline-yes">28x</span>
210
- <span class="cline-any cline-yes">28x</span>
201
+ <a name='L136'></a><a href='#L136'>136</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">44x</span>
202
+ <span class="cline-any cline-yes">44x</span>
203
+ <span class="cline-any cline-yes">44x</span>
204
+ <span class="cline-any cline-yes">44x</span>
205
+ <span class="cline-any cline-yes">44x</span>
206
+ <span class="cline-any cline-yes">44x</span>
207
+ <span class="cline-any cline-yes">44x</span>
208
+ <span class="cline-any cline-yes">44x</span>
209
+ <span class="cline-any cline-yes">44x</span>
210
+ <span class="cline-any cline-yes">44x</span>
211
211
  <span class="cline-any cline-neutral">&nbsp;</span>
212
212
  <span class="cline-any cline-neutral">&nbsp;</span>
213
213
  <span class="cline-any cline-no">&nbsp;</span>
@@ -246,25 +246,25 @@
246
246
  <span class="cline-any cline-no">&nbsp;</span>
247
247
  <span class="cline-any cline-neutral">&nbsp;</span>
248
248
  <span class="cline-any cline-neutral">&nbsp;</span>
249
- <span class="cline-any cline-yes">28x</span>
250
- <span class="cline-any cline-yes">56x</span>
249
+ <span class="cline-any cline-yes">44x</span>
250
+ <span class="cline-any cline-yes">88x</span>
251
251
  <span class="cline-any cline-no">&nbsp;</span>
252
252
  <span class="cline-any cline-neutral">&nbsp;</span>
253
253
  <span class="cline-any cline-neutral">&nbsp;</span>
254
254
  <span class="cline-any cline-neutral">&nbsp;</span>
255
- <span class="cline-any cline-yes">28x</span>
256
- <span class="cline-any cline-yes">56x</span>
255
+ <span class="cline-any cline-yes">44x</span>
256
+ <span class="cline-any cline-yes">88x</span>
257
257
  <span class="cline-any cline-no">&nbsp;</span>
258
258
  <span class="cline-any cline-neutral">&nbsp;</span>
259
259
  <span class="cline-any cline-neutral">&nbsp;</span>
260
260
  <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-yes">28x</span>
262
- <span class="cline-any cline-yes">56x</span>
261
+ <span class="cline-any cline-yes">44x</span>
262
+ <span class="cline-any cline-yes">88x</span>
263
263
  <span class="cline-any cline-no">&nbsp;</span>
264
264
  <span class="cline-any cline-neutral">&nbsp;</span>
265
265
  <span class="cline-any cline-neutral">&nbsp;</span>
266
266
  <span class="cline-any cline-neutral">&nbsp;</span>
267
- <span class="cline-any cline-yes">28x</span>
267
+ <span class="cline-any cline-yes">44x</span>
268
268
  <span class="cline-any cline-no">&nbsp;</span>
269
269
  <span class="cline-any cline-no">&nbsp;</span>
270
270
  <span class="cline-any cline-no">&nbsp;</span>
@@ -276,7 +276,7 @@
276
276
  <span class="cline-any cline-neutral">&nbsp;</span>
277
277
  <span class="cline-any cline-neutral">&nbsp;</span>
278
278
  <span class="cline-any cline-neutral">&nbsp;</span>
279
- <span class="cline-any cline-yes">28x</span>
279
+ <span class="cline-any cline-yes">44x</span>
280
280
  <span class="cline-any cline-yes">1x</span>
281
281
  <span class="cline-any cline-yes">1x</span>
282
282
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -326,7 +326,7 @@
326
326
  <span class="cline-any cline-neutral">&nbsp;</span>
327
327
  <span class="cline-any cline-neutral">&nbsp;</span>
328
328
  <span class="cline-any cline-neutral">&nbsp;</span>
329
- <span class="cline-any cline-yes">28x</span>
329
+ <span class="cline-any cline-yes">44x</span>
330
330
  <span class="cline-any cline-yes">1x</span>
331
331
  <span class="cline-any cline-yes">1x</span>
332
332
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -438,7 +438,7 @@ exports.revert = async ctx =&gt; {
438
438
  target: appId,
439
439
  })
440
440
  try {
441
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!env.isTest()) {
441
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (env.COUCH_DB_URL) {
442
442
  // in-memory db stalls on rollback
443
443
  <span class="cstat-no" title="statement not covered" > await replication.rollback()</span>
444
444
  }
@@ -475,7 +475,7 @@ exports.getBudibaseVersion = async ctx =&gt; {
475
475
  <div class='footer quiet pad2 space-top1 center small'>
476
476
  Code coverage generated by
477
477
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
478
- at Mon Oct 31 2022 11:02:40 GMT+0000 (Coordinated Universal Time)
478
+ at Mon Oct 31 2022 14:00:24 GMT+0000 (Coordinated Universal Time)
479
479
  </div>
480
480
  <script src="../../prettify.js"></script>
481
481
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">70.03% </span>
26
+ <span class="strong">68.1% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>638/911</span>
28
+ <span class='fraction'>570/837</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">44.92% </span>
33
+ <span class="strong">44.77% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>124/276</span>
35
+ <span class='fraction'>120/268</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">64.92% </span>
40
+ <span class="strong">61.41% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>87/134</span>
42
+ <span class='fraction'>78/127</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">69.89% </span>
47
+ <span class="strong">67.96% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>627/897</span>
49
+ <span class='fraction'>560/824</span>
50
50
  </div>
51
51
 
52
52
 
@@ -108,34 +108,19 @@
108
108
  <td data-value="131" class="abs high">110/131</td>
109
109
  </tr>
110
110
 
111
- <tr>
112
- <td class="file high" data-value="backup.js"><a href="backup.js.html">backup.js</a></td>
113
- <td data-value="100" class="pic high">
114
- <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
115
- </td>
116
- <td data-value="100" class="pct high">100%</td>
117
- <td data-value="15" class="abs high">15/15</td>
118
- <td data-value="100" class="pct high">100%</td>
119
- <td data-value="0" class="abs high">0/0</td>
120
- <td data-value="100" class="pct high">100%</td>
121
- <td data-value="2" class="abs high">2/2</td>
122
- <td data-value="100" class="pct high">100%</td>
123
- <td data-value="15" class="abs high">15/15</td>
124
- </tr>
125
-
126
111
  <tr>
127
112
  <td class="file low" data-value="cloud.js"><a href="cloud.js.html">cloud.js</a></td>
128
- <td data-value="18.18" class="pic low">
129
- <div class="chart"><div class="cover-fill" style="width: 18%"></div><div class="cover-empty" style="width: 82%"></div></div>
113
+ <td data-value="21.42" class="pic low">
114
+ <div class="chart"><div class="cover-fill" style="width: 21%"></div><div class="cover-empty" style="width: 79%"></div></div>
130
115
  </td>
131
- <td data-value="18.18" class="pct low">18.18%</td>
132
- <td data-value="55" class="abs low">10/55</td>
116
+ <td data-value="21.42" class="pct low">21.42%</td>
117
+ <td data-value="56" class="abs low">12/56</td>
133
118
  <td data-value="0" class="pct low">0%</td>
134
- <td data-value="23" class="abs low">0/23</td>
119
+ <td data-value="25" class="abs low">0/25</td>
135
120
  <td data-value="0" class="pct low">0%</td>
136
- <td data-value="8" class="abs low">0/8</td>
137
- <td data-value="18.51" class="pct low">18.51%</td>
138
- <td data-value="54" class="abs low">10/54</td>
121
+ <td data-value="10" class="abs low">0/10</td>
122
+ <td data-value="21.81" class="pct low">21.81%</td>
123
+ <td data-value="55" class="abs low">12/55</td>
139
124
  </tr>
140
125
 
141
126
  <tr>
@@ -318,21 +303,6 @@
318
303
  <td data-value="120" class="abs low">38/120</td>
319
304
  </tr>
320
305
 
321
- <tr>
322
- <td class="file high" data-value="webhook.js"><a href="webhook.js.html">webhook.js</a></td>
323
- <td data-value="91.66" class="pic high">
324
- <div class="chart"><div class="cover-fill" style="width: 91%"></div><div class="cover-empty" style="width: 9%"></div></div>
325
- </td>
326
- <td data-value="91.66" class="pct high">91.66%</td>
327
- <td data-value="60" class="abs high">55/60</td>
328
- <td data-value="40" class="pct low">40%</td>
329
- <td data-value="10" class="abs low">4/10</td>
330
- <td data-value="100" class="pct high">100%</td>
331
- <td data-value="7" class="abs high">7/7</td>
332
- <td data-value="91.52" class="pct high">91.52%</td>
333
- <td data-value="59" class="abs high">54/59</td>
334
- </tr>
335
-
336
306
  </tbody>
337
307
  </table>
338
308
  </div>
@@ -341,7 +311,7 @@
341
311
  <div class='footer quiet pad2 space-top1 center small'>
342
312
  Code coverage generated by
343
313
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
344
- at Mon Oct 31 2022 11:02:40 GMT+0000 (Coordinated Universal Time)
314
+ at Mon Oct 31 2022 14:00:24 GMT+0000 (Coordinated Universal Time)
345
315
  </div>
346
316
  <script src="../../prettify.js"></script>
347
317
  <script>
@@ -77,16 +77,16 @@
77
77
  <a name='L12'></a><a href='#L12'>12</a>
78
78
  <a name='L13'></a><a href='#L13'>13</a>
79
79
  <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">28x</span>
80
+ <a name='L15'></a><a href='#L15'>15</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">44x</span>
81
81
  <span class="cline-any cline-neutral">&nbsp;</span>
82
- <span class="cline-any cline-yes">28x</span>
82
+ <span class="cline-any cline-yes">44x</span>
83
83
  <span class="cline-any cline-yes">1x</span>
84
84
  <span class="cline-any cline-yes">1x</span>
85
85
  <span class="cline-any cline-neutral">&nbsp;</span>
86
86
  <span class="cline-any cline-yes">1x</span>
87
87
  <span class="cline-any cline-neutral">&nbsp;</span>
88
88
  <span class="cline-any cline-neutral">&nbsp;</span>
89
- <span class="cline-any cline-yes">28x</span>
89
+ <span class="cline-any cline-yes">44x</span>
90
90
  <span class="cline-any cline-yes">1x</span>
91
91
  <span class="cline-any cline-yes">1x</span>
92
92
  <span class="cline-any cline-yes">1x</span>
@@ -112,7 +112,7 @@ exports.find = async function (ctx) {
112
112
  <div class='footer quiet pad2 space-top1 center small'>
113
113
  Code coverage generated by
114
114
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
115
- at Mon Oct 31 2022 11:02:40 GMT+0000 (Coordinated Universal Time)
115
+ at Mon Oct 31 2022 14:00:24 GMT+0000 (Coordinated Universal Time)
116
116
  </div>
117
117
  <script src="../../prettify.js"></script>
118
118
  <script>
@@ -211,7 +211,7 @@ exports.destroy = async function (ctx) {
211
211
  <div class='footer quiet pad2 space-top1 center small'>
212
212
  Code coverage generated by
213
213
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
214
- at Mon Oct 31 2022 11:02:40 GMT+0000 (Coordinated Universal Time)
214
+ at Mon Oct 31 2022 14:00:24 GMT+0000 (Coordinated Universal Time)
215
215
  </div>
216
216
  <script src="../../prettify.js"></script>
217
217
  <script>