@budibase/server 1.0.46-alpha.2 → 1.0.47

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 (187) hide show
  1. package/builder/assets/{index.0df4f7ab.css → index.39e01193.css} +1 -1
  2. package/builder/assets/{index.89280093.js → index.937b2767.js} +228 -230
  3. package/builder/assets/{vendor.10e2ad1b.js → vendor.f9faf6ab.js} +12 -12
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +247 -247
  6. package/coverage/coverage-final.json +5 -5
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/index.html +1 -1
  19. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.html +15 -15
  24. package/coverage/lcov-report/api/controllers/query/index.js.html +44 -11
  25. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/index.html +15 -15
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/row/utils.js.html +30 -21
  34. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.html +17 -17
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +16 -34
  39. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/utils.js.html +7 -16
  41. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  49. package/coverage/lcov-report/api/index.html +1 -1
  50. package/coverage/lcov-report/api/index.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/index.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  81. package/coverage/lcov-report/automations/actions.js.html +1 -1
  82. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  83. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  84. package/coverage/lcov-report/automations/index.html +1 -1
  85. package/coverage/lcov-report/automations/index.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/index.html +1 -1
  95. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  113. package/coverage/lcov-report/automations/utils.js.html +1 -1
  114. package/coverage/lcov-report/constants/index.html +1 -1
  115. package/coverage/lcov-report/constants/index.js.html +1 -1
  116. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  117. package/coverage/lcov-report/constants/screens.js.html +1 -1
  118. package/coverage/lcov-report/db/client.js.html +1 -1
  119. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  120. package/coverage/lcov-report/db/index.html +1 -1
  121. package/coverage/lcov-report/db/index.js.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  124. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  126. package/coverage/lcov-report/db/newid.js.html +1 -1
  127. package/coverage/lcov-report/db/utils.js.html +1 -1
  128. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  129. package/coverage/lcov-report/events/index.html +1 -1
  130. package/coverage/lcov-report/events/index.js.html +1 -1
  131. package/coverage/lcov-report/events/utils.js.html +1 -1
  132. package/coverage/lcov-report/index.html +33 -33
  133. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  134. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  135. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  136. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  137. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  138. package/coverage/lcov-report/middleware/currentapp.js.html +6 -33
  139. package/coverage/lcov-report/middleware/index.html +10 -10
  140. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  141. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  142. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  143. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  144. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  145. package/coverage/lcov-report/threads/automation.js.html +1 -1
  146. package/coverage/lcov-report/threads/index.html +1 -1
  147. package/coverage/lcov-report/threads/index.js.html +1 -1
  148. package/coverage/lcov-report/threads/query.js.html +1 -1
  149. package/coverage/lcov-report/threads/utils.js.html +1 -1
  150. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  151. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  152. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  153. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  154. package/coverage/lcov-report/utilities/global.js.html +1 -1
  155. package/coverage/lcov-report/utilities/index.html +1 -1
  156. package/coverage/lcov-report/utilities/index.js.html +1 -1
  157. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  158. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  159. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  160. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  162. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  164. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  165. package/coverage/lcov-report/utilities/security.js.html +1 -1
  166. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  167. package/coverage/lcov-report/utilities/users.js.html +1 -1
  168. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  169. package/coverage/lcov.info +419 -412
  170. package/dist/api/controllers/query/index.js +11 -3
  171. package/dist/api/controllers/row/utils.js +9 -8
  172. package/dist/api/controllers/table/index.js +4 -10
  173. package/dist/api/controllers/table/utils.js +2 -4
  174. package/dist/integrations/base/sql.js +6 -13
  175. package/dist/integrations/utils.js +8 -53
  176. package/dist/middleware/currentapp.js +0 -9
  177. package/dist/package.json +4 -4
  178. package/dist/tsconfig.tsbuildinfo +1 -1
  179. package/package.json +5 -5
  180. package/src/api/controllers/query/index.js +14 -3
  181. package/src/api/controllers/row/utils.js +13 -10
  182. package/src/api/controllers/table/index.js +9 -15
  183. package/src/api/controllers/table/utils.js +1 -4
  184. package/src/integrations/base/sql.ts +7 -14
  185. package/src/integrations/tests/sql.spec.js +0 -16
  186. package/src/integrations/utils.ts +10 -57
  187. package/src/middleware/currentapp.js +0 -9
