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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (257) hide show
  1. package/Dockerfile +1 -1
  2. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  3. package/builder/assets/index.4a7c5636.css +1 -0
  4. package/builder/assets/index.708945dd.js +1316 -0
  5. package/builder/assets/vendor.470042a4.js +152 -0
  6. package/builder/assets/vendor.5e1fe644.css +1 -0
  7. package/builder/index.html +4 -4
  8. package/coverage/clover.xml +1060 -928
  9. package/coverage/coverage-final.json +90 -88
  10. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  11. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  12. package/coverage/lcov-report/api/controllers/application.js.html +43 -13
  13. package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
  14. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  15. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  18. package/coverage/lcov-report/api/controllers/datasource.js.html +31 -7
  19. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  20. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  21. package/coverage/lcov-report/api/controllers/index.html +75 -75
  22. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  24. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  25. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  26. package/coverage/lcov-report/api/controllers/query.js.html +48 -210
  27. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  28. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  29. package/coverage/lcov-report/api/controllers/row/external.js.html +12 -6
  30. package/coverage/lcov-report/api/controllers/row/index.html +18 -18
  31. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  32. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  33. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +2 -2
  35. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  36. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  37. package/coverage/lcov-report/api/controllers/table/external.js.html +65 -8
  38. package/coverage/lcov-report/api/controllers/table/index.html +42 -42
  39. package/coverage/lcov-report/api/controllers/table/index.js.html +66 -12
  40. package/coverage/lcov-report/api/controllers/table/internal.js.html +49 -10
  41. package/coverage/lcov-report/api/controllers/table/utils.js.html +57 -45
  42. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  43. package/coverage/lcov-report/api/controllers/user.js.html +33 -18
  44. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.html +9 -9
  46. package/coverage/lcov-report/api/controllers/view/index.js.html +5 -5
  47. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  48. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  49. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  50. package/coverage/lcov-report/api/index.html +1 -1
  51. package/coverage/lcov-report/api/index.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  63. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.html +4 -4
  65. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  71. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  77. package/coverage/lcov-report/api/routes/table.js.html +35 -2
  78. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  82. package/coverage/lcov-report/automations/actions.js.html +2 -2
  83. package/coverage/lcov-report/automations/automationUtils.js.html +3 -3
  84. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  85. package/coverage/lcov-report/automations/index.html +33 -48
  86. package/coverage/lcov-report/automations/index.js.html +2 -2
  87. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  92. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  94. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/index.html +14 -14
  96. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  98. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  99. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  104. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  106. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  107. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  109. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  114. package/coverage/lcov-report/automations/utils.js.html +42 -12
  115. package/coverage/lcov-report/constants/index.html +1 -1
  116. package/coverage/lcov-report/constants/index.js.html +5 -2
  117. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  118. package/coverage/lcov-report/constants/screens.js.html +1 -1
  119. package/coverage/lcov-report/db/client.js.html +2 -2
  120. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  121. package/coverage/lcov-report/db/index.html +2 -2
  122. package/coverage/lcov-report/db/index.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  124. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  125. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  126. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  127. package/coverage/lcov-report/db/newid.js.html +1 -1
  128. package/coverage/lcov-report/db/utils.js.html +1 -1
  129. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  130. package/coverage/lcov-report/events/index.html +6 -6
  131. package/coverage/lcov-report/events/index.js.html +1 -1
  132. package/coverage/lcov-report/events/utils.js.html +5 -5
  133. package/coverage/lcov-report/index.html +94 -79
  134. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  135. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  136. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  137. package/coverage/lcov-report/middleware/authorized.js.html +5 -5
  138. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  139. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  140. package/coverage/lcov-report/middleware/index.html +21 -21
  141. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  142. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  143. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  144. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  145. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  146. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +83 -32
  147. package/coverage/lcov-report/threads/index.html +141 -0
  148. package/coverage/lcov-report/threads/index.js.html +260 -0
  149. package/coverage/lcov-report/threads/query.js.html +269 -0
  150. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  151. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  152. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  153. package/coverage/lcov-report/utilities/csvParser.js.html +144 -15
  154. package/coverage/lcov-report/utilities/global.js.html +2 -2
  155. package/coverage/lcov-report/utilities/index.html +34 -34
  156. package/coverage/lcov-report/utilities/index.js.html +12 -9
  157. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  158. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  159. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  160. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  162. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  163. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  164. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  165. package/coverage/lcov-report/utilities/security.js.html +3 -3
  166. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  167. package/coverage/lcov-report/utilities/users.js.html +1 -1
  168. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  169. package/coverage/lcov.info +1753 -1527
  170. package/dist/api/controllers/application.js +11 -1
  171. package/dist/api/controllers/datasource.js +6 -2
  172. package/dist/api/controllers/deploy/index.js +2 -0
  173. package/dist/api/controllers/dev.js +4 -1
  174. package/dist/api/controllers/query.js +27 -57
  175. package/dist/api/controllers/row/ExternalRequest.js +2 -2
  176. package/dist/api/controllers/row/external.js +1 -0
  177. package/dist/api/controllers/table/external.js +17 -0
  178. package/dist/api/controllers/table/index.js +21 -2
  179. package/dist/api/controllers/table/internal.js +10 -1
  180. package/dist/api/controllers/table/utils.js +28 -27
  181. package/dist/api/controllers/user.js +10 -6
  182. package/dist/api/routes/query.js +1 -1
  183. package/dist/api/routes/table.js +7 -1
  184. package/dist/app.js +2 -11
  185. package/dist/automations/bullboard.js +37 -10
  186. package/dist/automations/triggers.js +7 -3
  187. package/dist/automations/utils.js +11 -2
  188. package/dist/constants/index.js +1 -0
  189. package/dist/definitions/datasource.js +1 -0
  190. package/dist/integrations/base/IntegrationBase.js +2 -0
  191. package/dist/integrations/base/sql.js +48 -8
  192. package/dist/integrations/base/sqlTable.js +1 -2
  193. package/dist/integrations/mysql.js +3 -1
  194. package/dist/integrations/postgres.js +2 -2
  195. package/dist/middleware/builder.js +4 -1
  196. package/dist/package.json +7 -6
  197. package/dist/{automations/thread.js → threads/automation.js} +23 -7
  198. package/dist/threads/index.js +58 -0
  199. package/dist/threads/query.js +61 -0
  200. package/dist/tsconfig.tsbuildinfo +1 -1
  201. package/dist/utilities/csvParser.js +46 -5
  202. package/dist/utilities/index.js +1 -0
  203. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  204. package/dist/utilities/scriptRunner.js +4 -1
  205. package/package.json +8 -7
  206. package/scripts/likeCypress.ts +33 -0
  207. package/src/api/controllers/application.js +11 -1
  208. package/src/api/controllers/datasource.js +10 -2
  209. package/src/api/controllers/deploy/index.js +2 -0
  210. package/src/api/controllers/dev.js +4 -1
  211. package/src/api/controllers/query.js +26 -80
  212. package/src/api/controllers/row/ExternalRequest.ts +6 -2
  213. package/src/api/controllers/row/external.js +2 -0
  214. package/src/api/controllers/table/external.js +19 -0
  215. package/src/api/controllers/table/index.js +20 -2
  216. package/src/api/controllers/table/internal.js +14 -1
  217. package/src/api/controllers/table/utils.js +36 -32
  218. package/src/api/controllers/user.js +15 -10
  219. package/src/api/routes/query.js +1 -0
  220. package/src/api/routes/table.js +11 -0
  221. package/src/api/routes/tests/misc.spec.js +5 -1
  222. package/src/app.ts +2 -10
  223. package/src/automations/bullboard.js +28 -11
  224. package/src/automations/tests/automation.spec.js +3 -4
  225. package/src/automations/triggers.js +7 -3
  226. package/src/automations/utils.js +12 -2
  227. package/src/constants/index.js +1 -0
  228. package/src/definitions/datasource.ts +3 -2
  229. package/src/integrations/airtable.ts +2 -1
  230. package/src/integrations/arangodb.ts +2 -1
  231. package/src/integrations/base/IntegrationBase.ts +6 -0
  232. package/src/integrations/base/datasourcePlus.ts +2 -1
  233. package/src/integrations/base/sql.ts +51 -9
  234. package/src/integrations/base/sqlTable.ts +1 -4
  235. package/src/integrations/couchdb.ts +2 -1
  236. package/src/integrations/dynamodb.ts +2 -1
  237. package/src/integrations/elasticsearch.ts +2 -1
  238. package/src/integrations/mongodb.ts +2 -1
  239. package/src/integrations/mysql.ts +1 -1
  240. package/src/integrations/postgres.ts +5 -5
  241. package/src/integrations/rest.ts +2 -1
  242. package/src/integrations/s3.ts +2 -1
  243. package/src/middleware/builder.js +4 -1
  244. package/src/{automations/thread.js → threads/automation.js} +24 -7
  245. package/src/threads/index.js +60 -0
  246. package/src/threads/query.js +63 -0
  247. package/src/utilities/csvParser.js +48 -5
  248. package/src/utilities/index.js +1 -0
  249. package/src/utilities/queue/inMemoryQueue.js +7 -0
  250. package/src/utilities/scriptRunner.js +4 -1
  251. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -6
  252. package/src/utilities/tests/csvParser.spec.js +3 -0
  253. package/tsconfig.json +1 -1
  254. package/builder/assets/index.0e6a5c20.js +0 -201
  255. package/builder/assets/index.cf21e4d2.css +0 -29
  256. package/builder/assets/vendor.278a305c.js +0 -9
  257. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">30.77% </span>
