@budibase/server 0.9.172 → 0.9.173-alpha.3

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 (261) hide show
  1. package/__mocks__/{mysql.ts → mysql2.ts} +0 -0
  2. package/builder/assets/{index.dbc6728e.css → index.7469e1e4.css} +2 -2
  3. package/builder/assets/{index.9ab01cd4.js → index.b38aa4d6.js} +34 -34
  4. package/builder/assets/{vendor.54435e8f.js → vendor.278a305c.js} +1 -1
  5. package/builder/index.html +3 -3
  6. package/coverage/clover.xml +973 -849
  7. package/coverage/coverage-final.json +47 -46
  8. package/coverage/lcov-report/api/controllers/analytics.js.html +21 -9
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/application.js.html +186 -84
  11. package/coverage/lcov-report/api/controllers/auth.js.html +37 -10
  12. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/backup.js.html +6 -9
  14. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/dev.js.html +41 -17
  18. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/index.html +71 -71
  20. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/permission.js.html +7 -4
  24. package/coverage/lcov-report/api/controllers/query.js.html +129 -24
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/index.html +5 -5
  29. package/coverage/lcov-report/api/controllers/row/index.js.html +15 -15
  30. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +9 -9
  34. package/coverage/lcov-report/api/controllers/script.js.html +12 -57
  35. package/coverage/lcov-report/api/controllers/table/index.html +28 -28
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +16 -37
  37. package/coverage/lcov-report/api/controllers/table/utils.js.html +279 -33
  38. package/coverage/lcov-report/api/controllers/templates.js.html +49 -13
  39. package/coverage/lcov-report/api/controllers/user.js.html +3 -3
  40. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/view/index.html +19 -19
  42. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/utils.js.html +8 -8
  44. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +54 -15
  45. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  46. package/coverage/lcov-report/api/index.html +1 -1
  47. package/coverage/lcov-report/api/index.js.html +3 -3
  48. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/application.js.html +5 -2
  51. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/dev.js.html +26 -11
  59. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/index.html +9 -9
  61. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/query.js.html +9 -3
  67. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  78. package/coverage/lcov-report/automations/actions.js.html +31 -10
  79. package/coverage/lcov-report/automations/automationUtils.js.html +14 -86
  80. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  81. package/coverage/lcov-report/automations/index.html +37 -37
  82. package/coverage/lcov-report/automations/index.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/bash.js.html +10 -7
  84. package/coverage/lcov-report/automations/steps/createRow.js.html +2 -2
  85. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/deleteRow.js.html +8 -5
  87. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/executeQuery.js.html +10 -7
  89. package/coverage/lcov-report/automations/steps/executeScript.js.html +10 -7
  90. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/index.html +57 -57
  92. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +10 -7
  94. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -7
  95. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +10 -7
  96. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/updateRow.js.html +14 -14
  99. package/coverage/lcov-report/automations/steps/utils.js.html +10 -10
  100. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  101. package/coverage/lcov-report/automations/thread.js.html +54 -12
  102. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  111. package/coverage/lcov-report/automations/utils.js.html +28 -28
  112. package/coverage/lcov-report/constants/index.html +1 -1
  113. package/coverage/lcov-report/constants/index.js.html +5 -2
  114. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  115. package/coverage/lcov-report/constants/screens.js.html +2 -2
  116. package/coverage/lcov-report/db/client.js.html +1 -1
  117. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  118. package/coverage/lcov-report/db/index.html +1 -1
  119. package/coverage/lcov-report/db/index.js.html +1 -1
  120. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +12 -12
  121. package/coverage/lcov-report/db/linkedRows/index.html +18 -18
  122. package/coverage/lcov-report/db/linkedRows/index.js.html +47 -26
  123. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  124. package/coverage/lcov-report/db/newid.js.html +2 -2
  125. package/coverage/lcov-report/db/utils.js.html +17 -17
  126. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  127. package/coverage/lcov-report/events/index.html +1 -1
  128. package/coverage/lcov-report/events/index.js.html +1 -1
  129. package/coverage/lcov-report/events/utils.js.html +1 -1
  130. package/coverage/lcov-report/index.html +107 -107
  131. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  132. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  133. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  134. package/coverage/lcov-report/middleware/authorized.js.html +2 -2
  135. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  136. package/coverage/lcov-report/middleware/currentapp.js.html +52 -25
  137. package/coverage/lcov-report/middleware/index.html +15 -15
  138. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  139. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  140. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  141. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  142. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  143. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  144. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  145. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  146. package/coverage/lcov-report/utilities/global.js.html +27 -27
  147. package/coverage/lcov-report/utilities/index.html +32 -17
  148. package/coverage/lcov-report/utilities/index.js.html +4 -4
  149. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +29 -8
  150. package/coverage/lcov-report/utilities/queue/index.html +15 -15
  151. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  152. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  153. package/coverage/lcov-report/utilities/rowProcessor/index.html +14 -14
  154. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +38 -8
  155. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  156. package/coverage/lcov-report/utilities/scriptRunner.js.html +143 -0
  157. package/coverage/lcov-report/utilities/security.js.html +1 -1
  158. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  159. package/coverage/lcov-report/utilities/users.js.html +1 -1
  160. package/coverage/lcov-report/utilities/workerRequests.js.html +19 -19
  161. package/coverage/lcov.info +1692 -1452
  162. package/dist/api/controllers/analytics.js +4 -0
  163. package/dist/api/controllers/application.js +185 -171
  164. package/dist/api/controllers/auth.js +12 -2
  165. package/dist/api/controllers/backup.js +4 -4
  166. package/dist/api/controllers/deploy/index.js +3 -16
  167. package/dist/api/controllers/dev.js +17 -11
  168. package/dist/api/controllers/permission.js +1 -0
  169. package/dist/api/controllers/query.js +26 -8
  170. package/dist/api/controllers/row/ExternalRequest.js +46 -5
  171. package/dist/api/controllers/script.js +4 -16
  172. package/dist/api/controllers/table/index.js +5 -10
  173. package/dist/api/controllers/table/utils.js +83 -10
  174. package/dist/api/controllers/templates.js +18 -3
  175. package/dist/api/controllers/view/viewBuilder.js +15 -1
  176. package/dist/api/routes/application.js +1 -0
  177. package/dist/api/routes/dev.js +8 -4
  178. package/dist/api/routes/query.js +3 -1
  179. package/dist/api/routes/tests/utilities/TestFunctions.js +7 -9
  180. package/dist/automations/actions.js +9 -3
  181. package/dist/automations/automationUtils.js +8 -29
  182. package/dist/automations/steps/bash.js +2 -1
  183. package/dist/automations/steps/createRow.js +1 -1
  184. package/dist/automations/steps/deleteRow.js +2 -1
  185. package/dist/automations/steps/executeQuery.js +2 -1
  186. package/dist/automations/steps/executeScript.js +2 -1
  187. package/dist/automations/steps/outgoingWebhook.js +2 -1
  188. package/dist/automations/steps/queryRows.js +2 -1
  189. package/dist/automations/steps/sendSmtpEmail.js +2 -1
  190. package/dist/automations/steps/updateRow.js +6 -2
  191. package/dist/automations/thread.js +14 -3
  192. package/dist/constants/index.js +1 -0
  193. package/dist/db/linkedRows/index.js +9 -6
  194. package/dist/integrations/base/sql.js +4 -4
  195. package/dist/integrations/mysql.js +1 -1
  196. package/dist/integrations/utils.js +17 -1
  197. package/dist/middleware/currentapp.js +8 -2
  198. package/dist/package.json +7 -6
  199. package/dist/tests/utilities/TestConfiguration.js +34 -19
  200. package/dist/tests/utilities/controllers.js +1 -0
  201. package/dist/tsconfig.tsbuildinfo +1 -1
  202. package/dist/utilities/fileSystem/index.js +49 -33
  203. package/dist/utilities/global.js +1 -1
  204. package/dist/utilities/queue/inMemoryQueue.js +6 -0
  205. package/dist/utilities/rowProcessor/index.js +8 -0
  206. package/dist/utilities/scriptRunner.js +19 -0
  207. package/package.json +8 -7
  208. package/scripts/jestSetup.js +2 -0
  209. package/src/api/controllers/analytics.js +4 -0
  210. package/src/api/controllers/application.js +43 -9
  211. package/src/api/controllers/auth.js +12 -3
  212. package/src/api/controllers/backup.js +4 -5
  213. package/src/api/controllers/deploy/index.js +3 -18
  214. package/src/api/controllers/dev.js +16 -8
  215. package/src/api/controllers/permission.js +1 -0
  216. package/src/api/controllers/query.js +46 -11
  217. package/src/api/controllers/row/ExternalRequest.ts +53 -4
  218. package/src/api/controllers/script.js +4 -19
  219. package/src/api/controllers/table/index.js +5 -12
  220. package/src/api/controllers/table/utils.js +94 -12
  221. package/src/api/controllers/templates.js +17 -5
  222. package/src/api/controllers/view/tests/__snapshots__/viewBuilder.spec.js.snap +1 -1
  223. package/src/api/controllers/view/viewBuilder.js +14 -1
  224. package/src/api/routes/application.js +1 -0
  225. package/src/api/routes/dev.js +9 -4
  226. package/src/api/routes/query.js +3 -1
  227. package/src/api/routes/tests/auth.spec.js +1 -2
  228. package/src/api/routes/tests/permissions.spec.js +3 -0
  229. package/src/api/routes/tests/query.spec.js +2 -2
  230. package/src/api/routes/tests/routing.spec.js +24 -8
  231. package/src/api/routes/tests/user.spec.js +1 -1
  232. package/src/api/routes/tests/utilities/TestFunctions.js +7 -9
  233. package/src/api/routes/tests/webhook.spec.js +4 -1
  234. package/src/automations/actions.js +10 -3
  235. package/src/automations/automationUtils.js +7 -31
  236. package/src/automations/steps/bash.js +2 -1
  237. package/src/automations/steps/createRow.js +1 -1
  238. package/src/automations/steps/deleteRow.js +2 -1
  239. package/src/automations/steps/executeQuery.js +2 -1
  240. package/src/automations/steps/executeScript.js +2 -1
  241. package/src/automations/steps/outgoingWebhook.js +2 -1
  242. package/src/automations/steps/queryRows.js +2 -1
  243. package/src/automations/steps/sendSmtpEmail.js +2 -1
  244. package/src/automations/steps/updateRow.js +6 -6
  245. package/src/automations/thread.js +17 -3
  246. package/src/constants/index.js +1 -0
  247. package/src/db/linkedRows/index.js +14 -7
  248. package/src/integrations/base/sql.ts +11 -3
  249. package/src/integrations/mysql.ts +1 -1
  250. package/src/integrations/tests/mongo.spec.js +10 -6
  251. package/src/integrations/tests/mysql.spec.js +1 -1
  252. package/src/integrations/utils.ts +18 -0
  253. package/src/middleware/currentapp.js +11 -2
  254. package/src/middleware/tests/currentapp.spec.js +3 -3
  255. package/src/tests/utilities/TestConfiguration.js +47 -19
  256. package/src/tests/utilities/controllers.js +1 -0
  257. package/src/utilities/fileSystem/index.js +65 -43
  258. package/src/utilities/global.js +1 -1
  259. package/src/utilities/queue/inMemoryQueue.js +7 -0
  260. package/src/utilities/rowProcessor/index.js +10 -0
  261. package/src/utilities/scriptRunner.js +21 -0
