@budibase/server 1.3.21-alpha.1 → 1.3.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.8d12d461.css +6 -0
  3. package/builder/assets/index.d354271c.js +879 -0
  4. package/builder/assets/vendor.5e1fe644.css +1 -0
  5. package/builder/assets/vendor.67dbd8fa.js +248 -0
  6. package/builder/index.html +4 -2
  7. package/coverage/clover.xml +390 -451
  8. package/coverage/coverage-final.json +21 -21
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +8 -41
  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 +11 -68
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +34 -73
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +46 -46
  18. package/coverage/lcov-report/api/controllers/integration.js.html +6 -6
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.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 +1 -1
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
  28. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +12 -207
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.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 +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  47. package/coverage/lcov-report/api/index.html +1 -1
  48. package/coverage/lcov-report/api/index.js.html +13 -13
  49. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/index.html +1 -1
  60. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  71. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/utils/index.html +9 -9
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +12 -75
  75. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  77. package/coverage/lcov-report/automations/actions.js.html +1 -1
  78. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  79. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  80. package/coverage/lcov-report/automations/index.html +1 -1
  81. package/coverage/lcov-report/automations/index.js.html +1 -1
  82. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/index.html +1 -1
  89. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/loop.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  108. package/coverage/lcov-report/constants/index.html +1 -1
  109. package/coverage/lcov-report/constants/index.js.html +1 -1
  110. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  111. package/coverage/lcov-report/constants/screens.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  113. package/coverage/lcov-report/db/index.html +18 -18
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  116. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  119. package/coverage/lcov-report/db/newid.js.html +2 -2
  120. package/coverage/lcov-report/db/utils.js.html +20 -56
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +3 -3
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +46 -46
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/builder.js.html +12 -12
  130. package/coverage/lcov-report/middleware/currentapp.js.html +40 -46
  131. package/coverage/lcov-report/middleware/index.html +15 -15
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  133. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +7 -7
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  137. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  138. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  139. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  140. package/coverage/lcov-report/utilities/global.js.html +16 -16
  141. package/coverage/lcov-report/utilities/index.html +15 -15
  142. package/coverage/lcov-report/utilities/index.js.html +24 -24
  143. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +2 -2
  144. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  145. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  147. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  150. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  151. package/coverage/lcov-report/utilities/security.js.html +2 -2
  152. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  153. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  156. package/coverage/lcov-report/utilities/users.js.html +1 -1
  157. package/coverage/lcov-report/utilities/workerRequests.js.html +8 -32
  158. package/coverage/lcov.info +672 -798
  159. package/dist/api/controllers/application.js +5 -5
  160. package/dist/api/controllers/auth.js +0 -9
  161. package/dist/api/controllers/component.js +1 -14
  162. package/dist/api/controllers/datasource.js +8 -21
  163. package/dist/api/controllers/deploy/index.js +8 -1
  164. package/dist/api/controllers/integration.js +4 -4
  165. package/dist/api/controllers/row/external.js +1 -1
  166. package/dist/api/controllers/screen.js +2 -52
  167. package/dist/api/controllers/static/index.js +0 -1
  168. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  169. package/dist/api/controllers/static/templates/preview.hbs +1 -5
  170. package/dist/api/index.js +1 -1
  171. package/dist/api/routes/application.js +2 -3
  172. package/dist/api/routes/index.js +0 -2
  173. package/dist/api/routes/public/rows.js +82 -1
  174. package/dist/api/routes/public/tables.js +1 -1
  175. package/dist/api/routes/table.js +1 -1
  176. package/dist/api/routes/utils/validators.js +2 -20
  177. package/dist/app.js +1 -16
  178. package/dist/db/utils.js +1 -10
  179. package/dist/environment.js +0 -1
  180. package/dist/integrations/airtable.js +129 -126
  181. package/dist/integrations/arangodb.js +89 -86
  182. package/dist/integrations/base/query.js +2 -2
  183. package/dist/integrations/base/sqlTable.js +1 -3
  184. package/dist/integrations/couchdb.js +83 -80
  185. package/dist/integrations/dynamodb.js +164 -161
  186. package/dist/integrations/elasticsearch.js +138 -135
  187. package/dist/integrations/firebase.js +157 -154
  188. package/dist/integrations/googlesheets.js +327 -323
  189. package/dist/integrations/index.js +51 -99
  190. package/dist/integrations/microsoftSqlServer.js +243 -240
  191. package/dist/integrations/mongodb.js +242 -239
  192. package/dist/integrations/mysql.js +219 -215
  193. package/dist/integrations/oracle.js +322 -318
  194. package/dist/integrations/postgres.js +265 -262
  195. package/dist/integrations/redis.js +139 -134
  196. package/dist/integrations/rest.js +292 -289
  197. package/dist/integrations/s3.js +64 -61
  198. package/dist/integrations/snowflake.js +86 -83
  199. package/dist/middleware/currentapp.js +0 -2
  200. package/dist/migrations/functions/backfill/global.js +3 -0
  201. package/dist/migrations/functions/developerQuota.js +49 -0
  202. package/dist/{api/routes/plugin.js → migrations/functions/publishedAppsQuota.js} +21 -13
  203. package/dist/{api/controllers/plugin/url.js → migrations/functions/usageQuotas/syncDevelopers.js} +13 -13
  204. package/dist/{api/controllers/plugin/file.js → migrations/functions/usageQuotas/syncPublishedApps.js} +15 -13
  205. package/dist/migrations/index.js +10 -0
  206. package/dist/package.json +6 -9
  207. package/dist/tests/utilities/TestConfiguration.js +1 -1
  208. package/dist/threads/query.js +2 -2
  209. package/dist/tsconfig.build.tsbuildinfo +1 -1
  210. package/dist/utilities/fileSystem/index.js +1 -111
  211. package/dist/utilities/workerRequests.js +0 -4
  212. package/package.json +7 -10
  213. package/scripts/dev/manage.js +0 -4
  214. package/scripts/localdomain.js +1 -3
  215. package/specs/openapi.json +112 -115
  216. package/specs/openapi.yaml +94 -96
  217. package/specs/resources/misc.js +0 -116
  218. package/specs/resources/query.js +1 -1
  219. package/src/api/controllers/application.ts +2 -1
  220. package/src/api/controllers/auth.js +0 -11
  221. package/src/api/controllers/component.js +2 -21
  222. package/src/api/controllers/datasource.js +8 -21
  223. package/src/api/controllers/deploy/index.ts +6 -1
  224. package/src/api/controllers/integration.js +4 -4
  225. package/src/api/controllers/public/mapping/types.ts +0 -8
  226. package/src/api/controllers/row/external.js +1 -1
  227. package/src/api/controllers/screen.js +1 -66
  228. package/src/api/controllers/static/index.ts +1 -1
  229. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  230. package/src/api/controllers/static/templates/preview.hbs +1 -5
  231. package/src/api/index.js +1 -1
  232. package/src/api/routes/application.ts +2 -13
  233. package/src/api/routes/index.ts +0 -2
  234. package/src/api/routes/public/rows.ts +82 -1
  235. package/src/api/routes/public/tables.ts +1 -1
  236. package/src/api/routes/table.js +1 -1
  237. package/src/api/routes/tests/query.spec.js +25 -8
  238. package/src/api/routes/tests/user.spec.js +2 -0
  239. package/src/api/routes/utils/validators.js +5 -26
  240. package/src/app.ts +2 -25
  241. package/src/db/utils.js +0 -12
  242. package/src/definitions/openapi.ts +55 -56
  243. package/src/environment.js +0 -1
  244. package/src/integrations/airtable.ts +118 -116
  245. package/src/integrations/arangodb.ts +89 -87
  246. package/src/integrations/base/query.ts +2 -2
  247. package/src/integrations/base/sqlTable.ts +1 -3
  248. package/src/integrations/couchdb.ts +89 -83
  249. package/src/integrations/dynamodb.ts +175 -173
  250. package/src/integrations/elasticsearch.ts +122 -120
  251. package/src/integrations/firebase.ts +159 -157
  252. package/src/integrations/googlesheets.ts +338 -328
  253. package/src/integrations/index.ts +21 -64
  254. package/src/integrations/microsoftSqlServer.ts +251 -249
  255. package/src/integrations/mongodb.ts +258 -261
  256. package/src/integrations/mysql.ts +234 -229
  257. package/src/integrations/oracle.ts +380 -373
  258. package/src/integrations/postgres.ts +268 -264
  259. package/src/integrations/redis.ts +132 -128
  260. package/src/integrations/rest.ts +329 -324
  261. package/src/integrations/s3.ts +71 -68
  262. package/src/integrations/snowflake.ts +82 -80
  263. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  264. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  265. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  266. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  267. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  268. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  269. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  270. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  271. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  272. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  273. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  274. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  275. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  276. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  277. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  278. package/src/middleware/currentapp.js +0 -2
  279. package/src/migrations/functions/backfill/global.ts +3 -0
  280. package/src/migrations/functions/developerQuota.ts +15 -0
  281. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  282. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  283. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  284. package/src/migrations/index.ts +16 -0
  285. package/src/module.d.ts +0 -2
  286. package/src/tests/utilities/TestConfiguration.js +1 -1
  287. package/src/threads/query.ts +2 -2
  288. package/src/utilities/fileSystem/index.js +0 -130
  289. package/src/utilities/workerRequests.js +0 -8
  290. package/builder/assets/index.c9d3f9e8.js +0 -1005
  291. package/builder/assets/index.f1b70f52.css +0 -6
  292. package/dist/api/controllers/plugin/github.js +0 -69
  293. package/dist/api/controllers/plugin/index.js +0 -200
  294. package/dist/api/controllers/plugin/npm.js +0 -58
  295. package/dist/api/controllers/plugin/uploaders.js +0 -11
  296. package/dist/api/controllers/plugin/utils.js +0 -26
  297. package/dist/watch.js +0 -77
  298. package/dist/websocket.js +0 -22
  299. package/src/api/controllers/plugin/file.ts +0 -15
  300. package/src/api/controllers/plugin/github.ts +0 -75
  301. package/src/api/controllers/plugin/index.ts +0 -215
  302. package/src/api/controllers/plugin/npm.ts +0 -56
  303. package/src/api/controllers/plugin/uploaders.ts +0 -4
  304. package/src/api/controllers/plugin/url.ts +0 -12
  305. package/src/api/controllers/plugin/utils.ts +0 -19
  306. package/src/api/routes/plugin.ts +0 -14
  307. package/src/watch.ts +0 -38
  308. package/src/websocket.ts +0 -26
