@budibase/server 1.0.48 → 1.0.49-alpha.3

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 (289) hide show
  1. package/builder/assets/{index.e083dcaf.js → index.21e57eb4.js} +234 -231
  2. package/builder/assets/index.83c0944f.css +1 -0
  3. package/builder/assets/{vendor.f9faf6ab.js → vendor.d526bfe8.js} +12 -12
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +2338 -2028
  6. package/coverage/coverage-final.json +100 -95
  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 +210 -126
  10. package/coverage/lcov-report/api/controllers/auth.js.html +18 -6
  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 +4 -4
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +72 -36
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +53 -53
  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/api/controllers/migrations.js.html +119 -0
  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 +48 -33
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +26 -26
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +95 -158
  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 +39 -57
  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 +46 -31
  40. package/coverage/lcov-report/api/controllers/table/index.js.html +53 -77
  41. package/coverage/lcov-report/api/controllers/table/internal.js.html +59 -35
  42. package/coverage/lcov-report/api/controllers/table/utils.js.html +217 -73
  43. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/user.js.html +30 -24
  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 +8 -8
  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 +18 -18
  65. package/coverage/lcov-report/api/routes/index.js.html +3 -3
  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/api/routes/{hosting.js.html → migrations.js.html} +17 -14
  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 +17 -2
  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 +13 -19
  90. package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
  91. package/coverage/lcov-report/automations/steps/deleteRow.js.html +11 -20
  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 +13 -13
  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 +53 -26
  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 +15 -15
  123. package/coverage/lcov-report/db/index.js.html +3 -3
  124. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +18 -18
  125. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  126. package/coverage/lcov-report/db/linkedRows/index.js.html +38 -41
  127. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +15 -15
  128. package/coverage/lcov-report/db/newid.js.html +4 -4
  129. package/coverage/lcov-report/db/utils.js.html +86 -86
  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 +114 -99
  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 +166 -64
  139. package/coverage/lcov-report/middleware/builder.js.html +8 -8
  140. package/coverage/lcov-report/middleware/currentapp.js.html +29 -29
  141. package/coverage/lcov-report/middleware/index.html +30 -30
  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 +270 -42
  146. package/coverage/lcov-report/middleware/utils.js.html +2 -2
  147. package/coverage/lcov-report/threads/automation.js.html +1 -1
  148. package/coverage/lcov-report/threads/index.html +15 -15
  149. package/coverage/lcov-report/threads/index.js.html +10 -10
  150. package/coverage/lcov-report/threads/query.js.html +23 -8
  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 +26 -26
  157. package/coverage/lcov-report/utilities/index.html +19 -19
  158. package/coverage/lcov-report/utilities/index.js.html +25 -25
  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 +115 -79
  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 +141 -0
  170. package/coverage/lcov-report/utilities/usageQuota/index.js.html +356 -0
  171. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +302 -0
  172. package/coverage/lcov-report/{api/controllers/hosting.js.html → utilities/usageQuota/usageQuoteReset.js.html} +36 -48
  173. package/coverage/lcov-report/utilities/users.js.html +5 -5
  174. package/coverage/lcov-report/utilities/workerRequests.js.html +39 -108
  175. package/coverage/lcov.info +3656 -3057
  176. package/dist/api/controllers/application.js +61 -34
  177. package/dist/api/controllers/auth.js +4 -0
  178. package/dist/api/controllers/datasource.js +11 -0
  179. package/dist/api/controllers/migrations.js +21 -0
  180. package/dist/api/controllers/row/internal.js +30 -53
  181. package/dist/api/controllers/row/internalSearch.js +12 -4
  182. package/dist/api/controllers/row/staticFormula.js +147 -0
  183. package/dist/api/controllers/row/utils.js +6 -8
  184. package/dist/api/controllers/static/index.js +59 -10
  185. package/dist/api/controllers/table/bulkFormula.js +160 -0
  186. package/dist/api/controllers/table/index.js +12 -9
  187. package/dist/api/controllers/table/internal.js +9 -0
  188. package/dist/api/controllers/table/utils.js +41 -12
  189. package/dist/api/controllers/user.js +2 -0
  190. package/dist/api/routes/index.js +2 -2
  191. package/dist/api/routes/migrations.js +9 -0
  192. package/dist/api/routes/static.js +2 -1
  193. package/dist/app.js +35 -5
  194. package/dist/automations/steps/createRow.js +2 -4
  195. package/dist/automations/steps/deleteRow.js +1 -4
  196. package/dist/constants/index.js +7 -0
  197. package/dist/db/linkedRows/index.js +4 -5
  198. package/dist/definitions/datasource.js +1 -0
  199. package/dist/environment.js +2 -0
  200. package/dist/integrations/base/sql.js +13 -6
  201. package/dist/integrations/googlesheets.js +340 -0
  202. package/dist/integrations/index.js +3 -0
  203. package/dist/integrations/utils.js +57 -9
  204. package/dist/middleware/authorized.js +55 -30
  205. package/dist/middleware/usageQuota.js +80 -13
  206. package/dist/migrations/functions/appUrls.js +46 -0
  207. package/dist/migrations/functions/quotas1.js +50 -0
  208. package/dist/migrations/functions/usageQuotas/index.js +20 -0
  209. package/dist/migrations/functions/usageQuotas/syncApps.js +32 -0
  210. package/dist/migrations/functions/usageQuotas/syncRows.js +35 -0
  211. package/dist/migrations/functions/userEmailViewCasing.js +24 -0
  212. package/dist/migrations/index.js +62 -0
  213. package/dist/package.json +8 -5
  214. package/dist/tests/utilities/TestConfiguration.js +13 -6
  215. package/dist/threads/query.js +4 -0
  216. package/dist/tsconfig.tsbuildinfo +1 -1
  217. package/dist/utilities/rowProcessor/index.js +18 -11
  218. package/dist/utilities/rowProcessor/utils.js +14 -4
  219. package/dist/utilities/{usageQuota.js → usageQuota/index.js} +44 -31
  220. package/dist/utilities/usageQuota/rows.js +77 -0
  221. package/dist/utilities/usageQuota/usageQuoteReset.js +16 -0
  222. package/dist/utilities/workerRequests.js +0 -20
  223. package/nodemon.json +1 -1
  224. package/package.json +9 -6
  225. package/src/api/controllers/application.js +52 -24
  226. package/src/api/controllers/auth.js +4 -0
  227. package/src/api/controllers/datasource.js +12 -0
  228. package/src/api/controllers/migrations.js +13 -0
  229. package/src/api/controllers/row/internal.js +29 -50
  230. package/src/api/controllers/row/internalSearch.js +12 -4
  231. package/src/api/controllers/row/staticFormula.js +157 -0
  232. package/src/api/controllers/row/utils.js +6 -12
  233. package/src/api/controllers/static/index.js +63 -10
  234. package/src/api/controllers/table/bulkFormula.js +183 -0
  235. package/src/api/controllers/table/index.js +16 -24
  236. package/src/api/controllers/table/internal.js +9 -1
  237. package/src/api/controllers/table/utils.js +57 -9
  238. package/src/api/controllers/user.js +2 -0
  239. package/src/api/routes/index.js +2 -2
  240. package/src/api/routes/migrations.js +14 -0
  241. package/src/api/routes/static.js +5 -0
  242. package/src/api/routes/tests/application.spec.js +2 -2
  243. package/src/api/routes/tests/auth.spec.js +1 -2
  244. package/src/api/routes/tests/static.spec.js +98 -0
  245. package/src/app.ts +18 -5
  246. package/src/automations/steps/createRow.js +2 -4
  247. package/src/automations/steps/deleteRow.js +1 -4
  248. package/src/constants/index.js +9 -0
  249. package/src/db/linkedRows/index.js +4 -5
  250. package/src/definitions/common.ts +3 -0
  251. package/src/definitions/datasource.ts +3 -0
  252. package/src/environment.js +2 -0
  253. package/src/integrations/base/sql.ts +14 -7
  254. package/src/integrations/googlesheets.ts +353 -0
  255. package/src/integrations/index.ts +3 -0
  256. package/src/integrations/tests/sql.spec.js +16 -0
  257. package/src/integrations/utils.ts +71 -11
  258. package/src/middleware/authorized.js +64 -30
  259. package/src/middleware/tests/authorized.spec.js +6 -4
  260. package/src/middleware/tests/usageQuota.spec.js +18 -24
  261. package/src/middleware/usageQuota.js +91 -15
  262. package/src/migrations/functions/appUrls.ts +34 -0
  263. package/src/migrations/functions/quotas1.ts +20 -0
  264. package/src/migrations/functions/tests/appUrls.spec.js +29 -0
  265. package/src/migrations/functions/tests/quotas1.spec.js +27 -0
  266. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
  267. package/src/migrations/functions/usageQuotas/index.ts +8 -0
  268. package/src/migrations/functions/usageQuotas/syncApps.ts +18 -0
  269. package/src/migrations/functions/usageQuotas/syncRows.ts +21 -0
  270. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +37 -0
  271. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +43 -0
  272. package/src/migrations/functions/userEmailViewCasing.ts +13 -0
  273. package/src/migrations/index.ts +56 -0
  274. package/src/tests/utilities/TestConfiguration.js +14 -6
  275. package/src/threads/query.js +5 -0
  276. package/src/utilities/rowProcessor/index.js +24 -12
  277. package/src/utilities/rowProcessor/utils.js +23 -7
  278. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  279. package/src/utilities/usageQuota/index.js +92 -0
  280. package/src/utilities/usageQuota/rows.js +74 -0
  281. package/src/utilities/usageQuota/usageQuoteReset.js +18 -0
  282. package/src/utilities/workerRequests.js +0 -23
  283. package/builder/assets/index.39e01193.css +0 -1
  284. package/dist/api/controllers/hosting.js +0 -30
  285. package/dist/api/routes/hosting.js +0 -11
  286. package/src/api/controllers/hosting.js +0 -22
  287. package/src/api/routes/hosting.js +0 -13
  288. package/src/api/routes/tests/hosting.spec.js +0 -36
  289. package/src/utilities/usageQuota.js +0 -73
