@budibase/server 2.3.20 → 2.3.21-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 (528) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/__mocks__/node-fetch.ts +3 -0
  3. package/builder/assets/blankScreenPreview.72634dd1.png +0 -0
  4. package/builder/assets/{index.3faec52d.js → index.ab679a87.js} +439 -426
  5. package/builder/assets/index.b24b9dea.css +6 -0
  6. package/builder/assets/listScreenPreview.599c0aae.png +0 -0
  7. package/builder/index.html +2 -2
  8. package/dist/api/controllers/automation.js +11 -2
  9. package/dist/api/controllers/cloud.js +2 -2
  10. package/dist/api/controllers/query/index.js +2 -0
  11. package/dist/api/controllers/row/ExternalRequest.js +50 -23
  12. package/dist/api/controllers/row/external.js +12 -1
  13. package/dist/api/controllers/row/internalSearch.js +6 -450
  14. package/dist/api/controllers/row/utils.js +1 -3
  15. package/dist/api/controllers/table/external.js +8 -8
  16. package/dist/api/index.js +1 -21
  17. package/dist/api/routes/automation.js +1 -1
  18. package/dist/api/routes/public/applications.js +7 -7
  19. package/dist/api/routes/public/queries.js +2 -2
  20. package/dist/api/routes/public/rows.js +5 -5
  21. package/dist/api/routes/public/tables.js +5 -5
  22. package/dist/api/routes/public/users.js +5 -5
  23. package/dist/app.js +9 -1
  24. package/dist/constants/index.js +4 -24
  25. package/dist/db/defaultData/datasource_bb_default.js +6 -5
  26. package/dist/db/index.js +25 -2
  27. package/dist/db/linkedRows/LinkController.js +9 -8
  28. package/dist/db/utils.js +2 -5
  29. package/dist/db/views/staticViews.js +2 -1
  30. package/dist/ddApm.js +11 -0
  31. package/dist/elasticApm.js +14 -0
  32. package/dist/integrations/base/sql.js +6 -3
  33. package/dist/integrations/googlesheets.js +17 -20
  34. package/dist/middleware/authorized.js +5 -3
  35. package/dist/middleware/builder.js +6 -3
  36. package/dist/migrations/functions/backfill/global/configs.js +10 -4
  37. package/dist/migrations/tests/helpers.js +1 -1
  38. package/dist/migrations/tests/structures.js +1 -1
  39. package/dist/package.json +14 -9
  40. package/dist/sdk/app/backups/constants.js +2 -1
  41. package/dist/sdk/app/backups/exports.js +20 -7
  42. package/dist/sdk/app/datasources/datasources.js +3 -0
  43. package/dist/sdk/app/rows/attachments.js +1 -1
  44. package/dist/startup.js +3 -0
  45. package/dist/tsconfig.build.tsbuildinfo +1 -1
  46. package/dist/utilities/redis.js +2 -0
  47. package/dist/utilities/retry.js +30 -0
  48. package/jest-testcontainers-config.js +8 -0
  49. package/jest.config.ts +35 -22
  50. package/package.json +15 -10
  51. package/scripts/load/create-many-apps.js +24 -0
  52. package/scripts/load/create-many-rows.js +30 -0
  53. package/scripts/load/utils.js +66 -0
  54. package/scripts/test.sh +12 -0
  55. package/specs/{generate.js → generate.ts} +7 -9
  56. package/specs/openapi.json +30 -30
  57. package/specs/openapi.yaml +27 -27
  58. package/specs/{parameters.js → parameters.ts} +6 -6
  59. package/specs/resources/{application.js → application.ts} +4 -4
  60. package/specs/resources/{index.js → index.ts} +8 -8
  61. package/specs/resources/{misc.js → misc.ts} +3 -3
  62. package/specs/resources/{query.js → query.ts} +4 -4
  63. package/specs/resources/{row.js → row.ts} +3 -4
  64. package/specs/resources/{table.js → table.ts} +5 -5
  65. package/specs/resources/{user.js → user.ts} +3 -3
  66. package/specs/resources/utils/Resource.ts +39 -0
  67. package/specs/resources/utils/{index.js → index.ts} +1 -1
  68. package/specs/{security.js → security.ts} +1 -1
  69. package/src/api/controllers/automation.ts +13 -2
  70. package/src/api/controllers/cloud.ts +2 -2
  71. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  72. package/src/api/controllers/query/index.ts +2 -0
  73. package/src/api/controllers/row/ExternalRequest.ts +98 -27
  74. package/src/api/controllers/row/external.ts +13 -1
  75. package/src/api/controllers/row/internalSearch.ts +11 -524
  76. package/src/api/controllers/row/utils.ts +1 -2
  77. package/src/api/controllers/table/external.ts +3 -2
  78. package/src/api/index.ts +3 -22
  79. package/src/api/routes/automation.ts +1 -1
  80. package/src/api/routes/public/applications.ts +7 -8
  81. package/src/api/routes/public/queries.ts +2 -2
  82. package/src/api/routes/public/rows.ts +5 -5
  83. package/src/api/routes/public/tables.ts +5 -5
  84. package/src/api/routes/public/tests/{compare.spec.js → compare.spec.ts} +45 -26
  85. package/src/api/routes/public/tests/users.spec.js +1 -1
  86. package/src/api/routes/public/tests/utils.ts +25 -8
  87. package/src/api/routes/public/users.ts +5 -5
  88. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  89. package/src/api/routes/tests/analytics.spec.js +4 -1
  90. package/src/api/routes/tests/apikeys.spec.js +1 -1
  91. package/src/api/routes/tests/application.spec.ts +20 -6
  92. package/src/api/routes/tests/auth.spec.js +2 -2
  93. package/src/api/routes/tests/automation.spec.js +6 -2
  94. package/src/api/routes/tests/backup.spec.ts +4 -14
  95. package/src/api/routes/tests/cloud.spec.ts +20 -31
  96. package/src/api/routes/tests/component.spec.js +1 -1
  97. package/src/api/routes/tests/datasource.spec.ts +20 -3
  98. package/src/api/routes/tests/dev.spec.js +1 -1
  99. package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
  100. package/src/api/routes/tests/integration.spec.js +1 -1
  101. package/src/api/routes/tests/layout.spec.js +1 -1
  102. package/src/api/routes/tests/metadata.spec.js +1 -1
  103. package/src/api/routes/tests/misc.spec.js +1 -1
  104. package/src/api/routes/tests/permissions.spec.js +4 -1
  105. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +22 -1
  106. package/src/api/routes/tests/role.spec.js +6 -1
  107. package/src/api/routes/tests/routing.spec.js +1 -1
  108. package/src/api/routes/tests/row.spec.js +11 -3
  109. package/src/api/routes/tests/screen.spec.js +1 -1
  110. package/src/api/routes/tests/static.spec.js +2 -13
  111. package/src/api/routes/tests/table.spec.js +1 -1
  112. package/src/api/routes/tests/templates.spec.js +1 -1
  113. package/src/api/routes/tests/user.spec.js +11 -12
  114. package/src/api/routes/tests/utilities/TestFunctions.ts +25 -3
  115. package/src/api/routes/tests/utilities/index.ts +5 -3
  116. package/src/api/routes/tests/view.spec.js +4 -1
  117. package/src/api/routes/tests/webhook.spec.js +11 -2
  118. package/src/app.ts +12 -1
  119. package/src/automations/tests/automation.spec.js +4 -4
  120. package/src/automations/tests/bash.spec.js +1 -1
  121. package/src/automations/tests/discord.spec.js +1 -1
  122. package/src/automations/tests/executeQuery.spec.js +2 -3
  123. package/src/automations/tests/executeScript.spec.js +1 -1
  124. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  125. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  126. package/src/automations/tests/serverLog.spec.js +1 -1
  127. package/src/automations/tests/updateRow.spec.js +1 -1
  128. package/src/automations/tests/zapier.spec.js +1 -1
  129. package/src/constants/index.ts +1 -23
  130. package/src/db/defaultData/datasource_bb_default.ts +6 -10
  131. package/src/db/index.ts +2 -2
  132. package/src/db/linkedRows/LinkController.ts +2 -1
  133. package/src/db/tests/linkController.spec.js +4 -1
  134. package/src/db/tests/linkTests.spec.js +1 -1
  135. package/src/db/utils.ts +0 -4
  136. package/src/db/views/staticViews.ts +3 -3
  137. package/src/ddApm.ts +7 -0
  138. package/src/definitions/openapi.ts +449 -63
  139. package/src/elasticApm.ts +10 -0
  140. package/src/integration-test/postgres.spec.ts +1032 -0
  141. package/src/integrations/base/sql.ts +11 -5
  142. package/src/integrations/googlesheets.ts +21 -22
  143. package/src/integrations/oracle.ts +1 -1
  144. package/src/integrations/tests/couchdb.spec.ts +0 -2
  145. package/src/integrations/tests/googlesheets.spec.ts +122 -0
  146. package/src/middleware/authorized.ts +6 -4
  147. package/src/middleware/builder.ts +8 -3
  148. package/src/migrations/functions/backfill/global/configs.ts +15 -9
  149. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  150. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  151. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +4 -5
  152. package/src/migrations/tests/helpers.ts +2 -2
  153. package/src/migrations/tests/index.spec.ts +13 -20
  154. package/src/migrations/tests/structures.ts +1 -0
  155. package/src/sdk/app/backups/constants.ts +1 -0
  156. package/src/sdk/app/backups/exports.ts +32 -10
  157. package/src/sdk/app/datasources/datasources.ts +3 -0
  158. package/src/sdk/app/rows/attachments.ts +1 -1
  159. package/src/startup.ts +4 -1
  160. package/src/tests/jestEnv.ts +9 -11
  161. package/src/tests/jestSetup.ts +9 -7
  162. package/src/tests/logging.ts +34 -0
  163. package/src/tests/utilities/TestConfiguration.ts +187 -101
  164. package/src/tests/utilities/structures.ts +16 -4
  165. package/src/utilities/redis.ts +2 -0
  166. package/src/utilities/retry.ts +18 -0
  167. package/tsconfig.build.json +1 -0
  168. package/builder/assets/index.4488f38d.css +0 -6
  169. package/coverage/clover.xml +0 -11774
  170. package/coverage/coverage-final.json +0 -284
  171. package/coverage/lcov-report/base.css +0 -224
  172. package/coverage/lcov-report/block-navigation.js +0 -87
  173. package/coverage/lcov-report/favicon.png +0 -0
  174. package/coverage/lcov-report/index.html +0 -1031
  175. package/coverage/lcov-report/prettify.css +0 -1
  176. package/coverage/lcov-report/prettify.js +0 -2
  177. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  178. package/coverage/lcov-report/sorter.js +0 -196
  179. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +0 -190
  180. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +0 -247
  181. package/coverage/lcov-report/src/api/controllers/application.ts.html +0 -1987
  182. package/coverage/lcov-report/src/api/controllers/auth.ts.html +0 -301
  183. package/coverage/lcov-report/src/api/controllers/automation.ts.html +0 -940
  184. package/coverage/lcov-report/src/api/controllers/backup.ts.html +0 -148
  185. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +0 -442
  186. package/coverage/lcov-report/src/api/controllers/component.ts.html +0 -259
  187. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +0 -1135
  188. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +0 -262
  189. package/coverage/lcov-report/src/api/controllers/deploy/index.html +0 -131
  190. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +0 -694
  191. package/coverage/lcov-report/src/api/controllers/dev.ts.html +0 -472
  192. package/coverage/lcov-report/src/api/controllers/index.html +0 -431
  193. package/coverage/lcov-report/src/api/controllers/integration.ts.html +0 -124
  194. package/coverage/lcov-report/src/api/controllers/layout.ts.html +0 -226
  195. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +0 -211
  196. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +0 -127
  197. package/coverage/lcov-report/src/api/controllers/permission.ts.html +0 -619
  198. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +0 -130
  199. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +0 -310
  200. package/coverage/lcov-report/src/api/controllers/plugin/index.html +0 -206
  201. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +0 -499
  202. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +0 -253
  203. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +0 -97
  204. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +0 -121
  205. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +0 -136
  206. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +0 -385
  207. package/coverage/lcov-report/src/api/controllers/public/index.html +0 -191
  208. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +0 -181
  209. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +0 -191
  210. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +0 -124
  211. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +0 -202
  212. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +0 -178
  213. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +0 -163
  214. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +0 -181
  215. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +0 -145
  216. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +0 -328
  217. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +0 -253
  218. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +0 -325
  219. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +0 -220
  220. package/coverage/lcov-report/src/api/controllers/query/import/index.html +0 -116
  221. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +0 -373
  222. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +0 -131
  223. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +0 -379
  224. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +0 -157
  225. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +0 -403
  226. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +0 -146
  227. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +0 -586
  228. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +0 -712
  229. package/coverage/lcov-report/src/api/controllers/query/index.html +0 -131
  230. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +0 -1000
  231. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +0 -235
  232. package/coverage/lcov-report/src/api/controllers/role.ts.html +0 -397
  233. package/coverage/lcov-report/src/api/controllers/routing.ts.html +0 -370
  234. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +0 -2305
  235. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +0 -931
  236. package/coverage/lcov-report/src/api/controllers/row/index.html +0 -206
  237. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +0 -541
  238. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +0 -1609
  239. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +0 -1678
  240. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +0 -595
  241. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +0 -556
  242. package/coverage/lcov-report/src/api/controllers/screen.ts.html +0 -463
  243. package/coverage/lcov-report/src/api/controllers/script.ts.html +0 -121
  244. package/coverage/lcov-report/src/api/controllers/static/index.html +0 -116
  245. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +0 -679
  246. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +0 -649
  247. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +0 -1153
  248. package/coverage/lcov-report/src/api/controllers/table/index.html +0 -176
  249. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +0 -514
  250. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +0 -658
  251. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +0 -1273
  252. package/coverage/lcov-report/src/api/controllers/templates.ts.html +0 -214
  253. package/coverage/lcov-report/src/api/controllers/user.ts.html +0 -634
  254. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +0 -214
  255. package/coverage/lcov-report/src/api/controllers/view/index.html +0 -161
  256. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +0 -661
  257. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +0 -580
  258. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +0 -694
  259. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +0 -385
  260. package/coverage/lcov-report/src/api/index.html +0 -116
  261. package/coverage/lcov-report/src/api/index.ts.html +0 -352
  262. package/coverage/lcov-report/src/api/routes/analytics.ts.html +0 -112
  263. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +0 -121
  264. package/coverage/lcov-report/src/api/routes/application.ts.html +0 -256
  265. package/coverage/lcov-report/src/api/routes/auth.ts.html +0 -109
  266. package/coverage/lcov-report/src/api/routes/automation.ts.html +0 -346
  267. package/coverage/lcov-report/src/api/routes/backup.ts.html +0 -127
  268. package/coverage/lcov-report/src/api/routes/cloud.ts.html +0 -139
  269. package/coverage/lcov-report/src/api/routes/component.ts.html +0 -127
  270. package/coverage/lcov-report/src/api/routes/datasource.ts.html +0 -265
  271. package/coverage/lcov-report/src/api/routes/deploy.ts.html +0 -145
  272. package/coverage/lcov-report/src/api/routes/dev.ts.html +0 -199
  273. package/coverage/lcov-report/src/api/routes/index.html +0 -551
  274. package/coverage/lcov-report/src/api/routes/index.ts.html +0 -298
  275. package/coverage/lcov-report/src/api/routes/integration.ts.html +0 -133
  276. package/coverage/lcov-report/src/api/routes/layout.ts.html +0 -133
  277. package/coverage/lcov-report/src/api/routes/metadata.ts.html +0 -199
  278. package/coverage/lcov-report/src/api/routes/migrations.ts.html +0 -127
  279. package/coverage/lcov-report/src/api/routes/permission.ts.html +0 -208
  280. package/coverage/lcov-report/src/api/routes/plugin.ts.html +0 -151
  281. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +0 -673
  282. package/coverage/lcov-report/src/api/routes/public/index.html +0 -191
  283. package/coverage/lcov-report/src/api/routes/public/index.ts.html +0 -493
  284. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +0 -116
  285. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +0 -340
  286. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +0 -313
  287. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +0 -598
  288. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +0 -586
  289. package/coverage/lcov-report/src/api/routes/public/tests/index.html +0 -116
  290. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +0 -169
  291. package/coverage/lcov-report/src/api/routes/public/users.ts.html +0 -511
  292. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +0 -238
  293. package/coverage/lcov-report/src/api/routes/public/utils/index.html +0 -116
  294. package/coverage/lcov-report/src/api/routes/query.ts.html +0 -268
  295. package/coverage/lcov-report/src/api/routes/role.ts.html +0 -157
  296. package/coverage/lcov-report/src/api/routes/routing.ts.html +0 -127
  297. package/coverage/lcov-report/src/api/routes/row.ts.html +0 -883
  298. package/coverage/lcov-report/src/api/routes/screen.ts.html +0 -154
  299. package/coverage/lcov-report/src/api/routes/script.ts.html +0 -115
  300. package/coverage/lcov-report/src/api/routes/static.ts.html +0 -280
  301. package/coverage/lcov-report/src/api/routes/table.ts.html +0 -595
  302. package/coverage/lcov-report/src/api/routes/templates.ts.html +0 -133
  303. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +0 -550
  304. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +0 -131
  305. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +0 -367
  306. package/coverage/lcov-report/src/api/routes/user.ts.html +0 -238
  307. package/coverage/lcov-report/src/api/routes/utils/index.html +0 -116
  308. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +0 -805
  309. package/coverage/lcov-report/src/api/routes/view.ts.html +0 -187
  310. package/coverage/lcov-report/src/api/routes/webhook.ts.html +0 -166
  311. package/coverage/lcov-report/src/app.ts.html +0 -424
  312. package/coverage/lcov-report/src/automations/actions.ts.html +0 -316
  313. package/coverage/lcov-report/src/automations/automationUtils.ts.html +0 -562
  314. package/coverage/lcov-report/src/automations/bullboard.ts.html +0 -199
  315. package/coverage/lcov-report/src/automations/index.html +0 -191
  316. package/coverage/lcov-report/src/automations/index.ts.html +0 -163
  317. package/coverage/lcov-report/src/automations/logging/index.html +0 -116
  318. package/coverage/lcov-report/src/automations/logging/index.ts.html +0 -199
  319. package/coverage/lcov-report/src/automations/steps/bash.ts.html +0 -319
  320. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +0 -382
  321. package/coverage/lcov-report/src/automations/steps/delay.ts.html +0 -217
  322. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +0 -349
  323. package/coverage/lcov-report/src/automations/steps/discord.ts.html +0 -397
  324. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +0 -370
  325. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +0 -325
  326. package/coverage/lcov-report/src/automations/steps/filter.ts.html +0 -394
  327. package/coverage/lcov-report/src/automations/steps/index.html +0 -371
  328. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +0 -409
  329. package/coverage/lcov-report/src/automations/steps/loop.ts.html +0 -241
  330. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +0 -499
  331. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +0 -664
  332. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +0 -355
  333. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +0 -256
  334. package/coverage/lcov-report/src/automations/steps/slack.ts.html +0 -340
  335. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +0 -439
  336. package/coverage/lcov-report/src/automations/steps/utils.ts.html +0 -223
  337. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +0 -403
  338. package/coverage/lcov-report/src/automations/tests/utilities/index.html +0 -116
  339. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +0 -265
  340. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +0 -196
  341. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +0 -193
  342. package/coverage/lcov-report/src/automations/triggerInfo/index.html +0 -206
  343. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +0 -130
  344. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +0 -196
  345. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +0 -220
  346. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +0 -220
  347. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +0 -208
  348. package/coverage/lcov-report/src/automations/triggers.ts.html +0 -553
  349. package/coverage/lcov-report/src/automations/utils.ts.html +0 -886
  350. package/coverage/lcov-report/src/constants/index.html +0 -146
  351. package/coverage/lcov-report/src/constants/index.ts.html +0 -697
  352. package/coverage/lcov-report/src/constants/layouts.ts.html +0 -526
  353. package/coverage/lcov-report/src/constants/screens.ts.html +0 -229
  354. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +0 -2059
  355. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +0 -541
  356. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +0 -427
  357. package/coverage/lcov-report/src/db/defaultData/index.html +0 -176
  358. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +0 -403
  359. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +0 -559
  360. package/coverage/lcov-report/src/db/dynamoClient.ts.html +0 -526
  361. package/coverage/lcov-report/src/db/inMemoryView.ts.html +0 -250
  362. package/coverage/lcov-report/src/db/index.html +0 -176
  363. package/coverage/lcov-report/src/db/index.ts.html +0 -133
  364. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +0 -1417
  365. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +0 -265
  366. package/coverage/lcov-report/src/db/linkedRows/index.html +0 -161
  367. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +0 -736
  368. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +0 -460
  369. package/coverage/lcov-report/src/db/newid.ts.html +0 -100
  370. package/coverage/lcov-report/src/db/utils.ts.html +0 -913
  371. package/coverage/lcov-report/src/definitions/automations.ts.html +0 -184
  372. package/coverage/lcov-report/src/definitions/index.html +0 -116
  373. package/coverage/lcov-report/src/environment.ts.html +0 -472
  374. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +0 -259
  375. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +0 -172
  376. package/coverage/lcov-report/src/events/index.html +0 -161
  377. package/coverage/lcov-report/src/events/index.ts.html +0 -100
  378. package/coverage/lcov-report/src/events/utils.ts.html +0 -319
  379. package/coverage/lcov-report/src/index.html +0 -191
  380. package/coverage/lcov-report/src/index.ts.html +0 -133
  381. package/coverage/lcov-report/src/integrations/airtable.ts.html +0 -529
  382. package/coverage/lcov-report/src/integrations/arangodb.ts.html +0 -415
  383. package/coverage/lcov-report/src/integrations/base/index.html +0 -161
  384. package/coverage/lcov-report/src/integrations/base/query.ts.html +0 -139
  385. package/coverage/lcov-report/src/integrations/base/sql.ts.html +0 -2017
  386. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +0 -691
  387. package/coverage/lcov-report/src/integrations/base/utils.ts.html +0 -121
  388. package/coverage/lcov-report/src/integrations/couchdb.ts.html +0 -484
  389. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +0 -745
  390. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +0 -646
  391. package/coverage/lcov-report/src/integrations/firebase.ts.html +0 -646
  392. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +0 -1315
  393. package/coverage/lcov-report/src/integrations/index.html +0 -371
  394. package/coverage/lcov-report/src/integrations/index.ts.html +0 -460
  395. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +0 -1012
  396. package/coverage/lcov-report/src/integrations/mongodb.ts.html +0 -1999
  397. package/coverage/lcov-report/src/integrations/mysql.ts.html +0 -979
  398. package/coverage/lcov-report/src/integrations/oracle.ts.html +0 -1387
  399. package/coverage/lcov-report/src/integrations/postgres.ts.html +0 -1087
  400. package/coverage/lcov-report/src/integrations/queries/index.html +0 -116
  401. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +0 -328
  402. package/coverage/lcov-report/src/integrations/redis.ts.html +0 -550
  403. package/coverage/lcov-report/src/integrations/rest.ts.html +0 -1372
  404. package/coverage/lcov-report/src/integrations/s3.ts.html +0 -862
  405. package/coverage/lcov-report/src/integrations/snowflake.ts.html +0 -376
  406. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +0 -85
  407. package/coverage/lcov-report/src/integrations/tests/index.html +0 -116
  408. package/coverage/lcov-report/src/integrations/utils.ts.html +0 -1036
  409. package/coverage/lcov-report/src/middleware/appInfo.ts.html +0 -145
  410. package/coverage/lcov-report/src/middleware/authorized.ts.html +0 -472
  411. package/coverage/lcov-report/src/middleware/builder.ts.html +0 -361
  412. package/coverage/lcov-report/src/middleware/currentapp.ts.html +0 -508
  413. package/coverage/lcov-report/src/middleware/index.html +0 -236
  414. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +0 -205
  415. package/coverage/lcov-report/src/middleware/publicApi.ts.html +0 -148
  416. package/coverage/lcov-report/src/middleware/resourceId.ts.html +0 -283
  417. package/coverage/lcov-report/src/middleware/selfhost.ts.html +0 -121
  418. package/coverage/lcov-report/src/middleware/utils.ts.html +0 -112
  419. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +0 -166
  420. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +0 -163
  421. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +0 -151
  422. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +0 -206
  423. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +0 -172
  424. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +0 -226
  425. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +0 -151
  426. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +0 -151
  427. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +0 -166
  428. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +0 -532
  429. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +0 -286
  430. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +0 -146
  431. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +0 -265
  432. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +0 -232
  433. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +0 -724
  434. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +0 -161
  435. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +0 -106
  436. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +0 -235
  437. package/coverage/lcov-report/src/migrations/functions/index.html +0 -161
  438. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +0 -130
  439. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +0 -520
  440. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +0 -161
  441. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +0 -94
  442. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +0 -127
  443. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +0 -115
  444. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +0 -169
  445. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +0 -124
  446. package/coverage/lcov-report/src/migrations/index.html +0 -116
  447. package/coverage/lcov-report/src/migrations/index.ts.html +0 -430
  448. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +0 -205
  449. package/coverage/lcov-report/src/migrations/tests/index.html +0 -131
  450. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +0 -283
  451. package/coverage/lcov-report/src/sdk/app/applications/index.html +0 -146
  452. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +0 -106
  453. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +0 -268
  454. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +0 -136
  455. package/coverage/lcov-report/src/sdk/app/automations/index.html +0 -131
  456. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +0 -100
  457. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +0 -214
  458. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +0 -91
  459. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +0 -604
  460. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +0 -640
  461. package/coverage/lcov-report/src/sdk/app/backups/index.html +0 -176
  462. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +0 -112
  463. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +0 -292
  464. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +0 -562
  465. package/coverage/lcov-report/src/sdk/app/datasources/index.html +0 -131
  466. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +0 -100
  467. package/coverage/lcov-report/src/sdk/app/queries/index.html +0 -131
  468. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +0 -100
  469. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +0 -235
  470. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +0 -265
  471. package/coverage/lcov-report/src/sdk/app/rows/index.html +0 -146
  472. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +0 -106
  473. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +0 -139
  474. package/coverage/lcov-report/src/sdk/app/tables/index.html +0 -116
  475. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +0 -274
  476. package/coverage/lcov-report/src/sdk/index.html +0 -116
  477. package/coverage/lcov-report/src/sdk/index.ts.html +0 -151
  478. package/coverage/lcov-report/src/sdk/users/index.html +0 -131
  479. package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -100
  480. package/coverage/lcov-report/src/sdk/users/utils.ts.html +0 -277
  481. package/coverage/lcov-report/src/sdk/utils/index.html +0 -116
  482. package/coverage/lcov-report/src/sdk/utils/index.ts.html +0 -133
  483. package/coverage/lcov-report/src/startup.ts.html +0 -484
  484. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +0 -2032
  485. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +0 -127
  486. package/coverage/lcov-report/src/tests/utilities/index.html +0 -161
  487. package/coverage/lcov-report/src/tests/utilities/index.ts.html +0 -118
  488. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +0 -856
  489. package/coverage/lcov-report/src/threads/automation.ts.html +0 -1555
  490. package/coverage/lcov-report/src/threads/index.html +0 -161
  491. package/coverage/lcov-report/src/threads/index.ts.html +0 -418
  492. package/coverage/lcov-report/src/threads/query.ts.html +0 -1000
  493. package/coverage/lcov-report/src/threads/utils.ts.html +0 -373
  494. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +0 -94
  495. package/coverage/lcov-report/src/utilities/centralPath.ts.html +0 -151
  496. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +0 -343
  497. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +0 -547
  498. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +0 -601
  499. package/coverage/lcov-report/src/utilities/fileSystem/index.html +0 -206
  500. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +0 -100
  501. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +0 -277
  502. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +0 -142
  503. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +0 -193
  504. package/coverage/lcov-report/src/utilities/global.ts.html +0 -499
  505. package/coverage/lcov-report/src/utilities/index.html +0 -251
  506. package/coverage/lcov-report/src/utilities/index.ts.html +0 -487
  507. package/coverage/lcov-report/src/utilities/redis.ts.html +0 -343
  508. package/coverage/lcov-report/src/utilities/routing/index.html +0 -116
  509. package/coverage/lcov-report/src/utilities/routing/index.ts.html +0 -181
  510. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +0 -146
  511. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +0 -922
  512. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +0 -373
  513. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +0 -373
  514. package/coverage/lcov-report/src/utilities/schema.ts.html +0 -508
  515. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +0 -169
  516. package/coverage/lcov-report/src/utilities/security.ts.html +0 -280
  517. package/coverage/lcov-report/src/utilities/usageQuota/index.html +0 -131
  518. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +0 -325
  519. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +0 -139
  520. package/coverage/lcov-report/src/utilities/users.ts.html +0 -232
  521. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +0 -646
  522. package/coverage/lcov-report/src/watch.ts.html +0 -196
  523. package/coverage/lcov-report/src/websocket.ts.html +0 -163
  524. package/coverage/lcov.info +0 -21777
  525. package/dist/api/routes/public/tests/utils.js +0 -33
  526. package/dist/integrations/base/utils.js +0 -16
  527. package/specs/resources/utils/Resource.js +0 -26
  528. package/src/integrations/base/utils.ts +0 -12
