@budibase/server 2.2.12-alpha.6 → 2.2.12-alpha.61

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 (483) hide show
  1. package/__mocks__/node-fetch.ts +2 -0
  2. package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
  3. package/builder/assets/bg.c1563288.png +0 -0
  4. package/builder/assets/bulgaria.bd68393d.png +0 -0
  5. package/builder/assets/covanta.72c46c1e.png +0 -0
  6. package/builder/assets/index.9f16f5ff.js +1798 -0
  7. package/builder/assets/index.f87b8d33.css +6 -0
  8. package/builder/assets/schnellecke.cf1837a8.png +0 -0
  9. package/builder/index.html +3 -3
  10. package/coverage/clover.xml +5114 -4925
  11. package/coverage/coverage-final.json +268 -264
  12. package/coverage/lcov-report/index.html +202 -157
  13. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +6 -6
  14. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +5 -5
  15. package/coverage/lcov-report/src/api/controllers/application.ts.html +185 -164
  16. package/coverage/lcov-report/src/api/controllers/auth.ts.html +9 -9
  17. package/coverage/lcov-report/src/api/controllers/automation.ts.html +24 -24
  18. package/coverage/lcov-report/src/api/controllers/backup.ts.html +6 -6
  19. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +15 -15
  20. package/coverage/lcov-report/src/api/controllers/component.ts.html +5 -5
  21. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +112 -88
  22. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +14 -14
  23. package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
  24. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +80 -80
  25. package/coverage/lcov-report/src/api/controllers/dev.ts.html +17 -17
  26. package/coverage/lcov-report/src/api/controllers/index.html +36 -36
  27. package/coverage/lcov-report/src/api/controllers/integration.ts.html +4 -4
  28. package/coverage/lcov-report/src/api/controllers/layout.ts.html +6 -6
  29. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +9 -9
  30. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +4 -4
  31. package/coverage/lcov-report/src/api/controllers/permission.ts.html +13 -13
  32. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +2 -2
  33. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +4 -4
  34. package/coverage/lcov-report/src/api/controllers/plugin/index.html +19 -19
  35. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +29 -29
  36. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +5 -5
  37. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +5 -5
  38. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +3 -3
  39. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +3 -3
  40. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +6 -6
  41. package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +2 -2
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +7 -7
  45. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +2 -2
  46. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +2 -2
  47. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +2 -2
  48. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +2 -2
  49. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +4 -4
  50. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +5 -5
  51. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +4 -4
  52. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +6 -6
  53. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +4 -4
  54. package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
  55. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +7 -7
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +3 -3
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +5 -5
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +7 -7
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +9 -9
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +13 -13
  63. package/coverage/lcov-report/src/api/controllers/query/index.html +7 -7
  64. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +89 -65
  65. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
  66. package/coverage/lcov-report/src/api/controllers/role.ts.html +8 -8
  67. package/coverage/lcov-report/src/api/controllers/routing.ts.html +6 -6
  68. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +36 -18
  69. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +60 -30
  70. package/coverage/lcov-report/src/api/controllers/row/index.html +40 -40
  71. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +34 -34
  72. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +142 -70
  73. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +120 -120
  74. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +22 -22
  75. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +152 -38
  76. package/coverage/lcov-report/src/api/controllers/screen.ts.html +7 -7
  77. package/coverage/lcov-report/src/api/controllers/script.ts.html +2 -2
  78. package/coverage/lcov-report/src/api/controllers/static/index.html +1 -1
  79. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +39 -42
  80. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +52 -52
  81. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +43 -37
  82. package/coverage/lcov-report/src/api/controllers/table/index.html +34 -34
  83. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +155 -68
  84. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +47 -47
  85. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +66 -69
  86. package/coverage/lcov-report/src/api/controllers/templates.ts.html +7 -7
  87. package/coverage/lcov-report/src/api/controllers/user.ts.html +99 -75
  88. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +62 -17
  89. package/coverage/lcov-report/src/api/controllers/view/index.html +29 -29
  90. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +53 -92
  91. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +5 -5
  92. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +6 -6
  93. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +69 -63
  94. package/coverage/lcov-report/src/api/index.html +1 -1
  95. package/coverage/lcov-report/src/api/index.ts.html +27 -27
  96. package/coverage/lcov-report/src/api/routes/analytics.ts.html +7 -7
  97. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +8 -8
  98. package/coverage/lcov-report/src/api/routes/application.ts.html +10 -10
  99. package/coverage/lcov-report/src/api/routes/auth.ts.html +6 -6
  100. package/coverage/lcov-report/src/api/routes/automation.ts.html +11 -11
  101. package/coverage/lcov-report/src/api/routes/backup.ts.html +8 -8
  102. package/coverage/lcov-report/src/api/routes/cloud.ts.html +8 -8
  103. package/coverage/lcov-report/src/api/routes/component.ts.html +8 -8
  104. package/coverage/lcov-report/src/api/routes/datasource.ts.html +9 -9
  105. package/coverage/lcov-report/src/api/routes/deploy.ts.html +8 -8
  106. package/coverage/lcov-report/src/api/routes/dev.ts.html +13 -13
  107. package/coverage/lcov-report/src/api/routes/index.html +5 -5
  108. package/coverage/lcov-report/src/api/routes/index.ts.html +42 -36
  109. package/coverage/lcov-report/src/api/routes/integration.ts.html +8 -8
  110. package/coverage/lcov-report/src/api/routes/layout.ts.html +8 -8
  111. package/coverage/lcov-report/src/api/routes/metadata.ts.html +9 -9
  112. package/coverage/lcov-report/src/api/routes/migrations.ts.html +7 -7
  113. package/coverage/lcov-report/src/api/routes/permission.ts.html +9 -9
  114. package/coverage/lcov-report/src/api/routes/plugin.ts.html +8 -8
  115. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +14 -14
  116. package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
  117. package/coverage/lcov-report/src/api/routes/public/index.ts.html +52 -52
  118. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +1 -1
  119. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +4 -4
  120. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +9 -9
  121. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +12 -12
  122. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +12 -12
  123. package/coverage/lcov-report/src/api/routes/public/tests/index.html +1 -1
  124. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +1 -1
  125. package/coverage/lcov-report/src/api/routes/public/users.ts.html +12 -12
  126. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +19 -19
  127. package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
  128. package/coverage/lcov-report/src/api/routes/query.ts.html +11 -11
  129. package/coverage/lcov-report/src/api/routes/role.ts.html +9 -9
  130. package/coverage/lcov-report/src/api/routes/routing.ts.html +8 -8
  131. package/coverage/lcov-report/src/api/routes/row.ts.html +12 -12
  132. package/coverage/lcov-report/src/api/routes/screen.ts.html +9 -9
  133. package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
  134. package/coverage/lcov-report/src/api/routes/static.ts.html +14 -14
  135. package/coverage/lcov-report/src/api/routes/table.ts.html +26 -95
  136. package/coverage/lcov-report/src/api/routes/templates.ts.html +8 -8
  137. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +1 -1
  138. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +1 -1
  139. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +1 -1
  140. package/coverage/lcov-report/src/api/routes/user.ts.html +9 -9
  141. package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
  142. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +43 -43
  143. package/coverage/lcov-report/src/api/routes/view.ts.html +10 -10
  144. package/coverage/lcov-report/src/api/routes/webhook.ts.html +10 -10
  145. package/coverage/lcov-report/src/app.ts.html +13 -7
  146. package/coverage/lcov-report/src/automations/actions.ts.html +27 -27
  147. package/coverage/lcov-report/src/automations/automationUtils.ts.html +59 -59
  148. package/coverage/lcov-report/src/automations/bullboard.ts.html +9 -9
  149. package/coverage/lcov-report/src/automations/index.html +30 -30
  150. package/coverage/lcov-report/src/automations/index.ts.html +10 -10
  151. package/coverage/lcov-report/src/automations/logging/index.html +1 -1
  152. package/coverage/lcov-report/src/automations/logging/index.ts.html +7 -7
  153. package/coverage/lcov-report/src/automations/steps/bash.ts.html +8 -8
  154. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +7 -7
  155. package/coverage/lcov-report/src/automations/steps/delay.ts.html +5 -5
  156. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +7 -7
  157. package/coverage/lcov-report/src/automations/steps/discord.ts.html +8 -8
  158. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +7 -7
  159. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +7 -7
  160. package/coverage/lcov-report/src/automations/steps/filter.ts.html +6 -6
  161. package/coverage/lcov-report/src/automations/steps/index.html +15 -15
  162. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +6 -6
  163. package/coverage/lcov-report/src/automations/steps/loop.ts.html +3 -3
  164. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +9 -9
  165. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +38 -38
  166. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +6 -6
  167. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +7 -7
  168. package/coverage/lcov-report/src/automations/steps/slack.ts.html +6 -6
  169. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +7 -7
  170. package/coverage/lcov-report/src/automations/steps/utils.ts.html +10 -10
  171. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +6 -6
  172. package/coverage/lcov-report/src/automations/tests/utilities/index.html +1 -1
  173. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +13 -13
  174. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +3 -3
  175. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +3 -3
  176. package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
  177. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +8 -8
  178. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +3 -3
  179. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +3 -3
  180. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +3 -3
  181. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +3 -3
  182. package/coverage/lcov-report/src/automations/triggers.ts.html +52 -37
  183. package/coverage/lcov-report/src/automations/utils.ts.html +52 -52
  184. package/coverage/lcov-report/src/constants/index.html +1 -1
  185. package/coverage/lcov-report/src/constants/index.ts.html +2 -2
  186. package/coverage/lcov-report/src/constants/layouts.ts.html +4 -4
  187. package/coverage/lcov-report/src/constants/screens.ts.html +3 -3
  188. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +22 -22
  189. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +2 -2
  190. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +2 -2
  191. package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
  192. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +2 -2
  193. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +2 -2
  194. package/coverage/lcov-report/src/db/dynamoClient.ts.html +15 -15
  195. package/coverage/lcov-report/src/db/inMemoryView.ts.html +4 -4
  196. package/coverage/lcov-report/src/db/index.html +1 -1
  197. package/coverage/lcov-report/src/db/index.ts.html +9 -9
  198. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +18 -18
  199. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +4 -4
  200. package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
  201. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +27 -27
  202. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +13 -13
  203. package/coverage/lcov-report/src/db/newid.ts.html +4 -4
  204. package/coverage/lcov-report/src/db/utils.ts.html +40 -40
  205. package/coverage/lcov-report/src/definitions/automations.ts.html +6 -3
  206. package/coverage/lcov-report/src/definitions/index.html +5 -20
  207. package/coverage/lcov-report/src/environment.ts.html +10 -10
  208. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +8 -8
  209. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +5 -5
  210. package/coverage/lcov-report/src/events/index.html +1 -1
  211. package/coverage/lcov-report/src/events/index.ts.html +4 -4
  212. package/coverage/lcov-report/src/events/utils.ts.html +1 -1
  213. package/coverage/lcov-report/src/index.html +13 -13
  214. package/coverage/lcov-report/src/index.ts.html +5 -5
  215. package/coverage/lcov-report/src/integrations/airtable.ts.html +5 -5
  216. package/coverage/lcov-report/src/integrations/arangodb.ts.html +5 -5
  217. package/coverage/lcov-report/src/integrations/base/index.html +11 -11
  218. package/coverage/lcov-report/src/integrations/base/query.ts.html +14 -8
  219. package/coverage/lcov-report/src/integrations/base/sql.ts.html +12 -12
  220. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +8 -8
  221. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  222. package/coverage/lcov-report/src/integrations/couchdb.ts.html +113 -32
  223. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +9 -9
  224. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +26 -14
  225. package/coverage/lcov-report/src/integrations/firebase.ts.html +5 -5
  226. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +11 -11
  227. package/coverage/lcov-report/src/integrations/index.html +47 -47
  228. package/coverage/lcov-report/src/integrations/index.ts.html +49 -49
  229. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +8 -8
  230. package/coverage/lcov-report/src/integrations/mongodb.ts.html +417 -285
  231. package/coverage/lcov-report/src/integrations/mysql.ts.html +11 -11
  232. package/coverage/lcov-report/src/integrations/oracle.ts.html +13 -13
  233. package/coverage/lcov-report/src/integrations/postgres.ts.html +10 -10
  234. package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
  235. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +15 -150
  236. package/coverage/lcov-report/src/integrations/redis.ts.html +5 -5
  237. package/coverage/lcov-report/src/integrations/rest.ts.html +36 -45
  238. package/coverage/lcov-report/src/integrations/s3.ts.html +6 -6
  239. package/coverage/lcov-report/src/integrations/snowflake.ts.html +5 -5
  240. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  241. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  242. package/coverage/lcov-report/src/integrations/utils.ts.html +18 -18
  243. package/coverage/lcov-report/src/middleware/appInfo.ts.html +5 -5
  244. package/coverage/lcov-report/src/middleware/authorized.ts.html +27 -27
  245. package/coverage/lcov-report/src/middleware/builder.ts.html +17 -17
  246. package/coverage/lcov-report/src/middleware/currentapp.ts.html +45 -42
  247. package/coverage/lcov-report/src/middleware/index.html +1 -1
  248. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
  249. package/coverage/lcov-report/src/middleware/publicApi.ts.html +4 -4
  250. package/coverage/lcov-report/src/middleware/resourceId.ts.html +21 -21
  251. package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
  252. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  253. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +4 -4
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +5 -5
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +5 -5
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +5 -5
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +7 -7
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +5 -5
  260. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +5 -5
  261. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +4 -4
  262. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +19 -19
  263. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +6 -6
  264. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
  265. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +7 -7
  266. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +6 -6
  267. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +15 -15
  268. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
  269. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +5 -5
  270. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +8 -8
  271. package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
  272. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +6 -6
  273. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +6 -6
  274. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
  275. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +2 -2
  276. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +5 -5
  277. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +4 -4
  278. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +6 -6
  279. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +3 -3
  280. package/coverage/lcov-report/src/migrations/index.html +1 -1
  281. package/coverage/lcov-report/src/migrations/index.ts.html +32 -32
  282. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
  283. package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
  284. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
  285. package/coverage/lcov-report/src/sdk/app/applications/index.html +1 -1
  286. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +4 -4
  287. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +22 -22
  288. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +9 -9
  289. package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
  290. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +3 -3
  291. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +3 -3
  292. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +3 -3
  293. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +17 -17
  294. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +18 -18
  295. package/coverage/lcov-report/src/sdk/app/backups/index.html +1 -1
  296. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +5 -5
  297. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +7 -7
  298. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +493 -0
  299. package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
  300. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
  301. package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
  302. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +100 -0
  303. package/coverage/lcov-report/src/{definitions/datasource.ts.html → sdk/app/queries/queries.ts.html} +82 -82
  304. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +6 -6
  305. package/coverage/lcov-report/src/sdk/app/rows/index.html +1 -1
  306. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +4 -4
  307. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  308. package/coverage/lcov-report/src/sdk/app/tables/index.html +11 -11
  309. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +27 -18
  310. package/coverage/lcov-report/src/sdk/index.html +5 -5
  311. package/coverage/lcov-report/src/sdk/index.ts.html +23 -11
  312. package/coverage/lcov-report/src/sdk/users/index.html +1 -1
  313. package/coverage/lcov-report/src/sdk/users/index.ts.html +3 -3
  314. package/coverage/lcov-report/src/sdk/users/utils.ts.html +28 -28
  315. package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
  316. package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
  317. package/coverage/lcov-report/src/startup.ts.html +34 -34
  318. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +134 -125
  319. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +15 -15
  320. package/coverage/lcov-report/src/tests/utilities/index.html +21 -21
  321. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  322. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +213 -24
  323. package/coverage/lcov-report/src/threads/automation.ts.html +216 -186
  324. package/coverage/lcov-report/src/threads/index.html +30 -30
  325. package/coverage/lcov-report/src/threads/index.ts.html +24 -24
  326. package/coverage/lcov-report/src/threads/query.ts.html +68 -29
  327. package/coverage/lcov-report/src/threads/utils.ts.html +9 -9
  328. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +2 -2
  329. package/coverage/lcov-report/src/utilities/centralPath.ts.html +11 -11
  330. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +9 -9
  331. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +1 -1
  332. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +28 -22
  333. package/coverage/lcov-report/src/utilities/fileSystem/index.html +21 -21
  334. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +1 -1
  335. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +5 -8
  336. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  337. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +3 -3
  338. package/coverage/lcov-report/src/utilities/global.ts.html +40 -40
  339. package/coverage/lcov-report/src/utilities/index.html +39 -39
  340. package/coverage/lcov-report/src/utilities/index.ts.html +12 -12
  341. package/coverage/lcov-report/src/utilities/redis.ts.html +12 -12
  342. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  343. package/coverage/lcov-report/src/utilities/routing/index.ts.html +4 -4
  344. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +1 -1
  345. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +50 -50
  346. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +3 -3
  347. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +14 -14
  348. package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +173 -233
  349. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +5 -5
  350. package/coverage/lcov-report/src/utilities/security.ts.html +4 -4
  351. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  352. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +4 -4
  353. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  354. package/coverage/lcov-report/src/utilities/users.ts.html +4 -4
  355. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +38 -11
  356. package/coverage/lcov-report/src/watch.ts.html +7 -7
  357. package/coverage/lcov-report/src/websocket.ts.html +3 -3
  358. package/coverage/lcov.info +7899 -7539
  359. package/dist/api/controllers/application.js +73 -74
  360. package/dist/api/controllers/cloud.js +1 -1
  361. package/dist/api/controllers/datasource.js +24 -15
  362. package/dist/api/controllers/query/index.js +18 -11
  363. package/dist/api/controllers/row/ExternalRequest.js +12 -3
  364. package/dist/api/controllers/row/external.js +20 -13
  365. package/dist/api/controllers/row/internal.js +40 -15
  366. package/dist/api/controllers/row/utils.js +35 -3
  367. package/dist/api/controllers/static/index.js +38 -38
  368. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  369. package/dist/api/controllers/table/external.js +16 -35
  370. package/dist/api/controllers/table/index.js +44 -15
  371. package/dist/api/controllers/table/internal.js +4 -4
  372. package/dist/api/controllers/table/utils.js +9 -9
  373. package/dist/api/controllers/user.js +14 -6
  374. package/dist/api/controllers/view/exporters.js +22 -6
  375. package/dist/api/controllers/view/index.js +20 -56
  376. package/dist/api/controllers/webhook.js +45 -43
  377. package/dist/api/routes/index.js +2 -0
  378. package/dist/api/routes/row.js +2 -2
  379. package/dist/api/routes/table.js +6 -37
  380. package/dist/api/routes/utils/validators.js +1 -1
  381. package/dist/app.js +1 -0
  382. package/dist/automations/triggers.js +1 -0
  383. package/dist/definitions/datasource.js +0 -6
  384. package/dist/index.js +2 -2
  385. package/dist/integrations/base/query.js +7 -2
  386. package/dist/integrations/base/sqlTable.js +14 -14
  387. package/dist/integrations/couchdb.js +34 -8
  388. package/dist/integrations/dynamodb.js +8 -5
  389. package/dist/integrations/elasticsearch.js +7 -3
  390. package/dist/integrations/index.js +5 -5
  391. package/dist/integrations/mongodb.js +311 -271
  392. package/dist/integrations/mysql.js +2 -2
  393. package/dist/integrations/queries/sql.js +73 -100
  394. package/dist/integrations/rest.js +16 -18
  395. package/dist/middleware/currentapp.js +4 -2
  396. package/dist/package.json +7 -7
  397. package/dist/sdk/app/datasources/datasources.js +147 -0
  398. package/dist/sdk/app/datasources/index.js +27 -0
  399. package/dist/sdk/app/queries/index.js +27 -0
  400. package/dist/sdk/app/queries/queries.js +60 -0
  401. package/dist/sdk/app/tables/index.js +6 -2
  402. package/dist/sdk/index.js +4 -0
  403. package/dist/sdk/utils/index.js +29 -0
  404. package/dist/threads/automation.js +18 -7
  405. package/dist/threads/query.js +27 -13
  406. package/dist/tsconfig.build.tsbuildinfo +1 -1
  407. package/dist/utilities/fileSystem/filesystem.js +36 -34
  408. package/dist/utilities/fileSystem/plugin.js +17 -14
  409. package/dist/utilities/fileSystem/template.js +7 -4
  410. package/dist/utilities/schema.js +108 -0
  411. package/dist/utilities/workerRequests.js +2 -0
  412. package/package.json +8 -8
  413. package/scripts/dev/manage.js +1 -0
  414. package/src/api/controllers/application.ts +81 -74
  415. package/src/api/controllers/cloud.ts +1 -1
  416. package/src/api/controllers/datasource.ts +33 -25
  417. package/src/api/controllers/query/index.ts +47 -39
  418. package/src/api/controllers/row/ExternalRequest.ts +8 -2
  419. package/src/api/controllers/row/external.ts +24 -14
  420. package/src/api/controllers/row/internal.ts +42 -18
  421. package/src/api/controllers/row/utils.ts +40 -2
  422. package/src/api/controllers/static/index.ts +17 -18
  423. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  424. package/src/api/controllers/table/external.ts +18 -16
  425. package/src/api/controllers/table/index.ts +46 -17
  426. package/src/api/controllers/table/internal.ts +4 -4
  427. package/src/api/controllers/table/utils.ts +12 -13
  428. package/src/api/controllers/user.ts +21 -13
  429. package/src/api/controllers/view/exporters.ts +20 -5
  430. package/src/api/controllers/view/index.ts +22 -35
  431. package/src/api/controllers/webhook.ts +48 -46
  432. package/src/api/routes/index.ts +2 -0
  433. package/src/api/routes/row.ts +1 -1
  434. package/src/api/routes/table.ts +15 -38
  435. package/src/api/routes/tests/datasource.spec.ts +35 -1
  436. package/src/api/routes/tests/misc.spec.js +4 -10
  437. package/src/api/routes/tests/table.spec.js +8 -30
  438. package/src/api/routes/tests/user.spec.js +20 -1
  439. package/src/api/routes/utils/validators.ts +1 -1
  440. package/src/app.ts +3 -1
  441. package/src/automations/tests/loop.spec.ts +45 -0
  442. package/src/automations/triggers.ts +6 -1
  443. package/src/definitions/automations.ts +1 -0
  444. package/src/definitions/datasource.ts +0 -41
  445. package/src/index.ts +1 -1
  446. package/src/integrations/base/query.ts +3 -1
  447. package/src/integrations/base/sqlTable.ts +1 -1
  448. package/src/integrations/couchdb.ts +41 -14
  449. package/src/integrations/dynamodb.ts +3 -3
  450. package/src/integrations/elasticsearch.ts +8 -4
  451. package/src/integrations/index.ts +4 -4
  452. package/src/integrations/mongodb.ts +315 -271
  453. package/src/integrations/mysql.ts +1 -1
  454. package/src/integrations/queries/sql.ts +5 -50
  455. package/src/integrations/rest.ts +16 -19
  456. package/src/integrations/tests/couchdb.spec.ts +33 -21
  457. package/src/integrations/tests/rest.spec.ts +4 -2
  458. package/src/middleware/currentapp.ts +3 -2
  459. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
  460. package/src/sdk/app/datasources/datasources.ts +136 -0
  461. package/src/sdk/app/datasources/index.ts +5 -0
  462. package/src/sdk/app/queries/index.ts +5 -0
  463. package/src/sdk/app/queries/queries.ts +50 -0
  464. package/src/sdk/app/tables/index.ts +6 -3
  465. package/src/sdk/index.ts +4 -0
  466. package/src/sdk/utils/index.ts +16 -0
  467. package/src/tests/utilities/TestConfiguration.ts +15 -12
  468. package/src/tests/utilities/structures.ts +65 -2
  469. package/src/threads/automation.ts +18 -8
  470. package/src/threads/definitions.ts +3 -0
  471. package/src/threads/query.ts +28 -15
  472. package/src/utilities/fileSystem/filesystem.ts +6 -4
  473. package/src/utilities/fileSystem/plugin.ts +3 -4
  474. package/src/utilities/fileSystem/template.ts +2 -2
  475. package/src/utilities/schema.ts +141 -0
  476. package/src/utilities/workerRequests.ts +10 -1
  477. package/tsconfig.json +2 -1
  478. package/builder/assets/index.0b010a07.js +0 -1023
  479. package/builder/assets/index.fa480d5b.css +0 -6
  480. package/dist/utilities/csvParser.js +0 -152
  481. package/src/utilities/csvParser.ts +0 -161
  482. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  483. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -10,9 +10,9 @@ import {
10
10
  } from "./utils"