@@ -247,7 +247,7 @@ module.exports.bodySubResource = (main, sub) => {
247
247
  <div class='footer quiet pad2 space-top1 center small'>
248
248
  Code coverage generated by
249
249
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
250
- at Mon Jan 31 2022 13:42:59 GMT+0000 (Coordinated Universal Time)
250
+ at Mon Jan 31 2022 17:55:41 GMT+0000 (Coordinated Universal Time)
251
251
  </div>
252
252
  </div>
253
253
  <script src="../prettify.js"></script>
@@ -94,7 +94,7 @@ module.exports = async (ctx, next) =&gt; {
94
94
  <div class='footer quiet pad2 space-top1 center small'>
95
95
  Code coverage generated by
96
96
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
97
- at Mon Jan 31 2022 13:42:59 GMT+0000 (Coordinated Universal Time)
97
+ at Mon Jan 31 2022 17:55:41 GMT+0000 (Coordinated Universal Time)
98
98
  </div>
99
99
  </div>
100
100
  <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">92.1% </span>
26
+ <span class="strong">66.19% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>35/38</span>
28
+ <span class='fraction'>47/71</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">82.14% </span>
33
+ <span class="strong">50.98% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>23/28</span>
35
+ <span class='fraction'>26/51</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>4/4</span>
42
+ <span class='fraction'>4/8</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">91.66% </span>
47
+ <span class="strong">68.11% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>33/36</span>
49
+ <span class='fraction'>47/69</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>
@@ -145,8 +145,83 @@
145
145
  <a name='L86'></a><a href='#L86'>86</a>
146
146
  <a name='L87'></a><a href='#L87'>87</a>
147
147
  <a name='L88'></a><a href='#L88'>88</a>
148
- <a name='L89'></a><a href='#L89'>89</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
149
- <span class="cline-any cline-yes">24x</span>
148
+ <a name='L89'></a><a href='#L89'>89</a>
149
+ <a name='L90'></a><a href='#L90'>90</a>
150
+ <a name='L91'></a><a href='#L91'>91</a>
151
+ <a name='L92'></a><a href='#L92'>92</a>
152
+ <a name='L93'></a><a href='#L93'>93</a>
153
+ <a name='L94'></a><a href='#L94'>94</a>
154
+ <a name='L95'></a><a href='#L95'>95</a>
155
+ <a name='L96'></a><a href='#L96'>96</a>
156
+ <a name='L97'></a><a href='#L97'>97</a>
157
+ <a name='L98'></a><a href='#L98'>98</a>
158
+ <a name='L99'></a><a href='#L99'>99</a>
159
+ <a name='L100'></a><a href='#L100'>100</a>
160
+ <a name='L101'></a><a href='#L101'>101</a>
161
+ <a name='L102'></a><a href='#L102'>102</a>
162
+ <a name='L103'></a><a href='#L103'>103</a>
163
+ <a name='L104'></a><a href='#L104'>104</a>
164
+ <a name='L105'></a><a href='#L105'>105</a>
165
+ <a name='L106'></a><a href='#L106'>106</a>
166
+ <a name='L107'></a><a href='#L107'>107</a>
167
+ <a name='L108'></a><a href='#L108'>108</a>
168
+ <a name='L109'></a><a href='#L109'>109</a>
169
+ <a name='L110'></a><a href='#L110'>110</a>
170
+ <a name='L111'></a><a href='#L111'>111</a>
171
+ <a name='L112'></a><a href='#L112'>112</a>
172
+ <a name='L113'></a><a href='#L113'>113</a>
173
+ <a name='L114'></a><a href='#L114'>114</a>
174
+ <a name='L115'></a><a href='#L115'>115</a>
175
+ <a name='L116'></a><a href='#L116'>116</a>
176
+ <a name='L117'></a><a href='#L117'>117</a>
177
+ <a name='L118'></a><a href='#L118'>118</a>
178
+ <a name='L119'></a><a href='#L119'>119</a>
179
+ <a name='L120'></a><a href='#L120'>120</a>
180
+ <a name='L121'></a><a href='#L121'>121</a>
181
+ <a name='L122'></a><a href='#L122'>122</a>
182
+ <a name='L123'></a><a href='#L123'>123</a>
183
+ <a name='L124'></a><a href='#L124'>124</a>
184
+ <a name='L125'></a><a href='#L125'>125</a>
185
+ <a name='L126'></a><a href='#L126'>126</a>
186
+ <a name='L127'></a><a href='#L127'>127</a>
187
+ <a name='L128'></a><a href='#L128'>128</a>
188
+ <a name='L129'></a><a href='#L129'>129</a>
189
+ <a name='L130'></a><a href='#L130'>130</a>
190
+ <a name='L131'></a><a href='#L131'>131</a>
191
+ <a name='L132'></a><a href='#L132'>132</a>
192
+ <a name='L133'></a><a href='#L133'>133</a>
193
+ <a name='L134'></a><a href='#L134'>134</a>
194
+ <a name='L135'></a><a href='#L135'>135</a>
195
+ <a name='L136'></a><a href='#L136'>136</a>
196
+ <a name='L137'></a><a href='#L137'>137</a>
197
+ <a name='L138'></a><a href='#L138'>138</a>
198
+ <a name='L139'></a><a href='#L139'>139</a>
199
+ <a name='L140'></a><a href='#L140'>140</a>
200
+ <a name='L141'></a><a href='#L141'>141</a>
201
+ <a name='L142'></a><a href='#L142'>142</a>
202
+ <a name='L143'></a><a href='#L143'>143</a>
203
+ <a name='L144'></a><a href='#L144'>144</a>
204
+ <a name='L145'></a><a href='#L145'>145</a>
205
+ <a name='L146'></a><a href='#L146'>146</a>
206
+ <a name='L147'></a><a href='#L147'>147</a>
207
+ <a name='L148'></a><a href='#L148'>148</a>
208
+ <a name='L149'></a><a href='#L149'>149</a>
209
+ <a name='L150'></a><a href='#L150'>150</a>
210
+ <a name='L151'></a><a href='#L151'>151</a>
211
+ <a name='L152'></a><a href='#L152'>152</a>
212
+ <a name='L153'></a><a href='#L153'>153</a>
213
+ <a name='L154'></a><a href='#L154'>154</a>
214
+ <a name='L155'></a><a href='#L155'>155</a>
215
+ <a name='L156'></a><a href='#L156'>156</a>
216
+ <a name='L157'></a><a href='#L157'>157</a>
217
+ <a name='L158'></a><a href='#L158'>158</a>
218
+ <a name='L159'></a><a href='#L159'>159</a>
219
+ <a name='L160'></a><a href='#L160'>160</a>
220
+ <a name='L161'></a><a href='#L161'>161</a>
221
+ <a name='L162'></a><a href='#L162'>162</a>
222
+ <a name='L163'></a><a href='#L163'>163</a>
223
+ <a name='L164'></a><a href='#L164'>164</a>
224
+ <a name='L165'></a><a href='#L165'>165</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">24x</span>
150
225
  <span class="cline-any cline-yes">24x</span>
151
226
  <span class="cline-any cline-yes">24x</span>
152
227
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -158,9 +233,6 @@
158
233
  <span class="cline-any cline-yes">24x</span>
159
234
  <span class="cline-any cline-neutral">&nbsp;</span>
160
235
  <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-yes">24x</span>
162
- <span class="cline-any cline-neutral">&nbsp;</span>
163
- <span class="cline-any cline-neutral">&nbsp;</span>
164
236
  <span class="cline-any cline-neutral">&nbsp;</span>
165
237
  <span class="cline-any cline-neutral">&nbsp;</span>
166
238
  <span class="cline-any cline-yes">24x</span>
@@ -176,18 +248,15 @@
176
248
  <span class="cline-any cline-neutral">&nbsp;</span>
177
249
  <span class="cline-any cline-neutral">&nbsp;</span>
178
250
  <span class="cline-any cline-yes">4x</span>
179
- <span class="cline-any cline-yes">5x</span>
251
+ <span class="cline-any cline-yes">7x</span>
180
252
  <span class="cline-any cline-yes">4x</span>
181
253
  <span class="cline-any cline-neutral">&nbsp;</span>
182
254
  <span class="cline-any cline-neutral">&nbsp;</span>
183
255
  <span class="cline-any cline-neutral">&nbsp;</span>
184
256
  <span class="cline-any cline-neutral">&nbsp;</span>
185
257
  <span class="cline-any cline-yes">24x</span>
186
- <span class="cline-any cline-yes">11x</span>
187
- <span class="cline-any cline-neutral">&nbsp;</span>
188
- <span class="cline-any cline-neutral">&nbsp;</span>
189
- <span class="cline-any cline-yes">11x</span>
190
- <span class="cline-any cline-yes">7x</span>
258
+ <span class="cline-any cline-yes">10x</span>
259
+ <span class="cline-any cline-yes">6x</span>
191
260
  <span class="cline-any cline-neutral">&nbsp;</span>
192
261
  <span class="cline-any cline-neutral">&nbsp;</span>
193
262
  <span class="cline-any cline-yes">4x</span>
@@ -221,30 +290,109 @@
221
290
  <span class="cline-any cline-neutral">&nbsp;</span>
222
291
  <span class="cline-any cline-yes">3x</span>
223
292
  <span class="cline-any cline-neutral">&nbsp;</span>
224
- <span class="cline-any cline-yes">1x</span>
293
+ <span class="cline-any cline-no">&nbsp;</span>
225
294
  <span class="cline-any cline-neutral">&nbsp;</span>
226
295
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">2x</span>
296
+ <span class="cline-any cline-no">&nbsp;</span>
228
297
  <span class="cline-any cline-neutral">&nbsp;</span>
229
298
  <span class="cline-any cline-yes">3x</span>
230
299
  <span class="cline-any cline-yes">3x</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
301
+ <span class="cline-any cline-no">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-yes">24x</span>
306
+ <span class="cline-any cline-yes">3x</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
312
  <span class="cline-any cline-yes">3x</span>
313
+ <span class="cline-any cline-no">&nbsp;</span>
314
+ <span class="cline-any cline-no">&nbsp;</span>
232
315
  <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-yes">3x</span>
233
318
  <span class="cline-any cline-no">&nbsp;</span>
234
319
  <span class="cline-any cline-neutral">&nbsp;</span>
235
320
  <span class="cline-any cline-neutral">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-yes">3x</span>
324
+ <span class="cline-any cline-yes">3x</span>
325
+ <span class="cline-any cline-yes">3x</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-yes">3x</span>
329
+ <span class="cline-any cline-no">&nbsp;</span>
330
+ <span class="cline-any cline-no">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-yes">3x</span>
334
+ <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-yes">3x</span>
340
+ <span class="cline-any cline-yes">3x</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">24x</span>
345
+ <span class="cline-any cline-no">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-no">&nbsp;</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-neutral">&nbsp;</span>
350
+ <span class="cline-any cline-neutral">&nbsp;</span>
351
+ <span class="cline-any cline-neutral">&nbsp;</span>
352
+ <span class="cline-any cline-no">&nbsp;</span>
353
+ <span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-yes">24x</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-no">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-no">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-yes">24x</span>
367
+ <span class="cline-any cline-neutral">&nbsp;</span>
368
+ <span class="cline-any cline-yes">2x</span>
369
+ <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-no">&nbsp;</span>
372
+ <span class="cline-any cline-neutral">&nbsp;</span>
373
+ <span class="cline-any cline-neutral">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-yes">24x</span>
376
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-neutral">&nbsp;</span>
379
+ <span class="cline-any cline-yes">24x</span>
380
+ <span class="cline-any cline-neutral">&nbsp;</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-neutral">&nbsp;</span>
383
+ <span class="cline-any cline-yes">24x</span>
384
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
+ <span class="cline-any cline-yes">24x</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
388
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../db")
237
389
  const usageQuota = require("../utilities/usageQuota")
238
- const env = require("../environment")
239
- const { getTenantId } = require("@budibase/backend-core/tenancy")
390
+ const { getUniqueRows } = require("../utilities/usageQuota/rows")
240
391
  const {
241
392
  isExternalTable,
242
393
  isRowId: isExternalRowId,
243
394
  } = require("../integrations/utils")
244
395
  &nbsp;
245
- // tenants without limits
246
- const EXCLUDED_TENANTS = ["bb", "default", "bbtest", "bbstaging"]
247
- &nbsp;
248
396
  // currently only counting new writes and deletes
249
397
  const METHOD_MAP = {
250
398
  POST: 1,
@@ -253,13 +401,13 @@ const METHOD_MAP = {
253
401
  &nbsp;
254
402
  const DOMAIN_MAP = {
255
403
  rows: usageQuota.Properties.ROW,
256
- upload: usageQuota.Properties.UPLOAD,
257
- views: usageQuota.Properties.VIEW,
258
- users: usageQuota.Properties.USER,
404
+ // upload: usageQuota.Properties.UPLOAD, // doesn't work yet
405
+ // views: usageQuota.Properties.VIEW, // doesn't work yet
406
+ // users: usageQuota.Properties.USER, // doesn't work yet
259
407
  applications: usageQuota.Properties.APPS,
260
408
  // this will not be updated by endpoint calls
261
409
  // instead it will be updated by triggerInfo
262
- automationRuns: usageQuota.Properties.AUTOMATION,
410
+ // automationRuns: usageQuota.Properties.AUTOMATION, // doesn't work yet
263
411
  }
264
412
  &nbsp;
265
413
  function getProperty(url) {
@@ -271,10 +419,7 @@ function getProperty(url) {
271
419
  }
272
420
  &nbsp;
273
421
  module.exports = async (ctx, next) =&gt; {
274
- const tenantId = getTenantId()
275
- &nbsp;
276
- // if in development or a self hosted cloud usage quotas should not be executed
277
- if (env.isDev() || env.SELF_HOSTED || EXCLUDED_TENANTS.includes(tenantId)) {
422
+ if (!usageQuota.useQuotas()) {
278
423
  return next()
279
424
  }
280
425
  &nbsp;
@@ -307,20 +452,103 @@ module.exports = async (ctx, next) =&gt; {
307
452
  }
308
453
  &nbsp;
309
454
  // update usage for uploads to be the total size
310
- if (property === usageQuota.Properties.UPLOAD) {
455
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (property === usageQuota.Properties.UPLOAD) {
311
456
  const files =
312
- ctx.request.files.file.length &gt; 1
457
+ <span class="cstat-no" title="statement not covered" > ctx.request.files.file.length &gt; 1</span>
313
458
  ? Array.from(ctx.request.files.file)
314
- : <span class="branch-1 cbranch-no" title="branch not covered" >[ctx.request.files.file]</span>
315
- usage = files.map(file =&gt; file.size).reduce((total, size) =&gt; total + size)
459
+ : [ctx.request.files.file]
460
+ <span class="cstat-no" title="statement not covered" > usage = files.map(<span class="fstat-no" title="function not covered" >fi</span>le =&gt; <span class="cstat-no" title="statement not covered" >file.size)</span>.reduce(<span class="fstat-no" title="function not covered" >(t</span>otal, size) =&gt; <span class="cstat-no" title="statement not covered" >total + size)</span></span>
316
461
  }
317
462
  try {
318
- await usageQuota.update(property, usage)
319
- return next()
463
+ await performRequest(ctx, next, property, usage)
320
464
  } catch (err) {
321
465
  <span class="cstat-no" title="statement not covered" > ctx.throw(400, err)</span>
322
466
  }
323
467
  }
468
+ &nbsp;
469
+ const performRequest = async (ctx, next, property, usage) =&gt; {
470
+ const usageContext = {
471
+ skipNext: false,
472
+ skipUsage: false,
473
+ [usageQuota.Properties.APPS]: {},
474
+ }
475
+ &nbsp;
476
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (usage === -1) {
477
+ <span class="cstat-no" title="statement not covered" > if (PRE_DELETE[property]) {</span>
478
+ <span class="cstat-no" title="statement not covered" > await PRE_DELETE[property](ctx, usageContext)</span>
479
+ }
480
+ } else {
481
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (PRE_CREATE[property]) {
482
+ <span class="cstat-no" title="statement not covered" > await PRE_CREATE[property](ctx, usageContext)</span>
483
+ }
484
+ }
485
+ &nbsp;
486
+ // run the request
487
+ if (!usageContext.skipNext) {
488
+ await usageQuota.update(property, usage, { dryRun: true })
489
+ await next()
490
+ }
491
+ &nbsp;
492
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (usage === -1) {
493
+ <span class="cstat-no" title="statement not covered" > if (POST_DELETE[property]) {</span>
494
+ <span class="cstat-no" title="statement not covered" > await POST_DELETE[property](ctx, usageContext)</span>
495
+ }
496
+ } else {
497
+ if (POST_CREATE[property]) {
498
+ await POST_CREATE[property](ctx, usageContext)
499
+ }
500
+ }
501
+ &nbsp;
502
+ // update the usage
503
+ if (!usageContext.skipUsage) {
504
+ await usageQuota.update(property, usage)
505
+ }
506
+ }
507
+ &nbsp;
508
+ const appPreDelete = <span class="fstat-no" title="function not covered" >as</span>ync (ctx, usageContext) =&gt; {
509
+ <span class="cstat-no" title="statement not covered" > if (ctx.query.unpublish) {</span>
510
+ // don't run usage decrement for unpublish
511
+ <span class="cstat-no" title="statement not covered" > usageContext.skipUsage = true</span>
512
+ <span class="cstat-no" title="statement not covered" > return</span>
513
+ }
514
+ &nbsp;
515
+ // store the row count to delete
516
+ const rows = <span class="cstat-no" title="statement not covered" >await getUniqueRows([ctx.appId])</span>
517
+ <span class="cstat-no" title="statement not covered" > if (rows.length) {</span>
518
+ <span class="cstat-no" title="statement not covered" > usageContext[usageQuota.Properties.APPS] = { rowCount: rows.length }</span>
519
+ }
520
+ }
521
+ &nbsp;
522
+ const appPostDelete = <span class="fstat-no" title="function not covered" >as</span>ync (ctx, usageContext) =&gt; {
523
+ // delete the app rows from usage
524
+ const rowCount = <span class="cstat-no" title="statement not covered" >usageContext[usageQuota.Properties.APPS].rowCount</span>
525
+ <span class="cstat-no" title="statement not covered" > if (rowCount) {</span>
526
+ <span class="cstat-no" title="statement not covered" > await usageQuota.update(usageQuota.Properties.ROW, -rowCount)</span>
527
+ }
528
+ }
529
+ &nbsp;
530
+ const appPostCreate = async ctx =&gt; {
531
+ // app import &amp; template creation
532
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.request.body.useTemplate === "true") {
533
+ const rows = <span class="cstat-no" title="statement not covered" >await getUniqueRows([ctx.response.body.appId])</span>
534
+ const rowCount = <span class="cstat-no" title="statement not covered" >rows ? rows.length : 0</span>
535
+ <span class="cstat-no" title="statement not covered" > await usageQuota.update(usageQuota.Properties.ROW, rowCount)</span>
536
+ }
537
+ }
538
+ &nbsp;
539
+ const PRE_DELETE = {
540
+ [usageQuota.Properties.APPS]: appPreDelete,
541
+ }
542
+ &nbsp;
543
+ const POST_DELETE = {
544
+ [usageQuota.Properties.APPS]: appPostDelete,
545
+ }
546
+ &nbsp;
547
+ const PRE_CREATE = {}
548
+ &nbsp;
549
+ const POST_CREATE = {
550
+ [usageQuota.Properties.APPS]: appPostCreate,
551
+ }
324
552
  &nbsp;</pre></td></tr></table></pre>
325
553
 
326
554
  <div class='push'></div><!-- for sticky footer -->
@@ -328,7 +556,7 @@ module.exports = async (ctx, next) =&gt; {
328
556
  <div class='footer quiet pad2 space-top1 center small'>
329
557
  Code coverage generated by
330
558
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
331
- at Mon Jan 31 2022 13:42:59 GMT+0000 (Coordinated Universal Time)
559
+ at Mon Jan 31 2022 17:55:41 GMT+0000 (Coordinated Universal Time)
332
560
  </div>
333
561
  </div>
334
562
  <script src="../prettify.js"></script>
@@ -69,7 +69,7 @@
69
69
  <span class="cline-any cline-neutral">&nbsp;</span>
70
70
  <span class="cline-any cline-neutral">&nbsp;</span>
71
71
  <span class="cline-any cline-yes">29x</span>
72
- <span class="cline-any cline-yes">289x</span>
72
+ <span class="cline-any cline-yes">294x</span>
73
73
  <span class="cline-any cline-neutral">&nbsp;</span>
74
74
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const WEBHOOK_ENDPOINTS = new RegExp(
75
75
  ["webhooks/trigger", "webhooks/schema"].join("|")
@@ -85,7 +85,7 @@ exports.isWebhookEndpoint = ctx =&gt; {
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 13:42:59 GMT+0000 (Coordinated Universal Time)
88
+ at Mon Jan 31 2022 17:55:41 GMT+0000 (Coordinated Universal Time)
89
89
  </div>
90
90
  </div>
91
91
  <script src="../prettify.js"></script>
@@ -502,7 +502,7 @@ module.exports = (input, callback) =&gt; {
502
502
  <div class='footer quiet pad2 space-top1 center small'>
503
503
  Code coverage generated by
504
504
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
505
- at Mon Jan 31 2022 13:42:59 GMT+0000 (Coordinated Universal Time)
505
+ at Mon Jan 31 2022 17:55:41 GMT+0000 (Coordinated Universal Time)
506
506
  </div>
507
507
  </div>
508
508
  <script src="../prettify.js"></script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">84.55% </span>
26
+ <span class="strong">84.29% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>219/259</span>
28
+ <span class='fraction'>220/261</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">63.71% </span>
33
+ <span class="strong">63.47% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>72/113</span>
35
+ <span class='fraction'>73/115</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">85.03% </span>
47
+ <span class="strong">84.76% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>216/254</span>
49
+ <span class='fraction'>217/256</span>
50
50
  </div>
51
51
 
52
52
 
@@ -104,17 +104,17 @@
104
104
 
105
105
  <tr>
106
106
  <td class="file high" data-value="query.js"><a href="query.js.html">query.js</a></td>
107
- <td data-value="87.06" class="pic high">
108
- <div class="chart"><div class="cover-fill" style="width: 87%"></div><div class="cover-empty" style="width: 13%"></div></div>
107
+ <td data-value="86.44" class="pic high">
108
+ <div class="chart"><div class="cover-fill" style="width: 86%"></div><div class="cover-empty" style="width: 14%"></div></div>
109
109
  </td>
110
- <td data-value="87.06" class="pct high">87.06%</td>
111
- <td data-value="116" class="abs high">101/116</td>
112
- <td data-value="68.96" class="pct medium">68.96%</td>
113
- <td data-value="58" class="abs medium">40/58</td>
110
+ <td data-value="86.44" class="pct high">86.44%</td>
111
+ <td data-value="118" class="abs high">102/118</td>
112
+ <td data-value="68.33" class="pct medium">68.33%</td>
113
+ <td data-value="60" class="abs medium">41/60</td>
114
114
  <td data-value="92.3" class="pct high">92.3%</td>
115
115
  <td data-value="13" class="abs high">12/13</td>
116
- <td data-value="87.5" class="pct high">87.5%</td>
117
- <td data-value="112" class="abs high">98/112</td>
116
+ <td data-value="86.84" class="pct high">86.84%</td>
117
+ <td data-value="114" class="abs high">99/114</td>
118
118
  </tr>
119
119
 
120
120
  <tr>
@@ -140,7 +140,7 @@
140
140
  <div class='footer quiet pad2 space-top1 center small'>
141
141
  Code coverage generated by
142
142
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
143
- at Mon Jan 31 2022 13:42:59 GMT+0000 (Coordinated Universal Time)
143
+ at Mon Jan 31 2022 17:55:41 GMT+0000 (Coordinated Universal Time)
144
144
  </div>
145
145
  </div>
146
146
  <script src="../prettify.js"></script>
@@ -123,10 +123,10 @@
123
123
  <a name='L64'></a><a href='#L64'>64</a>
124
124
  <a name='L65'></a><a href='#L65'>65</a>
125
125
  <a name='L66'></a><a href='#L66'>66</a>
126
- <a name='L67'></a><a href='#L67'>67</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">34x</span>
127
- <span class="cline-any cline-yes">34x</span>
126
+ <a name='L67'></a><a href='#L67'>67</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">39x</span>
127
+ <span class="cline-any cline-yes">39x</span>
128
128
  <span class="cline-any cline-neutral">&nbsp;</span>
129
- <span class="cline-any cline-yes">34x</span>
129
+ <span class="cline-any cline-yes">39x</span>
130
130
  <span class="cline-any cline-neutral">&nbsp;</span>
131
131
  <span class="cline-any cline-neutral">&nbsp;</span>
132
132
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -148,14 +148,14 @@
148
148
  <span class="cline-any cline-neutral">&nbsp;</span>
149
149
  <span class="cline-any cline-neutral">&nbsp;</span>
150
150
  <span class="cline-any cline-neutral">&nbsp;</span>
151
- <span class="cline-any cline-yes">67x</span>
152
- <span class="cline-any cline-yes">67x</span>
153
- <span class="cline-any cline-yes">67x</span>
151
+ <span class="cline-any cline-yes">77x</span>
152
+ <span class="cline-any cline-yes">77x</span>
153
+ <span class="cline-any cline-yes">77x</span>
154
154
  <span class="cline-any cline-neutral">&nbsp;</span>
155
155
  <span class="cline-any cline-neutral">&nbsp;</span>
156
156
  <span class="cline-any cline-neutral">&nbsp;</span>
157
157
  <span class="cline-any cline-neutral">&nbsp;</span>
158
- <span class="cline-any cline-yes">67x</span>
158
+ <span class="cline-any cline-yes">77x</span>
159
159
  <span class="cline-any cline-no">&nbsp;</span>
160
160
  <span class="cline-any cline-neutral">&nbsp;</span>
161
161
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -187,8 +187,8 @@
187
187
  <span class="cline-any cline-neutral">&nbsp;</span>
188
188
  <span class="cline-any cline-neutral">&nbsp;</span>
189
189
  <span class="cline-any cline-neutral">&nbsp;</span>
190
- <span class="cline-any cline-yes">34x</span>
191
- <span class="cline-any cline-yes">34x</span>
190
+ <span class="cline-any cline-yes">39x</span>
191
+ <span class="cline-any cline-yes">39x</span>
192
192
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const workerFarm = require("worker-farm")
193
193
  const env = require("../environment")
194
194
  &nbsp;
@@ -262,7 +262,7 @@ module.exports.ThreadType = ThreadType
262
262
  <div class='footer quiet pad2 space-top1 center small'>
263
263
  Code coverage generated by
264
264
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
265
- at Mon Jan 31 2022 13:42:59 GMT+0000 (Coordinated Universal Time)
265
+ at Mon Jan 31 2022 17:55:41 GMT+0000 (Coordinated Universal Time)
266
266
  </div>
267
267
  </div>
268
268
  <script src="../prettify.js"></script>