@budibase/server 1.3.18 → 1.3.19-alpha.1

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 (302) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.1709d1b3.js +1005 -0
  3. package/builder/assets/index.8f621053.css +6 -0
  4. package/builder/index.html +2 -4
  5. package/coverage/clover.xml +441 -388
  6. package/coverage/coverage-final.json +20 -20
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +41 -8
  9. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/component.js.html +68 -11
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +73 -34
  14. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/index.html +46 -46
  16. package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
  17. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
  26. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/screen.js.html +207 -12
  32. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  45. package/coverage/lcov-report/api/index.html +1 -1
  46. package/coverage/lcov-report/api/index.js.html +13 -13
  47. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/index.html +1 -1
  58. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  69. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/index.html +5 -5
  72. package/coverage/lcov-report/api/routes/utils/validators.js.html +9 -6
  73. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  75. package/coverage/lcov-report/automations/actions.js.html +1 -1
  76. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  77. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  78. package/coverage/lcov-report/automations/index.html +1 -1
  79. package/coverage/lcov-report/automations/index.js.html +1 -1
  80. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/index.html +1 -1
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  106. package/coverage/lcov-report/constants/index.html +1 -1
  107. package/coverage/lcov-report/constants/index.js.html +1 -1
  108. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  109. package/coverage/lcov-report/constants/screens.js.html +1 -1
  110. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  111. package/coverage/lcov-report/db/index.html +18 -18
  112. package/coverage/lcov-report/db/index.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  117. package/coverage/lcov-report/db/newid.js.html +2 -2
  118. package/coverage/lcov-report/db/utils.js.html +56 -20
  119. package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
  120. package/coverage/lcov-report/events/index.html +1 -1
  121. package/coverage/lcov-report/events/index.js.html +1 -1
  122. package/coverage/lcov-report/events/utils.js.html +1 -1
  123. package/coverage/lcov-report/index.html +37 -37
  124. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  125. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  126. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  127. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  128. package/coverage/lcov-report/middleware/currentapp.js.html +46 -40
  129. package/coverage/lcov-report/middleware/index.html +15 -15
  130. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  131. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  132. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  133. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  134. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  135. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  136. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  137. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  138. package/coverage/lcov-report/utilities/global.js.html +16 -16
  139. package/coverage/lcov-report/utilities/index.html +1 -1
  140. package/coverage/lcov-report/utilities/index.js.html +24 -24
  141. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  142. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  143. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  144. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  145. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  146. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  147. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  148. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  149. package/coverage/lcov-report/utilities/security.js.html +2 -2
  150. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  151. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  152. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  153. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  154. package/coverage/lcov-report/utilities/users.js.html +1 -1
  155. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  156. package/coverage/lcov.info +780 -667
  157. package/dist/api/controllers/application.js +5 -5
  158. package/dist/api/controllers/auth.js +9 -0
  159. package/dist/api/controllers/component.js +14 -1
  160. package/dist/api/controllers/datasource.js +21 -8
  161. package/dist/api/controllers/deploy/index.js +1 -8
  162. package/dist/api/controllers/integration.js +4 -4
  163. package/dist/{migrations/functions/usageQuotas/syncDevelopers.js → api/controllers/plugin/file.js} +13 -13
  164. package/dist/api/controllers/plugin/github.js +69 -0
  165. package/dist/api/controllers/plugin/index.js +200 -0
  166. package/dist/api/controllers/plugin/npm.js +58 -0
  167. package/dist/api/controllers/plugin/uploaders.js +11 -0
  168. package/dist/{migrations/functions/usageQuotas/syncPublishedApps.js → api/controllers/plugin/url.js} +13 -15
  169. package/dist/api/controllers/plugin/utils.js +26 -0
  170. package/dist/api/controllers/row/external.js +1 -1
  171. package/dist/api/controllers/screen.js +52 -2
  172. package/dist/api/controllers/static/index.js +1 -0
  173. package/dist/api/controllers/static/templates/BudibaseApp.svelte +10 -0
  174. package/dist/api/controllers/static/templates/preview.hbs +5 -1
  175. package/dist/api/index.js +1 -1
  176. package/dist/api/routes/application.js +3 -2
  177. package/dist/api/routes/index.js +2 -0
  178. package/dist/{migrations/functions/publishedAppsQuota.js → api/routes/plugin.js} +13 -21
  179. package/dist/api/routes/public/tables.js +1 -1
  180. package/dist/api/routes/table.js +1 -1
  181. package/dist/api/routes/utils/validators.js +2 -1
  182. package/dist/app.js +11 -0
  183. package/dist/db/utils.js +10 -1
  184. package/dist/environment.js +1 -0
  185. package/dist/integrations/airtable.js +126 -129
  186. package/dist/integrations/arangodb.js +86 -89
  187. package/dist/integrations/base/query.js +2 -2
  188. package/dist/integrations/base/sqlTable.js +3 -1
  189. package/dist/integrations/couchdb.js +80 -83
  190. package/dist/integrations/dynamodb.js +161 -164
  191. package/dist/integrations/elasticsearch.js +135 -138
  192. package/dist/integrations/firebase.js +154 -157
  193. package/dist/integrations/googlesheets.js +323 -327
  194. package/dist/integrations/index.js +99 -51
  195. package/dist/integrations/microsoftSqlServer.js +240 -243
  196. package/dist/integrations/mongodb.js +239 -242
  197. package/dist/integrations/mysql.js +215 -219
  198. package/dist/integrations/oracle.js +318 -322
  199. package/dist/integrations/postgres.js +262 -265
  200. package/dist/integrations/redis.js +134 -139
  201. package/dist/integrations/rest.js +289 -292
  202. package/dist/integrations/s3.js +61 -64
  203. package/dist/integrations/snowflake.js +83 -86
  204. package/dist/middleware/currentapp.js +2 -0
  205. package/dist/migrations/functions/backfill/global.js +0 -3
  206. package/dist/migrations/index.js +0 -10
  207. package/dist/package.json +9 -6
  208. package/dist/tests/utilities/TestConfiguration.js +1 -1
  209. package/dist/threads/query.js +2 -2
  210. package/dist/tsconfig.build.tsbuildinfo +1 -1
  211. package/dist/utilities/fileSystem/index.js +110 -1
  212. package/dist/watch.js +77 -0
  213. package/dist/websocket.js +22 -0
  214. package/package.json +10 -7
  215. package/scripts/dev/manage.js +1 -0
  216. package/scripts/localdomain.js +3 -1
  217. package/specs/openapi.json +3 -3
  218. package/specs/openapi.yaml +3 -3
  219. package/specs/resources/query.js +1 -1
  220. package/src/api/controllers/application.ts +1 -2
  221. package/src/api/controllers/auth.js +11 -0
  222. package/src/api/controllers/component.js +21 -2
  223. package/src/api/controllers/datasource.js +21 -8
  224. package/src/api/controllers/deploy/index.ts +1 -6
  225. package/src/api/controllers/integration.js +4 -4
  226. package/src/api/controllers/plugin/file.ts +15 -0
  227. package/src/api/controllers/plugin/github.ts +75 -0
  228. package/src/api/controllers/plugin/index.ts +215 -0
  229. package/src/api/controllers/plugin/npm.ts +56 -0
  230. package/src/api/controllers/plugin/uploaders.ts +4 -0
  231. package/src/api/controllers/plugin/url.ts +12 -0
  232. package/src/api/controllers/plugin/utils.ts +19 -0
  233. package/src/api/controllers/row/external.js +1 -1
  234. package/src/api/controllers/screen.js +66 -1
  235. package/src/api/controllers/static/index.ts +1 -1
  236. package/src/api/controllers/static/templates/BudibaseApp.svelte +10 -0
  237. package/src/api/controllers/static/templates/preview.hbs +5 -1
  238. package/src/api/index.js +1 -1
  239. package/src/api/routes/application.ts +13 -2
  240. package/src/api/routes/index.ts +2 -0
  241. package/src/api/routes/plugin.ts +14 -0
  242. package/src/api/routes/public/tables.ts +1 -1
  243. package/src/api/routes/table.js +1 -1
  244. package/src/api/routes/tests/query.spec.js +8 -25
  245. package/src/api/routes/tests/user.spec.js +0 -2
  246. package/src/api/routes/utils/validators.js +2 -1
  247. package/src/app.ts +14 -0
  248. package/src/db/utils.js +12 -0
  249. package/src/definitions/openapi.ts +3 -3
  250. package/src/environment.js +1 -0
  251. package/src/integrations/airtable.ts +116 -118
  252. package/src/integrations/arangodb.ts +87 -89
  253. package/src/integrations/base/query.ts +2 -2
  254. package/src/integrations/base/sqlTable.ts +3 -1
  255. package/src/integrations/couchdb.ts +83 -89
  256. package/src/integrations/dynamodb.ts +173 -175
  257. package/src/integrations/elasticsearch.ts +120 -122
  258. package/src/integrations/firebase.ts +157 -159
  259. package/src/integrations/googlesheets.ts +328 -338
  260. package/src/integrations/index.ts +64 -21
  261. package/src/integrations/microsoftSqlServer.ts +249 -251
  262. package/src/integrations/mongodb.ts +261 -258
  263. package/src/integrations/mysql.ts +229 -234
  264. package/src/integrations/oracle.ts +373 -380
  265. package/src/integrations/postgres.ts +264 -268
  266. package/src/integrations/redis.ts +128 -132
  267. package/src/integrations/rest.ts +324 -329
  268. package/src/integrations/s3.ts +68 -71
  269. package/src/integrations/snowflake.ts +80 -82
  270. package/src/integrations/tests/{airtable.spec.js → airtable.spec.ts} +21 -18
  271. package/src/integrations/tests/{arangodb.spec.js → arangodb.spec.ts} +12 -9
  272. package/src/integrations/tests/{couchdb.spec.js → couchdb.spec.ts} +33 -27
  273. package/src/integrations/tests/{dynamodb.spec.js → dynamodb.spec.ts} +45 -41
  274. package/src/integrations/tests/{elasticsearch.spec.js → elasticsearch.spec.ts} +22 -21
  275. package/src/integrations/tests/{firebase.spec.js → firebase.spec.ts} +33 -28
  276. package/src/integrations/tests/{microsoftSqlServer.spec.js → microsoftSqlServer.spec.ts} +12 -11
  277. package/src/integrations/tests/{mongo.spec.js → mongo.spec.ts} +46 -35
  278. package/src/integrations/tests/{mysql.spec.js → mysql.spec.ts} +17 -15
  279. package/src/integrations/tests/{oracle.spec.js → oracle.spec.ts} +19 -17
  280. package/src/integrations/tests/{postgres.spec.js → postgres.spec.ts} +19 -17
  281. package/src/integrations/tests/{redis.spec.js → redis.spec.ts} +27 -18
  282. package/src/integrations/tests/{rest.spec.js → rest.spec.ts} +22 -14
  283. package/src/integrations/tests/{s3.spec.js → s3.spec.ts} +10 -8
  284. package/src/integrations/tests/{sql.spec.js → sql.spec.ts} +228 -177
  285. package/src/middleware/currentapp.js +2 -0
  286. package/src/migrations/functions/backfill/global.ts +0 -3
  287. package/src/migrations/index.ts +0 -16
  288. package/src/module.d.ts +2 -0
  289. package/src/tests/utilities/TestConfiguration.js +1 -1
  290. package/src/threads/query.ts +2 -2
  291. package/src/utilities/fileSystem/index.js +129 -0
  292. package/src/watch.ts +38 -0
  293. package/src/websocket.ts +26 -0
  294. package/builder/assets/index.a70e216a.css +0 -6
  295. package/builder/assets/index.a934251d.js +0 -876
  296. package/builder/assets/vendor.5e1fe644.css +0 -1
  297. package/builder/assets/vendor.67dbd8fa.js +0 -248
  298. package/dist/migrations/functions/developerQuota.js +0 -49
  299. package/src/migrations/functions/developerQuota.ts +0 -15
  300. package/src/migrations/functions/publishedAppsQuota.ts +0 -13
  301. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +0 -19
  302. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +0 -21