33
+ <span class="strong">30.76% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>4/13</span>
36
36
  </div>
@@ -181,7 +181,7 @@ exports.endUserPing = <span class="fstat-no" title="function not covered" >as</s
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
184
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
184
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>
@@ -205,7 +205,7 @@ exports.update = async function (ctx) {
205
205
  &nbsp;
206
206
  try {
207
207
  const mainDoc = await getBuilderMainDoc()
208
- <span class="missing-if-branch" title="else path not taken" >E</span>if (mainDoc.apiKeys == null) {
208
+ if (mainDoc.apiKeys == null) {
209
209
  mainDoc.apiKeys = {}
210
210
  }
211
211
  mainDoc.apiKeys[key] = value
@@ -226,7 +226,7 @@ exports.update = async function (ctx) {
226
226
  <div class='footer quiet pad2 space-top1 center small'>
227
227
  Code coverage generated by
228
228
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
229
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
229
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
230
230
  </div>
231
231
  </div>
232
232
  <script src="../../prettify.js"></script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">78.09% </span>
26
+ <span class="strong">78.49% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>139/178</span>
28
+ <span class='fraction'>146/186</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">57.35% </span>
33
+ <span class="strong">56.94% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>39/68</span>
35
+ <span class='fraction'>41/72</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">78.98% </span>
47
+ <span class="strong">79.34% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>139/176</span>
49
+ <span class='fraction'>146/184</span>
50
50
  </div>
51
51
 
52
52
 
@@ -464,7 +464,17 @@
464
464
  <a name='L405'></a><a href='#L405'>405</a>
465
465
  <a name='L406'></a><a href='#L406'>406</a>
466
466
  <a name='L407'></a><a href='#L407'>407</a>
467
- <a name='L408'></a><a href='#L408'>408</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
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">33x</span>
468
478
  <span class="cline-any cline-yes">33x</span>
469
479
  <span class="cline-any cline-yes">33x</span>
470
480
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -511,6 +521,8 @@
511
521
  <span class="cline-any cline-yes">33x</span>
512
522
  <span class="cline-any cline-yes">33x</span>
513
523
  <span class="cline-any cline-yes">33x</span>
524
+ <span class="cline-any cline-yes">33x</span>
525
+ <span class="cline-any cline-yes">33x</span>
514
526
  <span class="cline-any cline-neutral">&nbsp;</span>
515
527
  <span class="cline-any cline-yes">33x</span>
516
528
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -722,6 +734,7 @@
722
734
  <span class="cline-any cline-neutral">&nbsp;</span>
723
735
  <span class="cline-any cline-yes">178x</span>
724
736
  <span class="cline-any cline-yes">178x</span>
737
+ <span class="cline-any cline-yes">178x</span>
725
738
  <span class="cline-any cline-neutral">&nbsp;</span>
726
739
  <span class="cline-any cline-neutral">&nbsp;</span>
727
740
  <span class="cline-any cline-yes">33x</span>
@@ -783,8 +796,12 @@
783
796
  <span class="cline-any cline-neutral">&nbsp;</span>
784
797
  <span class="cline-any cline-neutral">&nbsp;</span>
785
798
  <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-yes">11x</span>
800
+ <span class="cline-any cline-no">&nbsp;</span>
801
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
802
  <span class="cline-any cline-neutral">&nbsp;</span>
787
803
  <span class="cline-any cline-yes">11x</span>
804
+ <span class="cline-any cline-yes">11x</span>
788
805
  <span class="cline-any cline-neutral">&nbsp;</span>
789
806
  <span class="cline-any cline-yes">11x</span>
790
807
  <span class="cline-any cline-yes">11x</span>
@@ -855,6 +872,9 @@
855
872
  <span class="cline-any cline-neutral">&nbsp;</span>
856
873
  <span class="cline-any cline-yes">5x</span>
857
874
  <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-yes">5x</span>
876
+ <span class="cline-any cline-yes">5x</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
878
  <span class="cline-any cline-neutral">&nbsp;</span>
859
879
  <span class="cline-any cline-yes">33x</span>
860
880
  <span class="cline-any cline-yes">178x</span>
@@ -918,6 +938,8 @@ const {
918
938
  } = require("../../utilities/fileSystem/clientLibrary")
919
939
  const { getTenantId, isMultiTenant } = require("@budibase/auth/tenancy")
920
940
  const { syncGlobalUsers } = require("./user")
941
+ const { app: appCache } = require("@budibase/auth/cache")
942
+ const { cleanupAutomations } = require("../../automations/utils")
921
943
  &nbsp;
922
944
  const URL_REGEX_SLASH = /\/|\\/g
923
945
  &nbsp;
@@ -1019,10 +1041,10 @@ exports.fetch = async ctx =&gt; {
1019
1041
  const apps = await getAllApps(CouchDB, { dev, all })
1020
1042
  &nbsp;
1021
1043
  // get the locks for all the dev apps
1022
- <span class="missing-if-branch" title="else path not taken" >E</span>if (dev || <span class="branch-1 cbranch-no" title="branch not covered" >all)</span> {
1044
+ if (dev || <span class="branch-1 cbranch-no" title="branch not covered" >all)</span> {
1023
1045
  const locks = await getAllLocks()
1024
1046
  for (let app of apps) {
1025
- <span class="missing-if-branch" title="else path not taken" >E</span>if (app.status !== "development") {
1047
+ if (app.status !== "development") {
1026
1048
  continue
1027
1049
  }
1028
1050
  const lock = <span class="cstat-no" title="statement not covered" >locks.find(<span class="fstat-no" title="function not covered" >lo</span>ck =&gt; <span class="cstat-no" title="statement not covered" >lock.appId === app.appId)</span></span>
@@ -1118,7 +1140,7 @@ exports.create = async ctx =&gt; {
1118
1140
  &nbsp;
1119
1141
  // Only create the default home screens and layout if we aren't importing
1120
1142
  // an app
1121
- <span class="missing-if-branch" title="else path not taken" >E</span>if (useTemplate !== "true") {
1143
+ if (useTemplate !== "true") {
1122
1144
  await createEmptyAppPackage(ctx, newApplication)
1123
1145
  }
1124
1146
  &nbsp;
@@ -1127,6 +1149,7 @@ exports.create = async ctx =&gt; {
1127
1149
  await createApp(appId)
1128
1150
  }
1129
1151
  &nbsp;
1152
+ await appCache.invalidateAppMetadata(appId, newApplication)
1130
1153
  ctx.status = 200
1131
1154
  ctx.body = newApplication
1132
1155
  }
@@ -1190,8 +1213,12 @@ exports.delete = async ctx =&gt; {
1190
1213
  if (!env.isTest() &amp;&amp; !ctx.query.unpublish) {
1191
1214
  await deleteApp(ctx.params.appId)
1192
1215
  }
1216
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.query &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >ctx.query.unpublish)</span> {
1217
+ <span class="cstat-no" title="statement not covered" > await cleanupAutomations(ctx.params.appId)</span>
1218
+ }
1193
1219
  // make sure the app/role doesn't stick around after the app has been deleted
1194
1220
  await removeAppFromUserRoles(ctx, ctx.params.appId)
1221
+ await appCache.invalidateAppMetadata(ctx.params.appId)
1195
1222
  &nbsp;
1196
1223
  ctx.status = 200
1197
1224
  ctx.body = result
@@ -1252,7 +1279,7 @@ const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1252
1279
  const application = await db.get(DocumentTypes.APP_METADATA)
1253
1280
  &nbsp;
1254
1281
  const newAppPackage = { ...application, ...appPackage, url }
1255
- <span class="missing-if-branch" title="else path not taken" >E</span>if (appPackage._rev !== application._rev) {
1282
+ if (appPackage._rev !== application._rev) {
1256
1283
  newAppPackage._rev = application._rev
1257
1284
  }
1258
1285
  &nbsp;
@@ -1260,7 +1287,10 @@ const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1260
1287
  // Redis, shouldn't ever store it
1261
1288
  delete newAppPackage.lockedBy
1262
1289
  &nbsp;
1263
- return await db.put(newAppPackage)
1290
+ const response = await db.put(newAppPackage)
1291
+ // remove any cached metadata, so that it will be updated
1292
+ await appCache.invalidateAppMetadata(appId)
1293
+ return response
1264
1294
  }
1265
1295
  &nbsp;
1266
1296
  const createEmptyAppPackage = async (ctx, app) =&gt; {
@@ -1285,7 +1315,7 @@ const createEmptyAppPackage = async (ctx, app) =&gt; {
1285
1315
  <div class='footer quiet pad2 space-top1 center small'>
1286
1316
  Code coverage generated by
1287
1317
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1288
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
1318
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
1289
1319
  </div>
1290
1320
  </div>
1291
1321
  <script src="../../prettify.js"></script>
@@ -23,7 +23,7 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">85.19% </span>
26
+ <span class="strong">85.18% </span>
27
27
  <span class="quiet">Statements</span>
28
28
  <span class='fraction'>23/27</span>
29
29
  </div>
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">85.19% </span>
47
+ <span class="strong">85.18% </span>
48
48
  <span class="quiet">Lines</span>
49
49
  <span class='fraction'>23/27</span>
50
50
  </div>
@@ -186,7 +186,7 @@ exports.fetchSelf = async ctx =&gt; {
186
186
  // this shouldn't be returned by the app self
187
187
  delete user.roles
188
188
  &nbsp;
189
- <span class="missing-if-branch" title="else path not taken" >E</span>if (appId) {
189
+ if (appId) {
190
190
  const db = new CouchDB(appId)
191
191
  // remove the full roles structure
192
192
  delete user.roles
@@ -205,7 +205,7 @@ exports.fetchSelf = async ctx =&gt; {
205
205
  <span class="cstat-no" title="statement not covered" > response = {}</span>
206
206
  }
207
207
  // user has a role of some sort, return them
208
- else <span class="missing-if-branch" title="else path not taken" >E</span>if (err.status === 404) {
208
+ else if (err.status === 404) {
209
209
  const metadata = {
210
210
  ...user,
211
211
  _id: userId,
@@ -213,12 +213,12 @@ exports.fetchSelf = async ctx =&gt; {
213
213
  const dbResp = await db.put(metadata)
214
214
  user._rev = dbResp.rev
215
215
  response = user
216
- } else {
216
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
217
217
  <span class="cstat-no" title="statement not covered" > response = user</span>
218
218
  }
219
219
  ctx.body = response
220
220
  }
221
- } else {
221
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
222
222
  <span class="cstat-no" title="statement not covered" > ctx.body = user</span>
223
223
  }
224
224
  }
@@ -229,7 +229,7 @@ exports.fetchSelf = async ctx =&gt; {
229
229
  <div class='footer quiet pad2 space-top1 center small'>
230
230
  Code coverage generated by
231
231
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
232
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
232
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
233
233
  </div>
234
234
  </div>
235
235
  <script src="../../prettify.js"></script>
@@ -30,14 +30,14 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">71.88% </span>
33
+ <span class="strong">71.87% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>23/32</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">92.86% </span>
40
+ <span class="strong">92.85% </span>
41
41
  <span class="quiet">Functions</span>
42
42
  <span class='fraction'>13/14</span>
43
43
  </div>
@@ -736,7 +736,7 @@ exports.test = async function (ctx) {
736
736
  <div class='footer quiet pad2 space-top1 center small'>
737
737
  Code coverage generated by
738
738
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
739
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
739
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
740
740
  </div>
741
741
  </div>
742
742
  <script src="../../prettify.js"></script>
@@ -91,7 +91,7 @@ exports.exportAppDump = async function (ctx) {
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
94
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
94
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  </div>
97
97
  <script src="../../prettify.js"></script>
@@ -397,7 +397,7 @@ exports.importApps = <span class="fstat-no" title="function not covered" >as</sp
397
397
  <div class='footer quiet pad2 space-top1 center small'>
398
398
  Code coverage generated by
399
399
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
400
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
400
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
401
401
  </div>
402
402
  </div>
403
403
  <script src="../../prettify.js"></script>
@@ -114,11 +114,11 @@
114
114
  <span class="cline-any cline-yes">1x</span>
115
115
  <span class="cline-any cline-yes">1x</span>
116
116
  <span class="cline-any cline-yes">1x</span>
117
- <span class="cline-any cline-yes">45x</span>
117
+ <span class="cline-any cline-yes">46x</span>
118
118
  <span class="cline-any cline-yes">1x</span>
119
119
  <span class="cline-any cline-neutral">&nbsp;</span>
120
- <span class="cline-any cline-yes">44x</span>
121
- <span class="cline-any cline-yes">44x</span>
120
+ <span class="cline-any cline-yes">45x</span>
121
+ <span class="cline-any cline-yes">45x</span>
122
122
  <span class="cline-any cline-neutral">&nbsp;</span>
123
123
  <span class="cline-any cline-neutral">&nbsp;</span>
124
124
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -169,7 +169,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
169
169
  <div class='footer quiet pad2 space-top1 center small'>
170
170
  Code coverage generated by
171
171
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
172
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
172
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
173
173
  </div>
174
174
  </div>
175
175
  <script src="../../prettify.js"></script>
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">48.94% </span>
47
+ <span class="strong">49.47% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>46/94</span>
49
+ <span class='fraction'>47/95</span>
50
50
  </div>
51
51
 
52
52
 
@@ -236,7 +236,15 @@
236
236
  <a name='L177'></a><a href='#L177'>177</a>
237
237
  <a name='L178'></a><a href='#L178'>178</a>
238
238
  <a name='L179'></a><a href='#L179'>179</a>
239
- <a name='L180'></a><a href='#L180'>180</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
239
+ <a name='L180'></a><a href='#L180'>180</a>
240
+ <a name='L181'></a><a href='#L181'>181</a>
241
+ <a name='L182'></a><a href='#L182'>182</a>
242
+ <a name='L183'></a><a href='#L183'>183</a>
243
+ <a name='L184'></a><a href='#L184'>184</a>
244
+ <a name='L185'></a><a href='#L185'>185</a>
245
+ <a name='L186'></a><a href='#L186'>186</a>
246
+ <a name='L187'></a><a href='#L187'>187</a>
247
+ <a name='L188'></a><a href='#L188'>188</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
240
248
  <span class="cline-any cline-neutral">&nbsp;</span>
241
249
  <span class="cline-any cline-neutral">&nbsp;</span>
242
250
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -358,9 +366,17 @@
358
366
  <span class="cline-any cline-neutral">&nbsp;</span>
359
367
  <span class="cline-any cline-neutral">&nbsp;</span>
360
368
  <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span>
371
+ <span class="cline-any cline-yes">1x</span>
361
372
  <span class="cline-any cline-yes">1x</span>
362
373
  <span class="cline-any cline-neutral">&nbsp;</span>
363
374
  <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
380
  <span class="cline-any cline-yes">1x</span>
365
381
  <span class="cline-any cline-neutral">&nbsp;</span>
366
382
  <span class="cline-any cline-yes">1x</span>
@@ -518,7 +534,7 @@ exports.save = async function (ctx) {
518
534
  datasource._rev = dbResp.rev
519
535
  &nbsp;
520
536
  // Drain connection pools when configuration is changed
521
- <span class="missing-if-branch" title="else path not taken" >E</span>if (datasource.source) {
537
+ if (datasource.source) {
522
538
  const source = integrations[datasource.source]
523
539
  <span class="missing-if-branch" title="if path not taken" >I</span>if (source &amp;&amp; source.pool) {
524
540
  <span class="cstat-no" title="statement not covered" > await source.pool.end()</span>
@@ -536,8 +552,16 @@ exports.destroy = async function (ctx) {
536
552
  const db = new CouchDB(ctx.appId)
537
553
  &nbsp;
538
554
  // Delete all queries for the datasource
539
- const rows = await db.allDocs(getQueryParams(ctx.params.datasourceId, null))
540
- await db.bulkDocs(rows.rows.map(row =&gt; ({ ...row.doc, _deleted: true })))
555
+ const queries = await db.allDocs(
556
+ getQueryParams(ctx.params.datasourceId, null)
557
+ )
558
+ await db.bulkDocs(
559
+ queries.rows.map(row =&gt; ({
560
+ _id: row.id,
561
+ _rev: row.value.rev,
562
+ _deleted: true,
563
+ }))
564
+ )
541
565
  &nbsp;
542
566
  // delete the datasource
543
567
  await db.remove(ctx.params.datasourceId, ctx.params.revId)
@@ -601,7 +625,7 @@ const buildSchemaHelper = <span class="fstat-no" title="function not covered" >a
601
625
  <div class='footer quiet pad2 space-top1 center small'>
602
626
  Code coverage generated by
603
627
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
604
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
628
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
605
629
  </div>
606
630
  </div>
607
631
  <script src="../../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">27.87% </span>
26
+ <span class="strong">28.12% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>17/61</span>
28
+ <span class='fraction'>18/64</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">28.33% </span>
47
+ <span class="strong">28.57% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>17/60</span>
49
+ <span class='fraction'>18/63</span>
50
50
  </div>
51
51
 
52
52
 
@@ -176,7 +176,11 @@
176
176
  <a name='L117'></a><a href='#L117'>117</a>
177
177
  <a name='L118'></a><a href='#L118'>118</a>
178
178
  <a name='L119'></a><a href='#L119'>119</a>
179
- <a name='L120'></a><a href='#L120'>120</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
179
+ <a name='L120'></a><a href='#L120'>120</a>
180
+ <a name='L121'></a><a href='#L121'>121</a>
181
+ <a name='L122'></a><a href='#L122'>122</a>
182
+ <a name='L123'></a><a href='#L123'>123</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
183
+ <span class="cline-any cline-yes">23x</span>
180
184
  <span class="cline-any cline-yes">23x</span>
181
185
  <span class="cline-any cline-yes">23x</span>
182
186
  <span class="cline-any cline-yes">23x</span>
@@ -203,6 +207,7 @@
203
207
  <span class="cline-any cline-neutral">&nbsp;</span>
204
208
  <span class="cline-any cline-no">&nbsp;</span>
205
209
  <span class="cline-any cline-no">&nbsp;</span>
210
+ <span class="cline-any cline-no">&nbsp;</span>
206
211
  <span class="cline-any cline-neutral">&nbsp;</span>
207
212
  <span class="cline-any cline-no">&nbsp;</span>
208
213
  <span class="cline-any cline-no">&nbsp;</span>
@@ -285,6 +290,7 @@
285
290
  <span class="cline-any cline-no">&nbsp;</span>
286
291
  <span class="cline-any cline-no">&nbsp;</span>
287
292
  <span class="cline-any cline-no">&nbsp;</span>
293
+ <span class="cline-any cline-no">&nbsp;</span>
288
294
  <span class="cline-any cline-neutral">&nbsp;</span>
289
295
  <span class="cline-any cline-neutral">&nbsp;</span>
290
296
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -303,6 +309,7 @@ const { request } = require("../../utilities/workerRequests")
303
309
  const { clearLock } = require("../../utilities/redis")
304
310
  const { Replication } = require("@budibase/auth").db
305
311
  const { DocumentTypes } = require("../../db/utils")
312
+ const { app: appCache } = require("@budibase/auth/cache")
306
313
  &nbsp;
307
314
  async function <span class="fstat-no" title="function not covered" >redirect(</span>ctx, method, path = <span class="branch-0 cbranch-no" title="branch not covered" >"global")</span> {
308
315
  const { devPath } = <span class="cstat-no" title="statement not covered" >ctx.params</span>
@@ -321,7 +328,8 @@ async function <span class="fstat-no" title="function not covered" >redirect(</s
321
328
  )
322
329
  )
323
330
  <span class="cstat-no" title="statement not covered" > if (response.status !== 200) {</span>
324
- <span class="cstat-no" title="statement not covered" > ctx.throw(response.status, response.statusText)</span>
331
+ const err = <span class="cstat-no" title="statement not covered" >await response.text()</span>
332
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, err)</span>
325
333
  }
326
334
  const cookie = <span class="cstat-no" title="statement not covered" >response.headers.get("set-cookie")</span>
327
335
  <span class="cstat-no" title="statement not covered" > if (cookie) {</span>
@@ -403,6 +411,7 @@ exports.revert = <span class="fstat-no" title="function not covered" >as</span>y
403
411
  <span class="cstat-no" title="statement not covered" > appDoc.appId = appId</span>
404
412
  <span class="cstat-no" title="statement not covered" > appDoc.instance._id = appId</span>
405
413
  <span class="cstat-no" title="statement not covered" > await db.put(appDoc)</span>
414
+ <span class="cstat-no" title="statement not covered" > await appCache.invalidateAppMetadata(appId)</span>
406
415
  <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
407
416
  message: "Reverted changes successfully.",
408
417
  }
@@ -421,7 +430,7 @@ exports.getBudibaseVersion = <span class="fstat-no" title="function not covered"
421
430
  <div class='footer quiet pad2 space-top1 center small'>
422
431
  Code coverage generated by
423
432
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
424
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
433
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
425
434
  </div>
426
435
  </div>
427
436
  <script src="../../prettify.js"></script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">86.67% </span>
26
+ <span class="strong">93.33% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>13/15</span>
28
+ <span class='fraction'>14/15</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">50% </span>
33
+ <span class="strong">75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>2/4</span>
35
+ <span class='fraction'>3/4</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">86.67% </span>
47
+ <span class="strong">93.33% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>13/15</span>
49
+ <span class='fraction'>14/15</span>
50
50
  </div>
51
51
 
52
52
 
@@ -91,7 +91,7 @@
91
91
  <span class="cline-any cline-yes">1x</span>
92
92
  <span class="cline-any cline-yes">1x</span>
93
93
  <span class="cline-any cline-yes">1x</span>
94
- <span class="cline-any cline-no">&nbsp;</span>
94
+ <span class="cline-any cline-yes">1x</span>
95
95
  <span class="cline-any cline-neutral">&nbsp;</span>
96
96
  <span class="cline-any cline-yes">1x</span>
97
97
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -112,8 +112,8 @@ exports.fetchUrls = async ctx =&gt; {
112
112
  const db = new CouchDB(appId)
113
113
  const settings = await getScopedConfig(db, { type: Configs.SETTINGS })
114
114
  let appUrl = "http://localhost:10000/app"
115
- <span class="missing-if-branch" title="if path not taken" >I</span>if (settings &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >settings["platformUrl"])</span> {
116
- <span class="cstat-no" title="statement not covered" > appUrl = checkSlashesInUrl(`${settings["platformUrl"]}/app`)</span>
115
+ if (settings &amp;&amp; settings["platformUrl"]) {
116
+ appUrl = checkSlashesInUrl(`${settings["platformUrl"]}/app`)
117
117
  }
118
118
  ctx.body = {
119
119
  app: appUrl,
@@ -130,7 +130,7 @@ exports.getDeployedApps = <span class="fstat-no" title="function not covered" >a
130
130
  <div class='footer quiet pad2 space-top1 center small'>
131
131
  Code coverage generated by
132
132
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
133
- at Thu Nov 11 2021 13:56:13 GMT+0000 (Coordinated Universal Time)
133
+ at Mon Nov 22 2021 10:51:12 GMT+0000 (Coordinated Universal Time)
134
134
  </div>
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>