@budibase/server 1.3.15-alpha.0 → 1.3.16

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 (252) hide show
  1. package/__mocks__/mongodb.ts +1 -1
  2. package/builder/assets/index.43e7aaa8.js +876 -0
  3. package/builder/assets/{index.f5c54dd2.css → index.a70e216a.css} +2 -2
  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 +254 -296
  8. package/coverage/coverage-final.json +17 -17
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +13 -82
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +20 -20
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +30 -30
  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 +1 -1
  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 -204
  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 +12 -12
  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 +1 -1
  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 +1 -1
  74. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  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 +1 -1
  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 +28 -28
  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 +33 -33
  131. package/coverage/lcov-report/middleware/index.html +1 -1
  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 +1 -1
  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 +1 -1
  158. package/coverage/lcov.info +445 -533
  159. package/dist/api/controllers/application.js +4 -5
  160. package/dist/api/controllers/component.js +1 -18
  161. package/dist/api/controllers/datasource.js +4 -4
  162. package/dist/api/controllers/integration.js +4 -4
  163. package/dist/api/controllers/row/ExternalRequest.js +3 -1
  164. package/dist/api/controllers/screen.js +2 -51
  165. package/dist/api/controllers/static/index.js +0 -1
  166. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  167. package/dist/api/controllers/static/templates/preview.hbs +1 -3
  168. package/dist/api/routes/index.js +0 -2
  169. package/dist/app.js +0 -9
  170. package/dist/db/utils.js +1 -10
  171. package/dist/environment.js +2 -3
  172. package/dist/integrations/airtable.js +129 -126
  173. package/dist/integrations/arangodb.js +89 -86
  174. package/dist/integrations/base/query.js +2 -2
  175. package/dist/integrations/couchdb.js +83 -80
  176. package/dist/integrations/dynamodb.js +164 -161
  177. package/dist/integrations/elasticsearch.js +138 -135
  178. package/dist/integrations/firebase.js +157 -154
  179. package/dist/integrations/googlesheets.js +327 -323
  180. package/dist/integrations/index.js +51 -93
  181. package/dist/integrations/microsoftSqlServer.js +243 -240
  182. package/dist/integrations/mongodb.js +242 -239
  183. package/dist/integrations/mysql.js +219 -215
  184. package/dist/integrations/oracle.js +322 -318
  185. package/dist/integrations/postgres.js +265 -262
  186. package/dist/integrations/redis.js +139 -134
  187. package/dist/integrations/rest.js +292 -289
  188. package/dist/integrations/s3.js +64 -61
  189. package/dist/integrations/snowflake.js +86 -83
  190. package/dist/package.json +6 -8
  191. package/dist/threads/query.js +2 -2
  192. package/dist/tsconfig.build.tsbuildinfo +1 -1
  193. package/dist/utilities/fileSystem/index.js +10 -66
  194. package/package.json +7 -9
  195. package/scripts/dev/manage.js +0 -1
  196. package/src/api/controllers/application.ts +1 -1
  197. package/src/api/controllers/component.js +2 -25
  198. package/src/api/controllers/datasource.js +4 -4
  199. package/src/api/controllers/integration.js +4 -4
  200. package/src/api/controllers/row/ExternalRequest.ts +4 -1
  201. package/src/api/controllers/screen.js +1 -65
  202. package/src/api/controllers/static/index.ts +0 -1
  203. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  204. package/src/api/controllers/static/templates/preview.hbs +1 -3
  205. package/src/api/routes/index.ts +0 -2
  206. package/src/api/routes/tests/query.spec.js +25 -8
  207. package/src/app.ts +0 -12
  208. package/src/db/utils.js +0 -12
  209. package/src/environment.js +2 -3
  210. package/src/integrations/airtable.ts +118 -116
  211. package/src/integrations/arangodb.ts +89 -87
  212. package/src/integrations/base/query.ts +2 -2
  213. package/src/integrations/couchdb.ts +89 -83
  214. package/src/integrations/dynamodb.ts +175 -173
  215. package/src/integrations/elasticsearch.ts +122 -120
  216. package/src/integrations/firebase.ts +159 -157
  217. package/src/integrations/googlesheets.ts +338 -328
  218. package/src/integrations/index.ts +21 -59
  219. package/src/integrations/microsoftSqlServer.ts +251 -249
  220. package/src/integrations/mongodb.ts +258 -261
  221. package/src/integrations/mysql.ts +234 -229
  222. package/src/integrations/oracle.ts +380 -373
  223. package/src/integrations/postgres.ts +268 -264
  224. package/src/integrations/redis.ts +132 -128
  225. package/src/integrations/rest.ts +329 -324
  226. package/src/integrations/s3.ts +71 -68
  227. package/src/integrations/snowflake.ts +82 -80
  228. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  229. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  230. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  231. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  232. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  233. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  234. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  235. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  236. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  237. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  238. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  239. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  240. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  241. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  242. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  243. package/src/module.d.ts +0 -1
  244. package/src/threads/query.ts +2 -2
  245. package/src/utilities/fileSystem/index.js +9 -70
  246. package/builder/assets/index.b266d29f.js +0 -995
  247. package/dist/api/controllers/plugin.js +0 -119
  248. package/dist/api/routes/plugin.js +0 -38
  249. package/dist/watch.js +0 -77
  250. package/src/api/controllers/plugin.ts +0 -110
  251. package/src/api/routes/plugin.ts +0 -13
  252. package/src/watch.ts +0 -38