@@ -1,531 +1,18 @@
1
- import { SearchIndexes } from "../../../db/utils"
2
- import { removeKeyNumbering } from "./utils"
3
- import fetch from "node-fetch"
4
- import { db as dbCore, context } from "@budibase/backend-core"
5
- import { SearchFilters, Row } from "@budibase/types"
1
+ import { db as dbCore, context, SearchParams } from "@budibase/backend-core"
2
+ import { SearchFilters, Row, SearchIndex } from "@budibase/types"
6
3
 
7
- type SearchParams = {
8
- tableId: string
9
- sort?: string
10
- sortOrder?: string
11
- sortType?: string
12
- limit?: number
13
- bookmark?: string
14
- version?: string
15
- rows?: Row[]
16
- }
17
-
18
- /**
19
- * Class to build lucene query URLs.
20
- * Optionally takes a base lucene query object.
21
- */
22
- export class QueryBuilder {
23
- query: SearchFilters
24
- limit: number
25
- sort?: string
26
- bookmark?: string
27
- sortOrder: string
28
- sortType: string
29
- includeDocs: boolean
30
- version?: string
31
-
32
- constructor(base?: SearchFilters) {
33
- this.query = {
34
- allOr: false,
35
- string: {},
36
- fuzzy: {},
37
- range: {},
38
- equal: {},
39
- notEqual: {},
40
- empty: {},
41
- notEmpty: {},
42
- oneOf: {},
43
- contains: {},
44
- notContains: {},
45
- containsAny: {},
46
- ...base,
47
- }
48
- this.limit = 50
49
- this.sortOrder = "ascending"
50
- this.sortType = "string"
51
- this.includeDocs = true
52
- }
53
-
54
- setVersion(version?: string) {
55
- if (version != null) {
56
- this.version = version
57
- }
58
- return this
59
- }
60
-
61
- setTable(tableId: string) {
62
- this.query.equal!.tableId = tableId
63
- return this
64
- }
65
-
66
- setLimit(limit?: number) {
67
- if (limit != null) {
68
- this.limit = limit
69
- }
70
- return this
71
- }
72
-
73
- setSort(sort?: string) {
74
- if (sort != null) {
75
- this.sort = sort
76
- }
77
- return this
78
- }
79
-
80
- setSortOrder(sortOrder?: string) {
81
- if (sortOrder != null) {
82
- this.sortOrder = sortOrder
83
- }
84
- return this
85
- }
86
-
87
- setSortType(sortType?: string) {
88
- if (sortType != null) {
89
- this.sortType = sortType
90
- }
91
- return this
92
- }
93
-
94
- setBookmark(bookmark?: string) {
95
- if (bookmark != null) {
96
- this.bookmark = bookmark
97
- }
98
- return this
99
- }
100
-
101
- excludeDocs() {
102
- this.includeDocs = false
103
- return this
104
- }
105
-
106
- addString(key: string, partial: string) {
107
- this.query.string![key] = partial
108
- return this
109
- }
110
-
111
- addFuzzy(key: string, fuzzy: string) {
112
- this.query.fuzzy![key] = fuzzy
113
- return this
114
- }
115
-
116
- addRange(key: string, low: string | number, high: string | number) {
117
- this.query.range![key] = {
118
- low,
119
- high,
120
- }
121
- return this
122
- }
123
-
124
- addEqual(key: string, value: any) {
125
- this.query.equal![key] = value
126
- return this
127
- }
128
-
129
- addNotEqual(key: string, value: any) {
130
- this.query.notEqual![key] = value
131
- return this
132
- }
133
-
134
- addEmpty(key: string, value: any) {
135
- this.query.empty![key] = value
136
- return this
137
- }
138
-
139
- addNotEmpty(key: string, value: any) {
140
- this.query.notEmpty![key] = value
141
- return this
142
- }
143
-
144
- addOneOf(key: string, value: any) {
145
- this.query.oneOf![key] = value
146
- return this
147
- }
148
-
149
- addContains(key: string, value: any) {
150
- this.query.contains![key] = value
151
- return this
152
- }
153
-
154
- addNotContains(key: string, value: any) {
155
- this.query.notContains![key] = value
156
- return this
157
- }
158
-
159
- addContainsAny(key: string, value: any) {
160
- this.query.containsAny![key] = value
161
- return this
162
- }
163
-
164
- /**
165
- * Preprocesses a value before going into a lucene search.
166
- * Transforms strings to lowercase and wraps strings and bools in quotes.
167
- * @param value The value to process
168
- * @param options The preprocess options
169
- * @returns {string|*}
170
- */
171
- preprocess(value: any, { escape, lowercase, wrap, type }: any = {}) {
172
- const hasVersion = !!this.version
173
- // Determine if type needs wrapped
174
- const originalType = typeof value
175
- // Convert to lowercase
176
- if (value && lowercase) {
177
- value = value.toLowerCase ? value.toLowerCase() : value
178
- }
179
- // Escape characters
180
- if (escape && originalType === "string") {
181
- value = `${value}`.replace(/[ #+\-&|!(){}\]^"~*?:\\]/g, "\\$&")
182
- }
183
-
184
- // Wrap in quotes
185
- if (originalType === "string" && !isNaN(value) && !type) {
186
- value = `"${value}"`
187
- } else if (hasVersion && wrap) {
188
- value = originalType === "number" ? value : `"${value}"`
189
- }
190
- return value
191
- }
192
-
193
- buildSearchQuery() {
194
- const builder = this
195
- let allOr = this.query && this.query.allOr
196
- let query = allOr ? "" : "*:*"
197
- const allPreProcessingOpts = { escape: true, lowercase: true, wrap: true }
198
- let tableId
199
- if (this.query.equal!.tableId) {
200
- tableId = this.query.equal!.tableId
201
- delete this.query.equal!.tableId
202
- }
203
-
204
- const equal = (key: string, value: any) => {
205
- // 0 evaluates to false, which means we would return all rows if we don't check it
206
- if (!value && value !== 0) {
207
- return null
208
- }
209
- return `${key}:${builder.preprocess(value, allPreProcessingOpts)}`
210
- }
211
-
212
- const contains = (key: string, value: any, mode = "AND") => {
213
- if (Array.isArray(value) && value.length === 0) {
214
- return null
215
- }
216
- if (!Array.isArray(value)) {
217
- return `${key}:${value}`
218
- }
219
- let statement = `${builder.preprocess(value[0], { escape: true })}`
220
- for (let i = 1; i < value.length; i++) {
221
- statement += ` ${mode} ${builder.preprocess(value[i], {
222
- escape: true,
223
- })}`
224
- }
225
- return `${key}:(${statement})`
226
- }
227
-
228
- const notContains = (key: string, value: any) => {
229
- // @ts-ignore
230
- const allPrefix = allOr === "" ? "*:* AND" : ""
231
- return allPrefix + "NOT " + contains(key, value)
232
- }
233
-
234
- const containsAny = (key: string, value: any) => {
235
- return contains(key, value, "OR")
236
- }
237
-
238
- const oneOf = (key: string, value: any) => {
239
- if (!Array.isArray(value)) {
240
- if (typeof value === "string") {
241
- value = value.split(",")
242
- } else {
243
- return ""
244
- }
245
- }
246
- let orStatement = `${builder.preprocess(value[0], allPreProcessingOpts)}`
247
- for (let i = 1; i < value.length; i++) {
248
- orStatement += ` OR ${builder.preprocess(
249
- value[i],
250
- allPreProcessingOpts
251
- )}`
252
- }
253
- return `${key}:(${orStatement})`
254
- }
255
-
256
- function build(structure: any, queryFn: any) {
257
- for (let [key, value] of Object.entries(structure)) {
258
- // check for new format - remove numbering if needed
259
- key = removeKeyNumbering(key)
260
- key = builder.preprocess(key.replace(/ /g, "_"), {
261
- escape: true,
262
- })
263
- const expression = queryFn(key, value)
264
- if (expression == null) {
265
- continue
266
- }
267
- if (query.length > 0) {
268
- query += ` ${allOr ? "OR" : "AND"} `
269
- }
270
- query += expression
271
- }
272
- }
273
-
274
- // Construct the actual lucene search query string from JSON structure
275
- if (this.query.string) {
276
- build(this.query.string, (key: string, value: any) => {
277
- if (!value) {
278
- return null
279
- }
280
- value = builder.preprocess(value, {
281
- escape: true,
282
- lowercase: true,
283
- type: "string",
284
- })
285
- return `${key}:${value}*`
286
- })
287
- }
288
- if (this.query.range) {
289
- build(this.query.range, (key: string, value: any) => {
290
- if (!value) {
291
- return null
292
- }
293
- if (value.low == null || value.low === "") {
294
- return null
295
- }
296
- if (value.high == null || value.high === "") {
297
- return null
298
- }
299
- const low = builder.preprocess(value.low, allPreProcessingOpts)
300
- const high = builder.preprocess(value.high, allPreProcessingOpts)
301
- return `${key}:[${low} TO ${high}]`
302
- })
303
- }
304
- if (this.query.fuzzy) {
305
- build(this.query.fuzzy, (key: string, value: any) => {
306
- if (!value) {
307
- return null
308
- }
309
- value = builder.preprocess(value, {
310
- escape: true,
311
- lowercase: true,
312
- type: "fuzzy",
313
- })
314
- return `${key}:${value}~`
315
- })
316
- }
317
- if (this.query.equal) {
318
- build(this.query.equal, equal)
319
- }
320
- if (this.query.notEqual) {
321
- build(this.query.notEqual, (key: string, value: any) => {
322
- if (!value) {
323
- return null
324
- }
325
- return `!${key}:${builder.preprocess(value, allPreProcessingOpts)}`
326
- })
327
- }
328
- if (this.query.empty) {
329
- build(this.query.empty, (key: string) => `!${key}:["" TO *]`)
330
- }
331
- if (this.query.notEmpty) {
332
- build(this.query.notEmpty, (key: string) => `${key}:["" TO *]`)
333
- }
334
- if (this.query.oneOf) {
335
- build(this.query.oneOf, oneOf)
336
- }
337
- if (this.query.contains) {
338
- build(this.query.contains, contains)
339
- }
340
- if (this.query.notContains) {
341
- build(this.query.notContains, notContains)
342
- }
343
- if (this.query.containsAny) {
344
- build(this.query.containsAny, containsAny)
345
- }
346
- // make sure table ID is always added as an AND
347
- if (tableId) {
348
- query = `(${query})`
349
- allOr = false
350
- build({ tableId }, equal)
351
- }
352
- return query
353
- }
354
-
355
- buildSearchBody() {
356
- let body: any = {
357
- q: this.buildSearchQuery(),
358
- limit: Math.min(this.limit, 200),
359
- include_docs: this.includeDocs,
360
- }
361
- if (this.bookmark) {
362
- body.bookmark = this.bookmark
363
- }
364
- if (this.sort) {
365
- const order = this.sortOrder === "descending" ? "-" : ""
366
- const type = `<${this.sortType}>`
367
- body.sort = `${order}${this.sort.replace(/ /g, "_")}${type}`
368
- }
369
- return body
370
- }
371
-
372
- async run() {
373
- const appId = context.getAppId()
374
- const { url, cookie } = dbCore.getCouchInfo()
375
- const fullPath = `${url}/${appId}/_design/database/_search/${SearchIndexes.ROWS}`
376
- const body = this.buildSearchBody()
377
- return await runQuery(fullPath, body, cookie)
378
- }
379
- }
380
-
381
- /**
382
- * Executes a lucene search query.
383
- * @param url The query URL
384
- * @param body The request body defining search criteria
385
- * @param cookie The auth cookie for CouchDB
386
- * @returns {Promise<{rows: []}>}
387
- */
388
- const runQuery = async (url: string, body: any, cookie: string) => {
389
- const response = await fetch(url, {
390
- body: JSON.stringify(body),
391
- method: "POST",
392
- headers: {
393
- Authorization: cookie,
394
- },
395
- })
396
- const json = await response.json()
397
-
398
- let output: any = {
399
- rows: [],
400
- }
401
- if (json.rows != null && json.rows.length > 0) {
402
- output.rows = json.rows.map((row: any) => row.doc)
403
- }
404
- if (json.bookmark) {
405
- output.bookmark = json.bookmark
406
- }
407
- return output
408
- }
409
-
410
- /**
411
- * Gets round the fixed limit of 200 results from a query by fetching as many
412
- * pages as required and concatenating the results. This recursively operates
413
- * until enough results have been found.
414
- * @param query {object} The JSON query structure
415
- * @param params {object} The search params including:
416
- * tableId {string} The table ID to search
417
- * sort {string} The sort column
418
- * sortOrder {string} The sort order ("ascending" or "descending")
419
- * sortType {string} Whether to treat sortable values as strings or
420
- * numbers. ("string" or "number")
421
- * limit {number} The number of results to fetch
422
- * bookmark {string|null} Current bookmark in the recursive search
423
- * rows {array|null} Current results in the recursive search
424
- * @returns {Promise<*[]|*>}
425
- */
426
- async function recursiveSearch(query: any, params: any): Promise<any> {
427
- const bookmark = params.bookmark
428
- const rows = params.rows || []
429
- if (rows.length >= params.limit) {
430
- return rows
431
- }
432
- let pageSize = 200
433
- if (rows.length > params.limit - 200) {
434
- pageSize = params.limit - rows.length
435
- }
436
- const page = await new QueryBuilder(query)
437
- .setVersion(params.version)
438
- .setTable(params.tableId)
439
- .setBookmark(bookmark)
440
- .setLimit(pageSize)
441
- .setSort(params.sort)
442
- .setSortOrder(params.sortOrder)
443
- .setSortType(params.sortType)
444
- .run()
445
- if (!page.rows.length) {
446
- return rows
447
- }
448
- if (page.rows.length < 200) {
449
- return [...rows, ...page.rows]
450
- }
451
- const newParams = {
452
- ...params,
453
- bookmark: page.bookmark,
454
- rows: [...rows, ...page.rows],
455
- }
456
- return await recursiveSearch(query, newParams)
457
- }
458
-
459
- /**
460
- * Performs a paginated search. A bookmark will be returned to allow the next
461
- * page to be fetched. There is a max limit off 200 results per page in a
462
- * paginated search.
463
- * @param query {object} The JSON query structure
464
- * @param params {object} The search params including:
465
- * tableId {string} The table ID to search
466
- * sort {string} The sort column
467
- * sortOrder {string} The sort order ("ascending" or "descending")
468
- * sortType {string} Whether to treat sortable values as strings or
469
- * numbers. ("string" or "number")
470
- * limit {number} The desired page size
471
- * bookmark {string} The bookmark to resume from
472
- * @returns {Promise<{hasNextPage: boolean, rows: *[]}>}
473
- */
474
4
  export async function paginatedSearch(
475
5
  query: SearchFilters,
476
- params: SearchParams
6
+ params: SearchParams<Row>
477
7
  ) {
478
- let limit = params.limit
479
- if (limit == null || isNaN(limit) || limit < 0) {
480
- limit = 50
481
- }
482
- limit = Math.min(limit, 200)
483
- const search = new QueryBuilder(query)
484
- .setVersion(params.version)
485
- .setTable(params.tableId)
486
- .setSort(params.sort)
487
- .setSortOrder(params.sortOrder)
488
- .setSortType(params.sortType)
489
- const searchResults = await search
490
- .setBookmark(params.bookmark)
491
- .setLimit(limit)
492
- .run()
493
-
494
- // Try fetching 1 row in the next page to see if another page of results
495
- // exists or not
496
- const nextResults = await search
497
- .setTable(params.tableId)
498
- .setBookmark(searchResults.bookmark)
499
- .setLimit(1)
500
- .run()
501
-
502
- return {
503
- ...searchResults,
504
- hasNextPage: nextResults.rows && nextResults.rows.length > 0,
505
- }
8
+ const appId = context.getAppId()
9
+ return dbCore.paginatedSearch(appId!, SearchIndex.ROWS, query, params)
506
10
  }
507
11
 
508
- /**
509
- * Performs a full search, fetching multiple pages if required to return the
510
- * desired amount of results. There is a limit of 1000 results to avoid
511
- * heavy performance hits, and to avoid client components breaking from
512
- * handling too much data.
513
- * @param query {object} The JSON query structure
514
- * @param params {object} The search params including:
515
- * tableId {string} The table ID to search
516
- * sort {string} The sort column
517
- * sortOrder {string} The sort order ("ascending" or "descending")
518
- * sortType {string} Whether to treat sortable values as strings or
519
- * numbers. ("string" or "number")
520
- * limit {number} The desired number of results
521
- * @returns {Promise<{rows: *}>}
522
- */
523
- export async function fullSearch(query: SearchFilters, params: SearchParams) {
524
- let limit = params.limit
525
- if (limit == null || isNaN(limit) || limit < 0) {
526
- limit = 1000
527
- }
528
- params.limit = Math.min(limit, 1000)
529
- const rows = await recursiveSearch(query, params)
530
- return { rows }
12
+ export async function fullSearch(
13
+ query: SearchFilters,
14
+ params: SearchParams<Row>
15
+ ) {
16
+ const appId = context.getAppId()
17
+ return dbCore.fullSearch(appId!, SearchIndex.ROWS, query, params)
531
18
  }
@@ -3,8 +3,7 @@ import * as userController from "../user"
3
3
  import { FieldTypes } from "../../../constants"
4
4
  import { context } from "@budibase/backend-core"
5
5
  import { makeExternalQuery } from "../../../integrations/base/query"
6
- import { BBContext, Row, Table } from "@budibase/types"
7
- export { removeKeyNumbering } from "../../../integrations/base/utils"
6
+ import { Row, Table } from "@budibase/types"
8
7
  const validateJs = require("validate.js")
9
8
  const { cloneDeep } = require("lodash/fp")
10
9
  import { Format } from "../view/exporters"
@@ -8,7 +8,7 @@ import {
8
8
  foreignKeyStructure,
9
9
  hasTypeChanged,
10
10
  } from "./utils"
11
- import { FieldTypes, RelationshipTypes } from "../../../constants"
11
+ import { FieldTypes } from "../../../constants"
12
12
  import { makeExternalQuery } from "../../../integrations/base/query"
13
13
  import { handleRequest } from "../row/external"
14
14
  import { events, context } from "@budibase/backend-core"
@@ -22,6 +22,7 @@ import {
22
22
  FieldSchema,
23
23
  BBContext,
24
24
  TableRequest,
25
+ RelationshipTypes,
25
26
  } from "@budibase/types"
26
27
  import sdk from "../../../sdk"
27
28
  const { cloneDeep } = require("lodash/fp")
@@ -146,7 +147,7 @@ function generateLinkSchema(
146
147
  column: FieldSchema,
147
148
  table: Table,
148
149
  relatedTable: Table,
149
- type: string
150
+ type: RelationshipTypes
150
151
  ) {
151
152
  if (!table.primary || !relatedTable.primary) {
152
153
  throw new Error("Unable to generate link schema, no primary keys")
package/src/api/index.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import Router from "@koa/router"
2
- import { errors, auth } from "@budibase/backend-core"
2
+ import { auth, middleware } from "@budibase/backend-core"
3
3
  import currentApp from "../middleware/currentapp"
4
4
  import zlib from "zlib"
5
5
  import { mainRoutes, staticRoutes, publicRoutes } from "./routes"
@@ -14,6 +14,8 @@ export const router: Router = new Router()
14
14
  router.get("/health", ctx => (ctx.status = 200))
15
15
  router.get("/version", ctx => (ctx.body = pkg.version))
16
16
 
17
+ router.use(middleware.errorHandling)
18
+
17
19
  router
18
20
  .use(
19
21
  compress({
@@ -54,27 +56,6 @@ router
54
56
  .use(currentApp)
55
57
  .use(auth.auditLog)
56
58
 
57
- // error handling middleware
58
- router.use(async (ctx, next) => {
59
- try {
60
- await next()
61
- } catch (err: any) {
62
- ctx.status = err.status || err.statusCode || 500
63
- const error = errors.getPublicError(err)
64
- ctx.body = {
65
- message: err.message,
66
- status: ctx.status,
67
- validationErrors: err.validation,
68
- error,
69
- }
70
- ctx.log.error(err)
71
- // unauthorised errors don't provide a useful trace
72
- if (!env.isTest()) {
73
- console.trace(err)
74
- }
75
- }
76
- })
77
-
78
59
  // authenticated routes
79
60
  for (let route of mainRoutes) {
80
61
  router.use(route.routes())
@@ -38,7 +38,7 @@ router
38
38
  "/api/automations",
39
39
  bodyResource("_id"),
40
40
  authorized(permissions.BUILDER),
41
- automationValidator(true),
41
+ automationValidator(false),
42
42
  controller.update
43
43
  )
44
44
  .post(
@@ -1,7 +1,6 @@
1
1
  import controller from "../../controllers/public/applications"
2
2
  import Endpoint from "./utils/Endpoint"
3
3
  const { nameValidator, applicationValidator } = require("../utils/validators")
4
- import { db } from "@budibase/backend-core"
5
4
 
6
5
  const read = [],
7
6
  write = []
@@ -10,7 +9,7 @@ const read = [],
10
9
  * @openapi
11
10
  * /applications:
12
11
  * post:
13
- * operationId: create
12
+ * operationId: appCreate
14
13
  * summary: Create an application
15
14
  * tags:
16
15
  * - applications
@@ -43,7 +42,7 @@ write.push(
43
42
  * @openapi
44
43
  * /applications/{appId}:
45
44
  * put:
46
- * operationId: update
45
+ * operationId: appUpdate
47
46
  * summary: Update an application
48
47
  * tags:
49
48
  * - applications
@@ -76,7 +75,7 @@ write.push(
76
75
  * @openapi
77
76
  * /applications/{appId}:
78
77
  * delete:
79
- * operationId: destroy
78
+ * operationId: appDestroy
80
79
  * summary: Delete an application
81
80
  * tags:
82
81
  * - applications
@@ -99,7 +98,7 @@ write.push(new Endpoint("delete", "/applications/:appId", controller.destroy))
99
98
  * @openapi
100
99
  * /applications/{appId}/unpublish:
101
100
  * post:
102
- * operationId: unpublish
101
+ * operationId: appUnpublish
103
102
  * summary: Unpublish an application
104
103
  * tags:
105
104
  * - applications
@@ -117,7 +116,7 @@ write.push(
117
116
  * @openapi
118
117
  * /applications/{appId}/publish:
119
118
  * post:
120
- * operationId: publish
119
+ * operationId: appPublish
121
120
  * summary: Unpublish an application
122
121
  * tags:
123
122
  * - applications
@@ -142,7 +141,7 @@ write.push(
142
141
  * @openapi
143
142
  * /applications/{appId}:
144
143
  * get:
145
- * operationId: getById
144
+ * operationId: appGetById
146
145
  * summary: Retrieve an application
147
146
  * tags:
148
147
  * - applications
@@ -165,7 +164,7 @@ read.push(new Endpoint("get", "/applications/:appId", controller.read))
165
164
  * @openapi
166
165
  * /applications/search:
167
166
  * post:
168
- * operationId: search
167
+ * operationId: appSearch
169
168
  * summary: Search for applications
170
169
  * description: Based on application properties (currently only name) search for applications.
171
170
  * tags: