@budibase/server 0.9.184 → 0.9.185-alpha.11

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 (290) hide show
  1. package/Dockerfile +1 -1
  2. package/__mocks__/mssql.ts +1 -1
  3. package/__mocks__/pg.ts +3 -0
  4. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  5. package/builder/assets/index.053c6f7a.js +1321 -0
  6. package/builder/assets/index.4a7c5636.css +1 -0
  7. package/builder/assets/vendor.470042a4.js +152 -0
  8. package/builder/assets/vendor.5e1fe644.css +1 -0
  9. package/builder/index.html +4 -4
  10. package/coverage/clover.xml +1357 -959
  11. package/coverage/coverage-final.json +91 -87
  12. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  13. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  14. package/coverage/lcov-report/api/controllers/application.js.html +65 -14
  15. package/coverage/lcov-report/api/controllers/auth.js.html +19 -10
  16. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  17. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  20. package/coverage/lcov-report/api/controllers/datasource.js.html +147 -27
  21. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  22. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  23. package/coverage/lcov-report/api/controllers/index.html +90 -90
  24. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  26. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  27. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  28. package/coverage/lcov-report/api/controllers/query.js.html +53 -209
  29. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  30. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  31. package/coverage/lcov-report/api/controllers/row/external.js.html +12 -6
  32. package/coverage/lcov-report/api/controllers/row/index.html +26 -26
  33. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  34. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  35. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  36. package/coverage/lcov-report/api/controllers/row/utils.js.html +21 -30
  37. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  38. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  39. package/coverage/lcov-report/api/controllers/table/external.js.html +980 -0
  40. package/coverage/lcov-report/api/controllers/table/index.html +56 -26
  41. package/coverage/lcov-report/api/controllers/table/index.js.html +80 -350
  42. package/coverage/lcov-report/api/controllers/table/internal.js.html +545 -0
  43. package/coverage/lcov-report/api/controllers/table/utils.js.html +172 -49
  44. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  45. package/coverage/lcov-report/api/controllers/user.js.html +390 -33
  46. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/index.html +9 -9
  48. package/coverage/lcov-report/api/controllers/view/index.js.html +5 -5
  49. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  50. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  51. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  52. package/coverage/lcov-report/api/index.html +1 -1
  53. package/coverage/lcov-report/api/index.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  65. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/index.html +4 -4
  67. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  73. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  79. package/coverage/lcov-report/api/routes/table.js.html +35 -2
  80. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/user.js.html +17 -2
  82. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  84. package/coverage/lcov-report/automations/actions.js.html +2 -2
  85. package/coverage/lcov-report/automations/automationUtils.js.html +3 -3
  86. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  87. package/coverage/lcov-report/automations/index.html +33 -48
  88. package/coverage/lcov-report/automations/index.js.html +2 -2
  89. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  94. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  96. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/index.html +14 -14
  98. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  100. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  101. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  106. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  108. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  109. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  111. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  116. package/coverage/lcov-report/automations/utils.js.html +42 -12
  117. package/coverage/lcov-report/constants/index.html +5 -5
  118. package/coverage/lcov-report/constants/index.js.html +49 -4
  119. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  120. package/coverage/lcov-report/constants/screens.js.html +1 -1
  121. package/coverage/lcov-report/db/client.js.html +2 -2
  122. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  123. package/coverage/lcov-report/db/index.html +2 -2
  124. package/coverage/lcov-report/db/index.js.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  126. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  127. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  128. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  129. package/coverage/lcov-report/db/newid.js.html +1 -1
  130. package/coverage/lcov-report/db/utils.js.html +1 -1
  131. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  132. package/coverage/lcov-report/events/index.html +6 -6
  133. package/coverage/lcov-report/events/index.js.html +1 -1
  134. package/coverage/lcov-report/events/utils.js.html +5 -5
  135. package/coverage/lcov-report/index.html +98 -83
  136. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  137. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  138. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  139. package/coverage/lcov-report/middleware/authorized.js.html +11 -8
  140. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  141. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  142. package/coverage/lcov-report/middleware/index.html +23 -23
  143. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  144. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  145. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  146. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  147. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  148. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +83 -32
  149. package/coverage/lcov-report/threads/index.html +141 -0
  150. package/coverage/lcov-report/threads/index.js.html +260 -0
  151. package/coverage/lcov-report/threads/query.js.html +269 -0
  152. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  153. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  154. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  155. package/coverage/lcov-report/utilities/csvParser.js.html +144 -15
  156. package/coverage/lcov-report/utilities/global.js.html +26 -11
  157. package/coverage/lcov-report/utilities/index.html +49 -49
  158. package/coverage/lcov-report/utilities/index.js.html +65 -17
  159. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  160. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  161. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  164. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  165. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  166. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  167. package/coverage/lcov-report/utilities/security.js.html +3 -3
  168. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  169. package/coverage/lcov-report/utilities/users.js.html +1 -1
  170. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  171. package/coverage/lcov.info +2301 -1599
  172. package/dist/api/controllers/application.js +16 -2
  173. package/dist/api/controllers/auth.js +3 -3
  174. package/dist/api/controllers/datasource.js +47 -16
  175. package/dist/api/controllers/deploy/index.js +2 -0
  176. package/dist/api/controllers/dev.js +4 -1
  177. package/dist/api/controllers/query.js +30 -58
  178. package/dist/api/controllers/row/ExternalRequest.js +37 -14
  179. package/dist/api/controllers/row/external.js +1 -0
  180. package/dist/api/controllers/row/utils.js +6 -12
  181. package/dist/api/controllers/static/index.js +1 -1
  182. package/dist/api/controllers/table/external.js +242 -0
  183. package/dist/api/controllers/table/index.js +49 -123
  184. package/dist/api/controllers/table/internal.js +150 -0
  185. package/dist/api/controllers/table/utils.js +62 -28
  186. package/dist/api/controllers/user.js +123 -11
  187. package/dist/api/routes/query.js +1 -1
  188. package/dist/api/routes/table.js +7 -1
  189. package/dist/api/routes/user.js +2 -1
  190. package/dist/app.js +2 -11
  191. package/dist/automations/bullboard.js +37 -10
  192. package/dist/automations/triggers.js +7 -3
  193. package/dist/automations/utils.js +11 -2
  194. package/dist/constants/index.js +13 -0
  195. package/dist/definitions/datasource.js +4 -0
  196. package/dist/integrations/base/IntegrationBase.js +2 -0
  197. package/dist/integrations/base/datasourcePlus.js +2 -0
  198. package/dist/integrations/base/sql.js +334 -180
  199. package/dist/integrations/base/sqlTable.js +143 -0
  200. package/dist/integrations/base/utils.js +30 -0
  201. package/dist/integrations/microsoftSqlServer.js +117 -9
  202. package/dist/integrations/mysql.js +14 -84
  203. package/dist/integrations/postgres.js +35 -28
  204. package/dist/integrations/utils.js +56 -9
  205. package/dist/middleware/authorized.js +2 -1
  206. package/dist/middleware/builder.js +4 -1
  207. package/dist/package.json +7 -6
  208. package/dist/tests/utilities/TestConfiguration.js +2 -1
  209. package/dist/{automations/thread.js → threads/automation.js} +23 -7
  210. package/dist/threads/index.js +58 -0
  211. package/dist/threads/query.js +61 -0
  212. package/dist/tsconfig.tsbuildinfo +1 -1
  213. package/dist/utilities/csvParser.js +46 -5
  214. package/dist/utilities/global.js +6 -2
  215. package/dist/utilities/index.js +18 -2
  216. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  217. package/dist/utilities/scriptRunner.js +4 -1
  218. package/package.json +8 -7
  219. package/scripts/integrations/mssql/data/Dockerfile +9 -0
  220. package/scripts/integrations/mssql/data/entrypoint.sh +24 -0
  221. package/scripts/integrations/mssql/data/setup.sql +54 -0
  222. package/scripts/integrations/mssql/docker-compose.yaml +12 -0
  223. package/scripts/integrations/mssql/reset.sh +3 -0
  224. package/scripts/likeCypress.ts +33 -0
  225. package/src/api/controllers/application.js +19 -2
  226. package/src/api/controllers/auth.js +3 -0
  227. package/src/api/controllers/datasource.js +56 -16
  228. package/src/api/controllers/deploy/index.js +2 -0
  229. package/src/api/controllers/dev.js +4 -1
  230. package/src/api/controllers/query.js +29 -81
  231. package/src/api/controllers/row/ExternalRequest.ts +47 -16
  232. package/src/api/controllers/row/external.js +2 -0
  233. package/src/api/controllers/row/utils.js +8 -11
  234. package/src/api/controllers/static/index.js +1 -1
  235. package/src/api/controllers/table/external.js +300 -0
  236. package/src/api/controllers/table/index.js +47 -137
  237. package/src/api/controllers/table/internal.js +155 -0
  238. package/src/api/controllers/table/utils.js +74 -33
  239. package/src/api/controllers/user.js +132 -13
  240. package/src/api/routes/query.js +1 -0
  241. package/src/api/routes/table.js +11 -0
  242. package/src/api/routes/tests/datasource.spec.js +2 -2
  243. package/src/api/routes/tests/misc.spec.js +5 -1
  244. package/src/api/routes/tests/query.spec.js +0 -1
  245. package/src/api/routes/user.js +5 -0
  246. package/src/app.ts +2 -10
  247. package/src/automations/bullboard.js +28 -11
  248. package/src/automations/tests/automation.spec.js +3 -4
  249. package/src/automations/triggers.js +7 -3
  250. package/src/automations/utils.js +12 -2
  251. package/src/constants/index.js +15 -0
  252. package/src/definitions/common.ts +7 -1
  253. package/src/definitions/datasource.ts +9 -3
  254. package/src/integrations/airtable.ts +2 -1
  255. package/src/integrations/arangodb.ts +2 -1
  256. package/src/integrations/base/IntegrationBase.ts +6 -0
  257. package/src/integrations/base/datasourcePlus.ts +9 -0
  258. package/src/integrations/base/sql.ts +359 -222
  259. package/src/integrations/base/sqlTable.ts +180 -0
  260. package/src/integrations/base/utils.ts +22 -0
  261. package/src/integrations/couchdb.ts +2 -1
  262. package/src/integrations/dynamodb.ts +2 -1
  263. package/src/integrations/elasticsearch.ts +2 -1
  264. package/src/integrations/microsoftSqlServer.ts +145 -13
  265. package/src/integrations/mongodb.ts +2 -1
  266. package/src/integrations/mysql.ts +20 -94
  267. package/src/integrations/postgres.ts +45 -35
  268. package/src/integrations/rest.ts +2 -1
  269. package/src/integrations/s3.ts +2 -1
  270. package/src/integrations/tests/microsoftSqlServer.spec.js +22 -15
  271. package/src/integrations/tests/postgres.spec.js +4 -0
  272. package/src/integrations/utils.ts +60 -8
  273. package/src/middleware/authorized.js +2 -1
  274. package/src/middleware/builder.js +4 -1
  275. package/src/tests/utilities/TestConfiguration.js +2 -1
  276. package/src/{automations/thread.js → threads/automation.js} +24 -7
  277. package/src/threads/index.js +60 -0
  278. package/src/threads/query.js +63 -0
  279. package/src/utilities/csvParser.js +48 -5
  280. package/src/utilities/global.js +7 -2
  281. package/src/utilities/index.js +18 -2
  282. package/src/utilities/queue/inMemoryQueue.js +7 -0
  283. package/src/utilities/scriptRunner.js +4 -1
  284. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -6
  285. package/src/utilities/tests/csvParser.spec.js +3 -0
  286. package/tsconfig.json +1 -1
  287. package/builder/assets/index.34964222.js +0 -201
  288. package/builder/assets/index.7469e1e4.css +0 -29
  289. package/builder/assets/vendor.278a305c.js +0 -9
  290. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">78.57% </span>
