@budibase/server 2.2.26 → 2.2.27-alpha.0

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 (657) hide show
  1. package/Dockerfile +1 -1
  2. package/__mocks__/aws-sdk.ts +19 -0
  3. package/__mocks__/node-fetch.ts +80 -0
  4. package/builder/assets/{bb-emblem.4e4717da.svg → bb-emblem.05f7ae7a.svg} +1 -1
  5. package/builder/assets/bg.29e85dd5.png +0 -0
  6. package/builder/assets/bulgaria.bd68393d.png +0 -0
  7. package/builder/assets/covanta.72c46c1e.png +0 -0
  8. package/builder/assets/index.3dd03883.css +6 -0
  9. package/builder/assets/index.f9b8b175.js +1802 -0
  10. package/builder/assets/schnellecke.cf1837a8.png +0 -0
  11. package/builder/index.html +3 -3
  12. package/coverage/clover.xml +6618 -6528
  13. package/coverage/coverage-final.json +282 -276
  14. package/coverage/lcov-report/index.html +489 -444
  15. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +9 -9
  16. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +6 -6
  17. package/coverage/lcov-report/src/api/controllers/application.ts.html +362 -266
  18. package/coverage/lcov-report/src/api/controllers/auth.ts.html +12 -12
  19. package/coverage/lcov-report/src/api/controllers/automation.ts.html +61 -61
  20. package/coverage/lcov-report/src/api/controllers/backup.ts.html +8 -8
  21. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +93 -81
  22. package/coverage/lcov-report/src/api/controllers/component.ts.html +12 -12
  23. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +122 -98
  24. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +21 -18
  25. package/coverage/lcov-report/src/api/controllers/deploy/index.html +21 -21
  26. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +142 -196
  27. package/coverage/lcov-report/src/api/controllers/dev.ts.html +28 -28
  28. package/coverage/lcov-report/src/api/controllers/index.html +115 -115
  29. package/coverage/lcov-report/src/api/controllers/integration.ts.html +5 -5
  30. package/coverage/lcov-report/src/api/controllers/layout.ts.html +9 -9
  31. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +11 -11
  32. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +6 -6
  33. package/coverage/lcov-report/src/api/controllers/permission.ts.html +14 -14
  34. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +20 -20
  35. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +62 -62
  36. package/coverage/lcov-report/src/api/controllers/plugin/index.html +72 -72
  37. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +150 -135
  38. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +56 -56
  39. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +11 -11
  40. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +18 -18
  41. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +20 -20
  42. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +75 -24
  43. package/coverage/lcov-report/src/api/controllers/public/index.html +58 -58
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +7 -7
  45. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +25 -25
  46. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +9 -9
  47. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +8 -8
  48. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +4 -4
  49. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +4 -4
  50. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +4 -4
  51. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +15 -15
  52. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +21 -21
  53. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +21 -21
  54. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +27 -27
  55. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +8 -8
  56. package/coverage/lcov-report/src/api/controllers/query/import/index.html +8 -8
  57. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +11 -11
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +14 -14
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +14 -14
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +8 -8
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +12 -12
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +23 -23
  63. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +16 -16
  64. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +20 -20
  65. package/coverage/lcov-report/src/api/controllers/query/index.html +20 -20
  66. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +131 -107
  67. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +11 -11
  68. package/coverage/lcov-report/src/api/controllers/role.ts.html +9 -9
  69. package/coverage/lcov-report/src/api/controllers/routing.ts.html +10 -10
  70. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +56 -41
  71. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +87 -57
  72. package/coverage/lcov-report/src/api/controllers/row/index.html +66 -66
  73. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +37 -37
  74. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +181 -106
  75. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +146 -146
  76. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +44 -35
  77. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +156 -39
  78. package/coverage/lcov-report/src/api/controllers/screen.ts.html +31 -31
  79. package/coverage/lcov-report/src/api/controllers/script.ts.html +19 -19
  80. package/coverage/lcov-report/src/api/controllers/static/index.html +18 -18
  81. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +56 -71
  82. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +60 -60
  83. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +56 -50
  84. package/coverage/lcov-report/src/api/controllers/table/index.html +48 -48
  85. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +157 -70
  86. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +58 -61
  87. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +109 -112
  88. package/coverage/lcov-report/src/api/controllers/templates.ts.html +21 -21
  89. package/coverage/lcov-report/src/api/controllers/user.ts.html +159 -135
  90. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +64 -19
  91. package/coverage/lcov-report/src/api/controllers/view/index.html +38 -38
  92. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +97 -133
  93. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +31 -31
  94. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +37 -37
  95. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +69 -63
  96. package/coverage/lcov-report/src/api/index.html +15 -15
  97. package/coverage/lcov-report/src/api/index.ts.html +40 -40
  98. package/coverage/lcov-report/src/api/routes/analytics.ts.html +10 -10
  99. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +11 -11
  100. package/coverage/lcov-report/src/api/routes/application.ts.html +46 -13
  101. package/coverage/lcov-report/src/api/routes/auth.ts.html +9 -9
  102. package/coverage/lcov-report/src/api/routes/automation.ts.html +14 -14
  103. package/coverage/lcov-report/src/api/routes/backup.ts.html +11 -11
  104. package/coverage/lcov-report/src/api/routes/cloud.ts.html +11 -11
  105. package/coverage/lcov-report/src/api/routes/component.ts.html +11 -11
  106. package/coverage/lcov-report/src/api/routes/datasource.ts.html +12 -12
  107. package/coverage/lcov-report/src/api/routes/deploy.ts.html +11 -14
  108. package/coverage/lcov-report/src/api/routes/dev.ts.html +17 -17
  109. package/coverage/lcov-report/src/api/routes/index.html +68 -68
  110. package/coverage/lcov-report/src/api/routes/index.ts.html +49 -40
  111. package/coverage/lcov-report/src/api/routes/integration.ts.html +11 -11
  112. package/coverage/lcov-report/src/api/routes/layout.ts.html +11 -11
  113. package/coverage/lcov-report/src/api/routes/metadata.ts.html +12 -12
  114. package/coverage/lcov-report/src/api/routes/migrations.ts.html +10 -10
  115. package/coverage/lcov-report/src/api/routes/permission.ts.html +12 -12
  116. package/coverage/lcov-report/src/api/routes/plugin.ts.html +10 -10
  117. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +147 -15
  118. package/coverage/lcov-report/src/api/routes/public/index.html +27 -27
  119. package/coverage/lcov-report/src/api/routes/public/index.ts.html +60 -60
  120. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
  121. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
  122. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +11 -11
  123. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +14 -14
  124. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +14 -14
  125. package/coverage/lcov-report/src/api/routes/public/tests/index.html +7 -7
  126. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +5 -5
  127. package/coverage/lcov-report/src/api/routes/public/users.ts.html +14 -14
  128. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +21 -21
  129. package/coverage/lcov-report/src/api/routes/public/utils/index.html +5 -5
  130. package/coverage/lcov-report/src/api/routes/query.ts.html +14 -14
  131. package/coverage/lcov-report/src/api/routes/role.ts.html +12 -12
  132. package/coverage/lcov-report/src/api/routes/routing.ts.html +11 -11
  133. package/coverage/lcov-report/src/api/routes/row.ts.html +14 -14
  134. package/coverage/lcov-report/src/api/routes/screen.ts.html +12 -12
  135. package/coverage/lcov-report/src/api/routes/script.ts.html +13 -13
  136. package/coverage/lcov-report/src/api/routes/static.ts.html +18 -18
  137. package/coverage/lcov-report/src/api/routes/table.ts.html +29 -98
  138. package/coverage/lcov-report/src/api/routes/templates.ts.html +11 -11
  139. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +27 -27
  140. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +23 -23
  141. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +33 -33
  142. package/coverage/lcov-report/src/api/routes/user.ts.html +12 -12
  143. package/coverage/lcov-report/src/api/routes/utils/index.html +3 -3
  144. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +44 -44
  145. package/coverage/lcov-report/src/api/routes/view.ts.html +13 -13
  146. package/coverage/lcov-report/src/api/routes/webhook.ts.html +13 -13
  147. package/coverage/lcov-report/src/app.ts.html +53 -47
  148. package/coverage/lcov-report/src/automations/actions.ts.html +31 -31
  149. package/coverage/lcov-report/src/automations/automationUtils.ts.html +127 -55
  150. package/coverage/lcov-report/src/automations/bullboard.ts.html +19 -19
  151. package/coverage/lcov-report/src/automations/index.html +54 -54
  152. package/coverage/lcov-report/src/automations/index.ts.html +23 -23
  153. package/coverage/lcov-report/src/automations/logging/index.html +3 -3
  154. package/coverage/lcov-report/src/automations/logging/index.ts.html +15 -15
  155. package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
  156. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +9 -9
  157. package/coverage/lcov-report/src/automations/steps/delay.ts.html +7 -7
  158. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +9 -9
  159. package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
  160. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
  161. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
  162. package/coverage/lcov-report/src/automations/steps/filter.ts.html +12 -12
  163. package/coverage/lcov-report/src/automations/steps/index.html +129 -129
  164. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +10 -10
  165. package/coverage/lcov-report/src/automations/steps/loop.ts.html +5 -5
  166. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +19 -19
  167. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +43 -43
  168. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
  169. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +19 -19
  170. package/coverage/lcov-report/src/automations/steps/slack.ts.html +10 -10
  171. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +12 -12
  172. package/coverage/lcov-report/src/automations/steps/utils.ts.html +18 -18
  173. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
  174. package/coverage/lcov-report/src/automations/tests/utilities/index.html +15 -15
  175. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +32 -32
  176. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +6 -6
  177. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +6 -6
  178. package/coverage/lcov-report/src/automations/triggerInfo/index.html +17 -17
  179. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +10 -10
  180. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +6 -6
  181. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +6 -6
  182. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +6 -6
  183. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +6 -6
  184. package/coverage/lcov-report/src/automations/triggers.ts.html +53 -38
  185. package/coverage/lcov-report/src/automations/utils.ts.html +80 -80
  186. package/coverage/lcov-report/src/constants/index.html +19 -19
  187. package/coverage/lcov-report/src/constants/index.ts.html +103 -103
  188. package/coverage/lcov-report/src/constants/layouts.ts.html +9 -9
  189. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  190. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +45 -45
  191. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +8 -8
  192. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +8 -8
  193. package/coverage/lcov-report/src/db/defaultData/index.html +43 -43
  194. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +8 -8
  195. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +8 -8
  196. package/coverage/lcov-report/src/db/dynamoClient.ts.html +26 -26
  197. package/coverage/lcov-report/src/db/inMemoryView.ts.html +13 -13
  198. package/coverage/lcov-report/src/db/index.html +34 -34
  199. package/coverage/lcov-report/src/db/index.ts.html +10 -10
  200. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +38 -38
  201. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +7 -7
  202. package/coverage/lcov-report/src/db/linkedRows/index.html +37 -37
  203. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +40 -40
  204. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +25 -25
  205. package/coverage/lcov-report/src/db/newid.ts.html +5 -5
  206. package/coverage/lcov-report/src/db/utils.ts.html +90 -90
  207. package/coverage/lcov-report/src/definitions/automations.ts.html +9 -6
  208. package/coverage/lcov-report/src/definitions/index.html +5 -20
  209. package/coverage/lcov-report/src/environment.ts.html +44 -32
  210. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +14 -14
  211. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +8 -8
  212. package/coverage/lcov-report/src/events/index.html +20 -20
  213. package/coverage/lcov-report/src/events/index.ts.html +7 -7
  214. package/coverage/lcov-report/src/events/utils.ts.html +11 -11
  215. package/coverage/lcov-report/src/index.html +47 -47
  216. package/coverage/lcov-report/src/index.ts.html +8 -8
  217. package/coverage/lcov-report/src/integrations/airtable.ts.html +10 -10
  218. package/coverage/lcov-report/src/integrations/arangodb.ts.html +9 -9
  219. package/coverage/lcov-report/src/integrations/base/index.html +29 -29
  220. package/coverage/lcov-report/src/integrations/base/query.ts.html +15 -9
  221. package/coverage/lcov-report/src/integrations/base/sql.ts.html +38 -38
  222. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +23 -23
  223. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  224. package/coverage/lcov-report/src/integrations/couchdb.ts.html +109 -31
  225. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +17 -17
  226. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +27 -15
  227. package/coverage/lcov-report/src/integrations/firebase.ts.html +12 -12
  228. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +42 -42
  229. package/coverage/lcov-report/src/integrations/index.html +130 -130
  230. package/coverage/lcov-report/src/integrations/index.ts.html +50 -62
  231. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +31 -31
  232. package/coverage/lcov-report/src/integrations/mongodb.ts.html +421 -289
  233. package/coverage/lcov-report/src/integrations/mysql.ts.html +28 -28
  234. package/coverage/lcov-report/src/integrations/oracle.ts.html +31 -31
  235. package/coverage/lcov-report/src/integrations/postgres.ts.html +54 -54
  236. package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
  237. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +24 -159
  238. package/coverage/lcov-report/src/integrations/redis.ts.html +8 -8
  239. package/coverage/lcov-report/src/integrations/rest.ts.html +43 -52
  240. package/coverage/lcov-report/src/integrations/s3.ts.html +17 -17
  241. package/coverage/lcov-report/src/integrations/snowflake.ts.html +15 -15
  242. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  243. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  244. package/coverage/lcov-report/src/integrations/utils.ts.html +54 -54
  245. package/coverage/lcov-report/src/middleware/appInfo.ts.html +11 -11
  246. package/coverage/lcov-report/src/middleware/authorized.ts.html +49 -37
  247. package/coverage/lcov-report/src/middleware/builder.ts.html +26 -26
  248. package/coverage/lcov-report/src/middleware/currentapp.ts.html +50 -47
  249. package/coverage/lcov-report/src/middleware/index.html +40 -40
  250. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +10 -10
  251. package/coverage/lcov-report/src/middleware/publicApi.ts.html +9 -9
  252. package/coverage/lcov-report/src/middleware/resourceId.ts.html +23 -23
  253. package/coverage/lcov-report/src/middleware/selfhost.ts.html +2 -2
  254. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  255. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +6 -6
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +7 -7
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +7 -7
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +31 -31
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +8 -8
  260. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +13 -13
  261. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +7 -7
  262. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +7 -7
  263. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +8 -8
  264. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +21 -21
  265. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +17 -14
  266. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +19 -19
  267. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +9 -9
  268. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +13 -13
  269. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +23 -23
  270. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +26 -26
  271. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +7 -7
  272. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +14 -14
  273. package/coverage/lcov-report/src/migrations/functions/index.html +18 -18
  274. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +8 -8
  275. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +11 -11
  276. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +11 -11
  277. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +3 -3
  278. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +6 -6
  279. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +8 -8
  280. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +7 -7
  281. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +4 -4
  282. package/coverage/lcov-report/src/migrations/index.html +15 -15
  283. package/coverage/lcov-report/src/migrations/index.ts.html +43 -43
  284. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +4 -4
  285. package/coverage/lcov-report/src/migrations/tests/index.html +6 -6
  286. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +3 -3
  287. package/coverage/lcov-report/src/sdk/app/applications/index.html +20 -20
  288. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +6 -6
  289. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
  290. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +15 -15
  291. package/coverage/lcov-report/src/sdk/app/automations/index.html +7 -7
  292. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +5 -5
  293. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +8 -8
  294. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +5 -5
  295. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +30 -30
  296. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +45 -57
  297. package/coverage/lcov-report/src/sdk/app/backups/index.html +42 -42
  298. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +7 -7
  299. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
  300. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +493 -0
  301. package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
  302. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
  303. package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
  304. package/coverage/lcov-report/src/{utilities/statusCodes.ts.html → sdk/app/queries/index.ts.html} +22 -28
  305. package/coverage/lcov-report/src/{definitions/datasource.ts.html → sdk/app/queries/queries.ts.html} +82 -82
  306. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +8 -8
  307. package/coverage/lcov-report/src/sdk/app/rows/index.html +8 -8
  308. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +6 -6
  309. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  310. package/coverage/lcov-report/src/sdk/app/tables/index.html +15 -15
  311. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +29 -20
  312. package/coverage/lcov-report/src/sdk/index.html +7 -7
  313. package/coverage/lcov-report/src/sdk/index.ts.html +24 -12
  314. package/coverage/lcov-report/src/sdk/users/index.html +10 -10
  315. package/coverage/lcov-report/src/sdk/users/index.ts.html +5 -5
  316. package/coverage/lcov-report/src/sdk/users/utils.ts.html +35 -35
  317. package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
  318. package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
  319. package/coverage/lcov-report/src/startup.ts.html +48 -63
  320. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +218 -152
  321. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +20 -20
  322. package/coverage/lcov-report/src/tests/utilities/index.html +33 -33
  323. package/coverage/lcov-report/src/tests/utilities/index.ts.html +2 -2
  324. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +235 -46
  325. package/coverage/lcov-report/src/threads/automation.ts.html +212 -251
  326. package/coverage/lcov-report/src/threads/index.html +46 -46
  327. package/coverage/lcov-report/src/threads/index.ts.html +39 -39
  328. package/coverage/lcov-report/src/threads/query.ts.html +140 -101
  329. package/coverage/lcov-report/src/threads/utils.ts.html +29 -29
  330. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +5 -5
  331. package/coverage/lcov-report/src/utilities/centralPath.ts.html +11 -11
  332. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  333. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +20 -20
  334. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +601 -0
  335. package/coverage/lcov-report/src/utilities/fileSystem/index.html +88 -28
  336. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  337. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +277 -0
  338. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +9 -9
  339. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  340. package/coverage/lcov-report/src/utilities/global.ts.html +60 -60
  341. package/coverage/lcov-report/src/utilities/index.html +89 -119
  342. package/coverage/lcov-report/src/utilities/index.ts.html +40 -172
  343. package/coverage/lcov-report/src/utilities/redis.ts.html +38 -38
  344. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  345. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  346. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +34 -34
  347. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +102 -75
  348. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +9 -9
  349. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +54 -54
  350. package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +174 -234
  351. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +33 -33
  352. package/coverage/lcov-report/src/utilities/security.ts.html +13 -13
  353. package/coverage/lcov-report/src/utilities/usageQuota/index.html +9 -9
  354. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +38 -38
  355. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +3 -3
  356. package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
  357. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +89 -62
  358. package/coverage/lcov-report/src/watch.ts.html +20 -20
  359. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  360. package/coverage/lcov.info +13499 -12800
  361. package/dist/api/controllers/application.js +120 -109
  362. package/dist/api/controllers/cloud.js +6 -2
  363. package/dist/api/controllers/datasource.js +24 -15
  364. package/dist/api/controllers/deploy/index.js +43 -60
  365. package/dist/api/controllers/plugin/index.js +6 -6
  366. package/dist/api/controllers/public/applications.js +22 -1
  367. package/dist/api/controllers/query/index.js +23 -13
  368. package/dist/api/controllers/row/ExternalRequest.js +12 -4
  369. package/dist/api/controllers/row/external.js +20 -13
  370. package/dist/api/controllers/row/internal.js +52 -27
  371. package/dist/api/controllers/row/staticFormula.js +1 -1
  372. package/dist/api/controllers/row/utils.js +35 -3
  373. package/dist/api/controllers/static/index.js +47 -47
  374. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  375. package/dist/api/controllers/table/external.js +16 -35
  376. package/dist/api/controllers/table/index.js +44 -15
  377. package/dist/api/controllers/table/internal.js +6 -7
  378. package/dist/api/controllers/table/utils.js +9 -9
  379. package/dist/api/controllers/user.js +14 -6
  380. package/dist/api/controllers/view/exporters.js +22 -6
  381. package/dist/api/controllers/view/index.js +23 -58
  382. package/dist/api/controllers/view/viewBuilder.js +15 -2
  383. package/dist/api/controllers/webhook.js +45 -43
  384. package/dist/api/routes/analytics.js +2 -1
  385. package/dist/api/routes/apikeys.js +2 -1
  386. package/dist/api/routes/application.js +5 -1
  387. package/dist/api/routes/auth.js +2 -1
  388. package/dist/api/routes/automation.js +2 -1
  389. package/dist/api/routes/backup.js +2 -1
  390. package/dist/api/routes/cloud.js +2 -1
  391. package/dist/api/routes/component.js +2 -1
  392. package/dist/api/routes/datasource.js +2 -1
  393. package/dist/api/routes/deploy.js +3 -3
  394. package/dist/api/routes/dev.js +2 -1
  395. package/dist/api/routes/index.js +2 -0
  396. package/dist/api/routes/integration.js +2 -1
  397. package/dist/api/routes/layout.js +2 -1
  398. package/dist/api/routes/metadata.js +2 -1
  399. package/dist/api/routes/migrations.js +2 -1
  400. package/dist/api/routes/permission.js +2 -1
  401. package/dist/api/routes/public/applications.js +37 -0
  402. package/dist/api/routes/public/middleware/mapper.js +3 -0
  403. package/dist/api/routes/query.js +2 -1
  404. package/dist/api/routes/role.js +2 -1
  405. package/dist/api/routes/routing.js +2 -1
  406. package/dist/api/routes/row.js +2 -2
  407. package/dist/api/routes/screen.js +2 -1
  408. package/dist/api/routes/script.js +2 -1
  409. package/dist/api/routes/static.js +6 -5
  410. package/dist/api/routes/table.js +8 -38
  411. package/dist/api/routes/templates.js +2 -1
  412. package/dist/api/routes/user.js +2 -1
  413. package/dist/api/routes/utils/validators.js +1 -1
  414. package/dist/api/routes/view.js +2 -1
  415. package/dist/api/routes/webhook.js +2 -1
  416. package/dist/app.js +9 -7
  417. package/dist/automations/automationUtils.js +26 -1
  418. package/dist/automations/logging/index.js +5 -25
  419. package/dist/automations/triggers.js +1 -0
  420. package/dist/db/index.js +5 -2
  421. package/dist/db/linkedRows/LinkController.js +2 -1
  422. package/dist/db/linkedRows/LinkDocument.js +2 -1
  423. package/dist/db/newid.js +4 -2
  424. package/dist/definitions/datasource.js +0 -6
  425. package/dist/environment.js +7 -2
  426. package/dist/events/AutomationEmitter.js +2 -1
  427. package/dist/events/BudibaseEmitter.js +2 -1
  428. package/dist/events/index.js +2 -1
  429. package/dist/index.js +2 -2
  430. package/dist/integrations/base/query.js +7 -2
  431. package/dist/integrations/base/sqlTable.js +14 -14
  432. package/dist/integrations/couchdb.js +34 -8
  433. package/dist/integrations/dynamodb.js +8 -5
  434. package/dist/integrations/elasticsearch.js +7 -3
  435. package/dist/integrations/googlesheets.js +1 -1
  436. package/dist/integrations/index.js +6 -7
  437. package/dist/integrations/mongodb.js +311 -271
  438. package/dist/integrations/mysql.js +2 -2
  439. package/dist/integrations/queries/sql.js +73 -100
  440. package/dist/integrations/rest.js +16 -18
  441. package/dist/middleware/authorized.js +2 -1
  442. package/dist/middleware/builder.js +4 -2
  443. package/dist/middleware/currentapp.js +6 -3
  444. package/dist/middleware/publicApi.js +4 -2
  445. package/dist/middleware/selfhost.js +4 -1
  446. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  447. package/dist/package.json +12 -8
  448. package/dist/sdk/app/backups/imports.js +2 -6
  449. package/dist/sdk/app/datasources/datasources.js +147 -0
  450. package/dist/sdk/app/datasources/index.js +27 -0
  451. package/dist/sdk/app/queries/index.js +27 -0
  452. package/dist/sdk/app/queries/queries.js +60 -0
  453. package/dist/sdk/app/tables/index.js +6 -2
  454. package/dist/sdk/index.js +4 -0
  455. package/dist/sdk/utils/index.js +29 -0
  456. package/dist/startup.js +17 -17
  457. package/dist/threads/automation.js +22 -35
  458. package/dist/threads/index.js +4 -4
  459. package/dist/threads/query.js +27 -13
  460. package/dist/tsconfig.build.tsbuildinfo +1 -1
  461. package/dist/utilities/fileSystem/app.js +97 -0
  462. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  463. package/dist/utilities/fileSystem/filesystem.js +184 -0
  464. package/dist/utilities/fileSystem/index.js +18 -342
  465. package/dist/utilities/fileSystem/plugin.js +66 -0
  466. package/dist/utilities/fileSystem/template.js +47 -0
  467. package/dist/utilities/index.js +1 -44
  468. package/dist/utilities/rowProcessor/index.js +12 -4
  469. package/dist/utilities/schema.js +108 -0
  470. package/dist/utilities/scriptRunner.js +2 -1
  471. package/dist/utilities/statusCodes.js +2 -1
  472. package/dist/utilities/workerRequests.js +2 -0
  473. package/dist/watch.js +2 -25
  474. package/jest.config.ts +5 -2
  475. package/package.json +13 -9
  476. package/scripts/dev/manage.js +3 -2
  477. package/specs/openapi.json +84 -0
  478. package/specs/openapi.yaml +53 -0
  479. package/specs/resources/application.js +19 -0
  480. package/src/api/controllers/application.ts +142 -110
  481. package/src/api/controllers/auth.ts +2 -2
  482. package/src/api/controllers/cloud.ts +10 -6
  483. package/src/api/controllers/datasource.ts +33 -25
  484. package/src/api/controllers/deploy/Deployment.ts +1 -0
  485. package/src/api/controllers/deploy/index.ts +40 -58
  486. package/src/api/controllers/plugin/index.ts +14 -9
  487. package/src/api/controllers/public/applications.ts +17 -0
  488. package/src/api/controllers/query/index.ts +49 -41
  489. package/src/api/controllers/row/ExternalRequest.ts +8 -3
  490. package/src/api/controllers/row/external.ts +24 -14
  491. package/src/api/controllers/row/internal.ts +66 -41
  492. package/src/api/controllers/row/staticFormula.ts +5 -2
  493. package/src/api/controllers/row/utils.ts +42 -3
  494. package/src/api/controllers/static/index.ts +22 -27
  495. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  496. package/src/api/controllers/table/external.ts +18 -16
  497. package/src/api/controllers/table/index.ts +46 -17
  498. package/src/api/controllers/table/internal.ts +6 -7
  499. package/src/api/controllers/table/utils.ts +12 -13
  500. package/src/api/controllers/user.ts +21 -13
  501. package/src/api/controllers/view/exporters.ts +20 -5
  502. package/src/api/controllers/view/index.ts +30 -42
  503. package/src/api/controllers/view/tests/viewBuilder.spec.js +1 -1
  504. package/src/api/controllers/view/viewBuilder.ts +1 -1
  505. package/src/api/controllers/webhook.ts +48 -46
  506. package/src/api/routes/analytics.ts +1 -1
  507. package/src/api/routes/apikeys.ts +1 -1
  508. package/src/api/routes/application.ts +12 -1
  509. package/src/api/routes/auth.ts +1 -1
  510. package/src/api/routes/automation.ts +1 -1
  511. package/src/api/routes/backup.ts +1 -1
  512. package/src/api/routes/cloud.ts +1 -1
  513. package/src/api/routes/component.ts +1 -1
  514. package/src/api/routes/datasource.ts +1 -1
  515. package/src/api/routes/deploy.ts +1 -2
  516. package/src/api/routes/dev.ts +1 -1
  517. package/src/api/routes/index.ts +6 -3
  518. package/src/api/routes/integration.ts +1 -1
  519. package/src/api/routes/layout.ts +1 -1
  520. package/src/api/routes/metadata.ts +1 -1
  521. package/src/api/routes/migrations.ts +1 -1
  522. package/src/api/routes/permission.ts +1 -1
  523. package/src/api/routes/public/applications.ts +44 -0
  524. package/src/api/routes/public/middleware/mapper.ts +4 -0
  525. package/src/api/routes/query.ts +1 -1
  526. package/src/api/routes/role.ts +1 -1
  527. package/src/api/routes/routing.ts +1 -1
  528. package/src/api/routes/row.ts +1 -1
  529. package/src/api/routes/screen.ts +1 -1
  530. package/src/api/routes/script.ts +1 -1
  531. package/src/api/routes/static.ts +2 -2
  532. package/src/api/routes/table.ts +16 -39
  533. package/src/api/routes/templates.ts +1 -1
  534. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +0 -0
  535. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +94 -18
  536. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -6
  537. package/src/api/routes/tests/cloud.spec.ts +65 -0
  538. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  539. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  540. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  541. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +56 -14
  542. package/src/api/routes/tests/misc.spec.js +4 -10
  543. package/src/api/routes/tests/permissions.spec.js +1 -1
  544. package/src/api/routes/tests/plugin.spec.ts +179 -0
  545. package/src/api/routes/tests/routing.spec.js +1 -2
  546. package/src/api/routes/tests/row.spec.js +4 -2
  547. package/src/api/routes/tests/static.spec.js +2 -17
  548. package/src/api/routes/tests/table.spec.js +16 -32
  549. package/src/api/routes/tests/user.spec.js +105 -0
  550. package/src/api/routes/tests/utilities/TestFunctions.ts +1 -1
  551. package/src/api/routes/tests/utilities/index.ts +2 -2
  552. package/src/api/routes/tests/webhook.spec.js +1 -1
  553. package/src/api/routes/user.ts +1 -1
  554. package/src/api/routes/utils/validators.ts +1 -1
  555. package/src/api/routes/view.ts +1 -1
  556. package/src/api/routes/webhook.ts +1 -1
  557. package/src/app.ts +5 -3
  558. package/src/automations/automationUtils.ts +24 -0
  559. package/src/automations/logging/index.ts +1 -1
  560. package/src/automations/tests/bash.spec.js +34 -0
  561. package/src/automations/tests/discord.spec.js +27 -0
  562. package/src/automations/tests/executeQuery.spec.js +49 -0
  563. package/src/automations/tests/executeScript.spec.js +48 -0
  564. package/src/automations/tests/loop.spec.ts +45 -0
  565. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  566. package/src/automations/tests/serverLog.spec.js +22 -0
  567. package/src/automations/tests/utilities/index.ts +2 -2
  568. package/src/automations/tests/zapier.spec.js +27 -0
  569. package/src/automations/triggers.ts +6 -1
  570. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  571. package/src/db/index.ts +1 -1
  572. package/src/db/linkedRows/LinkController.ts +1 -1
  573. package/src/db/linkedRows/LinkDocument.ts +1 -1
  574. package/src/db/newid.ts +1 -1
  575. package/src/db/tests/linkController.spec.js +1 -1
  576. package/src/definitions/automations.ts +1 -0
  577. package/src/definitions/datasource.ts +0 -41
  578. package/src/definitions/openapi.ts +10 -0
  579. package/src/environment.ts +6 -2
  580. package/src/events/AutomationEmitter.ts +1 -1
  581. package/src/events/BudibaseEmitter.ts +1 -1
  582. package/src/events/index.ts +1 -1
  583. package/src/index.ts +1 -1
  584. package/src/integrations/base/query.ts +3 -1
  585. package/src/integrations/base/sqlTable.ts +1 -1
  586. package/src/integrations/couchdb.ts +40 -14
  587. package/src/integrations/dynamodb.ts +3 -3
  588. package/src/integrations/elasticsearch.ts +8 -4
  589. package/src/integrations/googlesheets.ts +1 -1
  590. package/src/integrations/index.ts +5 -9
  591. package/src/integrations/mongodb.ts +315 -271
  592. package/src/integrations/mysql.ts +1 -1
  593. package/src/integrations/queries/sql.ts +5 -50
  594. package/src/integrations/rest.ts +16 -19
  595. package/src/integrations/tests/couchdb.spec.ts +33 -21
  596. package/src/integrations/tests/rest.spec.ts +19 -15
  597. package/src/middleware/authorized.ts +5 -1
  598. package/src/middleware/builder.ts +1 -1
  599. package/src/middleware/currentapp.ts +4 -3
  600. package/src/middleware/publicApi.ts +1 -1
  601. package/src/middleware/selfhost.ts +1 -1
  602. package/src/middleware/tests/authorized.spec.js +1 -1
  603. package/src/middleware/tests/currentapp.spec.js +1 -1
  604. package/src/middleware/tests/selfhost.spec.js +1 -1
  605. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  606. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
  607. package/src/sdk/app/backups/imports.ts +2 -6
  608. package/src/sdk/app/datasources/datasources.ts +136 -0
  609. package/src/sdk/app/datasources/index.ts +5 -0
  610. package/src/sdk/app/queries/index.ts +5 -0
  611. package/src/sdk/app/queries/queries.ts +50 -0
  612. package/src/sdk/app/tables/index.ts +6 -3
  613. package/src/sdk/index.ts +4 -0
  614. package/src/sdk/tests/attachments.spec.ts +1 -4
  615. package/src/sdk/utils/index.ts +16 -0
  616. package/src/startup.ts +3 -8
  617. package/src/tests/jestEnv.ts +13 -0
  618. package/src/tests/jestSetup.ts +4 -15
  619. package/src/tests/utilities/TestConfiguration.ts +38 -16
  620. package/src/tests/utilities/structures.ts +65 -2
  621. package/src/threads/automation.ts +22 -35
  622. package/src/threads/definitions.ts +3 -0
  623. package/src/threads/index.ts +1 -1
  624. package/src/threads/query.ts +28 -15
  625. package/src/utilities/fileSystem/app.ts +86 -0
  626. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  627. package/src/utilities/fileSystem/filesystem.ts +172 -0
  628. package/src/utilities/fileSystem/index.ts +5 -348
  629. package/src/utilities/fileSystem/plugin.ts +64 -0
  630. package/src/utilities/fileSystem/template.ts +36 -0
  631. package/src/utilities/index.ts +1 -45
  632. package/src/utilities/rowProcessor/index.ts +17 -8
  633. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  634. package/src/utilities/schema.ts +141 -0
  635. package/src/utilities/scriptRunner.ts +1 -1
  636. package/src/utilities/statusCodes.ts +1 -1
  637. package/src/utilities/workerRequests.ts +10 -1
  638. package/src/watch.ts +1 -1
  639. package/tsconfig.build.json +2 -0
  640. package/tsconfig.json +2 -1
  641. package/builder/assets/index.96b9ffed.css +0 -6
  642. package/builder/assets/index.fae8f9eb.js +0 -1024
  643. package/coverage/lcov-report/src/utilities/plugins.ts.html +0 -151
  644. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  645. package/dist/api/routes/tests/utilities/index.js +0 -131
  646. package/dist/automations/tests/utilities/index.js +0 -81
  647. package/dist/tests/utilities/TestConfiguration.js +0 -562
  648. package/dist/tests/utilities/controllers.js +0 -40
  649. package/dist/tests/utilities/structures.js +0 -168
  650. package/dist/utilities/csvParser.js +0 -152
  651. package/dist/utilities/plugins.js +0 -26
  652. package/src/api/routes/tests/deployment.spec.ts +0 -25
  653. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  654. package/src/utilities/csvParser.ts +0 -161
  655. package/src/utilities/plugins.ts +0 -22
  656. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  657. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -8,26 +8,27 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.getSignedUploadURL = exports.serveClientLibrary = exports.serveBuilderPreview = exports.serveApp = exports.deleteObjects = exports.uploadFile = exports.serveBuilder = exports.toggleBetaUiFeature = void 0;