@@ -130,6 +130,15 @@ function execute(ctx, opts = { rowsOnly: false }) {
130
130
  const db = new CouchDB(ctx.appId);
131
131
  const query = yield db.get(ctx.params.queryId);
132
132
  const datasource = yield db.get(query.datasourceId);
133
+ const enrichedParameters = ctx.request.body.parameters || {};
134
+ // make sure parameters are fully enriched with defaults
135
+ if (query && query.parameters) {
136
+ for (let parameter of query.parameters) {
137
+ if (!enrichedParameters[parameter.name]) {
138
+ enrichedParameters[parameter.name] = parameter.default;
139
+ }
140
+ }
141
+ }
133
142
  // call the relevant CRUD method on the integration class
134
143
  try {
135
144
  const { rows, pagination, extra } = yield Runner.run({
@@ -138,7 +147,7 @@ function execute(ctx, opts = { rowsOnly: false }) {
138
147
  queryVerb: query.queryVerb,
139
148
  fields: query.fields,
140
149
  pagination: ctx.request.body.pagination,
141
- parameters: ctx.request.body.parameters,
150
+ parameters: enrichedParameters,
142
151
  transformer: query.transformer,
143
152
  queryId: ctx.params.queryId,
144
153
  });
@@ -170,8 +179,7 @@ const removeDynamicVariables = (db, queryId) => __awaiter(void 0, void 0, void 0
170
179
  const dynamicVariables = datasource.config.dynamicVariables;
171
180
  if (dynamicVariables) {
172
181
  // delete dynamic variables from the datasource
173
- const newVariables = dynamicVariables.filter(dv => dv.queryId !== queryId);
174
- datasource.config.dynamicVariables = newVariables;
182
+ datasource.config.dynamicVariables = dynamicVariables.filter(dv => dv.queryId !== queryId);
175
183
  yield db.put(datasource);
176
184
  // invalidate the deleted variables
177
185
  const variablesToDelete = dynamicVariables.filter(dv => dv.queryId === queryId);
@@ -59,23 +59,24 @@ exports.validate = ({ appId, tableId, row, table }) => __awaiter(void 0, void 0,
59
59
  const constraints = cloneDeep(table.schema[fieldName].constraints);
60
60
  const type = table.schema[fieldName].type;
61
61
  // special case for options, need to always allow unselected (null)
62
- if ((type === FieldTypes.OPTIONS || type === FieldTypes.ARRAY) &&
63
- constraints.inclusion) {
62
+ if (type === FieldTypes.OPTIONS && constraints.inclusion) {
64
63
  constraints.inclusion.push(null);
65
64
  }
66
65
  let res;
67
66
  // Validate.js doesn't seem to handle array
68
- if (type === FieldTypes.ARRAY && row[fieldName]) {
69
- if (row[fieldName].length) {
67
+ if (type === FieldTypes.ARRAY) {
68
+ const hasValues = Array.isArray(row[fieldName]) && row[fieldName].length > 0;
69
+ // Check values are valid if values are specified
70
+ if (hasValues) {
70
71
  row[fieldName].map(val => {
71
72
  if (!constraints.inclusion.includes(val)) {
72
- errors[fieldName] = "Field not in list";
73
+ errors[fieldName] = "Value not in list";
73
74
  }
74
75
  });
75
76
  }
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`];
77
+ // Check for required constraint
78
+ if (constraints.presence === true && !hasValues) {
79
+ errors[fieldName] = "Required field";
79
80
  }
80
81
  }
81
82
  else if (type === FieldTypes.JSON && typeof row[fieldName] === "string") {
@@ -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, isSQL } = require("../../../integrations/utils");
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(tableDoc => (Object.assign(Object.assign({}, tableDoc.doc), { type: "internal", sourceId: BudibaseInternalDB._id })));
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(tableDoc => {
42
- let entities = tableDoc.doc.entities;
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, isSQL, } = require("../../../integrations/utils");
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
- const datasource = yield db.get(datasourceId);
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, opts) {
72
+ addFilters(tableName, query, filters) {
73
73
  function iterate(structure, fn) {
74
74
  for (let [key, value] of Object.entries(structure)) {
75
- const isRelationshipField = key.includes(".");
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, { tableName });
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
- query = this.addRelationships(knex, preQuery, selectStatement, tableName, relationships);
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, { tableName: endpoint.entityId });
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, { tableName: endpoint.entityId });
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
- * This function will determine whether a column is a relationship and whether it
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
- const column = existingTableSchema[key];
189
- if (shouldCopyRelationship(column, tableIds) ||
190
- shouldCopySpecialColumn(column, table.schema[key])) {
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, tableIds);
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.46-alpha.1",
4
+ "version": "1.0.46",
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.46-alpha.1",
74
- "@budibase/client": "^1.0.46-alpha.1",
75
- "@budibase/string-templates": "^1.0.46-alpha.1",
73
+ "@budibase/backend-core": "^1.0.46",
74
+ "@budibase/client": "^1.0.46",
75
+ "@budibase/string-templates": "^1.0.46",
76
76
  "@bull-board/api": "^3.7.0",
77
77
  "@bull-board/koa": "^3.7.0",
78
78
  "@elastic/elasticsearch": "7.10.0",