26
+ <span class="strong">84.93% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>77/98</span>
28
+ <span class='fraction'>62/73</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">53.66% </span>
33
+ <span class="strong">48% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>22/41</span>
35
+ <span class='fraction'>12/25</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">92.31% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>12/13</span>
42
+ <span class='fraction'>9/9</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">78.95% </span>
47
+ <span class="strong">84.72% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>75/95</span>
49
+ <span class='fraction'>61/72</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line medium'></div>
58
+ <div class='status-line high'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -213,64 +213,13 @@
213
213
  <a name='L154'></a><a href='#L154'>154</a>
214
214
  <a name='L155'></a><a href='#L155'>155</a>
215
215
  <a name='L156'></a><a href='#L156'>156</a>
216
- <a name='L157'></a><a href='#L157'>157</a>
217
- <a name='L158'></a><a href='#L158'>158</a>
218
- <a name='L159'></a><a href='#L159'>159</a>
219
- <a name='L160'></a><a href='#L160'>160</a>
220
- <a name='L161'></a><a href='#L161'>161</a>
221
- <a name='L162'></a><a href='#L162'>162</a>
222
- <a name='L163'></a><a href='#L163'>163</a>
223
- <a name='L164'></a><a href='#L164'>164</a>
224
- <a name='L165'></a><a href='#L165'>165</a>
225
- <a name='L166'></a><a href='#L166'>166</a>
226
- <a name='L167'></a><a href='#L167'>167</a>
227
- <a name='L168'></a><a href='#L168'>168</a>
228
- <a name='L169'></a><a href='#L169'>169</a>
229
- <a name='L170'></a><a href='#L170'>170</a>
230
- <a name='L171'></a><a href='#L171'>171</a>
231
- <a name='L172'></a><a href='#L172'>172</a>
232
- <a name='L173'></a><a href='#L173'>173</a>
233
- <a name='L174'></a><a href='#L174'>174</a>
234
- <a name='L175'></a><a href='#L175'>175</a>
235
- <a name='L176'></a><a href='#L176'>176</a>
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
216
+ <a name='L157'></a><a href='#L157'>157</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
269
217
  <span class="cline-any cline-yes">34x</span>
