@budibase/server 0.9.171 → 0.9.173-alpha.2

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 (261) hide show
  1. package/__mocks__/{mysql.ts → mysql2.ts} +0 -0
  2. package/builder/assets/{index.dbc6728e.css → index.7469e1e4.css} +2 -2
  3. package/builder/assets/{index.cf0febb9.js → index.8a8f7849.js} +34 -34
  4. package/builder/assets/{vendor.54435e8f.js → vendor.278a305c.js} +1 -1
  5. package/builder/index.html +3 -3
  6. package/coverage/clover.xml +973 -849
  7. package/coverage/coverage-final.json +47 -46
  8. package/coverage/lcov-report/api/controllers/analytics.js.html +21 -9
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/application.js.html +186 -84
  11. package/coverage/lcov-report/api/controllers/auth.js.html +37 -10
  12. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/backup.js.html +6 -9
  14. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/dev.js.html +41 -17
  18. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/index.html +71 -71
  20. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/permission.js.html +7 -4
  24. package/coverage/lcov-report/api/controllers/query.js.html +129 -24
  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 +15 -15
  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 +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +9 -9
  34. package/coverage/lcov-report/api/controllers/script.js.html +12 -57
  35. package/coverage/lcov-report/api/controllers/table/index.html +28 -28
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +16 -37
  37. package/coverage/lcov-report/api/controllers/table/utils.js.html +279 -33
  38. package/coverage/lcov-report/api/controllers/templates.js.html +49 -13
  39. package/coverage/lcov-report/api/controllers/user.js.html +3 -3
  40. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/index.html +19 -19
  42. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/utils.js.html +8 -8
  44. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +54 -15
  45. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  46. package/coverage/lcov-report/api/index.html +1 -1
  47. package/coverage/lcov-report/api/index.js.html +3 -3
  48. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/application.js.html +5 -2
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +26 -11
  59. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/index.html +9 -9
  61. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/query.js.html +9 -3
  67. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  78. package/coverage/lcov-report/automations/actions.js.html +31 -10
  79. package/coverage/lcov-report/automations/automationUtils.js.html +14 -86
  80. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  81. package/coverage/lcov-report/automations/index.html +37 -37
  82. package/coverage/lcov-report/automations/index.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/bash.js.html +10 -7
  84. package/coverage/lcov-report/automations/steps/createRow.js.html +2 -2
  85. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/deleteRow.js.html +8 -5
  87. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/executeQuery.js.html +10 -7
  89. package/coverage/lcov-report/automations/steps/executeScript.js.html +10 -7
  90. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/index.html +57 -57
  92. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +10 -7
  94. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -7
  95. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +10 -7
  96. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/updateRow.js.html +14 -14
  99. package/coverage/lcov-report/automations/steps/utils.js.html +10 -10
  100. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  101. package/coverage/lcov-report/automations/thread.js.html +54 -12
  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 +28 -28
  112. package/coverage/lcov-report/constants/index.html +1 -1
  113. package/coverage/lcov-report/constants/index.js.html +5 -2
  114. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  115. package/coverage/lcov-report/constants/screens.js.html +2 -2
  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 +12 -12
  121. package/coverage/lcov-report/db/linkedRows/index.html +18 -18
  122. package/coverage/lcov-report/db/linkedRows/index.js.html +47 -26
  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 +107 -107
  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 +2 -2
  135. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  136. package/coverage/lcov-report/middleware/currentapp.js.html +52 -25
  137. package/coverage/lcov-report/middleware/index.html +15 -15
  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/utilities/bcrypt.js.html +1 -1
  143. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  144. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  145. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  146. package/coverage/lcov-report/utilities/global.js.html +27 -27
  147. package/coverage/lcov-report/utilities/index.html +32 -17
  148. package/coverage/lcov-report/utilities/index.js.html +4 -4
  149. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +29 -8
  150. package/coverage/lcov-report/utilities/queue/index.html +15 -15
  151. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  152. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  153. package/coverage/lcov-report/utilities/rowProcessor/index.html +14 -14
  154. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +38 -8
  155. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  156. package/coverage/lcov-report/utilities/scriptRunner.js.html +143 -0
  157. package/coverage/lcov-report/utilities/security.js.html +1 -1
  158. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  159. package/coverage/lcov-report/utilities/users.js.html +1 -1
  160. package/coverage/lcov-report/utilities/workerRequests.js.html +19 -19
  161. package/coverage/lcov.info +1692 -1452
  162. package/dist/api/controllers/analytics.js +4 -0
  163. package/dist/api/controllers/application.js +185 -171
  164. package/dist/api/controllers/auth.js +12 -2
  165. package/dist/api/controllers/backup.js +4 -4
  166. package/dist/api/controllers/deploy/index.js +3 -16
  167. package/dist/api/controllers/dev.js +17 -11
  168. package/dist/api/controllers/permission.js +1 -0
  169. package/dist/api/controllers/query.js +26 -8
  170. package/dist/api/controllers/row/ExternalRequest.js +46 -5
  171. package/dist/api/controllers/script.js +4 -16
  172. package/dist/api/controllers/table/index.js +5 -10
  173. package/dist/api/controllers/table/utils.js +83 -10
  174. package/dist/api/controllers/templates.js +18 -3
  175. package/dist/api/controllers/view/viewBuilder.js +15 -1
  176. package/dist/api/routes/application.js +1 -0
  177. package/dist/api/routes/dev.js +8 -4
  178. package/dist/api/routes/query.js +3 -1
  179. package/dist/api/routes/tests/utilities/TestFunctions.js +7 -9
  180. package/dist/automations/actions.js +9 -3
  181. package/dist/automations/automationUtils.js +8 -29
  182. package/dist/automations/steps/bash.js +2 -1
  183. package/dist/automations/steps/createRow.js +1 -1
  184. package/dist/automations/steps/deleteRow.js +2 -1
  185. package/dist/automations/steps/executeQuery.js +2 -1
  186. package/dist/automations/steps/executeScript.js +2 -1
  187. package/dist/automations/steps/outgoingWebhook.js +2 -1
  188. package/dist/automations/steps/queryRows.js +2 -1
  189. package/dist/automations/steps/sendSmtpEmail.js +2 -1
  190. package/dist/automations/steps/updateRow.js +6 -2
  191. package/dist/automations/thread.js +14 -3
  192. package/dist/constants/index.js +1 -0
  193. package/dist/db/linkedRows/index.js +9 -6
  194. package/dist/integrations/base/sql.js +4 -4
  195. package/dist/integrations/mysql.js +1 -1
  196. package/dist/integrations/utils.js +17 -1
  197. package/dist/middleware/currentapp.js +8 -2
  198. package/dist/package.json +7 -6
  199. package/dist/tests/utilities/TestConfiguration.js +34 -19
  200. package/dist/tests/utilities/controllers.js +1 -0
  201. package/dist/tsconfig.tsbuildinfo +1 -1
  202. package/dist/utilities/fileSystem/index.js +49 -33
  203. package/dist/utilities/global.js +1 -1
  204. package/dist/utilities/queue/inMemoryQueue.js +6 -0
  205. package/dist/utilities/rowProcessor/index.js +8 -0
  206. package/dist/utilities/scriptRunner.js +19 -0
  207. package/package.json +8 -7
  208. package/scripts/jestSetup.js +2 -0
  209. package/src/api/controllers/analytics.js +4 -0
  210. package/src/api/controllers/application.js +43 -9
  211. package/src/api/controllers/auth.js +12 -3
  212. package/src/api/controllers/backup.js +4 -5
  213. package/src/api/controllers/deploy/index.js +3 -18
  214. package/src/api/controllers/dev.js +16 -8
  215. package/src/api/controllers/permission.js +1 -0
  216. package/src/api/controllers/query.js +46 -11
  217. package/src/api/controllers/row/ExternalRequest.ts +53 -4
  218. package/src/api/controllers/script.js +4 -19
  219. package/src/api/controllers/table/index.js +5 -12
  220. package/src/api/controllers/table/utils.js +94 -12
  221. package/src/api/controllers/templates.js +17 -5
  222. package/src/api/controllers/view/tests/__snapshots__/viewBuilder.spec.js.snap +1 -1
  223. package/src/api/controllers/view/viewBuilder.js +14 -1
  224. package/src/api/routes/application.js +1 -0
  225. package/src/api/routes/dev.js +9 -4
  226. package/src/api/routes/query.js +3 -1
  227. package/src/api/routes/tests/auth.spec.js +1 -2
  228. package/src/api/routes/tests/permissions.spec.js +3 -0
  229. package/src/api/routes/tests/query.spec.js +2 -2
  230. package/src/api/routes/tests/routing.spec.js +24 -8
  231. package/src/api/routes/tests/user.spec.js +1 -1
  232. package/src/api/routes/tests/utilities/TestFunctions.js +7 -9
  233. package/src/api/routes/tests/webhook.spec.js +4 -1
  234. package/src/automations/actions.js +10 -3
  235. package/src/automations/automationUtils.js +7 -31
  236. package/src/automations/steps/bash.js +2 -1
  237. package/src/automations/steps/createRow.js +1 -1
  238. package/src/automations/steps/deleteRow.js +2 -1
  239. package/src/automations/steps/executeQuery.js +2 -1
  240. package/src/automations/steps/executeScript.js +2 -1
  241. package/src/automations/steps/outgoingWebhook.js +2 -1
  242. package/src/automations/steps/queryRows.js +2 -1
  243. package/src/automations/steps/sendSmtpEmail.js +2 -1
  244. package/src/automations/steps/updateRow.js +6 -6
  245. package/src/automations/thread.js +17 -3
  246. package/src/constants/index.js +1 -0
  247. package/src/db/linkedRows/index.js +14 -7
  248. package/src/integrations/base/sql.ts +11 -3
  249. package/src/integrations/mysql.ts +1 -1
  250. package/src/integrations/tests/mongo.spec.js +10 -6
  251. package/src/integrations/tests/mysql.spec.js +1 -1
  252. package/src/integrations/utils.ts +18 -0
  253. package/src/middleware/currentapp.js +11 -2
  254. package/src/middleware/tests/currentapp.spec.js +3 -3
  255. package/src/tests/utilities/TestConfiguration.js +47 -19
  256. package/src/tests/utilities/controllers.js +1 -0
  257. package/src/utilities/fileSystem/index.js +65 -43
  258. package/src/utilities/global.js +1 -1
  259. package/src/utilities/queue/inMemoryQueue.js +7 -0
  260. package/src/utilities/rowProcessor/index.js +10 -0
  261. package/src/utilities/scriptRunner.js +21 -0
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">50% </span>
26
+ <span class="strong">46.15% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>6/12</span>
28
+ <span class='fraction'>6/13</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">36.36% </span>
33
+ <span class="strong">30.77% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>4/11</span>
35
+ <span class='fraction'>4/13</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">50% </span>
47
+ <span class="strong">46.15% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>6/12</span>
49
+ <span class='fraction'>6/13</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line medium'></div>
58
+ <div class='status-line low'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -92,7 +92,11 @@
92
92
  <a name='L33'></a><a href='#L33'>33</a>
