@budibase/server 2.2.12-alpha.4 → 2.2.12-alpha.41

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 (509) hide show
  1. package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
  2. package/builder/assets/{index.11f4795c.js → index.5d8a522b.js} +408 -419
  3. package/builder/assets/index.80229ab4.css +6 -0
  4. package/builder/index.html +2 -2
  5. package/coverage/clover.xml +4294 -4395
  6. package/coverage/coverage-final.json +278 -279
  7. package/coverage/lcov-report/index.html +395 -395
  8. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +9 -9
  9. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +6 -6
  10. package/coverage/lcov-report/src/api/controllers/application.ts.html +105 -105
  11. package/coverage/lcov-report/src/api/controllers/auth.ts.html +10 -10
  12. package/coverage/lcov-report/src/api/controllers/automation.ts.html +37 -37
  13. package/coverage/lcov-report/src/api/controllers/backup.ts.html +8 -8
  14. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +16 -16
  15. package/coverage/lcov-report/src/api/controllers/component.ts.html +12 -12
  16. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +24 -24
  17. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +18 -18
  18. package/coverage/lcov-report/src/api/controllers/deploy/index.html +7 -7
  19. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +83 -83
  20. package/coverage/lcov-report/src/api/controllers/dev.ts.html +28 -28
  21. package/coverage/lcov-report/src/api/controllers/index.html +98 -98
  22. package/coverage/lcov-report/src/api/controllers/integration.ts.html +5 -5
  23. package/coverage/lcov-report/src/api/controllers/layout.ts.html +9 -9
  24. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +11 -11
  25. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +6 -6
  26. package/coverage/lcov-report/src/api/controllers/permission.ts.html +14 -14
  27. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +4 -4
  28. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +20 -20
  29. package/coverage/lcov-report/src/api/controllers/plugin/index.html +31 -31
  30. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +26 -26
  31. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +10 -10
  32. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +3 -3
  33. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +4 -4
  34. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +4 -4
  35. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +31 -31
  36. package/coverage/lcov-report/src/api/controllers/public/index.html +58 -58
  37. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +7 -7
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +25 -25
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +9 -9
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +8 -8
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +4 -4
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +4 -4
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +4 -4
  44. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +15 -15
  45. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +21 -21
  46. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +21 -21
  47. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +27 -27
  48. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +8 -8
  49. package/coverage/lcov-report/src/api/controllers/query/import/index.html +8 -8
  50. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +11 -11
  51. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +14 -14
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +14 -14
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +8 -8
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +12 -12
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +23 -23
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +16 -16
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +20 -20
  58. package/coverage/lcov-report/src/api/controllers/query/index.html +15 -15
  59. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +28 -28
  60. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +9 -9
  61. package/coverage/lcov-report/src/api/controllers/role.ts.html +9 -9
  62. package/coverage/lcov-report/src/api/controllers/routing.ts.html +10 -10
  63. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +55 -37
  64. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +44 -44
  65. package/coverage/lcov-report/src/api/controllers/row/index.html +58 -58
  66. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +36 -36
  67. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +77 -74
  68. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +146 -146
  69. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +33 -33
  70. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +28 -28
  71. package/coverage/lcov-report/src/api/controllers/screen.ts.html +12 -12
  72. package/coverage/lcov-report/src/api/controllers/script.ts.html +11 -11
  73. package/coverage/lcov-report/src/api/controllers/static/index.html +15 -15
  74. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +34 -34
  75. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +60 -60
  76. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +42 -42
  77. package/coverage/lcov-report/src/api/controllers/table/index.html +48 -48
  78. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +155 -68
  79. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +58 -61
  80. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +93 -96
  81. package/coverage/lcov-report/src/api/controllers/templates.ts.html +21 -21
  82. package/coverage/lcov-report/src/api/controllers/user.ts.html +103 -79
  83. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +64 -19
  84. package/coverage/lcov-report/src/api/controllers/view/index.html +38 -38
  85. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +74 -47
  86. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +22 -22
  87. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +8 -8
  88. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +15 -15
  89. package/coverage/lcov-report/src/api/index.html +15 -15
  90. package/coverage/lcov-report/src/api/index.ts.html +31 -31
  91. package/coverage/lcov-report/src/api/routes/analytics.ts.html +10 -10
  92. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +11 -11
  93. package/coverage/lcov-report/src/api/routes/application.ts.html +13 -13
  94. package/coverage/lcov-report/src/api/routes/auth.ts.html +9 -9
  95. package/coverage/lcov-report/src/api/routes/automation.ts.html +14 -14
  96. package/coverage/lcov-report/src/api/routes/backup.ts.html +11 -11
  97. package/coverage/lcov-report/src/api/routes/cloud.ts.html +11 -11
  98. package/coverage/lcov-report/src/api/routes/component.ts.html +11 -11
  99. package/coverage/lcov-report/src/api/routes/datasource.ts.html +12 -12
  100. package/coverage/lcov-report/src/api/routes/deploy.ts.html +11 -11
  101. package/coverage/lcov-report/src/api/routes/dev.ts.html +17 -17
  102. package/coverage/lcov-report/src/api/routes/index.html +66 -66
  103. package/coverage/lcov-report/src/api/routes/index.ts.html +36 -36
  104. package/coverage/lcov-report/src/api/routes/integration.ts.html +11 -11
  105. package/coverage/lcov-report/src/api/routes/layout.ts.html +11 -11
  106. package/coverage/lcov-report/src/api/routes/metadata.ts.html +12 -12
  107. package/coverage/lcov-report/src/api/routes/migrations.ts.html +10 -10
  108. package/coverage/lcov-report/src/api/routes/permission.ts.html +12 -12
  109. package/coverage/lcov-report/src/api/routes/plugin.ts.html +10 -10
  110. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +16 -16
  111. package/coverage/lcov-report/src/api/routes/public/index.html +24 -24
  112. package/coverage/lcov-report/src/api/routes/public/index.ts.html +60 -60
  113. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +5 -5
  114. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +12 -12
  115. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +11 -11
  116. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +14 -14
  117. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +14 -14
  118. package/coverage/lcov-report/src/api/routes/public/tests/index.html +7 -7
  119. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +5 -5
  120. package/coverage/lcov-report/src/api/routes/public/users.ts.html +14 -14
  121. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +21 -21
  122. package/coverage/lcov-report/src/api/routes/public/utils/index.html +5 -5
  123. package/coverage/lcov-report/src/api/routes/query.ts.html +14 -14
  124. package/coverage/lcov-report/src/api/routes/role.ts.html +12 -12
  125. package/coverage/lcov-report/src/api/routes/routing.ts.html +11 -11
  126. package/coverage/lcov-report/src/api/routes/row.ts.html +13 -13
  127. package/coverage/lcov-report/src/api/routes/screen.ts.html +12 -12
  128. package/coverage/lcov-report/src/api/routes/script.ts.html +13 -13
  129. package/coverage/lcov-report/src/api/routes/static.ts.html +18 -18
  130. package/coverage/lcov-report/src/api/routes/table.ts.html +29 -98
  131. package/coverage/lcov-report/src/api/routes/templates.ts.html +11 -11
  132. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +13 -13
  133. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +23 -23
  134. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +14 -14
  135. package/coverage/lcov-report/src/api/routes/user.ts.html +12 -12
  136. package/coverage/lcov-report/src/api/routes/utils/index.html +3 -3
  137. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +44 -44
  138. package/coverage/lcov-report/src/api/routes/view.ts.html +13 -13
  139. package/coverage/lcov-report/src/api/routes/webhook.ts.html +13 -13
  140. package/coverage/lcov-report/src/app.ts.html +22 -16
  141. package/coverage/lcov-report/src/automations/actions.ts.html +31 -31
  142. package/coverage/lcov-report/src/automations/automationUtils.ts.html +61 -61
  143. package/coverage/lcov-report/src/automations/bullboard.ts.html +19 -19
  144. package/coverage/lcov-report/src/automations/index.html +53 -53
  145. package/coverage/lcov-report/src/automations/index.ts.html +23 -23
  146. package/coverage/lcov-report/src/automations/logging/index.html +3 -3
  147. package/coverage/lcov-report/src/automations/logging/index.ts.html +10 -10
  148. package/coverage/lcov-report/src/automations/steps/bash.ts.html +11 -11
  149. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +9 -9
  150. package/coverage/lcov-report/src/automations/steps/delay.ts.html +7 -7
  151. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +9 -9
  152. package/coverage/lcov-report/src/automations/steps/discord.ts.html +11 -11
  153. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +9 -9
  154. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +9 -9
  155. package/coverage/lcov-report/src/automations/steps/filter.ts.html +12 -12
  156. package/coverage/lcov-report/src/automations/steps/index.html +75 -75
  157. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +10 -10
  158. package/coverage/lcov-report/src/automations/steps/loop.ts.html +5 -5
  159. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +19 -19
  160. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +43 -43
  161. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +9 -9
  162. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +10 -10
  163. package/coverage/lcov-report/src/automations/steps/slack.ts.html +10 -10
  164. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +9 -9
  165. package/coverage/lcov-report/src/automations/steps/utils.ts.html +12 -12
  166. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +8 -8
  167. package/coverage/lcov-report/src/automations/tests/utilities/index.html +15 -15
  168. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +24 -24
  169. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +6 -6
  170. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +6 -6
  171. package/coverage/lcov-report/src/automations/triggerInfo/index.html +17 -17
  172. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +10 -10
  173. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +6 -6
  174. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +6 -6
  175. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +6 -6
  176. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +6 -6
  177. package/coverage/lcov-report/src/automations/triggers.ts.html +53 -38
  178. package/coverage/lcov-report/src/automations/utils.ts.html +65 -65
  179. package/coverage/lcov-report/src/constants/index.html +19 -19
  180. package/coverage/lcov-report/src/constants/index.ts.html +80 -80
  181. package/coverage/lcov-report/src/constants/layouts.ts.html +9 -9
  182. package/coverage/lcov-report/src/constants/screens.ts.html +4 -4
  183. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +45 -45
  184. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +8 -8
  185. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +8 -8
  186. package/coverage/lcov-report/src/db/defaultData/index.html +43 -43
  187. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +8 -8
  188. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +8 -8
  189. package/coverage/lcov-report/src/db/dynamoClient.ts.html +26 -26
  190. package/coverage/lcov-report/src/db/inMemoryView.ts.html +13 -13
  191. package/coverage/lcov-report/src/db/index.html +32 -32
  192. package/coverage/lcov-report/src/db/index.ts.html +10 -10
  193. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +38 -38
  194. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +7 -7
  195. package/coverage/lcov-report/src/db/linkedRows/index.html +37 -37
  196. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +40 -40
  197. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +25 -25
  198. package/coverage/lcov-report/src/db/newid.ts.html +5 -5
  199. package/coverage/lcov-report/src/db/utils.ts.html +75 -75
  200. package/coverage/lcov-report/src/definitions/automations.ts.html +5 -5
  201. package/coverage/lcov-report/src/definitions/datasource.ts.html +5 -5
  202. package/coverage/lcov-report/src/definitions/index.html +4 -4
  203. package/coverage/lcov-report/src/environment.ts.html +16 -16
  204. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +14 -14
  205. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +8 -8
  206. package/coverage/lcov-report/src/events/index.html +20 -20
  207. package/coverage/lcov-report/src/events/index.ts.html +7 -7
  208. package/coverage/lcov-report/src/events/utils.ts.html +11 -11
  209. package/coverage/lcov-report/src/index.html +36 -36
  210. package/coverage/lcov-report/src/index.ts.html +6 -6
  211. package/coverage/lcov-report/src/integrations/airtable.ts.html +10 -10
  212. package/coverage/lcov-report/src/integrations/arangodb.ts.html +9 -9
  213. package/coverage/lcov-report/src/integrations/base/index.html +20 -20
  214. package/coverage/lcov-report/src/integrations/base/query.ts.html +3 -3
  215. package/coverage/lcov-report/src/integrations/base/sql.ts.html +37 -37
  216. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +21 -21
  217. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  218. package/coverage/lcov-report/src/integrations/couchdb.ts.html +10 -10
  219. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +15 -15
  220. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +9 -9
  221. package/coverage/lcov-report/src/integrations/firebase.ts.html +12 -12
  222. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +41 -41
  223. package/coverage/lcov-report/src/integrations/index.html +125 -125
  224. package/coverage/lcov-report/src/integrations/index.ts.html +40 -40
  225. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +31 -31
  226. package/coverage/lcov-report/src/integrations/mongodb.ts.html +421 -289
  227. package/coverage/lcov-report/src/integrations/mysql.ts.html +27 -27
  228. package/coverage/lcov-report/src/integrations/oracle.ts.html +31 -31
  229. package/coverage/lcov-report/src/integrations/postgres.ts.html +22 -22
  230. package/coverage/lcov-report/src/integrations/queries/index.html +5 -5
  231. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +6 -6
  232. package/coverage/lcov-report/src/integrations/redis.ts.html +8 -8
  233. package/coverage/lcov-report/src/integrations/rest.ts.html +28 -28
  234. package/coverage/lcov-report/src/integrations/s3.ts.html +17 -17
  235. package/coverage/lcov-report/src/integrations/snowflake.ts.html +15 -15
  236. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  237. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  238. package/coverage/lcov-report/src/integrations/utils.ts.html +49 -49
  239. package/coverage/lcov-report/src/middleware/appInfo.ts.html +11 -11
  240. package/coverage/lcov-report/src/middleware/authorized.ts.html +31 -19
  241. package/coverage/lcov-report/src/middleware/builder.ts.html +15 -15
  242. package/coverage/lcov-report/src/middleware/currentapp.ts.html +18 -15
  243. package/coverage/lcov-report/src/middleware/index.html +40 -40
  244. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +10 -10
  245. package/coverage/lcov-report/src/middleware/publicApi.ts.html +9 -9
  246. package/coverage/lcov-report/src/middleware/resourceId.ts.html +23 -23
  247. package/coverage/lcov-report/src/middleware/selfhost.ts.html +2 -2
  248. package/coverage/lcov-report/src/middleware/utils.ts.html +3 -3
  249. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +6 -6
  250. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +7 -7
  251. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +7 -7
  252. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +31 -31
  253. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +8 -8
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +13 -13
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +7 -7
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +7 -7
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +8 -8
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +21 -21
  259. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +10 -10
  260. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +19 -19
  261. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +9 -9
  262. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +13 -13
  263. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +23 -23
  264. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +26 -26
  265. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +7 -7
  266. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +14 -14
  267. package/coverage/lcov-report/src/migrations/functions/index.html +18 -18
  268. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +8 -8
  269. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +11 -11
  270. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +11 -11
  271. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +3 -3
  272. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +6 -6
  273. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +8 -8
  274. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +7 -7
  275. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +4 -4
  276. package/coverage/lcov-report/src/migrations/index.html +15 -15
  277. package/coverage/lcov-report/src/migrations/index.ts.html +43 -43
  278. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +4 -4
  279. package/coverage/lcov-report/src/migrations/tests/index.html +6 -6
  280. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +3 -3
  281. package/coverage/lcov-report/src/sdk/app/applications/index.html +11 -11
  282. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +6 -6
  283. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +24 -24
  284. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +15 -15
  285. package/coverage/lcov-report/src/sdk/app/automations/index.html +7 -7
  286. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +5 -5
  287. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +8 -8
  288. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +5 -5
  289. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +30 -30
  290. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +24 -24
  291. package/coverage/lcov-report/src/sdk/app/backups/index.html +27 -27
  292. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +7 -7
  293. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +12 -12
  294. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +8 -8
  295. package/coverage/lcov-report/src/sdk/app/rows/index.html +8 -8
  296. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +6 -6
  297. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  298. package/coverage/lcov-report/src/sdk/app/tables/index.html +11 -11
  299. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +16 -16
  300. package/coverage/lcov-report/src/sdk/index.html +5 -5
  301. package/coverage/lcov-report/src/sdk/index.ts.html +11 -11
  302. package/coverage/lcov-report/src/sdk/users/index.html +6 -6
  303. package/coverage/lcov-report/src/sdk/users/index.ts.html +5 -5
  304. package/coverage/lcov-report/src/sdk/users/utils.ts.html +29 -29
  305. package/coverage/lcov-report/src/startup.ts.html +40 -55
  306. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +108 -108
  307. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +20 -20
  308. package/coverage/lcov-report/src/tests/utilities/index.html +30 -30
  309. package/coverage/lcov-report/src/tests/utilities/index.ts.html +2 -2
  310. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +231 -42
  311. package/coverage/lcov-report/src/threads/automation.ts.html +202 -190
  312. package/coverage/lcov-report/src/threads/index.html +43 -43
  313. package/coverage/lcov-report/src/threads/index.ts.html +38 -38
  314. package/coverage/lcov-report/src/threads/query.ts.html +12 -12
  315. package/coverage/lcov-report/src/threads/utils.ts.html +26 -26
  316. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +4 -4
  317. package/coverage/lcov-report/src/utilities/centralPath.ts.html +5 -5
  318. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +10 -10
  319. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +12 -12
  320. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +20 -20
  321. package/coverage/lcov-report/src/utilities/fileSystem/index.html +42 -42
  322. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +1 -1
  323. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +6 -6
  324. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +9 -9
  325. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +5 -5
  326. package/coverage/lcov-report/src/utilities/global.ts.html +54 -54
  327. package/coverage/lcov-report/src/utilities/index.html +74 -89
  328. package/coverage/lcov-report/src/utilities/index.ts.html +32 -32
  329. package/coverage/lcov-report/src/utilities/redis.ts.html +35 -35
  330. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  331. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  332. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +32 -32
  333. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +67 -67
  334. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +9 -9
  335. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +26 -26
  336. package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +173 -233
  337. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +8 -8
  338. package/coverage/lcov-report/src/utilities/security.ts.html +13 -13
  339. package/coverage/lcov-report/src/utilities/usageQuota/index.html +9 -9
  340. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +8 -8
  341. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +3 -3
  342. package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
  343. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +61 -34
  344. package/coverage/lcov-report/src/watch.ts.html +20 -20
  345. package/coverage/lcov-report/src/websocket.ts.html +5 -5
  346. package/coverage/lcov.info +10214 -9826
  347. package/dist/api/controllers/query/index.js +5 -2
  348. package/dist/api/controllers/row/ExternalRequest.js +7 -0
  349. package/dist/api/controllers/row/internal.js +12 -8
  350. package/dist/api/controllers/static/index.js +7 -4
  351. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  352. package/dist/api/controllers/table/external.js +8 -30
  353. package/dist/api/controllers/table/index.js +44 -15
  354. package/dist/api/controllers/table/internal.js +6 -7
  355. package/dist/api/controllers/table/utils.js +9 -9
  356. package/dist/api/controllers/user.js +14 -6
  357. package/dist/api/controllers/view/exporters.js +22 -6
  358. package/dist/api/controllers/view/index.js +19 -34
  359. package/dist/api/controllers/view/viewBuilder.js +15 -2
  360. package/dist/api/routes/analytics.js +2 -1
  361. package/dist/api/routes/apikeys.js +2 -1
  362. package/dist/api/routes/application.js +2 -1
  363. package/dist/api/routes/auth.js +2 -1
  364. package/dist/api/routes/automation.js +2 -1
  365. package/dist/api/routes/backup.js +2 -1
  366. package/dist/api/routes/cloud.js +2 -1
  367. package/dist/api/routes/component.js +2 -1
  368. package/dist/api/routes/datasource.js +2 -1
  369. package/dist/api/routes/deploy.js +2 -1
  370. package/dist/api/routes/dev.js +2 -1
  371. package/dist/api/routes/integration.js +2 -1
  372. package/dist/api/routes/layout.js +2 -1
  373. package/dist/api/routes/metadata.js +2 -1
  374. package/dist/api/routes/migrations.js +2 -1
  375. package/dist/api/routes/permission.js +2 -1
  376. package/dist/api/routes/query.js +2 -1
  377. package/dist/api/routes/role.js +2 -1
  378. package/dist/api/routes/routing.js +2 -1
  379. package/dist/api/routes/screen.js +2 -1
  380. package/dist/api/routes/script.js +2 -1
  381. package/dist/api/routes/static.js +6 -5
  382. package/dist/api/routes/table.js +8 -38
  383. package/dist/api/routes/templates.js +2 -1
  384. package/dist/api/routes/user.js +2 -1
  385. package/dist/api/routes/utils/validators.js +1 -1
  386. package/dist/api/routes/view.js +2 -1
  387. package/dist/api/routes/webhook.js +2 -1
  388. package/dist/app.js +9 -7
  389. package/dist/automations/logging/index.js +5 -25
  390. package/dist/automations/triggers.js +1 -0
  391. package/dist/db/index.js +5 -2
  392. package/dist/db/linkedRows/LinkController.js +2 -1
  393. package/dist/db/linkedRows/LinkDocument.js +2 -1
  394. package/dist/db/newid.js +4 -2
  395. package/dist/environment.js +2 -1
  396. package/dist/events/AutomationEmitter.js +2 -1
  397. package/dist/events/BudibaseEmitter.js +2 -1
  398. package/dist/events/index.js +2 -1
  399. package/dist/integrations/index.js +5 -5
  400. package/dist/integrations/mongodb.js +311 -271
  401. package/dist/middleware/authorized.js +2 -1
  402. package/dist/middleware/builder.js +4 -2
  403. package/dist/middleware/currentapp.js +6 -3
  404. package/dist/middleware/publicApi.js +4 -2
  405. package/dist/middleware/selfhost.js +4 -1
  406. package/dist/package.json +9 -7
  407. package/dist/startup.js +17 -17
  408. package/dist/threads/automation.js +9 -5
  409. package/dist/threads/index.js +4 -4
  410. package/dist/tsconfig.build.tsbuildinfo +1 -1
  411. package/dist/utilities/fileSystem/filesystem.js +3 -3
  412. package/dist/utilities/schema.js +108 -0
  413. package/dist/utilities/scriptRunner.js +2 -1
  414. package/dist/utilities/statusCodes.js +2 -1
  415. package/dist/utilities/workerRequests.js +2 -0
  416. package/dist/watch.js +2 -25
  417. package/jest.config.ts +5 -2
  418. package/package.json +10 -8
  419. package/src/api/controllers/query/index.ts +2 -2
  420. package/src/api/controllers/row/ExternalRequest.ts +6 -0
  421. package/src/api/controllers/row/internal.ts +10 -9
  422. package/src/api/controllers/static/index.ts +1 -1
  423. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  424. package/src/api/controllers/table/external.ts +10 -10
  425. package/src/api/controllers/table/index.ts +46 -17
  426. package/src/api/controllers/table/internal.ts +6 -7
  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 +21 -12
  431. package/src/api/controllers/view/tests/viewBuilder.spec.js +1 -1
  432. package/src/api/controllers/view/viewBuilder.ts +1 -1
  433. package/src/api/routes/analytics.ts +1 -1
  434. package/src/api/routes/apikeys.ts +1 -1
  435. package/src/api/routes/application.ts +1 -1
  436. package/src/api/routes/auth.ts +1 -1
  437. package/src/api/routes/automation.ts +1 -1
  438. package/src/api/routes/backup.ts +1 -1
  439. package/src/api/routes/cloud.ts +1 -1
  440. package/src/api/routes/component.ts +1 -1
  441. package/src/api/routes/datasource.ts +1 -1
  442. package/src/api/routes/deploy.ts +1 -1
  443. package/src/api/routes/dev.ts +1 -1
  444. package/src/api/routes/integration.ts +1 -1
  445. package/src/api/routes/layout.ts +1 -1
  446. package/src/api/routes/metadata.ts +1 -1
  447. package/src/api/routes/migrations.ts +1 -1
  448. package/src/api/routes/permission.ts +1 -1
  449. package/src/api/routes/query.ts +1 -1
  450. package/src/api/routes/role.ts +1 -1
  451. package/src/api/routes/routing.ts +1 -1
  452. package/src/api/routes/screen.ts +1 -1
  453. package/src/api/routes/script.ts +1 -1
  454. package/src/api/routes/static.ts +2 -2
  455. package/src/api/routes/table.ts +16 -39
  456. package/src/api/routes/templates.ts +1 -1
  457. package/src/api/routes/tests/misc.spec.js +4 -10
  458. package/src/api/routes/tests/plugin.spec.ts +10 -10
  459. package/src/api/routes/tests/table.spec.js +8 -30
  460. package/src/api/routes/tests/user.spec.js +20 -1
  461. package/src/api/routes/tests/utilities/TestFunctions.ts +1 -1
  462. package/src/api/routes/user.ts +1 -1
  463. package/src/api/routes/utils/validators.ts +1 -1
  464. package/src/api/routes/view.ts +1 -1
  465. package/src/api/routes/webhook.ts +1 -1
  466. package/src/app.ts +5 -3
  467. package/src/automations/logging/index.ts +1 -1
  468. package/src/automations/tests/loop.spec.ts +45 -0
  469. package/src/automations/triggers.ts +6 -1
  470. package/src/db/index.ts +1 -1
  471. package/src/db/linkedRows/LinkController.ts +1 -1
  472. package/src/db/linkedRows/LinkDocument.ts +1 -1
  473. package/src/db/newid.ts +1 -1
  474. package/src/db/tests/linkController.spec.js +1 -1
  475. package/src/environment.ts +1 -1
  476. package/src/events/AutomationEmitter.ts +1 -1
  477. package/src/events/BudibaseEmitter.ts +1 -1
  478. package/src/events/index.ts +1 -1
  479. package/src/integrations/index.ts +4 -4
  480. package/src/integrations/mongodb.ts +315 -271
  481. package/src/integrations/tests/rest.spec.ts +15 -13
  482. package/src/middleware/authorized.ts +5 -1
  483. package/src/middleware/builder.ts +1 -1
  484. package/src/middleware/currentapp.ts +4 -3
  485. package/src/middleware/publicApi.ts +1 -1
  486. package/src/middleware/selfhost.ts +1 -1
  487. package/src/middleware/tests/authorized.spec.js +1 -1
  488. package/src/middleware/tests/currentapp.spec.js +1 -1
  489. package/src/middleware/tests/selfhost.spec.js +1 -1
  490. package/src/startup.ts +3 -8
  491. package/src/tests/jestEnv.ts +13 -0
  492. package/src/tests/jestSetup.ts +0 -14
  493. package/src/tests/utilities/TestConfiguration.ts +1 -1
  494. package/src/tests/utilities/structures.ts +65 -2
  495. package/src/threads/automation.ts +9 -5
  496. package/src/threads/index.ts +1 -1
  497. package/src/utilities/fileSystem/filesystem.ts +1 -1
  498. package/src/utilities/schema.ts +141 -0
  499. package/src/utilities/scriptRunner.ts +1 -1
  500. package/src/utilities/statusCodes.ts +1 -1
  501. package/src/utilities/workerRequests.ts +10 -1
  502. package/src/watch.ts +1 -1
  503. package/tsconfig.json +2 -1
  504. package/builder/assets/index.fa480d5b.css +0 -6
  505. package/coverage/lcov-report/src/utilities/statusCodes.ts.html +0 -106
  506. package/dist/utilities/csvParser.js +0 -152
  507. package/src/utilities/csvParser.ts +0 -161
  508. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  509. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -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,6 +1,6 @@
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
6
  import { FieldTypes } from "../../../constants"