@@ -202,7 +202,7 @@ exports.getMetadata = async ctx => {
202
202
  <div class='footer quiet pad2 space-top1 center small'>
203
203
  Code coverage generated by
204
204
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
205
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
205
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
206
206
  </div>
207
207
  </div>
208
208
  <script src="../../prettify.js"></script>
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">90.63% </span>
33
+ <span class="strong">90.91% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>29/32</span>
35
+ <span class='fraction'>30/33</span>
36
36
  </div>
37
37
 
38
38
 
@@ -231,7 +231,8 @@
231
231
  <a name='L172'></a><a href='#L172'>172</a>
232
232
  <a name='L173'></a><a href='#L173'>173</a>
233
233
  <a name='L174'></a><a href='#L174'>174</a>
234
- <a name='L175'></a><a href='#L175'>175</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
234
+ <a name='L175'></a><a href='#L175'>175</a>
235
+ <a name='L176'></a><a href='#L176'>176</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
235
236
  <span class="cline-any cline-neutral">&nbsp;</span>
236
237
  <span class="cline-any cline-neutral">&nbsp;</span>
237
238
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -383,6 +384,7 @@
383
384
  <span class="cline-any cline-neutral">&nbsp;</span>
384
385
  <span class="cline-any cline-neutral">&nbsp;</span>
385
386
  <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
386
388
  <span class="cline-any cline-yes">3x</span>
387
389
  <span class="cline-any cline-neutral">&nbsp;</span>
388
390
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -554,6 +556,7 @@ exports.getResourcePerms = async function (ctx) {
554
556
  const rolePerms = role.permissions
555
557
  if (
556
558
  rolePerms &amp;&amp;
559
+ rolePerms[resourceId] &amp;&amp;
557
560
  (rolePerms[resourceId] === level ||
558
561
  rolePerms[resourceId].indexOf(level) !== -1)
559
562
  ) {
@@ -586,7 +589,7 @@ exports.removePermission = async function (ctx) {
586
589
  <div class='footer quiet pad2 space-top1 center small'>
587
590
  Code coverage generated by
588
591
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
589
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
592
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
590
593
  </div>
591
594
  </div>
592
595
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">79.55% </span>
26
+ <span class="strong">77.78% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>70/88</span>
28
+ <span class='fraction'>77/99</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">54.05% </span>
33
+ <span class="strong">53.66% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>20/37</span>
35
+ <span class='fraction'>22/41</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">92.31% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/10</span>
42
+ <span class='fraction'>12/13</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">79.31% </span>
47
+ <span class="strong">78.13% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>69/87</span>
49
+ <span class='fraction'>75/96</span>
50
50
  </div>
51
51
 
52
52
 
@@ -233,7 +233,43 @@
233
233
  <a name='L174'></a><a href='#L174'>174</a>
234
234
  <a name='L175'></a><a href='#L175'>175</a>
235
235
  <a name='L176'></a><a href='#L176'>176</a>
236
- <a name='L177'></a><a href='#L177'>177</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
236
+ <a name='L177'></a><a href='#L177'>177</a>
237
+ <a name='L178'></a><a href='#L178'>178</a>
238
+ <a name='L179'></a><a href='#L179'>179</a>
239
+ <a name='L180'></a><a href='#L180'>180</a>
240
+ <a name='L181'></a><a href='#L181'>181</a>
241
+ <a name='L182'></a><a href='#L182'>182</a>
242
+ <a name='L183'></a><a href='#L183'>183</a>
243
+ <a name='L184'></a><a href='#L184'>184</a>
244
+ <a name='L185'></a><a href='#L185'>185</a>
245
+ <a name='L186'></a><a href='#L186'>186</a>
246
+ <a name='L187'></a><a href='#L187'>187</a>
247
+ <a name='L188'></a><a href='#L188'>188</a>
248
+ <a name='L189'></a><a href='#L189'>189</a>
249
+ <a name='L190'></a><a href='#L190'>190</a>
250
+ <a name='L191'></a><a href='#L191'>191</a>
251
+ <a name='L192'></a><a href='#L192'>192</a>
252
+ <a name='L193'></a><a href='#L193'>193</a>
253
+ <a name='L194'></a><a href='#L194'>194</a>
254
+ <a name='L195'></a><a href='#L195'>195</a>
255
+ <a name='L196'></a><a href='#L196'>196</a>
256
+ <a name='L197'></a><a href='#L197'>197</a>
257
+ <a name='L198'></a><a href='#L198'>198</a>
258
+ <a name='L199'></a><a href='#L199'>199</a>
259
+ <a name='L200'></a><a href='#L200'>200</a>
260
+ <a name='L201'></a><a href='#L201'>201</a>
261
+ <a name='L202'></a><a href='#L202'>202</a>
262
+ <a name='L203'></a><a href='#L203'>203</a>
263
+ <a name='L204'></a><a href='#L204'>204</a>
264
+ <a name='L205'></a><a href='#L205'>205</a>
265
+ <a name='L206'></a><a href='#L206'>206</a>
266
+ <a name='L207'></a><a href='#L207'>207</a>
267
+ <a name='L208'></a><a href='#L208'>208</a>
268
+ <a name='L209'></a><a href='#L209'>209</a>
269
+ <a name='L210'></a><a href='#L210'>210</a>
270
+ <a name='L211'></a><a href='#L211'>211</a>
271
+ <a name='L212'></a><a href='#L212'>212</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
272
+ <span class="cline-any cline-yes">34x</span>
237
273
  <span class="cline-any cline-yes">34x</span>
238
274
  <span class="cline-any cline-yes">34x</span>
239
275
  <span class="cline-any cline-yes">34x</span>
@@ -264,8 +300,35 @@
264
300
  <span class="cline-any cline-neutral">&nbsp;</span>
265
301
  <span class="cline-any cline-neutral">&nbsp;</span>
266
302
  <span class="cline-any cline-yes">2x</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-yes">2x</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-yes">2x</span>
315
+ <span class="cline-any cline-no">&nbsp;</span>
316
+ <span class="cline-any cline-no">&nbsp;</span>
317
+ <span class="cline-any cline-neutral">&nbsp;</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-yes">2x</span>
321
+ <span class="cline-any cline-no">&nbsp;</span>
322
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-neutral">&nbsp;</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-yes">2x</span>
267
326
  <span class="cline-any cline-no">&nbsp;</span>
268
327
  <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-yes">2x</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
332
  <span class="cline-any cline-yes">2x</span>
270
333
  <span class="cline-any cline-neutral">&nbsp;</span>
271
334
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -358,14 +421,15 @@
358
421
  <span class="cline-any cline-neutral">&nbsp;</span>
359
422
  <span class="cline-any cline-neutral">&nbsp;</span>
360
423
  <span class="cline-any cline-yes">1x</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
424
  <span class="cline-any cline-yes">1x</span>
363
- <span class="cline-any cline-neutral">&nbsp;</span>
364
425
  <span class="cline-any cline-yes">1x</span>
426
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
427
  <span class="cline-any cline-yes">1x</span>
366
428
  <span class="cline-any cline-neutral">&nbsp;</span>
367
429
  <span class="cline-any cline-neutral">&nbsp;</span>
368
- <span class="cline-any cline-yes">1x</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
433
  <span class="cline-any cline-neutral">&nbsp;</span>
370
434
  <span class="cline-any cline-yes">1x</span>
371
435
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -393,9 +457,15 @@
393
457
  <span class="cline-any cline-neutral">&nbsp;</span>
394
458
  <span class="cline-any cline-neutral">&nbsp;</span>
395
459
  <span class="cline-any cline-neutral">&nbsp;</span>
460
+ <span class="cline-any cline-yes">1x</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
462
  <span class="cline-any cline-neutral">&nbsp;</span>
397
463
  <span class="cline-any cline-yes">1x</span>
398
464
  <span class="cline-any cline-neutral">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
469
  <span class="cline-any cline-yes">1x</span>
400
470
  <span class="cline-any cline-neutral">&nbsp;</span>
401
471
  <span class="cline-any cline-yes">1x</span>
@@ -415,6 +485,7 @@ const { generateQueryID, getQueryParams } = require("../../db/utils")
415
485
  const { integrations } = require("../../integrations")
416
486
  const { BaseQueryVerbs } = require("../../constants")
417
487
  const env = require("../../environment")
488
+ const ScriptRunner = require("../../utilities/scriptRunner")
418
489
  &nbsp;
419
490
  // simple function to append "readable" to all read queries
420
491
  function enrichQueries(input) {
@@ -439,12 +510,39 @@ function formatResponse(resp) {
439
510
  <span class="cstat-no" title="statement not covered" > resp = { response: resp }</span>
440
511
  }
441
512
  }
442
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(resp)) {
443
- <span class="cstat-no" title="statement not covered" > resp = [resp]</span>
444
- }
445
513
  return resp
446
514
  }
447
515
  &nbsp;
516
+ async function runAndTransform(
517
+ integration,
518
+ queryVerb,
519
+ enrichedQuery,
520
+ transformer
521
+ ) {
522
+ let rows = formatResponse(await integration[queryVerb](enrichedQuery))
523
+ &nbsp;
524
+ // transform as required
525
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (transformer) {
526
+ const runner = <span class="cstat-no" title="statement not covered" >new ScriptRunner(transformer, { data: rows })</span>
527
+ <span class="cstat-no" title="statement not covered" > rows = runner.execute()</span>
528
+ }
529
+ &nbsp;
530
+ // needs to an array for next step
531
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(rows)) {
532
+ <span class="cstat-no" title="statement not covered" > rows = [rows]</span>
533
+ }
534
+ &nbsp;
535
+ // map into JSON if just raw primitive here
536
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (rows.find(row =&gt; typeof row !== "object")) {
537
+ <span class="cstat-no" title="statement not covered" > rows = rows.map(<span class="fstat-no" title="function not covered" >va</span>lue =&gt; (<span class="cstat-no" title="statement not covered" >{ value })</span>)</span>
538
+ }
539
+ &nbsp;
540
+ // get all the potential fields in the schema
541
+ let keys = rows.flatMap(Object.keys)
542
+ &nbsp;
543
+ return { rows, keys }
544
+ }
545
+ &nbsp;
448
546
  exports.fetch = async function (ctx) {
449
547
  const db = new CouchDB(ctx.appId)
450
548
  &nbsp;
@@ -533,15 +631,16 @@ exports.preview = async function (ctx) {
533
631
  ctx.throw(400, "Integration type does not exist.")
534
632
  }
535
633
  &nbsp;
536
- const { fields, parameters, queryVerb } = ctx.request.body
537
- &nbsp;
634
+ const { fields, parameters, queryVerb, transformer } = ctx.request.body
538
635
  const enrichedQuery = await enrichQueryFields(fields, parameters)
539
- &nbsp;
540
636
  const integration = new Integration(datasource.config)
541
- const rows = formatResponse(await integration[queryVerb](enrichedQuery))
542
637
  &nbsp;
543
- // get all the potential fields in the schema
544
- const keys = rows.flatMap(Object.keys)
638
+ const { rows, keys } = await runAndTransform(
639
+ integration,
640
+ queryVerb,
641
+ enrichedQuery,
642
+ transformer
643
+ )
545
644
  &nbsp;
546
645
  ctx.body = {
547
646
  rows,
@@ -569,10 +668,16 @@ exports.execute = async function (ctx) {
569
668
  query.fields,
570
669
  ctx.request.body.parameters
571
670
  )
572
- &nbsp;
573
671
  const integration = new Integration(datasource.config)
672
+ &nbsp;
574
673
  // call the relevant CRUD method on the integration class
575
- ctx.body = formatResponse(await integration[query.queryVerb](enrichedQuery))
674
+ const { rows } = await runAndTransform(
675
+ integration,
676
+ query.queryVerb,
677
+ enrichedQuery,
678
+ query.transformer
679
+ )
680
+ ctx.body = rows
576
681
  // cleanup
577
682
  <span class="missing-if-branch" title="if path not taken" >I</span>if (integration.end) {
578
683
  <span class="cstat-no" title="statement not covered" > integration.end()</span>
@@ -592,7 +697,7 @@ exports.destroy = async function (ctx) {
592
697
  <div class='footer quiet pad2 space-top1 center small'>
593
698
  Code coverage generated by
594
699
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
595
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
700
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
596
701
  </div>
597
702
  </div>
598
703
  <script src="../../prettify.js"></script>
@@ -358,7 +358,7 @@ exports.destroy = async function (ctx) {
358
358
  <div class='footer quiet pad2 space-top1 center small'>
359
359
  Code coverage generated by
360
360
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
361
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
361
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
362
362
  </div>
363
363
  </div>
364
364
  <script src="../../prettify.js"></script>
@@ -343,7 +343,7 @@ exports.clientFetch = async ctx =&gt; {
343
343
  <div class='footer quiet pad2 space-top1 center small'>
344
344
  Code coverage generated by
345
345
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
346
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
346
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
347
347
  </div>
348
348
  </div>
349
349
  <script src="../../prettify.js"></script>
@@ -748,7 +748,7 @@ exports.fetchEnrichedRow = <span class="fstat-no" title="function not covered" >
748
748
  <div class='footer quiet pad2 space-top1 center small'>
749
749
  Code coverage generated by
750
750
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
751
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
751
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
752
752
  </div>
753
753
  </div>
754
754
  <script src="../../../prettify.js"></script>
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">33.47% </span>
33
+ <span class="strong">33.88% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>82/245</span>
35
+ <span class='fraction'>83/245</span>
36
36
  </div>
37
37
 
38
38
 
@@ -94,8 +94,8 @@
94
94
  </td>
95
95
  <td data-value="92.94" class="pct high">92.94%</td>
96
96
  <td data-value="85" class="abs high">79/85</td>
97
- <td data-value="91.18" class="pct high">91.18%</td>
98
- <td data-value="34" class="abs high">31/34</td>
97
+ <td data-value="94.12" class="pct high">94.12%</td>
98
+ <td data-value="34" class="abs high">32/34</td>
99
99
  <td data-value="100" class="pct high">100%</td>
100
100
  <td data-value="11" class="abs high">11/11</td>
101
101
  <td data-value="92.94" class="pct high">92.94%</td>
@@ -155,7 +155,7 @@
155
155
  <div class='footer quiet pad2 space-top1 center small'>
156
156
  Code coverage generated by
157
157
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
158
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
158
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
159
159
  </div>
160
160
  </div>
161
161
  <script src="../../../prettify.js"></script>
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">91.18% </span>
33
+ <span class="strong">94.12% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>31/34</span>
35
+ <span class='fraction'>32/34</span>
36
36
  </div>
37
37
 
38
38
 
@@ -201,41 +201,41 @@
201
201
  <span class="cline-any cline-yes">34x</span>
202
202
  <span class="cline-any cline-neutral">&nbsp;</span>
203
203
  <span class="cline-any cline-neutral">&nbsp;</span>
204
- <span class="cline-any cline-yes">110x</span>
204
+ <span class="cline-any cline-yes">111x</span>
205
205
  <span class="cline-any cline-no">&nbsp;</span>
206
206
  <span class="cline-any cline-neutral">&nbsp;</span>
207
207
  <span class="cline-any cline-yes">110x</span>
208
208
  <span class="cline-any cline-neutral">&nbsp;</span>
209
209
  <span class="cline-any cline-neutral">&nbsp;</span>
210
210
  <span class="cline-any cline-neutral">&nbsp;</span>
211
- <span class="cline-any cline-yes">112x</span>
211
+ <span class="cline-any cline-yes">113x</span>
212
212
  <span class="cline-any cline-yes">73x</span>
213
213
  <span class="cline-any cline-neutral">&nbsp;</span>
214
- <span class="cline-any cline-yes">39x</span>
214
+ <span class="cline-any cline-yes">40x</span>
215
215
  <span class="cline-any cline-yes">32x</span>
216
216
  <span class="cline-any cline-neutral">&nbsp;</span>
217
- <span class="cline-any cline-yes">7x</span>
217
+ <span class="cline-any cline-yes">8x</span>
218
218
  <span class="cline-any cline-yes">7x</span>
219
219
  <span class="cline-any cline-neutral">&nbsp;</span>
220
220
  <span class="cline-any cline-neutral">&nbsp;</span>
221
221
  <span class="cline-any cline-neutral">&nbsp;</span>
222
222
  <span class="cline-any cline-yes">34x</span>
223
- <span class="cline-any cline-yes">5x</span>
224
- <span class="cline-any cline-yes">5x</span>
225
- <span class="cline-any cline-yes">5x</span>
223
+ <span class="cline-any cline-yes">6x</span>
224
+ <span class="cline-any cline-yes">6x</span>
225
+ <span class="cline-any cline-yes">6x</span>
226
226
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">5x</span>
227
+ <span class="cline-any cline-yes">6x</span>
228
228
  <span class="cline-any cline-no">&nbsp;</span>
229
229
  <span class="cline-any cline-neutral">&nbsp;</span>
230
- <span class="cline-any cline-yes">5x</span>
231
- <span class="cline-any cline-yes">5x</span>
230
+ <span class="cline-any cline-yes">6x</span>
231
+ <span class="cline-any cline-yes">6x</span>
232
232
  <span class="cline-any cline-yes">4x</span>
233
233
  <span class="cline-any cline-yes">4x</span>
234
234
  <span class="cline-any cline-neutral">&nbsp;</span>
235
235
  <span class="cline-any cline-yes">4x</span>
236
236
  <span class="cline-any cline-yes">4x</span>
237
237
  <span class="cline-any cline-neutral">&nbsp;</span>
238
- <span class="cline-any cline-yes">1x</span>
238
+ <span class="cline-any cline-yes">2x</span>
239
239
  <span class="cline-any cline-neutral">&nbsp;</span>
240
240
  <span class="cline-any cline-neutral">&nbsp;</span>
241
241
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -353,7 +353,7 @@ function getTableId(ctx) {
353
353
  if (ctx.params &amp;&amp; ctx.params.tableId) {
354
354
  return ctx.params.tableId
355
355
  }
356
- <span class="missing-if-branch" title="else path not taken" >E</span>if (ctx.params &amp;&amp; ctx.params.viewName) {
356
+ if (ctx.params &amp;&amp; ctx.params.viewName) {
357
357
  return ctx.params.viewName
358
358
  }
359
359
  }
@@ -481,7 +481,7 @@ exports.fetchEnrichedRow = async function (ctx) {
481
481
  <div class='footer quiet pad2 space-top1 center small'>
482
482
  Code coverage generated by
483
483
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
484
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
484
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
485
485
  </div>
486
486
  </div>
487
487
  <script src="../../../prettify.js"></script>
@@ -1405,7 +1405,7 @@ exports.fetchEnrichedRow = async ctx =&gt; {
1405
1405
  <div class='footer quiet pad2 space-top1 center small'>
1406
1406
  Code coverage generated by
1407
1407
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1408
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
1408
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
1409
1409
  </div>
1410
1410
  </div>
1411
1411
  <script src="../../../prettify.js"></script>
@@ -1228,7 +1228,7 @@ exports.fullSearch = <span class="fstat-no" title="function not covered" >as</sp
1228
1228
  <div class='footer quiet pad2 space-top1 center small'>
1229
1229
  Code coverage generated by
1230
1230
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1231
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
1231
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
1232
1232
  </div>
1233
1233
  </div>
1234
1234
  <script src="../../../prettify.js"></script>
@@ -328,7 +328,7 @@ exports.validate = async ({ appId, tableId, row, table }) =&gt; {
328
328
  <div class='footer quiet pad2 space-top1 center small'>
329
329
  Code coverage generated by
330
330
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
331
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
331
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
332
332
  </div>
333
333
  </div>
334
334
  <script src="../../../prettify.js"></script>
@@ -128,17 +128,17 @@
128
128
  <span class="cline-any cline-neutral">&nbsp;</span>
129
129
  <span class="cline-any cline-neutral">&nbsp;</span>
130
130
  <span class="cline-any cline-yes">33x</span>
131
- <span class="cline-any cline-yes">15x</span>
132
- <span class="cline-any cline-yes">15x</span>
133
- <span class="cline-any cline-yes">15x</span>
131
+ <span class="cline-any cline-yes">19x</span>
132
+ <span class="cline-any cline-yes">19x</span>
133
+ <span class="cline-any cline-yes">19x</span>
134
134
  <span class="cline-any cline-neutral">&nbsp;</span>
135
- <span class="cline-any cline-yes">15x</span>
136
- <span class="cline-any cline-yes">15x</span>
135
+ <span class="cline-any cline-yes">19x</span>
136
+ <span class="cline-any cline-yes">19x</span>
137
137
  <span class="cline-any cline-neutral">&nbsp;</span>
138
- <span class="cline-any cline-yes">15x</span>
138
+ <span class="cline-any cline-yes">19x</span>
139
139
  <span class="cline-any cline-neutral">&nbsp;</span>
140
- <span class="cline-any cline-yes">15x</span>
141
- <span class="cline-any cline-yes">15x</span>
140
+ <span class="cline-any cline-yes">19x</span>
141
+ <span class="cline-any cline-yes">19x</span>
142
142
  <span class="cline-any cline-neutral">&nbsp;</span>
143
143
  <span class="cline-any cline-neutral">&nbsp;</span>
144
144
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -208,7 +208,7 @@ exports.destroy = async ctx =&gt; {
208
208
  <div class='footer quiet pad2 space-top1 center small'>
209
209
  Code coverage generated by
210
210
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
211
- at Mon Oct 25 2021 09:06:28 GMT+0000 (Coordinated Universal Time)
211
+ at Wed Oct 27 2021 14:24:39 GMT+0000 (Coordinated Universal Time)
212
212
  </div>
213
213
  </div>
214
214
  <script src="../../prettify.js"></script>