@budibase/server 0.9.140-alpha.4 → 0.9.140-alpha.5

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 (200) hide show
  1. package/builder/assets/{index.2bcd18f5.js → index.80d850d1.js} +1 -1
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +646 -528
  4. package/coverage/coverage-final.json +17 -15
  5. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +3 -3
  13. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/index.html +1 -1
  16. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/index.html +19 -19
  25. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +242 -47
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/index.js.html +2 -2
  33. package/coverage/lcov-report/api/controllers/table/utils.js.html +31 -19
  34. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/index.html +32 -17
  38. package/coverage/lcov-report/api/controllers/view/index.js.html +84 -186
  39. package/coverage/lcov-report/api/controllers/view/utils.js.html +407 -0
  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 +1 -1
  44. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  45. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/index.html +1 -1
  56. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  73. package/coverage/lcov-report/automations/actions.js.html +1 -1
  74. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  75. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  76. package/coverage/lcov-report/automations/index.html +1 -1
  77. package/coverage/lcov-report/automations/index.js.html +1 -1
  78. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/createRow.js.html +10 -19
  80. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/deleteRow.js.html +14 -20
  82. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/index.html +31 -31
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/queryRows.js.html +18 -27
  90. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/updateRow.js.html +12 -21
  94. package/coverage/lcov-report/automations/steps/utils.js.html +23 -23
  95. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  96. package/coverage/lcov-report/automations/thread.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  106. package/coverage/lcov-report/automations/utils.js.html +1 -1
  107. package/coverage/lcov-report/constants/index.html +1 -1
  108. package/coverage/lcov-report/constants/index.js.html +1 -1
  109. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  110. package/coverage/lcov-report/constants/screens.js.html +1 -1
  111. package/coverage/lcov-report/db/client.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +224 -0
  113. package/coverage/lcov-report/db/index.html +34 -19
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +4 -4
  116. package/coverage/lcov-report/db/linkedRows/index.html +14 -14
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +18 -9
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  119. package/coverage/lcov-report/db/newid.js.html +1 -1
  120. package/coverage/lcov-report/db/utils.js.html +37 -10
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +65 -65
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  130. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  131. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  132. package/coverage/lcov-report/middleware/index.html +1 -1
  133. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  137. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  138. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  139. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  140. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  141. package/coverage/lcov-report/utilities/global.js.html +1 -1
  142. package/coverage/lcov-report/utilities/index.html +1 -1
  143. package/coverage/lcov-report/utilities/index.js.html +1 -1
  144. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.html +15 -15
  149. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +58 -13
  150. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  151. package/coverage/lcov-report/utilities/security.js.html +2 -2
  152. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  153. package/coverage/lcov-report/utilities/users.js.html +1 -1
  154. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  155. package/coverage/lcov.info +1093 -883
  156. package/dist/api/controllers/datasource.js +2 -2
  157. package/dist/api/controllers/row/ExternalRequest.js +4 -0
  158. package/dist/api/controllers/row/internal.js +97 -23
  159. package/dist/api/controllers/table/index.js +1 -1
  160. package/dist/api/controllers/table/utils.js +13 -11
  161. package/dist/api/controllers/view/index.js +74 -96
  162. package/dist/api/controllers/view/utils.js +102 -0
  163. package/dist/automations/steps/createRow.js +5 -8
  164. package/dist/automations/steps/deleteRow.js +7 -10
  165. package/dist/automations/steps/queryRows.js +11 -14
  166. package/dist/automations/steps/updateRow.js +4 -7
  167. package/dist/db/inMemoryView.js +51 -0
  168. package/dist/db/linkedRows/index.js +5 -2
  169. package/dist/db/utils.js +7 -0
  170. package/dist/environment.js +7 -1
  171. package/dist/integrations/mysql.js +2 -13
  172. package/dist/integrations/postgres.js +8 -14
  173. package/dist/integrations/utils.js +19 -1
  174. package/dist/package.json +5 -5
  175. package/dist/tsconfig.tsbuildinfo +1 -1
  176. package/dist/utilities/rowProcessor/index.js +10 -5
  177. package/package.json +6 -6
  178. package/scripts/integrations/service-vehicles/docker-compose.yml +28 -0
  179. package/scripts/integrations/service-vehicles/init.sql +52 -0
  180. package/scripts/integrations/service-vehicles/reset.sh +3 -0
  181. package/src/api/controllers/datasource.js +2 -2
  182. package/src/api/controllers/row/ExternalRequest.ts +5 -1
  183. package/src/api/controllers/row/internal.js +88 -23
  184. package/src/api/controllers/table/index.js +1 -1
  185. package/src/api/controllers/table/utils.js +16 -12
  186. package/src/api/controllers/view/index.js +82 -116
  187. package/src/api/controllers/view/utils.js +109 -0
  188. package/src/api/routes/tests/view.spec.js +1 -1
  189. package/src/automations/steps/createRow.js +5 -8
  190. package/src/automations/steps/deleteRow.js +8 -10
  191. package/src/automations/steps/queryRows.js +11 -14
  192. package/src/automations/steps/updateRow.js +7 -10
  193. package/src/db/inMemoryView.js +48 -0
  194. package/src/db/linkedRows/index.js +5 -2
  195. package/src/db/utils.js +9 -0
  196. package/src/environment.js +8 -1
  197. package/src/integrations/mysql.ts +2 -13
  198. package/src/integrations/postgres.ts +9 -16
  199. package/src/integrations/utils.ts +18 -0
  200. package/src/utilities/rowProcessor/index.js +20 -5
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">87.93% </span>
26
+ <span class="strong">80.68% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>153/174</span>
28
+ <span class='fraction'>167/207</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">69.57% </span>
33
+ <span class="strong">60.34% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>32/46</span>
35
+ <span class='fraction'>35/58</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">91.3% </span>
40
+ <span class="strong">92.31% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>21/23</span>
42
+ <span class='fraction'>24/26</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">88.1% </span>
47
+ <span class="strong">80.6% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>148/168</span>
49
+ <span class='fraction'>162/201</span>
50
50
  </div>