93
93
  <a name='L34'></a><a href='#L34'>34</a>
94
94
  <a name='L35'></a><a href='#L35'>35</a>
95
- <a name='L36'></a><a href='#L36'>36</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
95
+ <a name='L36'></a><a href='#L36'>36</a>
96
+ <a name='L37'></a><a href='#L37'>37</a>
97
+ <a name='L38'></a><a href='#L38'>38</a>
98
+ <a name='L39'></a><a href='#L39'>39</a>
99
+ <a name='L40'></a><a href='#L40'>40</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
96
100
  <span class="cline-any cline-yes">23x</span>
97
101
  <span class="cline-any cline-neutral">&nbsp;</span>
98
102
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -119,6 +123,10 @@
119
123
  <span class="cline-any cline-neutral">&nbsp;</span>
120
124
  <span class="cline-any cline-neutral">&nbsp;</span>
121
125
  <span class="cline-any cline-neutral">&nbsp;</span>
126
+ <span class="cline-any cline-no">&nbsp;</span>
127
+ <span class="cline-any cline-neutral">&nbsp;</span>
128
+ <span class="cline-any cline-neutral">&nbsp;</span>
129
+ <span class="cline-any cline-neutral">&nbsp;</span>
122
130
  <span class="cline-any cline-neutral">&nbsp;</span>