@@ -5,144 +5,146 @@ import {
5
5
  IntegrationBase,
6
6
  } from "@budibase/types"
7
7
 
8
- const Airtable = require("airtable")
8
+ module AirtableModule {
9
+ const Airtable = require("airtable")
9
10
 
10
- interface AirtableConfig {
11
- apiKey: string
12
- base: string
13
- }
11
+ interface AirtableConfig {
12
+ apiKey: string
13
+ base: string
14
+ }
14
15
 
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,
31
- },
32
- },
33
- query: {
34
- create: {
35
- type: QueryType.FIELDS,
36
- customisable: true,
37
- fields: {
38
- table: {
39
- type: DatasourceFieldType.STRING,
40
- required: true,
41
- },
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,
42
32
  },
43
33
  },
44
- read: {
45
- type: QueryType.FIELDS,
46
- fields: {
47
- table: {
48
- type: DatasourceFieldType.STRING,
49
- required: true,
50
- },
51
- view: {
52
- type: DatasourceFieldType.STRING,
53
- required: true,
54
- },
55
- numRecords: {
56
- type: DatasourceFieldType.NUMBER,
57
- default: 10,
34
+ query: {
35
+ create: {
36
+ type: QueryType.FIELDS,
37
+ customisable: true,
38
+ fields: {
39
+ table: {
40
+ type: DatasourceFieldType.STRING,
41
+ required: true,
42
+ },
58
43
  },
59
44
  },
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,
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
+ },
69
60
  },
70
- table: {
71
- type: DatasourceFieldType.STRING,
72
- required: true,
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
+ },
73
75
  },
74
76
  },
77
+ delete: {
78
+ type: QueryType.JSON,
79
+ },
75
80
  },
