@budibase/server 1.0.199 → 1.0.200-alpha.2

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 (281) hide show
  1. package/Dockerfile +2 -0
  2. package/builder/assets/index.359da19e.js +1315 -0
  3. package/builder/index.html +1 -1
  4. package/coverage/clover.xml +2089 -2001
  5. package/coverage/coverage-final.json +121 -122
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +6 -6
  7. package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
  8. package/coverage/lcov-report/api/controllers/automation.js.html +174 -72
  9. package/coverage/lcov-report/api/controllers/backup.js.html +30 -6
  10. package/coverage/lcov-report/api/controllers/cloud.js.html +11 -11
  11. package/coverage/lcov-report/api/controllers/component.js.html +5 -5
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +53 -41
  13. package/coverage/lcov-report/api/controllers/dev.js.html +94 -70
  14. package/coverage/lcov-report/api/controllers/index.html +57 -72
  15. package/coverage/lcov-report/api/controllers/integration.js.html +8 -8
  16. package/coverage/lcov-report/api/controllers/layout.js.html +28 -19
  17. package/coverage/lcov-report/api/controllers/metadata.js.html +9 -9
  18. package/coverage/lcov-report/api/controllers/migrations.js.html +4 -4
  19. package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
  20. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/validation.js.html +10 -10
  22. package/coverage/lcov-report/api/controllers/role.js.html +78 -48
  23. package/coverage/lcov-report/api/controllers/routing.js.html +9 -9
  24. package/coverage/lcov-report/api/controllers/row/external.js.html +19 -19
  25. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +54 -54
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +9 -9
  28. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -24
  29. package/coverage/lcov-report/api/controllers/row/utils.js.html +24 -24
  30. package/coverage/lcov-report/api/controllers/screen.js.html +56 -20
  31. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  32. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +49 -49
  33. package/coverage/lcov-report/api/controllers/table/external.js.html +23 -17
  34. package/coverage/lcov-report/api/controllers/table/index.html +26 -26
  35. package/coverage/lcov-report/api/controllers/table/index.js.html +85 -49
  36. package/coverage/lcov-report/api/controllers/templates.js.html +6 -6
  37. package/coverage/lcov-report/api/controllers/user.js.html +19 -19
  38. package/coverage/lcov-report/api/controllers/view/exporters.js.html +11 -11
  39. package/coverage/lcov-report/api/controllers/view/index.html +21 -21
  40. package/coverage/lcov-report/api/controllers/view/index.js.html +275 -65
  41. package/coverage/lcov-report/api/controllers/view/utils.js.html +23 -23
  42. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +40 -40
  43. package/coverage/lcov-report/api/controllers/webhook.js.html +17 -17
  44. package/coverage/lcov-report/api/index.html +15 -15
  45. package/coverage/lcov-report/api/index.js.html +39 -45
  46. package/coverage/lcov-report/api/routes/analytics.js.html +7 -13
  47. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -8
  48. package/coverage/lcov-report/api/routes/auth.js.html +6 -6
  49. package/coverage/lcov-report/api/routes/automation.js.html +11 -11
  50. package/coverage/lcov-report/api/routes/backup.js.html +8 -8
  51. package/coverage/lcov-report/api/routes/cloud.js.html +8 -8
  52. package/coverage/lcov-report/api/routes/component.js.html +8 -8
  53. package/coverage/lcov-report/api/routes/datasource.js.html +9 -9
  54. package/coverage/lcov-report/api/routes/deploy.js.html +8 -8
  55. package/coverage/lcov-report/api/routes/dev.js.html +13 -13
  56. package/coverage/lcov-report/api/routes/index.html +1 -1
  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 +9 -9
  60. package/coverage/lcov-report/api/routes/migrations.js.html +7 -7
  61. package/coverage/lcov-report/api/routes/permission.js.html +9 -9
  62. package/coverage/lcov-report/api/routes/query.js.html +10 -10
  63. package/coverage/lcov-report/api/routes/role.js.html +9 -9
  64. package/coverage/lcov-report/api/routes/routing.js.html +8 -8
  65. package/coverage/lcov-report/api/routes/screen.js.html +9 -9
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/table.js.html +10 -10
  68. package/coverage/lcov-report/api/routes/templates.js.html +8 -8
  69. package/coverage/lcov-report/api/routes/user.js.html +8 -8
  70. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  71. package/coverage/lcov-report/api/routes/utils/validators.js.html +36 -36
  72. package/coverage/lcov-report/api/routes/view.js.html +10 -10
  73. package/coverage/lcov-report/api/routes/webhook.js.html +9 -9
  74. package/coverage/lcov-report/automations/actions.js.html +25 -25
  75. package/coverage/lcov-report/automations/automationUtils.js.html +8 -8
  76. package/coverage/lcov-report/automations/bullboard.js.html +35 -35
  77. package/coverage/lcov-report/automations/index.html +29 -29
  78. package/coverage/lcov-report/automations/index.js.html +29 -17
  79. package/coverage/lcov-report/automations/steps/bash.js.html +7 -7
  80. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  81. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  82. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  83. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  84. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  85. package/coverage/lcov-report/automations/steps/index.html +1 -1
  86. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  87. package/coverage/lcov-report/automations/steps/loop.js.html +2 -2
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  89. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  90. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  91. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  92. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  93. package/coverage/lcov-report/automations/steps/updateRow.js.html +6 -6
  94. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  95. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  96. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  97. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  98. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  100. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  101. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  102. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  103. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  104. package/coverage/lcov-report/automations/triggers.js.html +18 -18
  105. package/coverage/lcov-report/constants/index.html +1 -1
  106. package/coverage/lcov-report/constants/index.js.html +30 -30
  107. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  108. package/coverage/lcov-report/constants/screens.js.html +4 -4
  109. package/coverage/lcov-report/db/inMemoryView.js.html +5 -5
  110. package/coverage/lcov-report/db/index.html +1 -1
  111. package/coverage/lcov-report/db/index.js.html +9 -9
  112. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +17 -17
  113. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  114. package/coverage/lcov-report/db/linkedRows/index.js.html +36 -36
  115. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +19 -19
  116. package/coverage/lcov-report/db/newid.js.html +4 -4
  117. package/coverage/lcov-report/db/utils.js.html +81 -81
  118. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  119. package/coverage/lcov-report/events/index.html +1 -1
  120. package/coverage/lcov-report/events/index.js.html +7 -7
  121. package/coverage/lcov-report/events/utils.js.html +10 -10
  122. package/coverage/lcov-report/index.html +74 -74
  123. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  124. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  125. package/coverage/lcov-report/middleware/appInfo.js.html +5 -5
  126. package/coverage/lcov-report/middleware/builder.js.html +20 -20
  127. package/coverage/lcov-report/middleware/currentapp.js.html +49 -49
  128. package/coverage/lcov-report/middleware/index.html +1 -1
  129. package/coverage/lcov-report/middleware/joi-validator.js.html +14 -14
  130. package/coverage/lcov-report/middleware/publicApi.js.html +5 -5
  131. package/coverage/lcov-report/middleware/resourceId.js.html +29 -29
  132. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  133. package/coverage/lcov-report/middleware/utils.js.html +4 -4
  134. package/coverage/lcov-report/threads/automation.js.html +1 -1
  135. package/coverage/lcov-report/threads/index.html +1 -1
  136. package/coverage/lcov-report/threads/query.js.html +1 -1
  137. package/coverage/lcov-report/threads/utils.js.html +13 -13
  138. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -3
  139. package/coverage/lcov-report/utilities/centralPath.js.html +14 -14
  140. package/coverage/lcov-report/utilities/csvParser.js.html +34 -34
  141. package/coverage/lcov-report/utilities/global.js.html +28 -28
  142. package/coverage/lcov-report/utilities/index.html +25 -25
  143. package/coverage/lcov-report/utilities/index.js.html +41 -41
  144. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +18 -18
  145. package/coverage/lcov-report/utilities/queue/index.html +15 -15
  146. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.js.html +6 -6
  148. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  149. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +59 -59
  150. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +15 -15
  151. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  152. package/coverage/lcov-report/utilities/security.js.html +8 -8
  153. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  154. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  155. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +30 -30
  156. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  157. package/coverage/lcov-report/utilities/users.js.html +7 -7
  158. package/coverage/lcov-report/utilities/workerRequests.js.html +29 -29
  159. package/coverage/lcov.info +2903 -2762
  160. package/dist/api/controllers/analytics.js +7 -30
  161. package/dist/api/controllers/application.js +56 -16
  162. package/dist/api/controllers/automation.js +31 -2
  163. package/dist/api/controllers/backup.js +7 -0
  164. package/dist/api/controllers/datasource.js +8 -2
  165. package/dist/api/controllers/deploy/index.js +6 -2
  166. package/dist/api/controllers/dev.js +9 -2
  167. package/dist/api/controllers/layout.js +3 -0
  168. package/dist/api/controllers/query/import/index.js +12 -2
  169. package/dist/api/controllers/query/import/sources/curl.js +3 -0
  170. package/dist/api/controllers/query/import/sources/openapi2.js +3 -0
  171. package/dist/api/controllers/query/import/sources/openapi3.js +3 -0
  172. package/dist/api/controllers/query/index.js +16 -2
  173. package/dist/api/controllers/role.js +11 -0
  174. package/dist/api/controllers/screen.js +10 -1
  175. package/dist/api/controllers/static/index.js +29 -15
  176. package/dist/api/controllers/table/external.js +2 -0
  177. package/dist/api/controllers/table/index.js +12 -0
  178. package/dist/api/controllers/table/utils.js +3 -3
  179. package/dist/api/controllers/view/index.js +62 -6
  180. package/dist/api/index.js +2 -4
  181. package/dist/api/routes/analytics.js +1 -3
  182. package/dist/app.js +16 -8
  183. package/dist/automations/index.js +4 -0
  184. package/dist/environment.js +4 -2
  185. package/dist/migrations/functions/backfill/app/automations.js +31 -0
  186. package/dist/migrations/functions/backfill/app/datasources.js +28 -0
  187. package/dist/migrations/functions/backfill/app/layouts.js +33 -0
  188. package/dist/migrations/functions/backfill/app/queries.js +32 -0
  189. package/dist/migrations/functions/backfill/app/roles.js +28 -0
  190. package/dist/migrations/functions/backfill/app/screens.js +28 -0
  191. package/dist/migrations/functions/backfill/app/tables.js +40 -0
  192. package/dist/migrations/functions/backfill/app.js +175 -0
  193. package/dist/migrations/functions/backfill/global/configs.js +61 -0
  194. package/dist/migrations/functions/backfill/global/quotas.js +60 -0
  195. package/dist/migrations/functions/backfill/global/users.js +50 -0
  196. package/dist/migrations/functions/backfill/global.js +189 -0
  197. package/dist/migrations/functions/backfill/index.js +32 -0
  198. package/dist/migrations/functions/backfill/installation.js +81 -0
  199. package/dist/migrations/index.js +95 -31
  200. package/dist/migrations/tests/helpers.js +72 -0
  201. package/dist/migrations/tests/structures.js +37 -0
  202. package/dist/package.json +79 -69
  203. package/dist/tests/utilities/TestConfiguration.js +121 -93
  204. package/dist/tests/utilities/structures.js +45 -0
  205. package/dist/tsconfig.build.tsbuildinfo +1 -1
  206. package/nodemon.json +1 -1
  207. package/package.json +80 -70
  208. package/scripts/dev/manage.js +2 -0
  209. package/scripts/jestSetup.js +7 -0
  210. package/scripts/likeCypress.ts +1 -1
  211. package/src/api/controllers/analytics.ts +8 -0
  212. package/src/api/controllers/application.ts +60 -18
  213. package/src/api/controllers/automation.js +36 -2
  214. package/src/api/controllers/backup.js +8 -0
  215. package/src/api/controllers/datasource.js +8 -4
  216. package/src/api/controllers/deploy/index.ts +6 -2
  217. package/src/api/controllers/dev.js +10 -2
  218. package/src/api/controllers/layout.js +3 -0
  219. package/src/api/controllers/query/import/index.ts +16 -3
  220. package/src/api/controllers/query/import/sources/base/index.ts +2 -1
  221. package/src/api/controllers/query/import/sources/curl.ts +4 -0
  222. package/src/api/controllers/query/import/sources/openapi2.ts +4 -0
  223. package/src/api/controllers/query/import/sources/openapi3.ts +4 -0
  224. package/src/api/controllers/query/import/tests/index.spec.js +20 -7
  225. package/src/api/controllers/query/index.ts +16 -3
  226. package/src/api/controllers/role.js +10 -0
  227. package/src/api/controllers/screen.js +13 -1
  228. package/src/api/controllers/static/index.js +28 -15
  229. package/src/api/controllers/table/external.js +2 -0
  230. package/src/api/controllers/table/index.js +12 -0
  231. package/src/api/controllers/table/utils.ts +4 -4
  232. package/src/api/controllers/view/index.js +76 -6
  233. package/src/api/index.js +2 -4
  234. package/src/api/routes/analytics.js +1 -3
  235. package/src/api/routes/public/utils/Endpoint.ts +1 -1
  236. package/src/api/routes/tests/__snapshots__/datasource.spec.js.snap +5 -1
  237. package/src/api/routes/tests/application.spec.js +64 -4
  238. package/src/api/routes/tests/automation.spec.js +168 -60
  239. package/src/api/routes/tests/backup.spec.js +2 -0
  240. package/src/api/routes/tests/data/export.txt +1 -0
  241. package/src/api/routes/tests/datasource.spec.js +5 -0
  242. package/src/api/routes/tests/deployment.spec.js +25 -0
  243. package/src/api/routes/tests/dev.spec.js +40 -0
  244. package/src/api/routes/tests/layout.spec.js +4 -0
  245. package/src/api/routes/tests/query.spec.js +56 -13
  246. package/src/api/routes/tests/role.spec.js +40 -7
  247. package/src/api/routes/tests/row.spec.js +2 -3
  248. package/src/api/routes/tests/screen.spec.js +30 -4
  249. package/src/api/routes/tests/static.spec.js +120 -54
  250. package/src/api/routes/tests/table.spec.js +102 -38
  251. package/src/api/routes/tests/view.spec.js +222 -43
  252. package/src/app.ts +18 -9
  253. package/src/automations/index.js +4 -0
  254. package/src/automations/tests/delay.spec.js +4 -0
  255. package/src/environment.js +5 -2
  256. package/src/migrations/functions/backfill/app/automations.ts +26 -0
  257. package/src/migrations/functions/backfill/app/datasources.ts +22 -0
  258. package/src/migrations/functions/backfill/app/layouts.ts +29 -0
  259. package/src/migrations/functions/backfill/app/queries.ts +33 -0
  260. package/src/migrations/functions/backfill/app/roles.ts +22 -0
  261. package/src/migrations/functions/backfill/app/screens.ts +22 -0
  262. package/src/migrations/functions/backfill/app/tables.ts +36 -0
  263. package/src/migrations/functions/backfill/app.ts +148 -0
  264. package/src/migrations/functions/backfill/global/configs.ts +66 -0
  265. package/src/migrations/functions/backfill/global/quotas.ts +60 -0
  266. package/src/migrations/functions/backfill/global/users.ts +49 -0
  267. package/src/migrations/functions/backfill/global.ts +194 -0
  268. package/src/migrations/functions/backfill/index.ts +7 -0
  269. package/src/migrations/functions/backfill/installation.ts +51 -0
  270. package/src/migrations/index.ts +120 -51
  271. package/src/migrations/tests/helpers.ts +40 -0
  272. package/src/migrations/tests/index.spec.ts +132 -0
  273. package/src/migrations/tests/structures.ts +66 -0
  274. package/src/module.d.ts +0 -1
  275. package/src/tests/utilities/TestConfiguration.js +138 -90
  276. package/src/tests/utilities/structures.js +71 -0
  277. package/tsconfig.build.json +20 -5
  278. package/tsconfig.json +22 -17
  279. package/builder/assets/index.107ba2e5.js +0 -1315
  280. package/coverage/lcov-report/api/controllers/analytics.js.html +0 -202
  281. package/src/api/controllers/analytics.js +0 -39
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">88.4% </span>
26
+ <span class="strong">90.38% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>61/69</span>
28
+ <span class='fraction'>94/104</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">72% </span>
33
+ <span class="strong">90.76% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>18/25</span>
35
+ <span class='fraction'>59/65</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">62.5% </span>
40
+ <span class="strong">72.72% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/8</span>
42
+ <span class='fraction'>8/11</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">89.7% </span>
47
+ <span class="strong">91.26% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>61/68</span>
49
+ <span class='fraction'>94/103</span>
50
50
  </div>
