@budibase/server 1.3.15-alpha.0 → 1.3.15

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.3953692d.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/screen.js +2 -51
  164. package/dist/api/controllers/static/index.js +0 -1
  165. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  166. package/dist/api/controllers/static/templates/preview.hbs +1 -3
  167. package/dist/api/routes/index.js +0 -2
  168. package/dist/app.js +0 -9
  169. package/dist/db/utils.js +1 -10
  170. package/dist/environment.js +2 -3
  171. package/dist/integrations/airtable.js +129 -126
  172. package/dist/integrations/arangodb.js +89 -86
  173. package/dist/integrations/base/query.js +2 -2
  174. package/dist/integrations/couchdb.js +83 -80
  175. package/dist/integrations/dynamodb.js +164 -161
  176. package/dist/integrations/elasticsearch.js +138 -135
  177. package/dist/integrations/firebase.js +157 -154
  178. package/dist/integrations/googlesheets.js +327 -323
  179. package/dist/integrations/index.js +51 -93
  180. package/dist/integrations/microsoftSqlServer.js +243 -240
  181. package/dist/integrations/mongodb.js +242 -239
  182. package/dist/integrations/mysql.js +219 -215
  183. package/dist/integrations/oracle.js +322 -318
  184. package/dist/integrations/postgres.js +265 -262
  185. package/dist/integrations/redis.js +139 -134
  186. package/dist/integrations/rest.js +292 -289
  187. package/dist/integrations/s3.js +64 -61
  188. package/dist/integrations/snowflake.js +86 -83
  189. package/dist/package.json +0 -2
  190. package/dist/threads/query.js +2 -2
  191. package/dist/tsconfig.build.tsbuildinfo +1 -1
  192. package/dist/utilities/fileSystem/index.js +10 -66
  193. package/package.json +6 -8
  194. package/scripts/dev/manage.js +0 -1
  195. package/src/api/controllers/application.ts +1 -1
  196. package/src/api/controllers/component.js +2 -25
  197. package/src/api/controllers/datasource.js +4 -4
  198. package/src/api/controllers/integration.js +4 -4
  199. package/src/api/controllers/screen.js +1 -65
  200. package/src/api/controllers/static/index.ts +0 -1
  201. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -10
  202. package/src/api/controllers/static/templates/preview.hbs +1 -3
  203. package/src/api/routes/index.ts +0 -2
  204. package/src/api/routes/tests/query.spec.js +25 -8
  205. package/src/app.ts +0 -12
  206. package/src/db/utils.js +0 -12
  207. package/src/environment.js +2 -3
  208. package/src/integrations/airtable.ts +118 -116
  209. package/src/integrations/arangodb.ts +89 -87
  210. package/src/integrations/base/query.ts +2 -2
  211. package/src/integrations/couchdb.ts +89 -83
  212. package/src/integrations/dynamodb.ts +175 -173
  213. package/src/integrations/elasticsearch.ts +122 -120
  214. package/src/integrations/firebase.ts +159 -157
  215. package/src/integrations/googlesheets.ts +338 -328
  216. package/src/integrations/index.ts +21 -59
  217. package/src/integrations/microsoftSqlServer.ts +251 -249
  218. package/src/integrations/mongodb.ts +258 -261
  219. package/src/integrations/mysql.ts +234 -229
  220. package/src/integrations/oracle.ts +380 -373
  221. package/src/integrations/postgres.ts +268 -264
  222. package/src/integrations/redis.ts +132 -128
  223. package/src/integrations/rest.ts +329 -324
  224. package/src/integrations/s3.ts +71 -68
  225. package/src/integrations/snowflake.ts +82 -80
  226. package/src/integrations/tests/{airtable.spec.ts → airtable.spec.js} +18 -21
  227. package/src/integrations/tests/{arangodb.spec.ts → arangodb.spec.js} +9 -12
  228. package/src/integrations/tests/{couchdb.spec.ts → couchdb.spec.js} +27 -33
  229. package/src/integrations/tests/{dynamodb.spec.ts → dynamodb.spec.js} +41 -45
  230. package/src/integrations/tests/{elasticsearch.spec.ts → elasticsearch.spec.js} +21 -22
  231. package/src/integrations/tests/{firebase.spec.ts → firebase.spec.js} +28 -33
  232. package/src/integrations/tests/{microsoftSqlServer.spec.ts → microsoftSqlServer.spec.js} +11 -12
  233. package/src/integrations/tests/{mongo.spec.ts → mongo.spec.js} +35 -46
  234. package/src/integrations/tests/{mysql.spec.ts → mysql.spec.js} +15 -17
  235. package/src/integrations/tests/{oracle.spec.ts → oracle.spec.js} +17 -19
  236. package/src/integrations/tests/{postgres.spec.ts → postgres.spec.js} +17 -19
  237. package/src/integrations/tests/{redis.spec.ts → redis.spec.js} +18 -27
  238. package/src/integrations/tests/{rest.spec.ts → rest.spec.js} +14 -22
  239. package/src/integrations/tests/{s3.spec.ts → s3.spec.js} +8 -10
  240. package/src/integrations/tests/{sql.spec.ts → sql.spec.js} +177 -228
  241. package/src/module.d.ts +0 -1
  242. package/src/threads/query.ts +2 -2
  243. package/src/utilities/fileSystem/index.js +9 -70
  244. package/builder/assets/index.b266d29f.js +0 -995
  245. package/dist/api/controllers/plugin.js +0 -119
  246. package/dist/api/routes/plugin.js +0 -38
  247. package/dist/watch.js +0 -77
  248. package/src/api/controllers/plugin.ts +0 -110
  249. package/src/api/routes/plugin.ts +0 -13
  250. 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
  }