@budibase/server 1.0.212-alpha.9 → 1.0.214

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 (224) hide show
  1. package/builder/assets/index.24307ca0.css +6 -0
  2. package/builder/assets/index.5afb2e7e.js +1316 -0
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +287 -315
  5. package/coverage/coverage-final.json +8 -8
  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 +6 -9
  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 +7 -7
  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 +17 -47
  25. package/coverage/lcov-report/api/controllers/row/index.html +34 -34
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +11 -95
  28. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +8 -17
  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 +12 -57
  76. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  77. package/coverage/lcov-report/automations/index.html +17 -17
  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 +4 -4
  105. package/coverage/lcov-report/constants/index.html +1 -1
  106. package/coverage/lcov-report/constants/index.js.html +1 -1
  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 +10 -10
  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 +6 -9
  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 +38 -38
  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 +2 -2
  135. package/coverage/lcov-report/threads/index.html +1 -1
  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/budibaseDir.js.html +1 -1
  139. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  140. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  141. package/coverage/lcov-report/utilities/global.js.html +1 -1
  142. package/coverage/lcov-report/utilities/index.html +1 -1
  143. package/coverage/lcov-report/utilities/index.js.html +1 -1
  144. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  150. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  151. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  152. package/coverage/lcov-report/utilities/security.js.html +1 -1
  153. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  156. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  157. package/coverage/lcov-report/utilities/users.js.html +1 -1
  158. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  159. package/coverage/lcov.info +540 -590
  160. package/dist/api/controllers/backup.js +2 -3
  161. package/dist/api/controllers/row/external.js +7 -19
  162. package/dist/api/controllers/row/internalSearch.js +1 -22
  163. package/dist/api/controllers/row/utils.js +0 -3
  164. package/dist/automations/automationUtils.js +4 -16
  165. package/dist/automations/triggers.js +1 -1
  166. package/dist/db/utils.js +0 -1
  167. package/dist/definitions/datasource.js +0 -1
  168. package/dist/integrations/airtable.js +0 -1
  169. package/dist/integrations/arangodb.js +0 -1
  170. package/dist/integrations/base/sql.js +3 -20
  171. package/dist/integrations/couchdb.js +0 -1
  172. package/dist/integrations/dynamodb.js +0 -1
  173. package/dist/integrations/elasticsearch.js +0 -1
  174. package/dist/integrations/firebase.js +0 -1
  175. package/dist/integrations/googlesheets.js +0 -1
  176. package/dist/integrations/index.js +0 -4
  177. package/dist/integrations/microsoftSqlServer.js +1 -2
  178. package/dist/integrations/mongodb.js +0 -1
  179. package/dist/integrations/mysql.js +1 -2
  180. package/dist/integrations/oracle.js +0 -1
  181. package/dist/integrations/postgres.js +1 -2
  182. package/dist/integrations/redis.js +0 -1
  183. package/dist/integrations/rest.js +0 -1
  184. package/dist/integrations/s3.js +0 -1
  185. package/dist/package.json +6 -7
  186. package/dist/threads/automation.js +1 -1
  187. package/dist/tsconfig.build.tsbuildinfo +1 -1
  188. package/dist/utilities/fileSystem/index.js +6 -16
  189. package/package.json +7 -8
  190. package/src/api/controllers/backup.js +2 -3
  191. package/src/api/controllers/row/external.js +9 -19
  192. package/src/api/controllers/row/internalSearch.js +0 -28
  193. package/src/api/controllers/row/utils.js +0 -3
  194. package/src/automations/automationUtils.js +4 -19
  195. package/src/automations/triggers.js +1 -1
  196. package/src/db/utils.js +0 -1
  197. package/src/definitions/common.ts +0 -1
  198. package/src/definitions/datasource.ts +0 -2
  199. package/src/integrations/airtable.ts +0 -1
  200. package/src/integrations/arangodb.ts +0 -1
  201. package/src/integrations/base/sql.ts +11 -25
  202. package/src/integrations/couchdb.ts +0 -1
  203. package/src/integrations/dynamodb.ts +0 -1
  204. package/src/integrations/elasticsearch.ts +0 -1
  205. package/src/integrations/firebase.ts +0 -1
  206. package/src/integrations/googlesheets.ts +0 -1
  207. package/src/integrations/index.ts +0 -4
  208. package/src/integrations/microsoftSqlServer.ts +0 -2
  209. package/src/integrations/mongodb.ts +0 -1
  210. package/src/integrations/mysql.ts +0 -2
  211. package/src/integrations/oracle.ts +0 -1
  212. package/src/integrations/postgres.ts +0 -2
  213. package/src/integrations/redis.ts +0 -1
  214. package/src/integrations/rest.ts +0 -1
  215. package/src/integrations/s3.ts +0 -1
  216. package/src/threads/automation.js +1 -1
  217. package/src/utilities/fileSystem/index.js +8 -22
  218. package/builder/assets/index.a5ae8cfa.js +0 -1312
  219. package/builder/assets/index.c6912819.css +0 -6
  220. package/dist/integrations/snowflake.js +0 -102
  221. package/scripts/integrations/oracle/instantclient/linux/arm64/basiclite-19.10.zip +0 -0
  222. package/scripts/integrations/oracle/instantclient/linux/arm64/install.sh +0 -23
  223. package/scripts/integrations/oracle/instantclient/linux/install.sh +0 -10
  224. package/src/integrations/snowflake.ts +0 -99