270
218
  <span class="cline-any cline-yes">34x</span>
271
219
  <span class="cline-any cline-yes">34x</span>
272
220
  <span class="cline-any cline-yes">34x</span>
273
221
  <span class="cline-any cline-yes">34x</span>
222
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
223
  <span class="cline-any cline-yes">34x</span>
275
224
  <span class="cline-any cline-neutral">&nbsp;</span>
276
225
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -285,47 +234,6 @@
285
234
  <span class="cline-any cline-yes">4x</span>
286
235
  <span class="cline-any cline-neutral">&nbsp;</span>
287
236
  <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-neutral">&nbsp;</span>
289
- <span class="cline-any cline-yes">2x</span>
290
- <span class="cline-any cline-no">&nbsp;</span>
291
- <span class="cline-any cline-no">&nbsp;</span>
292
- <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-no">&nbsp;</span>
294
- <span class="cline-any cline-neutral">&nbsp;</span>
295
- <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-yes">2x</span>
297
- <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-neutral">&nbsp;</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-yes">2x</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-yes">2x</span>
309
- <span class="cline-any cline-no">&nbsp;</span>
310
- <span class="cline-any cline-no">&nbsp;</span>
311
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&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-yes">2x</span>
320
- <span class="cline-any cline-no">&nbsp;</span>
321
- <span class="cline-any cline-neutral">&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-yes">2x</span>
325
- <span class="cline-any cline-neutral">&nbsp;</span>
326
- <span class="cline-any cline-yes">2x</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-neutral">&nbsp;</span>
329
237
  <span class="cline-any cline-yes">34x</span>