package/src/db/utils.js CHANGED
@@ -42,6 +42,7 @@ const DocumentType = {
42
42
  MEM_VIEW: "view",
43
43
  USER_FLAG: "flag",
44
44
  AUTOMATION_METADATA: "meta_au",
45
+ PLUGIN: "plg",
45
46
  }
46
47
 
47
48
  const InternalTables = {
@@ -370,6 +371,10 @@ exports.getMemoryViewParams = (otherProps = {}) => {
370
371
  return getDocParams(DocumentType.MEM_VIEW, null, otherProps)
371
372
  }
372
373
 
374
+ exports.generatePluginID = name => {
375
+ return `${DocumentType.PLUGIN}${SEPARATOR}${name}`
376
+ }
377
+
373
378
  /**
374
379
  * This can be used with the db.allDocs to get a list of IDs
375
380
  */
@@ -379,3 +384,10 @@ exports.getMultiIDParams = ids => {
379
384
  include_docs: true,
380
385
  }
381
386
  }
387
+
388
+ /**
389
+ * Gets parameters for retrieving automations, this is a utility function for the getDocParams function.
390
+ */
391
+ exports.getPluginParams = (pluginId = null, otherProps = {}) => {
392
+ return getDocParams(DocumentType.PLUGIN, pluginId, otherProps)
393
+ }
@@ -344,7 +344,7 @@ export interface paths {
344
344
  };