@@ -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) {
@@ -171,7 +175,7 @@ export async function exportView(ctx: BBContext) {
171
175
  })
172
176
 
173
177
  // make sure no "undefined" entries appear in the CSV
174
- if (format === exporters.ExportFormats.CSV) {
178
+ if (format === Format.CSV) {
175
179
  const schemaKeys = Object.keys(schema)
176
180
  for (let key of schemaKeys) {
177
181
  for (let row of rows) {
@@ -182,13 +186,18 @@ export async function exportView(ctx: BBContext) {
182
186
  }
183
187
  }
184
188
 
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))
189
+ if (format === Format.CSV) {
190
+ ctx.attachment(`${viewName}.csv`)
191
+ ctx.body = apiFileReturn(csv(Object.keys(schema), rows))
192
+ } else if (format === Format.JSON) {
193
+ ctx.attachment(`${viewName}.json`)
194
+ ctx.body = apiFileReturn(json(rows))
195
+ } else if (format === Format.JSON_WITH_SCHEMA) {
196
+ ctx.attachment(`${viewName}.json`)
197
+ ctx.body = apiFileReturn(jsonWithSchema(schema, rows))
198
+ } else {
199
+ throw "Format not recognised"
200
+ }
192
201
 
193
202
  if (viewName.startsWith(DocumentType.TABLE)) {
194
203
  await events.table.exported(table, format as TableExportFormat)
@@ -1,4 +1,4 @@
1
- const viewTemplate = require("../viewBuilder");
1
+ const viewTemplate = require("../viewBuilder").default;
2
2
 
3
3
  describe("viewBuilder", () => {
4
4
 
@@ -136,7 +136,7 @@ function parseEmitExpression(field: string, groupBy: string) {
136
136
  * filters: Array of filter objects containing predicates that are parsed into a JS expression
137
137
  * calculation: an optional calculation to be performed over the view data.
138
138
  */
139
- export = function ({
139
+ export default function ({
140
140
  field,
141
141
  tableId,
142
142
  groupBy,
@@ -6,4 +6,4 @@ const router: Router = new Router()
6
6
  router.get("/api/bbtel", controller.isEnabled)
7
7
  router.post("/api/bbtel/ping", controller.ping)
8
8
 
9
- export = router
9
+ export default router
@@ -9,4 +9,4 @@ router
9
9
  .get("/api/keys", authorized(permissions.BUILDER), controller.fetch)
10
10
  .put("/api/keys/:key", authorized(permissions.BUILDER), controller.update)
11
11
 
12
- export = router
12
+ export default router
@@ -54,4 +54,4 @@ router
54
54
  controller.destroy
55
55
  )
56
56
 
57
- export = router
57
+ export default router
@@ -5,4 +5,4 @@ const router: Router = new Router()
5
5
 
6
6
  router.get("/api/self", controller.fetchSelf)
7
7
 
8
- export = router
8
+ export default router
@@ -84,4 +84,4 @@ router
84
84
  controller.test
85
85
  )
86
86
 
87
- export = router
87
+ export default router
@@ -11,4 +11,4 @@ router.get(
11
11
  controller.exportAppDump
12
12
  )
13
13
 
14
- export = router
14
+ export default router
@@ -15,4 +15,4 @@ router
15
15
  .post("/api/cloud/import", controller.importApps)
16
16
  .get("/api/cloud/import/complete", controller.hasBeenImported)
17
17
 
18
- export = router
18
+ export default router
@@ -11,4 +11,4 @@ router.get(
11
11
  controller.fetchAppComponentDefinitions
12
12
  )
13
13
 
14
- export = router
14
+ export default router
@@ -57,4 +57,4 @@ router
57
57
  datasourceController.destroy
58
58
  )
59
59
 
60
- export = router
60
+ export default router
@@ -17,4 +17,4 @@ router
17
17
  controller.deploymentProgress
18
18
  )
19
19
 
20
- export = router
20
+ export default router
@@ -35,4 +35,4 @@ router
35
35
  controller.revert
36
36
  )
37
37
 
38
- export = router
38
+ export default router
@@ -13,4 +13,4 @@ router
13
13
  controller.find
14
14
  )
15
15
 
16
- export = router
16
+ export default router
@@ -13,4 +13,4 @@ router
13
13
  controller.destroy
14
14
  )
15
15
 
16
- export = router
16
+ export default router
@@ -35,4 +35,4 @@ router
35
35
  controller.getMetadata
36
36
  )
37
37
 
38
- export = router
38
+ export default router
@@ -11,4 +11,4 @@ router
11
11
  auth.internalApi,
12
12
  migrationsController.fetchDefinitions
13
13
  )
