@budibase/server 1.3.12-alpha.1 → 1.3.12-alpha.2

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 (250) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/{index.a392a9bf.css → index.7886c551.css} +2 -2
  3. package/builder/assets/index.a0a1e7ff.js +994 -0
  4. package/builder/index.html +2 -4
  5. package/coverage/clover.xml +295 -253
  6. package/coverage/coverage-final.json +17 -17
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  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 +82 -13
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +20 -20
  14. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/index.html +30 -30
  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 +1 -1
  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 +204 -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 +12 -12
  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 +1 -1
  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 +1 -1
  72. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  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 +1 -1
  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 +28 -28
  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 +33 -33
  129. package/coverage/lcov-report/middleware/index.html +1 -1
  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 +23 -23
  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 +532 -444
  157. package/dist/api/controllers/application.js +5 -4
  158. package/dist/api/controllers/component.js +18 -1
  159. package/dist/api/controllers/datasource.js +4 -4
  160. package/dist/api/controllers/integration.js +4 -4
  161. package/dist/api/controllers/plugin.js +119 -0
  162. package/dist/api/controllers/screen.js +51 -2
  163. package/dist/api/controllers/static/index.js +1 -0
  164. package/dist/api/controllers/static/templates/BudibaseApp.svelte +10 -0
  165. package/dist/api/controllers/static/templates/preview.hbs +3 -1
  166. package/dist/api/routes/index.js +2 -0
  167. package/dist/api/routes/plugin.js +38 -0
  168. package/dist/app.js +9 -0
  169. package/dist/db/utils.js +10 -1
  170. package/dist/environment.js +1 -0
  171. package/dist/integrations/airtable.js +126 -129
  172. package/dist/integrations/arangodb.js +86 -89
  173. package/dist/integrations/base/query.js +2 -2
  174. package/dist/integrations/couchdb.js +80 -83
  175. package/dist/integrations/dynamodb.js +161 -164
  176. package/dist/integrations/elasticsearch.js +135 -138
  177. package/dist/integrations/firebase.js +154 -157
  178. package/dist/integrations/googlesheets.js +323 -327
  179. package/dist/integrations/index.js +93 -51
  180. package/dist/integrations/microsoftSqlServer.js +240 -243
  181. package/dist/integrations/mongodb.js +239 -242
  182. package/dist/integrations/mysql.js +215 -219
  183. package/dist/integrations/oracle.js +318 -322
  184. package/dist/integrations/postgres.js +262 -265
  185. package/dist/integrations/redis.js +134 -139
  186. package/dist/integrations/rest.js +278 -281
  187. package/dist/integrations/s3.js +61 -64
  188. package/dist/integrations/snowflake.js +83 -86
  189. package/dist/package.json +8 -6
  190. package/dist/threads/query.js +2 -2
  191. package/dist/tsconfig.build.tsbuildinfo +1 -1
  192. package/dist/utilities/fileSystem/index.js +65 -0
  193. package/dist/watch.js +77 -0
  194. package/package.json +9 -7
  195. package/scripts/dev/manage.js +1 -0
  196. package/src/api/controllers/application.ts +1 -1
  197. package/src/api/controllers/component.js +25 -2
  198. package/src/api/controllers/datasource.js +4 -4
  199. package/src/api/controllers/integration.js +4 -4
  200. package/src/api/controllers/plugin.ts +110 -0
  201. package/src/api/controllers/screen.js +65 -1
  202. package/src/api/controllers/static/index.ts +1 -0
  203. package/src/api/controllers/static/templates/BudibaseApp.svelte +10 -0
  204. package/src/api/controllers/static/templates/preview.hbs +3 -1
  205. package/src/api/routes/index.ts +2 -0
  206. package/src/api/routes/plugin.ts +13 -0
  207. package/src/api/routes/tests/query.spec.js +8 -25
  208. package/src/app.ts +12 -0
  209. package/src/db/utils.js +12 -0
  210. package/src/environment.js +1 -0
  211. package/src/integrations/airtable.ts +116 -118
  212. package/src/integrations/arangodb.ts +87 -89
  213. package/src/integrations/base/query.ts +2 -2
  214. package/src/integrations/couchdb.ts +83 -89
  215. package/src/integrations/dynamodb.ts +173 -175
  216. package/src/integrations/elasticsearch.ts +120 -122
  217. package/src/integrations/firebase.ts +157 -159
  218. package/src/integrations/googlesheets.ts +328 -338
  219. package/src/integrations/index.ts +59 -21
  220. package/src/integrations/microsoftSqlServer.ts +249 -251
  221. package/src/integrations/mongodb.ts +261 -258
  222. package/src/integrations/mysql.ts +229 -234
  223. package/src/integrations/oracle.ts +373 -380
  224. package/src/integrations/postgres.ts +264 -268
  225. package/src/integrations/redis.ts +128 -132
  226. package/src/integrations/rest.ts +310 -315
  227. package/src/integrations/s3.ts +68 -71
  228. package/src/integrations/snowflake.ts +80 -82
  229. package/src/integrations/tests/{airtable.spec.js → airtable.spec.ts} +21 -18
  230. package/src/integrations/tests/{arangodb.spec.js → arangodb.spec.ts} +12 -9
  231. package/src/integrations/tests/{couchdb.spec.js → couchdb.spec.ts} +33 -27
  232. package/src/integrations/tests/{dynamodb.spec.js → dynamodb.spec.ts} +45 -41
  233. package/src/integrations/tests/{elasticsearch.spec.js → elasticsearch.spec.ts} +22 -21
  234. package/src/integrations/tests/{firebase.spec.js → firebase.spec.ts} +33 -28
  235. package/src/integrations/tests/{microsoftSqlServer.spec.js → microsoftSqlServer.spec.ts} +12 -11
  236. package/src/integrations/tests/{mongo.spec.js → mongo.spec.ts} +46 -35
  237. package/src/integrations/tests/{mysql.spec.js → mysql.spec.ts} +17 -15
  238. package/src/integrations/tests/{oracle.spec.js → oracle.spec.ts} +19 -17
  239. package/src/integrations/tests/{postgres.spec.js → postgres.spec.ts} +19 -17
  240. package/src/integrations/tests/{redis.spec.js → redis.spec.ts} +27 -18
  241. package/src/integrations/tests/{rest.spec.js → rest.spec.ts} +19 -11
  242. package/src/integrations/tests/{s3.spec.js → s3.spec.ts} +10 -8
  243. package/src/integrations/tests/{sql.spec.js → sql.spec.ts} +228 -177
  244. package/src/module.d.ts +1 -0
  245. package/src/threads/query.ts +2 -2
  246. package/src/utilities/fileSystem/index.js +69 -0
  247. package/src/watch.ts +38 -0
  248. package/builder/assets/index.31907f42.js +0 -875
  249. package/builder/assets/vendor.5e1fe644.css +0 -1
  250. package/builder/assets/vendor.67dbd8fa.js +0 -248
