@budibase/server 1.0.44-alpha.7 → 1.0.45
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.dc63b6b2.js → index.04ee727d.js} +234 -235
- package/builder/assets/{index.deca2e9d.css → index.39e01193.css} +1 -1
- package/builder/assets/{vendor.10e2ad1b.js → vendor.f9faf6ab.js} +12 -12
- package/builder/index.html +3 -3
- package/coverage/clover.xml +208 -217
- package/coverage/coverage-final.json +5 -5
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.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/component.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/hosting.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/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.js.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 +15 -15
- package/coverage/lcov-report/api/controllers/row/index.js.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/utils.js.html +14 -29
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.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 +17 -17
- package/coverage/lcov-report/api/controllers/table/index.js.html +16 -34
- package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/utils.js.html +7 -16
- 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/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.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/hosting.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/index.js.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/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/row.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/static.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/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/createRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/deleteRow.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/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/automations/utils.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/client.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 +25 -25
- 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/authorized.js.html +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +6 -33
- package/coverage/lcov-report/middleware/index.html +10 -10
- package/coverage/lcov-report/middleware/joi-validator.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/usageQuota.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +1 -1
- package/coverage/lcov-report/threads/automation.js.html +1 -1
- package/coverage/lcov-report/threads/index.html +1 -1
- package/coverage/lcov-report/threads/index.js.html +1 -1
- package/coverage/lcov-report/threads/query.js.html +1 -1
- package/coverage/lcov-report/threads/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/bcrypt.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 +1 -1
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- 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/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +2 -2
- package/coverage/lcov.info +347 -361
- package/dist/api/controllers/row/utils.js +6 -12
- package/dist/api/controllers/table/index.js +4 -10
- package/dist/api/controllers/table/utils.js +2 -4
- package/dist/integrations/base/sql.js +6 -13
- package/dist/integrations/utils.js +8 -53
- package/dist/middleware/currentapp.js +0 -9
- package/dist/package.json +4 -4
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/workerRequests.js +1 -1
- package/package.json +5 -5
- package/src/api/controllers/row/utils.js +6 -11
- package/src/api/controllers/table/index.js +9 -15
- package/src/api/controllers/table/utils.js +1 -4
- package/src/integrations/base/sql.ts +7 -14
- package/src/integrations/tests/sql.spec.js +0 -16
- package/src/integrations/utils.ts +10 -57
- package/src/middleware/currentapp.js +0 -9
- package/src/utilities/workerRequests.js +1 -1
|
@@ -65,18 +65,12 @@ exports.validate = ({ appId, tableId, row, table }) => __awaiter(void 0, void 0,
|
|
|
65
65
|
}
|
|
66
66
|
let res;
|
|
67
67
|
// Validate.js doesn't seem to handle array
|
|
68
|
-
if (type === FieldTypes.ARRAY && row[fieldName]) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
else if (constraints.presence && row[fieldName].length === 0) {
|
|
77
|
-
// non required MultiSelect creates an empty array, which should not throw errors
|
|
78
|
-
errors[fieldName] = [`${fieldName} is required`];
|
|
79
|
-
}
|
|
68
|
+
if (type === FieldTypes.ARRAY && row[fieldName] && row[fieldName].length) {
|
|
69
|
+
row[fieldName].map(val => {
|
|
70
|
+
if (!constraints.inclusion.includes(val)) {
|
|
71
|
+
errors[fieldName] = "Field not in list";
|
|
72
|
+
}
|
|
73
|
+
});
|
|
80
74
|
}
|
|
81
75
|
else if (type === FieldTypes.JSON && typeof row[fieldName] === "string") {
|
|
82
76
|
// this should only happen if there is an error
|
|
@@ -12,7 +12,7 @@ const CouchDB = require("../../../db");
|
|
|
12
12
|
const internal = require("./internal");
|
|
13
13
|
const external = require("./external");
|
|
14
14
|
const csvParser = require("../../../utilities/csvParser");
|
|
15
|
-
const { isExternalTable
|
|
15
|
+
const { isExternalTable } = require("../../../integrations/utils");
|
|
16
16
|
const { getTableParams, getDatasourceParams, BudibaseInternalDB, } = require("../../../db/utils");
|
|
17
17
|
const { getTable } = require("./utils");
|
|
18
18
|
function pickApi({ tableId, table }) {
|
|
@@ -34,18 +34,12 @@ exports.fetch = function (ctx) {
|
|
|
34
34
|
const internalTables = yield db.allDocs(getTableParams(null, {
|
|
35
35
|
include_docs: true,
|
|
36
36
|
}));
|
|
37
|
-
const internal = internalTables.rows.map(
|
|
37
|
+
const internal = internalTables.rows.map(row => (Object.assign(Object.assign({}, row.doc), { type: "internal", sourceId: BudibaseInternalDB._id })));
|
|
38
38
|
const externalTables = yield db.allDocs(getDatasourceParams("plus", {
|
|
39
39
|
include_docs: true,
|
|
40
40
|
}));
|
|
41
|
-
const external = externalTables.rows.flatMap(
|
|
42
|
-
|
|
43
|
-
if (entities) {
|
|
44
|
-
return Object.values(entities).map(entity => (Object.assign(Object.assign({}, entity), { type: "external", sourceId: tableDoc.doc._id, sql: isSQL(tableDoc.doc) })));
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
return [];
|
|
48
|
-
}
|
|
41
|
+
const external = externalTables.rows.flatMap(row => {
|
|
42
|
+
return Object.values(row.doc.entities || {}).map(entity => (Object.assign(Object.assign({}, entity), { type: "external", sourceId: row.doc._id })));
|
|
49
43
|
});
|
|
50
44
|
ctx.body = [...internal, ...external];
|
|
51
45
|
});
|
|
@@ -15,7 +15,7 @@ const { isEqual } = require("lodash/fp");
|
|
|
15
15
|
const { AutoFieldSubTypes, FieldTypes } = require("../../../constants");
|
|
16
16
|
const { inputProcessing } = require("../../../utilities/rowProcessor");
|
|
17
17
|
const { USERS_TABLE_SCHEMA, SwitchableTypes } = require("../../../constants");
|
|
18
|
-
const { isExternalTable, breakExternalTableId,
|
|
18
|
+
const { isExternalTable, breakExternalTableId, } = require("../../../integrations/utils");
|
|
19
19
|
const { getViews, saveView } = require("../view/utils");
|
|
20
20
|
const viewTemplate = require("../view/viewBuilder");
|
|
21
21
|
exports.checkForColumnUpdates = (db, oldTable, updatedTable) => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -207,9 +207,7 @@ exports.getTable = (appId, tableId) => __awaiter(void 0, void 0, void 0, functio
|
|
|
207
207
|
const db = new CouchDB(appId);
|
|
208
208
|
if (isExternalTable(tableId)) {
|
|
209
209
|
let { datasourceId, tableName } = breakExternalTableId(tableId);
|
|
210
|
-
|
|
211
|
-
const table = yield exports.getExternalTable(appId, datasourceId, tableName);
|
|
212
|
-
return Object.assign(Object.assign({}, table), { sql: isSQL(datasource) });
|
|
210
|
+
return exports.getExternalTable(appId, datasourceId, tableName);
|
|
213
211
|
}
|
|
214
212
|
else {
|
|
215
213
|
return db.get(tableId);
|
|
@@ -69,16 +69,10 @@ class InternalBuilder {
|
|
|
69
69
|
this.client = client;
|
|
70
70
|
}
|
|
71
71
|
// right now we only do filters on the specific table being queried
|
|
72
|
-
addFilters(query, filters
|
|
72
|
+
addFilters(tableName, query, filters) {
|
|
73
73
|
function iterate(structure, fn) {
|
|
74
74
|
for (let [key, value] of Object.entries(structure)) {
|
|
75
|
-
|
|
76
|
-
if (!opts.relationship && !isRelationshipField) {
|
|
77
|
-
fn(`${opts.tableName}.${key}`, value);
|
|
78
|
-
}
|
|
79
|
-
if (opts.relationship && isRelationshipField) {
|
|
80
|
-
fn(key, value);
|
|
81
|
-
}
|
|
75
|
+
fn(`${tableName}.${key}`, value);
|
|
82
76
|
}
|
|
83
77
|
}
|
|
84
78
|
if (!filters) {
|
|
@@ -254,7 +248,7 @@ class InternalBuilder {
|
|
|
254
248
|
if (foundOffset) {
|
|
255
249
|
query = query.offset(foundOffset);
|
|
256
250
|
}
|
|
257
|
-
query = this.addFilters(query, filters
|
|
251
|
+
query = this.addFilters(tableName, query, filters);
|
|
258
252
|
// add sorting to pre-query
|
|
259
253
|
query = this.addSorting(query, json);
|
|
260
254
|
// @ts-ignore
|
|
@@ -267,14 +261,13 @@ class InternalBuilder {
|
|
|
267
261
|
preQuery = this.addSorting(preQuery, json);
|
|
268
262
|
}
|
|
269
263
|
// handle joins
|
|
270
|
-
|
|
271
|
-
return this.addFilters(query, filters, { relationship: true });
|
|
264
|
+
return this.addRelationships(knex, preQuery, selectStatement, tableName, relationships);
|
|
272
265
|
}
|
|
273
266
|
update(knex, json, opts) {
|
|
274
267
|
const { endpoint, body, filters } = json;
|
|
275
268
|
let query = knex(endpoint.entityId);
|
|
276
269
|
const parsedBody = parseBody(body);
|
|
277
|
-
query = this.addFilters(query, filters
|
|
270
|
+
query = this.addFilters(endpoint.entityId, query, filters);
|
|
278
271
|
// mysql can't use returning
|
|
279
272
|
if (opts.disableReturning) {
|
|
280
273
|
return query.update(parsedBody);
|
|
@@ -286,7 +279,7 @@ class InternalBuilder {
|
|
|
286
279
|
delete(knex, json, opts) {
|
|
287
280
|
const { endpoint, filters } = json;
|
|
288
281
|
let query = knex(endpoint.entityId);
|
|
289
|
-
query = this.addFilters(query, filters
|
|
282
|
+
query = this.addFilters(endpoint.entityId, query, filters);
|
|
290
283
|
// mysql can't use returning
|
|
291
284
|
if (opts.disableReturning) {
|
|
292
285
|
return query.delete();
|
|
@@ -125,12 +125,7 @@ function isSQL(datasource) {
|
|
|
125
125
|
if (!datasource || !datasource.source) {
|
|
126
126
|
return false;
|
|
127
127
|
}
|
|
128
|
-
const SQL = [
|
|
129
|
-
datasource_1.SourceNames.POSTGRES,
|
|
130
|
-
datasource_1.SourceNames.SQL_SERVER,
|
|
131
|
-
datasource_1.SourceNames.MYSQL,
|
|
132
|
-
datasource_1.SourceNames.ORACLE,
|
|
133
|
-
];
|
|
128
|
+
const SQL = [datasource_1.SourceNames.POSTGRES, datasource_1.SourceNames.SQL_SERVER, datasource_1.SourceNames.MYSQL];
|
|
134
129
|
return SQL.indexOf(datasource.source) !== -1;
|
|
135
130
|
}
|
|
136
131
|
exports.isSQL = isSQL;
|
|
@@ -142,40 +137,8 @@ function isIsoDateString(str) {
|
|
|
142
137
|
return d.toISOString() === str;
|
|
143
138
|
}
|
|
144
139
|
exports.isIsoDateString = isIsoDateString;
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
* is currently valid. The reason for the validity check is that tables can be deleted
|
|
148
|
-
* outside of Budibase control and if this is the case it will break Budibase relationships.
|
|
149
|
-
* The tableIds is a list passed down from the main finalise tables function, which is
|
|
150
|
-
* based on the tables that have just been fetched. This will only really be used on subsequent
|
|
151
|
-
* fetches to the first one - if the user is periodically refreshing Budibase knowledge of tables.
|
|
152
|
-
* @param column The column to check, to see if it is a valid relationship.
|
|
153
|
-
* @param tableIds The IDs of the tables which currently exist.
|
|
154
|
-
*/
|
|
155
|
-
function shouldCopyRelationship(column, tableIds) {
|
|
156
|
-
return column.type === constants_1.FieldTypes.LINK && column.tableId && tableIds.includes(column.tableId);
|
|
157
|
-
}
|
|
158
|
-
/**
|
|
159
|
-
* Similar function to the shouldCopyRelationship function, but instead this looks for options and boolean
|
|
160
|
-
* types. It is possible to switch a string -> options and a number -> boolean (and vice versus) need to make
|
|
161
|
-
* sure that these get copied over when tables are fetched. Also checks whether they are still valid, if a
|
|
162
|
-
* column has changed type in the external database then copying it over may not be possible.
|
|
163
|
-
* @param column The column to check for options or boolean type.
|
|
164
|
-
* @param fetchedColumn The fetched column to check for the type in the external database.
|
|
165
|
-
*/
|
|
166
|
-
function shouldCopySpecialColumn(column, fetchedColumn) {
|
|
167
|
-
return column.type === constants_1.FieldTypes.OPTIONS ||
|
|
168
|
-
((!fetchedColumn || fetchedColumn.type === constants_1.FieldTypes.NUMBER) && column.type === constants_1.FieldTypes.BOOLEAN);
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Looks for columns which need to be copied over into the new table definitions, like relationships
|
|
172
|
-
* and options types.
|
|
173
|
-
* @param tableName The name of the table which is being checked.
|
|
174
|
-
* @param table The specific table which is being checked.
|
|
175
|
-
* @param entities All the tables that existed before - the old table definitions.
|
|
176
|
-
* @param tableIds The IDs of the tables which exist now, to check if anything has been removed.
|
|
177
|
-
*/
|
|
178
|
-
function copyExistingPropsOver(tableName, table, entities, tableIds) {
|
|
140
|
+
// add the existing relationships from the entities if they exist, to prevent them from being overridden
|
|
141
|
+
function copyExistingPropsOver(tableName, table, entities) {
|
|
179
142
|
if (entities && entities[tableName]) {
|
|
180
143
|
if (entities[tableName].primaryDisplay) {
|
|
181
144
|
table.primaryDisplay = entities[tableName].primaryDisplay;
|
|
@@ -185,28 +148,20 @@ function copyExistingPropsOver(tableName, table, entities, tableIds) {
|
|
|
185
148
|
if (!existingTableSchema.hasOwnProperty(key)) {
|
|
186
149
|
continue;
|
|
187
150
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
151
|
+
if (existingTableSchema[key].type === constants_1.FieldTypes.LINK ||
|
|
152
|
+
existingTableSchema[key].type === constants_1.FieldTypes.OPTIONS ||
|
|
153
|
+
((!table.schema[key] || table.schema[key].type === constants_1.FieldTypes.NUMBER) &&
|
|
154
|
+
existingTableSchema[key].type === constants_1.FieldTypes.BOOLEAN)) {
|
|
191
155
|
table.schema[key] = existingTableSchema[key];
|
|
192
156
|
}
|
|
193
157
|
}
|
|
194
158
|
}
|
|
195
159
|
return table;
|
|
196
160
|
}
|
|
197
|
-
/**
|
|
198
|
-
* Look through the final table definitions to see if anything needs to be
|
|
199
|
-
* copied over from the old and if any errors have occurred mark them so
|
|
200
|
-
* that the user can be made aware.
|
|
201
|
-
* @param tables The list of tables that have been retrieved from the external database.
|
|
202
|
-
* @param entities The old list of tables, if there was any to look for definitions in.
|
|
203
|
-
*/
|
|
204
161
|
function finaliseExternalTables(tables, entities) {
|
|
205
162
|
const invalidColumns = Object.values(constants_1.InvalidColumns);
|
|
206
163
|
let finalTables = {};
|
|
207
164
|
const errors = {};
|
|
208
|
-
// @ts-ignore
|
|
209
|
-
const tableIds = Object.values(tables).map(table => table._id);
|
|
210
165
|
for (let [name, table] of Object.entries(tables)) {
|
|
211
166
|
const schemaFields = Object.keys(table.schema);
|
|
212
167
|
// make sure every table has a key
|
|
@@ -219,7 +174,7 @@ function finaliseExternalTables(tables, entities) {
|
|
|
219
174
|
continue;
|
|
220
175
|
}
|
|
221
176
|
// make sure all previous props have been added back
|
|
222
|
-
finalTables[name] = copyExistingPropsOver(name, table, entities
|
|
177
|
+
finalTables[name] = copyExistingPropsOver(name, table, entities);
|
|
223
178
|
}
|
|
224
179
|
// sort the tables by name
|
|
225
180
|
finalTables = Object.entries(finalTables)
|
|
@@ -49,15 +49,6 @@ module.exports = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
49
49
|
!isWebhookEndpoint(ctx) &&
|
|
50
50
|
(!ctx.user || !ctx.user.builder || !ctx.user.builder.global)) {
|
|
51
51
|
clearCookie(ctx, Cookies.CurrentApp);
|
|
52
|
-
// have to set the return url on the server side as client side is not available
|
|
53
|
-
setCookie(ctx, ctx.url, Cookies.RETURN_URL, {
|
|
54
|
-
// don't sign so the browser can easily read
|
|
55
|
-
sign: false,
|
|
56
|
-
// use the request domain to match how ui handles the return url cookie.
|
|
57
|
-
// it's important we don't use the shared domain here as the builder
|
|
58
|
-
// can't delete from it without awareness of the domain.
|
|
59
|
-
requestDomain: true,
|
|
60
|
-
});
|
|
61
52
|
return ctx.redirect("/");
|
|
62
53
|
}
|
|
63
54
|
let appId, roleId = BUILTIN_ROLE_IDS.PUBLIC;
|
package/dist/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.0.44
|
|
4
|
+
"version": "1.0.44",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -70,9 +70,9 @@
|
|
|
70
70
|
"license": "GPL-3.0",
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@apidevtools/swagger-parser": "^10.0.3",
|
|
73
|
-
"@budibase/backend-core": "^1.0.44
|
|
74
|
-
"@budibase/client": "^1.0.44
|
|
75
|
-
"@budibase/string-templates": "^1.0.44
|
|
73
|
+
"@budibase/backend-core": "^1.0.44",
|
|
74
|
+
"@budibase/client": "^1.0.44",
|
|
75
|
+
"@budibase/string-templates": "^1.0.44",
|
|
76
76
|
"@bull-board/api": "^3.7.0",
|
|
77
77
|
"@bull-board/koa": "^3.7.0",
|
|
78
78
|
"@elastic/elasticsearch": "7.10.0",
|