@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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "1.0.152",
4
+ "version": "1.0.153",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -69,10 +69,10 @@
69
69
  "license": "GPL-3.0",
70
70
  "dependencies": {
71
71
  "@apidevtools/swagger-parser": "^10.0.3",
72
- "@budibase/backend-core": "^1.0.152",
73
- "@budibase/client": "^1.0.152",
74
- "@budibase/pro": "1.0.150",
75
- "@budibase/string-templates": "^1.0.152",
72
+ "@budibase/backend-core": "^1.0.153",
73
+ "@budibase/client": "^1.0.153",
74
+ "@budibase/pro": "1.0.152",
75
+ "@budibase/string-templates": "^1.0.153",
76
76
  "@bull-board/api": "^3.7.0",
77
77
  "@bull-board/koa": "^3.7.0",
78
78
  "@elastic/elasticsearch": "7.10.0",
@@ -181,5 +181,5 @@
181
181
  "optionalDependencies": {
182
182
  "oracledb": "^5.3.0"
183
183
  },
184
- "gitHead": "c63faedf44006c984a20b0b0621350f48788bc2d"
184
+ "gitHead": "14cb0e57581a78d5608a5d74d51fda3a26186c95"
185
185
  }
@@ -208,5 +208,10 @@ exports.AutomationErrors = {
208
208
  FAILURE_CONDITION: "FAILURE_CONDITION_MET",
209
209
  }
210
210
 
211
+ exports.LoopStepTypes = {
212
+ ARRAY: "Array",
213
+ STRING: "String",
214
+ }
215
+
211
216
  // pass through the list from the auth/core lib
212
217
  exports.ObjectStoreBuckets = ObjectStoreBuckets
@@ -8,7 +8,7 @@ const { DocumentTypes } = require("../db/utils")
8
8
  const { doInTenant } = require("@budibase/backend-core/tenancy")
9
9
  const { definitions: triggerDefs } = require("../automations/triggerInfo")
10
10
  const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
11
- const { AutomationErrors } = require("../constants")
11
+ const { AutomationErrors, LoopStepTypes } = require("../constants")
12
12
  const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
13
13
  const LOOP_STEP_ID = actions.ACTION_DEFINITIONS.LOOP.stepId
14
14
 
@@ -17,6 +17,41 @@ const STOPPED_STATUS = { success: false, status: "STOPPED" }
17
17
  const { cloneDeep } = require("lodash/fp")
18
18
  const env = require("../environment")
19
19
 
20
+ function typecastForLooping(loopStep, input) {
21
+ if (!input || !input.binding) {
22
+ return null
23
+ }
24
+ const isArray = Array.isArray(input.binding),
25
+ isString = typeof input.binding === "string"
26
+ try {
27
+ switch (loopStep.inputs.option) {
28
+ case LoopStepTypes.ARRAY:
29
+ if (isString) {
30
+ return JSON.parse(input.binding)
31
+ }
32
+ break
33
+ case LoopStepTypes.STRING:
34
+ if (isArray) {
35
+ return input.binding.join(",")
36
+ }
37
+ break
38
+ }
39
+ } catch (err) {
40
+ throw new Error("Unable to cast to correct type")
41
+ }
42
+ return input.binding
43
+ }
44
+
45
+ function getLoopIterations(loopStep, input) {
46
+ const binding = typecastForLooping(loopStep, input)
47
+ if (!loopStep || !binding) {
48
+ return 1
49
+ }
50
+ return Array.isArray(binding)
51
+ ? binding.length
52
+ : automationUtils.stringSplit(binding).length
53
+ }
54
+
20
55
  /**
21
56
  * The automation orchestrator is a class responsible for executing automations.
22
57
  * It handles the context of the automation and makes sure each step gets the correct
@@ -107,7 +142,9 @@ class Orchestrator {
107
142
  let loopSteps = []
108
143
  for (let step of automation.definition.steps) {
109
144
  stepCount++
110
- let input
145
+ let input,
146
+ iterations = 1,
147
+ iterationCount = 0
111
148
  if (step.stepId === LOOP_STEP_ID) {
112
149
  loopStep = step
113
150
  loopStepNumber = stepCount
@@ -116,13 +153,9 @@ class Orchestrator {
116
153
 
117
154
  if (loopStep) {
118
155
  input = await processObject(loopStep.inputs, this._context)
156
+ iterations = getLoopIterations(loopStep, input)
119
157
  }
120
- let iterations = loopStep
121
- ? Array.isArray(input.binding)
122
- ? input.binding.length
123
- : automationUtils.stringSplit(input.binding).length
124
- : 1
125
- let iterationCount = 0
158
+
126
159
  for (let index = 0; index < iterations; index++) {
127
160
  let originalStepInput = cloneDeep(step.inputs)
128
161
 
@@ -132,18 +165,11 @@ class Orchestrator {
132
165
  loopStep.inputs,
133
166
  cloneDeep(this._context)
134
167
  )
135
- newInput = automationUtils.cleanInputValues(
136
- newInput,
137
- loopStep.schema.inputs
138
- )
139
168
 
140
169
  let tempOutput = { items: loopSteps, iterations: iterationCount }
141
- if (
142
- (loopStep.inputs.option === "Array" &&
143
- !Array.isArray(newInput.binding)) ||
144
- (loopStep.inputs.option === "String" &&
145
- typeof newInput.binding !== "string")
146
- ) {
170
+ try {
171
+ newInput.binding = typecastForLooping(loopStep, newInput)
172
+ } catch (err) {
147
173
  this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
148
174
  status: AutomationErrors.INCORRECT_TYPE,
149
175
  success: false,
@@ -205,21 +231,13 @@ class Orchestrator {
205
231
  }
206
232
 
207
233
  let isFailure = false
208
- if (
209
- typeof this._context.steps[loopStepNumber]?.currentItem === "object"
210
- ) {
211
- isFailure = Object.keys(
212
- this._context.steps[loopStepNumber].currentItem
213
- ).some(value => {
214
- return (
215
- this._context.steps[loopStepNumber].currentItem[value] ===
216
- loopStep.inputs.failure
217
- )
234
+ const currentItem = this._context.steps[loopStepNumber]?.currentItem
235
+ if (currentItem && typeof currentItem === "object") {
236
+ isFailure = Object.keys(currentItem).some(value => {
237
+ return currentItem[value] === loopStep.inputs.failure
218
238
  })
219
239
  } else {
220
- isFailure =
221
- this._context.steps[loopStepNumber]?.currentItem ===
222
- loopStep.inputs.failure
240
+ isFailure = currentItem && currentItem === loopStep.inputs.failure
223
241
  }
224
242
 
225
243
  if (isFailure) {