14
- export = router
14
+ export default router
@@ -38,4 +38,4 @@ router
38
38
  controller.removePermission
39
39
  )
40
40
 
41
- export = router
41
+ export default router
@@ -58,4 +58,4 @@ router
58
58
  queryController.executeV2 as any
59
59
  )
60
60
 
61
- export = router
61
+ export default router
@@ -21,4 +21,4 @@ router
21
21
  controller.destroy
22
22
  )
23
23
 
24
- export = router
24
+ export default router
@@ -11,4 +11,4 @@ router
11
11
  // gets the full structure, not just the correct screen ID for user role
12
12
  .get("/api/routing", authorized(permissions.BUILDER), controller.fetch)
13
13
 
14
- export = router
14
+ export default router
@@ -20,4 +20,4 @@ router
20
20
  controller.destroy
21
21
  )
22
22
 
23
- export = router
23
+ export default router
@@ -7,4 +7,4 @@ const router: Router = new Router()
7
7
 
8
8
  router.post("/api/script", authorized(permissions.BUILDER), controller.save)
9
9
 
10
- export = router
10
+ export default router
@@ -3,7 +3,7 @@ import * as controller from "../controllers/static"
3
3
  import { budibaseTempDir } from "../../utilities/budibaseDir"
4
4
  import authorized from "../../middleware/authorized"