330
238
  <span class="cline-any cline-yes">2x</span>
331
239
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -353,10 +261,10 @@
353
261
  <span class="cline-any cline-neutral">&nbsp;</span>
354
262
  <span class="cline-any cline-neutral">&nbsp;</span>
355
263
  <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-yes">2x</span>
264
+ <span class="cline-any cline-yes">4x</span>
357
265
  <span class="cline-any cline-neutral">&nbsp;</span>
358
266
  <span class="cline-any cline-neutral">&nbsp;</span>
359
- <span class="cline-any cline-yes">2x</span>
267
+ <span class="cline-any cline-yes">4x</span>
360
268
  <span class="cline-any cline-no">&nbsp;</span>
361
269
  <span class="cline-any cline-no">&nbsp;</span>
362
270
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -367,11 +275,13 @@
367
275
  <span class="cline-any cline-neutral">&nbsp;</span>
368
276
  <span class="cline-any cline-no">&nbsp;</span>
369
277
  <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
280
  <span class="cline-any cline-no">&nbsp;</span>
371
281
  <span class="cline-any cline-neutral">&nbsp;</span>
372
282
  <span class="cline-any cline-neutral">&nbsp;</span>
373
283
  <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-yes">2x</span>
284
+ <span class="cline-any cline-yes">4x</span>
375
285
  <span class="cline-any cline-neutral">&nbsp;</span>