51
51
 
52
52
 
@@ -182,49 +182,183 @@
182
182
  <a name='L117'></a><a href='#L117'>117</a>
183
183
  <a name='L118'></a><a href='#L118'>118</a>
184
184
  <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">40x</span>
186
- <span class="cline-any cline-yes">40x</span>
187
- <span class="cline-any cline-yes">40x</span>
188
- <span class="cline-any cline-yes">40x</span>
189
- <span class="cline-any cline-yes">40x</span>
190
- <span class="cline-any cline-yes">40x</span>
191
- <span class="cline-any cline-yes">40x</span>
192
- <span class="cline-any cline-yes">40x</span>
193
- <span class="cline-any cline-neutral">&nbsp;</span>
194
- <span class="cline-any cline-yes">40x</span>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">43x</span>
256
+ <span class="cline-any cline-yes">43x</span>
257
+ <span class="cline-any cline-yes">43x</span>
258
+ <span class="cline-any cline-yes">43x</span>
259
+ <span class="cline-any cline-yes">43x</span>
260
+ <span class="cline-any cline-yes">43x</span>
261
+ <span class="cline-any cline-yes">43x</span>
262
+ <span class="cline-any cline-yes">43x</span>
263
+ <span class="cline-any cline-yes">43x</span>
264
+ <span class="cline-any cline-yes">43x</span>
265
+ <span class="cline-any cline-yes">43x</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
267
+ <span class="cline-any cline-yes">43x</span>
195
268
  <span class="cline-any cline-yes">1x</span>
196
269
  <span class="cline-any cline-neutral">&nbsp;</span>
197
270
  <span class="cline-any cline-neutral">&nbsp;</span>
198
- <span class="cline-any cline-yes">40x</span>
199
- <span class="cline-any cline-yes">8x</span>
200
- <span class="cline-any cline-yes">8x</span>
201
- <span class="cline-any cline-yes">8x</span>
271
+ <span class="cline-any cline-yes">43x</span>
272
+ <span class="cline-any cline-yes">23x</span>
273
+ <span class="cline-any cline-yes">23x</span>
274
+ <span class="cline-any cline-yes">23x</span>
275
+ <span class="cline-any cline-yes">23x</span>
202
276
  <span class="cline-any cline-neutral">&nbsp;</span>
203
- <span class="cline-any cline-yes">8x</span>
277
+ <span class="cline-any cline-yes">23x</span>
204
278
  <span class="cline-any cline-no">&nbsp;</span>
205
279
  <span class="cline-any cline-neutral">&nbsp;</span>
206
280
  <span class="cline-any cline-neutral">&nbsp;</span>
207
- <span class="cline-any cline-yes">8x</span>
281
+ <span class="cline-any cline-yes">23x</span>
208
282
  <span class="cline-any cline-neutral">&nbsp;</span>
209
283
  <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-yes">8x</span>
211
- <span class="cline-any cline-yes">8x</span>
212
- <span class="cline-any cline-yes">8x</span>
213
- <span class="cline-any cline-yes">3x</span>
284
+ <span class="cline-any cline-yes">23x</span>
285
+ <span class="cline-any cline-yes">23x</span>
286
+ <span class="cline-any cline-yes">23x</span>
287
+ <span class="cline-any cline-yes">23x</span>
288
+ <span class="cline-any cline-yes">7x</span>
214
289
  <span class="cline-any cline-neutral">&nbsp;</span>
215
- <span class="cline-any cline-yes">8x</span>
216
- <span class="cline-any cline-yes">8x</span>
290
+ <span class="cline-any cline-yes">23x</span>
291
+ <span class="cline-any cline-yes">23x</span>
292
+ <span class="cline-any cline-no">&nbsp;</span>
217
293
  <span class="cline-any cline-no">&nbsp;</span>
218
294
  <span class="cline-any cline-neutral">&nbsp;</span>
219
- <span class="cline-any cline-yes">8x</span>
295
+ <span class="cline-any cline-yes">23x</span>
296
+ <span class="cline-any cline-yes">23x</span>
297
+ <span class="cline-any cline-neutral">&nbsp;</span>
298
+ <span class="cline-any cline-yes">23x</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-yes">43x</span>
305
+ <span class="cline-any cline-yes">23x</span>
306
+ <span class="cline-any cline-yes">23x</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-yes">23x</span>
309
+ <span class="cline-any cline-yes">1x</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-neutral">&nbsp;</span>
312
+ <span class="cline-any cline-yes">23x</span>
313
+ <span class="cline-any cline-yes">12x</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-yes">23x</span>
317
+ <span class="cline-any cline-neutral">&nbsp;</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-neutral">&nbsp;</span>
321
+ <span class="cline-any cline-yes">1x</span>
220
322
  <span class="cline-any cline-neutral">&nbsp;</span>
221
- <span class="cline-any cline-yes">8x</span>
222
323
  <span class="cline-any cline-neutral">&nbsp;</span>
223
324
  <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-yes">43x</span>
326
+ <span class="cline-any cline-yes">23x</span>
224
327
  <span class="cline-any cline-neutral">&nbsp;</span>
225
328
  <span class="cline-any cline-neutral">&nbsp;</span>
226
329
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">40x</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-yes">23x</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-yes">23x</span>
334
+ <span class="cline-any cline-yes">1x</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-neutral">&nbsp;</span>
337
+ <span class="cline-any cline-yes">23x</span>
338
+ <span class="cline-any cline-yes">4x</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-yes">23x</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-yes">1x</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-yes">43x</span>
351
+ <span class="cline-any cline-yes">23x</span>
352
+ <span class="cline-any cline-yes">18x</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-yes">5x</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-yes">23x</span>
357
+ <span class="cline-any cline-yes">23x</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-yes">43x</span>
361
+ <span class="cline-any cline-yes">1x</span>
228
362
  <span class="cline-any cline-yes">1x</span>
229
363
  <span class="cline-any cline-yes">1x</span>
230
364
  <span class="cline-any cline-yes">1x</span>
@@ -235,16 +369,16 @@
235
369
  <span class="cline-any cline-yes">1x</span>
236
370
  <span class="cline-any cline-neutral">&nbsp;</span>
237
371
  <span class="cline-any cline-neutral">&nbsp;</span>
238
- <span class="cline-any cline-yes">40x</span>
239
- <span class="cline-any cline-yes">2x</span>
240
- <span class="cline-any cline-yes">2x</span>
372
+ <span class="cline-any cline-yes">43x</span>
373
+ <span class="cline-any cline-yes">4x</span>
374
+ <span class="cline-any cline-yes">4x</span>
241
375
  <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-yes">2x</span>
243
- <span class="cline-any cline-yes">2x</span>
376
+ <span class="cline-any cline-yes">4x</span>
377
+ <span class="cline-any cline-yes">4x</span>
244
378
  <span class="cline-any cline-no">&nbsp;</span>
245
379
  <span class="cline-any cline-neutral">&nbsp;</span>
246
380
  <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-yes">2x</span>
381
+ <span class="cline-any cline-yes">4x</span>
248
382
  <span class="cline-any cline-yes">2x</span>
249
383
  <span class="cline-any cline-neutral">&nbsp;</span>
250
384
  <span class="cline-any cline-yes">2x</span>
@@ -259,22 +393,22 @@
259
393
  <span class="cline-any cline-neutral">&nbsp;</span>
260
394
  <span class="cline-any cline-neutral">&nbsp;</span>
261
395
  <span class="cline-any cline-neutral">&nbsp;</span>
262
- <span class="cline-any cline-yes">2x</span>
263
- <span class="cline-any cline-yes">2x</span>
396
+ <span class="cline-any cline-yes">4x</span>
397
+ <span class="cline-any cline-yes">4x</span>
264
398
  <span class="cline-any cline-neutral">&nbsp;</span>
265
- <span class="cline-any cline-yes">2x</span>
266
- <span class="cline-any cline-yes">2x</span>
267
- <span class="cline-any cline-yes">2x</span>
268
- <span class="cline-any cline-yes">2x</span>
269
- <span class="cline-any cline-yes">2x</span>
399
+ <span class="cline-any cline-yes">4x</span>
400
+ <span class="cline-any cline-yes">4x</span>
401
+ <span class="cline-any cline-yes">4x</span>
402
+ <span class="cline-any cline-yes">4x</span>
403
+ <span class="cline-any cline-yes">4x</span>
270
404
  <span class="cline-any cline-neutral">&nbsp;</span>
271
405
  <span class="cline-any cline-neutral">&nbsp;</span>
272
406
  <span class="cline-any cline-neutral">&nbsp;</span>
273
- <span class="cline-any cline-yes">2x</span>
274
407
  <span class="cline-any cline-yes">4x</span>
408
+ <span class="cline-any cline-yes">8x</span>
275
409
  <span class="cline-any cline-no">&nbsp;</span>
276
410
  <span class="cline-any cline-neutral">&nbsp;</span>
277
- <span class="cline-any cline-yes">2x</span>
411
+ <span class="cline-any cline-yes">4x</span>
278
412
  <span class="cline-any cline-no">&nbsp;</span>
279
413
  <span class="cline-any cline-no">&nbsp;</span>
280
414
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -282,25 +416,31 @@
282
416
  <span class="cline-any cline-neutral">&nbsp;</span>
283
417
  <span class="cline-any cline-neutral">&nbsp;</span>
284
418
  <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-yes">2x</span>
286
- <span class="cline-any cline-yes">1x</span>
287
- <span class="cline-any cline-yes">1x</span>
288
- <span class="cline-any cline-yes">2x</span>
419
+ <span class="cline-any cline-yes">4x</span>
289
420
  <span class="cline-any cline-yes">2x</span>
