@budibase/server 2.2.26 → 2.2.27-alpha.1

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 (779) hide show
  1. package/Dockerfile +1 -1
  2. package/__mocks__/aws-sdk.ts +20 -1
  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.77ae0e4d.js +1802 -0
  10. package/builder/assets/schnellecke.cf1837a8.png +0 -0
  11. package/builder/index.html +3 -3
  12. package/coverage/clover.xml +12565 -8055
  13. package/coverage/coverage-final.json +365 -276
  14. package/coverage/lcov-report/index.html +721 -466
  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 +364 -268
  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 +89 -77
  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 +33 -33
  28. package/coverage/lcov-report/src/api/controllers/index.html +125 -125
  29. package/coverage/lcov-report/src/api/controllers/integration.ts.html +5 -5
  30. package/coverage/lcov-report/src/api/controllers/layout.ts.html +18 -18
  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 +35 -35
  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/import/sources/tests/curl/curl.spec.js.html +391 -0
  66. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/curl/index.html +116 -0
  67. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/index.html +116 -0
  68. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi2/openapi2.spec.js.html +796 -0
  69. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/index.html +116 -0
  70. package/coverage/lcov-report/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js.html +805 -0
  71. package/coverage/lcov-report/src/api/controllers/query/import/tests/index.html +116 -0
  72. package/coverage/lcov-report/src/api/controllers/query/import/tests/index.spec.js.html +568 -0
  73. package/coverage/lcov-report/src/api/controllers/query/index.html +20 -20
  74. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +131 -107
  75. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +11 -11
  76. package/coverage/lcov-report/src/api/controllers/role.ts.html +9 -9
  77. package/coverage/lcov-report/src/api/controllers/routing.ts.html +10 -10
  78. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +56 -41
  79. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +87 -57
  80. package/coverage/lcov-report/src/api/controllers/row/index.html +66 -66
  81. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +26 -26
  82. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +171 -96
  83. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +146 -146
  84. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +30 -21
  85. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +143 -26
  86. package/coverage/lcov-report/src/api/controllers/screen.ts.html +31 -31
  87. package/coverage/lcov-report/src/api/controllers/script.ts.html +19 -19
  88. package/coverage/lcov-report/src/api/controllers/static/index.html +18 -18
  89. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +56 -71
  90. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +61 -61
  91. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +56 -50
  92. package/coverage/lcov-report/src/api/controllers/table/index.html +51 -51
  93. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +157 -70
  94. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +68 -71
  95. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +109 -112
  96. package/coverage/lcov-report/src/api/controllers/templates.ts.html +21 -21
  97. package/coverage/lcov-report/src/api/controllers/user.ts.html +161 -137
  98. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +64 -19
  99. package/coverage/lcov-report/src/api/controllers/view/index.html +38 -38
  100. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +97 -133
  101. package/coverage/lcov-report/src/api/controllers/view/tests/index.html +116 -0
  102. package/coverage/lcov-report/src/api/controllers/view/tests/viewBuilder.spec.js.html +277 -0
  103. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +31 -31
  104. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +37 -37
  105. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +78 -72
  106. package/coverage/lcov-report/src/api/index.html +15 -15
  107. package/coverage/lcov-report/src/api/index.ts.html +40 -40
  108. package/coverage/lcov-report/src/api/routes/analytics.ts.html +10 -10
  109. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +11 -11
  110. package/coverage/lcov-report/src/api/routes/application.ts.html +46 -13
  111. package/coverage/lcov-report/src/api/routes/auth.ts.html +9 -9
  112. package/coverage/lcov-report/src/api/routes/automation.ts.html +14 -14
  113. package/coverage/lcov-report/src/api/routes/backup.ts.html +11 -11
  114. package/coverage/lcov-report/src/api/routes/cloud.ts.html +11 -11
  115. package/coverage/lcov-report/src/api/routes/component.ts.html +11 -11
  116. package/coverage/lcov-report/src/api/routes/datasource.ts.html +12 -12
  117. package/coverage/lcov-report/src/api/routes/deploy.ts.html +11 -14
  118. package/coverage/lcov-report/src/api/routes/dev.ts.html +17 -17
  119. package/coverage/lcov-report/src/api/routes/index.html +68 -68
  120. package/coverage/lcov-report/src/api/routes/index.ts.html +49 -40
  121. package/coverage/lcov-report/src/api/routes/integration.ts.html +11 -11
  122. package/coverage/lcov-report/src/api/routes/layout.ts.html +11 -11
  123. package/coverage/lcov-report/src/api/routes/metadata.ts.html +12 -12
  124. package/coverage/lcov-report/src/api/routes/migrations.ts.html +10 -10
  125. package/coverage/lcov-report/src/api/routes/permission.ts.html +12 -12
  126. package/coverage/lcov-report/src/api/routes/plugin.ts.html +10 -10
  127. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +147 -15
  128. package/coverage/lcov-report/src/api/routes/public/index.html +27 -27
  129. package/coverage/lcov-report/src/api/routes/public/index.ts.html +60 -60
  130. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +15 -15
  131. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +28 -16
  132. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +11 -11
  133. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +14 -14
  134. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +14 -14
  135. package/coverage/lcov-report/src/api/routes/public/tests/compare.spec.js.html +583 -0
  136. package/coverage/lcov-report/src/api/routes/public/tests/index.html +41 -11
  137. package/coverage/lcov-report/src/api/routes/public/tests/users.spec.js.html +199 -0
  138. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +5 -5
  139. package/coverage/lcov-report/src/api/routes/public/users.ts.html +14 -14
  140. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +21 -21
  141. package/coverage/lcov-report/src/api/routes/public/utils/index.html +5 -5
  142. package/coverage/lcov-report/src/api/routes/query.ts.html +14 -14
  143. package/coverage/lcov-report/src/api/routes/role.ts.html +12 -12
  144. package/coverage/lcov-report/src/api/routes/routing.ts.html +11 -11
  145. package/coverage/lcov-report/src/api/routes/row.ts.html +14 -14
  146. package/coverage/lcov-report/src/api/routes/screen.ts.html +12 -12
  147. package/coverage/lcov-report/src/api/routes/script.ts.html +13 -13
  148. package/coverage/lcov-report/src/api/routes/static.ts.html +18 -18
  149. package/coverage/lcov-report/src/api/routes/table.ts.html +29 -98
  150. package/coverage/lcov-report/src/api/routes/templates.ts.html +11 -11
  151. package/coverage/lcov-report/src/api/routes/tests/analytics.spec.js.html +271 -0
  152. package/coverage/lcov-report/src/api/routes/tests/apikeys.spec.js.html +259 -0
  153. package/coverage/lcov-report/src/api/routes/tests/application.spec.ts.html +1066 -0
  154. package/coverage/lcov-report/src/api/routes/tests/auth.spec.js.html +154 -0
  155. package/coverage/lcov-report/src/api/routes/tests/automation.spec.js.html +1123 -0
  156. package/coverage/lcov-report/src/api/routes/tests/backup.spec.ts.html +223 -0
  157. package/coverage/lcov-report/src/api/routes/tests/cloud.seq.spec.ts.html +262 -0
  158. package/coverage/lcov-report/src/api/routes/tests/component.spec.js.html +178 -0
  159. package/coverage/lcov-report/src/api/routes/tests/datasource.spec.ts.html +799 -0
  160. package/coverage/lcov-report/src/api/routes/tests/dev.spec.js.html +202 -0
  161. package/coverage/lcov-report/src/api/routes/tests/index.html +521 -0
  162. package/coverage/lcov-report/src/api/routes/tests/integration.spec.js.html +238 -0
  163. package/coverage/lcov-report/src/api/routes/tests/internalSearch.spec.js.html +670 -0
  164. package/coverage/lcov-report/src/api/routes/tests/layout.spec.js.html +259 -0
  165. package/coverage/lcov-report/src/api/routes/tests/metadata.spec.js.html +280 -0
  166. package/coverage/lcov-report/src/api/routes/tests/misc.spec.js.html +358 -0
  167. package/coverage/lcov-report/src/api/routes/tests/permissions.spec.js.html +484 -0
  168. package/coverage/lcov-report/src/api/routes/tests/plugin.spec.ts.html +622 -0
  169. package/coverage/lcov-report/src/api/routes/tests/query.seq.spec.js.html +1696 -0
  170. package/coverage/lcov-report/src/api/routes/tests/role.spec.js.html +478 -0
  171. package/coverage/lcov-report/src/api/routes/tests/routing.spec.js.html +430 -0
  172. package/coverage/lcov-report/src/api/routes/tests/row.spec.js.html +1804 -0
  173. package/coverage/lcov-report/src/api/routes/tests/screen.spec.js.html +391 -0
  174. package/coverage/lcov-report/src/api/routes/tests/static.spec.js.html +541 -0
  175. package/coverage/lcov-report/src/api/routes/tests/table.spec.js.html +991 -0
  176. package/coverage/lcov-report/src/api/routes/tests/templates.spec.js.html +154 -0
  177. package/coverage/lcov-report/src/api/routes/tests/user.spec.js.html +688 -0
  178. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +116 -47
  179. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +27 -27
  180. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +42 -36
  181. package/coverage/lcov-report/src/api/routes/tests/view.spec.js.html +1342 -0
  182. package/coverage/lcov-report/src/api/routes/tests/webhook.spec.js.html +484 -0
  183. package/coverage/lcov-report/src/api/routes/user.ts.html +12 -12
  184. package/coverage/lcov-report/src/api/routes/utils/index.html +3 -3
  185. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +44 -44
  186. package/coverage/lcov-report/src/api/routes/view.ts.html +13 -13
  187. package/coverage/lcov-report/src/api/routes/webhook.ts.html +13 -13
  188. package/coverage/lcov-report/src/app.ts.html +57 -48
  189. package/coverage/lcov-report/src/automations/actions.ts.html +31 -31
  190. package/coverage/lcov-report/src/automations/automationUtils.ts.html +127 -55
  191. package/coverage/lcov-report/src/automations/bullboard.ts.html +19 -19
  192. package/coverage/lcov-report/src/automations/index.html +58 -58
  193. package/coverage/lcov-report/src/automations/index.ts.html +23 -23
  194. package/coverage/lcov-report/src/automations/logging/index.html +3 -3
  195. package/coverage/lcov-report/src/automations/logging/index.ts.html +15 -15
  196. package/coverage/lcov-report/src/automations/steps/bash.ts.html +34 -34
  197. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +9 -9
  198. package/coverage/lcov-report/src/automations/steps/delay.ts.html +7 -7
  199. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +9 -9
  200. package/coverage/lcov-report/src/automations/steps/discord.ts.html +33 -33
  201. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +35 -35
  202. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +31 -31
  203. package/coverage/lcov-report/src/automations/steps/filter.ts.html +12 -12
  204. package/coverage/lcov-report/src/automations/steps/index.html +129 -129
  205. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +10 -10
  206. package/coverage/lcov-report/src/automations/steps/loop.ts.html +5 -5
  207. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +19 -19
  208. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +43 -43
  209. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +28 -28
  210. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +19 -19
  211. package/coverage/lcov-report/src/automations/steps/slack.ts.html +10 -10
  212. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +12 -12
  213. package/coverage/lcov-report/src/automations/steps/utils.ts.html +18 -18
  214. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +22 -22
  215. package/coverage/lcov-report/src/automations/tests/automation.spec.js.html +337 -0
  216. package/coverage/lcov-report/src/automations/tests/bash.spec.js.html +187 -0
  217. package/coverage/lcov-report/src/automations/tests/createRow.spec.ts.html +223 -0
  218. package/coverage/lcov-report/src/automations/tests/delay.spec.js.html +133 -0
  219. package/coverage/lcov-report/src/automations/tests/deleteRow.spec.ts.html +250 -0
  220. package/coverage/lcov-report/src/automations/tests/discord.spec.js.html +166 -0
  221. package/coverage/lcov-report/src/automations/tests/executeQuery.spec.js.html +229 -0
  222. package/coverage/lcov-report/src/automations/tests/executeScript.spec.js.html +229 -0
  223. package/coverage/lcov-report/src/automations/tests/filter.spec.js.html +232 -0
  224. package/coverage/lcov-report/src/automations/tests/index.html +341 -0
  225. package/coverage/lcov-report/src/automations/tests/loop.spec.ts.html +220 -0
  226. package/coverage/lcov-report/src/automations/tests/outgoingWebhook.spec.js.html +202 -0
  227. package/coverage/lcov-report/src/automations/tests/queryRows.spec.js.html +436 -0
  228. package/coverage/lcov-report/src/automations/tests/sendSmtpEmail.spec.js.html +298 -0
  229. package/coverage/lcov-report/src/automations/tests/serverLog.spec.js.html +151 -0
  230. package/coverage/lcov-report/src/automations/tests/updateRow.spec.js.html +217 -0
  231. package/coverage/lcov-report/src/automations/tests/utilities/index.html +15 -15
  232. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +32 -32
  233. package/coverage/lcov-report/src/automations/tests/zapier.spec.js.html +166 -0
  234. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +6 -6
  235. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +6 -6
  236. package/coverage/lcov-report/src/automations/triggerInfo/index.html +17 -17
  237. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +10 -10
  238. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +6 -6
  239. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +6 -6
  240. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +6 -6
  241. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +6 -6
  242. package/coverage/lcov-report/src/automations/triggers.ts.html +61 -46
  243. package/coverage/lcov-report/src/automations/unitTests/automationUtils.spec.ts.html +280 -0
  244. package/coverage/lcov-report/src/automations/unitTests/index.html +116 -0
  245. package/coverage/lcov-report/src/automations/utils.ts.html +84 -84
  246. package/coverage/lcov-report/src/constants/index.html +19 -19
  247. package/coverage/lcov-report/src/constants/index.ts.html +103 -103
  248. package/coverage/lcov-report/src/constants/layouts.ts.html +9 -9
  249. package/coverage/lcov-report/src/constants/screens.ts.html +5 -5
  250. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +45 -45
  251. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +8 -8
  252. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +8 -8
  253. package/coverage/lcov-report/src/db/defaultData/index.html +43 -43
  254. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +8 -8
  255. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +8 -8
  256. package/coverage/lcov-report/src/db/dynamoClient.ts.html +26 -26
  257. package/coverage/lcov-report/src/db/inMemoryView.ts.html +13 -13
  258. package/coverage/lcov-report/src/db/index.html +43 -43
  259. package/coverage/lcov-report/src/db/index.ts.html +20 -20
  260. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +38 -38
  261. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +7 -7
  262. package/coverage/lcov-report/src/db/linkedRows/index.html +37 -37
  263. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +40 -40
  264. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +27 -27
  265. package/coverage/lcov-report/src/db/newid.ts.html +5 -5
  266. package/coverage/lcov-report/src/db/tests/index.html +131 -0
  267. package/coverage/lcov-report/src/db/tests/linkController.spec.js.html +793 -0
  268. package/coverage/lcov-report/src/db/tests/linkTests.spec.js.html +277 -0
  269. package/coverage/lcov-report/src/db/utils.ts.html +92 -92
  270. package/coverage/lcov-report/src/definitions/automations.ts.html +9 -6
  271. package/coverage/lcov-report/src/definitions/index.html +5 -20
  272. package/coverage/lcov-report/src/environment.ts.html +49 -37
  273. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +14 -14
  274. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +8 -8
  275. package/coverage/lcov-report/src/events/index.html +20 -20
  276. package/coverage/lcov-report/src/events/index.ts.html +7 -7
  277. package/coverage/lcov-report/src/events/utils.ts.html +11 -11
  278. package/coverage/lcov-report/src/index.html +48 -48
  279. package/coverage/lcov-report/src/index.ts.html +8 -8
  280. package/coverage/lcov-report/src/integrations/airtable.ts.html +10 -10
  281. package/coverage/lcov-report/src/integrations/arangodb.ts.html +9 -9
  282. package/coverage/lcov-report/src/integrations/base/index.html +29 -29
  283. package/coverage/lcov-report/src/integrations/base/query.ts.html +15 -9
  284. package/coverage/lcov-report/src/integrations/base/sql.ts.html +38 -38
  285. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +23 -23
  286. package/coverage/lcov-report/src/integrations/base/utils.ts.html +5 -5
  287. package/coverage/lcov-report/src/integrations/couchdb.ts.html +109 -31
  288. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +17 -17
  289. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +27 -15
  290. package/coverage/lcov-report/src/integrations/firebase.ts.html +12 -12
  291. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +42 -42
  292. package/coverage/lcov-report/src/integrations/index.html +130 -130
  293. package/coverage/lcov-report/src/integrations/index.ts.html +50 -62
  294. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +31 -31
  295. package/coverage/lcov-report/src/integrations/mongodb.ts.html +421 -289
  296. package/coverage/lcov-report/src/integrations/mysql.ts.html +28 -28
  297. package/coverage/lcov-report/src/integrations/oracle.ts.html +31 -31
  298. package/coverage/lcov-report/src/integrations/postgres.ts.html +54 -54
  299. package/coverage/lcov-report/src/integrations/queries/index.html +19 -19
  300. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +24 -159
  301. package/coverage/lcov-report/src/integrations/redis.ts.html +8 -8
  302. package/coverage/lcov-report/src/integrations/rest.ts.html +43 -52
  303. package/coverage/lcov-report/src/integrations/s3.ts.html +17 -17
  304. package/coverage/lcov-report/src/integrations/snowflake.ts.html +15 -15
  305. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  306. package/coverage/lcov-report/src/integrations/tests/airtable.spec.ts.html +310 -0
  307. package/coverage/lcov-report/src/integrations/tests/arangodb.spec.ts.html +199 -0
  308. package/coverage/lcov-report/src/integrations/tests/couchdb.spec.ts.html +349 -0
  309. package/coverage/lcov-report/src/integrations/tests/dynamodb.spec.ts.html +550 -0
  310. package/coverage/lcov-report/src/integrations/tests/elasticsearch.spec.ts.html +331 -0
  311. package/coverage/lcov-report/src/integrations/tests/firebase.spec.ts.html +376 -0
  312. package/coverage/lcov-report/src/integrations/tests/index.html +230 -5
  313. package/coverage/lcov-report/src/integrations/tests/microsoftSqlServer.spec.ts.html +253 -0
  314. package/coverage/lcov-report/src/integrations/tests/mongo.spec.ts.html +1087 -0
  315. package/coverage/lcov-report/src/integrations/tests/mysql.spec.ts.html +484 -0
  316. package/coverage/lcov-report/src/integrations/tests/oracle.spec.ts.html +373 -0
  317. package/coverage/lcov-report/src/integrations/tests/postgres.spec.ts.html +328 -0
  318. package/coverage/lcov-report/src/integrations/tests/redis.spec.ts.html +337 -0
  319. package/coverage/lcov-report/src/integrations/tests/rest.spec.ts.html +1870 -0
  320. package/coverage/lcov-report/src/integrations/tests/s3.spec.ts.html +421 -0
  321. package/coverage/lcov-report/src/integrations/tests/sql.spec.ts.html +1753 -0
  322. package/coverage/lcov-report/src/integrations/utils.ts.html +54 -54
  323. package/coverage/lcov-report/src/middleware/appInfo.ts.html +11 -11
  324. package/coverage/lcov-report/src/middleware/authorized.ts.html +49 -37
  325. package/coverage/lcov-report/src/middleware/builder.ts.html +26 -26
  326. package/coverage/lcov-report/src/middleware/currentapp.ts.html +60 -57
  327. package/coverage/lcov-report/src/middleware/index.html +44 -44
  328. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +10 -10
  329. package/coverage/lcov-report/src/middleware/publicApi.ts.html +9 -9
  330. package/coverage/lcov-report/src/middleware/resourceId.ts.html +23 -23
  331. package/coverage/lcov-report/src/middleware/selfhost.ts.html +2 -2
  332. package/coverage/lcov-report/src/middleware/tests/authorized.spec.js.html +574 -0
  333. package/coverage/lcov-report/src/middleware/tests/currentapp.spec.js.html +814 -0
  334. package/coverage/lcov-report/src/middleware/tests/index.html +161 -0
  335. package/coverage/lcov-report/src/middleware/tests/resourceId.spec.js.html +397 -0
  336. package/coverage/lcov-report/src/middleware/tests/selfhost.spec.js.html +214 -0
  337. package/coverage/lcov-report/src/middleware/utils.ts.html +4 -4
  338. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +6 -6
  339. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +7 -7
  340. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +7 -7
  341. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +31 -31
  342. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +8 -8
  343. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +13 -13
  344. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +7 -7
  345. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +7 -7
  346. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +8 -8
  347. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +21 -21
  348. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +17 -14
  349. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +19 -19
  350. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +9 -9
  351. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +13 -13
  352. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +23 -23
  353. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +26 -26
  354. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +7 -7
  355. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +14 -14
  356. package/coverage/lcov-report/src/migrations/functions/index.html +18 -18
  357. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +8 -8
  358. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +11 -11
  359. package/coverage/lcov-report/src/migrations/functions/tests/appUrls.spec.js.html +163 -0
  360. package/coverage/lcov-report/src/migrations/functions/tests/index.html +161 -0
  361. package/coverage/lcov-report/src/migrations/functions/tests/syncQuotas.spec.js.html +163 -0
  362. package/coverage/lcov-report/src/migrations/functions/tests/tableSettings.spec.ts.html +517 -0
  363. package/coverage/lcov-report/src/migrations/functions/tests/userEmailViewCasing.spec.js.html +190 -0
  364. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +11 -11
  365. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +3 -3
  366. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +6 -6
  367. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +8 -8
  368. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +7 -7
  369. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/index.html +131 -0
  370. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts.html +190 -0
  371. package/coverage/lcov-report/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts.html +244 -0
  372. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +4 -4
  373. package/coverage/lcov-report/src/migrations/index.html +15 -15
  374. package/coverage/lcov-report/src/migrations/index.ts.html +43 -43
  375. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +4 -4
  376. package/coverage/lcov-report/src/migrations/tests/index.html +26 -11
  377. package/coverage/lcov-report/src/migrations/tests/index.spec.ts.html +535 -0
  378. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +3 -3
  379. package/coverage/lcov-report/src/sdk/app/applications/index.html +20 -20
  380. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +6 -6
  381. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +34 -34
  382. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +15 -15
  383. package/coverage/lcov-report/src/sdk/app/automations/index.html +7 -7
  384. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +5 -5
  385. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +14 -14
  386. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +5 -5
  387. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +30 -30
  388. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +45 -57
  389. package/coverage/lcov-report/src/sdk/app/backups/index.html +42 -42
  390. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +7 -7
  391. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +73 -73
  392. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +493 -0
  393. package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
  394. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
  395. package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
  396. package/coverage/lcov-report/src/{utilities/statusCodes.ts.html → sdk/app/queries/index.ts.html} +22 -28
  397. package/coverage/lcov-report/src/{definitions/datasource.ts.html → sdk/app/queries/queries.ts.html} +82 -82
  398. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +8 -8
  399. package/coverage/lcov-report/src/sdk/app/rows/index.html +8 -8
  400. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +6 -6
  401. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +4 -4
  402. package/coverage/lcov-report/src/sdk/app/tables/index.html +15 -15
  403. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +30 -21
  404. package/coverage/lcov-report/src/sdk/index.html +7 -7
  405. package/coverage/lcov-report/src/sdk/index.ts.html +24 -12
  406. package/coverage/lcov-report/src/sdk/tests/attachments.spec.ts.html +313 -0
  407. package/coverage/lcov-report/src/sdk/tests/index.html +116 -0
  408. package/coverage/lcov-report/src/sdk/users/index.html +10 -10
  409. package/coverage/lcov-report/src/sdk/users/index.ts.html +5 -5
  410. package/coverage/lcov-report/src/sdk/users/utils.ts.html +35 -35
  411. package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
  412. package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
  413. package/coverage/lcov-report/src/startup.ts.html +48 -63
  414. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +421 -187
  415. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +20 -20
  416. package/coverage/lcov-report/src/tests/utilities/index.html +35 -35
  417. package/coverage/lcov-report/src/tests/utilities/index.ts.html +2 -2
  418. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +236 -47
  419. package/coverage/lcov-report/src/threads/automation.ts.html +212 -251
  420. package/coverage/lcov-report/src/threads/index.html +46 -46
  421. package/coverage/lcov-report/src/threads/index.ts.html +39 -39
  422. package/coverage/lcov-report/src/threads/query.ts.html +140 -101
  423. package/coverage/lcov-report/src/threads/utils.ts.html +29 -29
  424. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +5 -5
  425. package/coverage/lcov-report/src/utilities/centralPath.ts.html +11 -11
  426. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  427. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +20 -20
  428. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +601 -0
  429. package/coverage/lcov-report/src/utilities/fileSystem/index.html +88 -28
  430. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +20 -1049
  431. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +277 -0
  432. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +9 -9
  433. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  434. package/coverage/lcov-report/src/utilities/global.ts.html +60 -60
  435. package/coverage/lcov-report/src/utilities/index.html +102 -117
  436. package/coverage/lcov-report/src/utilities/index.ts.html +47 -179
  437. package/coverage/lcov-report/src/utilities/redis.ts.html +38 -38
  438. package/coverage/lcov-report/src/utilities/{plugins.ts.html → retry.ts.html} +31 -43
  439. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  440. package/coverage/lcov-report/src/utilities/routing/index.ts.html +5 -5
  441. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +34 -34
  442. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +72 -45
  443. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +9 -9
  444. package/coverage/lcov-report/src/utilities/rowProcessor/tests/index.html +116 -0
  445. package/coverage/lcov-report/src/utilities/rowProcessor/tests/utils.spec.ts.html +256 -0
  446. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +52 -52
  447. package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +174 -234
  448. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +33 -33
  449. package/coverage/lcov-report/src/utilities/security.ts.html +30 -30
  450. package/coverage/lcov-report/src/utilities/usageQuota/index.html +9 -9
  451. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +37 -37
  452. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +3 -3
  453. package/coverage/lcov-report/src/utilities/users.ts.html +7 -7
  454. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +92 -65
  455. package/coverage/lcov-report/src/watch.ts.html +20 -20
  456. package/coverage/lcov-report/src/websocket.ts.html +15 -15
  457. package/coverage/lcov.info +24966 -17056
  458. package/dist/api/controllers/application.js +120 -109
  459. package/dist/api/controllers/cloud.js +6 -2
  460. package/dist/api/controllers/datasource.js +24 -15
  461. package/dist/api/controllers/deploy/index.js +43 -60
  462. package/dist/api/controllers/plugin/index.js +6 -6
  463. package/dist/api/controllers/public/applications.js +22 -1
  464. package/dist/api/controllers/query/index.js +23 -13
  465. package/dist/api/controllers/row/ExternalRequest.js +12 -4
  466. package/dist/api/controllers/row/external.js +20 -13
  467. package/dist/api/controllers/row/internal.js +52 -27
  468. package/dist/api/controllers/row/staticFormula.js +1 -1
  469. package/dist/api/controllers/row/utils.js +35 -3
  470. package/dist/api/controllers/static/index.js +47 -47
  471. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  472. package/dist/api/controllers/table/external.js +16 -35
  473. package/dist/api/controllers/table/index.js +44 -15
  474. package/dist/api/controllers/table/internal.js +6 -7
  475. package/dist/api/controllers/table/utils.js +9 -9
  476. package/dist/api/controllers/user.js +14 -6
  477. package/dist/api/controllers/view/exporters.js +22 -6
  478. package/dist/api/controllers/view/index.js +23 -58
  479. package/dist/api/controllers/view/viewBuilder.js +15 -2
  480. package/dist/api/controllers/webhook.js +45 -43
  481. package/dist/api/routes/analytics.js +2 -1
  482. package/dist/api/routes/apikeys.js +2 -1
  483. package/dist/api/routes/application.js +5 -1
  484. package/dist/api/routes/auth.js +2 -1
  485. package/dist/api/routes/automation.js +2 -1
  486. package/dist/api/routes/backup.js +2 -1
  487. package/dist/api/routes/cloud.js +2 -1
  488. package/dist/api/routes/component.js +2 -1
  489. package/dist/api/routes/datasource.js +2 -1
  490. package/dist/api/routes/deploy.js +3 -3
  491. package/dist/api/routes/dev.js +2 -1
  492. package/dist/api/routes/index.js +2 -0
  493. package/dist/api/routes/integration.js +2 -1
  494. package/dist/api/routes/layout.js +2 -1
  495. package/dist/api/routes/metadata.js +2 -1
  496. package/dist/api/routes/migrations.js +2 -1
  497. package/dist/api/routes/permission.js +2 -1
  498. package/dist/api/routes/public/applications.js +37 -0
  499. package/dist/api/routes/public/middleware/mapper.js +3 -0
  500. package/dist/api/routes/query.js +2 -1
  501. package/dist/api/routes/role.js +2 -1
  502. package/dist/api/routes/routing.js +2 -1
  503. package/dist/api/routes/row.js +2 -2
  504. package/dist/api/routes/screen.js +2 -1
  505. package/dist/api/routes/script.js +2 -1
  506. package/dist/api/routes/static.js +6 -5
  507. package/dist/api/routes/table.js +8 -38
  508. package/dist/api/routes/templates.js +2 -1
  509. package/dist/api/routes/user.js +2 -1
  510. package/dist/api/routes/utils/validators.js +1 -1
  511. package/dist/api/routes/view.js +2 -1
  512. package/dist/api/routes/webhook.js +2 -1
  513. package/dist/app.js +10 -8
  514. package/dist/automations/automationUtils.js +26 -1
  515. package/dist/automations/logging/index.js +5 -25
  516. package/dist/automations/triggers.js +1 -0
  517. package/dist/db/index.js +5 -2
  518. package/dist/db/linkedRows/LinkController.js +2 -1
  519. package/dist/db/linkedRows/LinkDocument.js +2 -1
  520. package/dist/db/newid.js +4 -2
  521. package/dist/definitions/datasource.js +0 -6
  522. package/dist/environment.js +7 -2
  523. package/dist/events/AutomationEmitter.js +2 -1
  524. package/dist/events/BudibaseEmitter.js +2 -1
  525. package/dist/events/index.js +2 -1
  526. package/dist/index.js +2 -2
  527. package/dist/integrations/base/query.js +7 -2
  528. package/dist/integrations/base/sqlTable.js +14 -14
  529. package/dist/integrations/couchdb.js +34 -8
  530. package/dist/integrations/dynamodb.js +8 -5
  531. package/dist/integrations/elasticsearch.js +7 -3
  532. package/dist/integrations/googlesheets.js +1 -1
  533. package/dist/integrations/index.js +6 -7
  534. package/dist/integrations/mongodb.js +311 -271
  535. package/dist/integrations/mysql.js +2 -2
  536. package/dist/integrations/queries/sql.js +73 -100
  537. package/dist/integrations/rest.js +16 -18
  538. package/dist/middleware/authorized.js +2 -1
  539. package/dist/middleware/builder.js +4 -2
  540. package/dist/middleware/currentapp.js +6 -3
  541. package/dist/middleware/publicApi.js +4 -2
  542. package/dist/middleware/selfhost.js +4 -1
  543. package/dist/migrations/functions/backfill/global/configs.js +4 -4
  544. package/dist/package.json +14 -8
  545. package/dist/sdk/app/backups/imports.js +2 -6
  546. package/dist/sdk/app/datasources/datasources.js +147 -0
  547. package/dist/sdk/app/datasources/index.js +27 -0
  548. package/dist/sdk/app/queries/index.js +27 -0
  549. package/dist/sdk/app/queries/queries.js +60 -0
  550. package/dist/sdk/app/tables/index.js +6 -2
  551. package/dist/sdk/index.js +4 -0
  552. package/dist/sdk/utils/index.js +29 -0
  553. package/dist/startup.js +17 -17
  554. package/dist/threads/automation.js +22 -35
  555. package/dist/threads/index.js +4 -4
  556. package/dist/threads/query.js +27 -13
  557. package/dist/tsconfig.build.tsbuildinfo +1 -1
  558. package/dist/utilities/fileSystem/app.js +97 -0
  559. package/dist/utilities/fileSystem/clientLibrary.js +3 -3
  560. package/dist/utilities/fileSystem/filesystem.js +184 -0
  561. package/dist/utilities/fileSystem/index.js +18 -342
  562. package/dist/utilities/fileSystem/plugin.js +66 -0
  563. package/dist/utilities/fileSystem/template.js +47 -0
  564. package/dist/utilities/index.js +1 -44
  565. package/dist/utilities/retry.js +30 -0
  566. package/dist/utilities/rowProcessor/index.js +12 -4
  567. package/dist/utilities/schema.js +108 -0
  568. package/dist/utilities/scriptRunner.js +2 -1
  569. package/dist/utilities/statusCodes.js +2 -1
  570. package/dist/utilities/workerRequests.js +2 -0
  571. package/dist/watch.js +2 -25
  572. package/jest-testcontainers-config.js +8 -0
  573. package/jest.config.ts +33 -13
  574. package/package.json +15 -9
  575. package/scripts/dev/manage.js +3 -2
  576. package/specs/openapi.json +84 -0
  577. package/specs/openapi.yaml +53 -0
  578. package/specs/resources/application.js +19 -0
  579. package/src/api/controllers/application.ts +142 -110
  580. package/src/api/controllers/auth.ts +2 -2
  581. package/src/api/controllers/cloud.ts +10 -6
  582. package/src/api/controllers/datasource.ts +33 -25
  583. package/src/api/controllers/deploy/Deployment.ts +1 -0
  584. package/src/api/controllers/deploy/index.ts +40 -58
  585. package/src/api/controllers/plugin/index.ts +14 -9
  586. package/src/api/controllers/public/applications.ts +17 -0
  587. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  588. package/src/api/controllers/query/index.ts +49 -41
  589. package/src/api/controllers/row/ExternalRequest.ts +8 -3
  590. package/src/api/controllers/row/external.ts +24 -14
  591. package/src/api/controllers/row/internal.ts +66 -41
  592. package/src/api/controllers/row/staticFormula.ts +5 -2
  593. package/src/api/controllers/row/utils.ts +42 -3
  594. package/src/api/controllers/static/index.ts +22 -27
  595. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -1
  596. package/src/api/controllers/table/external.ts +18 -16
  597. package/src/api/controllers/table/index.ts +46 -17
  598. package/src/api/controllers/table/internal.ts +6 -7
  599. package/src/api/controllers/table/utils.ts +12 -13
  600. package/src/api/controllers/user.ts +21 -13
  601. package/src/api/controllers/view/exporters.ts +20 -5
  602. package/src/api/controllers/view/index.ts +30 -42
  603. package/src/api/controllers/view/tests/viewBuilder.spec.js +1 -1
  604. package/src/api/controllers/view/viewBuilder.ts +1 -1
  605. package/src/api/controllers/webhook.ts +48 -46
  606. package/src/api/routes/analytics.ts +1 -1
  607. package/src/api/routes/apikeys.ts +1 -1
  608. package/src/api/routes/application.ts +12 -1
  609. package/src/api/routes/auth.ts +1 -1
  610. package/src/api/routes/automation.ts +1 -1
  611. package/src/api/routes/backup.ts +1 -1
  612. package/src/api/routes/cloud.ts +1 -1
  613. package/src/api/routes/component.ts +1 -1
  614. package/src/api/routes/datasource.ts +1 -1
  615. package/src/api/routes/deploy.ts +1 -2
  616. package/src/api/routes/dev.ts +1 -1
  617. package/src/api/routes/index.ts +6 -3
  618. package/src/api/routes/integration.ts +1 -1
  619. package/src/api/routes/layout.ts +1 -1
  620. package/src/api/routes/metadata.ts +1 -1
  621. package/src/api/routes/migrations.ts +1 -1
  622. package/src/api/routes/permission.ts +1 -1
  623. package/src/api/routes/public/applications.ts +44 -0
  624. package/src/api/routes/public/middleware/mapper.ts +4 -0
  625. package/src/api/routes/query.ts +1 -1
  626. package/src/api/routes/role.ts +1 -1
  627. package/src/api/routes/routing.ts +1 -1
  628. package/src/api/routes/row.ts +1 -1
  629. package/src/api/routes/screen.ts +1 -1
  630. package/src/api/routes/script.ts +1 -1
  631. package/src/api/routes/static.ts +2 -2
  632. package/src/api/routes/table.ts +16 -39
  633. package/src/api/routes/templates.ts +1 -1
  634. package/src/api/routes/tests/__snapshots__/{datasource.spec.js.snap → datasource.spec.ts.snap} +1 -1
  635. package/src/api/routes/tests/analytics.spec.js +4 -1
  636. package/src/api/routes/tests/apikeys.spec.js +1 -1
  637. package/src/api/routes/tests/{application.spec.js → application.spec.ts} +112 -22
  638. package/src/api/routes/tests/auth.spec.js +2 -2
  639. package/src/api/routes/tests/automation.spec.js +5 -1
  640. package/src/api/routes/tests/{backup.spec.js → backup.spec.ts} +17 -15
  641. package/src/api/routes/tests/cloud.seq.spec.ts +59 -0
  642. package/src/api/routes/tests/component.spec.js +1 -1
  643. package/src/api/routes/tests/data/budibase-component-1.0.1.tgz +0 -0
  644. package/src/api/routes/tests/data/comment-box-1.0.2.tar.gz +0 -0
  645. package/src/api/routes/tests/data/export-test.tar.gz +0 -0
  646. package/src/api/routes/tests/{datasource.spec.js → datasource.spec.ts} +76 -17
  647. package/src/api/routes/tests/dev.spec.js +1 -1
  648. package/src/api/routes/tests/integration.spec.js +1 -1
  649. package/src/api/routes/tests/layout.spec.js +1 -1
  650. package/src/api/routes/tests/metadata.spec.js +1 -1
  651. package/src/api/routes/tests/misc.spec.js +5 -11
  652. package/src/api/routes/tests/permissions.spec.js +5 -2
  653. package/src/api/routes/tests/plugin.spec.ts +179 -0
  654. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +21 -1
  655. package/src/api/routes/tests/role.spec.js +6 -1
  656. package/src/api/routes/tests/routing.spec.js +2 -3
  657. package/src/api/routes/tests/row.spec.js +15 -5
  658. package/src/api/routes/tests/screen.spec.js +1 -1
  659. package/src/api/routes/tests/static.spec.js +4 -18
  660. package/src/api/routes/tests/table.spec.js +17 -33
  661. package/src/api/routes/tests/templates.spec.js +1 -1
  662. package/src/api/routes/tests/user.spec.js +108 -0
  663. package/src/api/routes/tests/utilities/TestFunctions.ts +26 -3
  664. package/src/api/routes/tests/utilities/index.ts +7 -5
  665. package/src/api/routes/tests/view.spec.js +4 -1
  666. package/src/api/routes/tests/webhook.spec.js +12 -3
  667. package/src/api/routes/user.ts +1 -1
  668. package/src/api/routes/utils/validators.ts +1 -1
  669. package/src/api/routes/view.ts +1 -1
  670. package/src/api/routes/webhook.ts +1 -1
  671. package/src/app.ts +7 -4
  672. package/src/automations/automationUtils.ts +24 -0
  673. package/src/automations/logging/index.ts +1 -1
  674. package/src/automations/tests/automation.spec.js +4 -4
  675. package/src/automations/tests/bash.spec.js +34 -0
  676. package/src/automations/tests/discord.spec.js +27 -0
  677. package/src/automations/tests/executeQuery.spec.js +48 -0
  678. package/src/automations/tests/executeScript.spec.js +48 -0
  679. package/src/automations/tests/loop.spec.ts +45 -0
  680. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  681. package/src/automations/tests/sendSmtpEmail.spec.js +71 -0
  682. package/src/automations/tests/serverLog.spec.js +22 -0
  683. package/src/automations/tests/updateRow.spec.js +1 -1
  684. package/src/automations/tests/utilities/index.ts +2 -2
  685. package/src/automations/tests/zapier.spec.js +27 -0
  686. package/src/automations/triggers.ts +6 -1
  687. package/src/automations/unitTests/automationUtils.spec.ts +65 -0
  688. package/src/db/index.ts +1 -1
  689. package/src/db/linkedRows/LinkController.ts +1 -1
  690. package/src/db/linkedRows/LinkDocument.ts +1 -1
  691. package/src/db/newid.ts +1 -1
  692. package/src/db/tests/linkController.spec.js +5 -2
  693. package/src/db/tests/linkTests.spec.js +1 -1
  694. package/src/definitions/automations.ts +1 -0
  695. package/src/definitions/datasource.ts +0 -41
  696. package/src/definitions/openapi.ts +10 -0
  697. package/src/environment.ts +6 -2
  698. package/src/events/AutomationEmitter.ts +1 -1
  699. package/src/events/BudibaseEmitter.ts +1 -1
  700. package/src/events/index.ts +1 -1
  701. package/src/index.ts +1 -1
  702. package/src/integrations/base/query.ts +3 -1
  703. package/src/integrations/base/sqlTable.ts +1 -1
  704. package/src/integrations/couchdb.ts +40 -14
  705. package/src/integrations/dynamodb.ts +3 -3
  706. package/src/integrations/elasticsearch.ts +8 -4
  707. package/src/integrations/googlesheets.ts +1 -1
  708. package/src/integrations/index.ts +5 -9
  709. package/src/integrations/mongodb.ts +315 -271
  710. package/src/integrations/mysql.ts +1 -1
  711. package/src/integrations/queries/sql.ts +5 -50
  712. package/src/integrations/rest.ts +16 -19
  713. package/src/integrations/tests/couchdb.spec.ts +33 -21
  714. package/src/integrations/tests/rest.spec.ts +19 -15
  715. package/src/middleware/authorized.ts +5 -1
  716. package/src/middleware/builder.ts +1 -1
  717. package/src/middleware/currentapp.ts +4 -3
  718. package/src/middleware/publicApi.ts +1 -1
  719. package/src/middleware/selfhost.ts +1 -1
  720. package/src/middleware/tests/authorized.spec.js +1 -1
  721. package/src/middleware/tests/currentapp.spec.js +1 -1
  722. package/src/middleware/tests/selfhost.spec.js +1 -1
  723. package/src/migrations/functions/backfill/global/configs.ts +5 -4
  724. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  725. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  726. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  727. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +10 -6
  728. package/src/migrations/tests/index.spec.ts +3 -2
  729. package/src/sdk/app/backups/imports.ts +2 -6
  730. package/src/sdk/app/datasources/datasources.ts +136 -0
  731. package/src/sdk/app/datasources/index.ts +5 -0
  732. package/src/sdk/app/queries/index.ts +5 -0
  733. package/src/sdk/app/queries/queries.ts +50 -0
  734. package/src/sdk/app/tables/index.ts +6 -3
  735. package/src/sdk/index.ts +4 -0
  736. package/src/sdk/tests/attachments.spec.ts +1 -4
  737. package/src/sdk/utils/index.ts +16 -0
  738. package/src/startup.ts +3 -8
  739. package/src/tests/jestEnv.ts +9 -0
  740. package/src/tests/jestSetup.ts +8 -20
  741. package/src/tests/utilities/TestConfiguration.ts +127 -49
  742. package/src/tests/utilities/structures.ts +65 -2
  743. package/src/threads/automation.ts +22 -35
  744. package/src/threads/definitions.ts +3 -0
  745. package/src/threads/index.ts +1 -1
  746. package/src/threads/query.ts +28 -15
  747. package/src/utilities/fileSystem/app.ts +86 -0
  748. package/src/utilities/fileSystem/clientLibrary.ts +1 -1
  749. package/src/utilities/fileSystem/filesystem.ts +172 -0
  750. package/src/utilities/fileSystem/index.ts +5 -348
  751. package/src/utilities/fileSystem/plugin.ts +64 -0
  752. package/src/utilities/fileSystem/template.ts +36 -0
  753. package/src/utilities/index.ts +1 -45
  754. package/src/utilities/retry.ts +18 -0
  755. package/src/utilities/rowProcessor/index.ts +17 -8
  756. package/src/utilities/rowProcessor/tests/utils.spec.ts +57 -0
  757. package/src/utilities/schema.ts +141 -0
  758. package/src/utilities/scriptRunner.ts +1 -1
  759. package/src/utilities/statusCodes.ts +1 -1
  760. package/src/utilities/workerRequests.ts +10 -1
  761. package/src/watch.ts +1 -1
  762. package/tsconfig.build.json +2 -0
  763. package/tsconfig.json +2 -1
  764. package/builder/assets/index.96b9ffed.css +0 -6
  765. package/builder/assets/index.fae8f9eb.js +0 -1024
  766. package/dist/api/routes/tests/utilities/TestFunctions.js +0 -167
  767. package/dist/api/routes/tests/utilities/index.js +0 -131
  768. package/dist/automations/tests/utilities/index.js +0 -81
  769. package/dist/tests/utilities/TestConfiguration.js +0 -562
  770. package/dist/tests/utilities/controllers.js +0 -40
  771. package/dist/tests/utilities/structures.js +0 -168
  772. package/dist/utilities/csvParser.js +0 -152
  773. package/dist/utilities/plugins.js +0 -26
  774. package/src/api/routes/tests/deployment.spec.ts +0 -25
  775. package/src/automations/unitTests/automationUtils.spec.js +0 -17
  776. package/src/utilities/csvParser.ts +0 -161
  777. package/src/utilities/plugins.ts +0 -22
  778. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  779. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -13,7 +13,7 @@ import {
13
13
  cleanupAttachments,
14
14
  } from "../../../utilities/rowProcessor"