376
286
  <span class="cline-any cline-neutral">&nbsp;</span>
377
287
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -388,7 +298,7 @@
388
298
  <span class="cline-any cline-no">&nbsp;</span>
389
299
  <span class="cline-any cline-neutral">&nbsp;</span>
390
300
  <span class="cline-any cline-neutral">&nbsp;</span>
391
- <span class="cline-any cline-yes">2x</span>
301
+ <span class="cline-any cline-yes">4x</span>
392
302
  <span class="cline-any cline-neutral">&nbsp;</span>
393
303
  <span class="cline-any cline-neutral">&nbsp;</span>
394
304
  <span class="cline-any cline-yes">34x</span>
@@ -409,16 +319,10 @@
409
319
  <span class="cline-any cline-yes">2x</span>
410
320
  <span class="cline-any cline-neutral">&nbsp;</span>
411
321
  <span class="cline-any cline-yes">2x</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
322
  <span class="cline-any cline-yes">2x</span>
414
- <span class="cline-any cline-yes">1x</span>
415
- <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-yes">1x</span>
418
- <span class="cline-any cline-yes">1x</span>
419
- <span class="cline-any cline-yes">1x</span>
420
323
  <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-yes">1x</span>
324
+ <span class="cline-any cline-yes">2x</span>
325
+ <span class="cline-any cline-yes">2x</span>
422
326
  <span class="cline-any cline-neutral">&nbsp;</span>
423
327
  <span class="cline-any cline-neutral">&nbsp;</span>
424
328
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -431,7 +335,6 @@
431
335
  <span class="cline-any cline-neutral">&nbsp;</span>
432
336
  <span class="cline-any cline-neutral">&nbsp;</span>
433
337
  <span class="cline-any cline-yes">1x</span>
434
- <span class="cline-any cline-no">&nbsp;</span>
435
338
  <span class="cline-any cline-neutral">&nbsp;</span>
436
339
  <span class="cline-any cline-neutral">&nbsp;</span>
437
340
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -443,18 +346,12 @@
443
346
  <span class="cline-any cline-neutral">&nbsp;</span>
444
347
  <span class="cline-any cline-yes">2x</span>
445
348
  <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-yes">2x</span>
447
- <span class="cline-any cline-yes">1x</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-neutral">&nbsp;</span>
450
- <span class="cline-any cline-yes">1x</span>
451
349
  <span class="cline-any cline-neutral">&nbsp;</span>
452
350
  <span class="cline-any cline-neutral">&nbsp;</span>
453
351
  <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-yes">1x</span>
455
352
  <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-yes">1x</span>
353
+ <span class="cline-any cline-yes">2x</span>
354
+ <span class="cline-any cline-yes">2x</span>
458
355
  <span class="cline-any cline-neutral">&nbsp;</span>
459
356
  <span class="cline-any cline-neutral">&nbsp;</span>
460
357
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -463,7 +360,6 @@
463
360
  <span class="cline-any cline-yes">1x</span>
464
361
  <span class="cline-any cline-neutral">&nbsp;</span>
465
362
  <span class="cline-any cline-yes">1x</span>
466
- <span class="cline-any cline-no">&nbsp;</span>
467
363
  <span class="cline-any cline-neutral">&nbsp;</span>
468
364
  <span class="cline-any cline-neutral">&nbsp;</span>
469
365
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -476,64 +372,24 @@
476
372
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { processString } = require("@budibase/string-templates")
477
373
  const CouchDB = require("../../db")
478
374
  const { generateQueryID, getQueryParams } = require("../../db/utils")
479
- const { integrations } = require("../../integrations")
480
375
  const { BaseQueryVerbs } = require("../../constants")
481
376
  const env = require("../../environment")