11
11
  import { FieldTypes, RelationshipTypes } from "../../../constants"
12
12
  import { makeExternalQuery } from "../../../integrations/base/query"
13
- import * as csvParser from "../../../utilities/csvParser"
14
13
  import { handleRequest } from "../row/external"
15
14
  import { events, context } from "@budibase/backend-core"
15
+ import { parse, isRows, isSchema } from "../../../utilities/schema"
16
16
  import {
17
17
  Datasource,
18
18
  Table,
@@ -197,7 +197,7 @@ export async function save(ctx: BBContext) {
197
197
  const table: TableRequest = ctx.request.body
198
198
  const renamed = table?._rename
199
199
  // can't do this right now
200
- delete table.dataImport
200
+ delete table.rows
201
201
  const datasourceId = getDatasourceId(ctx.request.body)!
202
202
  // table doesn't exist already, note that it is created
203
203
  if (!table._id) {
@@ -219,7 +219,7 @@ export async function save(ctx: BBContext) {
219
219
  }
220
220
 
221
221
  const db = context.getAppDB()
222
- const datasource = await db.get(datasourceId)
222
+ const datasource = await sdk.datasources.get(datasourceId)
223
223
  if (!datasource.entities) {
224
224
  datasource.entities = {}
225
225
  }
@@ -322,15 +322,17 @@ export async function destroy(ctx: BBContext) {
322
322
  const datasourceId = getDatasourceId(tableToDelete)
323
323
 
324
324
  const db = context.getAppDB()
325
- const datasource = await db.get(datasourceId)
325
+ const datasource = await sdk.datasources.get(datasourceId!)
326
326
  const tables = datasource.entities
327
327
 
328
328
  const operation = Operation.DELETE_TABLE
329
- await makeTableRequest(datasource, operation, tableToDelete, tables)
330
-
331
- cleanupRelationships(tableToDelete, tables)
329
+ if (tables) {
330
+ await makeTableRequest(datasource, operation, tableToDelete, tables)
331
+ cleanupRelationships(tableToDelete, tables)
332
+ delete tables[tableToDelete.name]
333
+ datasource.entities = tables
334
+ }
332
335
 
333
- delete datasource.entities[tableToDelete.name]
334
336
  await db.put(datasource)
335
337
 
336
338
  return tableToDelete
@@ -338,17 +340,17 @@ export async function destroy(ctx: BBContext) {
338
340
 
339
341
  export async function bulkImport(ctx: BBContext) {
340
342
  const table = await sdk.tables.getTable(ctx.params.tableId)
341
- const { dataImport } = ctx.request.body
342
- if (!dataImport || !dataImport.schema || !dataImport.csvString) {
343
+ const { rows }: { rows: unknown } = ctx.request.body
344
+ const schema: unknown = table.schema
345
+
346
+ if (!rows || !isRows(rows) || !isSchema(schema)) {
343
347
  ctx.throw(400, "Provided data import information is invalid.")
344
348
  }
345
- const rows = await csvParser.transform({
346
- ...dataImport,
347
- existingTable: table,
348
- })
349
+
350
+ const parsedRows = await parse(rows, schema)
349
351
  await handleRequest(Operation.BULK_CREATE, table._id!, {
350
- rows,
352
+ rows: parsedRows,
351
353
  })
352
- await events.rows.imported(table, "csv", rows.length)
354
+ await events.rows.imported(table, parsedRows.length)
353
355
  return table
354
356
  }
@@ -1,11 +1,16 @@
1
1
  import * as internal from "./internal"
2
2
  import * as external from "./external"
3
- import * as csvParser from "../../../utilities/csvParser"
3
+ import {
4
+ validate as validateSchema,
5
+ isSchema,
6
+ isRows,
7
+ } from "../../../utilities/schema"
4
8
  import { isExternalTable, isSQL } from "../../../integrations/utils"
5
9
  import { getDatasourceParams } from "../../../db/utils"
6
10
  import { context, events } from "@budibase/backend-core"
7
11
  import { Table, BBContext } from "@budibase/types"
8
12
  import sdk from "../../../sdk"
13
+ import csv from "csvtojson"
9
14
 
10
15
  function pickApi({ tableId, table }: { tableId?: string; table?: Table }) {
11
16
  if (table && !tableId) {
@@ -56,16 +61,16 @@ export async function find(ctx: BBContext) {
56
61
  export async function save(ctx: BBContext) {
57
62
  const appId = ctx.appId
58
63
  const table = ctx.request.body
59
- const importFormat =
60
- table.dataImport && table.dataImport.csvString ? "csv" : undefined
64
+ const isImport = table.rows
65
+
61
66
  const savedTable = await pickApi({ table }).save(ctx)
62
67
  if (!table._id) {
63
68
  await events.table.created(savedTable)
64
69
  } else {
65
70
  await events.table.updated(savedTable)
66
71
  }
67
- if (importFormat) {
68
- await events.table.imported(savedTable, importFormat)
72
+ if (isImport) {
73
+ await events.table.imported(savedTable)
69
74
  }
70
75
  ctx.status = 200
71
76
  ctx.message = `Table ${table.name} saved successfully.`
@@ -96,19 +101,43 @@ export async function bulkImport(ctx: BBContext) {
96
101
  ctx.body = { message: `Bulk rows created.` }
97
102
  }
98
103
 
99
- export async function validateCSVSchema(ctx: BBContext) {
100
- // tableId being specified means its an import to an existing table
101
- const { csvString, schema = {}, tableId } = ctx.request.body
102
- let existingTable
104
+ export async function csvToJson(ctx: BBContext) {
105
+ const { csvString } = ctx.request.body
106
+
107
+ const result = await csv().fromString(csvString)
108
+
109
+ ctx.status = 200
110
+ ctx.body = result
111
+ }
112
+
113
+ export async function validateNewTableImport(ctx: BBContext) {
114
+ const { rows, schema }: { rows: unknown; schema: unknown } = ctx.request.body
115
+
116
+ if (isRows(rows) && isSchema(schema)) {
117
+ ctx.status = 200
118
+ ctx.body = validateSchema(rows, schema)
119
+ } else {
120
+ ctx.status = 422
121
+ }
122
+ }
123
+
124
+ export async function validateExistingTableImport(ctx: BBContext) {
125
+ const { rows, tableId }: { rows: unknown; tableId: unknown } =
126
+ ctx.request.body
127
+
128
+ let schema = null
103
129
  if (tableId) {
104
- existingTable = await sdk.tables.getTable(tableId)
130
+ const table = await sdk.tables.getTable(tableId)
131
+ schema = table.schema
132
+ } else {
133
+ ctx.status = 422
134
+ return
105
135
  }
106
- let result: Record<string, any> | undefined = await csvParser.parse(
107
- csvString,
108
- schema
109
- )
110
- if (existingTable) {
111
- result = csvParser.updateSchema({ schema: result, existingTable })
136
+
137
+ if (tableId && isRows(rows) && isSchema(schema)) {
138
+ ctx.status = 200
139
+ ctx.body = validateSchema(rows, schema)
140
+ } else {
141
+ ctx.status = 422
112
142
  }
113
- ctx.body = { schema: result }
114
143
  }
@@ -35,7 +35,7 @@ function checkAutoColumns(table: Table, oldTable: Table) {
35
35
 
36
36
  export async function save(ctx: any) {
37
37
  const db = context.getAppDB()
38
- const { dataImport, ...rest } = ctx.request.body
38
+ const { rows, ...rest } = ctx.request.body
39
39
  let tableToSave = {
40
40
  type: "table",
41
41
  _id: generateTableID(),
@@ -61,7 +61,7 @@ export async function save(ctx: any) {
61
61
  const tableSaveFunctions = new TableSaveFunctions({
62
62
  user: ctx.user,
63
63
  oldTable,
64
- dataImport,
64
+ importRows: rows,
65
65
  })
66
66
  tableToSave = await tableSaveFunctions.before(tableToSave)
67
67
 
@@ -185,7 +185,7 @@ export async function destroy(ctx: any) {
185
185
 
186
186
  export async function bulkImport(ctx: any) {
187
187
  const table = await sdk.tables.getTable(ctx.params.tableId)
188
- const { dataImport } = ctx.request.body
189
- await handleDataImport(ctx.user, table, dataImport)
188
+ const { rows } = ctx.request.body
189
+ await handleDataImport(ctx.user, table, rows)
190
190
  return table
191
191
  }
@@ -1,4 +1,4 @@
1
- import { transform } from "../../../utilities/csvParser"
1
+ import { parse, isSchema, isRows } from "../../../utilities/schema"
2
2
  import { getRowParams, generateRowID, InternalTables } from "../../../db/utils"
3
3
  import { isEqual } from "lodash"
4
4
  import { AutoFieldSubTypes, FieldTypes } from "../../../constants"
@@ -128,24 +128,23 @@ export function importToRows(data: any, table: any, user: any = {}) {
128
128
  return finalData
129
129
  }
130
130
 
131
- export async function handleDataImport(user: any, table: any, dataImport: any) {
132
- if (!dataImport || !dataImport.csvString) {
131
+ export async function handleDataImport(user: any, table: any, rows: any) {
132
+ const schema: unknown = table.schema
133
+
134
+ if (!rows || !isRows(rows) || !isSchema(schema)) {
133
135
  return table
134
136
  }
135
137
 
136
138
  const db = context.getAppDB()
137
- // Populate the table with rows imported from CSV in a bulk update
138
- const data = await transform({
139
- ...dataImport,
140
- existingTable: table,
141
- })
139
+ const data = parse(rows, schema)
142
140
 
143
141
  let finalData: any = importToRows(data, table, user)
144
142
 
145
143
  await quotas.addRows(finalData.length, () => db.bulkDocs(finalData), {
146
144
  tableId: table._id,
147
145
  })
148
- await events.rows.imported(table, "csv", finalData.length)
146
+
147
+ await events.rows.imported(table, finalData.length)
149
148
  return table
150
149
  }
151
150
 
@@ -210,14 +209,14 @@ class TableSaveFunctions {
210
209
  db: any
211
210
  user: any
212
211
  oldTable: any
213
- dataImport: any
212
+ importRows: any
214
213
  rows: any
215
214
 
216
- constructor({ user, oldTable, dataImport }: any) {
215
+ constructor({ user, oldTable, importRows }: any) {
217
216
  this.db = context.getAppDB()
218
217
  this.user = user
219
218
  this.oldTable = oldTable
220
- this.dataImport = dataImport
219
+ this.importRows = importRows
221
220
  // any rows that need updated
222
221
  this.rows = []
223
222
  }
@@ -241,7 +240,7 @@ class TableSaveFunctions {
241
240
  // after saving
242
241
  async after(table: any) {
243
242
  table = await handleSearchIndexes(table)
244
- table = await handleDataImport(this.user, table, this.dataImport)
243
+ table = await handleDataImport(this.user, table, this.importRows)
245
244
  return table
246
245
  }
247
246
 
@@ -4,19 +4,21 @@ import { getGlobalUsers, getRawGlobalUser } from "../../utilities/global"
4
4
  import { getFullUser } from "../../utilities/users"
5
5
  import {
6
6
  context,
7
- constants,
8
7
  roles as rolesCore,
9
8
  db as dbCore,
10
9
  } from "@budibase/backend-core"
11
- import { BBContext, User } from "@budibase/types"
10
+ import { BBContext, Ctx, SyncUserRequest, User } from "@budibase/types"
12
11
  import sdk from "../../sdk"
13
12
 
14
- export async function syncUser(ctx: BBContext) {
13
+ export async function syncUser(ctx: Ctx<SyncUserRequest>) {
15
14
  let deleting = false,
16
15
  user: User | any
17
16
  const userId = ctx.params.id
17
+
18
+ const previousUser = ctx.request.body?.previousUser
19
+
18
20
  try {
19
- user = await getRawGlobalUser(userId)
21
+ user = (await getRawGlobalUser(userId)) as User
20
22
  } catch (err: any) {
21
23
  if (err && err.status === 404) {
22
24
  user = {}
@@ -25,6 +27,11 @@ export async function syncUser(ctx: BBContext) {
25
27
  throw err
26
28
  }
27
29
  }
30
+
31
+ let previousApps = previousUser
32
+ ? Object.keys(previousUser.roles).map(appId => appId)
33
+ : []
34
+
28
35
  const roles = deleting ? {} : user.roles
29
36
  // remove props which aren't useful to metadata
30
37
  delete user.password
@@ -40,8 +47,9 @@ export async function syncUser(ctx: BBContext) {
40
47
  .filter(entry => entry[1] !== rolesCore.BUILTIN_ROLE_IDS.PUBLIC)
41
48
  .map(([appId]) => appId)
42
49
  }
43
- for (let prodAppId of prodAppIds) {
50
+ for (let prodAppId of new Set([...prodAppIds, ...previousApps])) {
44
51
  const roleId = roles[prodAppId]
52
+ const deleteFromApp = !roleId
45
53
  const devAppId = dbCore.getDevelopmentAppID(prodAppId)
46
54
  for (let appId of [prodAppId, devAppId]) {
47
55
  if (!(await dbCore.dbExists(appId))) {
@@ -54,24 +62,24 @@ export async function syncUser(ctx: BBContext) {
54
62
  try {
55
63
  metadata = await db.get(metadataId)
56
64
  } catch (err) {
57
- if (deleting) {
65
+ if (deleteFromApp) {
58
66
  return
59
67
  }
60
68
  metadata = {
61
69
  tableId: InternalTables.USER_METADATA,
62
70
  }
63
71
  }
72
+
73
+ if (deleteFromApp) {
74
+ await db.remove(metadata)
75
+ return
76
+ }
77
+
64
78
  // assign the roleId for the metadata doc
65
79
  if (roleId) {
66
80
  metadata.roleId = roleId
67
81
  }
68
- let combined = !deleting
69
- ? sdk.users.combineMetadataAndUser(user, metadata)
70
- : {
71
- ...metadata,
72
- status: constants.UserStatus.INACTIVE,
73
- metadata: rolesCore.BUILTIN_ROLE_IDS.PUBLIC,
74
- }
82
+ let combined = sdk.users.combineMetadataAndUser(user, metadata)
75
83
  // if its null then there was no updates required
76
84
  if (combined) {
77
85
  await db.put(combined)
@@ -1,4 +1,4 @@
1
- import { Row } from "@budibase/types"
1
+ import { Row, TableSchema } from "@budibase/types"
2
2
 
3
3
  export function csv(headers: string[], rows: Row[]) {
4
4
  let csv = headers.map(key => `"${key}"`).join(",")
@@ -18,11 +18,26 @@ export function csv(headers: string[], rows: Row[]) {
18
18
  return csv
19
19
  }
20
20
 
21
- export function json(headers: string[], rows: Row[]) {
21
+ export function json(rows: Row[]) {
22
22
  return JSON.stringify(rows, undefined, 2)
23
23
  }
24
24
 
25
- export const ExportFormats = {
26
- CSV: "csv",
27
- JSON: "json",
25
+ export function jsonWithSchema(schema: TableSchema, rows: Row[]) {
26
+ const newSchema: TableSchema = {}
27
+ Object.values(schema).forEach(column => {
28
+ if (!column.autocolumn) {
29
+ newSchema[column.name] = column
30
+ }
31
+ })
32
+ return JSON.stringify({ schema: newSchema, rows }, undefined, 2)
33
+ }
34
+
35
+ export enum Format {
36
+ CSV = "csv",
37
+ JSON = "json",
38
+ JSON_WITH_SCHEMA = "jsonWithSchema",
39
+ }
40
+
41
+ export function isFormat(format: any): format is Format {
42
+ return Object.values(Format).includes(format as Format)
28
43
  }
@@ -1,9 +1,8 @@
1
1
  import viewTemplate from "./viewBuilder"
2
2
  import { apiFileReturn } from "../../../utilities/fileSystem"
3
- import * as exporters from "./exporters"
3
+ import { csv, json, jsonWithSchema, Format, isFormat } from "./exporters"
4
4
  import { deleteView, getView, getViews, saveView } from "./utils"
5
5
  import { fetchView } from "../row"
6
- import { FieldTypes } from "../../../constants"
7
6
  import { context, events } from "@budibase/backend-core"
8
7
  import { DocumentType } from "../../../db/utils"
9
8
  import sdk from "../../../sdk"
@@ -15,6 +14,7 @@ import {
15
14
  TableSchema,
16
15
  View,
17
16
  } from "@budibase/types"
17
+ import { cleanExportRows } from "../row/utils"
18
18
 
19
19
  const { cloneDeep, isEqual } = require("lodash")
20
20
 
@@ -127,9 +127,13 @@ export async function exportView(ctx: BBContext) {
127
127
  const viewName = decodeURIComponent(ctx.query.view as string)
128
128
  const view = await getView(viewName)
129
129
 
130
- const format = ctx.query.format as string
131
- if (!format || !Object.values(exporters.ExportFormats).includes(format)) {
132
- ctx.throw(400, "Format must be specified, either csv or json")
130
+ const format = ctx.query.format as unknown
131
+
132
+ if (!isFormat(format)) {
133
+ ctx.throw(
134
+ 400,
135
+ "Format must be specified, either csv, json or jsonWithSchema"
136
+ )
133
137
  }
134
138
 
135
139
  if (view) {
@@ -158,37 +162,20 @@ export async function exportView(ctx: BBContext) {
158
162
  schema = table.schema
159
163
  }
160
164
 
161
- // remove any relationships
162
- const relationships = Object.entries(schema)
163
- .filter(entry => entry[1].type === FieldTypes.LINK)
164
- .map(entry => entry[0])
165
- // iterate relationship columns and remove from and row and schema
166
- relationships.forEach(column => {
167
- rows.forEach(row => {
168
- delete row[column]
169
- })
170
- delete schema[column]
171
- })
172
-
173
- // make sure no "undefined" entries appear in the CSV
174
- if (format === exporters.ExportFormats.CSV) {
175
- const schemaKeys = Object.keys(schema)
176
- for (let key of schemaKeys) {
177
- for (let row of rows) {
178
- if (row[key] == null) {
179
- row[key] = ""
180
- }
181
- }
182
- }
183
- }
165
+ let exportRows = cleanExportRows(rows, schema, format, [])
184
166
 
185
- // Export part
186
- let headers = Object.keys(schema)
187
- const exporter = format === "csv" ? exporters.csv : exporters.json
188
- const filename = `${viewName}.${format}`
189
- // send down the file
190
- ctx.attachment(filename)
191
- ctx.body = apiFileReturn(exporter(headers, rows))
167
+ if (format === Format.CSV) {
168
+ ctx.attachment(`${viewName}.csv`)
169
+ ctx.body = apiFileReturn(csv(Object.keys(schema), exportRows))
170
+ } else if (format === Format.JSON) {
171
+ ctx.attachment(`${viewName}.json`)
172
+ ctx.body = apiFileReturn(json(exportRows))
173
+ } else if (format === Format.JSON_WITH_SCHEMA) {
174
+ ctx.attachment(`${viewName}.json`)
175
+ ctx.body = apiFileReturn(jsonWithSchema(schema, exportRows))
176
+ } else {
177
+ throw "Format not recognised"
178
+ }
192
179
 
193
180
  if (viewName.startsWith(DocumentType.TABLE)) {
194
181
  await events.table.exported(table, format as TableExportFormat)
@@ -39,60 +39,62 @@ export async function destroy(ctx: BBContext) {
39
39
  }
40
40
 
41
41
  export async function buildSchema(ctx: BBContext) {
42
- await context.updateAppId(ctx.params.instance)
43
- const db = context.getAppDB()
44
- const webhook = (await db.get(ctx.params.id)) as Webhook
45
- webhook.bodySchema = toJsonSchema(ctx.request.body)
46
- // update the automation outputs
47
- if (webhook.action.type === WebhookActionType.AUTOMATION) {
48
- let automation = (await db.get(webhook.action.target)) as Automation
49
- const autoOutputs = automation.definition.trigger.schema.outputs
50
- let properties = webhook.bodySchema.properties
51
- // reset webhook outputs
52
- autoOutputs.properties = {
53
- body: autoOutputs.properties.body,
54
- }
55
- for (let prop of Object.keys(properties)) {
56
- autoOutputs.properties[prop] = {
57
- type: properties[prop].type,
58
- description: AUTOMATION_DESCRIPTION,
42
+ await context.doInAppContext(ctx.params.instance, async () => {
43
+ const db = context.getAppDB()
44
+ const webhook = (await db.get(ctx.params.id)) as Webhook
45
+ webhook.bodySchema = toJsonSchema(ctx.request.body)
46
+ // update the automation outputs
47
+ if (webhook.action.type === WebhookActionType.AUTOMATION) {
48
+ let automation = (await db.get(webhook.action.target)) as Automation
49
+ const autoOutputs = automation.definition.trigger.schema.outputs
50
+ let properties = webhook.bodySchema.properties
51
+ // reset webhook outputs
52
+ autoOutputs.properties = {
53
+ body: autoOutputs.properties.body,
59
54
  }
55
+ for (let prop of Object.keys(properties)) {
56
+ autoOutputs.properties[prop] = {
57
+ type: properties[prop].type,
58
+ description: AUTOMATION_DESCRIPTION,
59
+ }
60
+ }
61
+ await db.put(automation)
60
62
  }
61
- await db.put(automation)
62
- }
63
- ctx.body = await db.put(webhook)
63
+ ctx.body = await db.put(webhook)
64
+ })
64
65
  }
65
66
 
66
67
  export async function trigger(ctx: BBContext) {
67
68
  const prodAppId = dbCore.getProdAppID(ctx.params.instance)
68
- await context.updateAppId(prodAppId)
69
- try {
70
- const db = context.getAppDB()
71
- const webhook = (await db.get(ctx.params.id)) as Webhook
72
- // validate against the schema
73
- if (webhook.bodySchema) {
74
- validate(ctx.request.body, webhook.bodySchema)
75
- }
76
- const target = await db.get(webhook.action.target)
77
- if (webhook.action.type === WebhookActionType.AUTOMATION) {
78
- // trigger with both the pure request and then expand it
79
- // incase the user has produced a schema to bind to
80
- await triggers.externalTrigger(target, {
81
- body: ctx.request.body,
82
- ...ctx.request.body,
83
- appId: prodAppId,
84
- })
85
- }
86
- ctx.status = 200
87
- ctx.body = {
88
- message: "Webhook trigger fired successfully",
89
- }
90
- } catch (err: any) {
91
- if (err.status === 404) {
69
+ await context.doInAppContext(prodAppId, async () => {
70
+ try {
71
+ const db = context.getAppDB()
72
+ const webhook = (await db.get(ctx.params.id)) as Webhook
73
+ // validate against the schema
74
+ if (webhook.bodySchema) {
75
+ validate(ctx.request.body, webhook.bodySchema)
76
+ }
77
+ const target = await db.get(webhook.action.target)
78
+ if (webhook.action.type === WebhookActionType.AUTOMATION) {
79
+ // trigger with both the pure request and then expand it
80
+ // incase the user has produced a schema to bind to
81
+ await triggers.externalTrigger(target, {
82
+ body: ctx.request.body,
83
+ ...ctx.request.body,
84
+ appId: prodAppId,
85
+ })
86
+ }
92
87
  ctx.status = 200
93
88
  ctx.body = {
94
- message: "Application not deployed yet.",
89
+ message: "Webhook trigger fired successfully",
90
+ }
91
+ } catch (err: any) {
92
+ if (err.status === 404) {
93
+ ctx.status = 200
94
+ ctx.body = {
95
+ message: "Application not deployed yet.",
96
+ }
95
97
  }
96
98
  }
97
- }
99
+ })
98
100
  }
@@ -33,6 +33,7 @@ export { default as publicRoutes } from "./public"
33
33
 
34
34
  const appBackupRoutes = pro.appBackups
35
35
  const scheduleRoutes = pro.schedules
36
+ const environmentVariableRoutes = pro.environmentVariables
36
37
 
37
38
  export const mainRoutes: Router[] = [
38
39
  appBackupRoutes,
@@ -63,6 +64,7 @@ export const mainRoutes: Router[] = [
63
64
  migrationRoutes,
64
65
  pluginRoutes,
65
66
  scheduleRoutes,
67
+ environmentVariableRoutes,
66
68
  // these need to be handled last as they still use /api/:tableId
67
69
  // this could be breaking as koa may recognise other routes as this
68
70
  tableRoutes,
@@ -3,7 +3,7 @@ import * as rowController from "../controllers/row"
3
3
  import authorized from "../../middleware/authorized"
4
4
  import { paramResource, paramSubResource } from "../../middleware/resourceId"
5
5
  import { permissions } from "@budibase/backend-core"
6
- const { internalSearchValidator } = require("./utils/validators")
6
+ import { internalSearchValidator } from "./utils/validators"
7
7
  const { PermissionType, PermissionLevel } = permissions
8
8
 
9
9
  const router: Router = new Router()