@budibase/server 2.2.12-alpha.20 → 2.2.12-alpha.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. package/builder/assets/{index.fa480d5b.css → index.34817feb.css} +1 -1
  2. package/builder/assets/{index.35af2c9c.js → index.61dfdc1c.js} +245 -244
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +772 -771
  5. package/coverage/coverage-final.json +40 -40
  6. package/coverage/lcov-report/index.html +55 -55
  7. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +1 -1
  8. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +1 -1
  9. package/coverage/lcov-report/src/api/controllers/application.ts.html +56 -56
  10. package/coverage/lcov-report/src/api/controllers/auth.ts.html +1 -1
  11. package/coverage/lcov-report/src/api/controllers/automation.ts.html +1 -1
  12. package/coverage/lcov-report/src/api/controllers/backup.ts.html +1 -1
  13. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +1 -1
  14. package/coverage/lcov-report/src/api/controllers/component.ts.html +1 -1
  15. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +1 -1
  16. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +12 -12
  17. package/coverage/lcov-report/src/api/controllers/deploy/index.html +1 -1
  18. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +69 -69
  19. package/coverage/lcov-report/src/api/controllers/dev.ts.html +1 -1
  20. package/coverage/lcov-report/src/api/controllers/index.html +1 -1
  21. package/coverage/lcov-report/src/api/controllers/integration.ts.html +1 -1
  22. package/coverage/lcov-report/src/api/controllers/layout.ts.html +1 -1
  23. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +1 -1
  24. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +1 -1
  25. package/coverage/lcov-report/src/api/controllers/permission.ts.html +1 -1
  26. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +1 -1
  27. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +1 -1
  28. package/coverage/lcov-report/src/api/controllers/plugin/index.html +1 -1
  29. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +1 -1
  30. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +1 -1
  31. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +1 -1
  32. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +1 -1
  33. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +1 -1
  34. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +1 -1
  35. package/coverage/lcov-report/src/api/controllers/public/index.html +1 -1
  36. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +1 -1
  37. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +1 -1
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +1 -1
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +1 -1
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +1 -1
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +1 -1
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +1 -1
  43. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +1 -1
  44. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +1 -1
  45. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +1 -1
  46. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +1 -1
  47. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +1 -1
  48. package/coverage/lcov-report/src/api/controllers/query/import/index.html +1 -1
  49. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +1 -1
  50. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +1 -1
  51. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +1 -1
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +1 -1
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +1 -1
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +1 -1
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +1 -1
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +1 -1
  57. package/coverage/lcov-report/src/api/controllers/query/index.html +1 -1
  58. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +1 -1
  59. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +1 -1
  60. package/coverage/lcov-report/src/api/controllers/role.ts.html +1 -1
  61. package/coverage/lcov-report/src/api/controllers/routing.ts.html +1 -1
  62. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +1 -1
  63. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +1 -1
  64. package/coverage/lcov-report/src/api/controllers/row/index.html +15 -15
  65. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +1 -1
  66. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +23 -20
  67. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +1 -1
  68. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +1 -1
  69. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +1 -1
  70. package/coverage/lcov-report/src/api/controllers/screen.ts.html +1 -1
  71. package/coverage/lcov-report/src/api/controllers/script.ts.html +1 -1
  72. package/coverage/lcov-report/src/api/controllers/static/index.html +1 -1
  73. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +1 -1
  74. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +1 -1
  75. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +17 -17
  76. package/coverage/lcov-report/src/api/controllers/table/index.html +33 -33
  77. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +122 -35
  78. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +5 -5
  79. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +23 -26
  80. package/coverage/lcov-report/src/api/controllers/templates.ts.html +1 -1
  81. package/coverage/lcov-report/src/api/controllers/user.ts.html +1 -1
  82. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +61 -16
  83. package/coverage/lcov-report/src/api/controllers/view/index.html +28 -28
  84. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +52 -25
  85. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +1 -1
  86. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +1 -1
  87. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +1 -1
  88. package/coverage/lcov-report/src/api/index.html +1 -1
  89. package/coverage/lcov-report/src/api/index.ts.html +5 -5
  90. package/coverage/lcov-report/src/api/routes/analytics.ts.html +1 -1
  91. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +1 -1
  92. package/coverage/lcov-report/src/api/routes/application.ts.html +1 -1
  93. package/coverage/lcov-report/src/api/routes/auth.ts.html +1 -1
  94. package/coverage/lcov-report/src/api/routes/automation.ts.html +1 -1
  95. package/coverage/lcov-report/src/api/routes/backup.ts.html +1 -1
  96. package/coverage/lcov-report/src/api/routes/cloud.ts.html +1 -1
  97. package/coverage/lcov-report/src/api/routes/component.ts.html +1 -1
  98. package/coverage/lcov-report/src/api/routes/datasource.ts.html +1 -1
  99. package/coverage/lcov-report/src/api/routes/deploy.ts.html +1 -1
  100. package/coverage/lcov-report/src/api/routes/dev.ts.html +1 -1
  101. package/coverage/lcov-report/src/api/routes/index.html +1 -1
  102. package/coverage/lcov-report/src/api/routes/index.ts.html +1 -1
  103. package/coverage/lcov-report/src/api/routes/integration.ts.html +1 -1
  104. package/coverage/lcov-report/src/api/routes/layout.ts.html +1 -1
  105. package/coverage/lcov-report/src/api/routes/metadata.ts.html +1 -1
  106. package/coverage/lcov-report/src/api/routes/migrations.ts.html +1 -1
  107. package/coverage/lcov-report/src/api/routes/permission.ts.html +1 -1
  108. package/coverage/lcov-report/src/api/routes/plugin.ts.html +1 -1
  109. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +1 -1
  110. package/coverage/lcov-report/src/api/routes/public/index.html +1 -1
  111. package/coverage/lcov-report/src/api/routes/public/index.ts.html +1 -1
  112. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +1 -1
  113. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +1 -1
  114. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +1 -1
  115. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +1 -1
  116. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +1 -1
  117. package/coverage/lcov-report/src/api/routes/public/tests/index.html +1 -1
  118. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +1 -1
  119. package/coverage/lcov-report/src/api/routes/public/users.ts.html +1 -1
  120. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +1 -1
  121. package/coverage/lcov-report/src/api/routes/public/utils/index.html +1 -1
  122. package/coverage/lcov-report/src/api/routes/query.ts.html +1 -1
  123. package/coverage/lcov-report/src/api/routes/role.ts.html +1 -1
  124. package/coverage/lcov-report/src/api/routes/routing.ts.html +1 -1
  125. package/coverage/lcov-report/src/api/routes/row.ts.html +1 -1
  126. package/coverage/lcov-report/src/api/routes/screen.ts.html +1 -1
  127. package/coverage/lcov-report/src/api/routes/script.ts.html +1 -1
  128. package/coverage/lcov-report/src/api/routes/static.ts.html +1 -1
  129. package/coverage/lcov-report/src/api/routes/table.ts.html +17 -86
  130. package/coverage/lcov-report/src/api/routes/templates.ts.html +1 -1
  131. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +1 -1
  132. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +1 -1
  133. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +1 -1
  134. package/coverage/lcov-report/src/api/routes/user.ts.html +1 -1
  135. package/coverage/lcov-report/src/api/routes/utils/index.html +1 -1
  136. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +2 -2
  137. package/coverage/lcov-report/src/api/routes/view.ts.html +1 -1
  138. package/coverage/lcov-report/src/api/routes/webhook.ts.html +1 -1
  139. package/coverage/lcov-report/src/app.ts.html +1 -1
  140. package/coverage/lcov-report/src/automations/actions.ts.html +1 -1
  141. package/coverage/lcov-report/src/automations/automationUtils.ts.html +1 -1
  142. package/coverage/lcov-report/src/automations/bullboard.ts.html +2 -2
  143. package/coverage/lcov-report/src/automations/index.html +1 -1
  144. package/coverage/lcov-report/src/automations/index.ts.html +1 -1
  145. package/coverage/lcov-report/src/automations/logging/index.html +1 -1
  146. package/coverage/lcov-report/src/automations/logging/index.ts.html +1 -1
  147. package/coverage/lcov-report/src/automations/steps/bash.ts.html +1 -1
  148. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +1 -1
  149. package/coverage/lcov-report/src/automations/steps/delay.ts.html +1 -1
  150. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +1 -1
  151. package/coverage/lcov-report/src/automations/steps/discord.ts.html +1 -1
  152. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +1 -1
  153. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +1 -1
  154. package/coverage/lcov-report/src/automations/steps/filter.ts.html +1 -1
  155. package/coverage/lcov-report/src/automations/steps/index.html +1 -1
  156. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +1 -1
  157. package/coverage/lcov-report/src/automations/steps/loop.ts.html +1 -1
  158. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +1 -1
  159. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +1 -1
  160. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +1 -1
  161. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +1 -1
  162. package/coverage/lcov-report/src/automations/steps/slack.ts.html +1 -1
  163. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +1 -1
  164. package/coverage/lcov-report/src/automations/steps/utils.ts.html +1 -1
  165. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +1 -1
  166. package/coverage/lcov-report/src/automations/tests/utilities/index.html +1 -1
  167. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +1 -1
  168. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +1 -1
  169. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +1 -1
  170. package/coverage/lcov-report/src/automations/triggerInfo/index.html +1 -1
  171. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +1 -1
  172. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +1 -1
  173. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +1 -1
  174. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +1 -1
  175. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +1 -1
  176. package/coverage/lcov-report/src/automations/triggers.ts.html +1 -1
  177. package/coverage/lcov-report/src/automations/utils.ts.html +11 -11
  178. package/coverage/lcov-report/src/constants/index.html +1 -1
  179. package/coverage/lcov-report/src/constants/index.ts.html +25 -25
  180. package/coverage/lcov-report/src/constants/layouts.ts.html +1 -1
  181. package/coverage/lcov-report/src/constants/screens.ts.html +1 -1
  182. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +1 -1
  183. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +1 -1
  184. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +1 -1
  185. package/coverage/lcov-report/src/db/defaultData/index.html +1 -1
  186. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +1 -1
  187. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +1 -1
  188. package/coverage/lcov-report/src/db/dynamoClient.ts.html +1 -1
  189. package/coverage/lcov-report/src/db/inMemoryView.ts.html +1 -1
  190. package/coverage/lcov-report/src/db/index.html +1 -1
  191. package/coverage/lcov-report/src/db/index.ts.html +1 -1
  192. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +1 -1
  193. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +1 -1
  194. package/coverage/lcov-report/src/db/linkedRows/index.html +1 -1
  195. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +1 -1
  196. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +1 -1
  197. package/coverage/lcov-report/src/db/newid.ts.html +3 -3
  198. package/coverage/lcov-report/src/db/utils.ts.html +15 -15
  199. package/coverage/lcov-report/src/definitions/automations.ts.html +1 -1
  200. package/coverage/lcov-report/src/definitions/datasource.ts.html +1 -1
  201. package/coverage/lcov-report/src/definitions/index.html +1 -1
  202. package/coverage/lcov-report/src/environment.ts.html +19 -19
  203. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +1 -1
  204. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +1 -1
  205. package/coverage/lcov-report/src/events/index.html +1 -1
  206. package/coverage/lcov-report/src/events/index.ts.html +1 -1
  207. package/coverage/lcov-report/src/events/utils.ts.html +1 -1
  208. package/coverage/lcov-report/src/index.html +1 -1
  209. package/coverage/lcov-report/src/index.ts.html +1 -1
  210. package/coverage/lcov-report/src/integrations/airtable.ts.html +1 -1
  211. package/coverage/lcov-report/src/integrations/arangodb.ts.html +1 -1
  212. package/coverage/lcov-report/src/integrations/base/index.html +1 -1
  213. package/coverage/lcov-report/src/integrations/base/query.ts.html +1 -1
  214. package/coverage/lcov-report/src/integrations/base/sql.ts.html +1 -1
  215. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +1 -1
  216. package/coverage/lcov-report/src/integrations/base/utils.ts.html +1 -1
  217. package/coverage/lcov-report/src/integrations/couchdb.ts.html +1 -1
  218. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +1 -1
  219. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +1 -1
  220. package/coverage/lcov-report/src/integrations/firebase.ts.html +1 -1
  221. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +1 -1
  222. package/coverage/lcov-report/src/integrations/index.html +1 -1
  223. package/coverage/lcov-report/src/integrations/index.ts.html +1 -1
  224. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +1 -1
  225. package/coverage/lcov-report/src/integrations/mongodb.ts.html +1 -1
  226. package/coverage/lcov-report/src/integrations/mysql.ts.html +1 -1
  227. package/coverage/lcov-report/src/integrations/oracle.ts.html +1 -1
  228. package/coverage/lcov-report/src/integrations/postgres.ts.html +1 -1
  229. package/coverage/lcov-report/src/integrations/queries/index.html +1 -1
  230. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +1 -1
  231. package/coverage/lcov-report/src/integrations/redis.ts.html +1 -1
  232. package/coverage/lcov-report/src/integrations/rest.ts.html +1 -1
  233. package/coverage/lcov-report/src/integrations/s3.ts.html +1 -1
  234. package/coverage/lcov-report/src/integrations/snowflake.ts.html +1 -1
  235. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +1 -1
  236. package/coverage/lcov-report/src/integrations/tests/index.html +1 -1
  237. package/coverage/lcov-report/src/integrations/utils.ts.html +1 -1
  238. package/coverage/lcov-report/src/middleware/appInfo.ts.html +1 -1
  239. package/coverage/lcov-report/src/middleware/authorized.ts.html +21 -21
  240. package/coverage/lcov-report/src/middleware/builder.ts.html +12 -12
  241. package/coverage/lcov-report/src/middleware/currentapp.ts.html +33 -33
  242. package/coverage/lcov-report/src/middleware/index.html +1 -1
  243. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +1 -1
  244. package/coverage/lcov-report/src/middleware/publicApi.ts.html +1 -1
  245. package/coverage/lcov-report/src/middleware/resourceId.ts.html +1 -1
  246. package/coverage/lcov-report/src/middleware/selfhost.ts.html +1 -1
  247. package/coverage/lcov-report/src/middleware/utils.ts.html +3 -3
  248. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +1 -1
  249. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +1 -1
  250. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +1 -1
  251. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +1 -1
  252. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +1 -1
  253. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +1 -1
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +1 -1
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +1 -1
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +1 -1
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +1 -1
  258. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +1 -1
  259. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +1 -1
  260. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +1 -1
  261. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +1 -1
  262. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +1 -1
  263. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +1 -1
  264. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +1 -1
  265. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +1 -1
  266. package/coverage/lcov-report/src/migrations/functions/index.html +1 -1
  267. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +1 -1
  268. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +1 -1
  269. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +1 -1
  270. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +1 -1
  271. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +1 -1
  272. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +1 -1
  273. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +1 -1
  274. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +1 -1
  275. package/coverage/lcov-report/src/migrations/index.html +1 -1
  276. package/coverage/lcov-report/src/migrations/index.ts.html +1 -1
  277. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +1 -1
  278. package/coverage/lcov-report/src/migrations/tests/index.html +1 -1
  279. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +1 -1
  280. package/coverage/lcov-report/src/sdk/app/applications/index.html +1 -1
  281. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +1 -1
  282. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +18 -18
  283. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +7 -7
  284. package/coverage/lcov-report/src/sdk/app/automations/index.html +1 -1
  285. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +1 -1
  286. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +1 -1
  287. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +1 -1
  288. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +1 -1
  289. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +1 -1
  290. package/coverage/lcov-report/src/sdk/app/backups/index.html +1 -1
  291. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +1 -1
  292. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +1 -1
  293. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +1 -1
  294. package/coverage/lcov-report/src/sdk/app/rows/index.html +1 -1
  295. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +1 -1
  296. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +1 -1
  297. package/coverage/lcov-report/src/sdk/app/tables/index.html +1 -1
  298. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +1 -1
  299. package/coverage/lcov-report/src/sdk/index.html +1 -1
  300. package/coverage/lcov-report/src/sdk/index.ts.html +2 -2
  301. package/coverage/lcov-report/src/sdk/users/index.html +1 -1
  302. package/coverage/lcov-report/src/sdk/users/index.ts.html +1 -1
  303. package/coverage/lcov-report/src/sdk/users/utils.ts.html +20 -20
  304. package/coverage/lcov-report/src/startup.ts.html +1 -1
  305. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +59 -59
  306. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +3 -3
  307. package/coverage/lcov-report/src/tests/utilities/index.html +1 -1
  308. package/coverage/lcov-report/src/tests/utilities/index.ts.html +1 -1
  309. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +2 -2
  310. package/coverage/lcov-report/src/threads/automation.ts.html +1 -1
  311. package/coverage/lcov-report/src/threads/index.html +1 -1
  312. package/coverage/lcov-report/src/threads/index.ts.html +1 -1
  313. package/coverage/lcov-report/src/threads/query.ts.html +1 -1
  314. package/coverage/lcov-report/src/threads/utils.ts.html +1 -1
  315. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +3 -3
  316. package/coverage/lcov-report/src/utilities/centralPath.ts.html +2 -2
  317. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +16 -16
  318. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +8 -8
  319. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +30 -30
  320. package/coverage/lcov-report/src/utilities/fileSystem/index.html +15 -15
  321. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +6 -6
  322. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +8 -8
  323. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +1 -1
  324. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +7 -7
  325. package/coverage/lcov-report/src/utilities/global.ts.html +33 -33
  326. package/coverage/lcov-report/src/utilities/index.html +24 -24
  327. package/coverage/lcov-report/src/utilities/index.ts.html +4 -4
  328. package/coverage/lcov-report/src/utilities/redis.ts.html +1 -1
  329. package/coverage/lcov-report/src/utilities/routing/index.html +1 -1
  330. package/coverage/lcov-report/src/utilities/routing/index.ts.html +1 -1
  331. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +1 -1
  332. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +1 -1
  333. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +1 -1
  334. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +1 -1
  335. package/coverage/lcov-report/src/utilities/{csvParser.ts.html → schema.ts.html} +173 -233
  336. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +1 -1
  337. package/coverage/lcov-report/src/utilities/security.ts.html +1 -1
  338. package/coverage/lcov-report/src/utilities/usageQuota/index.html +1 -1
  339. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +1 -1
  340. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +1 -1
  341. package/coverage/lcov-report/src/utilities/users.ts.html +1 -1
  342. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +1 -1
  343. package/coverage/lcov-report/src/watch.ts.html +1 -1
  344. package/coverage/lcov-report/src/websocket.ts.html +1 -1
  345. package/coverage/lcov.info +1303 -1267
  346. package/dist/api/controllers/row/internal.js +12 -8
  347. package/dist/api/controllers/table/external.js +8 -30
  348. package/dist/api/controllers/table/index.js +44 -15
  349. package/dist/api/controllers/table/internal.js +4 -4
  350. package/dist/api/controllers/table/utils.js +9 -9
  351. package/dist/api/controllers/view/exporters.js +22 -6
  352. package/dist/api/controllers/view/index.js +19 -34
  353. package/dist/api/routes/table.js +6 -37
  354. package/dist/api/routes/utils/validators.js +1 -1
  355. package/dist/package.json +6 -6
  356. package/dist/tsconfig.build.tsbuildinfo +1 -1
  357. package/dist/utilities/schema.js +108 -0
  358. package/package.json +7 -7
  359. package/src/api/controllers/row/internal.ts +10 -9
  360. package/src/api/controllers/table/external.ts +10 -10
  361. package/src/api/controllers/table/index.ts +46 -17
  362. package/src/api/controllers/table/internal.ts +4 -4
  363. package/src/api/controllers/table/utils.ts +12 -13
  364. package/src/api/controllers/view/exporters.ts +20 -5
  365. package/src/api/controllers/view/index.ts +21 -12
  366. package/src/api/routes/table.ts +15 -38
  367. package/src/api/routes/tests/misc.spec.js +4 -10
  368. package/src/api/routes/tests/table.spec.js +8 -30
  369. package/src/api/routes/utils/validators.ts +1 -1
  370. package/src/utilities/schema.ts +141 -0
  371. package/dist/utilities/csvParser.js +0 -152
  372. package/src/utilities/csvParser.ts +0 -161
  373. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -15
  374. package/src/utilities/tests/csvParser.spec.js +0 -112
