@budibase/server 0.9.125-alpha.4 → 0.9.125-alpha.8

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 (270) hide show
  1. package/builder/assets/{index.dc48c234.js → index.cf133375.js} +2 -2
  2. package/builder/assets/{vendor.4af73c18.js → vendor.d8e1ee7b.js} +1 -1
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +1659 -1493
  5. package/coverage/coverage-final.json +101 -87
  6. package/coverage/lcov-report/api/controllers/analytics.js.html +3 -3
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
  8. package/coverage/lcov-report/api/controllers/application.js.html +39 -39
  9. package/coverage/lcov-report/api/controllers/auth.js.html +6 -6
  10. package/coverage/lcov-report/api/controllers/automation.js.html +151 -361
  11. package/coverage/lcov-report/api/controllers/backup.js.html +3 -3
  12. package/coverage/lcov-report/api/controllers/component.js.html +5 -5
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/dev.js.html +15 -15
  15. package/coverage/lcov-report/api/controllers/hosting.js.html +8 -8
  16. package/coverage/lcov-report/api/controllers/index.html +39 -24
  17. package/coverage/lcov-report/api/controllers/integration.js.html +4 -4
  18. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/metadata.js.html +218 -0
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query.js.html +6 -12
  22. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/row/index.html +20 -20
  26. package/coverage/lcov-report/api/controllers/row/index.js.html +14 -14
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +95 -62
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +10 -10
  30. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  33. package/coverage/lcov-report/api/controllers/table/index.js.html +24 -24
  34. package/coverage/lcov-report/api/controllers/table/utils.js.html +32 -32
  35. package/coverage/lcov-report/api/controllers/templates.js.html +5 -5
  36. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  39. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  42. package/coverage/lcov-report/api/index.html +1 -1
  43. package/coverage/lcov-report/api/index.js.html +23 -23
  44. package/coverage/lcov-report/api/routes/analytics.js.html +6 -6
  45. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
  46. package/coverage/lcov-report/api/routes/application.js.html +8 -8
  47. package/coverage/lcov-report/api/routes/auth.js.html +6 -6
  48. package/coverage/lcov-report/api/routes/automation.js.html +41 -26
  49. package/coverage/lcov-report/api/routes/backup.js.html +8 -8
  50. package/coverage/lcov-report/api/routes/component.js.html +8 -8
  51. package/coverage/lcov-report/api/routes/datasource.js.html +13 -13
  52. package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
  53. package/coverage/lcov-report/api/routes/dev.js.html +11 -11
  54. package/coverage/lcov-report/api/routes/hosting.js.html +8 -8
  55. package/coverage/lcov-report/api/routes/index.html +24 -9
  56. package/coverage/lcov-report/api/routes/index.js.html +36 -30
  57. package/coverage/lcov-report/api/routes/integration.js.html +8 -8
  58. package/coverage/lcov-report/api/routes/layout.js.html +8 -8
  59. package/coverage/lcov-report/api/routes/metadata.js.html +194 -0
  60. package/coverage/lcov-report/api/routes/permission.js.html +12 -12
  61. package/coverage/lcov-report/api/routes/query.js.html +13 -13
  62. package/coverage/lcov-report/api/routes/role.js.html +12 -12
  63. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  64. package/coverage/lcov-report/api/routes/row.js.html +10 -10
  65. package/coverage/lcov-report/api/routes/screen.js.html +11 -11
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/static.js.html +13 -13
  68. package/coverage/lcov-report/api/routes/table.js.html +12 -12
  69. package/coverage/lcov-report/api/routes/templates.js.html +8 -8
  70. package/coverage/lcov-report/api/routes/user.js.html +9 -9
  71. package/coverage/lcov-report/api/routes/view.js.html +11 -11
  72. package/coverage/lcov-report/api/routes/webhook.js.html +11 -11
  73. package/coverage/lcov-report/automations/actions.js.html +38 -107
  74. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  75. package/coverage/lcov-report/automations/bullboard.js.html +46 -16
  76. package/coverage/lcov-report/automations/index.html +67 -67
  77. package/coverage/lcov-report/automations/index.js.html +26 -128
  78. package/coverage/lcov-report/automations/steps/bash.js.html +33 -12
  79. package/coverage/lcov-report/automations/steps/createRow.js.html +8 -8
  80. package/coverage/lcov-report/automations/steps/delay.js.html +45 -6
  81. package/coverage/lcov-report/automations/steps/deleteRow.js.html +8 -8
  82. package/coverage/lcov-report/automations/steps/discord.js.html +329 -0
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +19 -31
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +18 -30
  85. package/coverage/lcov-report/automations/steps/filter.js.html +22 -19
  86. package/coverage/lcov-report/automations/steps/index.html +125 -65
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +341 -0
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +26 -32
  89. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +9 -9
  90. package/coverage/lcov-report/automations/steps/serverLog.js.html +20 -8
  91. package/coverage/lcov-report/automations/steps/{sendgridEmail.js.html → slack.js.html} +57 -87
  92. package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
  93. package/coverage/lcov-report/automations/steps/utils.js.html +188 -0
  94. package/coverage/lcov-report/automations/steps/zapier.js.html +332 -0
  95. package/coverage/lcov-report/automations/thread.js.html +79 -76
  96. package/coverage/lcov-report/automations/triggerInfo/app.js.html +173 -0
  97. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +173 -0
  98. package/coverage/lcov-report/automations/triggerInfo/index.html +201 -0
  99. package/coverage/lcov-report/automations/triggerInfo/index.js.html +125 -0
  100. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +176 -0
  101. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +200 -0
  102. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +200 -0
  103. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +188 -0
  104. package/coverage/lcov-report/automations/triggers.js.html +54 -819
  105. package/coverage/lcov-report/automations/utils.js.html +557 -0
  106. package/coverage/lcov-report/constants/index.html +5 -5
  107. package/coverage/lcov-report/constants/index.js.html +19 -4
  108. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  109. package/coverage/lcov-report/constants/screens.js.html +2 -2
  110. package/coverage/lcov-report/db/client.js.html +1 -1
  111. package/coverage/lcov-report/db/index.html +19 -19
  112. package/coverage/lcov-report/db/index.js.html +1 -1
  113. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +73 -73
  114. package/coverage/lcov-report/db/linkedRows/index.html +17 -17
  115. package/coverage/lcov-report/db/linkedRows/index.js.html +79 -115
  116. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +31 -31
  117. package/coverage/lcov-report/db/newid.js.html +2 -2
  118. package/coverage/lcov-report/db/utils.js.html +79 -28
  119. package/coverage/lcov-report/events/AutomationEmitter.js.html +7 -7
  120. package/coverage/lcov-report/events/index.html +1 -1
  121. package/coverage/lcov-report/events/index.js.html +2 -2
  122. package/coverage/lcov-report/events/utils.js.html +1 -1
  123. package/coverage/lcov-report/index.html +115 -100
  124. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  125. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  126. package/coverage/lcov-report/{automations/logic.js.html → middleware/appInfo.js.html} +35 -38
  127. package/coverage/lcov-report/middleware/authorized.js.html +16 -16
  128. package/coverage/lcov-report/middleware/builder.js.html +15 -15
  129. package/coverage/lcov-report/middleware/currentapp.js.html +33 -33
  130. package/coverage/lcov-report/middleware/index.html +23 -8
  131. package/coverage/lcov-report/middleware/joi-validator.js.html +6 -6
  132. package/coverage/lcov-report/middleware/resourceId.js.html +28 -28
  133. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  134. package/coverage/lcov-report/middleware/usageQuota.js.html +8 -8
  135. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  136. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  137. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  138. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  139. package/coverage/lcov-report/utilities/global.js.html +21 -21
  140. package/coverage/lcov-report/utilities/index.html +18 -18
  141. package/coverage/lcov-report/utilities/index.js.html +167 -14
  142. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +12 -12
  143. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  144. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  145. package/coverage/lcov-report/utilities/routing/index.js.html +6 -6
  146. package/coverage/lcov-report/utilities/rowProcessor/index.html +14 -14
  147. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +87 -51
  148. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +8 -8
  149. package/coverage/lcov-report/utilities/security.js.html +2 -2
  150. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  151. package/coverage/lcov-report/utilities/users.js.html +1 -1
  152. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  153. package/coverage/lcov.info +2641 -2357
  154. package/dist/api/controllers/automation.js +49 -127
  155. package/dist/api/controllers/deploy/index.js +17 -1
  156. package/dist/api/controllers/metadata.js +49 -0
  157. package/dist/api/controllers/query.js +0 -2
  158. package/dist/api/controllers/row/internal.js +33 -23
  159. package/dist/api/routes/automation.js +4 -5
  160. package/dist/api/routes/index.js +2 -0
  161. package/dist/api/routes/metadata.js +13 -0
  162. package/dist/api/routes/tests/utilities/TestFunctions.js +13 -0
  163. package/dist/app.js +1 -1
  164. package/dist/automations/actions.js +26 -46
  165. package/dist/automations/bullboard.js +10 -2
  166. package/dist/automations/index.js +11 -48
  167. package/dist/automations/steps/bash.js +11 -5
  168. package/dist/automations/steps/createRow.js +4 -4
  169. package/dist/automations/steps/delay.js +15 -2
  170. package/dist/automations/steps/deleteRow.js +4 -4
  171. package/dist/automations/steps/discord.js +91 -0
  172. package/dist/automations/steps/executeQuery.js +11 -14
  173. package/dist/automations/steps/executeScript.js +11 -14
  174. package/dist/automations/steps/filter.js +18 -17
  175. package/dist/automations/steps/integromat.js +94 -0
  176. package/dist/automations/steps/outgoingWebhook.js +12 -16
  177. package/dist/automations/steps/sendSmtpEmail.js +3 -3
  178. package/dist/automations/steps/serverLog.js +6 -2
  179. package/dist/automations/steps/slack.js +73 -0
  180. package/dist/automations/steps/updateRow.js +3 -3
  181. package/dist/automations/steps/utils.js +46 -0
  182. package/dist/automations/steps/zapier.js +91 -0
  183. package/dist/automations/tests/utilities/index.js +2 -12
  184. package/dist/automations/thread.js +23 -25
  185. package/dist/automations/triggerInfo/app.js +32 -0
  186. package/dist/automations/triggerInfo/cron.js +32 -0
  187. package/dist/automations/triggerInfo/index.js +15 -0
  188. package/dist/automations/triggerInfo/rowDeleted.js +33 -0
  189. package/dist/automations/triggerInfo/rowSaved.js +41 -0
  190. package/dist/automations/triggerInfo/rowUpdated.js +41 -0
  191. package/dist/automations/triggerInfo/webhook.js +37 -0
  192. package/dist/automations/triggers.js +27 -284
  193. package/dist/automations/utils.js +143 -0
  194. package/dist/constants/index.js +4 -0
  195. package/dist/db/linkedRows/index.js +14 -26
  196. package/dist/db/utils.js +14 -1
  197. package/dist/environment.js +1 -0
  198. package/dist/integrations/mysql.js +1 -1
  199. package/dist/middleware/appInfo.js +17 -0
  200. package/dist/middleware/usageQuota.js +1 -1
  201. package/dist/package.json +7 -6
  202. package/dist/tsconfig.tsbuildinfo +1 -1
  203. package/dist/utilities/fileSystem/index.js +0 -26
  204. package/dist/utilities/index.js +54 -0
  205. package/dist/utilities/redis.js +16 -1
  206. package/dist/utilities/rowProcessor/index.js +7 -4
  207. package/package.json +8 -7
  208. package/scripts/selfhost.js +8 -0
  209. package/src/api/controllers/automation.js +75 -145
  210. package/src/api/controllers/deploy/index.js +23 -1
  211. package/src/api/controllers/metadata.js +46 -0
  212. package/src/api/controllers/query.js +0 -2
  213. package/src/api/controllers/row/internal.js +34 -23
  214. package/src/api/routes/automation.js +16 -11
  215. package/src/api/routes/index.js +2 -0
  216. package/src/api/routes/metadata.js +38 -0
  217. package/src/api/routes/tests/automation.spec.js +4 -26
  218. package/src/api/routes/tests/metadata.spec.js +65 -0
  219. package/src/api/routes/tests/utilities/TestFunctions.js +14 -0
  220. package/src/app.ts +1 -1
  221. package/src/automations/actions.js +26 -49
  222. package/src/automations/bullboard.js +12 -2
  223. package/src/automations/index.js +11 -45
  224. package/src/automations/steps/bash.js +12 -5
  225. package/src/automations/steps/createRow.js +4 -4
  226. package/src/automations/steps/delay.js +15 -2
  227. package/src/automations/steps/deleteRow.js +4 -4
  228. package/src/automations/steps/discord.js +83 -0
  229. package/src/automations/steps/executeQuery.js +11 -15
  230. package/src/automations/steps/executeScript.js +11 -15
  231. package/src/automations/steps/filter.js +18 -17
  232. package/src/automations/steps/integromat.js +87 -0
  233. package/src/automations/steps/outgoingWebhook.js +12 -14
  234. package/src/automations/steps/sendSmtpEmail.js +3 -3
  235. package/src/automations/steps/serverLog.js +6 -2
  236. package/src/automations/steps/slack.js +64 -0
  237. package/src/automations/steps/updateRow.js +3 -3
  238. package/src/automations/steps/utils.js +36 -0
  239. package/src/automations/steps/zapier.js +84 -0
  240. package/src/automations/tests/automation.spec.js +3 -66
  241. package/src/automations/tests/delay.spec.js +1 -1
  242. package/src/automations/tests/filter.spec.js +13 -13
  243. package/src/automations/tests/utilities/index.js +2 -13
  244. package/src/automations/thread.js +27 -26
  245. package/src/automations/triggerInfo/app.js +31 -0
  246. package/src/automations/triggerInfo/cron.js +31 -0
  247. package/src/automations/triggerInfo/index.js +15 -0
  248. package/src/automations/triggerInfo/rowDeleted.js +32 -0
  249. package/src/automations/triggerInfo/rowSaved.js +40 -0
  250. package/src/automations/triggerInfo/rowUpdated.js +40 -0
  251. package/src/automations/triggerInfo/webhook.js +36 -0
  252. package/src/automations/triggers.js +33 -288
  253. package/src/automations/utils.js +159 -0
  254. package/src/constants/index.js +5 -0
  255. package/src/db/linkedRows/index.js +15 -27
  256. package/src/db/tests/linkTests.spec.js +0 -12
  257. package/src/db/utils.js +17 -0
  258. package/src/environment.js +1 -0
  259. package/src/integrations/mysql.ts +1 -1
  260. package/src/middleware/appInfo.js +19 -0
  261. package/src/middleware/usageQuota.js +1 -1
  262. package/src/utilities/fileSystem/index.js +0 -30
  263. package/src/utilities/index.js +51 -0
  264. package/src/utilities/redis.js +18 -1
  265. package/src/utilities/rowProcessor/index.js +16 -4
  266. package/dist/automations/logic.js +0 -17
  267. package/dist/automations/steps/sendgridEmail.js +0 -85
  268. package/src/automations/logic.js +0 -20
  269. package/src/automations/steps/sendgridEmail.js +0 -74
  270. package/src/automations/tests/sendEmail.spec.js +0 -36