123
131
  <span class="cline-any cline-neutral">&nbsp;</span>
124
132
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -150,6 +158,10 @@ exports.endUserPing = <span class="fstat-no" title="function not covered" >as</s
150
158
  <span class="cstat-no" title="statement not covered" > return</span>
151
159
  }
152
160
  &nbsp;
161
+ <span class="cstat-no" title="statement not covered" > posthogClient.identify({</span>
162
+ distinctId: ctx.user &amp;&amp; ctx.user._id,
163
+ properties: {},
164
+ })
153
165
  <span class="cstat-no" title="statement not covered" > posthogClient.capture({</span>
154
166
  event: "budibase:end_user_ping",
155
167
  distinctId: ctx.user &amp;&amp; ctx.user._id,
@@ -169,7 +181,7 @@ exports.endUserPing = <span class="fstat-no" title="function not covered" >as</s
169
181
  <div class='footer quiet pad2 space-top1 center small'>
170
182
  Code coverage generated by
171
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
172
- at Wed Oct 20 2021 13:34:18 GMT+0000 (Coordinated Universal Time)
184
+ at Wed Oct 27 2021 08:59:08 GMT+0000 (Coordinated Universal Time)
173
185
  </div>
174
186
  </div>
175
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 Wed Oct 20 2021 13:34:18 GMT+0000 (Coordinated Universal Time)
229
+ at Wed Oct 27 2021 08:59:08 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">86.45% </span>
26
+ <span class="strong">82.14% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>134/155</span>
28
+ <span class='fraction'>138/168</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">59.68% </span>
33
+ <span class="strong">59.09% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>37/62</span>
35
+ <span class='fraction'>39/66</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">94.44% </span>
40
+ <span class="strong">85% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>17/18</span>
42
+ <span class='fraction'>17/20</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">87.01% </span>
47
+ <span class="strong">82.63% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>134/154</span>
49
+ <span class='fraction'>138/167</span>
50
50
  </div>
51
51
 
52
52
 
@@ -409,7 +409,41 @@
409
409
  <a name='L350'></a><a href='#L350'>350</a>
410
410
  <a name='L351'></a><a href='#L351'>351</a>
411
411
  <a name='L352'></a><a href='#L352'>352</a>
412
- <a name='L353'></a><a href='#L353'>353</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
412
+ <a name='L353'></a><a href='#L353'>353</a>
413
+ <a name='L354'></a><a href='#L354'>354</a>
414
+ <a name='L355'></a><a href='#L355'>355</a>
415
+ <a name='L356'></a><a href='#L356'>356</a>
416
+ <a name='L357'></a><a href='#L357'>357</a>
417
+ <a name='L358'></a><a href='#L358'>358</a>
418
+ <a name='L359'></a><a href='#L359'>359</a>
419
+ <a name='L360'></a><a href='#L360'>360</a>
420
+ <a name='L361'></a><a href='#L361'>361</a>
421
+ <a name='L362'></a><a href='#L362'>362</a>
422
+ <a name='L363'></a><a href='#L363'>363</a>
423
+ <a name='L364'></a><a href='#L364'>364</a>
424
+ <a name='L365'></a><a href='#L365'>365</a>
425
+ <a name='L366'></a><a href='#L366'>366</a>
426
+ <a name='L367'></a><a href='#L367'>367</a>
427
+ <a name='L368'></a><a href='#L368'>368</a>
428
+ <a name='L369'></a><a href='#L369'>369</a>
429
+ <a name='L370'></a><a href='#L370'>370</a>
430
+ <a name='L371'></a><a href='#L371'>371</a>
431
+ <a name='L372'></a><a href='#L372'>372</a>
432
+ <a name='L373'></a><a href='#L373'>373</a>
433
+ <a name='L374'></a><a href='#L374'>374</a>
434
+ <a name='L375'></a><a href='#L375'>375</a>
435
+ <a name='L376'></a><a href='#L376'>376</a>
436
+ <a name='L377'></a><a href='#L377'>377</a>
437
+ <a name='L378'></a><a href='#L378'>378</a>
438
+ <a name='L379'></a><a href='#L379'>379</a>
439
+ <a name='L380'></a><a href='#L380'>380</a>
440
+ <a name='L381'></a><a href='#L381'>381</a>
441
+ <a name='L382'></a><a href='#L382'>382</a>
442
+ <a name='L383'></a><a href='#L383'>383</a>
443
+ <a name='L384'></a><a href='#L384'>384</a>
444
+ <a name='L385'></a><a href='#L385'>385</a>
445
+ <a name='L386'></a><a href='#L386'>386</a>
446
+ <a name='L387'></a><a href='#L387'>387</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
413
447
  <span class="cline-any cline-yes">33x</span>
414
448
  <span class="cline-any cline-yes">33x</span>
415
449
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -436,6 +470,11 @@
436
470
  <span class="cline-any cline-yes">33x</span>
437
471
  <span class="cline-any cline-yes">33x</span>
438
472
  <span class="cline-any cline-yes">33x</span>
473
+ <span class="cline-any cline-neutral">&nbsp;</span>
474
+ <span class="cline-any cline-neutral">&nbsp;</span>
475
+ <span class="cline-any cline-neutral">&nbsp;</span>
476
+ <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
478
  <span class="cline-any cline-yes">33x</span>
440
479
  <span class="cline-any cline-yes">33x</span>
441
480
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -455,46 +494,46 @@
455
494
  <span class="cline-any cline-neutral">&nbsp;</span>
456
495
  <span class="cline-any cline-neutral">&nbsp;</span>
457
496
  <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-yes">3x</span>
497
+ <span class="cline-any cline-yes">188x</span>
459
498
  <span class="cline-any cline-neutral">&nbsp;</span>
460
499
  <span class="cline-any cline-neutral">&nbsp;</span>
461
500
  <span class="cline-any cline-neutral">&nbsp;</span>
462
501
  <span class="cline-any cline-neutral">&nbsp;</span>
463
502
  <span class="cline-any cline-neutral">&nbsp;</span>
464
- <span class="cline-any cline-yes">6x</span>
503
+ <span class="cline-any cline-yes">376x</span>
465
504
  <span class="cline-any cline-neutral">&nbsp;</span>
466
505
  <span class="cline-any cline-neutral">&nbsp;</span>
467
506
  <span class="cline-any cline-neutral">&nbsp;</span>
468
- <span class="cline-any cline-yes">3x</span>
507
+ <span class="cline-any cline-yes">188x</span>
469
508
  <span class="cline-any cline-neutral">&nbsp;</span>
470
509
  <span class="cline-any cline-neutral">&nbsp;</span>
471
510
  <span class="cline-any cline-neutral">&nbsp;</span>
472
511
  <span class="cline-any cline-neutral">&nbsp;</span>
473
512
  <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-yes">3x</span>
513
+ <span class="cline-any cline-yes">200x</span>
475
514
  <span class="cline-any cline-neutral">&nbsp;</span>
476
515
  <span class="cline-any cline-neutral">&nbsp;</span>
477
516
  <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-yes">1x</span>
517
+ <span class="cline-any cline-yes">186x</span>
479
518
  <span class="cline-any cline-neutral">&nbsp;</span>
480
519
  <span class="cline-any cline-neutral">&nbsp;</span>
481
520
  <span class="cline-any cline-neutral">&nbsp;</span>
482
521
  <span class="cline-any cline-neutral">&nbsp;</span>
483
522
  <span class="cline-any cline-neutral">&nbsp;</span>
484
523
  <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-yes">181x</span>
524
+ <span class="cline-any cline-yes">183x</span>
486
525
  <span class="cline-any cline-no">&nbsp;</span>
487
- <span class="cline-any cline-yes">181x</span>
488
- <span class="cline-any cline-yes">178x</span>
526
+ <span class="cline-any cline-yes">183x</span>
527
+ <span class="cline-any cline-yes">180x</span>
489
528
  <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-yes">181x</span>
491
- <span class="cline-any cline-yes">178x</span>
529
+ <span class="cline-any cline-yes">183x</span>
530
+ <span class="cline-any cline-yes">180x</span>
492
531
  <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-yes">181x</span>
532
+ <span class="cline-any cline-yes">183x</span>
494
533
  <span class="cline-any cline-yes">10x</span>
495
534
  <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-yes">171x</span>
497
- <span class="cline-any cline-yes">171x</span>
535
+ <span class="cline-any cline-yes">173x</span>
536
+ <span class="cline-any cline-yes">173x</span>
498
537
  <span class="cline-any cline-neutral">&nbsp;</span>
499
538
  <span class="cline-any cline-neutral">&nbsp;</span>
500
539
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -502,16 +541,16 @@
502
541
  <span class="cline-any cline-neutral">&nbsp;</span>
503
542
  <span class="cline-any cline-no">&nbsp;</span>
504
543
  <span class="cline-any cline-neutral">&nbsp;</span>
505
- <span class="cline-any cline-yes">171x</span>
544
+ <span class="cline-any cline-yes">173x</span>
506
545
  <span class="cline-any cline-neutral">&nbsp;</span>
507
546
  <span class="cline-any cline-neutral">&nbsp;</span>
508
547
  <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-yes">176x</span>
510
- <span class="cline-any cline-yes">176x</span>
511
- <span class="cline-any cline-yes">176x</span>
548
+ <span class="cline-any cline-yes">178x</span>
549
+ <span class="cline-any cline-yes">178x</span>
550
+ <span class="cline-any cline-yes">178x</span>
512
551
  <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-yes">176x</span>
514
- <span class="cline-any cline-yes">176x</span>
552
+ <span class="cline-any cline-yes">178x</span>
553
+ <span class="cline-any cline-yes">178x</span>
515
554
  <span class="cline-any cline-neutral">&nbsp;</span>
516
555
  <span class="cline-any cline-neutral">&nbsp;</span>
517
556
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -520,18 +559,18 @@
520
559
  <span class="cline-any cline-neutral">&nbsp;</span>
521
560
  <span class="cline-any cline-neutral">&nbsp;</span>
522
561
  <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-yes">176x</span>
524
- <span class="cline-any cline-yes">176x</span>
525
- <span class="cline-any cline-yes">176x</span>
562
+ <span class="cline-any cline-yes">178x</span>
563
+ <span class="cline-any cline-yes">178x</span>
564
+ <span class="cline-any cline-yes">178x</span>
526
565
  <span class="cline-any cline-neutral">&nbsp;</span>
527
566
  <span class="cline-any cline-neutral">&nbsp;</span>
528
567
  <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-yes">176x</span>
568
+ <span class="cline-any cline-yes">178x</span>
530
569
  <span class="cline-any cline-no">&nbsp;</span>
531
570
  <span class="cline-any cline-no">&nbsp;</span>
532
571
  <span class="cline-any cline-no">&nbsp;</span>
533
572
  <span class="cline-any cline-neutral">&nbsp;</span>
534
- <span class="cline-any cline-yes">176x</span>
573
+ <span class="cline-any cline-yes">178x</span>
535
574
  <span class="cline-any cline-neutral">&nbsp;</span>
536
575
  <span class="cline-any cline-neutral">&nbsp;</span>
537
576
  <span class="cline-any cline-no">&nbsp;</span>
@@ -539,10 +578,10 @@
539
578
  <span class="cline-any cline-neutral">&nbsp;</span>
540
579
  <span class="cline-any cline-neutral">&nbsp;</span>
541
580
  <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-yes">176x</span>
581
+ <span class="cline-any cline-yes">178x</span>
543
582
  <span class="cline-any cline-neutral">&nbsp;</span>
544
583
  <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-yes">176x</span>
584
+ <span class="cline-any cline-yes">178x</span>
546
585
  <span class="cline-any cline-neutral">&nbsp;</span>
547
586
  <span class="cline-any cline-neutral">&nbsp;</span>
548
587
  <span class="cline-any cline-yes">33x</span>
@@ -587,19 +626,19 @@
587
626
  <span class="cline-any cline-neutral">&nbsp;</span>
588
627
  <span class="cline-any cline-neutral">&nbsp;</span>
589
628
  <span class="cline-any cline-yes">33x</span>
590
- <span class="cline-any cline-yes">2x</span>
591
- <span class="cline-any cline-yes">2x</span>
592
- <span class="cline-any cline-yes">2x</span>
593
- <span class="cline-any cline-yes">2x</span>
629
+ <span class="cline-any cline-yes">187x</span>
630
+ <span class="cline-any cline-yes">187x</span>
631
+ <span class="cline-any cline-yes">187x</span>
632
+ <span class="cline-any cline-yes">187x</span>
594
633
  <span class="cline-any cline-neutral">&nbsp;</span>
595
634
  <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-yes">2x</span>
597
- <span class="cline-any cline-no">&nbsp;</span>
598
- <span class="cline-any cline-no">&nbsp;</span>
599
- <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-yes">187x</span>
636
+ <span class="cline-any cline-yes">185x</span>
637
+ <span class="cline-any cline-yes">185x</span>
638
+ <span class="cline-any cline-yes">185x</span>
600
639
  <span class="cline-any cline-neutral">&nbsp;</span>
601
640
  <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-yes">2x</span>
641
+ <span class="cline-any cline-yes">187x</span>
603
642
  <span class="cline-any cline-neutral">&nbsp;</span>
604
643
  <span class="cline-any cline-neutral">&nbsp;</span>
605
644
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -608,29 +647,29 @@
608
647
  <span class="cline-any cline-neutral">&nbsp;</span>
609
648
  <span class="cline-any cline-neutral">&nbsp;</span>
610
649
  <span class="cline-any cline-yes">33x</span>
611
- <span class="cline-any cline-yes">176x</span>
612
- <span class="cline-any cline-yes">176x</span>
650
+ <span class="cline-any cline-yes">178x</span>
651
+ <span class="cline-any cline-yes">178x</span>
613
652
  <span class="cline-any cline-neutral">&nbsp;</span>
614
653
  <span class="cline-any cline-neutral">&nbsp;</span>
615
654
  <span class="cline-any cline-neutral">&nbsp;</span>
616
655
  <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-yes">176x</span>
656
+ <span class="cline-any cline-yes">178x</span>
618
657
  <span class="cline-any cline-no">&nbsp;</span>
619
658
  <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-yes">176x</span>
621
- <span class="cline-any cline-yes">176x</span>
659
+ <span class="cline-any cline-yes">178x</span>
660
+ <span class="cline-any cline-yes">178x</span>
622
661
  <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-yes">176x</span>
624
- <span class="cline-any cline-yes">176x</span>
662
+ <span class="cline-any cline-yes">178x</span>
663
+ <span class="cline-any cline-yes">178x</span>
625
664
  <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-yes">176x</span>
665
+ <span class="cline-any cline-yes">178x</span>
627
666
  <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-yes">176x</span>
667
+ <span class="cline-any cline-yes">178x</span>
629
668
  <span class="cline-any cline-no">&nbsp;</span>
630
669
  <span class="cline-any cline-neutral">&nbsp;</span>
631
670
  <span class="cline-any cline-neutral">&nbsp;</span>
632
671
  <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-yes">176x</span>
672
+ <span class="cline-any cline-yes">178x</span>
634
673
  <span class="cline-any cline-neutral">&nbsp;</span>
635
674
  <span class="cline-any cline-neutral">&nbsp;</span>
636
675
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -645,13 +684,13 @@
645
684
  <span class="cline-any cline-neutral">&nbsp;</span>
646
685
  <span class="cline-any cline-neutral">&nbsp;</span>
647
686
  <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-yes">176x</span>
649
- <span class="cline-any cline-yes">176x</span>
687
+ <span class="cline-any cline-yes">178x</span>
688
+ <span class="cline-any cline-yes">178x</span>
650
689
  <span class="cline-any cline-neutral">&nbsp;</span>
651
690
  <span class="cline-any cline-neutral">&nbsp;</span>
652
691
  <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-yes">176x</span>
654
- <span class="cline-any cline-yes">176x</span>
692
+ <span class="cline-any cline-yes">178x</span>
693
+ <span class="cline-any cline-yes">178x</span>
655
694
  <span class="cline-any cline-neutral">&nbsp;</span>
656
695
  <span class="cline-any cline-neutral">&nbsp;</span>
657
696
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -659,8 +698,8 @@
659
698
  <span class="cline-any cline-neutral">&nbsp;</span>
660
699
  <span class="cline-any cline-neutral">&nbsp;</span>
661
700
  <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-yes">176x</span>
663
- <span class="cline-any cline-yes">176x</span>
701
+ <span class="cline-any cline-yes">178x</span>
702
+ <span class="cline-any cline-yes">178x</span>
664
703
  <span class="cline-any cline-neutral">&nbsp;</span>
665
704
  <span class="cline-any cline-neutral">&nbsp;</span>
666
705
  <span class="cline-any cline-yes">33x</span>
@@ -730,6 +769,35 @@
730
769
  <span class="cline-any cline-neutral">&nbsp;</span>
731
770
  <span class="cline-any cline-neutral">&nbsp;</span>
732
771
  <span class="cline-any cline-yes">33x</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-no">&nbsp;</span>
774
+ <span class="cline-any cline-no">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-no">&nbsp;</span>
777
+ <span class="cline-any cline-no">&nbsp;</span>
778
+ <span class="cline-any cline-neutral">&nbsp;</span>
779
+ <span class="cline-any cline-neutral">&nbsp;</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-neutral">&nbsp;</span>
782
+ <span class="cline-any cline-no">&nbsp;</span>
783
+ <span class="cline-any cline-no">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-no">&nbsp;</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-no">&nbsp;</span>
792
+ <span class="cline-any cline-no">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-no">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-neutral">&nbsp;</span>
800
+ <span class="cline-any cline-yes">33x</span>
733
801
  <span class="cline-any cline-yes">5x</span>
734
802
  <span class="cline-any cline-yes">5x</span>
735
803
  <span class="cline-any cline-yes">5x</span>
@@ -747,19 +815,19 @@
747
815
  <span class="cline-any cline-neutral">&nbsp;</span>
748
816
  <span class="cline-any cline-neutral">&nbsp;</span>
749
817
  <span class="cline-any cline-yes">33x</span>
750
- <span class="cline-any cline-yes">176x</span>
818
+ <span class="cline-any cline-yes">178x</span>
751
819
  <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-yes">176x</span>
753
- <span class="cline-any cline-yes">176x</span>
754
- <span class="cline-any cline-yes">352x</span>
755
- <span class="cline-any cline-yes">352x</span>
820
+ <span class="cline-any cline-yes">178x</span>
821
+ <span class="cline-any cline-yes">178x</span>
822
+ <span class="cline-any cline-yes">356x</span>
823
+ <span class="cline-any cline-yes">356x</span>
756
824
  <span class="cline-any cline-neutral">&nbsp;</span>
757
825
  <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-yes">176x</span>
759
- <span class="cline-any cline-yes">176x</span>
760
- <span class="cline-any cline-yes">176x</span>
826
+ <span class="cline-any cline-yes">178x</span>
827
+ <span class="cline-any cline-yes">178x</span>
828
+ <span class="cline-any cline-yes">178x</span>
761
829
  <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-yes">176x</span>
830
+ <span class="cline-any cline-yes">178x</span>
763
831
  <span class="cline-any cline-neutral">&nbsp;</span>
764
832
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../db")
765
833
  const env = require("../../environment")
@@ -788,7 +856,12 @@ const { BASE_LAYOUTS } = require("../../constants/layouts")
788
856
  const { createHomeScreen } = require("../../constants/screens")
789
857
  const { cloneDeep } = require("lodash/fp")
790
858
  const { processObject } = require("@budibase/string-templates")
791
- const { getAllApps } = require("@budibase/auth/db")
859
+ const {
860
+ getAllApps,
861
+ isDevAppID,
862
+ getDeployedAppID,
863
+ Replication,
864
+ } = require("@budibase/auth/db")
792
865
  const { USERS_TABLE_SCHEMA } = require("../../constants")
793
866
  const {
794
867
  getDeployedApps,
@@ -828,7 +901,7 @@ async function getScreens(db) {
828
901
  &nbsp;
829
902
  function getUserRoleId(ctx) {
830
903
  return !ctx.user.role || !ctx.user.role._id
831
- ? <span class="branch-0 cbranch-no" title="branch not covered" >BUILTIN_ROLE_IDS.PUBLIC</span>
904
+ ? BUILTIN_ROLE_IDS.PUBLIC
832
905
  : ctx.user.role._id
833
906
  }
834
907
  &nbsp;
@@ -897,7 +970,7 @@ async function createInstance(template) {
897
970
  return { _id: appId }
898
971
  }
899
972
  &nbsp;
900
- exports.fetch = async function (ctx) {
973
+ exports.fetch = async ctx =&gt; {
901
974
  const dev = ctx.query &amp;&amp; ctx.query.status === AppStatus.DEV
902
975
  const all = ctx.query &amp;&amp; ctx.query.status === AppStatus.ALL
903
976
  const apps = await getAllApps(CouchDB, { dev, all })
@@ -922,7 +995,7 @@ exports.fetch = async function (ctx) {
922
995
  ctx.body = apps
923
996
  }
924
997
  &nbsp;
925
- exports.fetchAppDefinition = async function (ctx) {
998
+ exports.fetchAppDefinition = async ctx =&gt; {
926
999
  const db = new CouchDB(ctx.params.appId)
927
1000
  const layouts = await getLayouts(db)
928
1001
  const userRoleId = getUserRoleId(ctx)
@@ -938,17 +1011,17 @@ exports.fetchAppDefinition = async function (ctx) {
938
1011
  }
939
1012
  }
940
1013
  &nbsp;
941
- exports.fetchAppPackage = async function (ctx) {
1014
+ exports.fetchAppPackage = async ctx =&gt; {
942
1015
  const db = new CouchDB(ctx.params.appId)
943
1016
  const application = await db.get(DocumentTypes.APP_METADATA)
944
1017
  const layouts = await getLayouts(db)
945
1018
  let screens = await getScreens(db)
946
1019
  &nbsp;
947
1020
  // Only filter screens if the user is not a builder
948
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!(ctx.user.builder &amp;&amp; ctx.user.builder.global)) {
949
- const userRoleId = <span class="cstat-no" title="statement not covered" >getUserRoleId(ctx)</span>
950
- const accessController = <span class="cstat-no" title="statement not covered" >new AccessController(ctx.params.appId)</span>
951
- <span class="cstat-no" title="statement not covered" > screens = await accessController.checkScreensAccess(screens, userRoleId)</span>
1021
+ if (!(ctx.user.builder &amp;&amp; ctx.user.builder.global)) {
1022
+ const userRoleId = getUserRoleId(ctx)
1023
+ const accessController = new AccessController(ctx.params.appId)
1024
+ screens = await accessController.checkScreensAccess(screens, userRoleId)
952
1025
  }
953
1026
  &nbsp;
954
1027
  ctx.body = {
@@ -959,7 +1032,7 @@ exports.fetchAppPackage = async function (ctx) {
959
1032
  }
960
1033
  }
961
1034
  &nbsp;
962
- exports.create = async function (ctx) {
1035
+ exports.create = async ctx =&gt; {
963
1036
  const { useTemplate, templateKey, templateString } = ctx.request.body
964
1037
  const instanceConfig = {
965
1038
  useTemplate,
@@ -1015,13 +1088,13 @@ exports.create = async function (ctx) {
1015
1088
  ctx.body = newApplication
1016
1089
  }
1017
1090
  &nbsp;
1018
- exports.update = async function (ctx) {
1091
+ exports.update = async ctx =&gt; {
1019
1092
  const data = await updateAppPackage(ctx, ctx.request.body, ctx.params.appId)
1020
1093
  ctx.status = 200
1021
1094
  ctx.body = data
1022
1095
  }
1023
1096
  &nbsp;
1024
- exports.updateClient = async function (ctx) {
1097
+ exports.updateClient = async ctx =&gt; {
1025
1098
  // Get current app version
1026
1099
  const db = new CouchDB(ctx.params.appId)
1027
1100
  const application = await db.get(DocumentTypes.APP_METADATA)
@@ -1043,7 +1116,7 @@ exports.updateClient = async function (ctx) {
1043
1116
  ctx.body = data
1044
1117
  }
1045
1118
  &nbsp;
1046
- exports.revertClient = async function (ctx) {
1119
+ exports.revertClient = async ctx =&gt; {
1047
1120
  // Check app can be reverted
1048
1121
  const db = new CouchDB(ctx.params.appId)
1049
1122
  const application = await db.get(DocumentTypes.APP_METADATA)
@@ -1066,7 +1139,7 @@ exports.revertClient = async function (ctx) {
1066
1139
  ctx.body = data
1067
1140
  }
1068
1141
  &nbsp;
1069
- exports.delete = async function (ctx) {
1142
+ exports.delete = async ctx =&gt; {
1070
1143
  const db = new CouchDB(ctx.params.appId)
1071
1144
  &nbsp;
1072
1145
  const result = await db.destroy()
@@ -1081,6 +1154,35 @@ exports.delete = async function (ctx) {
1081
1154
  ctx.body = result
1082
1155
  }
1083
1156
  &nbsp;
1157
+ exports.sync = <span class="fstat-no" title="function not covered" >as</span>ync ctx =&gt; {
1158
+ const appId = <span class="cstat-no" title="statement not covered" >ctx.params.appId</span>
1159
+ <span class="cstat-no" title="statement not covered" > if (!isDevAppID(appId)) {</span>
1160
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "This action cannot be performed for production apps")</span>
1161
+ }
1162
+ const prodAppId = <span class="cstat-no" title="statement not covered" >getDeployedAppID(appId)</span>
1163
+ const replication = <span class="cstat-no" title="statement not covered" >new Replication({</span>
1164
+ source: prodAppId,
1165
+ target: appId,
1166
+ })
1167
+ let error
1168
+ <span class="cstat-no" title="statement not covered" > try {</span>
1169
+ <span class="cstat-no" title="statement not covered" > await replication.replicate({</span>
1170
+ filter: <span class="fstat-no" title="function not covered" >fu</span>nction (doc) {
1171
+ <span class="cstat-no" title="statement not covered" > return doc._id !== DocumentTypes.APP_METADATA</span>
1172
+ },
1173
+ })
1174
+ } catch (err) {
1175
+ <span class="cstat-no" title="statement not covered" > error = err</span>
1176
+ }
1177
+ <span class="cstat-no" title="statement not covered" > if (error) {</span>
1178
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, error)</span>
1179
+ } else {
1180
+ <span class="cstat-no" title="statement not covered" > ctx.body = {</span>
1181
+ message: "App sync completed successfully.",
1182
+ }
1183
+ }
1184
+ }
1185
+ &nbsp;
1084
1186
  const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1085
1187
  const url = await getAppUrlIfNotInUse(ctx)
1086
1188
  const db = new CouchDB(appId)
@@ -1120,7 +1222,7 @@ const createEmptyAppPackage = async (ctx, app) =&gt; {
1120
1222
  <div class='footer quiet pad2 space-top1 center small'>
1121
1223
  Code coverage generated by
1122
1224
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1123
- at Wed Oct 20 2021 13:34:18 GMT+0000 (Coordinated Universal Time)
1225
+ at Wed Oct 27 2021 08:59:08 GMT+0000 (Coordinated Universal Time)
1124
1226
  </div>
1125
1227
  </div>
1126
1228
  <script src="../../prettify.js"></script>