@@ -61,7 +61,7 @@ const utils_2 = require("../view/utils");
61
61
  const fp_1 = require("lodash/fp");
62
62
  const backend_core_1 = require("@budibase/backend-core");
63
63
  const staticFormula_1 = require("./staticFormula");
64
- const exporters = __importStar(require("../view/exporters"));
64
+ const exporters_1 = require("../view/exporters");
65
65
  const fileSystem_1 = require("../../../utilities/fileSystem");
66
66
  const CALCULATION_TYPES = {
67
67
  SUM: "sum",
@@ -418,13 +418,17 @@ function exportRows(ctx) {
418
418
  else {
419
419
  rows = result;
420
420
  }
421
- let headers = Object.keys(rows[0]);
422
- // @ts-ignore
423
- const exporter = exporters[format];
424
- const filename = `export.${format}`;
425
- // send down the file
426
- ctx.attachment(filename);
427
- return (0, fileSystem_1.apiFileReturn)(exporter(headers, rows));
421
+ if (format === exporters_1.Format.CSV) {
422
+ ctx.attachment("export.csv");
423
+ return (0, fileSystem_1.apiFileReturn)((0, exporters_1.csv)(Object.keys(rows[0]), rows));
424
+ }
425
+ else if (format === exporters_1.Format.JSON) {
426
+ ctx.attachment("export.json");
427
+ return (0, fileSystem_1.apiFileReturn)((0, exporters_1.json)(rows));
428
+ }
429
+ else {
430
+ throw "Format not recognised";
431
+ }
428
432
  });