@@ -622,7 +622,7 @@ exports.removePermission = async function (ctx) {
622
622
  <div class='footer quiet pad2 space-top1 center small'>
623
623
  Code coverage generated by
624
624
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
625
- at Tue Sep 14 2021 10:25:14 GMT+0000 (Coordinated Universal Time)
625
+ at Wed Sep 15 2021 15:55:32 GMT+0000 (Coordinated Universal Time)
626
626
  </div>
627
627
  </div>
628
628
  <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">79.78% </span>
26
+ <span class="strong">79.55% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>71/89</span>
28
+ <span class='fraction'>70/88</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">79.55% </span>
47
+ <span class="strong">79.31% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>70/88</span>
49
+ <span class='fraction'>69/87</span>
50
50
  </div>
51
51
 
52
52
 
@@ -233,9 +233,7 @@
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>
237
- <a name='L178'></a><a href='#L178'>178</a>
238
- <a name='L179'></a><a href='#L179'>179</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
236
+ <a name='L177'></a><a href='#L177'>177</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
239
237
  <span class="cline-any cline-yes">33x</span>
240
238
  <span class="cline-any cline-yes">33x</span>
241
239
  <span class="cline-any cline-yes">33x</span>
@@ -397,8 +395,6 @@
397
395
  <span class="cline-any cline-neutral">&nbsp;</span>
398
396
  <span class="cline-any cline-neutral">&nbsp;</span>
399
397
  <span class="cline-any cline-yes">1x</span>
400
- <span class="cline-any cline-yes">1x</span>
401
- <span class="cline-any cline-neutral">&nbsp;</span>
402
398
  <span class="cline-any cline-neutral">&nbsp;</span>
403
399
  <span class="cline-any cline-yes">1x</span>
404
400
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -575,8 +571,6 @@ exports.execute = async function (ctx) {
575
571
  )
576
572
  &nbsp;
577
573
  const integration = new Integration(datasource.config)
578
- console.log(query)
579
- // ctx.body = {}
580
574
  // call the relevant CRUD method on the integration class
581
575
  ctx.body = formatResponse(await integration[query.queryVerb](enrichedQuery))
582
576
  // cleanup
@@ -598,7 +592,7 @@ exports.destroy = async function (ctx) {
598
592
  <div class='footer quiet pad2 space-top1 center small'>
599
593
  Code coverage generated by
600
594
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
601
- at Tue Sep 14 2021 10:25:14 GMT+0000 (Coordinated Universal Time)
595
+ at Wed Sep 15 2021 15:55:32 GMT+0000 (Coordinated Universal Time)
602
596
  </div>
603
597
  </div>
604
598
  <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 Tue Sep 14 2021 10:25:14 GMT+0000 (Coordinated Universal Time)
361
+ at Wed Sep 15 2021 15:55:32 GMT+0000 (Coordinated Universal Time)
362
362
  </div>
363
363
  </div>
364
364
  <script src="../../prettify.js"></script>
@@ -150,19 +150,19 @@
150
150
  <a name='L91'></a><a href='#L91'>91</a>
151
151
  <a name='L92'></a><a href='#L92'>92</a>
152
152
  <a name='L93'></a><a href='#L93'>93</a>
153
- <a name='L94'></a><a href='#L94'>94</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">22x</span>
153
+ <a name='L94'></a><a href='#L94'>94</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
154
154
  <span class="cline-any cline-neutral">&nbsp;</span>
155
155
  <span class="cline-any cline-neutral">&nbsp;</span>
156
156
  <span class="cline-any cline-neutral">&nbsp;</span>
157
- <span class="cline-any cline-yes">22x</span>
157
+ <span class="cline-any cline-yes">23x</span>
158
158
  <span class="cline-any cline-neutral">&nbsp;</span>
159
- <span class="cline-any cline-yes">22x</span>
159
+ <span class="cline-any cline-yes">23x</span>
160
160
  <span class="cline-any cline-neutral">&nbsp;</span>
161
161
  <span class="cline-any cline-neutral">&nbsp;</span>
162
162
  <span class="cline-any cline-yes">3x</span>
163
163
  <span class="cline-any cline-neutral">&nbsp;</span>
164
164
  <span class="cline-any cline-neutral">&nbsp;</span>
165
- <span class="cline-any cline-yes">22x</span>
165
+ <span class="cline-any cline-yes">23x</span>
166
166
  <span class="cline-any cline-yes">9x</span>
167
167
  <span class="cline-any cline-no">&nbsp;</span>
168
168
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -170,7 +170,7 @@
170
170
  <span class="cline-any cline-yes">9x</span>
171
171
  <span class="cline-any cline-neutral">&nbsp;</span>
172
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
- <span class="cline-any cline-yes">22x</span>
173
+ <span class="cline-any cline-yes">23x</span>
174
174
  <span class="cline-any cline-yes">9x</span>
175
175
  <span class="cline-any cline-yes">9x</span>
176
176
  <span class="cline-any cline-yes">6x</span>
@@ -185,7 +185,7 @@
185
185
  <span class="cline-any cline-yes">9x</span>
186
186
  <span class="cline-any cline-neutral">&nbsp;</span>
187
187
  <span class="cline-any cline-neutral">&nbsp;</span>
188
- <span class="cline-any cline-yes">22x</span>
188
+ <span class="cline-any cline-yes">23x</span>
189
189
  <span class="cline-any cline-yes">9x</span>
190
190
  <span class="cline-any cline-neutral">&nbsp;</span>
191
191
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -208,11 +208,11 @@
208
208
  <span class="cline-any cline-yes">3x</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">22x</span>
211
+ <span class="cline-any cline-yes">23x</span>
212
212
  <span class="cline-any cline-yes">1x</span>
213
213
  <span class="cline-any cline-neutral">&nbsp;</span>
214
214
  <span class="cline-any cline-neutral">&nbsp;</span>
215
- <span class="cline-any cline-yes">22x</span>
215
+ <span class="cline-any cline-yes">23x</span>
216
216
  <span class="cline-any cline-yes">2x</span>
217
217
  <span class="cline-any cline-yes">2x</span>
218
218
  <span class="cline-any cline-yes">2x</span>
@@ -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 Tue Sep 14 2021 10:25:14 GMT+0000 (Coordinated Universal Time)
346
+ at Wed Sep 15 2021 15:55:32 GMT+0000 (Coordinated Universal Time)
347
347
  </div>
348
348
  </div>
349
349
  <script src="../../prettify.js"></script>
@@ -706,7 +706,7 @@ exports.fetchEnrichedRow = <span class="fstat-no" title="function not covered" >
706
706
  <div class='footer quiet pad2 space-top1 center small'>
707
707
  Code coverage generated by
708
708
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
709
- at Tue Sep 14 2021 10:25:14 GMT+0000 (Coordinated Universal Time)
709
+ at Wed Sep 15 2021 15:55:32 GMT+0000 (Coordinated Universal Time)
710
710
  </div>
711
711
  </div>
712
712
  <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">49.36% </span>
26
+ <span class="strong">49.72% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>268/543</span>
28
+ <span class='fraction'>271/545</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">32.26% </span>
33
+ <span class="strong">32.09% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>70/217</span>
35
+ <span class='fraction'>69/215</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">38.82% </span>
40
+ <span class="strong">39.53% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>33/85</span>
42
+ <span class='fraction'>34/86</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">49.34% </span>
47
+ <span class="strong">49.72% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>262/531</span>
49
+ <span class='fraction'>265/533</span>
50
50
  </div>
51
51
 
52
52
 
@@ -103,18 +103,18 @@
103
103
  </tr>
104
104
 
105
105
  <tr>
106
- <td class="file medium" data-value="internal.js"><a href="internal.js.html">internal.js</a></td>
107
- <td data-value="79.65" class="pic medium">
108
- <div class="chart"><div class="cover-fill" style="width: 79%"></div><div class="cover-empty" style="width: 21%"></div></div>
106
+ <td class="file high" data-value="internal.js"><a href="internal.js.html">internal.js</a></td>
107
+ <td data-value="80.46" class="pic high">
108
+ <div class="chart"><div class="cover-fill" style="width: 80%"></div><div class="cover-empty" style="width: 20%"></div></div>
109
109
  </td>
110
- <td data-value="79.65" class="pct medium">79.65%</td>
111
- <td data-value="172" class="abs medium">137/172</td>
112
- <td data-value="58.33" class="pct medium">58.33%</td>
113
- <td data-value="48" class="abs medium">28/48</td>
114
- <td data-value="86.36" class="pct high">86.36%</td>
115
- <td data-value="22" class="abs high">19/22</td>
116
- <td data-value="79.52" class="pct medium">79.52%</td>
117
- <td data-value="166" class="abs medium">132/166</td>
110
+ <td data-value="80.46" class="pct high">80.46%</td>
111
+ <td data-value="174" class="abs high">140/174</td>
112
+ <td data-value="58.7" class="pct medium">58.7%</td>
113
+ <td data-value="46" class="abs medium">27/46</td>
114
+ <td data-value="86.96" class="pct high">86.96%</td>
115
+ <td data-value="23" class="abs high">20/23</td>
116
+ <td data-value="80.36" class="pct high">80.36%</td>
117
+ <td data-value="168" class="abs high">135/168</td>
118
118
  </tr>
119
119
 
120
120
  <tr>
@@ -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 Tue Sep 14 2021 10:25:14 GMT+0000 (Coordinated Universal Time)
158
+ at Wed Sep 15 2021 15:55:32 GMT+0000 (Coordinated Universal Time)
159
159
  </div>
160
160
  </div>
161
161
  <script src="../../../prettify.js"></script>
@@ -200,15 +200,15 @@
200
200
  <span class="cline-any cline-yes">33x</span>
201
201
  <span class="cline-any cline-neutral">&nbsp;</span>
202
202
  <span class="cline-any cline-neutral">&nbsp;</span>
203
- <span class="cline-any cline-yes">109x</span>
203
+ <span class="cline-any cline-yes">107x</span>
204
204
  <span class="cline-any cline-no">&nbsp;</span>
205
205
  <span class="cline-any cline-neutral">&nbsp;</span>
206
- <span class="cline-any cline-yes">109x</span>
206
+ <span class="cline-any cline-yes">107x</span>
207
207
  <span class="cline-any cline-neutral">&nbsp;</span>
208
208
  <span class="cline-any cline-neutral">&nbsp;</span>
209
209
  <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-yes">110x</span>
211
- <span class="cline-any cline-yes">72x</span>
210
+ <span class="cline-any cline-yes">108x</span>
211
+ <span class="cline-any cline-yes">70x</span>
212
212
  <span class="cline-any cline-neutral">&nbsp;</span>
213
213
  <span class="cline-any cline-yes">38x</span>
214
214
  <span class="cline-any cline-yes">31x</span>
@@ -239,19 +239,19 @@
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-yes">33x</span>
242
- <span class="cline-any cline-yes">69x</span>
243
- <span class="cline-any cline-yes">69x</span>
244
- <span class="cline-any cline-yes">69x</span>
245
- <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-yes">69x</span>
247
- <span class="cline-any cline-yes">1x</span>
248
- <span class="cline-any cline-neutral">&nbsp;</span>
249
- <span class="cline-any cline-yes">68x</span>
250
- <span class="cline-any cline-yes">68x</span>
251
242
  <span class="cline-any cline-yes">67x</span>
252
243
  <span class="cline-any cline-yes">67x</span>
253
244
  <span class="cline-any cline-yes">67x</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
246
  <span class="cline-any cline-yes">67x</span>
247
+ <span class="cline-any cline-yes">1x</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-yes">66x</span>
250
+ <span class="cline-any cline-yes">66x</span>
251
+ <span class="cline-any cline-yes">65x</span>
252
+ <span class="cline-any cline-yes">65x</span>
253
+ <span class="cline-any cline-yes">65x</span>
254
+ <span class="cline-any cline-yes">65x</span>
255
255
  <span class="cline-any cline-neutral">&nbsp;</span>
256
256
  <span class="cline-any cline-yes">1x</span>
257
257
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -478,7 +478,7 @@ exports.fetchEnrichedRow = async function (ctx) {
478
478
  <div class='footer quiet pad2 space-top1 center small'>
479
479
  Code coverage generated by
480
480
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
481
- at Tue Sep 14 2021 10:25:14 GMT+0000 (Coordinated Universal Time)
481
+ at Wed Sep 15 2021 15:55:32 GMT+0000 (Coordinated Universal Time)
482
482
  </div>
483
483
  </div>
484
484
  <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.65% </span>
26
+ <span class="strong">80.46% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>137/172</span>
28
+ <span class='fraction'>140/174</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">58.33% </span>
33
+ <span class="strong">58.7% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>28/48</span>
35
+ <span class='fraction'>27/46</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">86.36% </span>
40
+ <span class="strong">86.96% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>19/22</span>
42
+ <span class='fraction'>20/23</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">79.52% </span>
47
+ <span class="strong">80.36% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>132/166</span>
49
+ <span class='fraction'>135/168</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>
@@ -412,7 +412,18 @@
412
412
  <a name='L353'></a><a href='#L353'>353</a>
413
413
  <a name='L354'></a><a href='#L354'>354</a>
414
414
  <a name='L355'></a><a href='#L355'>355</a>
415
- <a name='L356'></a><a href='#L356'>356</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
415
+ <a name='L356'></a><a href='#L356'>356</a>
416
+ <a name='L357'></a><a href='#L357'>357</a>
417
+ <a name='L358'></a><a href='#L358'>358</a>
418
+ <a name='L359'></a><a href='#L359'>359</a>
419
+ <a name='L360'></a><a href='#L360'>360</a>
420
+ <a name='L361'></a><a href='#L361'>361</a>
421
+ <a name='L362'></a><a href='#L362'>362</a>
422
+ <a name='L363'></a><a href='#L363'>363</a>
423
+ <a name='L364'></a><a href='#L364'>364</a>
424
+ <a name='L365'></a><a href='#L365'>365</a>
425
+ <a name='L366'></a><a href='#L366'>366</a>
426
+ <a name='L367'></a><a href='#L367'>367</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
416
427
  <span class="cline-any cline-yes">33x</span>
417
428
  <span class="cline-any cline-neutral">&nbsp;</span>
418
429
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -437,6 +448,19 @@
437
448
  <span class="cline-any cline-neutral">&nbsp;</span>
438
449
  <span class="cline-any cline-neutral">&nbsp;</span>
439
450
  <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-yes">68x</span>
453
+ <span class="cline-any cline-yes">68x</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-yes">68x</span>
456
+ <span class="cline-any cline-no">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-yes">68x</span>
459
+ <span class="cline-any cline-neutral">&nbsp;</span>
460
+ <span class="cline-any cline-yes">68x</span>
461
+ <span class="cline-any cline-yes">68x</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
464
  <span class="cline-any cline-yes">33x</span>
441
465
  <span class="cline-any cline-yes">4x</span>
442
466
  <span class="cline-any cline-yes">4x</span>
@@ -493,53 +517,39 @@
493
517
  <span class="cline-any cline-neutral">&nbsp;</span>
494
518
  <span class="cline-any cline-yes">3x</span>
495
519
  <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-yes">3x</span>
497
- <span class="cline-any cline-no">&nbsp;</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-yes">3x</span>
500
- <span class="cline-any cline-yes">3x</span>
501
- <span class="cline-any cline-yes">3x</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span>
503
520
  <span class="cline-any cline-neutral">&nbsp;</span>
504
521
  <span class="cline-any cline-yes">33x</span>
505
- <span class="cline-any cline-yes">68x</span>
506
- <span class="cline-any cline-yes">68x</span>
507
- <span class="cline-any cline-yes">68x</span>
508
- <span class="cline-any cline-yes">68x</span>
522
+ <span class="cline-any cline-yes">66x</span>
523
+ <span class="cline-any cline-yes">66x</span>
524
+ <span class="cline-any cline-yes">66x</span>
525
+ <span class="cline-any cline-yes">66x</span>
509
526
  <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-yes">68x</span>
511
- <span class="cline-any cline-yes">68x</span>
527
+ <span class="cline-any cline-yes">66x</span>
528
+ <span class="cline-any cline-yes">66x</span>
512
529
  <span class="cline-any cline-neutral">&nbsp;</span>
513
530
  <span class="cline-any cline-neutral">&nbsp;</span>
514
531
  <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-yes">68x</span>
516
- <span class="cline-any cline-yes">68x</span>
517
- <span class="cline-any cline-yes">68x</span>
532
+ <span class="cline-any cline-yes">66x</span>
533
+ <span class="cline-any cline-yes">66x</span>
534
+ <span class="cline-any cline-yes">66x</span>
518
535
  <span class="cline-any cline-neutral">&nbsp;</span>
519
536
  <span class="cline-any cline-neutral">&nbsp;</span>
520
537
  <span class="cline-any cline-neutral">&nbsp;</span>
521
538
  <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-yes">68x</span>
539
+ <span class="cline-any cline-yes">66x</span>
523
540
  <span class="cline-any cline-no">&nbsp;</span>
524
541
  <span class="cline-any cline-neutral">&nbsp;</span>
525
542
  <span class="cline-any cline-neutral">&nbsp;</span>
526
543
  <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-yes">68x</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-yes">66x</span>
529
545
  <span class="cline-any cline-neutral">&nbsp;</span>
530
546
  <span class="cline-any cline-neutral">&nbsp;</span>
531
547
  <span class="cline-any cline-neutral">&nbsp;</span>
532
548
  <span class="cline-any cline-neutral">&nbsp;</span>
533
549
  <span class="cline-any cline-neutral">&nbsp;</span>
534
550
  <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-yes">67x</span>
536
- <span class="cline-any cline-yes">67x</span>
537
551
  <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-yes">67x</span>
539
- <span class="cline-any cline-no">&nbsp;</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-yes">67x</span>
542
- <span class="cline-any cline-yes">67x</span>
552
+ <span class="cline-any cline-yes">65x</span>
543
553
  <span class="cline-any cline-neutral">&nbsp;</span>
544
554
  <span class="cline-any cline-neutral">&nbsp;</span>
545
555
  <span class="cline-any cline-yes">33x</span>
@@ -642,6 +652,12 @@
642
652
  <span class="cline-any cline-neutral">&nbsp;</span>
643
653
  <span class="cline-any cline-yes">2x</span>
644
654
  <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-yes">2x</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-yes">2x</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
645
661
  <span class="cline-any cline-neutral">&nbsp;</span>
646
662
  <span class="cline-any cline-neutral">&nbsp;</span>
647
663
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -654,19 +670,25 @@
654
670
  <span class="cline-any cline-no">&nbsp;</span>
655
671
  <span class="cline-any cline-neutral">&nbsp;</span>
656
672
  <span class="cline-any cline-yes">2x</span>
657
- <span class="cline-any cline-yes">2x</span>
658
673
  <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-yes">2x</span>
659
675
  <span class="cline-any cline-neutral">&nbsp;</span>
660
676
  <span class="cline-any cline-neutral">&nbsp;</span>
661
677
  <span class="cline-any cline-yes">33x</span>
662
678
  <span class="cline-any cline-yes">2x</span>
663
679
  <span class="cline-any cline-yes">2x</span>
664
680
  <span class="cline-any cline-yes">2x</span>
681
+ <span class="cline-any cline-yes">2x</span>
682
+ <span class="cline-any cline-yes">2x</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
685
  <span class="cline-any cline-neutral">&nbsp;</span>
666
686
  <span class="cline-any cline-yes">2x</span>
667
- <span class="cline-any cline-yes">3x</span>
668
687
  <span class="cline-any cline-neutral">&nbsp;</span>
669
688
  <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-yes">2x</span>
690
+ <span class="cline-any cline-yes">3x</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
692
  <span class="cline-any cline-neutral">&nbsp;</span>
671
693
  <span class="cline-any cline-neutral">&nbsp;</span>
672
694
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -792,6 +814,19 @@ const CALCULATION_TYPES = {
792
814
  STATS: "stats",
793
815
  }
794
816
  &nbsp;
817
+ async function storeResponse(ctx, db, row, oldTable, table) {
818
+ row.type = "row"
819
+ const response = await db.put(row)
820
+ // don't worry about rev, tables handle rev/lastID updates
821
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!isEqual(oldTable, table)) {
822
+ <span class="cstat-no" title="statement not covered" > await db.put(table)</span>
823
+ }
824
+ row._rev = response.rev
825
+ // process the row before return, to include relationships
826
+ row = await outputProcessing(ctx, table, row, { squash: false })
827
+ return { row, table }
828
+ }
829
+ &nbsp;
795
830
  exports.patch = async ctx =&gt; {
796
831
  const appId = ctx.appId
797
832
  const db = new CouchDB(appId)
@@ -846,14 +881,7 @@ exports.patch = async ctx =&gt; {
846
881
  <span class="cstat-no" title="statement not covered" > return { row: ctx.body, table }</span>
847
882
  }
848
883
  &nbsp;
849
- const response = await db.put(row)
850
- // don't worry about rev, tables handle rev/lastID updates
851
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!isEqual(dbTable, table)) {
852
- <span class="cstat-no" title="statement not covered" > await db.put(table)</span>
853
- }
854
- row._rev = response.rev
855
- row.type = "row"
856
- return { row, table }
884
+ return storeResponse(ctx, db, row, dbTable, table)
857
885
  }
858
886
  &nbsp;
859
887
  exports.save = async function (ctx) {
@@ -887,14 +915,7 @@ exports.save = async function (ctx) {
887
915
  table,
888
916
  })
889
917
  &nbsp;
890
- row.type = "row"
891
- const response = await db.put(row)
892
- // don't worry about rev, tables handle rev/lastID updates
893
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!isEqual(dbTable, table)) {
894
- <span class="cstat-no" title="statement not covered" > await db.put(table)</span>
895
- }
896
- row._rev = response.rev
897
- return { row, table }
918
+ return storeResponse(ctx, db, row, dbTable, table)
898
919
  }
