@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
@@ -15,316 +15,313 @@ import {
15
15
  CommonOptions,
16
16
  } from "mongodb"
17
17
 
18
- interface MongoDBConfig {
19
- connectionString: string
20
- db: string
21
- }
22
-
23
- interface MongoDBQuery {
24
- json: object | string
25
- extra: {
26
- [key: string]: string
18
+ module MongoDBModule {
19
+ interface MongoDBConfig {
20
+ connectionString: string
21
+ db: string
27
22
  }
28
- }
29
23
 
30
- const SCHEMA: Integration = {
31
- docs: "https://github.com/mongodb/node-mongodb-native",
32
- friendlyName: "MongoDB",
33
- type: "Non-relational",
34
- description:
35
- "MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.",
36
- datasource: {
37
- connectionString: {
38
- type: DatasourceFieldType.STRING,
39
- required: true,
40
- default: "mongodb://localhost:27017",
41
- },
42
- db: {
43
- type: DatasourceFieldType.STRING,
44
- required: true,
45
- },
46
- },
47
- query: {
48
- create: {
49
- type: QueryType.JSON,
50
- },
51
- read: {
52
- type: QueryType.JSON,
53
- },
54
- update: {
55
- type: QueryType.JSON,
56
- },
57
- delete: {
58
- type: QueryType.JSON,
24
+ const SCHEMA: Integration = {
25
+ docs: "https://github.com/mongodb/node-mongodb-native",
26
+ friendlyName: "MongoDB",
27
+ type: "Non-relational",
28
+ description:
29
+ "MongoDB is a general purpose, document-based, distributed database built for modern application developers and for the cloud era.",
30
+ datasource: {
31
+ connectionString: {
32
+ type: DatasourceFieldType.STRING,
33
+ required: true,
34
+ default: "mongodb://localhost:27017",
35
+ },
36
+ db: {
37
+ type: DatasourceFieldType.STRING,
38
+ required: true,
39
+ },
59
40
  },
60
- },
61
- extra: {
62
- collection: {
63
- displayName: "Collection",
64
- type: DatasourceFieldType.STRING,
65
- required: true,
41
+ query: {
42
+ create: {
43
+ type: QueryType.JSON,
44
+ },
45
+ read: {
46
+ type: QueryType.JSON,
47
+ },
48
+ update: {
49
+ type: QueryType.JSON,
50
+ },
51
+ delete: {
52
+ type: QueryType.JSON,
53
+ },
66
54
  },
67
- actionTypes: {
68
- displayName: "Action Types",
69
- type: DatasourceFieldType.LIST,
70
- required: true,
71
- data: {
72
- read: ["find", "findOne", "findOneAndUpdate", "count", "distinct"],
73
- create: ["insertOne", "insertMany"],
74
- update: ["updateOne", "updateMany"],
75
- delete: ["deleteOne", "deleteMany"],
55
+ extra: {
56
+ collection: {
57
+ displayName: "Collection",
58
+ type: DatasourceFieldType.STRING,
59
+ required: true,
60
+ },
61
+ actionTypes: {
62
+ displayName: "Action Types",
63
+ type: DatasourceFieldType.LIST,
64
+ required: true,
65
+ data: {
66
+ read: ["find", "findOne", "findOneAndUpdate", "count", "distinct"],
67
+ create: ["insertOne", "insertMany"],
68
+ update: ["updateOne", "updateMany"],
69
+ delete: ["deleteOne", "deleteMany"],
70
+ },
76
71
  },
77
72
  },
78
- },
79
- }
73
+ }
80
74
 
81
- class MongoIntegration implements IntegrationBase {
82
- private config: MongoDBConfig
83
- private client: any
75
+ class MongoIntegration implements IntegrationBase {
76
+ private config: MongoDBConfig
77
+ private client: any
84
78
 
85
- constructor(config: MongoDBConfig) {
86
- this.config = config
87
- this.client = new MongoClient(config.connectionString)
88
- }
79
+ constructor(config: MongoDBConfig) {
80
+ this.config = config
81
+ this.client = new MongoClient(config.connectionString)
82
+ }
89
83
 
90
- async connect() {
91
- return this.client.connect()
92
- }
84
+ async connect() {
85
+ return this.client.connect()
86
+ }
93
87
 
94
- createObjectIds(json: any): object {
95
- const self = this
96
- function interpolateObjectIds(json: any) {
97
- for (let field of Object.keys(json)) {
98
- if (json[field] instanceof Object) {
99
- json[field] = self.createObjectIds(json[field])
100
- }
101
- if (
102
- typeof json[field] === "string" &&
103
- json[field].toLowerCase().startsWith("objectid")
104
- ) {
105
- const id = json[field].match(/(?<=objectid\(['"]).*(?=['"]\))/gi)?.[0]
106
- if (id) {
107
- json[field] = ObjectID.createFromHexString(id)
88
+ createObjectIds(json: any): object {
89
+ const self = this
90
+ function interpolateObjectIds(json: any) {
91
+ for (let field of Object.keys(json)) {
92
+ if (json[field] instanceof Object) {
93
+ json[field] = self.createObjectIds(json[field])
94
+ }
95
+ if (
96
+ typeof json[field] === "string" &&
97
+ json[field].toLowerCase().startsWith("objectid")
98
+ ) {
99
+ const id = json[field].match(
100
+ /(?<=objectid\(['"]).*(?=['"]\))/gi
101
+ )?.[0]
102
+ if (id) {
103
+ json[field] = ObjectID.createFromHexString(id)
104
+ }
108
105
  }
109
106
  }
107
+ return json
110
108
  }
111
- return json
112
- }
113
109
 
114
- if (Array.isArray(json)) {
115
- for (let i = 0; i < json.length; i++) {
116
- json[i] = interpolateObjectIds(json[i])
110
+ if (Array.isArray(json)) {
111
+ for (let i = 0; i < json.length; i++) {
112
+ json[i] = interpolateObjectIds(json[i])
113
+ }
114
+ return json
117
115
  }
118
- return json
116
+ return interpolateObjectIds(json)
119
117
  }
120
- return interpolateObjectIds(json)
121
- }
122
118
 
123
- parseQueryParams(params: string, mode: string) {
124
- let queryParams = []
125
- let openCount = 0
126
- let inQuotes = false
127
- let i = 0
128
- let startIndex = 0
129
- for (let c of params) {
130
- if (c === '"' && i > 0 && params[i - 1] !== "\\") {
131
- inQuotes = !inQuotes
132
- }
133
- if (c === "{" && !inQuotes) {
134
- openCount++
135
- if (openCount === 1) {
136
- startIndex = i
119
+ parseQueryParams(params: string, mode: string) {
120
+ let queryParams = []
121
+ let openCount = 0
122
+ let inQuotes = false
123
+ let i = 0
124
+ let startIndex = 0
125
+ for (let c of params) {
126
+ if (c === '"' && i > 0 && params[i - 1] !== "\\") {
127
+ inQuotes = !inQuotes
137
128
  }
138
- } else if (c === "}" && !inQuotes) {
139
- if (openCount === 1) {
140
- queryParams.push(JSON.parse(params.substring(startIndex, i + 1)))
129
+ if (c === "{" && !inQuotes) {
130
+ openCount++
131
+ if (openCount === 1) {
132
+ startIndex = i
133
+ }
134
+ } else if (c === "}" && !inQuotes) {
135
+ if (openCount === 1) {
136
+ queryParams.push(JSON.parse(params.substring(startIndex, i + 1)))
137
+ }
138
+ openCount--
139
+ }
140
+ i++
141
+ }
142
+ let group1 = queryParams[0] ?? {}
143
+ let group2 = queryParams[1] ?? {}
144
+ let group3 = queryParams[2] ?? {}
145
+ if (mode === "update") {
146
+ return {
147
+ filter: group1,
148
+ update: group2,
149
+ options: group3,
141
150
  }
142
- openCount--
143
151
  }
144
- i++
145
- }
146
- let group1 = queryParams[0] ?? {}
147
- let group2 = queryParams[1] ?? {}
148
- let group3 = queryParams[2] ?? {}
149
- if (mode === "update") {
150
152
  return {
151
153
  filter: group1,
152
- update: group2,
153
- options: group3,
154
+ options: group2,
154
155
  }
155
156
  }
156
- return {
157
- filter: group1,
158
- options: group2,
159
- }
160
- }
161
157
 
162
- async create(query: MongoDBQuery) {
163
- try {
164
- await this.connect()
165
- const db = this.client.db(this.config.db)
166
- const collection = db.collection(query.extra.collection)
167
- let json = this.createObjectIds(query.json)
158
+ async create(query: { json: object; extra: { [key: string]: string } }) {
159
+ try {
160
+ await this.connect()
161
+ const db = this.client.db(this.config.db)
162
+ const collection = db.collection(query.extra.collection)
163
+ let json = this.createObjectIds(query.json)
168
164
 
169
- // For mongodb we add an extra actionType to specify
170
- // which method we want to call on the collection
171
- switch (query.extra.actionTypes) {
172
- case "insertOne": {
173
- return await collection.insertOne(json)
174
- }
175
- case "insertMany": {
176
- return await collection.insertMany(json)
177
- }
178
- default: {
179
- throw new Error(
180
- `actionType ${query.extra.actionTypes} does not exist on DB for create`
181
- )
165
+ // For mongodb we add an extra actionType to specify
166
+ // which method we want to call on the collection
167
+ switch (query.extra.actionTypes) {
168
+ case "insertOne": {
169
+ return await collection.insertOne(json)
170
+ }
171
+ case "insertMany": {
172
+ return await collection.insertMany(json)
173
+ }
174
+ default: {
175
+ throw new Error(
176
+ `actionType ${query.extra.actionTypes} does not exist on DB for create`
177
+ )
178
+ }
182
179
  }
180
+ } catch (err) {
181
+ console.error("Error writing to mongodb", err)
182
+ throw err
183
+ } finally {
184
+ await this.client.close()
183
185
  }
184
- } catch (err) {
185
- console.error("Error writing to mongodb", err)
186
- throw err
187
- } finally {
188
- await this.client.close()
189
186
  }
190
- }
191
187
 
192
- async read(query: MongoDBQuery) {
193
- try {
194
- await this.connect()
195
- const db = this.client.db(this.config.db)
196
- const collection = db.collection(query.extra.collection)
197
- let json = this.createObjectIds(query.json)
188
+ async read(query: { json: object; extra: { [key: string]: string } }) {
189
+ try {
190
+ await this.connect()
191
+ const db = this.client.db(this.config.db)
192
+ const collection = db.collection(query.extra.collection)
193
+ let json = this.createObjectIds(query.json)
198
194
 
199
- switch (query.extra.actionTypes) {
200
- case "find": {
201
- return await collection.find(json).toArray()
202
- }
203
- case "findOne": {
204
- return await collection.findOne(json)
205
- }
206
- case "findOneAndUpdate": {
207
- if (typeof query.json === "string") {
208
- json = this.parseQueryParams(query.json, "update")
195
+ switch (query.extra.actionTypes) {
196
+ case "find": {
197
+ return await collection.find(json).toArray()
209
198
  }
210
- let findAndUpdateJson = this.createObjectIds(json) as {
211
- filter: FilterQuery<any>
212
- update: UpdateQuery<any>
213
- options: FindOneAndUpdateOption<any>
199
+ case "findOne": {
200
+ return await collection.findOne(json)
201
+ }
202
+ case "findOneAndUpdate": {
203
+ if (typeof query.json === "string") {
204
+ json = this.parseQueryParams(query.json, "update")
205
+ }
206
+ let findAndUpdateJson = this.createObjectIds(json) as {
207
+ filter: FilterQuery<any>
208
+ update: UpdateQuery<any>
209
+ options: FindOneAndUpdateOption<any>
210
+ }
211
+ return await collection.findOneAndUpdate(
212
+ findAndUpdateJson.filter,
213
+ findAndUpdateJson.update,
214
+ findAndUpdateJson.options
215
+ )
216
+ }
217
+ case "count": {
218
+ return await collection.countDocuments(json)
219
+ }
220
+ case "distinct": {
221
+ return await collection.distinct(json)
222
+ }
223
+ default: {
224
+ throw new Error(
225
+ `actionType ${query.extra.actionTypes} does not exist on DB for read`
226
+ )
214
227
  }
215
- return await collection.findOneAndUpdate(
216
- findAndUpdateJson.filter,
217
- findAndUpdateJson.update,
218
- findAndUpdateJson.options
219
- )
220
- }
221
- case "count": {
222
- return await collection.countDocuments(json)
223
- }
224
- case "distinct": {
225
- return await collection.distinct(json)
226
- }
227
- default: {
228
- throw new Error(
229
- `actionType ${query.extra.actionTypes} does not exist on DB for read`
230
- )
231
228
  }
229
+ } catch (err) {
230
+ console.error("Error querying mongodb", err)
231
+ throw err
232
+ } finally {
233
+ await this.client.close()
232
234
  }
233
- } catch (err) {
234
- console.error("Error querying mongodb", err)
235
- throw err
236
- } finally {
237
- await this.client.close()
238
235
  }
239
- }
240
-
241
- async update(query: MongoDBQuery) {
242
- try {
243
- await this.connect()
244
- const db = this.client.db(this.config.db)
245
- const collection = db.collection(query.extra.collection)
246
- let queryJson = query.json
247
- if (typeof queryJson === "string") {
248
- queryJson = this.parseQueryParams(queryJson, "update")
249
- }
250
- let json = this.createObjectIds(queryJson) as {
251
- filter: FilterQuery<any>
252
- update: UpdateQuery<any>
253
- options: object
254
- }
255
236
 
256
- switch (query.extra.actionTypes) {
257
- case "updateOne": {
258
- return await collection.updateOne(
259
- json.filter,
260
- json.update,
261
- json.options as UpdateOneOptions
262
- )
237
+ async update(query: { json: object; extra: { [key: string]: string } }) {
238
+ try {
239
+ await this.connect()
240
+ const db = this.client.db(this.config.db)
241
+ const collection = db.collection(query.extra.collection)
242
+ let queryJson = query.json
243
+ if (typeof queryJson === "string") {
244
+ queryJson = this.parseQueryParams(queryJson, "update")
263
245
  }
264
- case "updateMany": {
265
- return await collection.updateMany(
266
- json.filter,
267
- json.update,
268
- json.options as UpdateManyOptions
269
- )
246
+ let json = this.createObjectIds(queryJson) as {
247
+ filter: FilterQuery<any>
248
+ update: UpdateQuery<any>
249
+ options: object
270
250
  }
271
- default: {
272
- throw new Error(
273
- `actionType ${query.extra.actionTypes} does not exist on DB for update`
274
- )
251
+
252
+ switch (query.extra.actionTypes) {
253
+ case "updateOne": {
254
+ return await collection.updateOne(
255
+ json.filter,
256
+ json.update,
257
+ json.options as UpdateOneOptions
258
+ )
259
+ }
260
+ case "updateMany": {
261
+ return await collection.updateMany(
262
+ json.filter,
263
+ json.update,
264
+ json.options as UpdateManyOptions
265
+ )
266
+ }
267
+ default: {
268
+ throw new Error(
269
+ `actionType ${query.extra.actionTypes} does not exist on DB for update`
270
+ )
271
+ }
275
272
  }
273
+ } catch (err) {
274
+ console.error("Error writing to mongodb", err)
275
+ throw err
276
+ } finally {
277
+ await this.client.close()
276
278
  }
277
- } catch (err) {
278
- console.error("Error writing to mongodb", err)
279
- throw err
280
- } finally {
281
- await this.client.close()
282
279
  }
283
- }
284
280
 
285
- async delete(query: MongoDBQuery) {
286
- try {
287
- await this.connect()
288
- const db = this.client.db(this.config.db)
289
- const collection = db.collection(query.extra.collection)
290
- let queryJson = query.json
291
- if (typeof queryJson === "string") {
292
- queryJson = this.parseQueryParams(queryJson, "delete")
293
- }
294
- let json = this.createObjectIds(queryJson) as {
295
- filter: FilterQuery<any>
296
- options: CommonOptions
297
- }
298
- if (!json.options) {
299
- json = {
300
- filter: json,
301
- options: {},
281
+ async delete(query: { json: object; extra: { [key: string]: string } }) {
282
+ try {
283
+ await this.connect()
284
+ const db = this.client.db(this.config.db)
285
+ const collection = db.collection(query.extra.collection)
286
+ let queryJson = query.json
287
+ if (typeof queryJson === "string") {
288
+ queryJson = this.parseQueryParams(queryJson, "delete")
302
289
  }
303
- }
304
-
305
- switch (query.extra.actionTypes) {
306
- case "deleteOne": {
307
- return await collection.deleteOne(json.filter, json.options)
290
+ let json = this.createObjectIds(queryJson) as {
291
+ filter: FilterQuery<any>
292
+ options: CommonOptions
308
293
  }
309
- case "deleteMany": {
310
- return await collection.deleteMany(json.filter, json.options)
294
+ if (!json.options) {
295
+ json = {
296
+ filter: json,
297
+ options: {},
298
+ }
311
299
  }
312
- default: {
313
- throw new Error(
314
- `actionType ${query.extra.actionTypes} does not exist on DB for delete`
315
- )
300
+
301
+ switch (query.extra.actionTypes) {
302
+ case "deleteOne": {
303
+ return await collection.deleteOne(json.filter, json.options)
304
+ }
305
+ case "deleteMany": {
306
+ return await collection.deleteMany(json.filter, json.options)
307
+ }
308
+ default: {
309
+ throw new Error(
310
+ `actionType ${query.extra.actionTypes} does not exist on DB for delete`
311
+ )
312
+ }
316
313
  }
314
+ } catch (err) {
315
+ console.error("Error writing to mongodb", err)
316
+ throw err
317
+ } finally {
318
+ await this.client.close()
317
319
  }
318
- } catch (err) {
319
- console.error("Error writing to mongodb", err)
320
- throw err
321
- } finally {
322
- await this.client.close()
323
320
  }
324
321
  }
325
- }
326
322
 
327
- export default {
328
- schema: SCHEMA,
329
- integration: MongoIntegration,
323
+ module.exports = {
324
+ schema: SCHEMA,
325
+ integration: MongoIntegration,
326
+ }
330
327
  }