13
- const plugins_1 = require("../../../utilities/plugins");
14
16
  require("svelte/register");
15
- const send = require("koa-send");
16
- const { resolve, join } = require("../../../utilities/centralPath");
17
+ const centralPath_1 = require("../../../utilities/centralPath");
17
18
  const uuid = require("uuid");
18
- const { ObjectStoreBuckets } = require("../../../constants");
19
- const { processString } = require("@budibase/string-templates");
20
- const { loadHandlebarsFile, NODE_MODULES_PATH, TOP_LEVEL_PATH, } = require("../../../utilities/fileSystem");
21
- const env = require("../../../environment");
22
- const { clientLibraryPath } = require("../../../utilities");
23
- const { attachmentsRelativeURL } = require("../../../utilities");
24
- const { DocumentType } = require("../../../db/utils");
25
- const { context, objectStore, utils } = require("@budibase/backend-core");
26
- const AWS = require("aws-sdk");
27
- const fs = require("fs");
19
+ const constants_1 = require("../../../constants");
20
+ const string_templates_1 = require("@budibase/string-templates");
21
+ const fileSystem_1 = require("../../../utilities/fileSystem");
22
+ const environment_1 = __importDefault(require("../../../environment"));
23
+ const utils_1 = require("../../../db/utils");
24
+ const backend_core_1 = require("@budibase/backend-core");
25
+ const aws_sdk_1 = __importDefault(require("aws-sdk"));
26
+ const fs_1 = __importDefault(require("fs"));
27
+ const sdk_1 = __importDefault(require("../../../sdk"));
28
+ const send = require("koa-send");
28
29
  function prepareUpload({ s3Key, bucket, metadata, file }) {
29
30
  return __awaiter(this, void 0, void 0, function* () {
30
- const response = yield objectStore.upload({
31
+ const response = yield backend_core_1.objectStore.upload({
31
32
  bucket,
32
33
  metadata,
33
34
  filename: s3Key,
@@ -38,7 +39,7 @@ function prepareUpload({ s3Key, bucket, metadata, file }) {
38
39
  return {
39
40
  size: file.size,
40
41
  name: file.name,
41
- url: attachmentsRelativeURL(response.Key),
42
+ url: backend_core_1.objectStore.getAppFileUrl(s3Key),
42
43
  extension: [...file.name.split(".")].pop(),
43
44
  key: response.Key,
44
45
  };
@@ -48,19 +49,19 @@ const toggleBetaUiFeature = function (ctx) {
48
49
  return __awaiter(this, void 0, void 0, function* () {
49
50
  const cookieName = `beta:${ctx.params.feature}`;
50
51
  if (ctx.cookies.get(cookieName)) {
51
- utils.clearCookie(ctx, cookieName);
52
+ backend_core_1.utils.clearCookie(ctx, cookieName);
52
53
  ctx.body = {
53
54
  message: `${ctx.params.feature} disabled`,
54
55
  };
55
56
  return;
56
57
  }
57
- let builderPath = resolve(TOP_LEVEL_PATH, "new_design_ui");
58
+ let builderPath = (0, centralPath_1.resolve)(fileSystem_1.TOP_LEVEL_PATH, "new_design_ui");
58
59
  // // download it from S3
59
- if (!fs.existsSync(builderPath)) {
60
- fs.mkdirSync(builderPath);
60
+ if (!fs_1.default.existsSync(builderPath)) {
61
+ fs_1.default.mkdirSync(builderPath);
61
62
  }
62
- yield objectStore.downloadTarballDirect("https://cdn.budi.live/beta:design_ui/new_ui.tar.gz", builderPath);
63
- utils.setCookie(ctx, {}, cookieName);
63
+ yield backend_core_1.objectStore.downloadTarballDirect("https://cdn.budi.live/beta:design_ui/new_ui.tar.gz", builderPath);
64
+ backend_core_1.utils.setCookie(ctx, {}, cookieName);
64
65
  ctx.body = {
65
66
  message: `${ctx.params.feature} enabled`,
66
67
  };
@@ -69,7 +70,7 @@ const toggleBetaUiFeature = function (ctx) {
69
70
  exports.toggleBetaUiFeature = toggleBetaUiFeature;
70
71
  const serveBuilder = function (ctx) {
71
72
  return __awaiter(this, void 0, void 0, function* () {
72
- const builderPath = resolve(TOP_LEVEL_PATH, "builder");
73
+ const builderPath = (0, centralPath_1.resolve)(fileSystem_1.TOP_LEVEL_PATH, "builder");
73
74
  yield send(ctx, ctx.file, { root: builderPath });
74
75
  });
75
76
  };
@@ -85,8 +86,8 @@ const uploadFile = function (ctx) {
85
86
  const processedFileName = `${uuid.v4()}.${fileExtension}`;
86
87
  return prepareUpload({
87
88
  file,
88
- s3Key: `${ctx.appId}/attachments/${processedFileName}`,
89
- bucket: ObjectStoreBuckets.APPS,
89
+ s3Key: `${backend_core_1.context.getProdAppId()}/attachments/${processedFileName}`,
90
+ bucket: constants_1.ObjectStoreBuckets.APPS,
90
91
  });
91
92
  }));
92
93
  ctx.body = yield Promise.all(uploads);
@@ -95,28 +96,28 @@ const uploadFile = function (ctx) {
95
96
  exports.uploadFile = uploadFile;
96
97
  const deleteObjects = function (ctx) {
97
98
  return __awaiter(this, void 0, void 0, function* () {
98
- ctx.body = yield objectStore.deleteFiles(ObjectStoreBuckets.APPS, ctx.request.body.keys);
99
+ ctx.body = yield backend_core_1.objectStore.deleteFiles(constants_1.ObjectStoreBuckets.APPS, ctx.request.body.keys);
99
100
  });
100
101
  };
101
102
  exports.deleteObjects = deleteObjects;
102
103
  const serveApp = function (ctx) {
103
104
  return __awaiter(this, void 0, void 0, function* () {
104
- const db = context.getAppDB({ skip_setup: true });
105
- const appInfo = yield db.get(DocumentType.APP_METADATA);
106
- let appId = context.getAppId();
107
- if (!env.isJest()) {
105
+ const db = backend_core_1.context.getAppDB({ skip_setup: true });
106
+ const appInfo = yield db.get(utils_1.DocumentType.APP_METADATA);
107
+ let appId = backend_core_1.context.getAppId();
108
+ if (!environment_1.default.isJest()) {
108
109
  const App = require("./templates/BudibaseApp.svelte").default;
109
- const plugins = (0, plugins_1.enrichPluginURLs)(appInfo.usedPlugins);
110
+ const plugins = backend_core_1.objectStore.enrichPluginURLs(appInfo.usedPlugins);
110
111
  const { head, html, css } = App.render({
111
112
  metaImage: "https://res.cloudinary.com/daog6scxm/image/upload/v1666109324/meta-images/budibase-meta-image_uukc1m.png",
112
113
  title: appInfo.name,
113
- production: env.isProd(),
114
+ production: environment_1.default.isProd(),
114
115
  appId,
115
- clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
116
+ clientLibPath: backend_core_1.objectStore.clientLibraryUrl(appId, appInfo.version),
116
117
  usedPlugins: plugins,
117
118
  });
118
- const appHbs = loadHandlebarsFile(`${__dirname}/templates/app.hbs`);
119
- ctx.body = yield processString(appHbs, {
119
+ const appHbs = (0, fileSystem_1.loadHandlebarsFile)(`${__dirname}/templates/app.hbs`);
120
+ ctx.body = yield (0, string_templates_1.processString)(appHbs, {
120
121
  head,
121
122
  body: html,
122
123
  style: css.code,
@@ -132,13 +133,13 @@ const serveApp = function (ctx) {
132
133
  exports.serveApp = serveApp;
133
134
  const serveBuilderPreview = function (ctx) {
134
135
  return __awaiter(this, void 0, void 0, function* () {
135
- const db = context.getAppDB({ skip_setup: true });
136
- const appInfo = yield db.get(DocumentType.APP_METADATA);
137
- if (!env.isJest()) {
138
- let appId = context.getAppId();
139
- const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`);
140
- ctx.body = yield processString(previewHbs, {
141
- clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
136
+ const db = backend_core_1.context.getAppDB({ skip_setup: true });
137
+ const appInfo = yield db.get(utils_1.DocumentType.APP_METADATA);
138
+ if (!environment_1.default.isJest()) {
139
+ let appId = backend_core_1.context.getAppId();
140
+ const previewHbs = (0, fileSystem_1.loadHandlebarsFile)(`${__dirname}/templates/preview.hbs`);
141
+ ctx.body = yield (0, string_templates_1.processString)(previewHbs, {
142
+ clientLibPath: backend_core_1.objectStore.clientLibraryUrl(appId, appInfo.version),
142
143
  });
143
144
  }
144
145
  else {
@@ -151,7 +152,7 @@ exports.serveBuilderPreview = serveBuilderPreview;
151
152
  const serveClientLibrary = function (ctx) {
152
153
  return __awaiter(this, void 0, void 0, function* () {
153
154
  return send(ctx, "budibase-client.js", {
154
- root: join(NODE_MODULES_PATH, "@budibase", "client", "dist"),
155
+ root: (0, centralPath_1.join)(fileSystem_1.NODE_MODULES_PATH, "@budibase", "client", "dist"),
155
156
  });
156
157
  });
157
158
  };
@@ -159,12 +160,11 @@ exports.serveClientLibrary = serveClientLibrary;
159
160
  const getSignedUploadURL = function (ctx) {
160
161
  var _a, _b, _c, _d;
161
162
  return __awaiter(this, void 0, void 0, function* () {
162
- const database = context.getAppDB();
163
163
  // Ensure datasource is valid
164
164
  let datasource;
165
165
  try {
166
166
  const { datasourceId } = ctx.params;
167
- datasource = yield database.get(datasourceId);
167
+ datasource = yield sdk_1.default.datasources.get(datasourceId, { enriched: true });
168
168
  if (!datasource) {
169
169
  ctx.throw(400, "The specified datasource could not be found");
170
170
  }
@@ -179,15 +179,15 @@ const getSignedUploadURL = function (ctx) {
179
179
  // Determine type of datasource and generate signed URL
180
180
  let signedUrl;
181
181
  let publicUrl;
182
- const awsRegion = ((_b = datasource === null || datasource === void 0 ? void 0 : datasource.config) === null || _b === void 0 ? void 0 : _b.region) || "eu-west-1";
183
- if (datasource.source === "S3") {
182
+ const awsRegion = (((_b = datasource === null || datasource === void 0 ? void 0 : datasource.config) === null || _b === void 0 ? void 0 : _b.region) || "eu-west-1");
183
+ if ((datasource === null || datasource === void 0 ? void 0 : datasource.source) === "S3") {
184
184
  const { bucket, key } = ctx.request.body || {};
185
185
  if (!bucket || !key) {
186
186
  ctx.throw(400, "bucket and key values are required");
187
187
  return;
188
188
  }
189
189
  try {
190
- const s3 = new AWS.S3({
190
+ const s3 = new aws_sdk_1.default.S3({
191
191
  region: awsRegion,
192
192
  accessKeyId: (_c = datasource === null || datasource === void 0 ? void 0 : datasource.config) === null || _c === void 0 ? void 0 : _c.accessKeyId,
193
193
  secretAccessKey: (_d = datasource === null || datasource === void 0 ? void 0 : datasource.config) === null || _d === void 0 ? void 0 : _d.secretAccessKey,
@@ -2,7 +2,6 @@
2
2
  export let title = ""
3
3
  export let favicon = ""
4
4
  export let metaImage = ""
5
- export let url = ""
6
5
 
7
6
  export let clientLibPath
8
7
  export let usedPlugins
@@ -1,27 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -40,9 +17,9 @@ const utils_1 = require("../../../integrations/utils");
40
17
  const utils_2 = require("./utils");
41
18
  const constants_1 = require("../../../constants");
42
19
  const query_1 = require("../../../integrations/base/query");
43
- const csvParser = __importStar(require("../../../utilities/csvParser"));
44
20
  const external_1 = require("../row/external");
45
21
  const backend_core_1 = require("@budibase/backend-core");
22
+ const schema_1 = require("../../../utilities/schema");
46
23
  const types_1 = require("@budibase/types");
47
24
  const sdk_1 = __importDefault(require("../../../sdk"));
48
25
  const { cloneDeep } = require("lodash/fp");
@@ -176,7 +153,7 @@ function save(ctx) {
176
153
  const table = ctx.request.body;
177
154
  const renamed = table === null || table === void 0 ? void 0 : table._rename;
178
155
  // can't do this right now
179
- delete table.dataImport;
156
+ delete table.rows;
180
157
  const datasourceId = getDatasourceId(ctx.request.body);
181
158
  // table doesn't exist already, note that it is created
182
159
  if (!table._id) {
@@ -191,7 +168,7 @@ function save(ctx) {
191
168
  ctx.throw(400, "A column type has changed.");
192
169
  }
193
170
  const db = backend_core_1.context.getAppDB();
194
- const datasource = yield db.get(datasourceId);
171
+ const datasource = yield sdk_1.default.datasources.get(datasourceId);
195
172
  if (!datasource.entities) {
196
173
  datasource.entities = {};
197
174
  }
@@ -265,12 +242,15 @@ function destroy(ctx) {
265
242
  }
266
243
  const datasourceId = getDatasourceId(tableToDelete);
267
244
  const db = backend_core_1.context.getAppDB();
268
- const datasource = yield db.get(datasourceId);
245
+ const datasource = yield sdk_1.default.datasources.get(datasourceId);
269
246
  const tables = datasource.entities;
270
247
  const operation = types_1.Operation.DELETE_TABLE;
271
- yield makeTableRequest(datasource, operation, tableToDelete, tables);
272
- cleanupRelationships(tableToDelete, tables);
273
- delete datasource.entities[tableToDelete.name];
248
+ if (tables) {
249
+ yield makeTableRequest(datasource, operation, tableToDelete, tables);
250
+ cleanupRelationships(tableToDelete, tables);
251
+ delete tables[tableToDelete.name];
252
+ datasource.entities = tables;
253
+ }
274
254
  yield db.put(datasource);
275
255
  return tableToDelete;
276
256
  });
@@ -279,15 +259,16 @@ exports.destroy = destroy;
279
259
  function bulkImport(ctx) {
280
260
  return __awaiter(this, void 0, void 0, function* () {
281
261
  const table = yield sdk_1.default.tables.getTable(ctx.params.tableId);
282
- const { dataImport } = ctx.request.body;
283
- if (!dataImport || !dataImport.schema || !dataImport.csvString) {
262
+ const { rows } = ctx.request.body;
263
+ const schema = table.schema;
264
+ if (!rows || !(0, schema_1.isRows)(rows) || !(0, schema_1.isSchema)(schema)) {
284
265
  ctx.throw(400, "Provided data import information is invalid.");
285
266
  }
286
- const rows = yield csvParser.transform(Object.assign(Object.assign({}, dataImport), { existingTable: table }));
267
+ const parsedRows = yield (0, schema_1.parse)(rows, schema);
287
268
  yield (0, external_1.handleRequest)(types_1.Operation.BULK_CREATE, table._id, {
288
- rows,
269
+ rows: parsedRows,
289
270
  });
290
- yield backend_core_1.events.rows.imported(table, "csv", rows.length);
271
+ yield backend_core_1.events.rows.imported(table, parsedRows.length);
291
272
  return table;
292
273
  });
293
274
  }
@@ -35,14 +35,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
36
  };
37
37
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.validateCSVSchema = exports.bulkImport = exports.destroy = exports.save = exports.find = exports.fetch = void 0;
38
+ exports.validateExistingTableImport = exports.validateNewTableImport = exports.csvToJson = exports.bulkImport = exports.destroy = exports.save = exports.find = exports.fetch = void 0;
39
39
  const internal = __importStar(require("./internal"));
40
40
  const external = __importStar(require("./external"));
41
- const csvParser = __importStar(require("../../../utilities/csvParser"));
41
+ const schema_1 = require("../../../utilities/schema");
42
42
  const utils_1 = require("../../../integrations/utils");
43
43
  const utils_2 = require("../../../db/utils");
44
44
  const backend_core_1 = require("@budibase/backend-core");
45
45
  const sdk_1 = __importDefault(require("../../../sdk"));
46
+ const csvtojson_1 = __importDefault(require("csvtojson"));
46
47
  function pickApi({ tableId, table }) {
47
48
  if (table && !tableId) {
48
49
  tableId = table._id;
@@ -87,7 +88,7 @@ function save(ctx) {
87
88
  return __awaiter(this, void 0, void 0, function* () {
88
89
  const appId = ctx.appId;
89
90
  const table = ctx.request.body;
90
- const importFormat = table.dataImport && table.dataImport.csvString ? "csv" : undefined;
91
+ const isImport = table.rows;
91
92
  const savedTable = yield pickApi({ table }).save(ctx);
92
93
  if (!table._id) {
93
94
  yield backend_core_1.events.table.created(savedTable);
@@ -95,8 +96,8 @@ function save(ctx) {
95
96
  else {
96
97
  yield backend_core_1.events.table.updated(savedTable);
97
98
  }
98
- if (importFormat) {
99
- yield backend_core_1.events.table.imported(savedTable, importFormat);
99
+ if (isImport) {
100
+ yield backend_core_1.events.table.imported(savedTable);
100
101
  }
101
102
  ctx.status = 200;
102
103
  ctx.message = `Table ${table.name} saved successfully.`;
@@ -132,19 +133,47 @@ function bulkImport(ctx) {
132
133
  });
133
134
  }
134
135
  exports.bulkImport = bulkImport;
135
- function validateCSVSchema(ctx) {
136
+ function csvToJson(ctx) {
136
137
  return __awaiter(this, void 0, void 0, function* () {
137
- // tableId being specified means its an import to an existing table
138
- const { csvString, schema = {}, tableId } = ctx.request.body;
139
- let existingTable;
138
+ const { csvString } = ctx.request.body;
139
+ const result = yield (0, csvtojson_1.default)().fromString(csvString);
140
+ ctx.status = 200;
141
+ ctx.body = result;
142
+ });
143
+ }
144
+ exports.csvToJson = csvToJson;
145
+ function validateNewTableImport(ctx) {
146
+ return __awaiter(this, void 0, void 0, function* () {
147
+ const { rows, schema } = ctx.request.body;
148
+ if ((0, schema_1.isRows)(rows) && (0, schema_1.isSchema)(schema)) {
149
+ ctx.status = 200;
150
+ ctx.body = (0, schema_1.validate)(rows, schema);
151
+ }
152
+ else {
153
+ ctx.status = 422;
154
+ }
155
+ });
156
+ }
157
+ exports.validateNewTableImport = validateNewTableImport;
158
+ function validateExistingTableImport(ctx) {
159
+ return __awaiter(this, void 0, void 0, function* () {
160
+ const { rows, tableId } = ctx.request.body;
161
+ let schema = null;
140
162
  if (tableId) {
141
- existingTable = yield sdk_1.default.tables.getTable(tableId);
163
+ const table = yield sdk_1.default.tables.getTable(tableId);
164
+ schema = table.schema;
142
165
  }
143
- let result = yield csvParser.parse(csvString, schema);
144
- if (existingTable) {
145
- result = csvParser.updateSchema({ schema: result, existingTable });
166
+ else {
167
+ ctx.status = 422;
168
+ return;
169
+ }
170
+ if (tableId && (0, schema_1.isRows)(rows) && (0, schema_1.isSchema)(schema)) {
171
+ ctx.status = 200;
172
+ ctx.body = (0, schema_1.validate)(rows, schema);
173
+ }
174
+ else {
175
+ ctx.status = 422;
146
176
  }
147
- ctx.body = { schema: result };
148
177
  });
149
178
  }
150
- exports.validateCSVSchema = validateCSVSchema;
179
+ exports.validateExistingTableImport = validateExistingTableImport;
@@ -29,13 +29,12 @@ const utils_1 = require("../../../db/utils");
29
29
  const constants_1 = require("../../../constants");
30
30
  const utils_2 = require("./utils");
31
31
  const backend_core_1 = require("@budibase/backend-core");
32
- const environment_1 = require("../../../environment");
32
+ const environment_1 = __importDefault(require("../../../environment"));
33
33
  const rowProcessor_1 = require("../../../utilities/rowProcessor");
34
34
  const bulkFormula_1 = require("./bulkFormula");
35
35
  const pro_1 = require("@budibase/pro");
36
36
  const lodash_1 = require("lodash");
37
37
  const fp_1 = require("lodash/fp");
38
- const environment_2 = __importDefault(require("../../../environment"));
39
38
  const sdk_1 = __importDefault(require("../../../sdk"));
40
39
  function checkAutoColumns(table, oldTable) {
41
40
  if (!table.schema) {
@@ -58,7 +57,7 @@ function checkAutoColumns(table, oldTable) {
58
57
  function save(ctx) {
59
58
  return __awaiter(this, void 0, void 0, function* () {
60
59
  const db = backend_core_1.context.getAppDB();
61
- const _a = ctx.request.body, { dataImport } = _a, rest = __rest(_a, ["dataImport"]);
60
+ const _a = ctx.request.body, { rows } = _a, rest = __rest(_a, ["rows"]);
62
61
  let tableToSave = Object.assign({ type: "table", _id: (0, utils_1.generateTableID)(), views: {} }, rest);
63
62
  // if the table obj had an _id then it will have been retrieved
64
63
  let oldTable;
@@ -76,7 +75,7 @@ function save(ctx) {
76
75
  const tableSaveFunctions = new utils_2.TableSaveFunctions({
77
76
  user: ctx.user,
78
77
  oldTable,
79
- dataImport,
78
+ importRows: rows,
80
79
  });
81
80
  tableToSave = yield tableSaveFunctions.before(tableToSave);
82
81
  // make sure that types don't change of a column, have to remove
@@ -166,7 +165,7 @@ function destroy(ctx) {
166
165
  // don't remove the table itself until very end
167
166
  yield db.remove(tableToDelete._id, tableToDelete._rev);
168
167
  // remove table search index
169
- if (!(0, environment_1.isTest)() || environment_2.default.COUCH_DB_URL) {
168
+ if (!environment_1.default.isTest() || environment_1.default.COUCH_DB_URL) {
170
169
  const currentIndexes = yield db.getIndexes();
171
170
  const existingIndex = currentIndexes.indexes.find((existing) => existing.name === `search:${ctx.params.tableId}`);
172
171
  if (existingIndex) {
@@ -187,8 +186,8 @@ exports.destroy = destroy;
187
186
  function bulkImport(ctx) {
188
187
  return __awaiter(this, void 0, void 0, function* () {
189
188
  const table = yield sdk_1.default.tables.getTable(ctx.params.tableId);
190
- const { dataImport } = ctx.request.body;
191
- yield (0, utils_2.handleDataImport)(ctx.user, table, dataImport);
189
+ const { rows } = ctx.request.body;
190
+ yield (0, utils_2.handleDataImport)(ctx.user, table, rows);
192
191
  return table;
193
192
  });
194
193
  }
@@ -13,7 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.TableSaveFunctions = exports.hasTypeChanged = exports.areSwitchableTypes = exports.foreignKeyStructure = exports.generateJunctionTableName = exports.generateForeignKey = exports.checkForViewUpdates = exports.checkStaticTables = exports.handleSearchIndexes = exports.handleDataImport = exports.importToRows = exports.makeSureTableUpToDate = exports.checkForColumnUpdates = exports.clearColumns = void 0;
16
- const csvParser_1 = require("../../../utilities/csvParser");
16
+ const schema_1 = require("../../../utilities/schema");
17
17
  const utils_1 = require("../../../db/utils");
18
18
  const lodash_1 = require("lodash");
19
19
  const constants_1 = require("../../../constants");
@@ -124,19 +124,19 @@ function importToRows(data, table, user = {}) {
124
124
  return finalData;
125
125
  }
126
126
  exports.importToRows = importToRows;
127
- function handleDataImport(user, table, dataImport) {
127
+ function handleDataImport(user, table, rows) {
128
128
  return __awaiter(this, void 0, void 0, function* () {
129
- if (!dataImport || !dataImport.csvString) {
129
+ const schema = table.schema;
130
+ if (!rows || !(0, schema_1.isRows)(rows) || !(0, schema_1.isSchema)(schema)) {
130
131
  return table;
131
132
  }
132
133
  const db = backend_core_1.context.getAppDB();
133
- // Populate the table with rows imported from CSV in a bulk update
134
- const data = yield (0, csvParser_1.transform)(Object.assign(Object.assign({}, dataImport), { existingTable: table }));
134
+ const data = (0, schema_1.parse)(rows, schema);
135
135
  let finalData = importToRows(data, table, user);
136
136
  yield pro_1.quotas.addRows(finalData.length, () => db.bulkDocs(finalData), {
137
137
  tableId: table._id,
138
138
  });
139
- yield backend_core_1.events.rows.imported(table, "csv", finalData.length);
139
+ yield backend_core_1.events.rows.imported(table, finalData.length);
140
140
  return table;
141
141
  });
142
142
  }
@@ -195,11 +195,11 @@ function checkStaticTables(table) {
195
195
  }
196
196
  exports.checkStaticTables = checkStaticTables;
197
197
  class TableSaveFunctions {
198
- constructor({ user, oldTable, dataImport }) {
198
+ constructor({ user, oldTable, importRows }) {
199
199
  this.db = backend_core_1.context.getAppDB();
200
200
  this.user = user;
201
201
  this.oldTable = oldTable;
202
- this.dataImport = dataImport;
202
+ this.importRows = importRows;
203
203
  // any rows that need updated
204
204
  this.rows = [];
205
205
  }
@@ -225,7 +225,7 @@ class TableSaveFunctions {
225
225
  after(table) {
226
226
  return __awaiter(this, void 0, void 0, function* () {
227
227
  table = yield handleSearchIndexes(table);
228
- table = yield handleDataImport(this.user, table, this.dataImport);
228
+ table = yield handleDataImport(this.user, table, this.importRows);
229
229
  return table;
230
230
  });
231
231
  }
@@ -20,11 +20,13 @@ const users_1 = require("../../utilities/users");
20
20
  const backend_core_1 = require("@budibase/backend-core");
21
21
  const sdk_1 = __importDefault(require("../../sdk"));
22
22
  function syncUser(ctx) {
23
+ var _a;
23
24
  return __awaiter(this, void 0, void 0, function* () {
24
25
  let deleting = false, user;
25
26
  const userId = ctx.params.id;
27
+ const previousUser = (_a = ctx.request.body) === null || _a === void 0 ? void 0 : _a.previousUser;
26
28
  try {
27
- user = yield (0, global_1.getRawGlobalUser)(userId);
29
+ user = (yield (0, global_1.getRawGlobalUser)(userId));
28
30
  }
29
31
  catch (err) {
30
32
  if (err && err.status === 404) {
@@ -35,6 +37,9 @@ function syncUser(ctx) {
35
37
  throw err;
36
38
  }
37
39
  }
40
+ let previousApps = previousUser
41
+ ? Object.keys(previousUser.roles).map(appId => appId)
42
+ : [];
38
43
  const roles = deleting ? {} : user.roles;
39
44
  // remove props which aren't useful to metadata
40
45
  delete user.password;
@@ -51,8 +56,9 @@ function syncUser(ctx) {
51
56
  .filter(entry => entry[1] !== backend_core_1.roles.BUILTIN_ROLE_IDS.PUBLIC)
52
57
  .map(([appId]) => appId);
53
58
  }
54
- for (let prodAppId of prodAppIds) {
59
+ for (let prodAppId of new Set([...prodAppIds, ...previousApps])) {
55
60
  const roleId = roles[prodAppId];
61
+ const deleteFromApp = !roleId;
56
62
  const devAppId = backend_core_1.db.getDevelopmentAppID(prodAppId);
57
63
  for (let appId of [prodAppId, devAppId]) {
58
64
  if (!(yield backend_core_1.db.dbExists(appId))) {
@@ -66,20 +72,22 @@ function syncUser(ctx) {
66
72
  metadata = yield db.get(metadataId);
67
73
  }
68
74
  catch (err) {
69
- if (deleting) {
75
+ if (deleteFromApp) {
70
76
  return;
71
77
  }
72
78
  metadata = {
73
79
  tableId: utils_2.InternalTables.USER_METADATA,
74
80
  };
75
81
  }
82
+ if (deleteFromApp) {
83
+ yield db.remove(metadata);
84
+ return;
85
+ }
76
86
  // assign the roleId for the metadata doc
77
87
  if (roleId) {
78
88
  metadata.roleId = roleId;
79
89
  }
80
- let combined = !deleting
81
- ? sdk_1.default.users.combineMetadataAndUser(user, metadata)
82
- : Object.assign(Object.assign({}, metadata), { status: backend_core_1.constants.UserStatus.INACTIVE, metadata: backend_core_1.roles.BUILTIN_ROLE_IDS.PUBLIC });
90
+ let combined = sdk_1.default.users.combineMetadataAndUser(user, metadata);
83
91
  // if its null then there was no updates required
84
92
  if (combined) {
85
93
  yield db.put(combined);
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ExportFormats = exports.json = exports.csv = void 0;
3
+ exports.isFormat = exports.Format = exports.jsonWithSchema = exports.json = exports.csv = void 0;
4
4
  function csv(headers, rows) {
5
5
  let csv = headers.map(key => `"${key}"`).join(",");
6
6
  for (let row of rows) {
@@ -18,11 +18,27 @@ function csv(headers, rows) {
18
18
  return csv;
19
19
  }
20
20
  exports.csv = csv;
21
- function json(headers, rows) {
21
+ function json(rows) {
22
22
  return JSON.stringify(rows, undefined, 2);
23
23
  }
24
24
  exports.json = json;
25
- exports.ExportFormats = {
26
- CSV: "csv",
27
- JSON: "json",
28
- };
25
+ function jsonWithSchema(schema, rows) {
26
+ const newSchema = {};
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
+ exports.jsonWithSchema = jsonWithSchema;
35
+ var Format;
36
+ (function (Format) {
37
+ Format["CSV"] = "csv";
38
+ Format["JSON"] = "json";
39
+ Format["JSON_WITH_SCHEMA"] = "jsonWithSchema";
40
+ })(Format = exports.Format || (exports.Format = {}));
41
+ function isFormat(format) {
42
+ return Object.values(Format).includes(format);
43
+ }
44
+ exports.isFormat = isFormat;