51
51
 
52
52
 
@@ -423,18 +423,88 @@
423
423
  <a name='L364'></a><a href='#L364'>364</a>
424
424
  <a name='L365'></a><a href='#L365'>365</a>
425
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">34x</span>
426
+ <a name='L367'></a><a href='#L367'>367</a>
427
+ <a name='L368'></a><a href='#L368'>368</a>
428
+ <a name='L369'></a><a href='#L369'>369</a>
429
+ <a name='L370'></a><a href='#L370'>370</a>
430
+ <a name='L371'></a><a href='#L371'>371</a>
431
+ <a name='L372'></a><a href='#L372'>372</a>
432
+ <a name='L373'></a><a href='#L373'>373</a>
433
+ <a name='L374'></a><a href='#L374'>374</a>
434
+ <a name='L375'></a><a href='#L375'>375</a>
435
+ <a name='L376'></a><a href='#L376'>376</a>
436
+ <a name='L377'></a><a href='#L377'>377</a>
437
+ <a name='L378'></a><a href='#L378'>378</a>
438
+ <a name='L379'></a><a href='#L379'>379</a>
439
+ <a name='L380'></a><a href='#L380'>380</a>
440
+ <a name='L381'></a><a href='#L381'>381</a>
441
+ <a name='L382'></a><a href='#L382'>382</a>
442
+ <a name='L383'></a><a href='#L383'>383</a>
443
+ <a name='L384'></a><a href='#L384'>384</a>
444
+ <a name='L385'></a><a href='#L385'>385</a>
445
+ <a name='L386'></a><a href='#L386'>386</a>
446
+ <a name='L387'></a><a href='#L387'>387</a>
447
+ <a name='L388'></a><a href='#L388'>388</a>
448
+ <a name='L389'></a><a href='#L389'>389</a>
449
+ <a name='L390'></a><a href='#L390'>390</a>
450
+ <a name='L391'></a><a href='#L391'>391</a>
451
+ <a name='L392'></a><a href='#L392'>392</a>
452
+ <a name='L393'></a><a href='#L393'>393</a>
453
+ <a name='L394'></a><a href='#L394'>394</a>
454
+ <a name='L395'></a><a href='#L395'>395</a>
455
+ <a name='L396'></a><a href='#L396'>396</a>
456
+ <a name='L397'></a><a href='#L397'>397</a>
457
+ <a name='L398'></a><a href='#L398'>398</a>
458
+ <a name='L399'></a><a href='#L399'>399</a>
459
+ <a name='L400'></a><a href='#L400'>400</a>
460
+ <a name='L401'></a><a href='#L401'>401</a>
461
+ <a name='L402'></a><a href='#L402'>402</a>
462
+ <a name='L403'></a><a href='#L403'>403</a>
463
+ <a name='L404'></a><a href='#L404'>404</a>
464
+ <a name='L405'></a><a href='#L405'>405</a>
465
+ <a name='L406'></a><a href='#L406'>406</a>
466
+ <a name='L407'></a><a href='#L407'>407</a>
467
+ <a name='L408'></a><a href='#L408'>408</a>
468
+ <a name='L409'></a><a href='#L409'>409</a>
469
+ <a name='L410'></a><a href='#L410'>410</a>
470
+ <a name='L411'></a><a href='#L411'>411</a>
471
+ <a name='L412'></a><a href='#L412'>412</a>
472
+ <a name='L413'></a><a href='#L413'>413</a>
473
+ <a name='L414'></a><a href='#L414'>414</a>
474
+ <a name='L415'></a><a href='#L415'>415</a>
475
+ <a name='L416'></a><a href='#L416'>416</a>
476
+ <a name='L417'></a><a href='#L417'>417</a>
477
+ <a name='L418'></a><a href='#L418'>418</a>
478
+ <a name='L419'></a><a href='#L419'>419</a>
479
+ <a name='L420'></a><a href='#L420'>420</a>
480
+ <a name='L421'></a><a href='#L421'>421</a>
481
+ <a name='L422'></a><a href='#L422'>422</a>
482
+ <a name='L423'></a><a href='#L423'>423</a>
483
+ <a name='L424'></a><a href='#L424'>424</a>
484
+ <a name='L425'></a><a href='#L425'>425</a>
485
+ <a name='L426'></a><a href='#L426'>426</a>
486
+ <a name='L427'></a><a href='#L427'>427</a>
487
+ <a name='L428'></a><a href='#L428'>428</a>
488
+ <a name='L429'></a><a href='#L429'>429</a>
489
+ <a name='L430'></a><a href='#L430'>430</a>
490
+ <a name='L431'></a><a href='#L431'>431</a>
491
+ <a name='L432'></a><a href='#L432'>432</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
427
492
  <span class="cline-any cline-yes">34x</span>
