@budibase/server 0.9.188 → 0.9.190-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/Dockerfile +7 -1
  2. package/__mocks__/mssql.ts +1 -1
  3. package/__mocks__/oracledb.ts +31 -0
  4. package/__mocks__/pg.ts +3 -0
  5. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  6. package/builder/assets/index.2bd3b345.js +1316 -0
  7. package/builder/assets/index.4fb3f887.css +1 -0
  8. package/builder/assets/oracle.66592424.png +0 -0
  9. package/builder/assets/vendor.470042a4.js +152 -0
  10. package/builder/assets/vendor.5e1fe644.css +1 -0
  11. package/builder/index.html +4 -4
  12. package/coverage/clover.xml +1608 -1191
  13. package/coverage/coverage-final.json +97 -93
  14. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  15. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  16. package/coverage/lcov-report/api/controllers/application.js.html +113 -80
  17. package/coverage/lcov-report/api/controllers/auth.js.html +19 -10
  18. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  19. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  22. package/coverage/lcov-report/api/controllers/datasource.js.html +245 -41
  23. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  24. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  25. package/coverage/lcov-report/api/controllers/index.html +98 -98
  26. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
  28. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  29. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  30. package/coverage/lcov-report/api/controllers/query.js.html +79 -229
  31. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  32. package/coverage/lcov-report/api/controllers/routing.js.html +29 -29
  33. package/coverage/lcov-report/api/controllers/row/external.js.html +17 -8
  34. package/coverage/lcov-report/api/controllers/row/index.html +26 -26
  35. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  36. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  37. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  38. package/coverage/lcov-report/api/controllers/row/utils.js.html +21 -30
  39. package/coverage/lcov-report/api/controllers/screen.js.html +3 -3
  40. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  41. package/coverage/lcov-report/api/controllers/table/external.js.html +1001 -0
  42. package/coverage/lcov-report/api/controllers/table/index.html +56 -26
  43. package/coverage/lcov-report/api/controllers/table/index.js.html +80 -350
  44. package/coverage/lcov-report/api/controllers/table/internal.js.html +533 -0
  45. package/coverage/lcov-report/api/controllers/table/utils.js.html +175 -52
  46. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  47. package/coverage/lcov-report/api/controllers/user.js.html +390 -33
  48. package/coverage/lcov-report/api/controllers/view/exporters.js.html +19 -4
  49. package/coverage/lcov-report/api/controllers/view/index.html +22 -22
  50. package/coverage/lcov-report/api/controllers/view/index.js.html +52 -13
  51. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  52. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  53. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  54. package/coverage/lcov-report/api/index.html +1 -1
  55. package/coverage/lcov-report/api/index.js.html +5 -5
  56. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  67. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/index.html +4 -4
  69. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  75. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/row.js.html +536 -2
  78. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  81. package/coverage/lcov-report/api/routes/table.js.html +464 -2
  82. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/user.js.html +17 -2
  84. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  85. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  86. package/coverage/lcov-report/automations/actions.js.html +2 -2
  87. package/coverage/lcov-report/automations/automationUtils.js.html +4 -4
  88. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  89. package/coverage/lcov-report/automations/index.html +35 -50
  90. package/coverage/lcov-report/automations/index.js.html +2 -2
  91. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  96. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  98. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/index.html +14 -14
  100. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  102. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  103. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  108. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  113. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  118. package/coverage/lcov-report/automations/utils.js.html +46 -16
  119. package/coverage/lcov-report/constants/index.html +5 -5
  120. package/coverage/lcov-report/constants/index.js.html +87 -21
  121. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  122. package/coverage/lcov-report/constants/screens.js.html +2 -2
  123. package/coverage/lcov-report/db/client.js.html +2 -2
  124. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  125. package/coverage/lcov-report/db/index.html +2 -2
  126. package/coverage/lcov-report/db/index.js.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  128. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  129. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  130. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  131. package/coverage/lcov-report/db/newid.js.html +4 -4
  132. package/coverage/lcov-report/db/utils.js.html +75 -75
  133. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  134. package/coverage/lcov-report/events/index.html +6 -6
  135. package/coverage/lcov-report/events/index.js.html +1 -1
  136. package/coverage/lcov-report/events/utils.js.html +5 -5
  137. package/coverage/lcov-report/index.html +106 -91
  138. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  139. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  140. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  141. package/coverage/lcov-report/middleware/authorized.js.html +19 -16
  142. package/coverage/lcov-report/middleware/builder.js.html +22 -13
  143. package/coverage/lcov-report/middleware/currentapp.js.html +33 -33
  144. package/coverage/lcov-report/middleware/index.html +23 -23
  145. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  146. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  147. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  148. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  149. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  150. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +90 -33
  151. package/coverage/lcov-report/threads/index.html +141 -0
  152. package/coverage/lcov-report/threads/index.js.html +278 -0
  153. package/coverage/lcov-report/threads/query.js.html +278 -0
  154. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  155. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  156. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  157. package/coverage/lcov-report/utilities/csvParser.js.html +144 -15
  158. package/coverage/lcov-report/utilities/global.js.html +38 -23
  159. package/coverage/lcov-report/utilities/index.html +48 -48
  160. package/coverage/lcov-report/utilities/index.js.html +49 -16
  161. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +31 -10
  162. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  163. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  164. package/coverage/lcov-report/utilities/routing/index.js.html +2 -2
  165. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  166. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  167. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  168. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  169. package/coverage/lcov-report/utilities/security.js.html +3 -3
  170. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  171. package/coverage/lcov-report/utilities/users.js.html +1 -1
  172. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  173. package/coverage/lcov.info +2687 -1942
  174. package/dist/api/controllers/application.js +16 -6
  175. package/dist/api/controllers/auth.js +3 -3
  176. package/dist/api/controllers/datasource.js +67 -16
  177. package/dist/api/controllers/deploy/index.js +2 -0
  178. package/dist/api/controllers/dev.js +4 -1
  179. package/dist/api/controllers/query.js +32 -62
  180. package/dist/api/controllers/row/ExternalRequest.js +83 -36
  181. package/dist/api/controllers/row/external.js +3 -1
  182. package/dist/api/controllers/row/utils.js +6 -12
  183. package/dist/api/controllers/table/external.js +249 -0
  184. package/dist/api/controllers/table/index.js +49 -123
  185. package/dist/api/controllers/table/internal.js +146 -0
  186. package/dist/api/controllers/table/utils.js +62 -28
  187. package/dist/api/controllers/user.js +123 -11
  188. package/dist/api/controllers/view/exporters.js +4 -0
  189. package/dist/api/controllers/view/index.js +14 -2
  190. package/dist/api/routes/query.js +1 -1
  191. package/dist/api/routes/row.js +178 -0
  192. package/dist/api/routes/table.js +150 -1
  193. package/dist/api/routes/user.js +2 -1
  194. package/dist/app.js +2 -11
  195. package/dist/automations/bullboard.js +37 -10
  196. package/dist/automations/triggers.js +7 -3
  197. package/dist/automations/utils.js +11 -2
  198. package/dist/constants/index.js +19 -0
  199. package/dist/definitions/datasource.js +17 -1
  200. package/dist/environment.js +13 -0
  201. package/dist/integrations/base/IntegrationBase.js +2 -0
  202. package/dist/integrations/base/datasourcePlus.js +2 -0
  203. package/dist/integrations/base/sql.js +350 -177
  204. package/dist/integrations/base/sqlTable.js +143 -0
  205. package/dist/integrations/base/utils.js +30 -0
  206. package/dist/integrations/index.js +6 -0
  207. package/dist/integrations/microsoftSqlServer.js +117 -9
  208. package/dist/integrations/mysql.js +16 -85
  209. package/dist/integrations/oracle.js +367 -0
  210. package/dist/integrations/postgres.js +35 -28
  211. package/dist/integrations/utils.js +71 -9
  212. package/dist/middleware/authorized.js +2 -1
  213. package/dist/middleware/builder.js +4 -1
  214. package/dist/package.json +18 -9
  215. package/dist/tests/utilities/TestConfiguration.js +2 -1
  216. package/dist/{automations/thread.js → threads/automation.js} +26 -8
  217. package/dist/threads/index.js +64 -0
  218. package/dist/threads/query.js +64 -0
  219. package/dist/tsconfig.tsbuildinfo +1 -1
  220. package/dist/utilities/csvParser.js +46 -5
  221. package/dist/utilities/global.js +6 -2
  222. package/dist/utilities/index.js +11 -0
  223. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  224. package/dist/utilities/scriptRunner.js +4 -1
  225. package/package.json +19 -10
  226. package/scripts/dev/manage.js +1 -0
  227. package/scripts/docs/README.md +31 -0
  228. package/scripts/docs/generate.js +74 -0
  229. package/scripts/docs/toSwagger.js +320 -0
  230. package/scripts/integrations/mssql/data/Dockerfile +9 -0
  231. package/scripts/integrations/mssql/data/entrypoint.sh +24 -0
  232. package/scripts/integrations/mssql/data/setup.sql +54 -0
  233. package/scripts/integrations/mssql/docker-compose.yaml +12 -0
  234. package/scripts/integrations/mssql/reset.sh +3 -0
  235. package/scripts/integrations/oracle/docker-compose.yml +19 -0
  236. package/scripts/integrations/oracle/instantclient/linux/x86-64/basiclite-21.4.zip +0 -0
  237. package/scripts/integrations/oracle/instantclient/linux/x86-64/install.sh +23 -0
  238. package/scripts/integrations/oracle/oracle.md +90 -0
  239. package/scripts/integrations/postgres/docker-compose.yml +3 -3
  240. package/scripts/likeCypress.ts +33 -0
  241. package/src/api/controllers/application.js +18 -7
  242. package/src/api/controllers/auth.js +3 -0
  243. package/src/api/controllers/datasource.js +84 -16
  244. package/src/api/controllers/deploy/index.js +2 -0
  245. package/src/api/controllers/dev.js +4 -1
  246. package/src/api/controllers/query.js +35 -85
  247. package/src/api/controllers/row/ExternalRequest.ts +99 -38
  248. package/src/api/controllers/row/external.js +4 -1
  249. package/src/api/controllers/row/utils.js +8 -11
  250. package/src/api/controllers/table/external.js +307 -0
  251. package/src/api/controllers/table/index.js +47 -137
  252. package/src/api/controllers/table/internal.js +151 -0
  253. package/src/api/controllers/table/utils.js +74 -33
  254. package/src/api/controllers/user.js +132 -13
  255. package/src/api/controllers/view/exporters.js +5 -0
  256. package/src/api/controllers/view/index.js +15 -2
  257. package/src/api/routes/query.js +1 -0
  258. package/src/api/routes/row.js +178 -0
  259. package/src/api/routes/table.js +154 -0
  260. package/src/api/routes/tests/application.spec.js +0 -2
  261. package/src/api/routes/tests/datasource.spec.js +2 -2
  262. package/src/api/routes/tests/misc.spec.js +5 -1
  263. package/src/api/routes/tests/query.spec.js +38 -9
  264. package/src/api/routes/tests/screen.spec.js +1 -1
  265. package/src/api/routes/user.js +5 -0
  266. package/src/app.ts +2 -10
  267. package/src/automations/bullboard.js +28 -11
  268. package/src/automations/tests/automation.spec.js +3 -4
  269. package/src/automations/triggers.js +7 -3
  270. package/src/automations/utils.js +12 -2
  271. package/src/constants/index.js +22 -0
  272. package/src/definitions/common.ts +7 -1
  273. package/src/definitions/datasource.ts +21 -3
  274. package/src/environment.js +15 -0
  275. package/src/integrations/airtable.ts +2 -1
  276. package/src/integrations/arangodb.ts +2 -1
  277. package/src/integrations/base/IntegrationBase.ts +6 -0
  278. package/src/integrations/base/datasourcePlus.ts +9 -0
  279. package/src/integrations/base/sql.ts +375 -218
  280. package/src/integrations/base/sqlTable.ts +180 -0
  281. package/src/integrations/base/utils.ts +22 -0
  282. package/src/integrations/couchdb.ts +2 -1
  283. package/src/integrations/dynamodb.ts +2 -1
  284. package/src/integrations/elasticsearch.ts +2 -1
  285. package/src/integrations/index.ts +7 -0
  286. package/src/integrations/microsoftSqlServer.ts +145 -13
  287. package/src/integrations/mongodb.ts +2 -1
  288. package/src/integrations/mysql.ts +23 -95
  289. package/src/integrations/oracle.ts +464 -0
  290. package/src/integrations/postgres.ts +45 -35
  291. package/src/integrations/rest.ts +2 -1
  292. package/src/integrations/s3.ts +2 -1
  293. package/src/integrations/tests/microsoftSqlServer.spec.js +22 -15
  294. package/src/integrations/tests/oracle.spec.js +94 -0
  295. package/src/integrations/tests/postgres.spec.js +4 -0
  296. package/src/integrations/utils.ts +78 -8
  297. package/src/middleware/authorized.js +2 -1
  298. package/src/middleware/builder.js +4 -1
  299. package/src/tests/utilities/TestConfiguration.js +2 -1
  300. package/src/{automations/thread.js → threads/automation.js} +27 -8
  301. package/src/threads/index.js +66 -0
  302. package/src/threads/query.js +66 -0
  303. package/src/utilities/csvParser.js +48 -5
  304. package/src/utilities/global.js +7 -2
  305. package/src/utilities/index.js +11 -0
  306. package/src/utilities/queue/inMemoryQueue.js +7 -0
  307. package/src/utilities/scriptRunner.js +4 -1
  308. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -6
  309. package/src/utilities/tests/csvParser.spec.js +3 -0
  310. package/tsconfig.json +1 -1
  311. package/builder/assets/index.550fdba7.js +0 -201
  312. package/builder/assets/index.7469e1e4.css +0 -29
  313. package/builder/assets/vendor.278a305c.js +0 -9
  314. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">30.77% </span>