5
5
  import { permissions } from "@budibase/backend-core"
6
- import * as env from "../../environment"
6
+ import env from "../../environment"
7
7
  import { paramResource } from "../../middleware/resourceId"
8
8
  const { BUILDER, PermissionType, PermissionLevel } = permissions
9
9
 
@@ -62,4 +62,4 @@ router
62
62
  controller.getSignedUploadURL
63
63
  )
64
64
 
65
- export = router
65
+ export default router
@@ -67,10 +67,7 @@ router
67
67
  * structure, and the "updated", new column name should also be supplied. The schema should also be updated, this field
68
68
  * lets the server know that a field hasn't just been deleted, that the data has moved to a new name, this will fix
69
69
  * the rows in the table. This functionality is only available for internal tables.
70
- * @apiParam (Body) {object} [dataImport] When creating an internal table it can be built from a CSV, by using the
71
- * CSV validation endpoint. Send the CSV data to the validation endpoint, then put the results of that call
72
- * into this property, along with the CSV and a table/rows will be built from it. This is not supported when updating
73
- * or for external tables.
70
+ * @apiParam (Body) {object[]} [rows] When creating a table using a compatible data source, an array of objects to be imported into the new table can be provided.
74
71
  *
75
72
  * @apiParamExample {json} Example:
76
73
  * {
@@ -99,15 +96,7 @@ router
99
96
  * "old": "columnName",
100
97
  * "updated": "newColumnName",
101
98
  * },
102
- * "dataImport": {
103
- * "csvString": "column\nvalue",
104
- * "primaryDisplay": "column",
105
- * "schema": {
106
- * "column": {
107
- * "type": "string"
108
- * }
109
- * }
110
- * }
99
+ * "rows": []
111
100
  * }
112
101
  *
113
102
  * @apiSuccess {object} table The response body will contain the table structure after being cleaned up and
@@ -121,30 +110,20 @@ router
121
110
  tableValidator(),
122
111
  tableController.save
123
112
  )
124
- /**
125
- * @api {post} /api/tables/csv/validate Validate a CSV for a table
126
- * @apiName Validate a CSV for a table
127
- * @apiGroup tables
128
- * @apiPermission builder
129
- * @apiDescription When creating a new table, or importing a CSV to an existing table the CSV must be validated and
130
- * converted into a Budibase schema; this endpoint does this.
131
- *
132
- * @apiParam (Body) {string} csvString The CSV which is to be validated as a string.
133
- * @apiParam (Body) {object} [schema] When a CSV has been validated it is possible to re-validate after changing the
134
- * type of a field, by default everything will be strings as there is no way to infer types. The returned schema can
135
- * be updated and then returned to the endpoint to re-validate and check if the type will work for the CSV, e.g.
136
- * using a number instead of strings.
137
- * @apiParam (Body) {string} [tableId] If importing data to an existing table this will pull the current table and
138
- * remove any fields from the CSV schema which do not exist on the table/don't match the type of the table. When
139
- * importing a CSV to an existing table only fields that are present on the table can be imported.
140
- *
141
- * @apiSuccess {object} schema The response body will contain a "schema" object that represents the schema found for
142
- * the CSV - this will be in the same format used for table schema.s
143
- */
144
113
  .post(
145
- "/api/tables/csv/validate",
114
+ "/api/convert/csvToJson",
115
+ authorized(BUILDER),
116
+ tableController.csvToJson
117
+ )
118
+ .post(
119
+ "/api/tables/validateNewTableImport",
120
+ authorized(BUILDER),
121
+ tableController.validateNewTableImport
122
+ )
123
+ .post(
124
+ "/api/tables/validateExistingTableImport",
146
125
  authorized(BUILDER),
147
- tableController.validateCSVSchema
126
+ tableController.validateExistingTableImport
148
127
  )