482
- const ScriptRunner = require("../../utilities/scriptRunner")
377
+ const { Thread, ThreadType } = require("../../threads")
378
+ &nbsp;
379
+ const Runner = new Thread(ThreadType.QUERY, { timeoutMs: 10000 })
483
380
  &nbsp;
484
381
  // simple function to append "readable" to all read queries
485
382
  function enrichQueries(input) {
486
383
  const wasArray = Array.isArray(input)
487
384
  const queries = wasArray ? input : [input]
488
385
  for (let query of queries) {
489
- <span class="missing-if-branch" title="else path not taken" >E</span>if (query.queryVerb === BaseQueryVerbs.READ) {
386
+ if (query.queryVerb === BaseQueryVerbs.READ) {
490
387
  query.readable = true
491
388
  }
492
389
  }
493
390
  return wasArray ? queries : queries[0]
494
391
  }
495
392
  &nbsp;
496
- function formatResponse(resp) {
497
- <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof resp === "string") {
498
- <span class="cstat-no" title="statement not covered" > try {</span>
499
- <span class="cstat-no" title="statement not covered" > resp = JSON.parse(resp)</span>
500
- } catch (err) {
501
- <span class="cstat-no" title="statement not covered" > resp = { response: resp }</span>
502
- }
503
- }
504
- return resp
505
- }
506
- &nbsp;
507
- async function runAndTransform(
508
- integration,
509
- queryVerb,
510
- enrichedQuery,
511
- transformer
512
- ) {
513
- let rows = formatResponse(await integration[queryVerb](enrichedQuery))
514
- &nbsp;
515
- // transform as required
516
- <span class="missing-if-branch" title="if path not taken" >I</span>if (transformer) {
517
- const runner = <span class="cstat-no" title="statement not covered" >new ScriptRunner(transformer, { data: rows })</span>
518
- <span class="cstat-no" title="statement not covered" > rows = runner.execute()</span>
519
- }
520
- &nbsp;
521
- // needs to an array for next step
522
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(rows)) {
523
- <span class="cstat-no" title="statement not covered" > rows = [rows]</span>
524
- }
525
- &nbsp;
526
- // map into JSON if just raw primitive here
527
- <span class="missing-if-branch" title="if path not taken" >I</span>if (rows.find(row =&gt; typeof row !== "object")) {
528
- <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>
529
- }
530
- &nbsp;
531
- // get all the potential fields in the schema
532
- let keys = rows.flatMap(Object.keys)
533
- &nbsp;
534
- return { rows, keys }
535
- }
536
- &nbsp;
537
393
  exports.fetch = async function (ctx) {
538
394
  const db = new CouchDB(ctx.appId)
539
395
  &nbsp;
@@ -549,7 +405,7 @@ exports.save = async function (ctx) {
549
405
  const db = new CouchDB(ctx.appId)
550
406
  const query = ctx.request.body
551
407
  &nbsp;
552
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!query._id) {
408
+ if (!query._id) {
553
409
  query._id = generateQueryID(query.datasourceId)
554
410
  }
555
411
  &nbsp;
@@ -573,7 +429,9 @@ async function enrichQueryFields(fields, parameters = <span class="branch-0 cbra
573
429
  <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = await enrichQueryFields(fields[key], parameters)</span>
574
430
  } else <span class="cstat-no" title="statement not covered" >if (typeof fields[key] === "string") {</span>
575
431
  // enrich string value as normal
576
- <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = await processString(fields[key], parameters)</span>
432
+ <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = await processString(fields[key], parameters, {</span>
433
+ noHelpers: true,
434
+ })
577
435
  } else {
578
436
  <span class="cstat-no" title="statement not covered" > enrichedQuery[key] = fields[key]</span>
579
437
  }
@@ -615,31 +473,24 @@ exports.preview = async function (ctx) {
615
473
  const db = new CouchDB(ctx.appId)
616
474
  &nbsp;
617
475
  const datasource = await db.get(ctx.request.body.datasourceId)
618
- &nbsp;
619
- const Integration = integrations[datasource.source]
620
- &nbsp;
621
- if (!Integration) {
622
- ctx.throw(400, "Integration type does not exist.")
623
- }
624
476
  &nbsp;
625
477
  const { fields, parameters, queryVerb, transformer } = ctx.request.body
626
478
  const enrichedQuery = await enrichQueryFields(fields, parameters)
627
- const integration = new Integration(datasource.config)
628
479
  &nbsp;
629
- const { rows, keys } = await runAndTransform(
630
- integration,
631
- queryVerb,
632
- enrichedQuery,
633
- transformer
634
- )
480
+ try {
481
+ const { rows, keys } = await Runner.run({
482
+ datasource,
483
+ queryVerb,
484
+ query: enrichedQuery,
485
+ transformer,
486
+ })
635
487
  &nbsp;
636
- ctx.body = {
637
- rows,
638
- schemaFields: [...new Set(keys)],
639
- }
640
- // cleanup
641
- <span class="missing-if-branch" title="if path not taken" >I</span>if (integration.end) {
642
- <span class="cstat-no" title="statement not covered" > integration.end()</span>
488
+ ctx.body = {
489
+ rows,
490
+ schemaFields: [...new Set(keys)],
491
+ }
492
+ } catch (err) {
493
+ ctx.throw(400, err)
643
494
  }
644
495
  }
645
496
  &nbsp;
@@ -648,30 +499,23 @@ exports.execute = async function (ctx) {
648
499
  &nbsp;
649
500
  const query = await db.get(ctx.params.queryId)
650
501
  const datasource = await db.get(query.datasourceId)
651
- &nbsp;
652
- const Integration = integrations[datasource.source]
653
- &nbsp;
654
- if (!Integration) {
655
- ctx.throw(400, "Integration type does not exist.")
656
- }
657
502
  &nbsp;
658
503
  const enrichedQuery = await enrichQueryFields(
659
504
  query.fields,
660
505
  ctx.request.body.parameters
661
506
  )
662
- const integration = new Integration(datasource.config)
663
507
  &nbsp;
664
508
  // call the relevant CRUD method on the integration class
665
- const { rows } = await runAndTransform(
666
- integration,
667
- query.queryVerb,
668
- enrichedQuery,
669
- query.transformer
670
- )
671
- ctx.body = rows
672
- // cleanup
673
- <span class="missing-if-branch" title="if path not taken" >I</span>if (integration.end) {
674
- <span class="cstat-no" title="statement not covered" > integration.end()</span>
509
+ try {
510
+ const { rows } = await Runner.run({
511
+ datasource,
512
+ queryVerb: query.queryVerb,
513
+ query: enrichedQuery,
514
+ transformer: query.transformer,
515
+ })
516
+ ctx.body = rows
517
+ } catch (err) {
518
+ ctx.throw(400, err)
675
519
  }
676
520
  }
677
521
  &nbsp;
@@ -688,7 +532,7 @@ exports.destroy = async function (ctx) {
688
532
  <div class='footer quiet pad2 space-top1 center small'>
689
533
  Code coverage generated by
690
534
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
691
- at Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
535
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
692
536
  </div>
693
537
  </div>
694
538
  <script src="../../prettify.js"></script>
@@ -23,28 +23,28 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">87.04% </span>
26
+ <span class="strong">87.03% </span>
27
27
  <span class="quiet">Statements</span>
28
28
  <span class='fraction'>47/54</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">63.64% </span>
33
+ <span class="strong">63.63% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>14/22</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">71.43% </span>
40
+ <span class="strong">71.42% </span>
41
41
  <span class="quiet">Functions</span>
42
42
  <span class='fraction'>5/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">88.68% </span>
47
+ <span class="strong">88.67% </span>
48
48
  <span class="quiet">Lines</span>
49
49
  <span class='fraction'>47/53</span>
50
50
  </div>
@@ -283,13 +283,13 @@ async function updateRolesOnUserTable(db, roleId, updateOption) {
283
283
  const indexOf = constraints.inclusion.indexOf(roleId)
284
284
  if (remove &amp;&amp; indexOf !== -1) {
285
285
  constraints.inclusion.splice(indexOf, 1)
286
- } else <span class="missing-if-branch" title="else path not taken" >E</span>if (!remove &amp;&amp; indexOf === -1) {
286
+ } else if (!remove &amp;&amp; indexOf === -1) {
287
287
  constraints.inclusion.push(roleId)
288
288
  }
289
289
  break
290
290
  }
291
291
  }
292
- <span class="missing-if-branch" title="else path not taken" >E</span>if (updated) {
292
+ if (updated) {
293
293
  await db.put(table)
294
294
  }
295
295
  }
@@ -305,9 +305,9 @@ exports.find = async function (ctx) {
305
305
  exports.save = async function (ctx) {
306
306
  const db = new CouchDB(ctx.appId)
307
307
  let { _id, name, inherits, permissionId } = ctx.request.body
308
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!_id) {
308
+ if (!_id) {
309
309
  _id = generateRoleID()
310
- } else <span class="cstat-no" title="statement not covered" >if (isBuiltin(_id)) {</span>
310
+ } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="else path not taken" >E</span>if (isBuiltin(_id)) {</span>
311
311
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Cannot update builtin roles.")</span>
312
312
  }
313
313
  const role = new Role(_id, name)
@@ -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 Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
361
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
362
362
  </div>
363
363
  </div>
364
364
  <script src="../../prettify.js"></script>
@@ -23,7 +23,7 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">89.8% </span>
26
+ <span class="strong">89.79% </span>
27
27
  <span class="quiet">Statements</span>
28
28
  <span class='fraction'>44/49</span>
29
29
  </div>
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">89.8% </span>
47
+ <span class="strong">89.79% </span>
48
48
  <span class="quiet">Lines</span>
49
49
  <span class='fraction'>44/49</span>
50
50
  </div>
@@ -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 Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
346
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
347
347
  </div>
348
348
  </div>
349
349
  <script src="../../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">14.14% </span>
26
+ <span class="strong">15% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>14/99</span>
28
+ <span class='fraction'>15/100</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">14.43% </span>
47
+ <span class="strong">15.3% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>14/97</span>
49
+ <span class='fraction'>15/98</span>
50
50
  </div>
51
51
 
52
52
 
@@ -285,7 +285,9 @@
285
285
  <a name='L226'></a><a href='#L226'>226</a>
286
286
  <a name='L227'></a><a href='#L227'>227</a>
287
287
  <a name='L228'></a><a href='#L228'>228</a>
288
- <a name='L229'></a><a href='#L229'>229</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
288
+ <a name='L229'></a><a href='#L229'>229</a>
289
+ <a name='L230'></a><a href='#L230'>230</a>
290
+ <a name='L231'></a><a href='#L231'>231</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
289
291
  <span class="cline-any cline-neutral">&nbsp;</span>
290
292
  <span class="cline-any cline-neutral">&nbsp;</span>
291
293
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -318,6 +320,8 @@
318
320
  <span class="cline-any cline-neutral">&nbsp;</span>
319
321
  <span class="cline-any cline-neutral">&nbsp;</span>
320
322
  <span class="cline-any cline-yes">34x</span>
323
+ <span class="cline-any cline-neutral">&nbsp;</span>
324
+ <span class="cline-any cline-yes">34x</span>
321
325
  <span class="cline-any cline-no">&nbsp;</span>
322
326
  <span class="cline-any cline-no">&nbsp;</span>
323
327
  <span class="cline-any cline-no">&nbsp;</span>
@@ -545,6 +549,8 @@ async function <span class="fstat-no" title="function not covered" >handleReques
545
549
  )
546
550
  }
547
551
  &nbsp;
552
+ exports.handleRequest = handleRequest
553
+ &nbsp;
548
554
  exports.patch = <span class="fstat-no" title="function not covered" >as</span>ync ctx =&gt; {
549
555
  const appId = <span class="cstat-no" title="statement not covered" >ctx.appId</span>
550
556
  const inputs = <span class="cstat-no" title="statement not covered" >ctx.request.body</span>
@@ -748,7 +754,7 @@ exports.fetchEnrichedRow = <span class="fstat-no" title="function not covered" >
748
754
  <div class='footer quiet pad2 space-top1 center small'>
749
755
  Code coverage generated by
750
756
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
751
- at Thu Nov 11 2021 11:32:22 GMT+0000 (Coordinated Universal Time)
757
+ at Mon Nov 22 2021 10:23:31 GMT+0000 (Coordinated Universal Time)
752
758
  </div>
753
759
  </div>
754
760
  <script src="../../../prettify.js"></script>