290
421
  <span class="cline-any cline-yes">2x</span>
422
+ <span class="cline-any cline-yes">4x</span>
423
+ <span class="cline-any cline-yes">4x</span>
424
+ <span class="cline-any cline-no">&nbsp;</span>
291
425
  <span class="cline-any cline-neutral">&nbsp;</span>
292
426
  <span class="cline-any cline-neutral">&nbsp;</span>
293
427
  <span class="cline-any cline-neutral">&nbsp;</span>
294
428
  <span class="cline-any cline-neutral">&nbsp;</span>
295
429
  <span class="cline-any cline-neutral">&nbsp;</span>
296
430
  <span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-yes">2x</span>
298
- <span class="cline-any cline-yes">2x</span>
299
- <span class="cline-any cline-yes">2x</span>
431
+ <span class="cline-any cline-yes">4x</span>
432
+ <span class="cline-any cline-yes">4x</span>
433
+ <span class="cline-any cline-yes">4x</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-yes">4x</span>
436
+ <span class="cline-any cline-yes">4x</span>
300
437
  <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-yes">4x</span>
301
439
  <span class="cline-any cline-yes">2x</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
302
441
  <span class="cline-any cline-yes">2x</span>
303
442
  <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
444
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const viewTemplate = require("./viewBuilder")
305
445
  const { apiFileReturn } = require("../../../utilities/fileSystem")
306
446
  const exporters = require("./exporters")
@@ -309,6 +449,9 @@ const { fetchView } = require("../row")
309
449
  const { getTable } = require("../table/utils")
310
450
  const { FieldTypes } = require("../../../constants")
311
451
  const { getAppDB } = require("@budibase/backend-core/context")
452
+ const { events } = require("@budibase/backend-core")
453
+ const { DocumentTypes } = require("../../../db/utils")
454
+ const { cloneDeep, isEqual } = require("lodash")
312
455
  &nbsp;
313
456
  exports.fetch = async ctx =&gt; {
314
457
  ctx.body = await getViews()
@@ -318,24 +461,28 @@ exports.save = async ctx =&gt; {
318
461
  const db = getAppDB()
319
462
  const { originalName, ...viewToSave } = ctx.request.body
320
463
  const view = viewTemplate(viewToSave)
464
+ const viewName = viewToSave.name
321
465
  &nbsp;
322
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!viewToSave.name) {
466
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!viewName) {
323
467
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Cannot create view without a name")</span>
324
468
  }
325
469
  &nbsp;
326
- await saveView(originalName, viewToSave.name, view)
470
+ await saveView(originalName, viewName, view)
327
471
  &nbsp;
328
472
  // add views to table document
329
- const table = await db.get(ctx.request.body.tableId)
473
+ const existingTable = await db.get(ctx.request.body.tableId)
474
+ const table = cloneDeep(existingTable)
330
475
  <span class="missing-if-branch" title="if path not taken" >I</span>if (!table.views) <span class="cstat-no" title="statement not covered" >table.views = {}</span>
331
476
  if (!view.meta.schema) {
332
477
  view.meta.schema = table.schema
333
478
  }
334
- table.views[viewToSave.name] = view.meta
479
+ table.views[viewName] = view.meta
335
480
  <span class="missing-if-branch" title="if path not taken" >I</span>if (originalName) {
336
481
  <span class="cstat-no" title="statement not covered" > delete table.views[originalName]</span>
482
+ <span class="cstat-no" title="statement not covered" > existingTable.views[viewName] = existingTable.views[originalName]</span>
337
483
  }
338
484
  await db.put(table)
485
+ await handleViewEvents(existingTable.views[viewName], table.views[viewName])
339
486
  &nbsp;
340
487
  ctx.body = {
341
488
  ...table.views[viewToSave.name],
@@ -343,6 +490,62 @@ exports.save = async ctx =&gt; {
343
490
  }
344
491
  }
345
492
  &nbsp;
493
+ const calculationEvents = async (existingView, newView) =&gt; {
494
+ const existingCalculation = existingView &amp;&amp; existingView.calculation
495
+ const newCalculation = newView &amp;&amp; newView.calculation
496
+ &nbsp;
497
+ if (existingCalculation &amp;&amp; !newCalculation) {
498
+ await events.view.calculationDeleted(existingView)
499
+ }
500
+ &nbsp;
501
+ if (!existingCalculation &amp;&amp; newCalculation) {
502
+ await events.view.calculationCreated(newView)
503
+ }
504
+ &nbsp;
505
+ if (
506
+ existingCalculation &amp;&amp;
507
+ newCalculation &amp;&amp;
508
+ existingCalculation !== newCalculation
509
+ ) {
510
+ await events.view.calculationUpdated(newView)
511
+ }
512
+ }
513
+ &nbsp;
514
+ const filterEvents = async (existingView, newView) =&gt; {
515
+ const hasExistingFilters = !!(
516
+ existingView &amp;&amp;
517
+ existingView.filters &amp;&amp;
518
+ existingView.filters.length
519
+ )
520
+ const hasNewFilters = !!(newView &amp;&amp; newView.filters &amp;&amp; newView.filters.length)
521
+ &nbsp;
522
+ if (hasExistingFilters &amp;&amp; !hasNewFilters) {
523
+ await events.view.filterDeleted(newView)
524
+ }
525
+ &nbsp;
526
+ if (!hasExistingFilters &amp;&amp; hasNewFilters) {
527
+ await events.view.filterCreated(newView)
528
+ }
529
+ &nbsp;
530
+ if (
531
+ hasExistingFilters &amp;&amp;
532
+ hasNewFilters &amp;&amp;
533
+ !isEqual(existingView.filters, newView.filters)
534
+ ) {
535
+ await events.view.filterUpdated(newView)
536
+ }
537
+ }
538
+ &nbsp;
539
+ const handleViewEvents = async (existingView, newView) =&gt; {
540
+ if (!existingView) {
541
+ await events.view.created(newView)
542
+ } else {
543
+ await events.view.updated(newView)
544
+ }
545
+ await calculationEvents(existingView, newView)
546
+ await filterEvents(existingView, newView)
547
+ }
548
+ &nbsp;
346
549
  exports.destroy = async ctx =&gt; {
347
550
  const db = getAppDB()
348
551
  const viewName = decodeURI(ctx.params.viewName)
@@ -350,6 +553,7 @@ exports.destroy = async ctx =&gt; {
350
553
  const table = await db.get(view.meta.tableId)
351
554
  delete table.views[viewName]
352
555
  await db.put(table)
556
+ await events.view.deleted(view)
353
557
  &nbsp;
354
558
  ctx.body = view
355
559
  }
@@ -372,7 +576,7 @@ exports.exportView = async ctx =&gt; {
372
576
  stats: !!view.meta.field,
373
577
  field: view.meta.field,
374
578
  }
375
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
579
+ } else {
376
580
  // table all_ view
377
581
  /* istanbul ignore next */
378
582
  ctx.params.viewName = viewName
@@ -382,9 +586,9 @@ exports.exportView = async ctx =&gt; {
382
586
  let rows = ctx.body
383
587
  &nbsp;
384
588
  let schema = view &amp;&amp; view.meta &amp;&amp; view.meta.schema
589
+ const tableId = ctx.params.tableId || view.meta.tableId
590
+ const table = await getTable(tableId)
385
591
  <span class="missing-if-branch" title="else path not taken" >E</span>if (!schema) {
386
- const tableId = ctx.params.tableId || view.meta.tableId
387
- const table = await getTable(tableId)
388
592
  schema = table.schema
389
593
  }
390
594
  &nbsp;
@@ -405,8 +609,8 @@ exports.exportView = async ctx =&gt; {
405
609
  const schemaKeys = Object.keys(schema)
406
610
  for (let key of schemaKeys) {
407
611
  for (let row of rows) {
408
- <span class="missing-if-branch" title="else path not taken" >E</span>if (row[key] == null) {
409
- row[key] = ""
612
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (row[key] == null) {
613
+ <span class="cstat-no" title="statement not covered" > row[key] = ""</span>
410
614
  }
411
615
  }
412
616
  }
@@ -419,6 +623,12 @@ exports.exportView = async ctx =&gt; {
419
623
  // send down the file
420
624
  ctx.attachment(filename)
421
625
  ctx.body = apiFileReturn(exporter(headers, rows))
626
+ &nbsp;
627
+ if (viewName.startsWith(DocumentTypes.TABLE)) {
628
+ await events.table.exported(table, format)
629
+ } else {
630
+ await events.view.exported(table, format)
631
+ }
422
632
  }
423
633
  &nbsp;</pre></td></tr></table></pre>
424
634
 
@@ -427,7 +637,7 @@ exports.exportView = async ctx =&gt; {
427
637
  <div class='footer quiet pad2 space-top1 center small'>
428
638
  Code coverage generated by
429
639
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
430
- at Fri Jun 10 2022 13:42:57 GMT+0000 (Coordinated Universal Time)
640
+ at Mon Jun 13 2022 15:58:57 GMT+0000 (Coordinated Universal Time)
431
641
  </div>
432
642
  <script src="../../../prettify.js"></script>
433
643
  <script>
@@ -219,16 +219,16 @@
219
219
  <span class="cline-any cline-neutral">&nbsp;</span>
220
220
  <span class="cline-any cline-neutral">&nbsp;</span>
221
221
  <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">41x</span>
223
- <span class="cline-any cline-yes">41x</span>
224
- <span class="cline-any cline-yes">41x</span>
225
- <span class="cline-any cline-yes">41x</span>
222
+ <span class="cline-any cline-yes">44x</span>
223
+ <span class="cline-any cline-yes">44x</span>
224
+ <span class="cline-any cline-yes">44x</span>
225
+ <span class="cline-any cline-yes">44x</span>
226
226
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">41x</span>
228
- <span class="cline-any cline-yes">2x</span>
229
- <span class="cline-any cline-yes">2x</span>
230
- <span class="cline-any cline-yes">2x</span>
231
- <span class="cline-any cline-yes">2x</span>
227
+ <span class="cline-any cline-yes">44x</span>
228
+ <span class="cline-any cline-yes">4x</span>
229
+ <span class="cline-any cline-yes">4x</span>
230
+ <span class="cline-any cline-yes">4x</span>
231
+ <span class="cline-any cline-yes">4x</span>
232
232
  <span class="cline-any cline-neutral">&nbsp;</span>
233
233
  <span class="cline-any cline-neutral">&nbsp;</span>
234
234
  <span class="cline-any cline-no">&nbsp;</span>
@@ -240,7 +240,7 @@
240
240
  <span class="cline-any cline-neutral">&nbsp;</span>
241
241
  <span class="cline-any cline-neutral">&nbsp;</span>
242
242
  <span class="cline-any cline-neutral">&nbsp;</span>
243
- <span class="cline-any cline-yes">41x</span>
243
+ <span class="cline-any cline-yes">44x</span>
244
244
  <span class="cline-any cline-yes">2x</span>
245
245
  <span class="cline-any cline-yes">2x</span>
246
246
  <span class="cline-any cline-yes">2x</span>
@@ -273,19 +273,19 @@
273
273
  <span class="cline-any cline-yes">2x</span>
274
274
  <span class="cline-any cline-neutral">&nbsp;</span>
275
275
  <span class="cline-any cline-neutral">&nbsp;</span>
276
- <span class="cline-any cline-yes">41x</span>
277
- <span class="cline-any cline-yes">8x</span>
278
- <span class="cline-any cline-yes">8x</span>
279
- <span class="cline-any cline-yes">8x</span>
280
- <span class="cline-any cline-yes">8x</span>
276
+ <span class="cline-any cline-yes">44x</span>
277
+ <span class="cline-any cline-yes">23x</span>
278
+ <span class="cline-any cline-yes">23x</span>
279
+ <span class="cline-any cline-yes">23x</span>
280
+ <span class="cline-any cline-yes">23x</span>
281
281
  <span class="cline-any cline-neutral">&nbsp;</span>
282
282
  <span class="cline-any cline-neutral">&nbsp;</span>
283
283
  <span class="cline-any cline-neutral">&nbsp;</span>
284
284
  <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-yes">8x</span>
285
+ <span class="cline-any cline-yes">23x</span>
286
286
  <span class="cline-any cline-no">&nbsp;</span>
287
287
  <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-yes">8x</span>
288
+ <span class="cline-any cline-yes">23x</span>
289
289
  <span class="cline-any cline-neutral">&nbsp;</span>
290
290
  <span class="cline-any cline-no">&nbsp;</span>
291
291
  <span class="cline-any cline-no">&nbsp;</span>
@@ -311,7 +311,7 @@
311
311
  <span class="cline-any cline-neutral">&nbsp;</span>
312
312
  <span class="cline-any cline-neutral">&nbsp;</span>
313
313
  <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-yes">41x</span>
314
+ <span class="cline-any cline-yes">44x</span>
315
315
  <span class="cline-any cline-yes">1x</span>
316
316
  <span class="cline-any cline-yes">1x</span>
317
317
  <span class="cline-any cline-yes">1x</span>
@@ -327,7 +327,7 @@
327
327
  <span class="cline-any cline-neutral">&nbsp;</span>
328
328
  <span class="cline-any cline-neutral">&nbsp;</span>
329
329
  <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-yes">41x</span>
330
+ <span class="cline-any cline-yes">44x</span>
331
331
  <span class="cline-any cline-neutral">&nbsp;</span>
332
332
  <span class="cline-any cline-no">&nbsp;</span>
333
333
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -337,7 +337,7 @@
337
337
  <span class="cline-any cline-no">&nbsp;</span>
338
338
  <span class="cline-any cline-neutral">&nbsp;</span>
339
339
  <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-yes">41x</span>
340
+ <span class="cline-any cline-yes">44x</span>
341
341
  <span class="cline-any cline-no">&nbsp;</span>
342
342
  <span class="cline-any cline-no">&nbsp;</span>
343
343
  <span class="cline-any cline-no">&nbsp;</span>
@@ -345,7 +345,7 @@
345
345
  <span class="cline-any cline-no">&nbsp;</span>
346
346
  <span class="cline-any cline-neutral">&nbsp;</span>
347
347
  <span class="cline-any cline-neutral">&nbsp;</span>
348
- <span class="cline-any cline-yes">41x</span>
348
+ <span class="cline-any cline-yes">44x</span>
349
349
  <span class="cline-any cline-yes">6x</span>
350
350
  <span class="cline-any cline-yes">6x</span>
351
351
  <span class="cline-any cline-yes">6x</span>
@@ -354,7 +354,7 @@
354
354
  <span class="cline-any cline-yes">5x</span>
355
355
  <span class="cline-any cline-neutral">&nbsp;</span>
356
356
  <span class="cline-any cline-neutral">&nbsp;</span>
357
- <span class="cline-any cline-yes">41x</span>
357
+ <span class="cline-any cline-yes">44x</span>
358
358
  <span class="cline-any cline-yes">1x</span>
359
359
  <span class="cline-any cline-no">&nbsp;</span>
360
360
  <span class="cline-any cline-no">&nbsp;</span>
@@ -520,7 +520,7 @@ exports.getFromMemoryDoc = async (db, viewName) =&gt; {
520
520
  <div class='footer quiet pad2 space-top1 center small'>
521
521
  Code coverage generated by
522
522
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
523
- at Fri Jun 10 2022 13:42:57 GMT+0000 (Coordinated Universal Time)
523
+ at Mon Jun 13 2022 15:58:57 GMT+0000 (Coordinated Universal Time)
524
524
  </div>
525
525
  <script src="../../../prettify.js"></script>
526
526
  <script>