15
15
  import { FieldTypes } from "../../../constants"
16
- import { validate as rowValidate, findRow } from "./utils"
16
+ import * as utils from "./utils"
17
17
  import { fullSearch, paginatedSearch } from "./internalSearch"
18
18
  import { getGlobalUsersFromMetadata } from "../../../utilities/global"
19
19
  import * as inMemoryViews from "../../../db/inMemoryView"
@@ -27,16 +27,19 @@ import {
27
27
  import { cloneDeep } from "lodash/fp"
28
28
  import { context, db as dbCore } from "@budibase/backend-core"
29
29
  import { finaliseRow, updateRelatedFormula } from "./staticFormula"
30
- import * as exporters from "../view/exporters"
30
+ import { csv, json, jsonWithSchema, Format } from "../view/exporters"
31
31
  import { apiFileReturn } from "../../../utilities/fileSystem"
32
32
  import {
33
- BBContext,
33
+ Ctx,
34
+ UserCtx,
34
35
  Database,
35
36
  LinkDocumentValue,
36
37
  Row,
37
38
  Table,
38
39
  } from "@budibase/types"
39
40
 
41
+ const { cleanExportRows } = require("./utils")
42
+
40
43
  const CALCULATION_TYPES = {
41
44
  SUM: "sum",
42
45
  COUNT: "count",
@@ -69,7 +72,7 @@ async function getView(db: Database, viewName: string) {
69
72
  return viewInfo
70
73
  }
71
74
 
72
- async function getRawTableData(ctx: BBContext, db: Database, tableId: string) {
75
+ async function getRawTableData(ctx: Ctx, db: Database, tableId: string) {
73
76
  let rows
74
77
  if (tableId === InternalTables.USER_METADATA) {
75
78
  await userController.fetchMetadata(ctx)
@@ -85,7 +88,7 @@ async function getRawTableData(ctx: BBContext, db: Database, tableId: string) {
85
88
  return rows as Row[]
86
89
  }
87
90
 
88
- export async function patch(ctx: BBContext) {
91
+ export async function patch(ctx: UserCtx) {
89
92
  const db = context.getAppDB()
90
93
  const inputs = ctx.request.body
91
94
  const tableId = inputs.tableId
@@ -95,7 +98,7 @@ export async function patch(ctx: BBContext) {
95
98
  let dbTable = await db.get(tableId)
96
99
  oldRow = await outputProcessing(
97
100
  dbTable,
98
- await findRow(ctx, tableId, inputs._id)
101
+ await utils.findRow(ctx, tableId, inputs._id)
99
102
  )
100
103
  } catch (err) {
101
104
  if (isUserTable) {
@@ -117,8 +120,8 @@ export async function patch(ctx: BBContext) {
117
120
  }
118
121
 
119
122
  // this returns the table and row incase they have been updated
120
- let { table, row } = inputProcessing(ctx.user!, dbTable, combinedRow)
121
- const validateResult = await rowValidate({
123
+ let { table, row } = inputProcessing(ctx.user, dbTable, combinedRow)
124
+ const validateResult = await utils.validate({
122
125
  row,
123
126
  table,
124
127
  })
@@ -150,7 +153,7 @@ export async function patch(ctx: BBContext) {
150
153
  })
151
154
  }
152
155
 
153
- export async function save(ctx: BBContext) {
156
+ export async function save(ctx: UserCtx) {
154
157
  const db = context.getAppDB()
155
158
  let inputs = ctx.request.body
156
159
  inputs.tableId = ctx.params.tableId
@@ -161,8 +164,8 @@ export async function save(ctx: BBContext) {
161
164
 
162
165
  // this returns the table and row incase they have been updated
163
166
  const dbTable = await db.get(inputs.tableId)
164
- let { table, row } = inputProcessing(ctx.user!, dbTable, inputs)
165
- const validateResult = await rowValidate({
167
+ let { table, row } = inputProcessing(ctx.user, dbTable, inputs)
168
+ const validateResult = await utils.validate({
166
169
  row,
167
170
  table,
168
171
  })
@@ -185,8 +188,8 @@ export async function save(ctx: BBContext) {
185
188
  })
186
189
  }
187
190
 
188
- export async function fetchView(ctx: BBContext) {
189
- const viewName = ctx.params.viewName
191
+ export async function fetchView(ctx: Ctx) {
192
+ const viewName = decodeURIComponent(ctx.params.viewName)
190
193
 
191
194
  // if this is a table view being looked for just transfer to that
192
195
  if (viewName.startsWith(DocumentType.TABLE)) {
@@ -252,7 +255,7 @@ export async function fetchView(ctx: BBContext) {
252
255
  return rows
253
256
  }
254
257
 
255
- export async function fetch(ctx: BBContext) {
258
+ export async function fetch(ctx: Ctx) {
256
259
  const db = context.getAppDB()
257
260
 
258
261
  const tableId = ctx.params.tableId
@@ -261,15 +264,15 @@ export async function fetch(ctx: BBContext) {
261
264
  return outputProcessing(table, rows)
262
265
  }
263
266
 
264
- export async function find(ctx: BBContext) {
267
+ export async function find(ctx: Ctx) {
265
268
  const db = dbCore.getDB(ctx.appId)
266
269
  const table = await db.get(ctx.params.tableId)
267
- let row = await findRow(ctx, ctx.params.tableId, ctx.params.rowId)
270
+ let row = await utils.findRow(ctx, ctx.params.tableId, ctx.params.rowId)
268
271
  row = await outputProcessing(table, row)
269
272
  return row
270
273
  }
271
274
 
272
- export async function destroy(ctx: BBContext) {
275
+ export async function destroy(ctx: Ctx) {
273
276
  const db = context.getAppDB()
274
277
  const { _id } = ctx.request.body
275
278
  let row = await db.get(_id)
@@ -305,7 +308,7 @@ export async function destroy(ctx: BBContext) {
305
308
  return { response, row }
306
309
  }
307
310
 
308
- export async function bulkDestroy(ctx: BBContext) {
311
+ export async function bulkDestroy(ctx: Ctx) {
309
312
  const db = context.getAppDB()
310
313
  const tableId = ctx.params.tableId
311
314
  const table = await db.get(tableId)
@@ -344,7 +347,7 @@ export async function bulkDestroy(ctx: BBContext) {
344
347
  return { response: { ok: true }, rows: processedRows }
345
348
  }
346
349
 
347
- export async function search(ctx: BBContext) {
350
+ export async function search(ctx: Ctx) {
348
351
  // Fetch the whole table when running in cypress, as search doesn't work
349
352
  if (!env.COUCH_DB_URL && env.isCypress()) {
350
353
  return { rows: await fetch(ctx) }
@@ -356,6 +359,14 @@ export async function search(ctx: BBContext) {
356
359
  params.version = ctx.version
357
360
  params.tableId = tableId
358
361
 
362
+ let table
363
+ if (params.sort && !params.sortType) {
364
+ table = await db.get(tableId)
365
+ const schema = table.schema
366
+ const sortField = schema[params.sort]
367
+ params.sortType = sortField.type == "number" ? "number" : "string"
368
+ }
369
+
359
370
  let response
360
371
  if (paginate) {
361
372
  response = await paginatedSearch(query, params)
@@ -369,35 +380,44 @@ export async function search(ctx: BBContext) {
369
380
  if (tableId === InternalTables.USER_METADATA) {
370
381
  response.rows = await getGlobalUsersFromMetadata(response.rows)
371
382
  }
372
- const table = await db.get(tableId)
383
+ table = table || (await db.get(tableId))
373
384
  response.rows = await outputProcessing(table, response.rows)
374
385
  }
375
386
 
376
387
  return response
377
388
  }
378
389
 
379
- export async function validate(ctx: BBContext) {
380
- return rowValidate({
390
+ export async function validate(ctx: Ctx) {
391
+ return utils.validate({
381
392
  tableId: ctx.params.tableId,
382
393
  row: ctx.request.body,
383
394
  })
384
395
  }
385
396
 
386
- export async function exportRows(ctx: BBContext) {
397
+ export async function exportRows(ctx: Ctx) {
387
398
  const db = context.getAppDB()
388
399
  const table = await db.get(ctx.params.tableId)
389
400
  const rowIds = ctx.request.body.rows
390
401
  let format = ctx.query.format
391
- const { columns } = ctx.request.body
392
- let response = (
393
- await db.allDocs({
394
- include_docs: true,
395
- keys: rowIds,
396
- })
397
- ).rows.map(row => row.doc)
402
+ const { columns, query } = ctx.request.body
403
+
404
+ let result
405
+ if (rowIds) {
406
+ let response = (
407
+ await db.allDocs({
408
+ include_docs: true,
409
+ keys: rowIds,
410
+ })
411
+ ).rows.map(row => row.doc)
412
+
413
+ result = await outputProcessing(table, response)
414
+ } else if (query) {
415
+ let searchResponse = await exports.search(ctx)
416
+ result = searchResponse.rows
417
+ }
398
418
 
399
- let result = (await outputProcessing(table, response)) as Row[]
400
419
  let rows: Row[] = []
420
+ let schema = table.schema
401
421
 
402
422
  // Filter data to only specified columns if required
403
423
  if (columns && columns.length) {
@@ -411,24 +431,29 @@ export async function exportRows(ctx: BBContext) {
411
431
  rows = result
412
432
  }
413
433
 
414
- let headers = Object.keys(rows[0])
415
- // @ts-ignore
416
- const exporter = exporters[format]
417
- const filename = `export.${format}`
418
-
419
- // send down the file
420
- ctx.attachment(filename)
421
- return apiFileReturn(exporter(headers, rows))
434
+ let exportRows = cleanExportRows(rows, schema, format, columns)
435
+ if (format === Format.CSV) {
436
+ ctx.attachment("export.csv")
437
+ return apiFileReturn(csv(Object.keys(rows[0]), exportRows))
438
+ } else if (format === Format.JSON) {
439
+ ctx.attachment("export.json")
440
+ return apiFileReturn(json(exportRows))
441
+ } else if (format === Format.JSON_WITH_SCHEMA) {
442
+ ctx.attachment("export.json")
443
+ return apiFileReturn(jsonWithSchema(schema, exportRows))
444
+ } else {
445
+ throw "Format not recognised"
446
+ }
422
447
  }
423
448
 
424
- export async function fetchEnrichedRow(ctx: BBContext) {
449
+ export async function fetchEnrichedRow(ctx: Ctx) {
425
450
  const db = context.getAppDB()
426
451
  const tableId = ctx.params.tableId
427
452
  const rowId = ctx.params.rowId
428
453
  // need table to work out where links go in row
429
454
  let [table, row] = await Promise.all([
430
455
  db.get(tableId),
431
- findRow(ctx, tableId, rowId),
456
+ utils.findRow(ctx, tableId, rowId),
432
457
  ])
433
458
  // get the link docs
434
459
  const linkVals = (await linkRows.getLinkDocuments({
@@ -16,7 +16,10 @@ const { cloneDeep } = require("lodash/fp")
16
16
  * updated.
17
17
  * NOTE: this will only for affect static formulas.
18
18
  */
19
- export async function updateRelatedFormula(table: Table, enrichedRows: Row[]) {
19
+ export async function updateRelatedFormula(
20
+ table: Table,
21
+ enrichedRows: Row[] | Row
22
+ ) {
20
23
  const db = context.getAppDB()
21
24
  // no formula to update, we're done
22
25
  if (!table.relatedFormula) {
@@ -155,7 +158,7 @@ export async function finaliseRow(
155
158
  enrichedRow = await processFormulas(table, enrichedRow, { dynamic: false })
156
159
  // this updates the related formulas in other rows based on the relations to this row
157
160
  if (updateFormula) {
158
- await exports.updateRelatedFormula(table, enrichedRow)
161
+ await updateRelatedFormula(table, enrichedRow)
159
162
  }
160
163
  return { row: enrichedRow, table }
161
164
  }
@@ -7,6 +7,9 @@ import { BBContext, Row, Table } from "@budibase/types"
7
7
  export { removeKeyNumbering } from "../../../integrations/base/utils"
8
8
  const validateJs = require("validate.js")
9
9
  const { cloneDeep } = require("lodash/fp")
10
+ import { Format } from "../view/exporters"
11
+ import { Ctx } from "@budibase/types"
12
+ import sdk from "../../../sdk"
10
13
 
11
14
  validateJs.extend(validateJs.validators.datetime, {
12
15
  parse: function (value: string) {
@@ -20,12 +23,11 @@ validateJs.extend(validateJs.validators.datetime, {
20
23
 
21
24
  export async function getDatasourceAndQuery(json: any) {
22
25
  const datasourceId = json.endpoint.datasourceId
23
- const db = context.getAppDB()
24
- const datasource = await db.get(datasourceId)
26
+ const datasource = await sdk.datasources.get(datasourceId)
25
27
  return makeExternalQuery(datasource, json)
26
28
  }
27
29
 
28
- export async function findRow(ctx: BBContext, tableId: string, rowId: string) {
30
+ export async function findRow(ctx: Ctx, tableId: string, rowId: string) {
29
31
  const db = context.getAppDB()
30
32
  let row
31
33
  // TODO remove special user case in future
@@ -116,3 +118,40 @@ export async function validate({
116
118
  }
117
119
  return { valid: Object.keys(errors).length === 0, errors }
118
120
  }
121
+
122
+ export function cleanExportRows(
123
+ rows: any[],
124
+ schema: any,
125
+ format: string,
126
+ columns: string[]
127
+ ) {
128
+ let cleanRows = [...rows]
129
+
130
+ const relationships = Object.entries(schema)
131
+ .filter((entry: any[]) => entry[1].type === FieldTypes.LINK)
132
+ .map(entry => entry[0])
133
+
134
+ relationships.forEach(column => {
135
+ cleanRows.forEach(row => {
136
+ delete row[column]
137
+ })
138
+ delete schema[column]
139
+ })
140
+
141
+ // Intended to avoid 'undefined' in export
142
+ if (format === Format.CSV) {
143
+ const schemaKeys = Object.keys(schema)
144
+ for (let key of schemaKeys) {
145
+ if (columns?.length && columns.indexOf(key) > 0) {
146
+ continue
147
+ }
148
+ for (let row of cleanRows) {
149
+ if (row[key] == null) {
150
+ row[key] = ""
151
+ }
152
+ }
153
+ }
154
+ }
155
+
156
+ return cleanRows
157
+ }
@@ -1,24 +1,21 @@
1
- import { enrichPluginURLs } from "../../../utilities/plugins"
2
-
3
1
  require("svelte/register")
4
2
 
5
- const send = require("koa-send")
6
- const { resolve, join } = require("../../../utilities/centralPath")
3
+ import { resolve, join } from "../../../utilities/centralPath"
7
4
  const uuid = require("uuid")
8
- const { ObjectStoreBuckets } = require("../../../constants")
9
- const { processString } = require("@budibase/string-templates")
10
- const {
5
+ import { ObjectStoreBuckets } from "../../../constants"
6
+ import { processString } from "@budibase/string-templates"
7
+ import {
11
8
  loadHandlebarsFile,
12
9
  NODE_MODULES_PATH,
13
10
  TOP_LEVEL_PATH,
14
- } = require("../../../utilities/fileSystem")
15
- const env = require("../../../environment")
16
- const { clientLibraryPath } = require("../../../utilities")
17
- const { attachmentsRelativeURL } = require("../../../utilities")
18
- const { DocumentType } = require("../../../db/utils")
19
- const { context, objectStore, utils } = require("@budibase/backend-core")
20
- const AWS = require("aws-sdk")
21
- const fs = require("fs")
11
+ } from "../../../utilities/fileSystem"
12
+ import env from "../../../environment"
13
+ import { DocumentType } from "../../../db/utils"
14
+ import { context, objectStore, utils } from "@budibase/backend-core"
15
+ import AWS from "aws-sdk"
16
+ import fs from "fs"
17
+ import sdk from "../../../sdk"
18
+ const send = require("koa-send")
22
19
 
23
20
  async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
24
21
  const response = await objectStore.upload({
@@ -33,7 +30,7 @@ async function prepareUpload({ s3Key, bucket, metadata, file }: any) {
33
30
  return {
34
31
  size: file.size,
35
32
  name: file.name,
36
- url: attachmentsRelativeURL(response.Key),
33
+ url: objectStore.getAppFileUrl(s3Key),
37
34
  extension: [...file.name.split(".")].pop(),
38
35
  key: response.Key,
39
36
  }
@@ -85,7 +82,7 @@ export const uploadFile = async function (ctx: any) {
85
82
 
86
83
  return prepareUpload({
87
84
  file,
88
- s3Key: `${ctx.appId}/attachments/${processedFileName}`,
85
+ s3Key: `${context.getProdAppId()}/attachments/${processedFileName}`,
89
86
  bucket: ObjectStoreBuckets.APPS,
90
87
  })
91
88
  })
@@ -107,14 +104,14 @@ export const serveApp = async function (ctx: any) {
107
104
 
108
105
  if (!env.isJest()) {
109
106
  const App = require("./templates/BudibaseApp.svelte").default
110
- const plugins = enrichPluginURLs(appInfo.usedPlugins)
107
+ const plugins = objectStore.enrichPluginURLs(appInfo.usedPlugins)
111
108
  const { head, html, css } = App.render({
112
109
  metaImage:
113
110
  "https://res.cloudinary.com/daog6scxm/image/upload/v1666109324/meta-images/budibase-meta-image_uukc1m.png",
114
111
  title: appInfo.name,
115
112
  production: env.isProd(),
116
113
  appId,
117
- clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
114
+ clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
118
115
  usedPlugins: plugins,
119
116
  })
120
117
 
@@ -139,7 +136,7 @@ export const serveBuilderPreview = async function (ctx: any) {
139
136
  let appId = context.getAppId()
140
137
  const previewHbs = loadHandlebarsFile(`${__dirname}/templates/preview.hbs`)
141
138
  ctx.body = await processString(previewHbs, {
142
- clientLibPath: clientLibraryPath(appId, appInfo.version, ctx),
139
+ clientLibPath: objectStore.clientLibraryUrl(appId!, appInfo.version),
143
140
  })
144
141
  } else {
145
142
  // just return the app info for jest to assert on
@@ -154,13 +151,11 @@ export const serveClientLibrary = async function (ctx: any) {
154
151
  }
155
152
 
156
153
  export const getSignedUploadURL = async function (ctx: any) {
157
- const database = context.getAppDB()
158
-
159
154
  // Ensure datasource is valid
160
155
  let datasource
161
156
  try {
162
157
  const { datasourceId } = ctx.params
163
- datasource = await database.get(datasourceId)
158
+ datasource = await sdk.datasources.get(datasourceId, { enriched: true })
164
159
  if (!datasource) {
165
160
  ctx.throw(400, "The specified datasource could not be found")
166
161
  }
@@ -176,8 +171,8 @@ export const getSignedUploadURL = async function (ctx: any) {
176
171
  // Determine type of datasource and generate signed URL
177
172
  let signedUrl
178
173
  let publicUrl
179
- const awsRegion = datasource?.config?.region || "eu-west-1"
180
- if (datasource.source === "S3") {
174
+ const awsRegion = (datasource?.config?.region || "eu-west-1") as string
175
+ if (datasource?.source === "S3") {
181
176
  const { bucket, key } = ctx.request.body || {}
182
177
  if (!bucket || !key) {
183
178
  ctx.throw(400, "bucket and key values are required")
@@ -186,8 +181,8 @@ export const getSignedUploadURL = async function (ctx: any) {
186
181
  try {
187
182
  const s3 = new AWS.S3({
188
183
  region: awsRegion,
189
- accessKeyId: datasource?.config?.accessKeyId,
190
- secretAccessKey: datasource?.config?.secretAccessKey,
184
+ accessKeyId: datasource?.config?.accessKeyId as string,
185
+ secretAccessKey: datasource?.config?.secretAccessKey as string,
191
186
  apiVersion: "2006-03-01",
192
187
  signatureVersion: "v4",
193
188
  })
@@ -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
@@ -10,9 +10,9 @@ import {
10
10
  } from "./utils"
11
11
  import { FieldTypes, RelationshipTypes } from "../../../constants"
12
12
  import { makeExternalQuery } from "../../../integrations/base/query"
13
- import * as csvParser from "../../../utilities/csvParser"
14
13
  import { handleRequest } from "../row/external"
15
14
  import { events, context } from "@budibase/backend-core"
15
+ import { parse, isRows, isSchema } from "../../../utilities/schema"
16
16
  import {
17
17
  Datasource,
18
18
  Table,
@@ -197,7 +197,7 @@ export async function save(ctx: BBContext) {
197
197
  const table: TableRequest = ctx.request.body
198
198
  const renamed = table?._rename
199
199
  // can't do this right now
200
- delete table.dataImport
200
+ delete table.rows
201
201
  const datasourceId = getDatasourceId(ctx.request.body)!
202
202
  // table doesn't exist already, note that it is created
203
203
  if (!table._id) {
@@ -219,7 +219,7 @@ export async function save(ctx: BBContext) {
219
219
  }
220
220
 
221
221
  const db = context.getAppDB()
222
- const datasource = await db.get(datasourceId)
222
+ const datasource = await sdk.datasources.get(datasourceId)
223
223
  if (!datasource.entities) {
224
224
  datasource.entities = {}
225
225
  }
@@ -322,15 +322,17 @@ export async function destroy(ctx: BBContext) {
322
322
  const datasourceId = getDatasourceId(tableToDelete)
323
323
 
324
324
  const db = context.getAppDB()
325
- const datasource = await db.get(datasourceId)
325
+ const datasource = await sdk.datasources.get(datasourceId!)
326
326
  const tables = datasource.entities
327
327
 
328
328
  const operation = Operation.DELETE_TABLE
329
- await makeTableRequest(datasource, operation, tableToDelete, tables)
330
-
331
- cleanupRelationships(tableToDelete, tables)
329
+ if (tables) {
330
+ await makeTableRequest(datasource, operation, tableToDelete, tables)
331
+ cleanupRelationships(tableToDelete, tables)
332
+ delete tables[tableToDelete.name]
333
+ datasource.entities = tables
334
+ }
332
335
 
333
- delete datasource.entities[tableToDelete.name]
334
336
  await db.put(datasource)
335
337
 
336
338
  return tableToDelete
@@ -338,17 +340,17 @@ export async function destroy(ctx: BBContext) {
338
340
 
339
341
  export async function bulkImport(ctx: BBContext) {
340
342
  const table = await sdk.tables.getTable(ctx.params.tableId)
341
- const { dataImport } = ctx.request.body
342
- if (!dataImport || !dataImport.schema || !dataImport.csvString) {
343
+ const { rows }: { rows: unknown } = ctx.request.body
344
+ const schema: unknown = table.schema
345
+
346
+ if (!rows || !isRows(rows) || !isSchema(schema)) {
343
347
  ctx.throw(400, "Provided data import information is invalid.")
344
348
  }
345
- const rows = await csvParser.transform({
346
- ...dataImport,
347
- existingTable: table,
348
- })
349
+
350
+ const parsedRows = await parse(rows, schema)
349
351
  await handleRequest(Operation.BULK_CREATE, table._id!, {
350
- rows,
352
+ rows: parsedRows,
351
353
  })
352
- await events.rows.imported(table, "csv", rows.length)
354
+ await events.rows.imported(table, parsedRows.length)
353
355
  return table
354
356
  }
@@ -1,11 +1,16 @@
1
1
  import * as internal from "./internal"
2
2
  import * as external from "./external"
3
- import * as csvParser from "../../../utilities/csvParser"
3
+ import {
4
+ validate as validateSchema,
5
+ isSchema,
6
+ isRows,
7
+ } from "../../../utilities/schema"
4
8
  import { isExternalTable, isSQL } from "../../../integrations/utils"
5
9
  import { getDatasourceParams } from "../../../db/utils"
6
10
  import { context, events } from "@budibase/backend-core"
7
11
  import { Table, BBContext } from "@budibase/types"
8
12
  import sdk from "../../../sdk"
13
+ import csv from "csvtojson"
9
14
 
10
15
  function pickApi({ tableId, table }: { tableId?: string; table?: Table }) {
11
16
  if (table && !tableId) {
@@ -56,16 +61,16 @@ export async function find(ctx: BBContext) {
56
61
  export async function save(ctx: BBContext) {
57
62
  const appId = ctx.appId
58
63
  const table = ctx.request.body
59
- const importFormat =
60
- table.dataImport && table.dataImport.csvString ? "csv" : undefined
64
+ const isImport = table.rows
65
+
61
66
  const savedTable = await pickApi({ table }).save(ctx)
62
67
  if (!table._id) {
63
68
  await events.table.created(savedTable)
64
69
  } else {
65
70
  await events.table.updated(savedTable)
66
71
  }
67
- if (importFormat) {
68
- await events.table.imported(savedTable, importFormat)
72
+ if (isImport) {
73
+ await events.table.imported(savedTable)
69
74
  }
70
75
  ctx.status = 200
71
76
  ctx.message = `Table ${table.name} saved successfully.`
@@ -96,19 +101,43 @@ export async function bulkImport(ctx: BBContext) {
96
101
  ctx.body = { message: `Bulk rows created.` }
97
102
  }
98
103
 
99
- export async function validateCSVSchema(ctx: BBContext) {
100
- // tableId being specified means its an import to an existing table
101
- const { csvString, schema = {}, tableId } = ctx.request.body
102
- let existingTable
104
+ export async function csvToJson(ctx: BBContext) {
105
+ const { csvString } = ctx.request.body
106
+
107
+ const result = await csv().fromString(csvString)
108
+
109
+ ctx.status = 200
110
+ ctx.body = result
111
+ }
112
+
113
+ export async function validateNewTableImport(ctx: BBContext) {
114
+ const { rows, schema }: { rows: unknown; schema: unknown } = ctx.request.body
115
+
116
+ if (isRows(rows) && isSchema(schema)) {
117
+ ctx.status = 200
118
+ ctx.body = validateSchema(rows, schema)
119
+ } else {
120
+ ctx.status = 422
121
+ }
122
+ }
123
+
124
+ export async function validateExistingTableImport(ctx: BBContext) {
125
+ const { rows, tableId }: { rows: unknown; tableId: unknown } =
126
+ ctx.request.body
127
+
128
+ let schema = null
103
129
  if (tableId) {
104
- existingTable = await sdk.tables.getTable(tableId)
130
+ const table = await sdk.tables.getTable(tableId)
131
+ schema = table.schema
132
+ } else {
133
+ ctx.status = 422
134
+ return
105
135
  }
106
- let result: Record<string, any> | undefined = await csvParser.parse(
107
- csvString,
108
- schema
109
- )
110
- if (existingTable) {
111
- result = csvParser.updateSchema({ schema: result, existingTable })
136
+
137
+ if (tableId && isRows(rows) && isSchema(schema)) {
138
+ ctx.status = 200
139
+ ctx.body = validateSchema(rows, schema)
140
+ } else {
141
+ ctx.status = 422
112
142
  }
113
- ctx.body = { schema: result }
114
143
  }