345
345
  };
346
346
  responses: {
347
- /** Returns the created table, including the ID which has been generated for it. This can be internal or external data sources. */
347
+ /** Returns the created table, including the ID which has been generated for it. This can be internal or external datasources. */
348
348
  200: {
349
349
  content: {
350
350
  "application/json": components["schemas"]["tableOutput"];
@@ -965,7 +965,7 @@ export interface components {
965
965
  query: {
966
966
  /** @description The ID of the query. */
967
967
  _id: string;
968
- /** @description The ID of the data source the query belongs to. */
968
+ /** @description The ID of the datasource the query belongs to. */
969
969
  datasourceId?: string;
970
970
  /** @description The bindings which are required to perform this query. */
971
971
  parameters?: string[];
@@ -989,7 +989,7 @@ export interface components {
989
989
  data: {
990
990
  /** @description The ID of the query. */
991
991
  _id: string;
992
- /** @description The ID of the data source the query belongs to. */
992
+ /** @description The ID of the datasource the query belongs to. */
993
993
  datasourceId?: string;
994
994
  /** @description The bindings which are required to perform this query. */
995
995
  parameters?: string[];
@@ -74,6 +74,7 @@ module.exports = {
74
74
  SQL_MAX_ROWS: process.env.SQL_MAX_ROWS,
75
75
  BB_ADMIN_USER_EMAIL: process.env.BB_ADMIN_USER_EMAIL,
76
76
  BB_ADMIN_USER_PASSWORD: process.env.BB_ADMIN_USER_PASSWORD,
77
+ PLUGINS_DIR: process.env.PLUGINS_DIR || "/plugins",
77
78
  // flags
78
79
  ALLOW_DEV_AUTOMATIONS: process.env.ALLOW_DEV_AUTOMATIONS,
79
80
  DISABLE_THREADING: process.env.DISABLE_THREADING,
@@ -5,146 +5,144 @@ import {
5
5
  IntegrationBase,
6
6
  } from "@budibase/types"
7
7
 
8
- module AirtableModule {
9
- const Airtable = require("airtable")
8
+ const Airtable = require("airtable")
10
9
 
11
- interface AirtableConfig {
12
- apiKey: string
13
- base: string
14
- }
10
+ interface AirtableConfig {
11
+ apiKey: string
12
+ base: string
13
+ }
15
14
 
16
- const SCHEMA: Integration = {
17
- docs: "https://airtable.com/api",
18
- description:
19
- "Airtable is a spreadsheet-database hybrid, with the features of a database but applied to a spreadsheet.",
20
- friendlyName: "Airtable",
21
- type: "Spreadsheet",
22
- datasource: {
23
- apiKey: {
24
- type: DatasourceFieldType.PASSWORD,
25
- default: "enter api key",
26
- required: true,
27
- },
28
- base: {
29
- type: DatasourceFieldType.STRING,
30
- default: "mybase",
31
- required: true,
32
- },
15
+ const SCHEMA: Integration = {
16
+ docs: "https://airtable.com/api",
17
+ description:
18
+ "Airtable is a spreadsheet-database hybrid, with the features of a database but applied to a spreadsheet.",
19
+ friendlyName: "Airtable",
20
+ type: "Spreadsheet",
21
+ datasource: {
22
+ apiKey: {
23
+ type: DatasourceFieldType.PASSWORD,
24
+ default: "enter api key",
25
+ required: true,
26
+ },
27
+ base: {
28
+ type: DatasourceFieldType.STRING,
29
+ default: "mybase",
30
+ required: true,
33
31
  },
34
- query: {
35
- create: {
36
- type: QueryType.FIELDS,
37
- customisable: true,
38
- fields: {
39
- table: {
40
- type: DatasourceFieldType.STRING,
41
- required: true,
42
- },
32
+ },
33
+ query: {
34
+ create: {
35
+ type: QueryType.FIELDS,
36
+ customisable: true,
37
+ fields: {
38
+ table: {
39
+ type: DatasourceFieldType.STRING,
40
+ required: true,
43
41
  },
44
42
  },
45
- read: {
46
- type: QueryType.FIELDS,
47
- fields: {
48
- table: {
49
- type: DatasourceFieldType.STRING,
50
- required: true,
51
- },
52
- view: {
53
- type: DatasourceFieldType.STRING,
54
- required: true,
55
- },
56
- numRecords: {
57
- type: DatasourceFieldType.NUMBER,
58
- default: 10,
59
- },
43
+ },
44
+ read: {
45
+ type: QueryType.FIELDS,
46
+ fields: {
47
+ table: {
48
+ type: DatasourceFieldType.STRING,
49
+ required: true,
60
50
  },
61
- },
62
- update: {
63
- type: QueryType.FIELDS,
64
- customisable: true,
65
- fields: {
66
- id: {
67
- display: "Record ID",
68
- type: DatasourceFieldType.STRING,
69
- required: true,
70
- },
71
- table: {
72
- type: DatasourceFieldType.STRING,
73
- required: true,
74
- },
51
+ view: {
52
+ type: DatasourceFieldType.STRING,
53
+ required: true,
54
+ },
55
+ numRecords: {
56
+ type: DatasourceFieldType.NUMBER,
57
+ default: 10,
75
58
  },
76
59
  },
77
- delete: {
78
- type: QueryType.JSON,
60
+ },
61
+ update: {
62
+ type: QueryType.FIELDS,
63
+ customisable: true,
64
+ fields: {
65
+ id: {
66
+ display: "Record ID",
67
+ type: DatasourceFieldType.STRING,
68
+ required: true,
69
+ },
70
+ table: {
71
+ type: DatasourceFieldType.STRING,
72
+ required: true,
73
+ },
79
74
  },
80
75
  },
81
- }
76
+ delete: {
77
+ type: QueryType.JSON,
78
+ },
79
+ },
80
+ }
82
81
 
83
- class AirtableIntegration implements IntegrationBase {
84
- private config: AirtableConfig
85
- private client: any
82
+ class AirtableIntegration implements IntegrationBase {
83
+ private config: AirtableConfig
84
+ private client: any
86
85
 
87
- constructor(config: AirtableConfig) {
88
- this.config = config
89
- this.client = new Airtable(config).base(config.base)
90
- }
86
+ constructor(config: AirtableConfig) {
87
+ this.config = config
88
+ this.client = new Airtable(config).base(config.base)
89
+ }
91
90
 
92
- async create(query: { table: any; json: any }) {
93
- const { table, json } = query
91
+ async create(query: { table: any; json: any }) {
92
+ const { table, json } = query
94
93
 
95
- try {
96
- return await this.client(table).create([
97
- {
98
- fields: json,
99
- },
100
- ])
101
- } catch (err) {
102
- console.error("Error writing to airtable", err)
103
- throw err
104
- }
94
+ try {
95
+ return await this.client(table).create([
96
+ {
97
+ fields: json,
98
+ },
99
+ ])
100
+ } catch (err) {
101
+ console.error("Error writing to airtable", err)
102
+ throw err
105
103
  }
104
+ }
106
105
 
107
- async read(query: { table: any; numRecords: any; view: any }) {
108
- try {
109
- const records = await this.client(query.table)
110
- .select({ maxRecords: query.numRecords || 10, view: query.view })
111
- .firstPage()
112
- // @ts-ignore
113
- return records.map(({ fields }) => fields)
114
- } catch (err) {
115
- console.error("Error writing to airtable", err)
116
- return []
117
- }
106
+ async read(query: { table: any; numRecords: any; view: any }) {
107
+ try {
108
+ const records = await this.client(query.table)
109
+ .select({ maxRecords: query.numRecords || 10, view: query.view })
110
+ .firstPage()
111
+ // @ts-ignore
112
+ return records.map(({ fields }) => fields)
113
+ } catch (err) {
114
+ console.error("Error writing to airtable", err)
115
+ return []
118
116
  }
117
+ }
119
118
 
120
- async update(query: { table: any; id: any; json: any }) {
121
- const { table, id, json } = query
119
+ async update(query: { table: any; id: any; json: any }) {
120
+ const { table, id, json } = query
122
121
 
123
- try {
124
- return await this.client(table).update([
125
- {
126
- id,
127
- fields: json,
128
- },
129
- ])
130
- } catch (err) {
131
- console.error("Error writing to airtable", err)
132
- throw err
133
- }
122
+ try {
123
+ return await this.client(table).update([
124
+ {
125
+ id,
126
+ fields: json,
127
+ },
128
+ ])
129
+ } catch (err) {
130
+ console.error("Error writing to airtable", err)
131
+ throw err
134
132
  }
133
+ }
135
134
 
136
- async delete(query: { table: any; ids: any }) {
137
- try {
138
- return await this.client(query.table).destroy(query.ids)
139
- } catch (err) {
140
- console.error("Error writing to airtable", err)
141
- throw err
142
- }
135
+ async delete(query: { table: any; ids: any }) {
136
+ try {
137
+ return await this.client(query.table).destroy(query.ids)
138
+ } catch (err) {
139
+ console.error("Error writing to airtable", err)
140
+ throw err
143
141
  }
144
142
  }
143
+ }
145
144
 
146
- module.exports = {
147
- schema: SCHEMA,
148
- integration: AirtableIntegration,
149
- }
145
+ export default {
146
+ schema: SCHEMA,
147
+ integration: AirtableIntegration,
150
148
  }
@@ -5,106 +5,104 @@ import {
5
5
  IntegrationBase,
6
6
  } from "@budibase/types"
7
7
 
8
- module ArangoModule {
9
- const { Database, aql } = require("arangojs")
8
+ const { Database, aql } = require("arangojs")
10
9
 
11
- interface ArangodbConfig {
12
- url: string
13
- username: string
14
- password: string
15
- databaseName: string
16
- collection: string
17
- }
10
+ interface ArangodbConfig {
11
+ url: string
12
+ username: string
13
+ password: string
14
+ databaseName: string
15
+ collection: string
16
+ }
18
17
 
19
- const SCHEMA: Integration = {
20
- docs: "https://github.com/arangodb/arangojs",
21
- friendlyName: "ArangoDB",
22
- type: "Non-relational",
23
- description:
24
- "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. ",
25
- datasource: {
26
- url: {
27
- type: DatasourceFieldType.STRING,
28
- default: "http://localhost:8529",
29
- required: true,
30
- },
31
- username: {
32
- type: DatasourceFieldType.STRING,
33
- default: "root",
34
- required: true,
35
- },
36
- password: {
37
- type: DatasourceFieldType.PASSWORD,
38
- required: true,
39
- },
40
- databaseName: {
41
- type: DatasourceFieldType.STRING,
42
- default: "_system",
43
- required: true,
44
- },
45
- collection: {
46
- type: DatasourceFieldType.STRING,
47
- required: true,
48
- },
18
+ const SCHEMA: Integration = {
19
+ docs: "https://github.com/arangodb/arangojs",
20
+ friendlyName: "ArangoDB",
21
+ type: "Non-relational",
22
+ description:
23
+ "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. ",
24
+ datasource: {
25
+ url: {
26
+ type: DatasourceFieldType.STRING,
27
+ default: "http://localhost:8529",
28
+ required: true,
49
29
  },
50
- query: {
51
- read: {
52
- type: QueryType.SQL,
53
- },
54
- create: {
55
- type: QueryType.JSON,
56
- },
30
+ username: {
31
+ type: DatasourceFieldType.STRING,
32
+ default: "root",
33
+ required: true,
57
34
  },
58
- }
59
-
60
- class ArangoDBIntegration implements IntegrationBase {
61
- private config: ArangodbConfig
62
- private client: any
35
+ password: {
36
+ type: DatasourceFieldType.PASSWORD,
37
+ required: true,
38
+ },
39
+ databaseName: {
40
+ type: DatasourceFieldType.STRING,
41
+ default: "_system",
42
+ required: true,
43
+ },
44
+ collection: {
45
+ type: DatasourceFieldType.STRING,
46
+ required: true,
47
+ },
48
+ },
49
+ query: {
50
+ read: {
51
+ type: QueryType.SQL,
52
+ },
53
+ create: {
54
+ type: QueryType.JSON,
55
+ },
56
+ },
57
+ }
63
58
 
64
- constructor(config: ArangodbConfig) {
65
- const newConfig = {
66
- auth: {
67
- username: config.username,
68
- password: config.password,
69
- },
70
- }
59
+ class ArangoDBIntegration implements IntegrationBase {
60
+ private config: ArangodbConfig
61
+ private client: any
71
62
 
72
- this.config = config
73
- this.client = new Database(newConfig)
63
+ constructor(config: ArangodbConfig) {
64
+ const newConfig = {
65
+ auth: {
66
+ username: config.username,
67
+ password: config.password,
68
+ },
74
69
  }
75
70
 
76
- async read(query: { sql: any }) {
77
- try {
78
- const result = await this.client.query(query.sql)
79
- return result.all()
80
- } catch (err) {
81
- // @ts-ignore
82
- console.error("Error querying arangodb", err.message)
83
- throw err
84
- } finally {
85
- this.client.close()
86
- }
87
- }
71
+ this.config = config
72
+ this.client = new Database(newConfig)
73
+ }
88
74
 
89
- async create(query: { json: any }) {
90
- const clc = this.client.collection(this.config.collection)
91
- try {
92
- const result = await this.client.query(
93
- aql`INSERT ${query.json} INTO ${clc} RETURN NEW`
94
- )
95
- return result.all()
96
- } catch (err) {
97
- // @ts-ignore
98
- console.error("Error querying arangodb", err.message)
99
- throw err
100
- } finally {
101
- this.client.close()
102
- }
75
+ async read(query: { sql: any }) {
76
+ try {
77
+ const result = await this.client.query(query.sql)
78
+ return result.all()
79
+ } catch (err) {
80
+ // @ts-ignore
81
+ console.error("Error querying arangodb", err.message)
82
+ throw err
83
+ } finally {
84
+ this.client.close()
103
85
  }
104
86
  }
105
87
 
106
- module.exports = {
107
- schema: SCHEMA,
108
- integration: ArangoDBIntegration,
88
+ async create(query: { json: any }) {
89
+ const clc = this.client.collection(this.config.collection)
90
+ try {
91
+ const result = await this.client.query(
92
+ aql`INSERT ${query.json} INTO ${clc} RETURN NEW`
93
+ )
94
+ return result.all()
95
+ } catch (err) {
96
+ // @ts-ignore
97
+ console.error("Error querying arangodb", err.message)
98
+ throw err
99
+ } finally {
100
+ this.client.close()
101
+ }
109
102
  }
110
103
  }
104
+
105
+ export default {
106
+ schema: SCHEMA,
107
+ integration: ArangoDBIntegration,
108
+ }
@@ -1,11 +1,11 @@
1
1
  import { QueryJson, Datasource } from "@budibase/types"
2
- const { integrations } = require("../index")
2
+ const { getIntegration } = require("../index")
3
3
 
4
4
  export async function makeExternalQuery(
5
5
  datasource: Datasource,
6
6
  json: QueryJson
7
7
  ) {
8
- const Integration = integrations[datasource.source]
8
+ const Integration = await getIntegration(datasource.source)
9
9
  // query is the opinionated function
10
10
  if (Integration.prototype.query) {
11
11
  const integration = new Integration(datasource.config)
@@ -96,7 +96,9 @@ function generateSchema(
96
96
  const deletedColumns = Object.entries(oldTable.schema)
97
97
  .filter(
98
98
  ([key, schema]) =>
99
- schema.type !== FieldTypes.LINK && table.schema[key] == null
99
+ schema.type !== FieldTypes.LINK &&
100
+ schema.type !== FieldTypes.FORMULA &&
101
+ table.schema[key] == null
100
102
  )
101
103
  .map(([key]) => key)
102
104
  deletedColumns.forEach(key => {