@budibase/server 1.0.46-alpha.3 → 1.0.46-alpha.7

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 (221) hide show
  1. package/builder/assets/{index.6eae2fa0.js → index.af9e71d8.js} +243 -243
  2. package/builder/assets/{index.0df4f7ab.css → index.dd9e386f.css} +1 -1
  3. package/builder/assets/{vendor.10e2ad1b.js → vendor.3bd2f661.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +542 -551
  6. package/coverage/coverage-final.json +21 -23
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +179 -95
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +58 -22
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +27 -42
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/index.html +15 -15
  23. package/coverage/lcov-report/api/controllers/query/index.js.html +44 -11
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/index.html +5 -5
  29. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +5 -14
  33. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  48. package/coverage/lcov-report/api/index.html +1 -1
  49. package/coverage/lcov-report/api/index.js.html +10 -10
  50. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/index.html +7 -22
  62. package/coverage/lcov-report/api/routes/index.js.html +4 -10
  63. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/static.js.html +17 -2
  74. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  79. package/coverage/lcov-report/automations/actions.js.html +1 -1
  80. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  81. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  82. package/coverage/lcov-report/automations/index.html +1 -1
  83. package/coverage/lcov-report/automations/index.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/index.html +1 -1
  93. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  111. package/coverage/lcov-report/automations/utils.js.html +5 -5
  112. package/coverage/lcov-report/constants/index.html +5 -5
  113. package/coverage/lcov-report/constants/index.js.html +16 -4
  114. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  115. package/coverage/lcov-report/constants/screens.js.html +1 -1
  116. package/coverage/lcov-report/db/client.js.html +1 -1
  117. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  118. package/coverage/lcov-report/db/index.html +1 -1
  119. package/coverage/lcov-report/db/index.js.html +1 -1
  120. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  121. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  124. package/coverage/lcov-report/db/newid.js.html +2 -2
  125. package/coverage/lcov-report/db/utils.js.html +17 -17
  126. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  127. package/coverage/lcov-report/events/index.html +1 -1
  128. package/coverage/lcov-report/events/index.js.html +1 -1
  129. package/coverage/lcov-report/events/utils.js.html +1 -1
  130. package/coverage/lcov-report/index.html +58 -58
  131. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  132. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  133. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  134. package/coverage/lcov-report/middleware/authorized.js.html +11 -11
  135. package/coverage/lcov-report/middleware/builder.js.html +8 -8
  136. package/coverage/lcov-report/middleware/currentapp.js.html +34 -61
  137. package/coverage/lcov-report/middleware/index.html +10 -10
  138. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  139. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  140. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  141. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  142. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  143. package/coverage/lcov-report/migrations/usageQuotas/index.html +1 -1
  144. package/coverage/lcov-report/migrations/usageQuotas/index.js.html +1 -1
  145. package/coverage/lcov-report/migrations/usageQuotas/syncApps.js.html +1 -1
  146. package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +1 -1
  147. package/coverage/lcov-report/threads/automation.js.html +1 -1
  148. package/coverage/lcov-report/threads/index.html +15 -15
  149. package/coverage/lcov-report/threads/index.js.html +1 -1
  150. package/coverage/lcov-report/threads/query.js.html +23 -8
  151. package/coverage/lcov-report/threads/utils.js.html +1 -1
  152. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  153. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  154. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  155. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  156. package/coverage/lcov-report/utilities/global.js.html +13 -13
  157. package/coverage/lcov-report/utilities/index.html +19 -19
  158. package/coverage/lcov-report/utilities/index.js.html +4 -4
  159. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  160. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  161. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  164. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  165. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  166. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  167. package/coverage/lcov-report/utilities/security.js.html +1 -1
  168. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  169. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  170. package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
  171. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  173. package/coverage/lcov-report/utilities/users.js.html +1 -1
  174. package/coverage/lcov-report/utilities/workerRequests.js.html +24 -93
  175. package/coverage/lcov.info +937 -935
  176. package/dist/api/controllers/application.js +49 -20
  177. package/dist/api/controllers/datasource.js +11 -0
  178. package/dist/api/controllers/query/index.js +11 -3
  179. package/dist/api/controllers/row/utils.js +1 -2
  180. package/dist/api/controllers/static/index.js +59 -10
  181. package/dist/api/routes/index.js +0 -2
  182. package/dist/api/routes/static.js +2 -1
  183. package/dist/constants/index.js +3 -0
  184. package/dist/definitions/datasource.js +1 -0
  185. package/dist/integrations/googlesheets.js +340 -0
  186. package/dist/integrations/index.js +3 -0
  187. package/dist/integrations/utils.js +6 -3
  188. package/dist/middleware/currentapp.js +0 -9
  189. package/dist/package.json +8 -5
  190. package/dist/tests/utilities/TestConfiguration.js +3 -1
  191. package/dist/threads/query.js +4 -0
  192. package/dist/tsconfig.tsbuildinfo +1 -1
  193. package/dist/utilities/workerRequests.js +0 -20
  194. package/nodemon.json +1 -1
  195. package/package.json +9 -6
  196. package/src/api/controllers/application.js +52 -24
  197. package/src/api/controllers/datasource.js +12 -0
  198. package/src/api/controllers/query/index.js +14 -3
  199. package/src/api/controllers/row/utils.js +1 -4
  200. package/src/api/controllers/static/index.js +63 -10
  201. package/src/api/routes/index.js +0 -2
  202. package/src/api/routes/static.js +5 -0
  203. package/src/api/routes/tests/application.spec.js +2 -2
  204. package/src/api/routes/tests/static.spec.js +98 -0
  205. package/src/constants/index.js +4 -0
  206. package/src/definitions/datasource.ts +3 -0
  207. package/src/integrations/googlesheets.ts +353 -0
  208. package/src/integrations/index.ts +3 -0
  209. package/src/integrations/utils.ts +18 -5
  210. package/src/middleware/currentapp.js +0 -9
  211. package/src/migrations/tests/usageQuotas/syncRows.spec.js +1 -1
  212. package/src/tests/utilities/TestConfiguration.js +3 -1
  213. package/src/threads/query.js +5 -0
  214. package/src/utilities/workerRequests.js +0 -23
  215. package/coverage/lcov-report/api/controllers/hosting.js.html +0 -146
  216. package/coverage/lcov-report/api/routes/hosting.js.html +0 -119
  217. package/dist/api/controllers/hosting.js +0 -30
  218. package/dist/api/routes/hosting.js +0 -11
  219. package/src/api/controllers/hosting.js +0 -22
  220. package/src/api/routes/hosting.js +0 -13
  221. package/src/api/routes/tests/hosting.spec.js +0 -36
@@ -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 Fri Jan 21 2022 11:26:59 GMT+0000 (Coordinated Universal Time)
184
+ at Fri Jan 28 2022 15:12:12 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>
@@ -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 Fri Jan 21 2022 11:26:59 GMT+0000 (Coordinated Universal Time)
229
+ at Fri Jan 28 2022 15:12:12 GMT+0000 (Coordinated Universal Time)
230
230
  </div>
231
231
  </div>
232
232
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">78.02% </span>
26
+ <span class="strong">79.41% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>142/182</span>
28
+ <span class='fraction'>162/204</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">56.94% </span>
33
+ <span class="strong">55.12% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>41/72</span>
35
+ <span class='fraction'>43/78</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">85% </span>
40
+ <span class="strong">88.46% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>17/20</span>
42
+ <span class='fraction'>23/26</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">78.88% </span>
47
+ <span class="strong">79.79% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>142/180</span>
49
+ <span class='fraction'>158/198</span>
50
50
  </div>
51
51
 
52
52
 
@@ -471,7 +471,35 @@
471
471
  <a name='L412'></a><a href='#L412'>412</a>
472
472
  <a name='L413'></a><a href='#L413'>413</a>
473
473
  <a name='L414'></a><a href='#L414'>414</a>
474
- <a name='L415'></a><a href='#L415'>415</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">36x</span>
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>
478
+ <a name='L419'></a><a href='#L419'>419</a>
479
+ <a name='L420'></a><a href='#L420'>420</a>
480
+ <a name='L421'></a><a href='#L421'>421</a>
481
+ <a name='L422'></a><a href='#L422'>422</a>
482
+ <a name='L423'></a><a href='#L423'>423</a>
483
+ <a name='L424'></a><a href='#L424'>424</a>
484
+ <a name='L425'></a><a href='#L425'>425</a>
485
+ <a name='L426'></a><a href='#L426'>426</a>
486
+ <a name='L427'></a><a href='#L427'>427</a>
487
+ <a name='L428'></a><a href='#L428'>428</a>
488
+ <a name='L429'></a><a href='#L429'>429</a>
489
+ <a name='L430'></a><a href='#L430'>430</a>
490
+ <a name='L431'></a><a href='#L431'>431</a>
491
+ <a name='L432'></a><a href='#L432'>432</a>
492
+ <a name='L433'></a><a href='#L433'>433</a>
493
+ <a name='L434'></a><a href='#L434'>434</a>
494
+ <a name='L435'></a><a href='#L435'>435</a>
495
+ <a name='L436'></a><a href='#L436'>436</a>
496
+ <a name='L437'></a><a href='#L437'>437</a>
497
+ <a name='L438'></a><a href='#L438'>438</a>
498
+ <a name='L439'></a><a href='#L439'>439</a>
499
+ <a name='L440'></a><a href='#L440'>440</a>
500
+ <a name='L441'></a><a href='#L441'>441</a>
501
+ <a name='L442'></a><a href='#L442'>442</a>
502
+ <a name='L443'></a><a href='#L443'>443</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">36x</span>
475
503
  <span class="cline-any cline-yes">36x</span>
476
504
  <span class="cline-any cline-yes">36x</span>
477
505
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -506,9 +534,6 @@
506
534
  <span class="cline-any cline-neutral">&nbsp;</span>
507
535
  <span class="cline-any cline-yes">36x</span>
508
536
  <span class="cline-any cline-yes">36x</span>
509
- <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-neutral">&nbsp;</span>
512
537
  <span class="cline-any cline-yes">36x</span>
513
538
  <span class="cline-any cline-yes">36x</span>
514
539
  <span class="cline-any cline-yes">36x</span>
@@ -526,17 +551,17 @@
526
551
  <span class="cline-any cline-neutral">&nbsp;</span>
527
552
  <span class="cline-any cline-neutral">&nbsp;</span>
528
553
  <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-yes">200x</span>
554
+ <span class="cline-any cline-yes">202x</span>
530
555
  <span class="cline-any cline-neutral">&nbsp;</span>
531
556
  <span class="cline-any cline-neutral">&nbsp;</span>
532
557
  <span class="cline-any cline-neutral">&nbsp;</span>
533
558
  <span class="cline-any cline-neutral">&nbsp;</span>
534
559
  <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-yes">400x</span>
560
+ <span class="cline-any cline-yes">404x</span>
536
561
  <span class="cline-any cline-neutral">&nbsp;</span>
537
562
  <span class="cline-any cline-neutral">&nbsp;</span>
538
563
  <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-yes">200x</span>
564
+ <span class="cline-any cline-yes">202x</span>
540
565
  <span class="cline-any cline-neutral">&nbsp;</span>
541
566
  <span class="cline-any cline-neutral">&nbsp;</span>
542
567
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -546,43 +571,56 @@
546
571
  <span class="cline-any cline-neutral">&nbsp;</span>
547
572
  <span class="cline-any cline-neutral">&nbsp;</span>
548
573
  <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-yes">198x</span>
574
+ <span class="cline-any cline-yes">200x</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
577
  <span class="cline-any cline-neutral">&nbsp;</span>
551
578
  <span class="cline-any cline-neutral">&nbsp;</span>
552
579
  <span class="cline-any cline-neutral">&nbsp;</span>
553
580
  <span class="cline-any cline-neutral">&nbsp;</span>
554
581
  <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-yes">194x</span>
555
583
  <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-yes">195x</span>
557
584
  <span class="cline-any cline-no">&nbsp;</span>
558
- <span class="cline-any cline-yes">195x</span>
559
- <span class="cline-any cline-yes">191x</span>
585
+ <span class="cline-any cline-yes">194x</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-yes">194x</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-yes">194x</span>
590
+ <span class="cline-any cline-yes">194x</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-yes">194x</span>
560
593
  <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-yes">195x</span>
562
- <span class="cline-any cline-yes">191x</span>
563
594
  <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-yes">195x</span>
565
- <span class="cline-any cline-yes">15x</span>
595
+ <span class="cline-any cline-yes">36x</span>
596
+ <span class="cline-any cline-yes">194x</span>
597
+ <span class="cline-any cline-yes">2x</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-yes">732x</span>
600
+ <span class="cline-any cline-no">&nbsp;</span>
566
601
  <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-yes">180x</span>
568
- <span class="cline-any cline-yes">180x</span>
569
602
  <span class="cline-any cline-neutral">&nbsp;</span>
570
603
  <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-yes">36x</span>
571
605
  <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-yes">194x</span>
607
+ <span class="cline-any cline-no">&nbsp;</span>
572
608
  <span class="cline-any cline-neutral">&nbsp;</span>
609
+ <span class="cline-any cline-yes">194x</span>
610
+ <span class="cline-any cline-yes">2x</span>
573
611
  <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-yes">732x</span>
574
613
  <span class="cline-any cline-no">&nbsp;</span>
575
614
  <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">180x</span>
577
615
  <span class="cline-any cline-neutral">&nbsp;</span>
578
616
  <span class="cline-any cline-neutral">&nbsp;</span>
579
617
  <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-yes">190x</span>
581
- <span class="cline-any cline-yes">190x</span>
582
- <span class="cline-any cline-yes">190x</span>
618
+ <span class="cline-any cline-yes">192x</span>
619
+ <span class="cline-any cline-yes">192x</span>
620
+ <span class="cline-any cline-yes">192x</span>
583
621
  <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-yes">190x</span>
585
- <span class="cline-any cline-yes">190x</span>
622
+ <span class="cline-any cline-yes">192x</span>
623
+ <span class="cline-any cline-yes">192x</span>
586
624
  <span class="cline-any cline-neutral">&nbsp;</span>
587
625
  <span class="cline-any cline-neutral">&nbsp;</span>
588
626
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -591,18 +629,18 @@
591
629
  <span class="cline-any cline-neutral">&nbsp;</span>
592
630
  <span class="cline-any cline-neutral">&nbsp;</span>
593
631
  <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-yes">190x</span>
595
- <span class="cline-any cline-yes">190x</span>
596
- <span class="cline-any cline-yes">190x</span>
632
+ <span class="cline-any cline-yes">192x</span>
633
+ <span class="cline-any cline-yes">192x</span>
634
+ <span class="cline-any cline-yes">192x</span>
597
635
  <span class="cline-any cline-neutral">&nbsp;</span>
598
636
  <span class="cline-any cline-neutral">&nbsp;</span>
599
637
  <span class="cline-any cline-neutral">&nbsp;</span>
600
- <span class="cline-any cline-yes">190x</span>
638
+ <span class="cline-any cline-yes">192x</span>
601
639
  <span class="cline-any cline-no">&nbsp;</span>
602
640
  <span class="cline-any cline-no">&nbsp;</span>
603
641
  <span class="cline-any cline-no">&nbsp;</span>
604
642
  <span class="cline-any cline-neutral">&nbsp;</span>
605
- <span class="cline-any cline-yes">190x</span>
643
+ <span class="cline-any cline-yes">192x</span>
606
644
  <span class="cline-any cline-neutral">&nbsp;</span>
607
645
  <span class="cline-any cline-neutral">&nbsp;</span>
608
646
  <span class="cline-any cline-no">&nbsp;</span>
@@ -610,10 +648,10 @@
610
648
  <span class="cline-any cline-neutral">&nbsp;</span>
611
649
  <span class="cline-any cline-neutral">&nbsp;</span>
612
650
  <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">190x</span>
651
+ <span class="cline-any cline-yes">192x</span>
614
652
  <span class="cline-any cline-neutral">&nbsp;</span>
615
653
  <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-yes">190x</span>
654
+ <span class="cline-any cline-yes">192x</span>
617
655
  <span class="cline-any cline-neutral">&nbsp;</span>
618
656
  <span class="cline-any cline-neutral">&nbsp;</span>
619
657
  <span class="cline-any cline-yes">36x</span>
@@ -658,19 +696,19 @@
658
696
  <span class="cline-any cline-neutral">&nbsp;</span>
659
697
  <span class="cline-any cline-neutral">&nbsp;</span>
660
698
  <span class="cline-any cline-yes">36x</span>
661
- <span class="cline-any cline-yes">199x</span>
662
- <span class="cline-any cline-yes">199x</span>
663
- <span class="cline-any cline-yes">199x</span>
664
- <span class="cline-any cline-yes">199x</span>
699
+ <span class="cline-any cline-yes">201x</span>
700
+ <span class="cline-any cline-yes">201x</span>
701
+ <span class="cline-any cline-yes">201x</span>
702
+ <span class="cline-any cline-yes">201x</span>
665
703
  <span class="cline-any cline-neutral">&nbsp;</span>
666
704
  <span class="cline-any cline-neutral">&nbsp;</span>
705
+ <span class="cline-any cline-yes">201x</span>
706
+ <span class="cline-any cline-yes">199x</span>
707
+ <span class="cline-any cline-yes">199x</span>
667
708
  <span class="cline-any cline-yes">199x</span>
668
- <span class="cline-any cline-yes">197x</span>
669
- <span class="cline-any cline-yes">197x</span>
670
- <span class="cline-any cline-yes">197x</span>
671
709
  <span class="cline-any cline-neutral">&nbsp;</span>
672
710
  <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-yes">199x</span>
711
+ <span class="cline-any cline-yes">201x</span>
674
712
  <span class="cline-any cline-neutral">&nbsp;</span>
675
713
  <span class="cline-any cline-neutral">&nbsp;</span>
676
714
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -679,29 +717,36 @@
679
717
  <span class="cline-any cline-neutral">&nbsp;</span>
680
718
  <span class="cline-any cline-neutral">&nbsp;</span>
681
719
  <span class="cline-any cline-yes">36x</span>
682
- <span class="cline-any cline-yes">190x</span>
683
- <span class="cline-any cline-yes">190x</span>
720
+ <span class="cline-any cline-yes">192x</span>
721
+ <span class="cline-any cline-yes">192x</span>
722
+ <span class="cline-any cline-yes">192x</span>
723
+ <span class="cline-any cline-yes">192x</span>
724
+ <span class="cline-any cline-yes">192x</span>
684
725
  <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-yes">192x</span>
727
+ <span class="cline-any cline-yes">192x</span>
685
728
  <span class="cline-any cline-neutral">&nbsp;</span>
686
729
  <span class="cline-any cline-neutral">&nbsp;</span>
687
730
  <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-yes">190x</span>
731
+ <span class="cline-any cline-neutral">&nbsp;</span>
732
+ <span class="cline-any cline-yes">192x</span>
689
733
  <span class="cline-any cline-no">&nbsp;</span>
690
734
  <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-yes">190x</span>
692
- <span class="cline-any cline-yes">190x</span>
735
+ <span class="cline-any cline-yes">192x</span>
736
+ <span class="cline-any cline-yes">192x</span>
693
737
  <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-yes">190x</span>
695
- <span class="cline-any cline-yes">190x</span>
738
+ <span class="cline-any cline-yes">192x</span>
696
739
  <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-yes">190x</span>
740
+ <span class="cline-any cline-yes">192x</span>
698
741
  <span class="cline-any cline-neutral">&nbsp;</span>
699
- <span class="cline-any cline-yes">190x</span>
742
+ <span class="cline-any cline-yes">192x</span>
700
743
  <span class="cline-any cline-no">&nbsp;</span>
701
744
  <span class="cline-any cline-neutral">&nbsp;</span>
702
745
  <span class="cline-any cline-neutral">&nbsp;</span>
703
746
  <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-yes">190x</span>
747
+ <span class="cline-any cline-yes">192x</span>
748
+ <span class="cline-any cline-neutral">&nbsp;</span>
749
+ <span class="cline-any cline-neutral">&nbsp;</span>
705
750
  <span class="cline-any cline-neutral">&nbsp;</span>
706
751
  <span class="cline-any cline-neutral">&nbsp;</span>
707
752
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -714,29 +759,41 @@
714
759
  <span class="cline-any cline-neutral">&nbsp;</span>
715
760
  <span class="cline-any cline-neutral">&nbsp;</span>
716
761
  <span class="cline-any cline-neutral">&nbsp;</span>
762
+ <span class="cline-any cline-yes">192x</span>
763
+ <span class="cline-any cline-yes">192x</span>
717
764
  <span class="cline-any cline-neutral">&nbsp;</span>
718
765
  <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-yes">190x</span>
720
- <span class="cline-any cline-yes">190x</span>
721
766
  <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-yes">192x</span>
768
+ <span class="cline-any cline-yes">192x</span>
722
769
  <span class="cline-any cline-neutral">&nbsp;</span>
723
770
  <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-yes">190x</span>
725
- <span class="cline-any cline-yes">190x</span>
726
771
  <span class="cline-any cline-neutral">&nbsp;</span>
727
772
  <span class="cline-any cline-neutral">&nbsp;</span>
728
773
  <span class="cline-any cline-neutral">&nbsp;</span>
729
774
  <span class="cline-any cline-neutral">&nbsp;</span>
730
775
  <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-yes">192x</span>
777
+ <span class="cline-any cline-yes">192x</span>
778
+ <span class="cline-any cline-yes">192x</span>
731
779
  <span class="cline-any cline-neutral">&nbsp;</span>
732
780
  <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-yes">190x</span>
734
- <span class="cline-any cline-yes">190x</span>
735
- <span class="cline-any cline-yes">190x</span>
736
781
  <span class="cline-any cline-neutral">&nbsp;</span>
737
782
  <span class="cline-any cline-neutral">&nbsp;</span>
738
783
  <span class="cline-any cline-yes">36x</span>
739
784
  <span class="cline-any cline-yes">2x</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-yes">2x</span>
787
+ <span class="cline-any cline-yes">2x</span>
788
+ <span class="cline-any cline-yes">2x</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-yes">2x</span>
791
+ <span class="cline-any cline-yes">2x</span>
792
+ <span class="cline-any cline-yes">2x</span>
793
+ <span class="cline-any cline-yes">2x</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-yes">2x</span>
740
797
  <span class="cline-any cline-yes">2x</span>
741
798
  <span class="cline-any cline-yes">2x</span>
742
799
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -857,7 +914,6 @@
857
914
  <span class="cline-any cline-yes">36x</span>
858
915
  <span class="cline-any cline-yes">5x</span>
859
916
  <span class="cline-any cline-yes">5x</span>
860
- <span class="cline-any cline-yes">5x</span>
861
917
  <span class="cline-any cline-neutral">&nbsp;</span>
862
918
  <span class="cline-any cline-yes">5x</span>
863
919
  <span class="cline-any cline-yes">5x</span>
@@ -875,15 +931,15 @@
875
931
  <span class="cline-any cline-neutral">&nbsp;</span>
876
932
  <span class="cline-any cline-neutral">&nbsp;</span>
877
933
  <span class="cline-any cline-yes">36x</span>
878
- <span class="cline-any cline-yes">190x</span>
934
+ <span class="cline-any cline-yes">192x</span>
879
935
  <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-yes">190x</span>
881
- <span class="cline-any cline-yes">190x</span>
882
- <span class="cline-any cline-yes">380x</span>
883
- <span class="cline-any cline-yes">380x</span>
936
+ <span class="cline-any cline-yes">192x</span>
937
+ <span class="cline-any cline-yes">192x</span>
938
+ <span class="cline-any cline-yes">384x</span>
939
+ <span class="cline-any cline-yes">384x</span>
884
940
  <span class="cline-any cline-neutral">&nbsp;</span>
885
941
  <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-yes">190x</span>
942
+ <span class="cline-any cline-yes">192x</span>
887
943
  <span class="cline-any cline-neutral">&nbsp;</span>
888
944
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../db")
889
945
  const env = require("../../environment")
@@ -920,10 +976,7 @@ const {
920
976
  Replication,
921
977
  } = require("@budibase/backend-core/db")
922
978
  const { USERS_TABLE_SCHEMA } = require("../../constants")
923
- const {
924
- getDeployedApps,
925
- removeAppFromUserRoles,
926
- } = require("../../utilities/workerRequests")
979
+ const { removeAppFromUserRoles } = require("../../utilities/workerRequests")
927
980
  const { clientLibraryPath, stringToReadStream } = require("../../utilities")
928
981
  const { getAllLocks } = require("../../utilities/redis")
929
982
  const {
@@ -965,29 +1018,42 @@ function getUserRoleId(ctx) {
965
1018
  : ctx.user.role._id
966
1019
  }
967
1020
  &nbsp;
968
- async function getAppUrlIfNotInUse(ctx) {
1021
+ async function getAppUrl(ctx) {
1022
+ // construct the url
969
1023
  let url
970
1024
  <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.request.body.url) {
1025
+ // if the url is provided, use that
971
1026
  <span class="cstat-no" title="statement not covered" > url = encodeURI(ctx.request.body.url)</span>
972
1027
  } else if (ctx.request.body.name) {
1028
+ // otherwise use the name
973
1029
  url = encodeURI(`${ctx.request.body.name}`)
974
1030
  }
975
1031
  if (url) {
976
1032
  url = `/${url.replace(URL_REGEX_SLASH, "")}`.toLowerCase()
977
1033
  }
978
- if (!env.SELF_HOSTED) {
979
- return url
1034
+ return url
1035
+ }
1036
+ &nbsp;
1037
+ const checkAppUrl = (ctx, apps, url, currentAppId) =&gt; {
1038
+ if (currentAppId) {
1039
+ apps = apps.filter(app =&gt; app.appId !== currentAppId)
980
1040
  }
981
- const deployedApps = await getDeployedApps()
982
- <span class="missing-if-branch" title="if path not taken" >I</span>if (
983
- url &amp;&amp;
984
- deployedApps[url] != null &amp;&amp;
985
- <span class="branch-2 cbranch-no" title="branch not covered" > ctx.params != null </span>&amp;&amp;
986
- <span class="branch-3 cbranch-no" title="branch not covered" > deployedApps[url].appId !== ctx.params.appId</span>
987
- ) {
988
- <span class="cstat-no" title="statement not covered" > ctx.throw(400, "App name/URL is already in use.")</span>
1041
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (apps.some(app =&gt; app.url === url)) {
1042
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "App URL is already in use.")</span>
1043
+ }
1044
+ }
1045
+ &nbsp;
1046
+ const checkAppName = (ctx, apps, name, currentAppId) =&gt; {
1047
+ // TODO: Replace with Joi
1048
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!name) {
1049
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Name is required")</span>
1050
+ }
1051
+ if (currentAppId) {
1052
+ apps = apps.filter(app =&gt; app.appId !== currentAppId)
1053
+ }
1054
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (apps.some(app =&gt; app.name === name)) {
1055
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "App name is already in use.")</span>
989
1056
  }
990
- return url
991
1057
  }
992
1058
  &nbsp;
993
1059
  async function createInstance(template) {
@@ -1093,6 +1159,12 @@ exports.fetchAppPackage = async ctx =&gt; {
1093
1159
  }
1094
1160
  &nbsp;
1095
1161
  exports.create = async ctx =&gt; {
1162
+ const apps = await getAllApps(CouchDB, { dev: true })
1163
+ const name = ctx.request.body.name
1164
+ checkAppName(ctx, apps, name)
1165
+ const url = await getAppUrl(ctx)
1166
+ checkAppUrl(ctx, apps, url)
1167
+ &nbsp;
1096
1168
  const { useTemplate, templateKey, templateString } = ctx.request.body
1097
1169
  const instanceConfig = {
1098
1170
  useTemplate,
@@ -1105,7 +1177,6 @@ exports.create = async ctx =&gt; {
1105
1177
  const instance = await createInstance(instanceConfig)
1106
1178
  const appId = instance._id
1107
1179
  &nbsp;
1108
- const url = await getAppUrlIfNotInUse(ctx)
1109
1180
  const db = new CouchDB(appId)
1110
1181
  let _rev
1111
1182
  try {
@@ -1122,7 +1193,7 @@ exports.create = async ctx =&gt; {
1122
1193
  type: "app",
1123
1194
  version: packageJson.version,
1124
1195
  componentLibraries: ["@budibase/standard-components"],
1125
- name: ctx.request.body.name,
1196
+ name: name,
1126
1197
  url: url,
1127
1198
  template: ctx.request.body.template,
1128
1199
  instance: instance,
@@ -1149,8 +1220,22 @@ exports.create = async ctx =&gt; {
1149
1220
  ctx.body = newApplication
1150
1221
  }
1151
1222
  &nbsp;
1223
+ // This endpoint currently operates as a PATCH rather than a PUT
1224
+ // Thus name and url fields are handled only if present
1152
1225
  exports.update = async ctx =&gt; {
1153
- const data = await updateAppPackage(ctx, ctx.request.body, ctx.params.appId)
1226
+ const apps = await getAllApps(CouchDB, { dev: true })
1227
+ // validation
1228
+ const name = ctx.request.body.name
1229
+ if (name) {
1230
+ checkAppName(ctx, apps, name, ctx.params.appId)
1231
+ }
1232
+ const url = await getAppUrl(ctx)
1233
+ if (url) {
1234
+ checkAppUrl(ctx, apps, url, ctx.params.appId)
1235
+ ctx.request.body.url = url
1236
+ }
1237
+ &nbsp;
1238
+ const data = await updateAppPackage(ctx.request.body, ctx.params.appId)
1154
1239
  ctx.status = 200
1155
1240
  ctx.body = data
1156
1241
  }
@@ -1172,7 +1257,7 @@ exports.updateClient = async ctx =&gt; {
1172
1257
  version: packageJson.version,
1173
1258
  revertableVersion: currentVersion,
1174
1259
  }
1175
- const data = await updateAppPackage(ctx, appPackageUpdates, ctx.params.appId)
1260
+ const data = await updateAppPackage(appPackageUpdates, ctx.params.appId)
1176
1261
  ctx.status = 200
1177
1262
  ctx.body = data
1178
1263
  }
@@ -1195,7 +1280,7 @@ exports.revertClient = async ctx =&gt; {
1195
1280
  version: application.revertableVersion,
1196
1281
  revertableVersion: null,
1197
1282
  }
1198
- const data = await updateAppPackage(ctx, appPackageUpdates, ctx.params.appId)
1283
+ const data = await updateAppPackage(appPackageUpdates, ctx.params.appId)
1199
1284
  ctx.status = 200
1200
1285
  ctx.body = data
1201
1286
  }
@@ -1268,12 +1353,11 @@ exports.sync = <span class="fstat-no" title="function not covered" >as</span>ync
1268
1353
  }
1269
1354
  }
1270
1355
  &nbsp;
1271
- const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1272
- const url = await getAppUrlIfNotInUse(ctx)
1356
+ const updateAppPackage = async (appPackage, appId) =&gt; {
1273
1357
  const db = new CouchDB(appId)
1274
1358
  const application = await db.get(DocumentTypes.APP_METADATA)
1275
1359
  &nbsp;
1276
- const newAppPackage = { ...application, ...appPackage, url }
1360
+ const newAppPackage = { ...application, ...appPackage }
1277
1361
  if (appPackage._rev !== application._rev) {
1278
1362
  newAppPackage._rev = application._rev
1279
1363
  }
@@ -1306,7 +1390,7 @@ const createEmptyAppPackage = async (ctx, app) =&gt; {
1306
1390
  <div class='footer quiet pad2 space-top1 center small'>
1307
1391
  Code coverage generated by
1308
1392
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1309
- at Fri Jan 21 2022 11:26:59 GMT+0000 (Coordinated Universal Time)
1393
+ at Fri Jan 28 2022 15:12:12 GMT+0000 (Coordinated Universal Time)
1310
1394
  </div>
1311
1395
  </div>
1312
1396
  <script src="../../prettify.js"></script>
@@ -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 Fri Jan 21 2022 11:26:59 GMT+0000 (Coordinated Universal Time)
232
+ at Fri Jan 28 2022 15:12:12 GMT+0000 (Coordinated Universal Time)
233
233
  </div>
234
234
  </div>
235
235
  <script src="../../prettify.js"></script>
@@ -748,7 +748,7 @@ exports.test = async function (ctx) {
748
748
  <div class='footer quiet pad2 space-top1 center small'>
749
749
  Code coverage generated by
750
750
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
751
- at Fri Jan 21 2022 11:26:59 GMT+0000 (Coordinated Universal Time)
751
+ at Fri Jan 28 2022 15:12:12 GMT+0000 (Coordinated Universal Time)
752
752
  </div>
753
753
  </div>
754
754
  <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 Fri Jan 21 2022 11:26:59 GMT+0000 (Coordinated Universal Time)
94
+ at Fri Jan 28 2022 15:12:12 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  </div>
97
97
  <script src="../../prettify.js"></script>
@@ -406,7 +406,7 @@ exports.importApps = <span class="fstat-no" title="function not covered" >as</sp
406
406
  <div class='footer quiet pad2 space-top1 center small'>
407
407
  Code coverage generated by
408
408
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
409
- at Fri Jan 21 2022 11:26:59 GMT+0000 (Coordinated Universal Time)
409
+ at Fri Jan 28 2022 15:12:12 GMT+0000 (Coordinated Universal Time)
410
410
  </div>
411
411
  </div>
412
412
  <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">49x</span>
117
+ <span class="cline-any cline-yes">50x</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">48x</span>
121
- <span class="cline-any cline-yes">48x</span>
120
+ <span class="cline-any cline-yes">49x</span>
121
+ <span class="cline-any cline-yes">49x</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 Fri Jan 21 2022 11:26:59 GMT+0000 (Coordinated Universal Time)
172
+ at Fri Jan 28 2022 15:12:12 GMT+0000 (Coordinated Universal Time)
173
173
  </div>
174
174
  </div>
175
175
  <script src="../../prettify.js"></script>