@budibase/server 0.9.184 → 0.9.185-alpha.11

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 (290) hide show
  1. package/Dockerfile +1 -1
  2. package/__mocks__/mssql.ts +1 -1
  3. package/__mocks__/pg.ts +3 -0
  4. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  5. package/builder/assets/index.053c6f7a.js +1321 -0
  6. package/builder/assets/index.4a7c5636.css +1 -0
  7. package/builder/assets/vendor.470042a4.js +152 -0
  8. package/builder/assets/vendor.5e1fe644.css +1 -0
  9. package/builder/index.html +4 -4
  10. package/coverage/clover.xml +1357 -959
  11. package/coverage/coverage-final.json +91 -87
  12. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  13. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  14. package/coverage/lcov-report/api/controllers/application.js.html +65 -14
  15. package/coverage/lcov-report/api/controllers/auth.js.html +19 -10
  16. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  17. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  20. package/coverage/lcov-report/api/controllers/datasource.js.html +147 -27
  21. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  22. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  23. package/coverage/lcov-report/api/controllers/index.html +90 -90
  24. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  26. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  27. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  28. package/coverage/lcov-report/api/controllers/query.js.html +53 -209
  29. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  30. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  31. package/coverage/lcov-report/api/controllers/row/external.js.html +12 -6
  32. package/coverage/lcov-report/api/controllers/row/index.html +26 -26
  33. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  34. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  35. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  36. package/coverage/lcov-report/api/controllers/row/utils.js.html +21 -30
  37. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  38. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  39. package/coverage/lcov-report/api/controllers/table/external.js.html +980 -0
  40. package/coverage/lcov-report/api/controllers/table/index.html +56 -26
  41. package/coverage/lcov-report/api/controllers/table/index.js.html +80 -350
  42. package/coverage/lcov-report/api/controllers/table/internal.js.html +545 -0
  43. package/coverage/lcov-report/api/controllers/table/utils.js.html +172 -49
  44. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  45. package/coverage/lcov-report/api/controllers/user.js.html +390 -33
  46. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/index.html +9 -9
  48. package/coverage/lcov-report/api/controllers/view/index.js.html +5 -5
  49. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  50. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  51. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  52. package/coverage/lcov-report/api/index.html +1 -1
  53. package/coverage/lcov-report/api/index.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  65. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/index.html +4 -4
  67. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  73. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  79. package/coverage/lcov-report/api/routes/table.js.html +35 -2
  80. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/user.js.html +17 -2
  82. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  84. package/coverage/lcov-report/automations/actions.js.html +2 -2
  85. package/coverage/lcov-report/automations/automationUtils.js.html +3 -3
  86. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  87. package/coverage/lcov-report/automations/index.html +33 -48
  88. package/coverage/lcov-report/automations/index.js.html +2 -2
  89. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  94. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  96. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/index.html +14 -14
  98. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  100. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  101. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  106. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  108. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  109. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  111. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  116. package/coverage/lcov-report/automations/utils.js.html +42 -12
  117. package/coverage/lcov-report/constants/index.html +5 -5
  118. package/coverage/lcov-report/constants/index.js.html +49 -4
  119. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  120. package/coverage/lcov-report/constants/screens.js.html +1 -1
  121. package/coverage/lcov-report/db/client.js.html +2 -2
  122. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  123. package/coverage/lcov-report/db/index.html +2 -2
  124. package/coverage/lcov-report/db/index.js.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  126. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  127. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  128. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  129. package/coverage/lcov-report/db/newid.js.html +1 -1
  130. package/coverage/lcov-report/db/utils.js.html +1 -1
  131. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  132. package/coverage/lcov-report/events/index.html +6 -6
  133. package/coverage/lcov-report/events/index.js.html +1 -1
  134. package/coverage/lcov-report/events/utils.js.html +5 -5
  135. package/coverage/lcov-report/index.html +98 -83
  136. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  137. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  138. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  139. package/coverage/lcov-report/middleware/authorized.js.html +11 -8
  140. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  141. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  142. package/coverage/lcov-report/middleware/index.html +23 -23
  143. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  144. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  145. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  146. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  147. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  148. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +83 -32
  149. package/coverage/lcov-report/threads/index.html +141 -0
  150. package/coverage/lcov-report/threads/index.js.html +260 -0
  151. package/coverage/lcov-report/threads/query.js.html +269 -0
  152. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  153. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  154. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  155. package/coverage/lcov-report/utilities/csvParser.js.html +144 -15
  156. package/coverage/lcov-report/utilities/global.js.html +26 -11
  157. package/coverage/lcov-report/utilities/index.html +49 -49
  158. package/coverage/lcov-report/utilities/index.js.html +65 -17
  159. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  160. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  161. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  164. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  165. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  166. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  167. package/coverage/lcov-report/utilities/security.js.html +3 -3
  168. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  169. package/coverage/lcov-report/utilities/users.js.html +1 -1
  170. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  171. package/coverage/lcov.info +2301 -1599
  172. package/dist/api/controllers/application.js +16 -2
  173. package/dist/api/controllers/auth.js +3 -3
  174. package/dist/api/controllers/datasource.js +47 -16
  175. package/dist/api/controllers/deploy/index.js +2 -0
  176. package/dist/api/controllers/dev.js +4 -1
  177. package/dist/api/controllers/query.js +30 -58
  178. package/dist/api/controllers/row/ExternalRequest.js +37 -14
  179. package/dist/api/controllers/row/external.js +1 -0
  180. package/dist/api/controllers/row/utils.js +6 -12
  181. package/dist/api/controllers/static/index.js +1 -1
  182. package/dist/api/controllers/table/external.js +242 -0
  183. package/dist/api/controllers/table/index.js +49 -123
  184. package/dist/api/controllers/table/internal.js +150 -0
  185. package/dist/api/controllers/table/utils.js +62 -28
  186. package/dist/api/controllers/user.js +123 -11
  187. package/dist/api/routes/query.js +1 -1
  188. package/dist/api/routes/table.js +7 -1
  189. package/dist/api/routes/user.js +2 -1
  190. package/dist/app.js +2 -11
  191. package/dist/automations/bullboard.js +37 -10
  192. package/dist/automations/triggers.js +7 -3
  193. package/dist/automations/utils.js +11 -2
  194. package/dist/constants/index.js +13 -0
  195. package/dist/definitions/datasource.js +4 -0
  196. package/dist/integrations/base/IntegrationBase.js +2 -0
  197. package/dist/integrations/base/datasourcePlus.js +2 -0
  198. package/dist/integrations/base/sql.js +334 -180
  199. package/dist/integrations/base/sqlTable.js +143 -0
  200. package/dist/integrations/base/utils.js +30 -0
  201. package/dist/integrations/microsoftSqlServer.js +117 -9
  202. package/dist/integrations/mysql.js +14 -84
  203. package/dist/integrations/postgres.js +35 -28
  204. package/dist/integrations/utils.js +56 -9
  205. package/dist/middleware/authorized.js +2 -1
  206. package/dist/middleware/builder.js +4 -1
  207. package/dist/package.json +7 -6
  208. package/dist/tests/utilities/TestConfiguration.js +2 -1
  209. package/dist/{automations/thread.js → threads/automation.js} +23 -7
  210. package/dist/threads/index.js +58 -0
  211. package/dist/threads/query.js +61 -0
  212. package/dist/tsconfig.tsbuildinfo +1 -1
  213. package/dist/utilities/csvParser.js +46 -5
  214. package/dist/utilities/global.js +6 -2
  215. package/dist/utilities/index.js +18 -2
  216. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  217. package/dist/utilities/scriptRunner.js +4 -1
  218. package/package.json +8 -7
  219. package/scripts/integrations/mssql/data/Dockerfile +9 -0
  220. package/scripts/integrations/mssql/data/entrypoint.sh +24 -0
  221. package/scripts/integrations/mssql/data/setup.sql +54 -0
  222. package/scripts/integrations/mssql/docker-compose.yaml +12 -0
  223. package/scripts/integrations/mssql/reset.sh +3 -0
  224. package/scripts/likeCypress.ts +33 -0
  225. package/src/api/controllers/application.js +19 -2
  226. package/src/api/controllers/auth.js +3 -0
  227. package/src/api/controllers/datasource.js +56 -16
  228. package/src/api/controllers/deploy/index.js +2 -0
  229. package/src/api/controllers/dev.js +4 -1
  230. package/src/api/controllers/query.js +29 -81
  231. package/src/api/controllers/row/ExternalRequest.ts +47 -16
  232. package/src/api/controllers/row/external.js +2 -0
  233. package/src/api/controllers/row/utils.js +8 -11
  234. package/src/api/controllers/static/index.js +1 -1
  235. package/src/api/controllers/table/external.js +300 -0
  236. package/src/api/controllers/table/index.js +47 -137
  237. package/src/api/controllers/table/internal.js +155 -0
  238. package/src/api/controllers/table/utils.js +74 -33
  239. package/src/api/controllers/user.js +132 -13
  240. package/src/api/routes/query.js +1 -0
  241. package/src/api/routes/table.js +11 -0
  242. package/src/api/routes/tests/datasource.spec.js +2 -2
  243. package/src/api/routes/tests/misc.spec.js +5 -1
  244. package/src/api/routes/tests/query.spec.js +0 -1
  245. package/src/api/routes/user.js +5 -0
  246. package/src/app.ts +2 -10
  247. package/src/automations/bullboard.js +28 -11
  248. package/src/automations/tests/automation.spec.js +3 -4
  249. package/src/automations/triggers.js +7 -3
  250. package/src/automations/utils.js +12 -2
  251. package/src/constants/index.js +15 -0
  252. package/src/definitions/common.ts +7 -1
  253. package/src/definitions/datasource.ts +9 -3
  254. package/src/integrations/airtable.ts +2 -1
  255. package/src/integrations/arangodb.ts +2 -1
  256. package/src/integrations/base/IntegrationBase.ts +6 -0
  257. package/src/integrations/base/datasourcePlus.ts +9 -0
  258. package/src/integrations/base/sql.ts +359 -222
  259. package/src/integrations/base/sqlTable.ts +180 -0
  260. package/src/integrations/base/utils.ts +22 -0
  261. package/src/integrations/couchdb.ts +2 -1
  262. package/src/integrations/dynamodb.ts +2 -1
  263. package/src/integrations/elasticsearch.ts +2 -1
  264. package/src/integrations/microsoftSqlServer.ts +145 -13
  265. package/src/integrations/mongodb.ts +2 -1
  266. package/src/integrations/mysql.ts +20 -94
  267. package/src/integrations/postgres.ts +45 -35
  268. package/src/integrations/rest.ts +2 -1
  269. package/src/integrations/s3.ts +2 -1
  270. package/src/integrations/tests/microsoftSqlServer.spec.js +22 -15
  271. package/src/integrations/tests/postgres.spec.js +4 -0
  272. package/src/integrations/utils.ts +60 -8
  273. package/src/middleware/authorized.js +2 -1
  274. package/src/middleware/builder.js +4 -1
  275. package/src/tests/utilities/TestConfiguration.js +2 -1
  276. package/src/{automations/thread.js → threads/automation.js} +24 -7
  277. package/src/threads/index.js +60 -0
  278. package/src/threads/query.js +63 -0
  279. package/src/utilities/csvParser.js +48 -5
  280. package/src/utilities/global.js +7 -2
  281. package/src/utilities/index.js +18 -2
  282. package/src/utilities/queue/inMemoryQueue.js +7 -0
  283. package/src/utilities/scriptRunner.js +4 -1
  284. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -6
  285. package/src/utilities/tests/csvParser.spec.js +3 -0
  286. package/tsconfig.json +1 -1
  287. package/builder/assets/index.34964222.js +0 -201
  288. package/builder/assets/index.7469e1e4.css +0 -29
  289. package/builder/assets/vendor.278a305c.js +0 -9
  290. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">30.77% </span>