428
493
  <span class="cline-any cline-neutral">&nbsp;</span>
429
494
  <span class="cline-any cline-neutral">&nbsp;</span>
430
495
  <span class="cline-any cline-neutral">&nbsp;</span>
431
496
  <span class="cline-any cline-neutral">&nbsp;</span>
432
497
  <span class="cline-any cline-neutral">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
499
  <span class="cline-any cline-yes">34x</span>
434
500
  <span class="cline-any cline-yes">34x</span>
435
501
  <span class="cline-any cline-neutral">&nbsp;</span>
436
502
  <span class="cline-any cline-neutral">&nbsp;</span>
437
503
  <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-yes">34x</span>
506
+ <span class="cline-any cline-yes">34x</span>
507
+ <span class="cline-any cline-yes">34x</span>
438
508
  <span class="cline-any cline-yes">34x</span>
439
509
  <span class="cline-any cline-yes">34x</span>
440
510
  <span class="cline-any cline-yes">34x</span>
@@ -450,17 +520,84 @@
450
520
  <span class="cline-any cline-neutral">&nbsp;</span>
451
521
  <span class="cline-any cline-neutral">&nbsp;</span>
452
522
  <span class="cline-any cline-yes">70x</span>
453
- <span class="cline-any cline-yes">70x</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
525
  <span class="cline-any cline-neutral">&nbsp;</span>
