@budibase/server 1.0.49-alpha.0 → 1.0.49-alpha.4

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 (239) hide show
  1. package/builder/assets/{index.dd9e386f.css → index.83c0944f.css} +1 -1
  2. package/builder/assets/{index.8184eed9.js → index.f763d886.js} +206 -205
  3. package/builder/assets/{vendor.3bd2f661.js → vendor.d526bfe8.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +1743 -1610
  6. package/coverage/coverage-final.json +90 -89
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +106 -106
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +21 -21
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +16 -16
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +27 -12
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +6 -6
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
  22. package/coverage/lcov-report/api/controllers/permission.js.html +15 -15
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/index.js.html +19 -19
  25. package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
  26. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  27. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/external.js.html +16 -16
  29. package/coverage/lcov-report/api/controllers/row/index.html +40 -25
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +83 -146
  32. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +41 -17
  33. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +551 -0
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +13 -13
  35. package/coverage/lcov-report/api/controllers/screen.js.html +7 -7
  36. package/coverage/lcov-report/api/controllers/script.js.html +4 -4
  37. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +629 -0
  38. package/coverage/lcov-report/api/controllers/table/external.js.html +12 -12
  39. package/coverage/lcov-report/api/controllers/table/index.html +45 -30
  40. package/coverage/lcov-report/api/controllers/table/index.js.html +23 -65
  41. package/coverage/lcov-report/api/controllers/table/internal.js.html +33 -15
  42. package/coverage/lcov-report/api/controllers/table/utils.js.html +161 -41
  43. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/user.js.html +20 -20
  45. package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
  46. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/index.js.html +14 -14
  48. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  49. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
  50. package/coverage/lcov-report/api/controllers/webhook.js.html +15 -15
  51. package/coverage/lcov-report/api/index.html +1 -1
  52. package/coverage/lcov-report/api/index.js.html +3 -3
  53. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.html +22 -7
  65. package/coverage/lcov-report/api/routes/index.js.html +10 -4
  66. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  69. package/coverage/lcov-report/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
  70. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  83. package/coverage/lcov-report/automations/actions.js.html +24 -24
  84. package/coverage/lcov-report/automations/automationUtils.js.html +5 -5
  85. package/coverage/lcov-report/automations/bullboard.js.html +16 -16
  86. package/coverage/lcov-report/automations/index.html +1 -1
  87. package/coverage/lcov-report/automations/index.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
  89. package/coverage/lcov-report/automations/steps/createRow.js.html +7 -7
  90. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  91. package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
  92. package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
  93. package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
  94. package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
  95. package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
  96. package/coverage/lcov-report/automations/steps/index.html +1 -1
  97. package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
  98. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
  99. package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
  100. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
  101. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
  102. package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
  103. package/coverage/lcov-report/automations/steps/updateRow.js.html +6 -6
  104. package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
  105. package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
  106. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  107. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  108. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  110. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  114. package/coverage/lcov-report/automations/triggers.js.html +18 -18
  115. package/coverage/lcov-report/automations/utils.js.html +32 -32
  116. package/coverage/lcov-report/constants/index.html +5 -5
  117. package/coverage/lcov-report/constants/index.js.html +42 -27
  118. package/coverage/lcov-report/constants/layouts.js.html +5 -5
  119. package/coverage/lcov-report/constants/screens.js.html +4 -4
  120. package/coverage/lcov-report/db/client.js.html +18 -18
  121. package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
  122. package/coverage/lcov-report/db/index.html +1 -1
  123. package/coverage/lcov-report/db/index.js.html +3 -3
  124. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +7 -7
  125. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  126. package/coverage/lcov-report/db/linkedRows/index.js.html +26 -29
  127. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +13 -13
  128. package/coverage/lcov-report/db/newid.js.html +4 -4
  129. package/coverage/lcov-report/db/utils.js.html +71 -71
  130. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  131. package/coverage/lcov-report/events/index.html +1 -1
  132. package/coverage/lcov-report/events/index.js.html +5 -5
  133. package/coverage/lcov-report/events/utils.js.html +3 -3
  134. package/coverage/lcov-report/index.html +61 -76
  135. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  136. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  137. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  138. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  139. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  140. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  141. package/coverage/lcov-report/middleware/index.html +11 -11
  142. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  143. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  144. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  145. package/coverage/lcov-report/middleware/usageQuota.js.html +6 -12
  146. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  147. package/coverage/lcov-report/threads/automation.js.html +1 -1
  148. package/coverage/lcov-report/threads/index.html +1 -1
  149. package/coverage/lcov-report/threads/index.js.html +10 -10
  150. package/coverage/lcov-report/threads/query.js.html +1 -1
  151. package/coverage/lcov-report/threads/utils.js.html +14 -14
  152. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  153. package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
  154. package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
  155. package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
  156. package/coverage/lcov-report/utilities/global.js.html +14 -14
  157. package/coverage/lcov-report/utilities/index.html +1 -1
  158. package/coverage/lcov-report/utilities/index.js.html +24 -24
  159. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
  160. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  161. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  163. package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
  164. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +80 -44
  165. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +75 -27
  166. package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
  167. package/coverage/lcov-report/utilities/security.js.html +8 -8
  168. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  169. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  170. package/coverage/lcov-report/utilities/usageQuota/index.js.html +10 -10
  171. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  173. package/coverage/lcov-report/utilities/users.js.html +5 -5
  174. package/coverage/lcov-report/utilities/workerRequests.js.html +12 -12
  175. package/coverage/lcov.info +2545 -2257
  176. package/dist/api/controllers/application.js +18 -20
  177. package/dist/api/controllers/migrations.js +21 -0
  178. package/dist/api/controllers/row/internal.js +30 -53
  179. package/dist/api/controllers/row/internalSearch.js +12 -4
  180. package/dist/api/controllers/row/staticFormula.js +147 -0
  181. package/dist/api/controllers/table/bulkFormula.js +160 -0
  182. package/dist/api/controllers/table/index.js +3 -6
  183. package/dist/api/controllers/table/internal.js +7 -0
  184. package/dist/api/controllers/table/utils.js +32 -10
  185. package/dist/api/routes/index.js +2 -0
  186. package/dist/api/routes/migrations.js +9 -0
  187. package/dist/app.js +35 -5
  188. package/dist/constants/index.js +4 -0
  189. package/dist/db/linkedRows/index.js +4 -5
  190. package/dist/environment.js +1 -0
  191. package/dist/middleware/usageQuota.js +0 -2
  192. package/dist/migrations/functions/appUrls.js +46 -0
  193. package/dist/migrations/functions/quotas1.js +50 -0
  194. package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
  195. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +11 -5
  196. package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +14 -8
  197. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  198. package/dist/migrations/index.js +62 -0
  199. package/dist/package.json +4 -4
  200. package/dist/tests/utilities/TestConfiguration.js +3 -0
  201. package/dist/tsconfig.tsbuildinfo +1 -1
  202. package/dist/utilities/rowProcessor/index.js +18 -11
  203. package/dist/utilities/rowProcessor/utils.js +14 -4
  204. package/package.json +5 -5
  205. package/src/api/controllers/application.js +3 -3
  206. package/src/api/controllers/migrations.js +13 -0
  207. package/src/api/controllers/row/internal.js +29 -50
  208. package/src/api/controllers/row/internalSearch.js +12 -4
  209. package/src/api/controllers/row/staticFormula.js +157 -0
  210. package/src/api/controllers/table/bulkFormula.js +183 -0
  211. package/src/api/controllers/table/index.js +3 -17
  212. package/src/api/controllers/table/internal.js +7 -1
  213. package/src/api/controllers/table/utils.js +48 -8
  214. package/src/api/routes/index.js +2 -0
  215. package/src/api/routes/migrations.js +14 -0
  216. package/src/app.ts +18 -5
  217. package/src/constants/index.js +5 -0
  218. package/src/db/linkedRows/index.js +4 -5
  219. package/src/definitions/common.ts +3 -0
  220. package/src/environment.js +1 -0
  221. package/src/middleware/usageQuota.js +0 -2
  222. package/src/migrations/functions/appUrls.ts +34 -0
  223. package/src/migrations/functions/quotas1.ts +20 -0
  224. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  225. package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
  226. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  227. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  228. package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +3 -3
  229. package/src/migrations/{usageQuotas/syncRows.js → functions/usageQuotas/syncRows.ts} +5 -5
  230. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
  231. package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
  232. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  233. package/src/migrations/index.ts +56 -0
  234. package/src/tests/utilities/TestConfiguration.js +4 -0
  235. package/src/utilities/rowProcessor/index.js +24 -12
  236. package/src/utilities/rowProcessor/utils.js +23 -7
  237. package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
  238. package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
  239. package/src/migrations/usageQuotas/index.js +0 -24
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">59.52% </span>
26
+ <span class="strong">57.69% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>75/126</span>
28
+ <span class='fraction'>75/130</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">45.74% </span>
33
+ <span class="strong">43% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>43/94</span>
35
+ <span class='fraction'>43/100</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">52.63% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/19</span>
42
+ <span class='fraction'>10/20</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">61.66% </span>
47
+ <span class="strong">60.16% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>74/120</span>
49
+ <span class='fraction'>74/123</span>
50
50
  </div>
51
51
 
52
52
 
@@ -398,26 +398,38 @@
398
398
  <a name='L339'></a><a href='#L339'>339</a>
399
399
  <a name='L340'></a><a href='#L340'>340</a>
400
400
  <a name='L341'></a><a href='#L341'>341</a>
401
- <a name='L342'></a><a href='#L342'>342</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">37x</span>
402
- <span class="cline-any cline-yes">37x</span>
403
- <span class="cline-any cline-yes">37x</span>
404
- <span class="cline-any cline-yes">37x</span>
405
- <span class="cline-any cline-yes">37x</span>
406
- <span class="cline-any cline-yes">37x</span>
407
- <span class="cline-any cline-yes">37x</span>
401
+ <a name='L342'></a><a href='#L342'>342</a>
402
+ <a name='L343'></a><a href='#L343'>343</a>
403
+ <a name='L344'></a><a href='#L344'>344</a>
404
+ <a name='L345'></a><a href='#L345'>345</a>
405
+ <a name='L346'></a><a href='#L346'>346</a>
406
+ <a name='L347'></a><a href='#L347'>347</a>
407
+ <a name='L348'></a><a href='#L348'>348</a>
408
+ <a name='L349'></a><a href='#L349'>349</a>
409
+ <a name='L350'></a><a href='#L350'>350</a>
410
+ <a name='L351'></a><a href='#L351'>351</a>
411
+ <a name='L352'></a><a href='#L352'>352</a>
412
+ <a name='L353'></a><a href='#L353'>353</a>
413
+ <a name='L354'></a><a href='#L354'>354</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
414
+ <span class="cline-any cline-yes">39x</span>
415
+ <span class="cline-any cline-yes">39x</span>
416
+ <span class="cline-any cline-yes">39x</span>
417
+ <span class="cline-any cline-yes">39x</span>
418
+ <span class="cline-any cline-yes">39x</span>
419
+ <span class="cline-any cline-yes">39x</span>
408
420
  <span class="cline-any cline-neutral">&nbsp;</span>
409
421
  <span class="cline-any cline-neutral">&nbsp;</span>
410
422
  <span class="cline-any cline-neutral">&nbsp;</span>
411
423
  <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-yes">37x</span>
413
- <span class="cline-any cline-yes">37x</span>
424
+ <span class="cline-any cline-yes">39x</span>
425
+ <span class="cline-any cline-yes">39x</span>
414
426
  <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-yes">37x</span>
427
+ <span class="cline-any cline-yes">39x</span>
416
428
  <span class="cline-any cline-neutral">&nbsp;</span>
417
429
  <span class="cline-any cline-neutral">&nbsp;</span>
418
430
  <span class="cline-any cline-neutral">&nbsp;</span>
419
431
  <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-yes">37x</span>
432
+ <span class="cline-any cline-yes">39x</span>
421
433
  <span class="cline-any cline-neutral">&nbsp;</span>
422
434
  <span class="cline-any cline-neutral">&nbsp;</span>
423
435
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -578,15 +590,17 @@
578
590
  <span class="cline-any cline-neutral">&nbsp;</span>
579
591
  <span class="cline-any cline-yes">76x</span>
580
592
  <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-yes">37x</span>
593
+ <span class="cline-any cline-yes">39x</span>
582
594
  <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-yes">39x</span>
583
596
  <span class="cline-any cline-neutral">&nbsp;</span>
584
597
  <span class="cline-any cline-neutral">&nbsp;</span>
585
598
  <span class="cline-any cline-neutral">&nbsp;</span>
586
599
  <span class="cline-any cline-neutral">&nbsp;</span>
587
600
  <span class="cline-any cline-neutral">&nbsp;</span>
588
601
  <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-yes">37x</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-yes">39x</span>
590
604
  <span class="cline-any cline-neutral">&nbsp;</span>
591
605
  <span class="cline-any cline-yes">180x</span>
592
606
  <span class="cline-any cline-no">&nbsp;</span>
@@ -610,7 +624,7 @@
610
624
  <span class="cline-any cline-neutral">&nbsp;</span>
611
625
  <span class="cline-any cline-neutral">&nbsp;</span>
612
626
  <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">37x</span>
627
+ <span class="cline-any cline-yes">39x</span>
614
628
  <span class="cline-any cline-neutral">&nbsp;</span>
615
629
  <span class="cline-any cline-neutral">&nbsp;</span>
616
630
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -630,10 +644,11 @@
630
644
  <span class="cline-any cline-yes">165x</span>
631
645
  <span class="cline-any cline-neutral">&nbsp;</span>
632
646
  <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
647
  <span class="cline-any cline-yes">179x</span>
635
648
  <span class="cline-any cline-no">&nbsp;</span>
636
649
  <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
652
  <span class="cline-any cline-yes">179x</span>
638
653
  <span class="cline-any cline-neutral">&nbsp;</span>
639
654
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -657,7 +672,7 @@
657
672
  <span class="cline-any cline-neutral">&nbsp;</span>
658
673
  <span class="cline-any cline-neutral">&nbsp;</span>
659
674
  <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-yes">37x</span>
675
+ <span class="cline-any cline-yes">39x</span>
661
676
  <span class="cline-any cline-neutral">&nbsp;</span>
662
677
  <span class="cline-any cline-neutral">&nbsp;</span>
663
678
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -665,7 +680,6 @@
665
680
  <span class="cline-any cline-neutral">&nbsp;</span>
666
681
  <span class="cline-any cline-yes">103x</span>
667
682
  <span class="cline-any cline-yes">103x</span>
668
- <span class="cline-any cline-yes">103x</span>
669
683
  <span class="cline-any cline-yes">90x</span>
670
684
  <span class="cline-any cline-yes">90x</span>
671
685
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -707,13 +721,19 @@
707
721
  <span class="cline-any cline-neutral">&nbsp;</span>
708
722
  <span class="cline-any cline-neutral">&nbsp;</span>
709
723
  <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-yes">37x</span>
711
- <span class="cline-any cline-yes">8x</span>
712
- <span class="cline-any cline-yes">8x</span>
713
724
  <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-yes">8x</span>
715
- <span class="cline-any cline-yes">8x</span>
716
- <span class="cline-any cline-yes">8x</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-yes">39x</span>
727
+ <span class="cline-any cline-neutral">&nbsp;</span>
728
+ <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-yes">11x</span>
732
+ <span class="cline-any cline-yes">11x</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-yes">11x</span>
735
+ <span class="cline-any cline-yes">11x</span>
736
+ <span class="cline-any cline-yes">11x</span>
717
737
  <span class="cline-any cline-neutral">&nbsp;</span>
718
738
  <span class="cline-any cline-neutral">&nbsp;</span>
719
739
  <span class="cline-any cline-no">&nbsp;</span>
@@ -725,11 +745,15 @@
725
745
  <span class="cline-any cline-no">&nbsp;</span>
726
746
  <span class="cline-any cline-no">&nbsp;</span>
727
747
  <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
728
749
  <span class="cline-any cline-neutral">&nbsp;</span>
729
750
  <span class="cline-any cline-neutral">&nbsp;</span>
730
751
  <span class="cline-any cline-no">&nbsp;</span>
731
752
  <span class="cline-any cline-no">&nbsp;</span>
732
753
  <span class="cline-any cline-no">&nbsp;</span>
754
+ <span class="cline-any cline-neutral">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-no">&nbsp;</span>
733
757
  <span class="cline-any cline-no">&nbsp;</span>
734
758
  <span class="cline-any cline-no">&nbsp;</span>
735
759
  <span class="cline-any cline-no">&nbsp;</span>
@@ -921,6 +945,8 @@ function processAutoColumn(
921
945
  }
922
946
  exports.processAutoColumn = processAutoColumn
923
947
  &nbsp;
948
+ exports.processFormulas = processFormulas
949
+ &nbsp;
924
950
  /**
925
951
  * This will coerce a value to the correct types based on the type transform map
926
952
  * @param {object} row The value to coerce
@@ -970,11 +996,12 @@ exports.inputProcessing = (
970
996
  }
971
997
  continue
972
998
  }
973
- // specific case to delete formula values if they get saved
974
- // type coercion cannot completely remove the field, so have to do it here
999
+ // remove any formula values, they are to be generated
975
1000
  <span class="missing-if-branch" title="if path not taken" >I</span>if (field.type === FieldTypes.FORMULA) {
976
1001
  <span class="cstat-no" title="statement not covered" > delete clonedRow[key]</span>
977
- } else {
1002
+ }
1003
+ // otherwise coerce what is there to correct types
1004
+ else {
978
1005
  clonedRow[key] = exports.coerce(value, field.type)
979
1006
  }
980
1007
  }
@@ -991,7 +1018,7 @@ exports.inputProcessing = (
991
1018
  /**
992
1019
  * This function enriches the input rows with anything they are supposed to contain, for example
993
1020
  * link records or attachment links.
994
- * @param {object} ctx the request which is looking for enriched rows.
1021
+ * @param {string} appId the app in which the request is looking for enriched rows.
995
1022
  * @param {object} table the table from which these rows came from originally, this is used to determine
996
1023
  * the schema of the rows and then enrich.
997
1024
  * @param {object[]|object} rows the rows which are to be enriched.
@@ -999,22 +1026,21 @@ exports.inputProcessing = (
999
1026
  * @returns {object[]|object} the enriched rows will be returned.
1000
1027
  */
1001
1028
  exports.outputProcessing = async (
1002
- ctx,
1029
+ { appId },
1003
1030
  table,
1004
1031
  rows,
1005
1032
  opts = { squash: true }
1006
1033
  ) =&gt; {
1007
- const appId = ctx.appId
1008
1034
  let wasArray = true
1009
1035
  if (!(rows instanceof Array)) {
1010
1036
  rows = [rows]
1011
1037
  wasArray = false
1012
1038
  }
1013
1039
  // attach any linked row information
1014
- let enriched = await linkRows.attachFullLinkedDocs(ctx, table, rows)
1040
+ let enriched = await linkRows.attachFullLinkedDocs(appId, table, rows)
1015
1041
  &nbsp;
1016
1042
  // process formulas
1017
- enriched = processFormulas(table, enriched)
1043
+ enriched = processFormulas(table, enriched, { dynamic: true })
1018
1044
  &nbsp;
1019
1045
  // update the attachments URL depending on hosting
1020
1046
  for (let [property, column] of Object.entries(table.schema)) {
@@ -1046,9 +1072,15 @@ exports.outputProcessing = async (
1046
1072
  * @param {any} row optional - the row being removed.
1047
1073
  * @param {any} rows optional - if multiple rows being deleted can do this in bulk.
1048
1074
  * @param {any} oldRow optional - if updating a row this will determine the difference.
1075
+ * @param {any} oldTable optional - if updating a table, can supply the old table to look for
1076
+ * deleted attachment columns.
1049
1077
  * @return {Promise&lt;void&gt;} When all attachments have been removed this will return.
1050
1078
  */
1051
- exports.cleanupAttachments = async (appId, table, { row, rows, oldRow }) =&gt; {
1079
+ exports.cleanupAttachments = async (
1080
+ appId,
1081
+ table,
1082
+ { row, rows, oldRow, oldTable }
1083
+ ) =&gt; {
1052
1084
  if (!isProdAppID(appId)) {
1053
1085
  const prodAppId = getDeployedAppID(appId)
1054
1086
  // if prod exists, then don't allow deleting
@@ -1063,12 +1095,16 @@ exports.cleanupAttachments = async (appId, table, { row, rows, oldRow }) =&gt; {
1063
1095
  <span class="cstat-no" title="statement not covered" > files = files.concat(row[key].map(<span class="fstat-no" title="function not covered" >at</span>tachment =&gt; <span class="cstat-no" title="statement not covered" >attachment.key)</span>)</span>
1064
1096
  }
1065
1097
  }
1066
- <span class="cstat-no" title="statement not covered" > for (let [key, schema] of Object.entries(table.schema)) {</span>
1098
+ const schemaToUse = <span class="cstat-no" title="statement not covered" >oldTable ? oldTable.schema : table.schema</span>
1099
+ <span class="cstat-no" title="statement not covered" > for (let [key, schema] of Object.entries(schemaToUse)) {</span>
1067
1100
  <span class="cstat-no" title="statement not covered" > if (schema.type !== FieldTypes.ATTACHMENT) {</span>
1068
1101
  <span class="cstat-no" title="statement not covered" > continue</span>
1069
1102
  }
1070
- // if updating, need to manage the differences
1071
- <span class="cstat-no" title="statement not covered" > if (oldRow &amp;&amp; row) {</span>
1103
+ // old table had this column, new table doesn't - delete it
1104
+ <span class="cstat-no" title="statement not covered" > if (oldTable &amp;&amp; !table.schema[key]) {</span>
1105
+ <span class="cstat-no" title="statement not covered" > rows.forEach(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; <span class="cstat-no" title="statement not covered" >addFiles(row, key))</span></span>
1106
+ } else <span class="cstat-no" title="statement not covered" >if (oldRow &amp;&amp; row) {</span>
1107
+ // if updating, need to manage the differences
1072
1108
  <span class="cstat-no" title="statement not covered" > files = files.concat(getRemovedAttachmentKeys(oldRow, row, key))</span>
1073
1109
  } else <span class="cstat-no" title="statement not covered" >if (row) {</span>
1074
1110
  <span class="cstat-no" title="statement not covered" > addFiles(row, key)</span>
@@ -1087,7 +1123,7 @@ exports.cleanupAttachments = async (appId, table, { row, rows, oldRow }) =&gt; {
1087
1123
  <div class='footer quiet pad2 space-top1 center small'>
1088
1124
  Code coverage generated by
1089
1125
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1090
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
1126
+ at Mon Jan 31 2022 19:12:04 GMT+0000 (Coordinated Universal Time)
1091
1127
  </div>
1092
1128
  </div>
1093
1129
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">83.33% </span>
26
+ <span class="strong">66.66% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/12</span>
28
+ <span class='fraction'>12/18</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">83.33% </span>
33
+ <span class="strong">50% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>5/6</span>
35
+ <span class='fraction'>9/18</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">50% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/2</span>
42
+ <span class='fraction'>1/1</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">90.9% </span>
47
+ <span class="strong">70.58% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/11</span>
49
+ <span class='fraction'>12/17</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line high'></div>
58
+ <div class='status-line medium'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -80,49 +80,97 @@
80
80
  <a name='L21'></a><a href='#L21'>21</a>
81
81
  <a name='L22'></a><a href='#L22'>22</a>
82
82
  <a name='L23'></a><a href='#L23'>23</a>
83
- <a name='L24'></a><a href='#L24'>24</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">37x</span>
84
- <span class="cline-any cline-yes">37x</span>
83
+ <a name='L24'></a><a href='#L24'>24</a>
84
+ <a name='L25'></a><a href='#L25'>25</a>
85
+ <a name='L26'></a><a href='#L26'>26</a>
86
+ <a name='L27'></a><a href='#L27'>27</a>
87
+ <a name='L28'></a><a href='#L28'>28</a>
88
+ <a name='L29'></a><a href='#L29'>29</a>
89
+ <a name='L30'></a><a href='#L30'>30</a>
90
+ <a name='L31'></a><a href='#L31'>31</a>
91
+ <a name='L32'></a><a href='#L32'>32</a>
92
+ <a name='L33'></a><a href='#L33'>33</a>
93
+ <a name='L34'></a><a href='#L34'>34</a>
94
+ <a name='L35'></a><a href='#L35'>35</a>
95
+ <a name='L36'></a><a href='#L36'>36</a>
96
+ <a name='L37'></a><a href='#L37'>37</a>
97
+ <a name='L38'></a><a href='#L38'>38</a>
98
+ <a name='L39'></a><a href='#L39'>39</a>
99
+ <a name='L40'></a><a href='#L40'>40</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
100
+ <span class="cline-any cline-yes">39x</span>
101
+ <span class="cline-any cline-neutral">&nbsp;</span>
102
+ <span class="cline-any cline-neutral">&nbsp;</span>
103
+ <span class="cline-any cline-neutral">&nbsp;</span>
104
+ <span class="cline-any cline-neutral">&nbsp;</span>
105
+ <span class="cline-any cline-yes">39x</span>
106
+ <span class="cline-any cline-neutral">&nbsp;</span>
107
+ <span class="cline-any cline-neutral">&nbsp;</span>
108
+ <span class="cline-any cline-neutral">&nbsp;</span>
85
109
  <span class="cline-any cline-neutral">&nbsp;</span>
110
+ <span class="cline-any cline-yes">267x</span>
111
+ <span class="cline-any cline-yes">267x</span>
112
+ <span class="cline-any cline-yes">164x</span>
113
+ <span class="cline-any cline-yes">164x</span>
86
114
  <span class="cline-any cline-neutral">&nbsp;</span>
115
+ <span class="cline-any cline-yes">267x</span>
116
+ <span class="cline-any cline-yes">776x</span>
117
+ <span class="cline-any cline-yes">776x</span>
87
118
  <span class="cline-any cline-neutral">&nbsp;</span>
88
119
  <span class="cline-any cline-neutral">&nbsp;</span>
89
- <span class="cline-any cline-yes">37x</span>
90
- <span class="cline-any cline-yes">121x</span>
91
- <span class="cline-any cline-yes">121x</span>
92
- <span class="cline-any cline-yes">18x</span>
93
120
  <span class="cline-any cline-neutral">&nbsp;</span>
94
- <span class="cline-any cline-yes">121x</span>
95
- <span class="cline-any cline-yes">370x</span>
96
- <span class="cline-any cline-yes">370x</span>
97
121
  <span class="cline-any cline-neutral">&nbsp;</span>
122
+ <span class="cline-any cline-yes">776x</span>
98
123
  <span class="cline-any cline-neutral">&nbsp;</span>
124
+ <span class="cline-any cline-neutral">&nbsp;</span>
125
+ <span class="cline-any cline-no">&nbsp;</span>
126
+ <span class="cline-any cline-no">&nbsp;</span>
127
+ <span class="cline-any cline-no">&nbsp;</span>
128
+ <span class="cline-any cline-no">&nbsp;</span>
99
129
  <span class="cline-any cline-no">&nbsp;</span>
100
130
  <span class="cline-any cline-neutral">&nbsp;</span>
101
131
  <span class="cline-any cline-neutral">&nbsp;</span>
102
132
  <span class="cline-any cline-neutral">&nbsp;</span>
103
133
  <span class="cline-any cline-neutral">&nbsp;</span>
104
- <span class="cline-any cline-yes">121x</span>
105
134
  <span class="cline-any cline-neutral">&nbsp;</span>
106
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { FieldTypes } = require("../../constants")
135
+ <span class="cline-any cline-neutral">&nbsp;</span>
136
+ <span class="cline-any cline-yes">267x</span>
137
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { FieldTypes, FormulaTypes } = require("../../constants")
107
139
  const { processStringSync } = require("@budibase/string-templates")
108
140
  &nbsp;
109
141
  /**
110
142
  * Looks through the rows provided and finds formulas - which it then processes.
111
143
  */
112
- exports.processFormulas = (table, rows) =&gt; {
144
+ exports.processFormulas = (
145
+ table,
146
+ rows,
147
+ { dynamic, contextRows } = { dynamic: true }
148
+ ) =&gt; {
113
149
  const single = !Array.isArray(rows)
114
150
  if (single) {
115
151
  rows = [rows]
152
+ contextRows = contextRows ? [contextRows] : contextRows
116
153
  }
117
154
  for (let [column, schema] of Object.entries(table.schema)) {
118
- if (schema.type !== FieldTypes.FORMULA) {
155
+ const isStatic = schema.formulaType === FormulaTypes.STATIC
156
+ if (
157
+ schema.type !== FieldTypes.FORMULA ||
158
+ (<span class="branch-1 cbranch-no" title="branch not covered" >dynamic </span>&amp;&amp; <span class="branch-2 cbranch-no" title="branch not covered" >isStatic)</span> ||
159
+ (<span class="branch-3 cbranch-no" title="branch not covered" >!dynamic </span>&amp;&amp; <span class="branch-4 cbranch-no" title="branch not covered" >!isStatic)</span>
160
+ ) {
119
161
  continue
120
162
  }
121
163
  // iterate through rows and process formula
122
- <span class="cstat-no" title="statement not covered" > rows = rows.map(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
123
- ...row,
124
- [column]: processStringSync(schema.formula, row),
125
- }))
164
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; rows.length; i++) {</span>
165
+ <span class="cstat-no" title="statement not covered" > if (schema.formula) {</span>
166
+ let row = <span class="cstat-no" title="statement not covered" >rows[i]</span>
167
+ let context = <span class="cstat-no" title="statement not covered" >contextRows ? contextRows[i] : row</span>
168
+ <span class="cstat-no" title="statement not covered" > rows[i] = {</span>
169
+ ...row,
170
+ [column]: processStringSync(schema.formula, context),
171
+ }
172
+ }
173
+ }
126
174
  }
127
175
  return single ? rows[0] : rows
128
176
  }
@@ -133,7 +181,7 @@ exports.processFormulas = (table, rows) =&gt; {
133
181
  <div class='footer quiet pad2 space-top1 center small'>
134
182
  Code coverage generated by
135
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
136
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
184
+ at Mon Jan 31 2022 19:12:04 GMT+0000 (Coordinated Universal Time)
137
185
  </div>
138
186
  </div>
139
187
  <script src="../../prettify.js"></script>
@@ -81,9 +81,9 @@
81
81
  <a name='L22'></a><a href='#L22'>22</a>
82
82
  <a name='L23'></a><a href='#L23'>23</a>
83
83
  <a name='L24'></a><a href='#L24'>24</a>
84
- <a name='L25'></a><a href='#L25'>25</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">37x</span>
85
- <span class="cline-any cline-yes">37x</span>
86
- <span class="cline-any cline-yes">37x</span>
84
+ <a name='L25'></a><a href='#L25'>25</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
85
+ <span class="cline-any cline-yes">39x</span>
86
+ <span class="cline-any cline-yes">39x</span>
87
87
  <span class="cline-any cline-neutral">&nbsp;</span>
88
88
  <span class="cline-any cline-neutral">&nbsp;</span>
89
89
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -104,7 +104,7 @@
104
104
  <span class="cline-any cline-neutral">&nbsp;</span>
105
105
  <span class="cline-any cline-neutral">&nbsp;</span>
106
106
  <span class="cline-any cline-neutral">&nbsp;</span>
107
- <span class="cline-any cline-yes">37x</span>
107
+ <span class="cline-any cline-yes">39x</span>
108
108
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const fetch = require("node-fetch")
109
109
  const { VM, VMScript } = require("vm2")
110
110
  const JS_TIMEOUT_MS = 1000
@@ -136,7 +136,7 @@ module.exports = ScriptRunner
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
139
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
139
+ at Mon Jan 31 2022 19:12:04 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  </div>
142
142
  <script src="../prettify.js"></script>
@@ -132,19 +132,19 @@
132
132
  <span class="cline-any cline-neutral">&nbsp;</span>
133
133
  <span class="cline-any cline-neutral">&nbsp;</span>
134
134
  <span class="cline-any cline-neutral">&nbsp;</span>
135
- <span class="cline-any cline-yes">36x</span>
135
+ <span class="cline-any cline-yes">38x</span>
136
136
  <span class="cline-any cline-neutral">&nbsp;</span>
137
137
  <span class="cline-any cline-neutral">&nbsp;</span>
138
138
  <span class="cline-any cline-neutral">&nbsp;</span>
139
- <span class="cline-any cline-yes">36x</span>
140
- <span class="cline-any cline-yes">36x</span>
139
+ <span class="cline-any cline-yes">38x</span>
140
+ <span class="cline-any cline-yes">38x</span>
141
141
  <span class="cline-any cline-neutral">&nbsp;</span>
142
- <span class="cline-any cline-yes">36x</span>
142
+ <span class="cline-any cline-yes">38x</span>
143
143
  <span class="cline-any cline-neutral">&nbsp;</span>
144
144
  <span class="cline-any cline-neutral">&nbsp;</span>
145
145
  <span class="cline-any cline-neutral">&nbsp;</span>
146
146
  <span class="cline-any cline-neutral">&nbsp;</span>
147
- <span class="cline-any cline-yes">36x</span>
147
+ <span class="cline-any cline-yes">38x</span>
148
148
  <span class="cline-any cline-yes">4x</span>
149
149
  <span class="cline-any cline-yes">84x</span>
150
150
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -170,7 +170,7 @@
170
170
  <span class="cline-any cline-neutral">&nbsp;</span>
171
171
  <span class="cline-any cline-neutral">&nbsp;</span>
172
172
  <span class="cline-any cline-neutral">&nbsp;</span>
173
- <span class="cline-any cline-yes">36x</span>
173
+ <span class="cline-any cline-yes">38x</span>
174
174
  <span class="cline-any cline-yes">4x</span>
175
175
  <span class="cline-any cline-yes">4x</span>
176
176
  <span class="cline-any cline-yes">4x</span>
@@ -196,7 +196,7 @@
196
196
  <span class="cline-any cline-yes">4x</span>
197
197
  <span class="cline-any cline-neutral">&nbsp;</span>
198
198
  <span class="cline-any cline-neutral">&nbsp;</span>
199
- <span class="cline-any cline-yes">36x</span>
199
+ <span class="cline-any cline-yes">38x</span>
200
200
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const {
201
201
  PermissionLevels,
202
202
  PermissionTypes,
@@ -274,7 +274,7 @@ exports.CURRENTLY_SUPPORTED_LEVELS = CURRENTLY_SUPPORTED_LEVELS
274
274
  <div class='footer quiet pad2 space-top1 center small'>
275
275
  Code coverage generated by
276
276
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
277
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
277
+ at Mon Jan 31 2022 19:12:04 GMT+0000 (Coordinated Universal Time)
278
278
  </div>
279
279
  </div>
280
280
  <script src="../prettify.js"></script>
@@ -85,7 +85,7 @@
85
85
  <div class='footer quiet pad2 space-top1 center small'>
86
86
  Code coverage generated by
87
87
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
88
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
88
+ at Mon Jan 31 2022 19:12:04 GMT+0000 (Coordinated Universal Time)
89
89
  </div>
90
90
  </div>
91
91
  <script src="../prettify.js"></script>
@@ -125,7 +125,7 @@
125
125
  <div class='footer quiet pad2 space-top1 center small'>
126
126
  Code coverage generated by
127
127
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
128
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
128
+ at Mon Jan 31 2022 19:12:04 GMT+0000 (Coordinated Universal Time)
129
129
  </div>
130
130
  </div>
131
131
  <script src="../../prettify.js"></script>