899
920
  &nbsp;
900
921
  exports.fetchView = async ctx =&gt; {
@@ -990,34 +1011,47 @@ exports.destroy = async function (ctx) {
990
1011
  const appId = ctx.appId
991
1012
  const db = new CouchDB(appId)
992
1013
  const { _id, _rev } = ctx.request.body
993
- const row = await db.get(_id)
1014
+ let row = await db.get(_id)
994
1015
  &nbsp;
995
1016
  <span class="missing-if-branch" title="if path not taken" >I</span>if (row.tableId !== ctx.params.tableId) {
996
1017
  <span class="cstat-no" title="statement not covered" > throw "Supplied tableId doesn't match the row's tableId"</span>
997
1018
  }
1019
+ const table = await db.get(row.tableId)
1020
+ // update the row to include full relationships before deleting them
1021
+ row = await outputProcessing(ctx, table, row, { squash: false })
1022
+ // now remove the relationships
998
1023
  await linkRows.updateLinks({
999
1024
  appId,
1000
1025
  eventType: linkRows.EventType.ROW_DELETE,
1001
1026
  row,
1002
1027
  tableId: row.tableId,
1003
1028
  })
1029
+ &nbsp;
1030
+ let response
1004
1031
  <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.params.tableId === InternalTables.USER_METADATA) {
1005
1032
  <span class="cstat-no" title="statement not covered" > ctx.params = {</span>
1006
1033
  id: _id,
1007
1034
  }
1008
1035
  <span class="cstat-no" title="statement not covered" > await userController.destroyMetadata(ctx)</span>
1009
- <span class="cstat-no" title="statement not covered" > return { response: ctx.body, row }</span>
1036
+ <span class="cstat-no" title="statement not covered" > response = ctx.body</span>
1010
1037
  } else {
1011
- const response = await db.remove(_id, _rev)
1012
- return { response, row }
1038
+ response = await db.remove(_id, _rev)
1013
1039
  }
1040
+ return { response, row }
1014
1041
  }