455
526
  <span class="cline-any cline-yes">70x</span>
456
527
  <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-no">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-no">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
541
  <span class="cline-any cline-neutral">&nbsp;</span>
458
542
  <span class="cline-any cline-yes">70x</span>
543
+ <span class="cline-any cline-yes">70x</span>
459
544
  <span class="cline-any cline-neutral">&nbsp;</span>
460
545
  <span class="cline-any cline-yes">70x</span>
461
546
  <span class="cline-any cline-yes">70x</span>
462
547
  <span class="cline-any cline-neutral">&nbsp;</span>
463
548
  <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-neutral">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-yes">5x</span>
553
+ <span class="cline-any cline-no">&nbsp;</span>
554
+ <span class="cline-any cline-no">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-yes">5x</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-yes">10x</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-yes">5x</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-yes">6x</span>
570
+ <span class="cline-any cline-yes">6x</span>
571
+ <span class="cline-any cline-yes">6x</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-yes">6x</span>
574
+ <span class="cline-any cline-yes">6x</span>
575
+ <span class="cline-any cline-yes">6x</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-no">&nbsp;</span>
578
+ <span class="cline-any cline-no">&nbsp;</span>
579
+ <span class="cline-any cline-no">&nbsp;</span>
580
+ <span class="cline-any cline-no">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-no">&nbsp;</span>
588
+ <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-yes">6x</span>
593
+ <span class="cline-any cline-no">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-yes">6x</span>
596
+ <span class="cline-any cline-yes">1x</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-yes">5x</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
464
601
  <span class="cline-any cline-yes">34x</span>
465
602
  <span class="cline-any cline-yes">5x</span>
466
603
  <span class="cline-any cline-yes">5x</span>
@@ -565,13 +702,16 @@
565
702
  <span class="cline-any cline-yes">6x</span>
566
703
  <span class="cline-any cline-yes">6x</span>
567
704
  <span class="cline-any cline-yes">6x</span>
568
- <span class="cline-any cline-yes">6x</span>
569
- <span class="cline-any cline-yes">6x</span>
570
- <span class="cline-any cline-yes">1x</span>
571
705
  <span class="cline-any cline-neutral">&nbsp;</span>
572
706
  <span class="cline-any cline-yes">5x</span>
707
+ <span class="cline-any cline-yes">5x</span>
708
+ <span class="cline-any cline-neutral">&nbsp;</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
710
  <span class="cline-any cline-neutral">&nbsp;</span>
574
711
  <span class="cline-any cline-neutral">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
575
715
  <span class="cline-any cline-neutral">&nbsp;</span>
576
716
  <span class="cline-any cline-neutral">&nbsp;</span>
577
717
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -616,19 +756,9 @@
616
756
  <span class="cline-any cline-yes">5x</span>
617
757
  <span class="cline-any cline-yes">5x</span>
618
758
  <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
759
  <span class="cline-any cline-yes">5x</span>
621
760
  <span class="cline-any cline-yes">5x</span>
622
- <span class="cline-any cline-no">&nbsp;</span>
623
- <span class="cline-any cline-no">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
761
  <span class="cline-any cline-yes">5x</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-yes">10x</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
762
  <span class="cline-any cline-yes">5x</span>
633
763
  <span class="cline-any cline-neutral">&nbsp;</span>
634
764
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -796,17 +926,22 @@ const {
796
926
  generateRowID,
797
927
  DocumentTypes,
798
928
  InternalTables,
929
+ generateMemoryViewID,
799
930
  } = require("../../../db/utils")
800
931
  const userController = require("../user")
801
932
  const {
802
933
  inputProcessing,
803
934
  outputProcessing,
935
+ processAutoColumn,
804
936
  } = require("../../../utilities/rowProcessor")
805
937
  const { FieldTypes } = require("../../../constants")
806
938
  const { isEqual } = require("lodash")
807
939
  const { validate, findRow } = require("./utils")
