@budibase/server 1.0.152 → 1.0.153

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 (167) hide show
  1. package/builder/assets/{index.4f24612c.js → index.01cadea9.js} +1 -1
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +139 -118
  4. package/coverage/coverage-final.json +2 -2
  5. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/index.html +1 -1
  15. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  44. package/coverage/lcov-report/api/index.html +1 -1
  45. package/coverage/lcov-report/api/index.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/index.html +1 -1
  57. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  74. package/coverage/lcov-report/automations/actions.js.html +1 -1
  75. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  76. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  77. package/coverage/lcov-report/automations/index.html +1 -1
  78. package/coverage/lcov-report/automations/index.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/index.html +1 -1
  86. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  96. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  105. package/coverage/lcov-report/constants/index.html +5 -5
  106. package/coverage/lcov-report/constants/index.js.html +19 -4
  107. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  108. package/coverage/lcov-report/constants/screens.js.html +1 -1
  109. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  110. package/coverage/lcov-report/db/index.html +1 -1
  111. package/coverage/lcov-report/db/index.js.html +1 -1
  112. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  116. package/coverage/lcov-report/db/newid.js.html +1 -1
  117. package/coverage/lcov-report/db/utils.js.html +1 -1
  118. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  119. package/coverage/lcov-report/events/index.html +1 -1
  120. package/coverage/lcov-report/events/index.js.html +1 -1
  121. package/coverage/lcov-report/events/utils.js.html +1 -1
  122. package/coverage/lcov-report/index.html +21 -21
  123. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  124. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  125. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  126. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  127. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  128. package/coverage/lcov-report/middleware/index.html +1 -1
  129. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  130. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  131. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  132. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  133. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  134. package/coverage/lcov-report/threads/automation.js.html +117 -63
  135. package/coverage/lcov-report/threads/index.html +19 -19
  136. package/coverage/lcov-report/threads/query.js.html +1 -1
  137. package/coverage/lcov-report/threads/utils.js.html +1 -1
  138. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  139. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  140. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  141. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  142. package/coverage/lcov-report/utilities/global.js.html +1 -1
  143. package/coverage/lcov-report/utilities/index.html +1 -1
  144. package/coverage/lcov-report/utilities/index.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  146. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  148. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  150. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  151. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  152. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  153. package/coverage/lcov-report/utilities/security.js.html +1 -1
  154. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  156. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  157. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  158. package/coverage/lcov-report/utilities/users.js.html +1 -1
  159. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  160. package/coverage/lcov.info +229 -194
  161. package/dist/constants/index.js +4 -0
  162. package/dist/package.json +5 -5
  163. package/dist/threads/automation.js +46 -21
  164. package/dist/tsconfig.build.tsbuildinfo +1 -1
  165. package/package.json +6 -6
  166. package/src/constants/index.js +5 -0
  167. package/src/threads/automation.js +49 -31
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">71.81% </span>
26
+ <span class="strong">71.47% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>3014/4197</span>
28
+ <span class='fraction'>3015/4218</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">51.53% </span>
33
+ <span class="strong">51.17% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>873/1694</span>
35
+ <span class='fraction'>872/1704</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">70.11% </span>
40
+ <span class="strong">69.88% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>427/609</span>
42
+ <span class='fraction'>427/611</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">71.96% </span>
47
+ <span class="strong">71.62% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>2972/4130</span>
49
+ <span class='fraction'>2973/4151</span>
50
50
  </div>
51
51
 
52
52
 
@@ -249,13 +249,13 @@
249
249
  <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
250
250
  </td>
251
251
  <td data-value="100" class="pct high">100%</td>
252
- <td data-value="36" class="abs high">36/36</td>
252
+ <td data-value="37" class="abs high">37/37</td>
253
253
  <td data-value="50" class="pct medium">50%</td>
254
254
  <td data-value="2" class="abs medium">1/2</td>
255
255
  <td data-value="100" class="pct high">100%</td>
256
256
  <td data-value="2" class="abs high">2/2</td>
257
257
  <td data-value="100" class="pct high">100%</td>
258
- <td data-value="35" class="abs high">35/35</td>
258
+ <td data-value="36" class="abs high">36/36</td>
259
259
  </tr>
260
260
 
261
261
  <tr>
@@ -335,17 +335,17 @@
335
335
 
336
336
  <tr>
337
337
  <td class="file medium" data-value="threads"><a href="threads/index.html">threads</a></td>
338
- <td data-value="72.98" class="pic medium">
339
- <div class="chart"><div class="cover-fill" style="width: 72%"></div><div class="cover-empty" style="width: 28%"></div></div>
338
+ <td data-value="68.19" class="pic medium">
339
+ <div class="chart"><div class="cover-fill" style="width: 68%"></div><div class="cover-empty" style="width: 32%"></div></div>
340
340
  </td>
341
- <td data-value="72.98" class="pct medium">72.98%</td>
342
- <td data-value="285" class="abs medium">208/285</td>
343
- <td data-value="52.84" class="pct medium">52.84%</td>
344
- <td data-value="123" class="abs medium">65/123</td>
345
- <td data-value="87.09" class="pct high">87.09%</td>
346
- <td data-value="31" class="abs high">27/31</td>
347
- <td data-value="73.11" class="pct medium">73.11%</td>
348
- <td data-value="279" class="abs medium">204/279</td>
341
+ <td data-value="68.19" class="pct medium">68.19%</td>
342
+ <td data-value="305" class="abs medium">208/305</td>
343
+ <td data-value="48.12" class="pct low">48.12%</td>
344
+ <td data-value="133" class="abs low">64/133</td>
345
+ <td data-value="81.81" class="pct high">81.81%</td>
346
+ <td data-value="33" class="abs high">27/33</td>
347
+ <td data-value="68.22" class="pct medium">68.22%</td>
348
+ <td data-value="299" class="abs medium">204/299</td>
349
349
  </tr>
350
350
 
351
351
  <tr>
@@ -431,7 +431,7 @@
431
431
  <div class='footer quiet pad2 space-top1 center small'>
432
432
  Code coverage generated by
433
433
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
434
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
434
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
435
435
  </div>
436
436
  <script src="prettify.js"></script>
437
437
  <script>
@@ -70,7 +70,7 @@
70
70
  <div class='footer quiet pad2 space-top1 center small'>
71
71
  Code coverage generated by
72
72
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
73
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
73
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
74
74
  </div>
75
75
  <script src="../../prettify.js"></script>
76
76
  <script>
@@ -101,7 +101,7 @@
101
101
  <div class='footer quiet pad2 space-top1 center small'>
102
102
  Code coverage generated by
103
103
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
104
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
105
105
  </div>
106
106
  <script src="../../prettify.js"></script>
107
107
  <script>
@@ -127,7 +127,7 @@ exports.middleware =
127
127
  <div class='footer quiet pad2 space-top1 center small'>
128
128
  Code coverage generated by
129
129
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
130
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
130
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
131
131
  </div>
132
132
  <script src="../prettify.js"></script>
133
133
  <script>
@@ -307,7 +307,7 @@ module.exports = async (ctx, permType) =&gt; {
307
307
  <div class='footer quiet pad2 space-top1 center small'>
308
308
  Code coverage generated by
309
309
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
310
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
310
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
311
311
  </div>
312
312
  <script src="../prettify.js"></script>
313
313
  <script>
@@ -463,7 +463,7 @@ module.exports = async (ctx, next) =&gt; {
463
463
  <div class='footer quiet pad2 space-top1 center small'>
464
464
  Code coverage generated by
465
465
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
466
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
466
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
467
467
  </div>
468
468
  <script src="../prettify.js"></script>
469
469
  <script>
@@ -206,7 +206,7 @@
206
206
  <div class='footer quiet pad2 space-top1 center small'>
207
207
  Code coverage generated by
208
208
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
209
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
209
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
210
210
  </div>
211
211
  <script src="../prettify.js"></script>
212
212
  <script>
@@ -154,7 +154,7 @@ module.exports.params = schema =&gt; {
154
154
  <div class='footer quiet pad2 space-top1 center small'>
155
155
  Code coverage generated by
156
156
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
157
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
157
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
158
158
  </div>
159
159
  <script src="../prettify.js"></script>
160
160
  <script>
@@ -133,7 +133,7 @@ module.exports = function ({ requiresAppId } = <span class="branch-0 cbranch-no"
133
133
  <div class='footer quiet pad2 space-top1 center small'>
134
134
  Code coverage generated by
135
135
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
136
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
136
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
137
137
  </div>
138
138
  <script src="../prettify.js"></script>
139
139
  <script>
@@ -253,7 +253,7 @@ module.exports.bodySubResource = (main, sub) =&gt; {
253
253
  <div class='footer quiet pad2 space-top1 center small'>
254
254
  Code coverage generated by
255
255
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
256
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
256
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
257
257
  </div>
258
258
  <script src="../prettify.js"></script>
259
259
  <script>
@@ -100,7 +100,7 @@ module.exports = async (ctx, next) =&gt; {
100
100
  <div class='footer quiet pad2 space-top1 center small'>
101
101
  Code coverage generated by
102
102
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
103
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
103
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
104
104
  </div>
105
105
  <script src="../prettify.js"></script>
106
106
  <script>
@@ -91,7 +91,7 @@ exports.isWebhookEndpoint = ctx =&gt; {
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" rel="noopener noreferrer">istanbul</a>
94
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
94
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  <script src="../prettify.js"></script>
97
97
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">57.63% </span>
26
+ <span class="strong">50.6% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>83/144</span>
28
+ <span class='fraction'>83/164</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">32.3% </span>
33
+ <span class="strong">26.66% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>21/65</span>
35
+ <span class='fraction'>20/75</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">81.81% </span>
40
+ <span class="strong">69.23% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>9/11</span>
42
+ <span class='fraction'>9/13</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">57.34% </span>
47
+ <span class="strong">50.3% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>82/143</span>
49
+ <span class='fraction'>82/163</span>
50
50
  </div>
51
51
 
52
52
 
@@ -391,7 +391,25 @@
391
391
  <a name='L326'></a><a href='#L326'>326</a>
392
392
  <a name='L327'></a><a href='#L327'>327</a>
393
393
  <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
395
413
  <span class="cline-any cline-yes">3x</span>
396
414
  <span class="cline-any cline-yes">3x</span>
397
415
  <span class="cline-any cline-yes">3x</span>
@@ -411,6 +429,41 @@
411
429
  <span class="cline-any cline-yes">3x</span>
412
430
  <span class="cline-any cline-neutral">&nbsp;</span>
413
431
  <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-no">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-no">&nbsp;</span>
436
+ <span class="cline-any cline-no">&nbsp;</span>
437
+ <span class="cline-any cline-no">&nbsp;</span>
438
+ <span class="cline-any cline-no">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-no">&nbsp;</span>
441
+ <span class="cline-any cline-no">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-no">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-no">&nbsp;</span>
446
+ <span class="cline-any cline-no">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-no">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-no">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-no">&nbsp;</span>
458
+ <span class="cline-any cline-no">&nbsp;</span>
459
+ <span class="cline-any cline-no">&nbsp;</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-no">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
+ <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
467
  <span class="cline-any cline-neutral">&nbsp;</span>
415
468
  <span class="cline-any cline-neutral">&nbsp;</span>
416
469
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -502,6 +555,8 @@
502
555
  <span class="cline-any cline-yes">5x</span>
503
556
  <span class="cline-any cline-neutral">&nbsp;</span>
504
557
  <span class="cline-any cline-yes">5x</span>
558
+ <span class="cline-any cline-yes">5x</span>
559
+ <span class="cline-any cline-yes">5x</span>
505
560
  <span class="cline-any cline-no">&nbsp;</span>
506
561
  <span class="cline-any cline-no">&nbsp;</span>
507
562
  <span class="cline-any cline-no">&nbsp;</span>
@@ -509,15 +564,11 @@
509
564
  <span class="cline-any cline-neutral">&nbsp;</span>
510
565
  <span class="cline-any cline-yes">5x</span>
511
566
  <span class="cline-any cline-no">&nbsp;</span>
512
- <span class="cline-any cline-neutral">&nbsp;</span>
513
- <span class="cline-any cline-yes">5x</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-no">&nbsp;</span>
516
568
  <span class="cline-any cline-neutral">&nbsp;</span>
517
569
  <span class="cline-any cline-neutral">&nbsp;</span>
518
570
  <span class="cline-any cline-yes">5x</span>
519
571
  <span class="cline-any cline-yes">5x</span>
520
- <span class="cline-any cline-yes">5x</span>
521
572
  <span class="cline-any cline-neutral">&nbsp;</span>
522
573
  <span class="cline-any cline-neutral">&nbsp;</span>
523
574
  <span class="cline-any cline-yes">5x</span>
@@ -525,17 +576,10 @@
525
576
  <span class="cline-any cline-neutral">&nbsp;</span>
526
577
  <span class="cline-any cline-neutral">&nbsp;</span>
527
578
  <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-no">&nbsp;</span>
529
- <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-neutral">&nbsp;</span>
532
579
  <span class="cline-any cline-neutral">&nbsp;</span>
533
580
  <span class="cline-any cline-no">&nbsp;</span>
534
581
  <span class="cline-any cline-no">&nbsp;</span>
535
- <span class="cline-any cline-neutral">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
539
583
  <span class="cline-any cline-neutral">&nbsp;</span>
540
584
  <span class="cline-any cline-no">&nbsp;</span>
541
585
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -599,20 +643,12 @@
599
643
  <span class="cline-any cline-neutral">&nbsp;</span>
600
644
  <span class="cline-any cline-no">&nbsp;</span>
601
645
  <span class="cline-any cline-no">&nbsp;</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
646
  <span class="cline-any cline-no">&nbsp;</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
647
  <span class="cline-any cline-no">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
648
  <span class="cline-any cline-no">&nbsp;</span>
614
649
  <span class="cline-any cline-neutral">&nbsp;</span>
615
650
  <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-no">&nbsp;</span>
616
652
  <span class="cline-any cline-neutral">&nbsp;</span>
617
653
  <span class="cline-any cline-neutral">&nbsp;</span>
618
654
  <span class="cline-any cline-no">&nbsp;</span>
@@ -729,7 +765,7 @@ const { DocumentTypes } = require("../db/utils")
729
765
  const { doInTenant } = require("@budibase/backend-core/tenancy")
730
766
  const { definitions: triggerDefs } = require("../automations/triggerInfo")
731
767
  const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
732
- const { AutomationErrors } = require("../constants")
768
+ const { AutomationErrors, LoopStepTypes } = require("../constants")
733
769
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
734
770
  const LOOP_STEP_ID = actions.ACTION_DEFINITIONS.LOOP.stepId
735
771
  &nbsp;
@@ -738,6 +774,41 @@ const STOPPED_STATUS = { success: false, status: "STOPPED" }
738
774
  const { cloneDeep } = require("lodash/fp")
739
775
  const env = require("../environment")
740
776
  &nbsp;
777
+ function <span class="fstat-no" title="function not covered" >typecastForLooping(</span>loopStep, input) {
778
+ <span class="cstat-no" title="statement not covered" > if (!input || !input.binding) {</span>
779
+ <span class="cstat-no" title="statement not covered" > return null</span>
780
+ }
781
+ const isArray = <span class="cstat-no" title="statement not covered" >Array.isArray(input.binding),</span>
782
+ isString = <span class="cstat-no" title="statement not covered" >typeof input.binding === "string"</span>
783
+ <span class="cstat-no" title="statement not covered" > try {</span>
784
+ <span class="cstat-no" title="statement not covered" > switch (loopStep.inputs.option) {</span>
785
+ case LoopStepTypes.ARRAY:
786
+ <span class="cstat-no" title="statement not covered" > if (isString) {</span>
787
+ <span class="cstat-no" title="statement not covered" > return JSON.parse(input.binding)</span>
788
+ }
789
+ <span class="cstat-no" title="statement not covered" > break</span>
790
+ case LoopStepTypes.STRING:
791
+ <span class="cstat-no" title="statement not covered" > if (isArray) {</span>
792
+ <span class="cstat-no" title="statement not covered" > return input.binding.join(",")</span>
793
+ }
794
+ <span class="cstat-no" title="statement not covered" > break</span>
795
+ }
796
+ } catch (err) {
797
+ <span class="cstat-no" title="statement not covered" > throw new Error("Unable to cast to correct type")</span>
798
+ }
799
+ <span class="cstat-no" title="statement not covered" > return input.binding</span>
800
+ }
801
+ &nbsp;
802
+ function <span class="fstat-no" title="function not covered" >getLoopIterations(</span>loopStep, input) {
803
+ const binding = <span class="cstat-no" title="statement not covered" >typecastForLooping(loopStep, input)</span>
804
+ <span class="cstat-no" title="statement not covered" > if (!loopStep || !binding) {</span>
805
+ <span class="cstat-no" title="statement not covered" > return 1</span>
806
+ }
807
+ <span class="cstat-no" title="statement not covered" > return Array.isArray(binding)</span>
808
+ ? binding.length
809
+ : automationUtils.stringSplit(binding).length
810
+ }
811
+ &nbsp;
741
812
  /**
742
813
  * The automation orchestrator is a class responsible for executing automations.
743
814
  * It handles the context of the automation and makes sure each step gets the correct
@@ -828,7 +899,9 @@ class Orchestrator {
828
899
  let loopSteps = []
829
900
  for (let step of automation.definition.steps) {
830
901
  stepCount++
831
- let input
902
+ let input,
903
+ iterations = 1,
904
+ iterationCount = 0
832
905
  <span class="missing-if-branch" title="if path not taken" >I</span>if (step.stepId === LOOP_STEP_ID) {
833
906
  <span class="cstat-no" title="statement not covered" > loopStep = step</span>
834
907
  <span class="cstat-no" title="statement not covered" > loopStepNumber = stepCount</span>
@@ -837,13 +910,9 @@ class Orchestrator {
837
910
  &nbsp;
838
911
  <span class="missing-if-branch" title="if path not taken" >I</span>if (loopStep) {
839
912
  <span class="cstat-no" title="statement not covered" > input = await processObject(loopStep.inputs, this._context)</span>
913
+ <span class="cstat-no" title="statement not covered" > iterations = getLoopIterations(loopStep, input)</span>
840
914
  }
841
- let iterations = loopStep
842
- ? <span class="branch-0 cbranch-no" title="branch not covered" >Array.isArray(input.binding)</span>
843
- ? input.binding.length
844
- : automationUtils.stringSplit(input.binding).length
845
- : 1
846
- let iterationCount = 0
915
+ &nbsp;
847
916
  for (let index = 0; index &lt; iterations; index++) {
848
917
  let originalStepInput = cloneDeep(step.inputs)
849
918
  &nbsp;
@@ -853,18 +922,11 @@ class Orchestrator {
853
922
  loopStep.inputs,
854
923
  cloneDeep(this._context)
855
924
  )
856
- <span class="cstat-no" title="statement not covered" > newInput = automationUtils.cleanInputValues(</span>
857
- newInput,
858
- loopStep.schema.inputs
859
- )
860
925
  &nbsp;
861
926
  let tempOutput = <span class="cstat-no" title="statement not covered" >{ items: loopSteps, iterations: iterationCount }</span>
862
- <span class="cstat-no" title="statement not covered" > if (</span>
863
- (loopStep.inputs.option === "Array" &amp;&amp;
864
- !Array.isArray(newInput.binding)) ||
865
- (loopStep.inputs.option === "String" &amp;&amp;
866
- typeof newInput.binding !== "string")
867
- ) {
927
+ <span class="cstat-no" title="statement not covered" > try {</span>
928
+ <span class="cstat-no" title="statement not covered" > newInput.binding = typecastForLooping(loopStep, newInput)</span>
929
+ } catch (err) {
868
930
  <span class="cstat-no" title="statement not covered" > this.updateContextAndOutput(loopStepNumber, step, tempOutput, {</span>
869
931
  status: AutomationErrors.INCORRECT_TYPE,
870
932
  success: false,
@@ -926,21 +988,13 @@ class Orchestrator {
926
988
  }
927
989
  &nbsp;
928
990
  let isFailure = <span class="cstat-no" title="statement not covered" >false</span>
929
- <span class="cstat-no" title="statement not covered" > if (</span>
930
- typeof this._context.steps[loopStepNumber]?.currentItem === "object"
931
- ) {
932
- <span class="cstat-no" title="statement not covered" > isFailure = Object.keys(</span>
933
- this._context.steps[loopStepNumber].currentItem
934
- ).some(<span class="fstat-no" title="function not covered" >va</span>lue =&gt; {
935
- <span class="cstat-no" title="statement not covered" > return (</span>
936
- this._context.steps[loopStepNumber].currentItem[value] ===
937
- loopStep.inputs.failure
938
- )
991
+ const currentItem = <span class="cstat-no" title="statement not covered" >this._context.steps[loopStepNumber]?.currentItem</span>
992
+ <span class="cstat-no" title="statement not covered" > if (currentItem &amp;&amp; typeof currentItem === "object") {</span>
993
+ <span class="cstat-no" title="statement not covered" > isFailure = Object.keys(currentItem).some(<span class="fstat-no" title="function not covered" >va</span>lue =&gt; {</span>
994
+ <span class="cstat-no" title="statement not covered" > return currentItem[value] === loopStep.inputs.failure</span>
939
995
  })
940
996
  } else {
941
- <span class="cstat-no" title="statement not covered" > isFailure =</span>
942
- this._context.steps[loopStepNumber]?.currentItem ===
943
- loopStep.inputs.failure
997
+ <span class="cstat-no" title="statement not covered" > isFailure = currentItem &amp;&amp; currentItem === loopStep.inputs.failure</span>
944
998
  }
945
999
  &nbsp;
946
1000
  <span class="cstat-no" title="statement not covered" > if (isFailure) {</span>
@@ -1054,7 +1108,7 @@ module.exports = (input, callback) =&gt; {
1054
1108
  <div class='footer quiet pad2 space-top1 center small'>
1055
1109
  Code coverage generated by
1056
1110
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1057
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
1111
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
1058
1112
  </div>
1059
1113
  <script src="../prettify.js"></script>
1060
1114
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">72.98% </span>
26
+ <span class="strong">68.19% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>208/285</span>
28
+ <span class='fraction'>208/305</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">52.84% </span>
33
+ <span class="strong">48.12% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>65/123</span>
35
+ <span class='fraction'>64/133</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">87.09% </span>
40
+ <span class="strong">81.81% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>27/31</span>
42
+ <span class='fraction'>27/33</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">73.11% </span>
47
+ <span class="strong">68.22% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>204/279</span>
49
+ <span class='fraction'>204/299</span>
50
50
  </div>
51
51
 
52
52
 
@@ -80,17 +80,17 @@
80
80
  </thead>
81
81
  <tbody><tr>
82
82
  <td class="file medium" data-value="automation.js"><a href="automation.js.html">automation.js</a></td>
83
- <td data-value="57.63" class="pic medium">
84
- <div class="chart"><div class="cover-fill" style="width: 57%"></div><div class="cover-empty" style="width: 43%"></div></div>
83
+ <td data-value="50.6" class="pic medium">
84
+ <div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div>
85
85
  </td>
86
- <td data-value="57.63" class="pct medium">57.63%</td>
87
- <td data-value="144" class="abs medium">83/144</td>
88
- <td data-value="32.3" class="pct low">32.3%</td>
89
- <td data-value="65" class="abs low">21/65</td>
90
- <td data-value="81.81" class="pct high">81.81%</td>
91
- <td data-value="11" class="abs high">9/11</td>
92
- <td data-value="57.34" class="pct medium">57.34%</td>
93
- <td data-value="143" class="abs medium">82/143</td>
86
+ <td data-value="50.6" class="pct medium">50.6%</td>
87
+ <td data-value="164" class="abs medium">83/164</td>
88
+ <td data-value="26.66" class="pct low">26.66%</td>
89
+ <td data-value="75" class="abs low">20/75</td>
90
+ <td data-value="69.23" class="pct medium">69.23%</td>
91
+ <td data-value="13" class="abs medium">9/13</td>
92
+ <td data-value="50.3" class="pct medium">50.3%</td>
93
+ <td data-value="163" class="abs medium">82/163</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
134
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
135
135
  </div>
136
136
  <script src="../prettify.js"></script>
137
137
  <script>
@@ -679,7 +679,7 @@ module.exports = (input, callback) =&gt; {
679
679
  <div class='footer quiet pad2 space-top1 center small'>
680
680
  Code coverage generated by
681
681
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
682
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
682
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
683
683
  </div>
684
684
  <script src="../prettify.js"></script>
685
685
  <script>
@@ -304,7 +304,7 @@ exports.hasExtraData = response =&gt; {
304
304
  <div class='footer quiet pad2 space-top1 center small'>
305
305
  Code coverage generated by
306
306
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
307
- at Wed May 11 2022 11:14:36 GMT+0000 (Coordinated Universal Time)
307
+ at Wed May 11 2022 11:48:37 GMT+0000 (Coordinated Universal Time)
308
308
  </div>
309
309
  <script src="../prettify.js"></script>
310
310
  <script>