76
- delete: {
77
- type: QueryType.JSON,
78
- },
79
- },
80
- }
81
+ }
81
82
 
82
- class AirtableIntegration implements IntegrationBase {
83
- private config: AirtableConfig
84
- private client: any
83
+ class AirtableIntegration implements IntegrationBase {
84
+ private config: AirtableConfig
85
+ private client: any
85
86
 
86
- constructor(config: AirtableConfig) {
87
- this.config = config
88
- this.client = new Airtable(config).base(config.base)
89
- }
87
+ constructor(config: AirtableConfig) {
88
+ this.config = config
89
+ this.client = new Airtable(config).base(config.base)
90
+ }
90
91
 
91
- async create(query: { table: any; json: any }) {
92
- const { table, json } = query
92
+ async create(query: { table: any; json: any }) {
93
+ const { table, json } = query
93
94
 
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
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
+ }
103
105
  }
104
- }
105
106
 
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 []
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
+ }
116
118
  }
117
- }
118
119
 
119
- async update(query: { table: any; id: any; json: any }) {
120
- const { table, id, json } = query
120
+ async update(query: { table: any; id: any; json: any }) {
121
+ const { table, id, json } = query
121
122
 
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
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
+ }
132
134
  }
133
- }
134
135
 
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
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
+ }
141
143
  }