1015
1042
  &nbsp;
1016
1043
  exports.bulkDestroy = async ctx =&gt; {
1017
1044
  const appId = ctx.appId
1018
- const { rows } = ctx.request.body
1019
1045
  const db = new CouchDB(appId)
1046
+ const tableId = ctx.params.tableId
1047
+ const table = await db.get(tableId)
1048
+ let { rows } = ctx.request.body
1020
1049
  &nbsp;
1050
+ // before carrying out any updates, make sure the rows are ready to be returned
1051
+ // they need to be the full rows (including previous relationships) for automations
1052
+ rows = await outputProcessing(ctx, table, rows, { squash: false })
1053
+ &nbsp;
1054
+ // remove the relationships first
1021
1055
  let updates = rows.map(row =&gt;
1022
1056
  linkRows.updateLinks({
1023
1057
  appId,
@@ -1026,8 +1060,7 @@ exports.bulkDestroy = async ctx =&gt; {
1026
1060
  tableId: row.tableId,
1027
1061
  })
1028
1062
  )
1029
- // TODO remove special user case in future
1030
- <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.params.tableId === InternalTables.USER_METADATA) {
1063
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (tableId === InternalTables.USER_METADATA) {
1031
1064
  <span class="cstat-no" title="statement not covered" > updates = updates.concat(</span>
1032
1065
  rows.map(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; {
1033
1066
  <span class="cstat-no" title="statement not covered" > ctx.params = {</span>
@@ -1129,7 +1162,7 @@ exports.fetchEnrichedRow = async ctx =&gt; {
1129
1162
  <div class='footer quiet pad2 space-top1 center small'>
1130
1163
  Code coverage generated by
1131
1164
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1132
- at Tue Sep 14 2021 10:25:14 GMT+0000 (Coordinated Universal Time)
1165
+ at Wed Sep 15 2021 15:55:32 GMT+0000 (Coordinated Universal Time)
1133
1166
  </div>
1134
1167
  </div>
1135
1168
  <script src="../../../prettify.js"></script>