33
+ <span class="strong">30.76% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>4/13</span>
36
36
  </div>
@@ -181,7 +181,7 @@ exports.endUserPing = <span class="fstat-no" title="function not covered" >as</s
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
184
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
184
+ at Fri Nov 26 2021 18:59:43 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>
@@ -205,7 +205,7 @@ exports.update = async function (ctx) {
205
205
  &nbsp;
206
206
  try {
207
207
  const mainDoc = await getBuilderMainDoc()
208
- <span class="missing-if-branch" title="else path not taken" >E</span>if (mainDoc.apiKeys == null) {
208
+ if (mainDoc.apiKeys == null) {
209
209
  mainDoc.apiKeys = {}
210
210
  }
211
211
  mainDoc.apiKeys[key] = value
@@ -226,7 +226,7 @@ exports.update = async function (ctx) {
226
226
  <div class='footer quiet pad2 space-top1 center small'>
227
227
  Code coverage generated by
228
228
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
229
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
229
+ at Fri Nov 26 2021 18:59:43 GMT+0000 (Coordinated Universal Time)
230
230
  </div>
231
231
  </div>
232
232
  <script src="../../prettify.js"></script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">78.41% </span>
26
+ <span class="strong">78.02% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>138/176</span>
28
+ <span class='fraction'>142/182</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">57.35% </span>
33
+ <span class="strong">56.94% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>39/68</span>
35
+ <span class='fraction'>41/72</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">79.31% </span>
47
+ <span class="strong">78.88% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>138/174</span>
49
+ <span class='fraction'>142/180</span>
50
50
  </div>
51
51
 
52
52
 
@@ -457,7 +457,18 @@
457
457
  <a name='L398'></a><a href='#L398'>398</a>
458
458
  <a name='L399'></a><a href='#L399'>399</a>
459
459
  <a name='L400'></a><a href='#L400'>400</a>
460
- <a name='L401'></a><a href='#L401'>401</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
460
+ <a name='L401'></a><a href='#L401'>401</a>
461
+ <a name='L402'></a><a href='#L402'>402</a>
462
+ <a name='L403'></a><a href='#L403'>403</a>
463
+ <a name='L404'></a><a href='#L404'>404</a>
464
+ <a name='L405'></a><a href='#L405'>405</a>
465
+ <a name='L406'></a><a href='#L406'>406</a>
466
+ <a name='L407'></a><a href='#L407'>407</a>
467
+ <a name='L408'></a><a href='#L408'>408</a>
468
+ <a name='L409'></a><a href='#L409'>409</a>
469
+ <a name='L410'></a><a href='#L410'>410</a>
470
+ <a name='L411'></a><a href='#L411'>411</a>
471
+ <a name='L412'></a><a href='#L412'>412</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
461
472
  <span class="cline-any cline-yes">33x</span>
462
473
  <span class="cline-any cline-yes">33x</span>
463
474
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -477,8 +488,6 @@
477
488
  <span class="cline-any cline-neutral">&nbsp;</span>
478
489
  <span class="cline-any cline-neutral">&nbsp;</span>
479
490
  <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-neutral">&nbsp;</span>
481
- <span class="cline-any cline-yes">33x</span>
482
491
  <span class="cline-any cline-yes">33x</span>
483
492
  <span class="cline-any cline-yes">33x</span>
484
493
  <span class="cline-any cline-yes">33x</span>
@@ -503,48 +512,51 @@
503
512
  <span class="cline-any cline-neutral">&nbsp;</span>
504
513
  <span class="cline-any cline-yes">33x</span>
505
514
  <span class="cline-any cline-yes">33x</span>
515
+ <span class="cline-any cline-yes">33x</span>
516
+ <span class="cline-any cline-yes">33x</span>
517
+ <span class="cline-any cline-yes">33x</span>
506
518
  <span class="cline-any cline-neutral">&nbsp;</span>
507
519
  <span class="cline-any cline-yes">33x</span>
508
520
  <span class="cline-any cline-neutral">&nbsp;</span>
509
521
  <span class="cline-any cline-neutral">&nbsp;</span>
510
522
  <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-yes">188x</span>
523
+ <span class="cline-any cline-yes">189x</span>
512
524
  <span class="cline-any cline-neutral">&nbsp;</span>
513
525
  <span class="cline-any cline-neutral">&nbsp;</span>
514
526
  <span class="cline-any cline-neutral">&nbsp;</span>
515
527
  <span class="cline-any cline-neutral">&nbsp;</span>
516
528
  <span class="cline-any cline-neutral">&nbsp;</span>
517
- <span class="cline-any cline-yes">376x</span>
529
+ <span class="cline-any cline-yes">378x</span>
518
530
  <span class="cline-any cline-neutral">&nbsp;</span>
519
531
  <span class="cline-any cline-neutral">&nbsp;</span>
520
532
  <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-yes">188x</span>
533
+ <span class="cline-any cline-yes">189x</span>
522
534
  <span class="cline-any cline-neutral">&nbsp;</span>
523
535
  <span class="cline-any cline-neutral">&nbsp;</span>
524
536
  <span class="cline-any cline-neutral">&nbsp;</span>
525
537
  <span class="cline-any cline-neutral">&nbsp;</span>
526
538
  <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-yes">200x</span>
539
+ <span class="cline-any cline-yes">12x</span>
528
540
  <span class="cline-any cline-neutral">&nbsp;</span>
529
541
  <span class="cline-any cline-neutral">&nbsp;</span>
530
542
  <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-yes">186x</span>
543
+ <span class="cline-any cline-yes">187x</span>
532
544
  <span class="cline-any cline-neutral">&nbsp;</span>
533
545
  <span class="cline-any cline-neutral">&nbsp;</span>
534
546
  <span class="cline-any cline-neutral">&nbsp;</span>
535
547
  <span class="cline-any cline-neutral">&nbsp;</span>
536
548
  <span class="cline-any cline-neutral">&nbsp;</span>
537
549
  <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-yes">183x</span>
550
+ <span class="cline-any cline-yes">184x</span>
539
551
  <span class="cline-any cline-no">&nbsp;</span>
540
- <span class="cline-any cline-yes">183x</span>
541
- <span class="cline-any cline-yes">180x</span>
552
+ <span class="cline-any cline-yes">184x</span>
553
+ <span class="cline-any cline-yes">181x</span>
542
554
  <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-yes">183x</span>
544
- <span class="cline-any cline-yes">180x</span>
555
+ <span class="cline-any cline-yes">184x</span>
556
+ <span class="cline-any cline-yes">181x</span>
545
557
  <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-yes">183x</span>
547
- <span class="cline-any cline-yes">10x</span>
558
+ <span class="cline-any cline-yes">184x</span>
559
+ <span class="cline-any cline-yes">11x</span>
548
560
  <span class="cline-any cline-neutral">&nbsp;</span>
549
561
  <span class="cline-any cline-yes">173x</span>
550
562
  <span class="cline-any cline-yes">173x</span>
@@ -559,12 +571,12 @@
559
571
  <span class="cline-any cline-neutral">&nbsp;</span>
560
572
  <span class="cline-any cline-neutral">&nbsp;</span>
561
573
  <span class="cline-any cline-neutral">&nbsp;</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>
574
+ <span class="cline-any cline-yes">179x</span>
575
+ <span class="cline-any cline-yes">179x</span>
576
+ <span class="cline-any cline-yes">179x</span>
565
577
  <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-yes">178x</span>
567
- <span class="cline-any cline-yes">178x</span>
578
+ <span class="cline-any cline-yes">179x</span>
579
+ <span class="cline-any cline-yes">179x</span>
568
580
  <span class="cline-any cline-neutral">&nbsp;</span>
569
581
  <span class="cline-any cline-neutral">&nbsp;</span>
570
582
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -573,18 +585,18 @@
573
585
  <span class="cline-any cline-neutral">&nbsp;</span>
574
586
  <span class="cline-any cline-neutral">&nbsp;</span>
575
587
  <span class="cline-any cline-neutral">&nbsp;</span>
576
- <span class="cline-any cline-yes">178x</span>
577
- <span class="cline-any cline-yes">178x</span>
578
- <span class="cline-any cline-yes">178x</span>
588
+ <span class="cline-any cline-yes">179x</span>
589
+ <span class="cline-any cline-yes">179x</span>
590
+ <span class="cline-any cline-yes">179x</span>
579
591
  <span class="cline-any cline-neutral">&nbsp;</span>
580
592
  <span class="cline-any cline-neutral">&nbsp;</span>
581
593
  <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-yes">178x</span>
594
+ <span class="cline-any cline-yes">179x</span>
583
595
  <span class="cline-any cline-no">&nbsp;</span>
584
596
  <span class="cline-any cline-no">&nbsp;</span>
585
597
  <span class="cline-any cline-no">&nbsp;</span>
586
598
  <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-yes">178x</span>
599
+ <span class="cline-any cline-yes">179x</span>
588
600
  <span class="cline-any cline-neutral">&nbsp;</span>
589
601
  <span class="cline-any cline-neutral">&nbsp;</span>
590
602
  <span class="cline-any cline-no">&nbsp;</span>
@@ -592,10 +604,10 @@
592
604
  <span class="cline-any cline-neutral">&nbsp;</span>
593
605
  <span class="cline-any cline-neutral">&nbsp;</span>
594
606
  <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-yes">178x</span>
607
+ <span class="cline-any cline-yes">179x</span>
596
608
  <span class="cline-any cline-neutral">&nbsp;</span>
597
609
  <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-yes">178x</span>
610
+ <span class="cline-any cline-yes">179x</span>
599
611
  <span class="cline-any cline-neutral">&nbsp;</span>
600
612
  <span class="cline-any cline-neutral">&nbsp;</span>
601
613
  <span class="cline-any cline-yes">33x</span>
@@ -640,19 +652,19 @@
640
652
  <span class="cline-any cline-neutral">&nbsp;</span>
641
653
  <span class="cline-any cline-neutral">&nbsp;</span>
642
654
  <span class="cline-any cline-yes">33x</span>
643
- <span class="cline-any cline-yes">187x</span>
644
- <span class="cline-any cline-yes">187x</span>
645
- <span class="cline-any cline-yes">187x</span>
646
- <span class="cline-any cline-yes">187x</span>
655
+ <span class="cline-any cline-yes">188x</span>
656
+ <span class="cline-any cline-yes">188x</span>
657
+ <span class="cline-any cline-yes">188x</span>
658
+ <span class="cline-any cline-yes">188x</span>
647
659
  <span class="cline-any cline-neutral">&nbsp;</span>
648
660
  <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-yes">187x</span>
650
- <span class="cline-any cline-yes">185x</span>
651
- <span class="cline-any cline-yes">185x</span>
652
- <span class="cline-any cline-yes">185x</span>
661
+ <span class="cline-any cline-yes">188x</span>
662
+ <span class="cline-any cline-yes">186x</span>
663
+ <span class="cline-any cline-yes">186x</span>
664
+ <span class="cline-any cline-yes">186x</span>
653
665
  <span class="cline-any cline-neutral">&nbsp;</span>
654
666
  <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-yes">187x</span>
667
+ <span class="cline-any cline-yes">188x</span>
656
668
  <span class="cline-any cline-neutral">&nbsp;</span>
657
669
  <span class="cline-any cline-neutral">&nbsp;</span>
658
670
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -661,29 +673,29 @@
661
673
  <span class="cline-any cline-neutral">&nbsp;</span>
662
674
  <span class="cline-any cline-neutral">&nbsp;</span>
663
675
  <span class="cline-any cline-yes">33x</span>
664
- <span class="cline-any cline-yes">178x</span>
665
- <span class="cline-any cline-yes">178x</span>
676
+ <span class="cline-any cline-yes">179x</span>
677
+ <span class="cline-any cline-yes">179x</span>
666
678
  <span class="cline-any cline-neutral">&nbsp;</span>
667
679
  <span class="cline-any cline-neutral">&nbsp;</span>
668
680
  <span class="cline-any cline-neutral">&nbsp;</span>
669
681
  <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">178x</span>
682
+ <span class="cline-any cline-yes">179x</span>
671
683
  <span class="cline-any cline-no">&nbsp;</span>
672
684
  <span class="cline-any cline-neutral">&nbsp;</span>
673
- <span class="cline-any cline-yes">178x</span>
674
- <span class="cline-any cline-yes">178x</span>
685
+ <span class="cline-any cline-yes">179x</span>
686
+ <span class="cline-any cline-yes">179x</span>
675
687
  <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-yes">178x</span>
677
- <span class="cline-any cline-yes">178x</span>
688
+ <span class="cline-any cline-yes">179x</span>
689
+ <span class="cline-any cline-yes">179x</span>
678
690
  <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-yes">178x</span>
691
+ <span class="cline-any cline-yes">179x</span>
680
692
  <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-yes">178x</span>
693
+ <span class="cline-any cline-yes">179x</span>
682
694
  <span class="cline-any cline-no">&nbsp;</span>
683
695
  <span class="cline-any cline-neutral">&nbsp;</span>
684
696
  <span class="cline-any cline-neutral">&nbsp;</span>
685
697
  <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-yes">178x</span>
698
+ <span class="cline-any cline-yes">179x</span>
687
699
  <span class="cline-any cline-neutral">&nbsp;</span>
688
700
  <span class="cline-any cline-neutral">&nbsp;</span>
689
701
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -698,13 +710,13 @@
698
710
  <span class="cline-any cline-neutral">&nbsp;</span>
699
711
  <span class="cline-any cline-neutral">&nbsp;</span>
700
712
  <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-yes">178x</span>
702
- <span class="cline-any cline-yes">178x</span>
713
+ <span class="cline-any cline-yes">179x</span>
714
+ <span class="cline-any cline-yes">179x</span>
703
715
  <span class="cline-any cline-neutral">&nbsp;</span>
704
716
  <span class="cline-any cline-neutral">&nbsp;</span>
705
717
  <span class="cline-any cline-neutral">&nbsp;</span>
706
- <span class="cline-any cline-yes">178x</span>
707
- <span class="cline-any cline-yes">178x</span>
718
+ <span class="cline-any cline-yes">179x</span>
719
+ <span class="cline-any cline-yes">179x</span>
708
720
  <span class="cline-any cline-neutral">&nbsp;</span>
709
721
  <span class="cline-any cline-neutral">&nbsp;</span>
710
722
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -712,8 +724,9 @@
712
724
  <span class="cline-any cline-neutral">&nbsp;</span>
713
725
  <span class="cline-any cline-neutral">&nbsp;</span>
714
726
  <span class="cline-any cline-neutral">&nbsp;</span>
715
- <span class="cline-any cline-yes">178x</span>
716
- <span class="cline-any cline-yes">178x</span>
727
+ <span class="cline-any cline-yes">179x</span>
728
+ <span class="cline-any cline-yes">179x</span>
729
+ <span class="cline-any cline-yes">179x</span>
717
730
  <span class="cline-any cline-neutral">&nbsp;</span>
718
731
  <span class="cline-any cline-neutral">&nbsp;</span>
719
732
  <span class="cline-any cline-yes">33x</span>
@@ -775,8 +788,12 @@
775
788
  <span class="cline-any cline-neutral">&nbsp;</span>
776
789
  <span class="cline-any cline-neutral">&nbsp;</span>
777
790
  <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-yes">11x</span>
792
+ <span class="cline-any cline-no">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
778
794
  <span class="cline-any cline-neutral">&nbsp;</span>
779
795
  <span class="cline-any cline-yes">11x</span>
796
+ <span class="cline-any cline-yes">11x</span>
780
797
  <span class="cline-any cline-neutral">&nbsp;</span>
781
798
  <span class="cline-any cline-yes">11x</span>
782
799
  <span class="cline-any cline-yes">11x</span>
@@ -787,6 +804,8 @@
787
804
  <span class="cline-any cline-no">&nbsp;</span>
788
805
  <span class="cline-any cline-no">&nbsp;</span>
789
806
  <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
809
  <span class="cline-any cline-no">&nbsp;</span>
791
810
  <span class="cline-any cline-neutral">&nbsp;</span>
792
811
  <span class="cline-any cline-no">&nbsp;</span>
@@ -816,6 +835,10 @@
816
835
  <span class="cline-any cline-neutral">&nbsp;</span>
817
836
  <span class="cline-any cline-no">&nbsp;</span>
818
837
  <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-no">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
819
842
  <span class="cline-any cline-no">&nbsp;</span>
820
843
  <span class="cline-any cline-no">&nbsp;</span>
821
844
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -841,21 +864,20 @@
841
864
  <span class="cline-any cline-neutral">&nbsp;</span>
842
865
  <span class="cline-any cline-yes">5x</span>
843
866
  <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-yes">5x</span>
868
+ <span class="cline-any cline-yes">5x</span>
869
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
870
  <span class="cline-any cline-neutral">&nbsp;</span>
845
871
  <span class="cline-any cline-yes">33x</span>
846
- <span class="cline-any cline-yes">178x</span>
847
- <span class="cline-any cline-neutral">&nbsp;</span>
848
- <span class="cline-any cline-yes">178x</span>
849
- <span class="cline-any cline-yes">178x</span>
850
- <span class="cline-any cline-yes">356x</span>
851
- <span class="cline-any cline-yes">356x</span>
872
+ <span class="cline-any cline-yes">179x</span>
852
873
  <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-yes">179x</span>
875
+ <span class="cline-any cline-yes">179x</span>
876
+ <span class="cline-any cline-yes">358x</span>
877
+ <span class="cline-any cline-yes">358x</span>
853
878
  <span class="cline-any cline-neutral">&nbsp;</span>
854
- <span class="cline-any cline-yes">178x</span>
855
- <span class="cline-any cline-yes">178x</span>
856
- <span class="cline-any cline-yes">178x</span>
857
879
  <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-yes">178x</span>
880
+ <span class="cline-any cline-yes">179x</span>
859
881
  <span class="cline-any cline-neutral">&nbsp;</span>
860
882
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../db")
861
883
  const env = require("../../environment")
@@ -874,14 +896,12 @@ const {
874
896
  generateAppID,
875
897
  getLayoutParams,
876
898
  getScreenParams,
877
- generateScreenID,
878
899
  generateDevAppID,
879
900
  DocumentTypes,
880
901
  AppStatus,
881
902
  } = require("../../db/utils")
882
903
  const { BUILTIN_ROLE_IDS, AccessController } = require("@budibase/auth/roles")
883
904
  const { BASE_LAYOUTS } = require("../../constants/layouts")
884
- const { createHomeScreen } = require("../../constants/screens")
885
905
  const { cloneDeep } = require("lodash/fp")
886
906
  const { processObject } = require("@budibase/string-templates")
887
907
  const {
@@ -903,6 +923,9 @@ const {
903
923
  revertClientLibrary,
904
924
  } = require("../../utilities/fileSystem/clientLibrary")
905
925
  const { getTenantId, isMultiTenant } = require("@budibase/auth/tenancy")
926
+ const { syncGlobalUsers } = require("./user")
927
+ const { app: appCache } = require("@budibase/auth/cache")
928
+ const { cleanupAutomations } = require("../../automations/utils")
906
929
  &nbsp;
907
930
  const URL_REGEX_SLASH = /\/|\\/g
908
931
  &nbsp;
@@ -1004,10 +1027,10 @@ exports.fetch = async ctx =&gt; {
1004
1027
  const apps = await getAllApps(CouchDB, { dev, all })
1005
1028
  &nbsp;
1006
1029
  // get the locks for all the dev apps
1007
- <span class="missing-if-branch" title="else path not taken" >E</span>if (dev || <span class="branch-1 cbranch-no" title="branch not covered" >all)</span> {
1030
+ if (dev || <span class="branch-1 cbranch-no" title="branch not covered" >all)</span> {
1008
1031
  const locks = await getAllLocks()
1009
1032
  for (let app of apps) {
1010
- <span class="missing-if-branch" title="else path not taken" >E</span>if (app.status !== "development") {
1033
+ if (app.status !== "development") {
1011
1034
  continue
1012
1035
  }
1013
1036
  const lock = <span class="cstat-no" title="statement not covered" >locks.find(<span class="fstat-no" title="function not covered" >lo</span>ck =&gt; <span class="cstat-no" title="statement not covered" >lock.appId === app.appId)</span></span>
@@ -1103,7 +1126,7 @@ exports.create = async ctx =&gt; {
1103
1126
  &nbsp;
1104
1127
  // Only create the default home screens and layout if we aren't importing
1105
1128
  // an app
1106
- <span class="missing-if-branch" title="else path not taken" >E</span>if (useTemplate !== "true") {
1129
+ if (useTemplate !== "true") {
1107
1130
  await createEmptyAppPackage(ctx, newApplication)
1108
1131
  }
1109
1132
  &nbsp;
@@ -1112,6 +1135,7 @@ exports.create = async ctx =&gt; {
1112
1135
  await createApp(appId)
1113
1136
  }
1114
1137
  &nbsp;
1138
+ await appCache.invalidateAppMetadata(appId, newApplication)
1115
1139
  ctx.status = 200
1116
1140
  ctx.body = newApplication
1117
1141
  }
@@ -1175,8 +1199,12 @@ exports.delete = async ctx =&gt; {
1175
1199
  if (!env.isTest() &amp;&amp; !ctx.query.unpublish) {
1176
1200
  await deleteApp(ctx.params.appId)
1177
1201
  }
1202
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.query &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >ctx.query.unpublish)</span> {
1203
+ <span class="cstat-no" title="statement not covered" > await cleanupAutomations(ctx.params.appId)</span>
1204
+ }
1178
1205
  // make sure the app/role doesn't stick around after the app has been deleted
1179
1206
  await removeAppFromUserRoles(ctx, ctx.params.appId)
1207
+ await appCache.invalidateAppMetadata(ctx.params.appId)
1180
1208
  &nbsp;
1181
1209
  ctx.status = 200
1182
1210
  ctx.body = result
@@ -1187,6 +1215,8 @@ exports.sync = <span class="fstat-no" title="function not covered" >as</span>ync
1187
1215
  <span class="cstat-no" title="statement not covered" > if (!isDevAppID(appId)) {</span>
1188
1216
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, "This action cannot be performed for production apps")</span>
1189
1217
  }
1218
+ &nbsp;
1219
+ // replicate prod to dev
1190
1220
  const prodAppId = <span class="cstat-no" title="statement not covered" >getDeployedAppID(appId)</span>
1191
1221
  &nbsp;
1192
1222
  <span class="cstat-no" title="statement not covered" > try {</span>
@@ -1216,6 +1246,10 @@ exports.sync = <span class="fstat-no" title="function not covered" >as</span>ync
1216
1246
  } catch (err) {
1217
1247
  <span class="cstat-no" title="statement not covered" > error = err</span>
1218
1248
  }
1249
+ &nbsp;
1250
+ // sync the users
1251
+ <span class="cstat-no" title="statement not covered" > await syncGlobalUsers(appId)</span>
1252
+ &nbsp;
1219
1253
  <span class="cstat-no" title="statement not covered" > if (error) {</span>
1220
1254
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, error)</span>
1221
1255
  } else {
@@ -1231,7 +1265,7 @@ const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1231
1265
  const application = await db.get(DocumentTypes.APP_METADATA)
1232
1266
  &nbsp;
1233
1267
  const newAppPackage = { ...application, ...appPackage, url }
1234
- <span class="missing-if-branch" title="else path not taken" >E</span>if (appPackage._rev !== application._rev) {
1268
+ if (appPackage._rev !== application._rev) {
1235
1269
  newAppPackage._rev = application._rev
1236
1270
  }
1237
1271
  &nbsp;
@@ -1239,7 +1273,10 @@ const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1239
1273
  // Redis, shouldn't ever store it
1240
1274
  delete newAppPackage.lockedBy
1241
1275
  &nbsp;
1242
- return await db.put(newAppPackage)
1276
+ const response = await db.put(newAppPackage)
1277
+ // remove any cached metadata, so that it will be updated
1278
+ await appCache.invalidateAppMetadata(appId)
1279
+ return response
1243
1280
  }
1244
1281
  &nbsp;
1245
1282
  const createEmptyAppPackage = async (ctx, app) =&gt; {
@@ -1250,10 +1287,6 @@ const createEmptyAppPackage = async (ctx, app) =&gt; {
1250
1287
  const cloned = cloneDeep(layout)
1251
1288
  screensAndLayouts.push(await processObject(cloned, app))
1252
1289
  }
1253
- &nbsp;
1254
- const homeScreen = createHomeScreen(app)
1255
- homeScreen._id = generateScreenID()
1256
- screensAndLayouts.push(homeScreen)
1257
1290
  &nbsp;
1258
1291
  await db.bulkDocs(screensAndLayouts)
1259
1292
  }
@@ -1264,7 +1297,7 @@ const createEmptyAppPackage = async (ctx, app) =&gt; {
1264
1297
  <div class='footer quiet pad2 space-top1 center small'>
1265
1298
  Code coverage generated by
1266
1299
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1267
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
1300
+ at Fri Nov 26 2021 18:59:43 GMT+0000 (Coordinated Universal Time)
1268
1301
  </div>
1269
1302
  </div>
1270
1303
  <script src="../../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">84.62% </span>
26
+ <span class="strong">85.18% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>22/26</span>
28
+ <span class='fraction'>23/27</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">84.62% </span>
47
+ <span class="strong">85.18% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>22/26</span>
49
+ <span class='fraction'>23/27</span>
50
50
  </div>
51
51
 
52
52
 
@@ -109,7 +109,10 @@
109
109
  <a name='L50'></a><a href='#L50'>50</a>
110
110
  <a name='L51'></a><a href='#L51'>51</a>
111
111
  <a name='L52'></a><a href='#L52'>52</a>
112
- <a name='L53'></a><a href='#L53'>53</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
112
+ <a name='L53'></a><a href='#L53'>53</a>
113
+ <a name='L54'></a><a href='#L54'>54</a>
114
+ <a name='L55'></a><a href='#L55'>55</a>
115
+ <a name='L56'></a><a href='#L56'>56</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
113
116
  <span class="cline-any cline-yes">23x</span>
114
117
  <span class="cline-any cline-yes">23x</span>
115
118
  <span class="cline-any cline-yes">23x</span>
@@ -127,6 +130,8 @@
127
130
  <span class="cline-any cline-yes">1x</span>
128
131
  <span class="cline-any cline-neutral">&nbsp;</span>
129
132
  <span class="cline-any cline-yes">1x</span>
133
+ <span class="cline-any cline-neutral">&nbsp;</span>
134
+ <span class="cline-any cline-yes">1x</span>
130
135
  <span class="cline-any cline-yes">1x</span>
131
136
  <span class="cline-any cline-neutral">&nbsp;</span>
132
137
  <span class="cline-any cline-yes">1x</span>
@@ -149,6 +154,7 @@
149
154
  <span class="cline-any cline-yes">1x</span>
150
155
  <span class="cline-any cline-neutral">&nbsp;</span>
151
156
  <span class="cline-any cline-neutral">&nbsp;</span>
157
+ <span class="cline-any cline-neutral">&nbsp;</span>
152
158
  <span class="cline-any cline-yes">1x</span>
153
159
  <span class="cline-any cline-yes">1x</span>
154
160
  <span class="cline-any cline-yes">1x</span>
@@ -177,8 +183,10 @@ exports.fetchSelf = async ctx =&gt; {
177
183
  }
178
184
  &nbsp;
179
185
  const user = await getFullUser(ctx, userId)
186
+ // this shouldn't be returned by the app self
187
+ delete user.roles
180
188
  &nbsp;
181
- <span class="missing-if-branch" title="else path not taken" >E</span>if (appId) {
189
+ if (appId) {
182
190
  const db = new CouchDB(appId)
183
191
  // remove the full roles structure
184
192
  delete user.roles
@@ -197,19 +205,20 @@ exports.fetchSelf = async ctx =&gt; {
197
205
  <span class="cstat-no" title="statement not covered" > response = {}</span>
198
206
  }
199
207
  // user has a role of some sort, return them
200
- else <span class="missing-if-branch" title="else path not taken" >E</span>if (err.status === 404) {
208
+ else if (err.status === 404) {
201
209
  const metadata = {
210
+ ...user,
202
211
  _id: userId,
203
212
  }
204
213
  const dbResp = await db.put(metadata)
205
214
  user._rev = dbResp.rev
206
215
  response = user
207
- } else {
216
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
208
217
  <span class="cstat-no" title="statement not covered" > response = user</span>
209
218
  }
210
219
  ctx.body = response
211
220
  }
212
- } else {
221
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
213
222
  <span class="cstat-no" title="statement not covered" > ctx.body = user</span>
214
223
  }
215
224
  }
@@ -220,7 +229,7 @@ exports.fetchSelf = async ctx =&gt; {
220
229
  <div class='footer quiet pad2 space-top1 center small'>
221
230
  Code coverage generated by
222
231
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
223
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
232
+ at Fri Nov 26 2021 18:59:43 GMT+0000 (Coordinated Universal Time)
224
233
  </div>
225
234
  </div>
226
235
  <script src="../../prettify.js"></script>
@@ -30,14 +30,14 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">71.88% </span>
33
+ <span class="strong">71.87% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>23/32</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">92.86% </span>
40
+ <span class="strong">92.85% </span>
41
41
  <span class="quiet">Functions</span>
42
42
  <span class='fraction'>13/14</span>
43
43
  </div>
@@ -736,7 +736,7 @@ exports.test = async function (ctx) {
736
736
  <div class='footer quiet pad2 space-top1 center small'>
737
737
  Code coverage generated by
738
738
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
739
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
739
+ at Fri Nov 26 2021 18:59:43 GMT+0000 (Coordinated Universal Time)
740
740
  </div>
741
741
  </div>
742
742
  <script src="../../prettify.js"></script>
@@ -91,7 +91,7 @@ exports.exportAppDump = async function (ctx) {
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
94
- at Thu Nov 18 2021 07:07:10 GMT+0000 (Coordinated Universal Time)
94
+ at Fri Nov 26 2021 18:59:43 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  </div>
97
97
  <script src="../../prettify.js"></script>