149
128
  /**
150
129
  * @api {post} /api/tables/:tableId/:revId Delete a table
@@ -177,9 +156,7 @@ router
177
156
  *
178
157
  * @apiParam {string} tableId The ID of the table which the data should be imported to.
179
158
  *
180
- * @apiParam (Body) {object} dataImport This is the same as the structure used when creating an internal table with
181
- * a CSV, it will have the "schema" returned from the CSV validation endpoint and the "csvString" which is to be
182
- * turned into rows.
159
+ * @apiParam (Body) {object[]} rows An array of objects representing the rows to be imported, key-value pairs not matching the table schema will be ignored.
183
160
  *
184
161
  * @apiSuccess {string} message A message stating that the data was imported successfully.
185
162
  */
@@ -190,4 +167,4 @@ router
190
167
  tableController.bulkImport
191
168
  )
192
169
 
193
- export = router
170
+ export default router
@@ -13,4 +13,4 @@ router
13
13
  controller.downloadTemplate
14
14
  )
15
15
 
16
- export = router
16
+ export default router
@@ -42,7 +42,7 @@ describe("run misc tests", () => {
42
42
  })
43
43
 
44
44
  describe("test table utilities", () => {
45
- it("should be able to import a CSV", async () => {
45
+ it("should be able to import data", async () => {
46
46
  return config.doInContext(null, async () => {
47
47
  const table = await config.createTable({
48
48
  name: "table",
@@ -75,17 +75,11 @@ describe("run misc tests", () => {
75
75
  },
76
76
  },
77
77
  })
78
- const dataImport = {
79
- csvString: "a,b,c,d\n1,2,3,4",
80
- schema: {},
81
- }
82
- for (let col of ["a", "b", "c", "d"]) {
83
- dataImport.schema[col] = { type: "string" }
84
- }
78
+
85
79
  await tableUtils.handleDataImport(
86
80
  { userId: "test" },
87
81
  table,
88
- dataImport
82
+ [{ a: '1', b: '2', c: '3', d: '4'}]
89
83
  )
90
84
  const rows = await config.getRows()
91
85
  expect(rows[0].a).toEqual("1")
@@ -94,4 +88,4 @@ describe("run misc tests", () => {
94
88
  })
95
89
  })
96
90
  })
97
- })
91
+ })
@@ -1,8 +1,3 @@
1
- let mockObjectStore = jest.fn().mockImplementation(() => {
2
- return [{ name: "test.js" }]
3
- })
4
-
5
- let deleteFolder = jest.fn().mockImplementation()
6
1
  jest.mock("@budibase/backend-core", () => {
7
2
  const core = jest.requireActual("@budibase/backend-core")
8
3
  return {
@@ -10,15 +5,20 @@ jest.mock("@budibase/backend-core", () => {
10
5
  objectStore: {
11
6
  ...core.objectStore,
12
7
  upload: jest.fn(),
13
- uploadDirectory: mockObjectStore,
14
- deleteFolder: deleteFolder,
8
+ uploadDirectory: jest.fn().mockImplementation(() => {
9
+ return [{ name: "test.js" }]
10
+ }),
11
+ deleteFolder: jest.fn().mockImplementation(),
15
12
  },
16
13
  }
17
14
  })
18
15
 
19
- import { events } from "@budibase/backend-core"
16
+ import { events, objectStore } from "@budibase/backend-core"
20
17
  import * as setup from "./utilities"
21
18
 
19
+ const mockUploadDirectory = objectStore.uploadDirectory as jest.Mock
20
+ const mockDeleteFolder = objectStore.deleteFolder as jest.Mock
21
+
22
22
  describe("/plugins", () => {
23
23
  let request = setup.getRequest()
24
24
  let config = setup.getConfig()
@@ -57,7 +57,7 @@ describe("/plugins", () => {
57
57
  })
58
58
 
59
59
  it("should not be able to create a plugin if there is an error", async () => {
60
- mockObjectStore.mockImplementationOnce(() => {
60
+ mockUploadDirectory.mockImplementationOnce(() => {
61
61
  throw new Error()
62
62
  })
63
63
  let res = await createPlugin(400)
@@ -92,7 +92,7 @@ describe("/plugins", () => {
92
92
  expect(events.plugin.deleted).toHaveBeenCalledTimes(1)
93
93
  })
94
94
  it("should handle an error deleting a plugin", async () => {
95
- deleteFolder.mockImplementationOnce(() => {
95
+ mockDeleteFolder.mockImplementationOnce(() => {
96
96
  throw new Error()
97
97
  })
98
98
 
@@ -43,21 +43,18 @@ describe("/tables", () => {
43
43
  expect(events.table.created).toBeCalledWith(res.body)
44
44
  })
45
45
 
46
- it("creates a table via data import CSV", async () => {
46
+ it("creates a table via data import", async () => {
47
47
  const table = basicTable()
48
- table.dataImport = {
49
- csvString: "\"name\",\"description\"\n\"test-name\",\"test-desc\"",
50
- }
51
- table.dataImport.schema = table.schema
48
+ table.rows = [{ name: 'test-name', description: 'test-desc' }]
52
49
 
53
50
  const res = await createTable(table)
54
51
 
55
52
  expect(events.table.created).toBeCalledTimes(1)
56
53
  expect(events.table.created).toBeCalledWith(res.body)
57
54
  expect(events.table.imported).toBeCalledTimes(1)
58
- expect(events.table.imported).toBeCalledWith(res.body, "csv")
55
+ expect(events.table.imported).toBeCalledWith(res.body)
59
56
  expect(events.rows.imported).toBeCalledTimes(1)
60
- expect(events.rows.imported).toBeCalledWith(res.body, "csv", 1)
57
+ expect(events.rows.imported).toBeCalledWith(res.body, 1)
61
58
  })
62
59
 
63
60
  it("should apply authorization to endpoint", async () => {
@@ -155,11 +152,10 @@ describe("/tables", () => {
155
152
  it("imports rows successfully", async () => {
156
153
  const table = await config.createTable()
157
154
  const importRequest = {
158
- dataImport: {
159
- csvString: "\"name\",\"description\"\n\"test-name\",\"test-desc\"",
160
- schema: table.schema
161
- }
155
+ schema: table.schema,
156
+ rows: [{ name: 'test-name', description: 'test-desc' }]
162
157
  }
158
+
163
159
  jest.clearAllMocks()
164
160
 
165
161
  await request
@@ -171,7 +167,7 @@ describe("/tables", () => {
171
167
 
172
168
  expect(events.table.created).not.toHaveBeenCalled()
173
169
  expect(events.rows.imported).toBeCalledTimes(1)
174
- expect(events.rows.imported).toBeCalledWith(table, "csv", 1)
170
+ expect(events.rows.imported).toBeCalledWith(table, 1)
175
171
  })
176
172
  })
177
173
 
@@ -206,24 +202,6 @@ describe("/tables", () => {
206
202
  })
207
203
  })
208
204
 
209
- describe("validate csv", () => {
210
- it("should be able to validate a CSV layout", async () => {
211
- const res = await request
212
- .post(`/api/tables/csv/validate`)
213
- .send({
214
- csvString: "a,b,c,d\n1,2,3,4"
215
- })
216
- .set(config.defaultHeaders())
217
- .expect('Content-Type', /json/)
218
- .expect(200)
219
- expect(res.body.schema).toBeDefined()
220
- expect(res.body.schema.a).toEqual({
221
- type: "string",
222
- success: true,
223
- })
224
- })
225
- })
226
-
227
205
  describe("indexing", () => {
228
206
  it("should be able to create a table with indexes", async () => {
229
207
  await context.doInAppContext(appId, async () => {
@@ -171,9 +171,28 @@ describe("/users", () => {
171
171
  .expect("Content-Type", /json/)
172
172
  expect(res.body.message).toEqual('User synced.')
173
173
  })
174
- })
175
174
 
176
175
 
176
+ it("should sync the user when a previous user is specified", async () => {
177
+ const app1 = await config.createApp('App 1')
178
+ const app2 = await config.createApp('App 2')
177
179
 
180
+ let user = await config.createUser(
181
+ undefined,
182
+ undefined,
183
+ undefined,
184
+ undefined,
185
+ false,
186
+ true,
187
+ { [app1.appId]: 'ADMIN' })
188
+ let res = await request
189
+ .post(`/api/users/metadata/sync/${user._id}`)
190
+ .set(config.defaultHeaders())
191
+ .send({ previousUser: { ...user, roles: { ...user.roles, [app2.appId]: 'BASIC' } } })
192
+ .expect(200)
193
+ .expect("Content-Type", /json/)
178
194
 
195
+ expect(res.body.message).toEqual('User synced.')
196
+ })
197
+ })
179
198
  })
@@ -3,7 +3,7 @@ import * as appController from "../../../controllers/application"
3
3
  import { AppStatus } from "../../../../db/utils"
4
4
  import { roles, tenancy, context } from "@budibase/backend-core"
5
5
  import { TENANT_ID } from "../../../../tests/utilities/structures"
6
- import * as env from "../../../../environment"
6
+ import env from "../../../../environment"
7
7
 
8
8
  class Request {
9
9
  appId: any