33
+ <span class="strong">30.76% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>4/13</span>
36
36
  </div>
@@ -181,7 +181,7 @@ exports.endUserPing = <span class="fstat-no" title="function not covered" >as</s
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
184
- at Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
184
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>
@@ -205,7 +205,7 @@ exports.update = async function (ctx) {
205
205
  &nbsp;
206
206
  try {
207
207
  const mainDoc = await getBuilderMainDoc()
208
- <span class="missing-if-branch" title="else path not taken" >E</span>if (mainDoc.apiKeys == null) {
208
+ if (mainDoc.apiKeys == null) {
209
209
  mainDoc.apiKeys = {}
210
210
  }
211
211
  mainDoc.apiKeys[key] = value
@@ -226,7 +226,7 @@ exports.update = async function (ctx) {
226
226
  <div class='footer quiet pad2 space-top1 center small'>
227
227
  Code coverage generated by
228
228
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
229
- at Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
229
+ at Mon Nov 22 2021 10:23:31 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.49% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>138/176</span>
28
+ <span class='fraction'>146/186</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">57.35% </span>
33
+ <span class="strong">56.94% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>39/68</span>
35
+ <span class='fraction'>41/72</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">79.31% </span>
47
+ <span class="strong">79.34% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>138/174</span>
49
+ <span class='fraction'>146/184</span>
50
50
  </div>
51
51
 
52
52
 
@@ -457,7 +457,24 @@
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>
472
+ <a name='L413'></a><a href='#L413'>413</a>
473
+ <a name='L414'></a><a href='#L414'>414</a>
474
+ <a name='L415'></a><a href='#L415'>415</a>
475
+ <a name='L416'></a><a href='#L416'>416</a>
476
+ <a name='L417'></a><a href='#L417'>417</a>
477
+ <a name='L418'></a><a href='#L418'>418</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
461
478
  <span class="cline-any cline-yes">33x</span>
462
479
  <span class="cline-any cline-yes">33x</span>
463
480
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -503,6 +520,9 @@
503
520
  <span class="cline-any cline-neutral">&nbsp;</span>
504
521
  <span class="cline-any cline-yes">33x</span>
505
522
  <span class="cline-any cline-yes">33x</span>
523
+ <span class="cline-any cline-yes">33x</span>
524
+ <span class="cline-any cline-yes">33x</span>
525
+ <span class="cline-any cline-yes">33x</span>
506
526
  <span class="cline-any cline-neutral">&nbsp;</span>
507
527
  <span class="cline-any cline-yes">33x</span>
508
528
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -714,6 +734,7 @@
714
734
  <span class="cline-any cline-neutral">&nbsp;</span>
715
735
  <span class="cline-any cline-yes">178x</span>
716
736
  <span class="cline-any cline-yes">178x</span>
737
+ <span class="cline-any cline-yes">178x</span>
717
738
  <span class="cline-any cline-neutral">&nbsp;</span>
718
739
  <span class="cline-any cline-neutral">&nbsp;</span>
719
740
  <span class="cline-any cline-yes">33x</span>
@@ -775,7 +796,11 @@
775
796
  <span class="cline-any cline-neutral">&nbsp;</span>
776
797
  <span class="cline-any cline-neutral">&nbsp;</span>
777
798
  <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-yes">11x</span>
800
+ <span class="cline-any cline-no">&nbsp;</span>
778
801
  <span class="cline-any cline-neutral">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span>
803
+ <span class="cline-any cline-yes">11x</span>
779
804
  <span class="cline-any cline-yes">11x</span>
780
805
  <span class="cline-any cline-neutral">&nbsp;</span>
781
806
  <span class="cline-any cline-yes">11x</span>
@@ -787,6 +812,8 @@
787
812
  <span class="cline-any cline-no">&nbsp;</span>
788
813
  <span class="cline-any cline-no">&nbsp;</span>
789
814
  <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
817
  <span class="cline-any cline-no">&nbsp;</span>
791
818
  <span class="cline-any cline-neutral">&nbsp;</span>
792
819
  <span class="cline-any cline-no">&nbsp;</span>
@@ -816,6 +843,10 @@
816
843
  <span class="cline-any cline-neutral">&nbsp;</span>
817
844
  <span class="cline-any cline-no">&nbsp;</span>
818
845
  <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-neutral">&nbsp;</span>
848
+ <span class="cline-any cline-no">&nbsp;</span>
849
+ <span class="cline-any cline-neutral">&nbsp;</span>
819
850
  <span class="cline-any cline-no">&nbsp;</span>
820
851
  <span class="cline-any cline-no">&nbsp;</span>
821
852
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -841,6 +872,9 @@
841
872
  <span class="cline-any cline-neutral">&nbsp;</span>
842
873
  <span class="cline-any cline-yes">5x</span>
843
874
  <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-yes">5x</span>
876
+ <span class="cline-any cline-yes">5x</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
878
  <span class="cline-any cline-neutral">&nbsp;</span>
845
879
  <span class="cline-any cline-yes">33x</span>
846
880
  <span class="cline-any cline-yes">178x</span>
@@ -903,6 +937,9 @@ const {
903
937
  revertClientLibrary,
904
938
  } = require("../../utilities/fileSystem/clientLibrary")
905
939
  const { getTenantId, isMultiTenant } = require("@budibase/auth/tenancy")
940
+ const { syncGlobalUsers } = require("./user")
941
+ const { app: appCache } = require("@budibase/auth/cache")
942
+ const { cleanupAutomations } = require("../../automations/utils")
906
943
  &nbsp;
907
944
  const URL_REGEX_SLASH = /\/|\\/g
908
945
  &nbsp;
@@ -1004,10 +1041,10 @@ exports.fetch = async ctx =&gt; {
1004
1041
  const apps = await getAllApps(CouchDB, { dev, all })
1005
1042
  &nbsp;
1006
1043
  // 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> {
1044
+ if (dev || <span class="branch-1 cbranch-no" title="branch not covered" >all)</span> {
1008
1045
  const locks = await getAllLocks()
1009
1046
  for (let app of apps) {
1010
- <span class="missing-if-branch" title="else path not taken" >E</span>if (app.status !== "development") {
1047
+ if (app.status !== "development") {
1011
1048
  continue
1012
1049
  }
1013
1050
  const lock = <span class="cstat-no" title="statement not covered" >locks.find(<span class="fstat-no" title="function not covered" >lo</span>ck =&gt; <span class="cstat-no" title="statement not covered" >lock.appId === app.appId)</span></span>
@@ -1056,7 +1093,7 @@ exports.fetchAppPackage = async ctx =&gt; {
1056
1093
  application,
1057
1094
  screens,
1058
1095
  layouts,
1059
- clientLibPath: clientLibraryPath(ctx.params.appId),
1096
+ clientLibPath: clientLibraryPath(ctx.params.appId, application.version),
1060
1097
  }
1061
1098
  }
1062
1099
  &nbsp;
@@ -1103,7 +1140,7 @@ exports.create = async ctx =&gt; {
1103
1140
  &nbsp;
1104
1141
  // Only create the default home screens and layout if we aren't importing
1105
1142
  // an app
1106
- <span class="missing-if-branch" title="else path not taken" >E</span>if (useTemplate !== "true") {
1143
+ if (useTemplate !== "true") {
1107
1144
  await createEmptyAppPackage(ctx, newApplication)
1108
1145
  }
1109
1146
  &nbsp;
@@ -1112,6 +1149,7 @@ exports.create = async ctx =&gt; {
1112
1149
  await createApp(appId)
1113
1150
  }
1114
1151
  &nbsp;
1152
+ await appCache.invalidateAppMetadata(appId, newApplication)
1115
1153
  ctx.status = 200
1116
1154
  ctx.body = newApplication
1117
1155
  }
@@ -1175,8 +1213,12 @@ exports.delete = async ctx =&gt; {
1175
1213
  if (!env.isTest() &amp;&amp; !ctx.query.unpublish) {
1176
1214
  await deleteApp(ctx.params.appId)
1177
1215
  }
1216
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.query &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >ctx.query.unpublish)</span> {
1217
+ <span class="cstat-no" title="statement not covered" > await cleanupAutomations(ctx.params.appId)</span>
1218
+ }
1178
1219
  // make sure the app/role doesn't stick around after the app has been deleted
1179
1220
  await removeAppFromUserRoles(ctx, ctx.params.appId)
1221
+ await appCache.invalidateAppMetadata(ctx.params.appId)
1180
1222
  &nbsp;
1181
1223
  ctx.status = 200
1182
1224
  ctx.body = result
@@ -1187,6 +1229,8 @@ exports.sync = <span class="fstat-no" title="function not covered" >as</span>ync
1187
1229
  <span class="cstat-no" title="statement not covered" > if (!isDevAppID(appId)) {</span>
1188
1230
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, "This action cannot be performed for production apps")</span>
1189
1231
  }
1232
+ &nbsp;
1233
+ // replicate prod to dev
1190
1234
  const prodAppId = <span class="cstat-no" title="statement not covered" >getDeployedAppID(appId)</span>
1191
1235
  &nbsp;
1192
1236
  <span class="cstat-no" title="statement not covered" > try {</span>
@@ -1216,6 +1260,10 @@ exports.sync = <span class="fstat-no" title="function not covered" >as</span>ync
1216
1260
  } catch (err) {
1217
1261
  <span class="cstat-no" title="statement not covered" > error = err</span>
1218
1262
  }
1263
+ &nbsp;
1264
+ // sync the users
1265
+ <span class="cstat-no" title="statement not covered" > await syncGlobalUsers(appId)</span>
1266
+ &nbsp;
1219
1267
  <span class="cstat-no" title="statement not covered" > if (error) {</span>
1220
1268
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, error)</span>
1221
1269
  } else {
@@ -1231,7 +1279,7 @@ const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1231
1279
  const application = await db.get(DocumentTypes.APP_METADATA)
1232
1280
  &nbsp;
1233
1281
  const newAppPackage = { ...application, ...appPackage, url }
1234
- <span class="missing-if-branch" title="else path not taken" >E</span>if (appPackage._rev !== application._rev) {
1282
+ if (appPackage._rev !== application._rev) {
1235
1283
  newAppPackage._rev = application._rev
1236
1284
  }
1237
1285
  &nbsp;
@@ -1239,7 +1287,10 @@ const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1239
1287
  // Redis, shouldn't ever store it
1240
1288
  delete newAppPackage.lockedBy
1241
1289
  &nbsp;
1242
- return await db.put(newAppPackage)
1290
+ const response = await db.put(newAppPackage)
1291
+ // remove any cached metadata, so that it will be updated
1292
+ await appCache.invalidateAppMetadata(appId)
1293
+ return response
1243
1294
  }
1244
1295
  &nbsp;
1245
1296
  const createEmptyAppPackage = async (ctx, app) =&gt; {
@@ -1264,7 +1315,7 @@ const createEmptyAppPackage = async (ctx, app) =&gt; {
1264
1315
  <div class='footer quiet pad2 space-top1 center small'>
1265
1316
  Code coverage generated by
1266
1317
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1267
- at Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
1318
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
1268
1319
  </div>
1269
1320
  </div>
1270
1321
  <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 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
232
+ at Mon Nov 22 2021 10:23:31 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 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
739
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
740
740
  </div>
741
741
  </div>
742
742
  <script src="../../prettify.js"></script>
@@ -91,7 +91,7 @@ exports.exportAppDump = async function (ctx) {
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
94
- at Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
94
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  </div>
97
97
  <script src="../../prettify.js"></script>
@@ -397,7 +397,7 @@ exports.importApps = <span class="fstat-no" title="function not covered" >as</sp
397
397
  <div class='footer quiet pad2 space-top1 center small'>
398
398
  Code coverage generated by
399
399
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
400
- at Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
400
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
401
401
  </div>
402
402
  </div>
403
403
  <script src="../../prettify.js"></script>
@@ -114,11 +114,11 @@
114
114
  <span class="cline-any cline-yes">1x</span>
115
115
  <span class="cline-any cline-yes">1x</span>
116
116
  <span class="cline-any cline-yes">1x</span>
117
- <span class="cline-any cline-yes">43x</span>
117
+ <span class="cline-any cline-yes">46x</span>
118
118
  <span class="cline-any cline-yes">1x</span>
119
119
  <span class="cline-any cline-neutral">&nbsp;</span>
120
- <span class="cline-any cline-yes">42x</span>
121
- <span class="cline-any cline-yes">42x</span>
120
+ <span class="cline-any cline-yes">45x</span>
121
+ <span class="cline-any cline-yes">45x</span>
122
122
  <span class="cline-any cline-neutral">&nbsp;</span>
123
123
  <span class="cline-any cline-neutral">&nbsp;</span>
124
124
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -169,7 +169,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
169
169
  <div class='footer quiet pad2 space-top1 center small'>
170
170
  Code coverage generated by
171
171
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
172
- at Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
172
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
173
173
  </div>
174
174
  </div>
175
175
  <script src="../../prettify.js"></script>