@@ -5,151 +5,149 @@ import {
5
5
  IntegrationBase,
6
6
  } from "@budibase/types"
7
7
 
8
- module ElasticsearchModule {
9
- const { Client } = require("@elastic/elasticsearch")
8
+ const { Client } = require("@elastic/elasticsearch")
10
9
 
11
- interface ElasticsearchConfig {
12
- url: string
13
- }
10
+ interface ElasticsearchConfig {
11
+ url: string
12
+ }
14
13
 
15
- const SCHEMA: Integration = {
16
- docs: "https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/index.html",
17
- description:
18
- "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
- friendlyName: "ElasticSearch",
20
- type: "Non-relational",
21
- datasource: {
22
- url: {
23
- type: DatasourceFieldType.STRING,
24
- required: true,
25
- default: "http://localhost:9200",
26
- },
14
+ const SCHEMA: Integration = {
15
+ docs: "https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/index.html",
16
+ description:
17
+ "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.",
18
+ friendlyName: "ElasticSearch",
19
+ type: "Non-relational",
20
+ datasource: {
21
+ url: {
22
+ type: DatasourceFieldType.STRING,
23
+ required: true,
24
+ default: "http://localhost:9200",
27
25
  },
28
- query: {
29
- create: {
30
- type: QueryType.FIELDS,
31
- customisable: true,
32
- fields: {
33
- index: {
34
- type: DatasourceFieldType.STRING,
35
- required: true,
36
- },
26
+ },
27
+ query: {
28
+ create: {
29
+ type: QueryType.FIELDS,
30
+ customisable: true,
31
+ fields: {
32
+ index: {
33
+ type: DatasourceFieldType.STRING,
34
+ required: true,
37
35
  },
38
36
  },
39
- read: {
40
- type: QueryType.FIELDS,
41
- customisable: true,
42
- fields: {
43
- index: {
44
- type: DatasourceFieldType.STRING,
45
- required: true,
46
- },
37
+ },
38
+ read: {
39
+ type: QueryType.FIELDS,
40
+ customisable: true,
41
+ fields: {
42
+ index: {
43
+ type: DatasourceFieldType.STRING,
44
+ required: true,
47
45
  },
48
46
  },
49
- update: {
50
- type: QueryType.FIELDS,
51
- customisable: true,
52
- fields: {
53
- id: {
54
- type: DatasourceFieldType.STRING,
55
- required: true,
56
- },
57
- index: {
58
- type: DatasourceFieldType.STRING,
59
- required: true,
60
- },
47
+ },
48
+ update: {
49
+ type: QueryType.FIELDS,
50
+ customisable: true,
51
+ fields: {
52
+ id: {
53
+ type: DatasourceFieldType.STRING,
54
+ required: true,
55
+ },
56
+ index: {
57
+ type: DatasourceFieldType.STRING,
58
+ required: true,
61
59
  },
62
60
  },
63
- delete: {
64
- type: QueryType.FIELDS,
65
- fields: {
66
- index: {
67
- type: DatasourceFieldType.STRING,
68
- required: true,
69
- },
70
- id: {
71
- type: DatasourceFieldType.STRING,
72
- required: true,
73
- },
61
+ },
62
+ delete: {
63
+ type: QueryType.FIELDS,
64
+ fields: {
65
+ index: {
66
+ type: DatasourceFieldType.STRING,
67
+ required: true,
68
+ },
69
+ id: {
70
+ type: DatasourceFieldType.STRING,
71
+ required: true,
74
72
  },
75
73
  },
76
74
  },
77
- }
75
+ },
76
+ }
78
77
 
79
- class ElasticSearchIntegration implements IntegrationBase {
80
- private config: ElasticsearchConfig
81
- private client: any
78
+ class ElasticSearchIntegration implements IntegrationBase {
79
+ private config: ElasticsearchConfig
80
+ private client: any
82
81
 
83
- constructor(config: ElasticsearchConfig) {
84
- this.config = config
85
- this.client = new Client({ node: config.url })
86
- }
82
+ constructor(config: ElasticsearchConfig) {
83
+ this.config = config
84
+ this.client = new Client({ node: config.url })
85
+ }
87
86
 
88
- async create(query: { index: string; json: object }) {
89
- const { index, json } = query
87
+ async create(query: { index: string; json: object }) {
88
+ const { index, json } = query
90
89
 
91
- try {
92
- const result = await this.client.index({
93
- index,
94
- body: json,
95
- })
96
- return result.body
97
- } catch (err) {
98
- console.error("Error writing to elasticsearch", err)
99
- throw err
100
- } finally {
101
- await this.client.close()
102
- }
90
+ try {
91
+ const result = await this.client.index({
92
+ index,
93
+ body: json,
94
+ })
95
+ return result.body
96
+ } catch (err) {
97
+ console.error("Error writing to elasticsearch", err)
98
+ throw err
99
+ } finally {
100
+ await this.client.close()
103
101
  }
102
+ }
104
103
 
105
- async read(query: { index: string; json: object }) {
106
- const { index, json } = query
107
- try {
108
- const result = await this.client.search({
109
- index: index,
110
- body: json,
111
- })
112
- return result.body.hits.hits.map(({ _source }: any) => _source)
113
- } catch (err) {
114
- console.error("Error querying elasticsearch", err)
115
- throw err
116
- } finally {
117
- await this.client.close()
118
- }
104
+ async read(query: { index: string; json: object }) {
105
+ const { index, json } = query
106
+ try {
107
+ const result = await this.client.search({
108
+ index: index,
109
+ body: json,
110
+ })
111
+ return result.body.hits.hits.map(({ _source }: any) => _source)
112
+ } catch (err) {
113
+ console.error("Error querying elasticsearch", err)
114
+ throw err
115
+ } finally {
116
+ await this.client.close()
119
117
  }
118
+ }
120
119
 
121
- async update(query: { id: string; index: string; json: object }) {
122
- const { id, index, json } = query
123
- try {
124
- const result = await this.client.update({
125
- id,
126
- index,
127
- body: json,
128
- })
129
- return result.body
130
- } catch (err) {
131
- console.error("Error querying elasticsearch", err)
132
- throw err
133
- } finally {
134
- await this.client.close()
135
- }
120
+ async update(query: { id: string; index: string; json: object }) {
121
+ const { id, index, json } = query
122
+ try {
123
+ const result = await this.client.update({
124
+ id,
125
+ index,
126
+ body: json,
127
+ })
128
+ return result.body
129
+ } catch (err) {
130
+ console.error("Error querying elasticsearch", err)
131
+ throw err
132
+ } finally {
133
+ await this.client.close()
136
134
  }
135
+ }
137
136
 
138
- async delete(query: object) {
139
- try {
140
- const result = await this.client.delete(query)
141
- return result.body
142
- } catch (err) {
143
- console.error("Error deleting from elasticsearch", err)
144
- throw err
145
- } finally {
146
- await this.client.close()
147
- }
137
+ async delete(query: object) {
138
+ try {
139
+ const result = await this.client.delete(query)
140
+ return result.body
141
+ } catch (err) {
142
+ console.error("Error deleting from elasticsearch", err)
143
+ throw err
144
+ } finally {
145
+ await this.client.close()
148
146
  }
149
147
  }
148
+ }
150
149
 
151
- module.exports = {
152
- schema: SCHEMA,
153
- integration: ElasticSearchIntegration,
154
- }
150
+ export default {
151
+ schema: SCHEMA,
152
+ integration: ElasticSearchIntegration,
155
153
  }
@@ -6,184 +6,182 @@ import {
6
6
  } from "@budibase/types"
7
7
  import { Firestore, WhereFilterOp } from "@google-cloud/firestore"
8
8
 
9
- module Firebase {
10
- interface FirebaseConfig {
11
- email: string
12
- privateKey: string
13
- projectId: string
14
- }
9
+ interface FirebaseConfig {
10
+ email: string
11
+ privateKey: string
12
+ projectId: string
13
+ }
15
14
 
16
- const SCHEMA: Integration = {
17
- docs: "https://firebase.google.com/docs/firestore/quickstart",
18
- friendlyName: "Firestore",
19
- type: "Non-relational",
20
- description:
21
- "Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.",
22
- datasource: {
23
- email: {
24
- type: DatasourceFieldType.STRING,
25
- required: true,
26
- },
27
- privateKey: {
28
- type: DatasourceFieldType.STRING,
29
- required: true,
30
- },
31
- projectId: {
32
- type: DatasourceFieldType.STRING,
33
- required: true,
34
- },
15
+ const SCHEMA: Integration = {
16
+ docs: "https://firebase.google.com/docs/firestore/quickstart",
17
+ friendlyName: "Firestore",
18
+ type: "Non-relational",
19
+ description:
20
+ "Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.",
21
+ datasource: {
22
+ email: {
23
+ type: DatasourceFieldType.STRING,
24
+ required: true,
35
25
  },
36
- query: {
37
- create: {
38
- type: QueryType.JSON,
39
- },
40
- read: {
41
- type: QueryType.JSON,
42
- },
43
- update: {
44
- type: QueryType.JSON,
45
- },
46
- delete: {
47
- type: QueryType.JSON,
48
- },
26
+ privateKey: {
27
+ type: DatasourceFieldType.STRING,
28
+ required: true,
49
29
  },
50
- extra: {
51
- collection: {
52
- displayName: "Collection",
53
- type: DatasourceFieldType.STRING,
54
- required: true,
55
- },
56
- filterField: {
57
- displayName: "Filter field",
58
- type: DatasourceFieldType.STRING,
59
- required: false,
60
- },
61
- filter: {
62
- displayName: "Filter comparison",
63
- type: DatasourceFieldType.LIST,
64
- required: false,
65
- data: {
66
- read: [
67
- "==",
68
- "<",
69
- "<=",
70
- "!=",
71
- ">=",
72
- ">",
73
- "array-contains",
74
- "in",
75
- "not-in",
76
- "array-contains-any",
77
- ],
78
- },
79
- },
80
- filterValue: {
81
- displayName: "Filter value",
82
- type: DatasourceFieldType.STRING,
83
- required: false,
30
+ projectId: {
31
+ type: DatasourceFieldType.STRING,
32
+ required: true,
33
+ },
34
+ },
35
+ query: {
36
+ create: {
37
+ type: QueryType.JSON,
38
+ },
39
+ read: {
40
+ type: QueryType.JSON,
41
+ },
42
+ update: {
43
+ type: QueryType.JSON,
44
+ },
45
+ delete: {
46
+ type: QueryType.JSON,
47
+ },
48
+ },
49
+ extra: {
50
+ collection: {
51
+ displayName: "Collection",
52
+ type: DatasourceFieldType.STRING,
53
+ required: true,
54
+ },
55
+ filterField: {
56
+ displayName: "Filter field",
57
+ type: DatasourceFieldType.STRING,
58
+ required: false,
59
+ },
60
+ filter: {
61
+ displayName: "Filter comparison",
62
+ type: DatasourceFieldType.LIST,
63
+ required: false,
64
+ data: {
65
+ read: [
66
+ "==",
67
+ "<",
68
+ "<=",
69
+ "!=",
70
+ ">=",
71
+ ">",
72
+ "array-contains",
73
+ "in",
74
+ "not-in",
75
+ "array-contains-any",
76
+ ],
84
77
  },
85
78
  },
86
- }
79
+ filterValue: {
80
+ displayName: "Filter value",
81
+ type: DatasourceFieldType.STRING,
82
+ required: false,
83
+ },
84
+ },
85
+ }
87
86
 
88
- class FirebaseIntegration implements IntegrationBase {
89
- private config: FirebaseConfig
90
- private client: Firestore
87
+ class FirebaseIntegration implements IntegrationBase {
88
+ private config: FirebaseConfig
89
+ private client: Firestore
91
90
 
92
- constructor(config: FirebaseConfig) {
93
- this.config = config
94
- this.client = new Firestore({
95
- projectId: config.projectId,
96
- credentials: {
97
- client_email: config.email,
98
- private_key: config.privateKey?.replace(/\\n/g, "\n"),
99
- },
100
- })
101
- }
91
+ constructor(config: FirebaseConfig) {
92
+ this.config = config
93
+ this.client = new Firestore({
94
+ projectId: config.projectId,
95
+ credentials: {
96
+ client_email: config.email,
97
+ private_key: config.privateKey?.replace(/\\n/g, "\n"),
98
+ },
99
+ })
100
+ }
102
101
 
103
- async create(query: { json: object; extra: { [key: string]: string } }) {
104
- try {
105
- const documentReference = this.client
106
- .collection(query.extra.collection)
107
- .doc()
108
- await documentReference.set({ ...query.json, id: documentReference.id })
109
- const snapshot = await documentReference.get()
110
- return snapshot.data()
111
- } catch (err) {
112
- console.error("Error writing to Firestore", err)
113
- throw err
114
- }
102
+ async create(query: { json: object; extra: { [key: string]: string } }) {
103
+ try {
104
+ const documentReference = this.client
105
+ .collection(query.extra.collection)
106
+ .doc()
107
+ await documentReference.set({ ...query.json, id: documentReference.id })
108
+ const snapshot = await documentReference.get()
109
+ return snapshot.data()
110
+ } catch (err) {
111
+ console.error("Error writing to Firestore", err)
112
+ throw err
115
113
  }
114
+ }
116
115
 
117
- async read(query: { json: object; extra: { [key: string]: string } }) {
118
- try {
119
- let snapshot
120
- const collectionRef = this.client.collection(query.extra.collection)
121
- if (
122
- query.extra.filterField &&
123
- query.extra.filter &&
124
- query.extra.filterValue
125
- ) {
126
- snapshot = await collectionRef
127
- .where(
128
- query.extra.filterField,
129
- query.extra.filter as WhereFilterOp,
130
- query.extra.filterValue
131
- )
132
- .get()
133
- } else {
134
- snapshot = await collectionRef.get()
135
- }
136
- const result: any[] = []
137
- snapshot.forEach(doc => result.push(doc.data()))
138
-
139
- return result
140
- } catch (err) {
141
- console.error("Error querying Firestore", err)
142
- throw err
116
+ async read(query: { json: object; extra: { [key: string]: string } }) {
117
+ try {
118
+ let snapshot
119
+ const collectionRef = this.client.collection(query.extra.collection)
120
+ if (
121
+ query.extra.filterField &&
122
+ query.extra.filter &&
123
+ query.extra.filterValue
124
+ ) {
125
+ snapshot = await collectionRef
126
+ .where(
127
+ query.extra.filterField,
128
+ query.extra.filter as WhereFilterOp,
129
+ query.extra.filterValue
130
+ )
131
+ .get()
132
+ } else {
133
+ snapshot = await collectionRef.get()
143
134
  }
144
- }
145
-
146
- async update(query: {
147
- json: Record<string, any>
148
- extra: { [key: string]: string }
149
- }) {
150
- try {
151
- await this.client
152
- .collection(query.extra.collection)
153
- .doc(query.json.id)
154
- .update(query.json)
135
+ const result: any[] = []
136
+ snapshot.forEach(doc => result.push(doc.data()))
155
137
 
156
- return (
157
- await this.client
158
- .collection(query.extra.collection)
159
- .doc(query.json.id)
160
- .get()
161
- ).data()
162
- } catch (err) {
163
- console.error("Error writing to Firestore", err)
164
- throw err
165
- }
138
+ return result
139
+ } catch (err) {
140
+ console.error("Error querying Firestore", err)
141
+ throw err
166
142
  }
143
+ }
167
144
 
168
- async delete(query: {
169
- json: { id: string }
170
- extra: { [key: string]: string }
171
- }) {
172
- try {
145
+ async update(query: {
146
+ json: Record<string, any>
147
+ extra: { [key: string]: string }
148
+ }) {
149
+ try {
150
+ await this.client
151
+ .collection(query.extra.collection)
152
+ .doc(query.json.id)
153
+ .update(query.json)
154
+
155
+ return (
173
156
  await this.client
174
157
  .collection(query.extra.collection)
175
158
  .doc(query.json.id)
176
- .delete()
177
- return true
178
- } catch (err) {
179
- console.error("Error deleting from Firestore", err)
180
- throw err
181
- }
159
+ .get()
160
+ ).data()
161
+ } catch (err) {
162
+ console.error("Error writing to Firestore", err)
163
+ throw err
182
164
  }
183
165
  }
184
166
 
185
- module.exports = {
186
- schema: SCHEMA,
187
- integration: FirebaseIntegration,
167
+ async delete(query: {
168
+ json: { id: string }
169
+ extra: { [key: string]: string }
170
+ }) {
171
+ try {
172
+ await this.client
173
+ .collection(query.extra.collection)
174
+ .doc(query.json.id)
175
+ .delete()
176
+ return true
177
+ } catch (err) {
178
+ console.error("Error deleting from Firestore", err)
179
+ throw err
180
+ }
188
181
  }
189
182
  }
183
+
184
+ export default {
185
+ schema: SCHEMA,
186
+ integration: FirebaseIntegration,
187
+ }