429
433
  }
430
434
  exports.exportRows = exportRows;
@@ -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) {
@@ -279,15 +256,16 @@ exports.destroy = destroy;
279
256
  function bulkImport(ctx) {
280
257
  return __awaiter(this, void 0, void 0, function* () {
281
258
  const table = yield sdk_1.default.tables.getTable(ctx.params.tableId);
282
- const { dataImport } = ctx.request.body;
283
- if (!dataImport || !dataImport.schema || !dataImport.csvString) {
259
+ const { rows } = ctx.request.body;
260
+ const schema = table.schema;
261
+ if (!rows || !(0, schema_1.isRows)(rows) || !(0, schema_1.isSchema)(schema)) {
284
262
  ctx.throw(400, "Provided data import information is invalid.");
285
263
  }
286
- const rows = yield csvParser.transform(Object.assign(Object.assign({}, dataImport), { existingTable: table }));
264
+ const parsedRows = yield (0, schema_1.parse)(rows, schema);
287
265
  yield (0, external_1.handleRequest)(types_1.Operation.BULK_CREATE, table._id, {
288
- rows,
266
+ rows: parsedRows,
289
267
  });
290
- yield backend_core_1.events.rows.imported(table, "csv", rows.length);
268
+ yield backend_core_1.events.rows.imported(table, parsedRows.length);
291
269
  return table;
292
270
  });
293
271
  }
@@ -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;
@@ -57,7 +57,7 @@ function checkAutoColumns(table, oldTable) {
57
57
  function save(ctx) {
58
58
  return __awaiter(this, void 0, void 0, function* () {
59
59
  const db = backend_core_1.context.getAppDB();
60
- const _a = ctx.request.body, { dataImport } = _a, rest = __rest(_a, ["dataImport"]);
60
+ const _a = ctx.request.body, { rows } = _a, rest = __rest(_a, ["rows"]);
61
61
  let tableToSave = Object.assign({ type: "table", _id: (0, utils_1.generateTableID)(), views: {} }, rest);
62
62
  // if the table obj had an _id then it will have been retrieved
63
63
  let oldTable;
@@ -75,7 +75,7 @@ function save(ctx) {
75
75
  const tableSaveFunctions = new utils_2.TableSaveFunctions({
76
76
  user: ctx.user,
77
77
  oldTable,
78
- dataImport,
78
+ importRows: rows,
79
79
  });
80
80
  tableToSave = yield tableSaveFunctions.before(tableToSave);
81
81
  // make sure that types don't change of a column, have to remove
@@ -186,8 +186,8 @@ exports.destroy = destroy;
186
186
  function bulkImport(ctx) {
187
187
  return __awaiter(this, void 0, void 0, function* () {
188
188
  const table = yield sdk_1.default.tables.getTable(ctx.params.tableId);
189
- const { dataImport } = ctx.request.body;
190
- 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);
191
191
  return table;
192
192
  });
193
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
  }
@@ -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;
@@ -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) {
@@ -49,7 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
49
26
  exports.exportView = exports.destroy = exports.filterEvents = exports.calculationEvents = exports.save = exports.fetch = void 0;
50
27
  const viewBuilder_1 = __importDefault(require("./viewBuilder"));
51
28
  const fileSystem_1 = require("../../../utilities/fileSystem");
52
- const exporters = __importStar(require("./exporters"));
29
+ const exporters_1 = require("./exporters");
53
30
  const utils_1 = require("./utils");
54
31
  const row_1 = require("../row");
55
32
  const constants_1 = require("../../../constants");
@@ -160,8 +137,8 @@ function exportView(ctx) {
160
137
  const viewName = decodeURIComponent(ctx.query.view);
161
138
  const view = yield (0, utils_1.getView)(viewName);
162
139
  const format = ctx.query.format;
163
- if (!format || !Object.values(exporters.ExportFormats).includes(format)) {
164
- ctx.throw(400, "Format must be specified, either csv or json");
140
+ if (!(0, exporters_1.isFormat)(format)) {
141
+ ctx.throw(400, "Format must be specified, either csv, json or jsonWithSchema");
165
142
  }
166
143
  if (view) {
167
144
  ctx.params.viewName = viewName;
@@ -199,7 +176,7 @@ function exportView(ctx) {
199
176
  delete schema[column];
200
177
  });
201
178
  // make sure no "undefined" entries appear in the CSV
202
- if (format === exporters.ExportFormats.CSV) {
179
+ if (format === exporters_1.Format.CSV) {
203
180
  const schemaKeys = Object.keys(schema);
204
181
  for (let key of schemaKeys) {
205
182
  for (let row of rows) {
@@ -209,13 +186,21 @@ function exportView(ctx) {
209
186
  }
210
187
  }
211
188
  }
212
- // Export part
213
- let headers = Object.keys(schema);
214
- const exporter = format === "csv" ? exporters.csv : exporters.json;
215
- const filename = `${viewName}.${format}`;
216
- // send down the file
217
- ctx.attachment(filename);
218
- ctx.body = (0, fileSystem_1.apiFileReturn)(exporter(headers, rows));
189
+ if (format === exporters_1.Format.CSV) {
190
+ ctx.attachment(`${viewName}.csv`);
191
+ ctx.body = (0, fileSystem_1.apiFileReturn)((0, exporters_1.csv)(Object.keys(schema), rows));
192
+ }
193
+ else if (format === exporters_1.Format.JSON) {
194
+ ctx.attachment(`${viewName}.json`);
195
+ ctx.body = (0, fileSystem_1.apiFileReturn)((0, exporters_1.json)(rows));
196
+ }
197
+ else if (format === exporters_1.Format.JSON_WITH_SCHEMA) {
198
+ ctx.attachment(`${viewName}.json`);
199
+ ctx.body = (0, fileSystem_1.apiFileReturn)((0, exporters_1.jsonWithSchema)(schema, rows));
200
+ }
201
+ else {
202
+ throw "Format not recognised";
203
+ }
219
204
  if (viewName.startsWith(utils_2.DocumentType.TABLE)) {
220
205
  yield backend_core_1.events.table.exported(table, format);
221
206
  }
@@ -88,10 +88,7 @@ router
88
88
  * structure, and the "updated", new column name should also be supplied. The schema should also be updated, this field
89
89
  * lets the server know that a field hasn't just been deleted, that the data has moved to a new name, this will fix
90
90
  * the rows in the table. This functionality is only available for internal tables.
91
- * @apiParam (Body) {object} [dataImport] When creating an internal table it can be built from a CSV, by using the
92
- * CSV validation endpoint. Send the CSV data to the validation endpoint, then put the results of that call
93
- * into this property, along with the CSV and a table/rows will be built from it. This is not supported when updating
94
- * or for external tables.
91
+ * @apiParam (Body) {object[]} [rows] When creating a table using a compatible data source, an array of objects to be imported into the new table can be provided.
95
92
  *
96
93
  * @apiParamExample {json} Example:
97
94
  * {
@@ -120,15 +117,7 @@ router
120
117
  * "old": "columnName",
121
118
  * "updated": "newColumnName",
122
119
  * },
123
- * "dataImport": {
124
- * "csvString": "column\nvalue",
125
- * "primaryDisplay": "column",
126
- * "schema": {
127
- * "column": {
128
- * "type": "string"
129
- * }
130
- * }
131
- * }
120
+ * "rows": []
132
121
  * }
133
122
  *
134
123
  * @apiSuccess {object} table The response body will contain the table structure after being cleaned up and
@@ -137,27 +126,9 @@ router
137
126
  .post("/api/tables",
138
127
  // allows control over updating a table
139
128
  (0, resourceId_1.bodyResource)("_id"), (0, authorized_1.default)(BUILDER), (0, validators_1.tableValidator)(), tableController.save)
140
- /**
141
- * @api {post} /api/tables/csv/validate Validate a CSV for a table
142
- * @apiName Validate a CSV for a table
143
- * @apiGroup tables
144
- * @apiPermission builder
145
- * @apiDescription When creating a new table, or importing a CSV to an existing table the CSV must be validated and
146
- * converted into a Budibase schema; this endpoint does this.
147
- *
148
- * @apiParam (Body) {string} csvString The CSV which is to be validated as a string.
149
- * @apiParam (Body) {object} [schema] When a CSV has been validated it is possible to re-validate after changing the
150
- * type of a field, by default everything will be strings as there is no way to infer types. The returned schema can
151
- * be updated and then returned to the endpoint to re-validate and check if the type will work for the CSV, e.g.
152
- * using a number instead of strings.
153
- * @apiParam (Body) {string} [tableId] If importing data to an existing table this will pull the current table and
154
- * remove any fields from the CSV schema which do not exist on the table/don't match the type of the table. When
155
- * importing a CSV to an existing table only fields that are present on the table can be imported.
156
- *
157
- * @apiSuccess {object} schema The response body will contain a "schema" object that represents the schema found for
158
- * the CSV - this will be in the same format used for table schema.s
159
- */
160
- .post("/api/tables/csv/validate", (0, authorized_1.default)(BUILDER), tableController.validateCSVSchema)
129
+ .post("/api/convert/csvToJson", (0, authorized_1.default)(BUILDER), tableController.csvToJson)
130
+ .post("/api/tables/validateNewTableImport", (0, authorized_1.default)(BUILDER), tableController.validateNewTableImport)
131
+ .post("/api/tables/validateExistingTableImport", (0, authorized_1.default)(BUILDER), tableController.validateExistingTableImport)
161
132
  /**
162
133
  * @api {post} /api/tables/:tableId/:revId Delete a table
163
134
  * @apiName Delete a table
@@ -184,9 +155,7 @@ router
184
155
  *
185
156
  * @apiParam {string} tableId The ID of the table which the data should be imported to.
186
157
  *
187
- * @apiParam (Body) {object} dataImport This is the same as the structure used when creating an internal table with
188
- * a CSV, it will have the "schema" returned from the CSV validation endpoint and the "csvString" which is to be
189
- * turned into rows.
158
+ * @apiParam (Body) {object[]} rows An array of objects representing the rows to be imported, key-value pairs not matching the table schema will be ignored.
190
159
  *
191
160
  * @apiSuccess {string} message A message stating that the data was imported successfully.
192
161
  */
@@ -22,7 +22,7 @@ function tableValidator() {
22
22
  schema: joi_1.default.object().required(),
23
23
  name: joi_1.default.string().required(),
24
24
  views: joi_1.default.object(),
25
- dataImport: joi_1.default.object(),
25
+ rows: joi_1.default.array(),
26
26
  }).unknown(true));
27
27
  }
28
28
  exports.tableValidator = tableValidator;
package/dist/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "2.2.12-alpha.19",
4
+ "version": "2.2.12-alpha.20",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -43,11 +43,11 @@
43
43
  "license": "GPL-3.0",
44
44
  "dependencies": {
45
45
  "@apidevtools/swagger-parser": "10.0.3",
46
- "@budibase/backend-core": "2.2.12-alpha.19",
47
- "@budibase/client": "2.2.12-alpha.19",
48
- "@budibase/pro": "2.2.12-alpha.19",
49
- "@budibase/string-templates": "2.2.12-alpha.19",
50
- "@budibase/types": "2.2.12-alpha.19",
46
+ "@budibase/backend-core": "2.2.12-alpha.20",
47
+ "@budibase/client": "2.2.12-alpha.20",
48
+ "@budibase/pro": "2.2.12-alpha.20",
49
+ "@budibase/string-templates": "2.2.12-alpha.20",
50
+ "@budibase/types": "2.2.12-alpha.20",
51
51
  "@bull-board/api": "3.7.0",
52
52
  "@bull-board/koa": "3.9.4",
53
53
  "@elastic/elasticsearch": "7.10.0",