142
144
  }
143
- }
144
145
 
145
- export default {
146
- schema: SCHEMA,
147
- integration: AirtableIntegration,
146
+ module.exports = {
147
+ schema: SCHEMA,
148
+ integration: AirtableIntegration,
149
+ }
148
150
  }
@@ -5,104 +5,106 @@ import {
5
5
  IntegrationBase,
6
6
  } from "@budibase/types"
7
7
 
8
- const { Database, aql } = require("arangojs")
8
+ module ArangoModule {
9
+ const { Database, aql } = require("arangojs")
9
10
 
10
- interface ArangodbConfig {
11
- url: string
12
- username: string
13
- password: string
14
- databaseName: string
15
- collection: string
16
- }
11
+ interface ArangodbConfig {
12
+ url: string
13
+ username: string
14
+ password: string
15
+ databaseName: string
16
+ collection: string
17
+ }
17
18
 
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,
29
- },
30
- username: {
31
- type: DatasourceFieldType.STRING,
32
- default: "root",
33
- required: true,
34
- },
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,
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
+ },
52
49
  },
53
- create: {
54
- type: QueryType.JSON,
50
+ query: {
51
+ read: {
52
+ type: QueryType.SQL,
53
+ },
54
+ create: {
55
+ type: QueryType.JSON,
56
+ },
55
57
  },
56
- },
57
- }
58
+ }
58
59
 
59
- class ArangoDBIntegration implements IntegrationBase {
60
- private config: ArangodbConfig
61
- private client: any
60
+ class ArangoDBIntegration implements IntegrationBase {
61
+ private config: ArangodbConfig
62
+ private client: any
62
63
 
63
- constructor(config: ArangodbConfig) {
64
- const newConfig = {
65
- auth: {
66
- username: config.username,
67
- password: config.password,
68
- },
69
- }
64
+ constructor(config: ArangodbConfig) {
65
+ const newConfig = {
66
+ auth: {
67
+ username: config.username,
68
+ password: config.password,
69
+ },
70
+ }
70
71
 
71
- this.config = config
72
- this.client = new Database(newConfig)
73
- }
72
+ this.config = config
73
+ this.client = new Database(newConfig)
74
+ }
74
75
 
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()
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
+ }
85
87
  }
