@budibase/server 2.0.19 → 2.0.21
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.
- package/builder/assets/{index.98a96209.js → index.e2f22248.js} +2 -2
- package/builder/index.html +1 -1
- package/coverage/clover.xml +21 -4
- package/coverage/coverage-final.json +1 -0
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +1 -1
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +1 -1
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +1 -1
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
- package/coverage/lcov-report/db/newid.js.html +1 -1
- package/coverage/lcov-report/db/utils.js.html +1 -1
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +19 -19
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
- package/coverage/lcov-report/middleware/index.html +1 -1
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +1 -1
- package/coverage/lcov-report/utilities/index.html +24 -9
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- package/coverage/lcov-report/utilities/plugins.js.html +148 -0
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +1 -1
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +33 -0
- package/dist/api/controllers/application.js +4 -1
- package/dist/api/controllers/public/utils.js +1 -1
- package/dist/api/controllers/static/index.js +3 -1
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +1 -3
- package/dist/api/controllers/table/internal.js +9 -1
- package/dist/api/controllers/table/utils.js +1 -1
- package/dist/package.json +6 -6
- package/dist/threads/automation.js +15 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utilities/plugins.js +20 -0
- package/package.json +7 -7
- package/src/api/controllers/application.ts +5 -1
- package/src/api/controllers/public/utils.ts +1 -1
- package/src/api/controllers/static/index.ts +4 -1
- package/src/api/controllers/static/templates/BudibaseApp.svelte +1 -3
- package/src/api/controllers/table/internal.ts +10 -2
- package/src/api/controllers/table/utils.ts +1 -1
- package/src/threads/automation.ts +24 -5
- package/src/utilities/plugins.js +21 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const env = require("../environment");
|
|
3
|
+
const { plugins: ProPlugins } = require("@budibase/pro");
|
|
4
|
+
const { objectStore } = require("@budibase/backend-core");
|
|
5
|
+
exports.enrichPluginURLs = plugins => {
|
|
6
|
+
if (!plugins || !plugins.length) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
return plugins.map(plugin => {
|
|
10
|
+
const cloud = !env.SELF_HOSTED;
|
|
11
|
+
const bucket = objectStore.ObjectStoreBuckets.PLUGINS;
|
|
12
|
+
const jsFileName = "plugin.min.js";
|
|
13
|
+
// In self host we need to prefix the path, as the bucket name is not part
|
|
14
|
+
// of the bucket path. In cloud, it's already part of the bucket path.
|
|
15
|
+
let jsUrl = cloud ? "https://cdn.budi.live/" : `/${bucket}/`;
|
|
16
|
+
jsUrl += ProPlugins.getBucketPath(plugin.name);
|
|
17
|
+
jsUrl += jsFileName;
|
|
18
|
+
return Object.assign(Object.assign({}, plugin), { jsUrl });
|
|
19
|
+
});
|
|
20
|
+
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "2.0.
|
|
4
|
+
"version": "2.0.21",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -77,11 +77,11 @@
|
|
|
77
77
|
"license": "GPL-3.0",
|
|
78
78
|
"dependencies": {
|
|
79
79
|
"@apidevtools/swagger-parser": "10.0.3",
|
|
80
|
-
"@budibase/backend-core": "^2.0.
|
|
81
|
-
"@budibase/client": "^2.0.
|
|
82
|
-
"@budibase/pro": "2.0.
|
|
83
|
-
"@budibase/string-templates": "^2.0.
|
|
84
|
-
"@budibase/types": "^2.0.
|
|
80
|
+
"@budibase/backend-core": "^2.0.21",
|
|
81
|
+
"@budibase/client": "^2.0.21",
|
|
82
|
+
"@budibase/pro": "2.0.20",
|
|
83
|
+
"@budibase/string-templates": "^2.0.21",
|
|
84
|
+
"@budibase/types": "^2.0.21",
|
|
85
85
|
"@bull-board/api": "3.7.0",
|
|
86
86
|
"@bull-board/koa": "3.9.4",
|
|
87
87
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -199,5 +199,5 @@
|
|
|
199
199
|
"optionalDependencies": {
|
|
200
200
|
"oracledb": "5.3.0"
|
|
201
201
|
},
|
|
202
|
-
"gitHead": "
|
|
202
|
+
"gitHead": "cfebcbf1abeb94c54c14c9d4d93c119a5e7bdc8f"
|
|
203
203
|
}
|
|
@@ -50,6 +50,7 @@ import { errors, events, migrations } from "@budibase/backend-core"
|
|
|
50
50
|
import { App, Layout, Screen, MigrationType } from "@budibase/types"
|
|
51
51
|
import { BASE_LAYOUT_PROP_IDS } from "../../constants/layouts"
|
|
52
52
|
import { groups } from "@budibase/pro"
|
|
53
|
+
import { enrichPluginURLs } from "../../utilities/plugins"
|
|
53
54
|
|
|
54
55
|
const URL_REGEX_SLASH = /\/|\\/g
|
|
55
56
|
|
|
@@ -208,10 +209,13 @@ export const fetchAppDefinition = async (ctx: any) => {
|
|
|
208
209
|
|
|
209
210
|
export const fetchAppPackage = async (ctx: any) => {
|
|
210
211
|
const db = context.getAppDB()
|
|
211
|
-
|
|
212
|
+
let application = await db.get(DocumentType.APP_METADATA)
|
|
212
213
|
const layouts = await getLayouts()
|
|
213
214
|
let screens = await getScreens()
|
|
214
215
|
|
|
216
|
+
// Enrich plugin URLs
|
|
217
|
+
application.usedPlugins = enrichPluginURLs(application.usedPlugins)
|
|
218
|
+
|
|
215
219
|
// Only filter screens if the user is not a builder
|
|
216
220
|
if (!(ctx.user.builder && ctx.user.builder.global)) {
|
|
217
221
|
const userRoleId = getUserRoleId(ctx)
|
|
@@ -22,7 +22,7 @@ export async function addRev(
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
* Performs a case
|
|
25
|
+
* Performs a case in-sensitive search on the provided documents, using the
|
|
26
26
|
* provided key and value. This will be a string based search, using the
|
|
27
27
|
* startsWith function.
|
|
28
28
|
*/
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { enrichPluginURLs } from "../../../utilities/plugins"
|
|
2
|
+
|
|
1
3
|
require("svelte/register")
|
|
2
4
|
|
|
3
5
|
const send = require("koa-send")
|
|
@@ -107,12 +109,13 @@ export const serveApp = async function (ctx: any) {
|
|
|
107
109
|
|
|
108
110
|
if (!env.isJest()) {
|
|
109
111
|
const App = require("./templates/BudibaseApp.svelte").default
|
|
112
|
+
const plugins = enrichPluginURLs(appInfo.usedPlugins)
|
|
110
113
|
const { head, html, css } = App.render({
|
|
111
114
|
title: appInfo.name,
|
|
112
115
|
production: env.isProd(),
|
|
113
116
|
appId,
|
|
114
117
|
clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
|
|
115
|
-
usedPlugins:
|
|
118
|
+
usedPlugins: plugins,
|
|
116
119
|
})
|
|
117
120
|
|
|
118
121
|
const appHbs = loadHandlebarsFile(`${__dirname}/templates/app.hbs`)
|
|
@@ -88,9 +88,7 @@
|
|
|
88
88
|
<!-- But before loadBudibase is called -->
|
|
89
89
|
{#if usedPlugins?.length}
|
|
90
90
|
{#each usedPlugins as plugin}
|
|
91
|
-
<script
|
|
92
|
-
type="application/javascript"
|
|
93
|
-
src={`/plugins/${plugin.jsUrl}`}></script>
|
|
91
|
+
<script type="application/javascript" src={plugin.jsUrl}></script>
|
|
94
92
|
{/each}
|
|
95
93
|
{/if}
|
|
96
94
|
<script type="application/javascript">
|
|
@@ -14,8 +14,10 @@ import {
|
|
|
14
14
|
fixAutoColumnSubType,
|
|
15
15
|
} from "../../../utilities/rowProcessor"
|
|
16
16
|
import { runStaticFormulaChecks } from "./bulkFormula"
|
|
17
|
-
import { Table } from "
|
|
17
|
+
import { Table } from "@budibase/types"
|
|
18
18
|
import { quotas } from "@budibase/pro"
|
|
19
|
+
import { isEqual } from "lodash"
|
|
20
|
+
import { cloneDeep } from "lodash/fp"
|
|
19
21
|
|
|
20
22
|
function checkAutoColumns(table: Table, oldTable: Table) {
|
|
21
23
|
if (!table.schema) {
|
|
@@ -123,10 +125,16 @@ export async function save(ctx: any) {
|
|
|
123
125
|
if (updatedRows && updatedRows.length !== 0) {
|
|
124
126
|
await db.bulkDocs(updatedRows)
|
|
125
127
|
}
|
|
126
|
-
|
|
128
|
+
let result = await db.put(tableToSave)
|
|
127
129
|
tableToSave._rev = result.rev
|
|
130
|
+
const savedTable = cloneDeep(tableToSave)
|
|
128
131
|
|
|
129
132
|
tableToSave = await tableSaveFunctions.after(tableToSave)
|
|
133
|
+
// the table may be updated as part of the table save after functionality - need to write it
|
|
134
|
+
if (!isEqual(savedTable, tableToSave)) {
|
|
135
|
+
result = await db.put(tableToSave)
|
|
136
|
+
tableToSave._rev = result.rev
|
|
137
|
+
}
|
|
130
138
|
// has to run after, make sure it has _id
|
|
131
139
|
await runStaticFormulaChecks(tableToSave, { oldTable, deletion: null })
|
|
132
140
|
return tableToSave
|
|
@@ -245,7 +245,7 @@ class TableSaveFunctions {
|
|
|
245
245
|
// after saving
|
|
246
246
|
async after(table: any) {
|
|
247
247
|
table = await handleSearchIndexes(table)
|
|
248
|
-
await handleDataImport(this.user, table, this.dataImport)
|
|
248
|
+
table = await handleDataImport(this.user, table, this.dataImport)
|
|
249
249
|
return table
|
|
250
250
|
}
|
|
251
251
|
|
|
@@ -252,7 +252,7 @@ class Orchestrator {
|
|
|
252
252
|
let loopStepNumber: any = undefined
|
|
253
253
|
let loopSteps: LoopStep[] | undefined = []
|
|
254
254
|
let metadata
|
|
255
|
-
|
|
255
|
+
let wasLoopStep = false
|
|
256
256
|
// check if this is a recurring automation,
|
|
257
257
|
if (isProdAppID(this._appId) && isRecurring(automation)) {
|
|
258
258
|
metadata = await this.getMetadata()
|
|
@@ -267,6 +267,7 @@ class Orchestrator {
|
|
|
267
267
|
let input,
|
|
268
268
|
iterations = 1,
|
|
269
269
|
iterationCount = 0
|
|
270
|
+
|
|
270
271
|
if (step.stepId === LOOP_STEP_ID) {
|
|
271
272
|
loopStep = step
|
|
272
273
|
loopStepNumber = stepCount
|
|
@@ -277,10 +278,8 @@ class Orchestrator {
|
|
|
277
278
|
input = await processObject(loopStep.inputs, this._context)
|
|
278
279
|
iterations = getLoopIterations(loopStep as LoopStep, input)
|
|
279
280
|
}
|
|
280
|
-
|
|
281
281
|
for (let index = 0; index < iterations; index++) {
|
|
282
282
|
let originalStepInput = cloneDeep(step.inputs)
|
|
283
|
-
|
|
284
283
|
// Handle if the user has set a max iteration count or if it reaches the max limit set by us
|
|
285
284
|
if (loopStep && input.binding) {
|
|
286
285
|
let newInput = await processObject(
|
|
@@ -313,7 +312,6 @@ class Orchestrator {
|
|
|
313
312
|
} else {
|
|
314
313
|
item = loopStep.inputs.binding
|
|
315
314
|
}
|
|
316
|
-
|
|
317
315
|
this._context.steps[loopStepNumber] = {
|
|
318
316
|
currentItem: item[index],
|
|
319
317
|
}
|
|
@@ -331,6 +329,16 @@ class Orchestrator {
|
|
|
331
329
|
innerValue,
|
|
332
330
|
`steps.${loopStepNumber}`
|
|
333
331
|
)
|
|
332
|
+
} else if (typeof value === "object") {
|
|
333
|
+
for (let [innerObject, innerValue] of Object.entries(
|
|
334
|
+
originalStepInput[key][innerKey]
|
|
335
|
+
)) {
|
|
336
|
+
originalStepInput[key][innerKey][innerObject] =
|
|
337
|
+
automationUtils.substituteLoopStep(
|
|
338
|
+
innerValue,
|
|
339
|
+
`steps.${loopStepNumber}`
|
|
340
|
+
)
|
|
341
|
+
}
|
|
334
342
|
}
|
|
335
343
|
}
|
|
336
344
|
} else {
|
|
@@ -386,6 +394,7 @@ class Orchestrator {
|
|
|
386
394
|
let stepFn = await this.getStepFunctionality(step.stepId)
|
|
387
395
|
let inputs = await processObject(originalStepInput, this._context)
|
|
388
396
|
inputs = automationUtils.cleanInputValues(inputs, step.schema.inputs)
|
|
397
|
+
|
|
389
398
|
try {
|
|
390
399
|
// appId is always passed
|
|
391
400
|
const outputs = await stepFn({
|
|
@@ -394,6 +403,7 @@ class Orchestrator {
|
|
|
394
403
|
emitter: this._emitter,
|
|
395
404
|
context: this._context,
|
|
396
405
|
})
|
|
406
|
+
|
|
397
407
|
this._context.steps[stepCount] = outputs
|
|
398
408
|
// if filter causes us to stop execution don't break the loop, set a var
|
|
399
409
|
// so that we can finish iterating through the steps and record that it stopped
|
|
@@ -419,6 +429,7 @@ class Orchestrator {
|
|
|
419
429
|
console.error(`Automation error - ${step.stepId} - ${err}`)
|
|
420
430
|
return err
|
|
421
431
|
}
|
|
432
|
+
|
|
422
433
|
if (loopStep) {
|
|
423
434
|
iterationCount++
|
|
424
435
|
if (index === iterations - 1) {
|
|
@@ -429,6 +440,13 @@ class Orchestrator {
|
|
|
429
440
|
}
|
|
430
441
|
}
|
|
431
442
|
|
|
443
|
+
// Delete the step after the loop step as it's irrelevant, since information is included
|
|
444
|
+
// in the loop step
|
|
445
|
+
if (wasLoopStep) {
|
|
446
|
+
this._context.steps.splice(loopStepNumber + 1, 1)
|
|
447
|
+
wasLoopStep = false
|
|
448
|
+
}
|
|
449
|
+
|
|
432
450
|
if (loopSteps && loopSteps.length) {
|
|
433
451
|
let tempOutput = {
|
|
434
452
|
success: true,
|
|
@@ -441,9 +459,10 @@ class Orchestrator {
|
|
|
441
459
|
outputs: tempOutput,
|
|
442
460
|
inputs: step.inputs,
|
|
443
461
|
})
|
|
462
|
+
this._context.steps[loopStepNumber] = tempOutput
|
|
444
463
|
|
|
445
|
-
this._context.steps.splice(loopStepNumber, 0, tempOutput)
|
|
446
464
|
loopSteps = undefined
|
|
465
|
+
wasLoopStep = true
|
|
447
466
|
}
|
|
448
467
|
}
|
|
449
468
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const env = require("../environment")
|
|
2
|
+
const { plugins: ProPlugins } = require("@budibase/pro")
|
|
3
|
+
const { objectStore } = require("@budibase/backend-core")
|
|
4
|
+
|
|
5
|
+
exports.enrichPluginURLs = plugins => {
|
|
6
|
+
if (!plugins || !plugins.length) {
|
|
7
|
+
return []
|
|
8
|
+
}
|
|
9
|
+
return plugins.map(plugin => {
|
|
10
|
+
const cloud = !env.SELF_HOSTED
|
|
11
|
+
const bucket = objectStore.ObjectStoreBuckets.PLUGINS
|
|
12
|
+
const jsFileName = "plugin.min.js"
|
|
13
|
+
|
|
14
|
+
// In self host we need to prefix the path, as the bucket name is not part
|
|
15
|
+
// of the bucket path. In cloud, it's already part of the bucket path.
|
|
16
|
+
let jsUrl = cloud ? "https://cdn.budi.live/" : `/${bucket}/`
|
|
17
|
+
jsUrl += ProPlugins.getBucketPath(plugin.name)
|
|
18
|
+
jsUrl += jsFileName
|
|
19
|
+
return { ...plugin, jsUrl }
|
|
20
|
+
})
|
|
21
|
+
}
|