@@ -6,182 +6,184 @@ import {
6
6
  } from "@budibase/types"
7
7
  import { Firestore, WhereFilterOp } from "@google-cloud/firestore"
8
8
 
9
- interface FirebaseConfig {
10
- email: string
11
- privateKey: string
12
- projectId: string
13
- }
9
+ module Firebase {
10
+ interface FirebaseConfig {
11
+ email: string
12
+ privateKey: string
13
+ projectId: string
14
+ }
14
15
 
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,
25
- },
26
- privateKey: {
27
- type: DatasourceFieldType.STRING,
28
- required: true,
29
- },
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
- ],
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,
77
34
  },
78
35
  },
79
- filterValue: {
80
- displayName: "Filter value",
81
- type: DatasourceFieldType.STRING,
82
- required: false,
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
+ },
83
49
  },
84
- },
85
- }
86
-
87
- class FirebaseIntegration implements IntegrationBase {
88
- private config: FirebaseConfig
89
- private client: Firestore
90
-
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"),
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,
98
60
  },
99
- })
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,
84
+ },
85
+ },
100
86
  }
101
87
 
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
88
+ class FirebaseIntegration implements IntegrationBase {
89
+ private config: FirebaseConfig
90
+ private client: Firestore
91
+
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
+ })
113
101
  }
114
- }
115
102
 
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()
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
134
114
  }
135
- const result: any[] = []
136
- snapshot.forEach(doc => result.push(doc.data()))
137
-
138
- return result
139
- } catch (err) {
140
- console.error("Error querying Firestore", err)
141
- throw err
142
115
  }
143
- }
144
116
 
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)
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
143
+ }
144
+ }
154
145
 
155
- return (
146
+ async update(query: {
147
+ json: Record<string, any>
148
+ extra: { [key: string]: string }
149
+ }) {
150
+ try {
156
151
  await this.client
157
152
  .collection(query.extra.collection)
158
153
  .doc(query.json.id)
159
- .get()
160
- ).data()
161
- } catch (err) {
162
- console.error("Error writing to Firestore", err)
163
- throw err
154
+ .update(query.json)
155
+
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
+ }
164
166
  }
165
- }
166
167
 
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
168
+ async delete(query: {
169
+ json: { id: string }
170
+ extra: { [key: string]: string }
171
+ }) {
172
+ try {
173
+ await this.client
174
+ .collection(query.extra.collection)
175
+ .doc(query.json.id)
176
+ .delete()
177
+ return true
178
+ } catch (err) {
179
+ console.error("Error deleting from Firestore", err)
180
+ throw err
181
+ }
180
182
  }
181
183
  }
182
- }
183
184
 
184
- export default {
185
- schema: SCHEMA,
186
- integration: FirebaseIntegration,
185
+ module.exports = {
186
+ schema: SCHEMA,
187
+ integration: FirebaseIntegration,
188
+ }
187
189
  }