86
- }
87
88
 
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()
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
+ }
101
103
  }
102
104
  }
103
- }
104
105
 
105
- export default {
106
- schema: SCHEMA,
107
- integration: ArangoDBIntegration,
106
+ module.exports = {
107
+ schema: SCHEMA,
108
+ integration: ArangoDBIntegration,
109
+ }
108
110
  }
@@ -1,11 +1,11 @@
1
1
  import { QueryJson, Datasource } from "@budibase/types"
2
- const { getIntegration } = require("../index")
2
+ const { integrations } = require("../index")
3
3
 
4
4
  export async function makeExternalQuery(
5
5
  datasource: Datasource,
6
6
  json: QueryJson
7
7
  ) {
8
- const Integration = await getIntegration(datasource.source)
8
+ const Integration = integrations[datasource.source]
9
9
  // query is the opinionated function
10
10
  if (Integration.prototype.query) {
11
11
  const integration = new Integration(datasource.config)
@@ -96,9 +96,7 @@ function generateSchema(
96
96
  const deletedColumns = Object.entries(oldTable.schema)
97
97
  .filter(
98
98
  ([key, schema]) =>
99
- schema.type !== FieldTypes.LINK &&
100
- schema.type !== FieldTypes.FORMULA &&
101
- table.schema[key] == null
99
+ schema.type !== FieldTypes.LINK && table.schema[key] == null
102
100
  )
103
101
  .map(([key]) => key)
104
102
  deletedColumns.forEach(key => {
@@ -5,103 +5,109 @@ import {
5
5
  IntegrationBase,
6
6
  } from "@budibase/types"
7
7
 
8
- const PouchDB = require("pouchdb")
8
+ module CouchDBModule {
9
+ const PouchDB = require("pouchdb")
9
10
 
10
- interface CouchDBConfig {
11
- url: string
12
- database: string
13
- }
11
+ interface CouchDBConfig {
12
+ url: string
13
+ database: string
14
+ }
14
15
 
15
- const SCHEMA: Integration = {
16
- docs: "https://docs.couchdb.org/en/stable/",
17
- friendlyName: "CouchDB",
18
- type: "Non-relational",
19
- description:
20
- "Apache CouchDB is an open-source document-oriented NoSQL database, implemented in Erlang.",
21
- datasource: {
22
- url: {
23
- type: DatasourceFieldType.STRING,
24
- required: true,
25
- default: "http://localhost:5984",
26
- },
27
- database: {
28
- type: DatasourceFieldType.STRING,
29
- required: true,
30
- },
31
- },
32
- query: {
33
- create: {
34
- type: QueryType.JSON,
35
- },
36
- read: {
37
- type: QueryType.JSON,
38
- },
39
- update: {
40
- type: QueryType.JSON,
16
+ const SCHEMA: Integration = {
17
+ docs: "https://docs.couchdb.org/en/stable/",
18
+ friendlyName: "CouchDB",
19
+ type: "Non-relational",
20
+ description:
21
+ "Apache CouchDB is an open-source document-oriented NoSQL database, implemented in Erlang.",
22
+ datasource: {
23
+ url: {
24
+ type: DatasourceFieldType.STRING,
25
+ required: true,
26
+ default: "http://localhost:5984",
27
+ },
28
+ database: {
29
+ type: DatasourceFieldType.STRING,
30
+ required: true,
31
+ },
41
32
  },
42
- delete: {
43
- type: QueryType.FIELDS,
44
- fields: {
45
- id: {
46
- type: DatasourceFieldType.STRING,
47
- required: true,
33
+ query: {
34
+ create: {
35
+ type: QueryType.JSON,
36
+ },
37
+ read: {
38
+ type: QueryType.JSON,
39
+ },
40
+ update: {
41
+ type: QueryType.JSON,
42
+ },
43
+ delete: {
44
+ type: QueryType.FIELDS,
45
+ fields: {
46
+ id: {
47
+ type: DatasourceFieldType.STRING,
48
+ required: true,
49
+ },
48
50
  },
49
51
  },
50
52
  },
51
- },
52
- }
53
+ }
53
54
 
54
- class CouchDBIntegration implements IntegrationBase {
55
- private config: CouchDBConfig
56
- private readonly client: any
55
+ class CouchDBIntegration implements IntegrationBase {
56
+ private config: CouchDBConfig
57
+ private readonly client: any
57
58
 
58
- constructor(config: CouchDBConfig) {
59
- this.config = config
60
- this.client = new PouchDB(`${config.url}/${config.database}`)
61
- }
59
+ constructor(config: CouchDBConfig) {
60
+ this.config = config
61
+ this.client = new PouchDB(`${config.url}/${config.database}`)
62
+ }
62
63
 
63
- async query(
64
- command: string,
65
- errorMsg: string,
66
- query: { json?: object; id?: string }
67
- ) {
68
- try {
69
- const response = await this.client[command](query.id || query.json)
70
- await this.client.close()
71
- return response
72
- } catch (err) {
73
- console.error(errorMsg, err)
74
- throw err
64
+ async query(
65
+ command: string,
66
+ errorMsg: string,
67
+ query: { json?: object; id?: string }
68
+ ) {
69
+ try {
70
+ const response = await this.client[command](query.id || query.json)
71
+ await this.client.close()
72
+ return response
73
+ } catch (err) {
74
+ console.error(errorMsg, err)
75
+ throw err
76
+ }
75
77
  }
76
- }
77
78
 
78
- async create(query: { json: object }) {
79
- return this.query("post", "Error writing to couchDB", query)
80
- }
79
+ async create(query: { json: object }) {
80
+ return this.query("post", "Error writing to couchDB", query)
81
+ }
81
82
 
82
- async read(query: { json: object }) {
83
- const result = await this.query("allDocs", "Error querying couchDB", {
84
- json: {
85
- include_docs: true,
86
- ...query.json,
87
- },
88
- })
89
- return result.rows.map((row: { doc: object }) => row.doc)
90
- }
83
+ async read(query: { json: object }) {
84
+ const result = await this.query("allDocs", "Error querying couchDB", {
85
+ json: {
86
+ include_docs: true,
87
+ ...query.json,
88
+ },
89
+ })
90
+ return result.rows.map((row: { doc: object }) => row.doc)
91
+ }
91
92
 
92
- async update(query: { json: object }) {
93
- return this.query("put", "Error updating couchDB document", query)
94
- }
93
+ async update(query: { json: object }) {
94
+ return this.query("put", "Error updating couchDB document", query)
95
+ }
95
96
 
96
- async delete(query: { id: string }) {
97
- const doc = await this.query("get", "Cannot find doc to be deleted", query)
98
- return this.query("remove", "Error deleting couchDB document", {
99
- json: doc,
100
- })
97
+ async delete(query: { id: string }) {
98
+ const doc = await this.query(
99
+ "get",
100
+ "Cannot find doc to be deleted",
101
+ query
102
+ )
103
+ return this.query("remove", "Error deleting couchDB document", {
104
+ json: doc,
105
+ })
106
+ }
101
107
  }
102
- }
103
108
 
104
- export default {
105
- schema: SCHEMA,
106
- integration: CouchDBIntegration,
109
+ module.exports = {
110
+ schema: SCHEMA,
111
+ integration: CouchDBIntegration,
112
+ }
107
113
  }