@@ -13,12 +13,11 @@ const { events, context } = require("@budibase/backend-core");
13
13
  const { DocumentTypes } = require("../../db/utils");
14
14
  exports.exportAppDump = function (ctx) {
15
15
  return __awaiter(this, void 0, void 0, function* () {
16
- let { appId, excludeRows } = ctx.query;
16
+ const { appId } = ctx.query;
17
17
  const appName = decodeURI(ctx.query.appname);
18
- excludeRows = excludeRows === "true";
19
18
  const backupIdentifier = `${appName}-export-${new Date().getTime()}.txt`;
20
19
  ctx.attachment(backupIdentifier);
21
- ctx.body = yield streamBackup(appId, excludeRows);
20
+ ctx.body = yield streamBackup(appId);
22
21
  yield context.doInAppContext(appId, () => __awaiter(this, void 0, void 0, function* () {
23
22
  const appDb = context.getAppDB();
24
23
  const app = yield appDb.get(DocumentTypes.APP_METADATA);
@@ -155,41 +155,29 @@ exports.validate = () => __awaiter(void 0, void 0, void 0, function* () {
155
155
  return { valid: true };
156
156
  });
157
157
  exports.exportRows = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
158
- const { datasourceId } = breakExternalTableId(ctx.params.tableId);
158
+ const { datasourceId, tableName } = breakExternalTableId(ctx.params.tableId);
159
159
  const db = getAppDB();
160
- const format = ctx.query.format;
161
- const { columns } = ctx.request.body;
160
+ let format = ctx.query.format;
162
161
  const datasource = yield db.get(datasourceId);
163
162
  if (!datasource || !datasource.entities) {
164
163
  ctx.throw(400, "Datasource has not been configured for plus API.");
165
164
  }
165
+ const tables = datasource.entities;
166
+ const table = tables[tableName];
166
167
  ctx.request.body = {
167
168
  query: {
168
169
  oneOf: {
169
- _id: ctx.request.body.rows.map(row => JSON.parse(decodeURI(row))[0]),
170
+ [table.primaryDisplay]: ctx.request.body.rows.map(id => breakRowIdField(id)[0]),
170
171
  },
171
172
  },
172
173
  };
173
174
  let result = yield exports.search(ctx);
174
- let rows = [];
175
- // Filter data to only specified columns if required
176
- if (columns && columns.length) {
177
- for (let i = 0; i < result.rows.length; i++) {
178
- rows[i] = {};
179
- for (let column of columns) {
180
- rows[i][column] = result.rows[i][column];
181
- }
182
- }
183
- }
184
- else {
185
- rows = result.rows;
186
- }
187
- let headers = Object.keys(rows[0]);
175
+ let headers = Object.keys(result.rows[0]);
188
176
  const exporter = exporters[format];
189
177
  const filename = `export.${format}`;
190
178
  // send down the file
191
179
  ctx.attachment(filename);
192
- return apiFileReturn(exporter(headers, rows));
180
+ return apiFileReturn(exporter(headers, result.rows));
193
181
  });
194
182
  exports.fetchEnrichedRow = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
195
183
  const id = ctx.params.rowId;
@@ -18,7 +18,7 @@ const { getAppId } = require("@budibase/backend-core/context");
18
18
  */
19
19
  class QueryBuilder {
20
20
  constructor(base) {
21
- this.query = Object.assign({ string: {}, fuzzy: {}, range: {}, equal: {}, notEqual: {}, empty: {}, notEmpty: {}, oneOf: {} }, base);
21
+ this.query = Object.assign({ string: {}, fuzzy: {}, range: {}, equal: {}, notEqual: {}, empty: {}, notEmpty: {} }, base);
22
22
  this.limit = 50;
23
23
  this.sortOrder = "ascending";
24
24
  this.sortType = "string";
@@ -96,10 +96,6 @@ class QueryBuilder {
96
96
  this.query.notEmpty[key] = value;
97
97
  return this;
98
98
  }
99
- addOneOf(key, value) {
100
- this.query.oneOf[key] = value;
101
- return this;
102
- }
103
99
  /**
104
100
  * Preprocesses a value before going into a lucene search.
105
101
  * Transforms strings to lowercase and wraps strings and bools in quotes.
@@ -205,23 +201,6 @@ class QueryBuilder {
205
201
  if (this.query.notEmpty) {
206
202
  build(this.query.notEmpty, key => `${key}:["" TO *]`);
207
203
  }
208
- if (this.query.oneOf) {
209
- build(this.query.oneOf, (key, value) => {
210
- if (!Array.isArray(value)) {
211
- if (typeof value === "string") {
212
- value = value.split(",");
213
- }
214
- else {
215
- return "";
216
- }
217
- }
218
- let orStatement = `${builder.preprocess(value[0], allPreProcessingOpts)}`;
219
- for (let i = 1; i < value.length; i++) {
220
- orStatement += ` OR ${builder.preprocess(value[i], allPreProcessingOpts)}`;
221
- }
222
- return `${key}:(${orStatement})`;
223
- });
224
- }
225
204
  return query;
226
205
  }
227
206
  buildSearchBody() {
@@ -70,9 +70,6 @@ exports.validate = ({ tableId, row, table }) => __awaiter(void 0, void 0, void 0
70
70
  // Validate.js doesn't seem to handle array
71
71
  if (type === FieldTypes.ARRAY && row[fieldName]) {
72
72
  if (row[fieldName].length) {
73
- if (!Array.isArray(row[fieldName])) {
74
- row[fieldName] = row[fieldName].split(",");
75
- }
76
73
  row[fieldName].map(val => {
77
74
  if (!constraints.inclusion.includes(val) &&
78
75
  constraints.inclusion.length !== 0) {
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  const { getTable } = require("../api/controllers/table/utils");
12
- const { findHBSBlocks, decodeJSBinding, isJSBinding, encodeJSBinding, } = require("@budibase/string-templates");
12
+ const { findHBSBlocks } = require("@budibase/string-templates");
13
13
  /**
14
14
  * When values are input to the system generally they will be of type string as this is required for template strings.
15
15
  * This can generate some odd scenarios as the Schema of the automation requires a number but the builder might supply
@@ -81,23 +81,11 @@ exports.getError = err => {
81
81
  return typeof err !== "string" ? err.toString() : err;
82
82
  };
83
83
  exports.substituteLoopStep = (hbsString, substitute) => {
84
- let blocks = [];
85
- let checkForJS = isJSBinding(hbsString);
86
- if (checkForJS) {
87
- hbsString = decodeJSBinding(hbsString);
88
- blocks.push(hbsString);
89
- }
90
- else {
91
- blocks = findHBSBlocks(hbsString);
92
- }
84
+ let blocks = findHBSBlocks(hbsString);
93
85
  for (let block of blocks) {
86
+ let oldBlock = block;
94
87
  block = block.replace(/loop/, substitute);
95
- if (checkForJS) {
96
- hbsString = encodeJSBinding(block);
97
- }
98
- else {
99
- hbsString = block;
100
- }
88
+ hbsString = hbsString.replace(new RegExp(oldBlock, "g"), block);
101
89
  }
102
90
  return hbsString;
103
91
  };
@@ -95,7 +95,7 @@ exports.externalTrigger = function (automation, params, { getResponses } = {}) {
95
95
  // values are likely to be submitted as strings, so we shall convert to correct type
96
96
  const coercedFields = {};
97
97
  const fields = automation.definition.trigger.inputs.fields;
98
- for (let key of Object.keys(fields || {})) {
98
+ for (let key of Object.keys(fields)) {
99
99
  coercedFields[key] = coerce(params.fields[key], fields[key]);
100
100
  }
101
101
  params.fields = coercedFields;
package/dist/db/utils.js CHANGED
@@ -54,7 +54,6 @@ exports.isDevAppID = isDevAppID;
54
54
  exports.isProdAppID = isProdAppID;
55
55
  exports.USER_METDATA_PREFIX = `${DocumentTypes.ROW}${SEPARATOR}${InternalTables.USER_METADATA}${SEPARATOR}`;
56
56
  exports.LINK_USER_METADATA_PREFIX = `${DocumentTypes.LINK}${SEPARATOR}${InternalTables.USER_METADATA}${SEPARATOR}`;
57
- exports.TABLE_ROW_PREFIX = `${DocumentTypes.ROW}${SEPARATOR}${DocumentTypes.TABLE}`;
58
57
  exports.ViewNames = ViewNames;
59
58
  exports.InternalTables = InternalTables;
60
59
  exports.DocumentTypes = DocumentTypes;
@@ -52,7 +52,6 @@ var SourceNames;
52
52
  SourceNames["GOOGLE_SHEETS"] = "GOOGLE_SHEETS";
53
53
  SourceNames["FIRESTORE"] = "FIRESTORE";
54
54
  SourceNames["REDIS"] = "REDIS";
55
- SourceNames["SNOWFLAKE"] = "SNOWFLAKE";
56
55
  })(SourceNames = exports.SourceNames || (exports.SourceNames = {}));
57
56
  var IncludeRelationships;
58
57
  (function (IncludeRelationships) {
@@ -17,7 +17,6 @@ var AirtableModule;
17
17
  docs: "https://airtable.com/api",
18
18
  description: "Airtable is a spreadsheet-database hybrid, with the features of a database but applied to a spreadsheet.",
19
19
  friendlyName: "Airtable",
20
- type: "Spreadsheet",
21
20
  datasource: {
22
21
  apiKey: {
23
22
  type: datasource_1.DatasourceFieldTypes.PASSWORD,
@@ -16,7 +16,6 @@ var ArangoModule;
16
16
  const SCHEMA = {
17
17
  docs: "https://github.com/arangodb/arangojs",
18
18
  friendlyName: "ArangoDB",
19
- type: "Non-relational",
20
19
  description: "ArangoDB is a scalable open-source multi-model database natively supporting graph, document and search. All supported data models & access patterns can be combined in queries allowing for maximal flexibility. ",
21
20
  datasource: {
22
21
  url: {
@@ -89,23 +89,6 @@ function parseFilters(filters) {
89
89
  }
90
90
  return filters;
91
91
  }
92
- function generateSelectStatement(json, knex) {
93
- var _a;
94
- const { resource, meta } = json;
95
- const schema = (_a = meta === null || meta === void 0 ? void 0 : meta.table) === null || _a === void 0 ? void 0 : _a.schema;
96
- return resource.fields.map(field => {
97
- const fieldNames = field.split(/\./g);
98
- const tableName = fieldNames[0];
99
- const columnName = fieldNames[1];
100
- if (columnName && knex.client.config.client === utils_1.SqlClients.POSTGRES) {
101
- const externalType = schema === null || schema === void 0 ? void 0 : schema[columnName].externalType;
102
- if (externalType === null || externalType === void 0 ? void 0 : externalType.includes("money")) {
103
- return knex.raw(`"${tableName}"."${columnName}"::money::numeric as "${field}"`);
104
- }
105
- }
106
- return `${field} as ${field}`;
107
- });
108
- }
109
92
  class InternalBuilder {
110
93
  constructor(client) {
111
94
  this.client = client;
@@ -226,7 +209,7 @@ class InternalBuilder {
226
209
  }
227
210
  return query;
228
211
  }
229
- addRelationships(query, fromTable, relationships) {
212
+ addRelationships(knex, query, fields, fromTable, relationships) {
230
213
  if (!relationships) {
231
214
  return query;
232
215
  }
@@ -328,7 +311,7 @@ class InternalBuilder {
328
311
  if (resource.fields && resource.fields.length > 0) {
329
312
  // select the resources as the format "table.columnName" - this is what is provided
330
313
  // by the resource builder further up
331
- selectStatement = generateSelectStatement(json, knex);
314
+ selectStatement = resource.fields.map(field => `${field} as ${field}`);
332
315
  }
333
316
  let foundLimit = limit || BASE_LIMIT;
334
317
  // handle pagination
@@ -364,7 +347,7 @@ class InternalBuilder {
364
347
  preQuery = this.addSorting(preQuery, json);
365
348
  }
366
349
  // handle joins
367
- query = this.addRelationships(preQuery, tableName, relationships);
350
+ query = this.addRelationships(knex, preQuery, selectStatement, tableName, relationships);
368
351
  return this.addFilters(query, filters, { relationship: true });
369
352
  }
370
353
  update(knex, json, opts) {
@@ -16,7 +16,6 @@ var CouchDBModule;
16
16
  const SCHEMA = {
17
17
  docs: "https://docs.couchdb.org/en/stable/",
18
18
  friendlyName: "CouchDB",
19
- type: "Non-relational",
20
19
  description: "Apache CouchDB is an open-source document-oriented NoSQL database, implemented in Erlang.",
21
20
  datasource: {
22
21
  url: {
@@ -18,7 +18,6 @@ var DynamoModule;
18
18
  docs: "https://github.com/dabit3/dynamodb-documentclient-cheat-sheet",
19
19
  description: "Amazon DynamoDB is a key-value and document database that delivers single-digit millisecond performance at any scale.",
20
20
  friendlyName: "DynamoDB",
21
- type: "Non-relational",
22
21
  datasource: {
23
22
  region: {
24
23
  type: datasource_1.DatasourceFieldTypes.STRING,
@@ -17,7 +17,6 @@ var ElasticsearchModule;
17
17
  docs: "https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/index.html",
18
18
  description: "Elasticsearch is a search engine based on the Lucene library. It provides a distributed, multitenant-capable full-text search engine with an HTTP web interface and schema-free JSON documents.",
19
19
  friendlyName: "ElasticSearch",
20
- type: "Non-relational",
21
20
  datasource: {
22
21
  url: {
23
22
  type: datasource_1.DatasourceFieldTypes.STRING,
@@ -16,7 +16,6 @@ var Firebase;
16
16
  const SCHEMA = {
17
17
  docs: "https://firebase.google.com/docs/firestore/quickstart",
18
18
  friendlyName: "Firestore",
19
- type: "Non-relational",
20
19
  description: "Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.",
21
20
  datasource: {
22
21
  email: {
@@ -33,7 +33,6 @@ var GoogleSheetsModule;
33
33
  docs: "https://developers.google.com/sheets/api/quickstart/nodejs",
34
34
  description: "Create and collaborate on online spreadsheets in real-time and from any device. ",
35
35
  friendlyName: "Google Sheets",
36
- type: "Spreadsheet",
37
36
  datasource: {
38
37
  spreadsheetId: {
39
38
  display: "Google Sheet URL",
@@ -13,7 +13,6 @@ const rest = require("./rest");
13
13
  const googlesheets = require("./googlesheets");
14
14
  const firebase = require("./firebase");
15
15
  const redis = require("./redis");
16
- const snowflake = require("./snowflake");
17
16
  const { SourceNames } = require("../definitions/datasource");
18
17
  const environment = require("../environment");
19
18
  const DEFINITIONS = {
@@ -30,7 +29,6 @@ const DEFINITIONS = {
30
29
  [SourceNames.REST]: rest.schema,
31
30
  [SourceNames.FIRESTORE]: firebase.schema,
32
31
  [SourceNames.REDIS]: redis.schema,
33
- [SourceNames.SNOWFLAKE]: snowflake.schema,
34
32
  };
35
33
  const INTEGRATIONS = {
36
34
  [SourceNames.POSTGRES]: postgres.integration,
@@ -47,8 +45,6 @@ const INTEGRATIONS = {
47
45
  [SourceNames.FIRESTORE]: firebase.integration,
48
46
  [SourceNames.GOOGLE_SHEETS]: googlesheets.integration,
49
47
  [SourceNames.REDIS]: redis.integration,
50
- [SourceNames.FIREBASE]: firebase.integration,
51
- [SourceNames.SNOWFLAKE]: snowflake.integration,
52
48
  };
53
49
  // optionally add oracle integration if the oracle binary can be installed
54
50
  if (!(process.arch === "arm64" && process.platform === "darwin")) {
@@ -21,7 +21,6 @@ var MSSQLModule;
21
21
  plus: true,
22
22
  description: "Microsoft SQL Server is a relational database management system developed by Microsoft. ",
23
23
  friendlyName: "MS SQL Server",
24
- type: "Relational",
25
24
  datasource: {
26
25
  user: {
27
26
  type: datasource_1.DatasourceFieldTypes.STRING,
@@ -202,7 +201,7 @@ var MSSQLModule;
202
201
  if (typeof name !== "string") {
203
202
  continue;
204
203
  }
205
- schema[name] = Object.assign(Object.assign({ autocolumn: !!autoColumns.find((col) => col === name), name: name }, (0, utils_1.convertSqlType)(def.DATA_TYPE)), { externalType: def.DATA_TYPE });
204
+ schema[name] = Object.assign({ autocolumn: !!autoColumns.find((col) => col === name), name: name }, (0, utils_1.convertSqlType)(def.DATA_TYPE));
206
205
  }
207
206
  tables[tableName] = {
208
207
  _id: (0, utils_1.buildExternalTableId)(datasourceId, tableName),
@@ -16,7 +16,6 @@ var MongoDBModule;
16
16
  const SCHEMA = {
17
17
  docs: "https://github.com/mongodb/node-mongodb-native",
18
18
  friendlyName: "MongoDB",
19
- type: "Non-relational",
20
19
  description: "MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.",
21
20
  datasource: {
22
21
  connectionString: {
@@ -24,7 +24,6 @@ var MySQLModule;
24
24
  docs: "https://github.com/sidorares/node-mysql2",
25
25
  plus: true,
26
26
  friendlyName: "MySQL",
27
- type: "Relational",
28
27
  description: "MySQL Database Service is a fully managed database service to deploy cloud-native applications. ",
29
28
  datasource: {
30
29
  host: {
@@ -188,7 +187,7 @@ var MySQLModule;
188
187
  const isAuto = typeof column.Extra === "string" &&
189
188
  (column.Extra === "auto_increment" ||
190
189
  column.Extra.toLowerCase().includes("generated"));
191
- schema[columnName] = Object.assign(Object.assign({ name: columnName, autocolumn: isAuto, constraints }, (0, utils_1.convertSqlType)(column.Type)), { externalType: column.Type });
190
+ schema[columnName] = Object.assign({ name: columnName, autocolumn: isAuto, constraints }, (0, utils_1.convertSqlType)(column.Type));
192
191
  }
193
192
  if (!tables[tableName]) {
194
193
  tables[tableName] = {
@@ -24,7 +24,6 @@ var OracleModule;
24
24
  docs: "https://github.com/oracle/node-oracledb",
25
25
  plus: true,
26
26
  friendlyName: "Oracle",
27
- type: "Relational",
28
27
  description: "Oracle Database is an object-relational database management system developed by Oracle Corporation",
29
28
  datasource: {
30
29
  host: {
@@ -29,7 +29,6 @@ var PostgresModule;
29
29
  docs: "https://node-postgres.com",
30
30
  plus: true,
31
31
  friendlyName: "PostgreSQL",
32
- type: "Relational",
33
32
  description: "PostgreSQL, also known as Postgres, is a free and open-source relational database management system emphasizing extensibility and SQL compliance.",
34
33
  datasource: {
35
34
  host: {
@@ -230,7 +229,7 @@ var PostgresModule;
230
229
  column.column_default.startsWith("nextval");
231
230
  const isGenerated = column.is_generated && column.is_generated !== "NEVER";
232
231
  const isAuto = hasDefault || identity || isGenerated;
233
- tables[tableName].schema[columnName] = Object.assign(Object.assign({ autocolumn: isAuto, name: columnName }, (0, utils_1.convertSqlType)(column.data_type)), { externalType: column.data_type });
232
+ tables[tableName].schema[columnName] = Object.assign({ autocolumn: isAuto, name: columnName }, (0, utils_1.convertSqlType)(column.data_type));
234
233
  }
235
234
  const final = (0, utils_1.finaliseExternalTables)(tables, entities);
236
235
  this.tables = final.tables;
@@ -20,7 +20,6 @@ var RedisModule;
20
20
  docs: "https://redis.io/docs/",
21
21
  description: "",
22
22
  friendlyName: "Redis",
23
- type: "Non-relational",
24
23
  datasource: {
25
24
  host: {
26
25
  type: "string",
@@ -56,7 +56,6 @@ var RestModule;
56
56
  docs: "https://github.com/node-fetch/node-fetch",
57
57
  description: "With the REST API datasource, you can connect, query and pull data from multiple REST APIs. You can then use the retrieved data to build apps.",
58
58
  friendlyName: "REST API",
59
- type: "API",
60
59
  datasource: {
61
60
  url: {
62
61
  type: datasource_1.DatasourceFieldTypes.STRING,
@@ -17,7 +17,6 @@ var S3Module;
17
17
  docs: "https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html",
18
18
  description: "Amazon Simple Storage Service (Amazon S3) is an object storage service that offers industry-leading scalability, data availability, security, and performance.",
19
19
  friendlyName: "Amazon S3",
20
- type: "Object store",
21
20
  datasource: {
22
21
  region: {
23
22
  type: "string",
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.212-alpha.8",
4
+ "version": "1.0.213",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -77,11 +77,10 @@
77
77
  "license": "GPL-3.0",
78
78
  "dependencies": {
79
79
  "@apidevtools/swagger-parser": "10.0.3",
80
- "@budibase/backend-core": "^1.0.212-alpha.8",
81
- "@budibase/client": "^1.0.212-alpha.8",
82
- "@budibase/pro": "1.0.212-alpha.8",
83
- "@budibase/string-templates": "^1.0.212-alpha.8",
84
- "@budibase/types": "^1.0.212-alpha.8",
80
+ "@budibase/backend-core": "^1.0.213",
81
+ "@budibase/client": "^1.0.213",
82
+ "@budibase/pro": "1.0.213",
83
+ "@budibase/string-templates": "^1.0.213",
85
84
  "@bull-board/api": "3.7.0",
86
85
  "@bull-board/koa": "3.9.4",
87
86
  "@elastic/elasticsearch": "7.10.0",
@@ -136,7 +135,6 @@
136
135
  "pouchdb-replication-stream": "1.2.9",
137
136
  "redis": "4",
138
137
  "server-destroy": "1.0.1",
139
- "snowflake-promise": "^4.5.0",
140
138
  "svelte": "3.44.1",
141
139
  "swagger-parser": "10.0.3",
142
140
  "to-json-schema": "0.2.5",
@@ -152,6 +150,7 @@
152
150
  "@babel/core": "7.17.4",
153
151
  "@babel/preset-env": "7.16.11",
154
152
  "@budibase/standard-components": "^0.9.139",
153
+ "@budibase/types": "^1.0.213",
155
154
  "@jest/test-sequencer": "24.9.0",
156
155
  "@types/apidoc": "0.50.0",
157
156
  "@types/bson": "4.2.0",
@@ -195,7 +195,7 @@ class Orchestrator {
195
195
  }
196
196
  }
197
197
  }
198
- if (index === env.AUTOMATION_MAX_ITERATION ||
198
+ if (index === parseInt(env.AUTOMATION_MAX_ITERATIONS) ||
199
199
  index === parseInt(loopStep.inputs.iterations)) {
200
200
  this.updateContextAndOutput(loopStepNumber, step, tempOutput, {
201
201
  status: AutomationErrors.MAX_ITERATIONS,