808
940
  const { fullSearch, paginatedSearch } = require("./internalSearch")
809
941
  const { getGlobalUsersFromMetadata } = require("../../../utilities/global")
942
+ const inMemoryViews = require("../../../db/inMemoryView")
943
+ const env = require("../../../environment")
944
+ const { migrateToInMemoryView } = require("../view/utils")
810
945
  &nbsp;
811
946
  const CALCULATION_TYPES = {
812
947
  SUM: "sum",
@@ -816,17 +951,84 @@ const CALCULATION_TYPES = {
816
951
  &nbsp;
817
952
  async function storeResponse(ctx, db, row, oldTable, table) {
818
953
  row.type = "row"
819
- const response = await db.put(row)
820
954
  // don't worry about rev, tables handle rev/lastID updates
955
+ // if another row has been written since processing this will
956
+ // handle the auto ID clash
821
957
  <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>
958
+ <span class="cstat-no" title="statement not covered" > try {</span>
959
+ <span class="cstat-no" title="statement not covered" > await db.put(table)</span>
960
+ } catch (err) {
961
+ <span class="cstat-no" title="statement not covered" > if (err.status === 409) {</span>
962
+ const updatedTable = <span class="cstat-no" title="statement not covered" >await db.get(table._id)</span>
963
+ let response = <span class="cstat-no" title="statement not covered" >processAutoColumn(null, updatedTable, row, {</span>
964
+ reprocessing: true,
965
+ })
966
+ <span class="cstat-no" title="statement not covered" > await db.put(response.table)</span>
967
+ <span class="cstat-no" title="statement not covered" > row = response.row</span>
968
+ } else {
969
+ <span class="cstat-no" title="statement not covered" > throw err</span>
970
+ }
971
+ }
823
972
  }
973
+ const response = await db.put(row)
824
974
  row._rev = response.rev
825
975
  // process the row before return, to include relationships
826
976
  row = await outputProcessing(ctx, table, row, { squash: false })
827
977
  return { row, table }
828
978
  }
829
979
  &nbsp;
980
+ // doesn't do the outputProcessing
981
+ async function getRawTableData(ctx, db, tableId) {
982
+ let rows
983
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (tableId === InternalTables.USER_METADATA) {
984
+ <span class="cstat-no" title="statement not covered" > await userController.fetchMetadata(ctx)</span>
985
+ <span class="cstat-no" title="statement not covered" > rows = ctx.body</span>
986
+ } else {
987
+ const response = await db.allDocs(
988
+ getRowParams(tableId, null, {
989
+ include_docs: true,
990
+ })
991
+ )
992
+ rows = response.rows.map(row =&gt; row.doc)
993
+ }
994
+ return rows
995
+ }
996
+ &nbsp;
997
+ async function getView(db, viewName) {
998
+ let viewInfo
999
+ async function getFromDesignDoc() {
1000
+ const designDoc = await db.get("_design/database")
1001
+ viewInfo = designDoc.views[viewName]
1002
+ return viewInfo
1003
+ }
1004
+ let migrate = false
1005
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (env.SELF_HOSTED) {
1006
+ viewInfo = await getFromDesignDoc()
1007
+ } else {
1008
+ <span class="cstat-no" title="statement not covered" > try {</span>
1009
+ <span class="cstat-no" title="statement not covered" > viewInfo = await db.get(generateMemoryViewID(viewName))</span>
1010
+ <span class="cstat-no" title="statement not covered" > if (viewInfo) {</span>
1011
+ <span class="cstat-no" title="statement not covered" > viewInfo = viewInfo.view</span>
1012
+ }
1013
+ } catch (err) {
1014
+ // check if it can be retrieved from design doc (needs migrated)
1015
+ <span class="cstat-no" title="statement not covered" > if (err.status !== 404) {</span>
1016
+ <span class="cstat-no" title="statement not covered" > viewInfo = null</span>
1017
+ } else {
1018
+ <span class="cstat-no" title="statement not covered" > viewInfo = await getFromDesignDoc()</span>
1019
+ <span class="cstat-no" title="statement not covered" > migrate = !!viewInfo</span>
1020
+ }
1021
+ }
1022
+ }
1023
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (migrate) {
1024
+ <span class="cstat-no" title="statement not covered" > await migrateToInMemoryView(db, viewName)</span>
1025
+ }
1026
+ if (!viewInfo) {
1027
+ throw "View does not exist."
1028
+ }
1029
+ return viewInfo
1030
+ }
1031
+ &nbsp;
830
1032
  exports.patch = async ctx =&gt; {
831
1033
  const appId = ctx.appId
832
1034
  const db = new CouchDB(appId)
@@ -930,15 +1132,18 @@ exports.fetchView = async ctx =&gt; {
930
1132
  &nbsp;
931
1133
  const db = new CouchDB(appId)
932
1134
  const { calculation, group, field } = ctx.query
933
- const designDoc = await db.get("_design/database")
934
- const viewInfo = designDoc.views[viewName]
935
- if (!viewInfo) {
936
- throw "View does not exist."
1135
+ const viewInfo = await getView(db, viewName)
1136
+ let response
1137
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (env.SELF_HOSTED) {
1138
+ response = await db.query(`database/${viewName}`, {
1139
+ include_docs: !calculation,
1140
+ group: !!group,
1141
+ })
1142
+ } else {
1143
+ const tableId = <span class="cstat-no" title="statement not covered" >viewInfo.meta.tableId</span>
1144
+ const data = <span class="cstat-no" title="statement not covered" >await getRawTableData(ctx, db, tableId)</span>
1145
+ <span class="cstat-no" title="statement not covered" > response = await inMemoryViews.runView(viewInfo, calculation, group, data)</span>
937
1146
  }
938
- const response = await db.query(`database/${viewName}`, {
939
- include_docs: !calculation,
940
- group: !!group,
941
- })
942
1147
  &nbsp;
943
1148
  let rows
944
1149
  if (!calculation) {
@@ -982,19 +1187,9 @@ exports.fetch = async ctx =&gt; {
982
1187
  const appId = ctx.appId
983
1188
  const db = new CouchDB(appId)
984
1189
  &nbsp;
985
- let rows,
986
- table = await db.get(ctx.params.tableId)
987
- <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.params.tableId === InternalTables.USER_METADATA) {
988
- <span class="cstat-no" title="statement not covered" > await userController.fetchMetadata(ctx)</span>
989
- <span class="cstat-no" title="statement not covered" > rows = ctx.body</span>
990
- } else {
991
- const response = await db.allDocs(
992
- getRowParams(ctx.params.tableId, null, {
993
- include_docs: true,
994
- })
995
- )
996
- rows = response.rows.map(row =&gt; row.doc)
997
- }
1190
+ const tableId = ctx.params.tableId
1191
+ let table = await db.get(tableId)
1192
+ let rows = await getRawTableData(ctx, db, tableId)
998
1193
  return outputProcessing(ctx, table, rows)
999
1194
  }
1000
1195
  &nbsp;
@@ -1162,7 +1357,7 @@ exports.fetchEnrichedRow = async ctx =&gt; {
1162
1357
  <div class='footer quiet pad2 space-top1 center small'>
1163
1358
  Code coverage generated by
1164
1359
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1165
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
1360
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
1166
1361
  </div>
1167
1362
  </div>
1168
1363
  <script src="../../../prettify.js"></script>
@@ -1228,7 +1228,7 @@ exports.fullSearch = <span class="fstat-no" title="function not covered" >as</sp
1228
1228
  <div class='footer quiet pad2 space-top1 center small'>
1229
1229
  Code coverage generated by
1230
1230
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1231
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
1231
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
1232
1232
  </div>
1233
1233
  </div>
1234
1234
  <script src="../../../prettify.js"></script>
@@ -310,7 +310,7 @@ exports.validate = async ({ appId, tableId, row, table }) =&gt; {
310
310
  <div class='footer quiet pad2 space-top1 center small'>
311
311
  Code coverage generated by
312
312
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
313
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
313
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
314
314
  </div>
315
315
  </div>
316
316
  <script src="../../../prettify.js"></script>
@@ -208,7 +208,7 @@ exports.destroy = async ctx =&gt; {
208
208
  <div class='footer quiet pad2 space-top1 center small'>
209
209
  Code coverage generated by
210
210
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
211
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
211
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
212
212
  </div>
213
213
  </div>
214
214
  <script src="../../prettify.js"></script>
@@ -142,7 +142,7 @@ exports.save = <span class="fstat-no" title="function not covered" >as</span>ync
142
142
  <div class='footer quiet pad2 space-top1 center small'>
143
143
  Code coverage generated by
144
144
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
145
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
145
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
146
146
  </div>
147
147
  </div>
148
148
  <script src="../../prettify.js"></script>
@@ -110,7 +110,7 @@
110
110
  <div class='footer quiet pad2 space-top1 center small'>
111
111
  Code coverage generated by
112
112
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
113
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
113
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
114
114
  </div>
115
115
  </div>
116
116
  <script src="../../../prettify.js"></script>
@@ -610,7 +610,7 @@ exports.save = async function (ctx) {
610
610
  if (updatedRows &amp;&amp; updatedRows.length !== 0) {
611
611
  await db.bulkDocs(updatedRows)
612
612
  }
613
- const result = await db.post(tableToSave)
613
+ const result = await db.put(tableToSave)
614
614
  tableToSave._rev = result.rev
615
615
  &nbsp;
616
616
  tableToSave = await tableSaveFunctions.after(tableToSave)
@@ -673,7 +673,7 @@ exports.validateCSVSchema = async function (ctx) {
673
673
  <div class='footer quiet pad2 space-top1 center small'>
674
674
  Code coverage generated by
675
675
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
676
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
676
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
677
677
  </div>
678
678
  </div>
679
679
  <script src="../../../prettify.js"></script>
@@ -289,7 +289,11 @@
289
289
  <a name='L230'></a><a href='#L230'>230</a>
290
290
  <a name='L231'></a><a href='#L231'>231</a>
291
291
  <a name='L232'></a><a href='#L232'>232</a>
292
- <a name='L233'></a><a href='#L233'>233</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
292
+ <a name='L233'></a><a href='#L233'>233</a>
293
+ <a name='L234'></a><a href='#L234'>234</a>
294
+ <a name='L235'></a><a href='#L235'>235</a>
295
+ <a name='L236'></a><a href='#L236'>236</a>
296
+ <a name='L237'></a><a href='#L237'>237</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
293
297
  <span class="cline-any cline-yes">34x</span>
294
298
  <span class="cline-any cline-yes">34x</span>
295
299
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -365,31 +369,35 @@
365
369
  <span class="cline-any cline-yes">1x</span>
366
370
  <span class="cline-any cline-yes">1x</span>
367
371
  <span class="cline-any cline-yes">1x</span>
368
- <span class="cline-any cline-yes">1x</span>
369
372
  <span class="cline-any cline-neutral">&nbsp;</span>
370
373
  <span class="cline-any cline-neutral">&nbsp;</span>
371
374
  <span class="cline-any cline-yes">1x</span>
375
+ <span class="cline-any cline-yes">1x</span>
372
376
  <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-yes">1x</span>
373
378
  <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-yes">4x</span>
374
380
  <span class="cline-any cline-neutral">&nbsp;</span>
375
381
  <span class="cline-any cline-neutral">&nbsp;</span>
376
382
  <span class="cline-any cline-neutral">&nbsp;</span>
377
383
  <span class="cline-any cline-neutral">&nbsp;</span>
384
+ <span class="cline-any cline-no">&nbsp;</span>
378
385
  <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-yes">1x</span>
380
386
  <span class="cline-any cline-neutral">&nbsp;</span>
381
- <span class="cline-any cline-yes">4x</span>
382
387
  <span class="cline-any cline-neutral">&nbsp;</span>
383
388
  <span class="cline-any cline-neutral">&nbsp;</span>
384
389
  <span class="cline-any cline-neutral">&nbsp;</span>
385
390
  <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-no">&nbsp;</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-yes">1x</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
396
  <span class="cline-any cline-neutral">&nbsp;</span>
388
397
  <span class="cline-any cline-neutral">&nbsp;</span>
389
398
  <span class="cline-any cline-neutral">&nbsp;</span>
390
399
  <span class="cline-any cline-neutral">&nbsp;</span>
391
400
  <span class="cline-any cline-neutral">&nbsp;</span>
392
- <span class="cline-any cline-yes">1x</span>
393
401
  <span class="cline-any cline-neutral">&nbsp;</span>
394
402
  <span class="cline-any cline-neutral">&nbsp;</span>
395
403
  <span class="cline-any cline-yes">1x</span>
@@ -591,22 +599,16 @@ exports.handleDataImport = async (appId, user, table, dataImport) =&gt; {
591
599
  // Populate the table with rows imported from CSV in a bulk update
592
600
  const data = await csvParser.transform(dataImport)
593
601
  &nbsp;
602
+ let finalData = []
594
603
  for (let i = 0; i &lt; data.length; i++) {
595
604
  let row = data[i]
596
605
  row._id = generateRowID(table._id)
597
606
  row.tableId = table._id
598
- const processed = inputProcessing(user, table, row)
607
+ const processed = inputProcessing(user, table, row, {
608
+ noAutoRelationships: true,
609
+ })
599
610
  table = processed.table
600
611
  row = processed.row
601
- &nbsp;
602
- // make sure link rows are up to date
603
- row = await linkRows.updateLinks({
604
- appId,
605
- eventType: linkRows.EventType.ROW_SAVE,
606
- row,
607
- tableId: row.tableId,
608
- table,
609
- })
610
612
  &nbsp;
611
613
  for (let [fieldName, schema] of Object.entries(table.schema)) {
612
614
  // check whether the options need to be updated for inclusion as part of the data import
@@ -621,10 +623,20 @@ exports.handleDataImport = async (appId, user, table, dataImport) =&gt; {
621
623
  ]
622
624
  }
623
625
  }
624
- data[i] = row
626
+ &nbsp;
627
+ // make sure link rows are up to date
628
+ finalData.push(
629
+ linkRows.updateLinks({
630
+ appId,
631
+ eventType: linkRows.EventType.ROW_SAVE,
632
+ row,
633
+ tableId: row.tableId,
634
+ table,
635
+ })
636
+ )
625
637
  }
626
638
  &nbsp;
627
- await db.bulkDocs(data)
639
+ await db.bulkDocs(await Promise.all(finalData))
628
640
  let response = await db.put(table)
629
641
  table._rev = response._rev
630
642
  }
@@ -760,7 +772,7 @@ exports.TableSaveFunctions = TableSaveFunctions
760
772
  <div class='footer quiet pad2 space-top1 center small'>
761
773
  Code coverage generated by
762
774
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
763
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
775
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
764
776
  </div>
765
777
  </div>
766
778
  <script src="../../../prettify.js"></script>
@@ -145,7 +145,7 @@ exports.downloadTemplate = async function (ctx) {
145
145
  <div class='footer quiet pad2 space-top1 center small'>
146
146
  Code coverage generated by
147
147
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
148
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
148
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
149
149
  </div>
150
150
  </div>
151
151
  <script src="../../prettify.js"></script>
@@ -298,7 +298,7 @@ exports.findMetadata = async function (ctx) {
298
298
  <div class='footer quiet pad2 space-top1 center small'>
299
299
  Code coverage generated by
300
300
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
301
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
301
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
302
302
  </div>
303
303
  </div>
304
304
  <script src="../../prettify.js"></script>
@@ -118,7 +118,7 @@ exports.json = function (headers, rows) {
118
118
  <div class='footer quiet pad2 space-top1 center small'>
119
119
  Code coverage generated by
120
120
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
121
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
121
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
122
122
  </div>
123
123
  </div>
124
124
  <script src="../../../prettify.js"></script>