@budibase/server 0.9.186 → 0.9.190-alpha.0

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 (309) hide show
  1. package/Dockerfile +7 -1
  2. package/LICENSE +1 -1
  3. package/__mocks__/mssql.ts +1 -1
  4. package/__mocks__/oracledb.ts +31 -0
  5. package/__mocks__/pg.ts +3 -0
  6. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  7. package/builder/assets/index.43f4c913.js +1316 -0
  8. package/builder/assets/index.7d405e74.css +1 -0
  9. package/builder/assets/oracle.66592424.png +0 -0
  10. package/builder/assets/vendor.470042a4.js +152 -0
  11. package/builder/assets/vendor.5e1fe644.css +1 -0
  12. package/builder/index.html +4 -4
  13. package/coverage/clover.xml +1520 -1087
  14. package/coverage/coverage-final.json +93 -89
  15. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  16. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  17. package/coverage/lcov-report/api/controllers/application.js.html +64 -13
  18. package/coverage/lcov-report/api/controllers/auth.js.html +19 -10
  19. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  20. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  23. package/coverage/lcov-report/api/controllers/datasource.js.html +232 -28
  24. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  25. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  26. package/coverage/lcov-report/api/controllers/index.html +91 -91
  27. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  29. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  30. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  31. package/coverage/lcov-report/api/controllers/query.js.html +53 -209
  32. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  33. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  34. package/coverage/lcov-report/api/controllers/row/external.js.html +17 -8
  35. package/coverage/lcov-report/api/controllers/row/index.html +26 -26
  36. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  37. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  38. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  39. package/coverage/lcov-report/api/controllers/row/utils.js.html +21 -30
  40. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  41. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  42. package/coverage/lcov-report/api/controllers/table/external.js.html +1001 -0
  43. package/coverage/lcov-report/api/controllers/table/index.html +56 -26
  44. package/coverage/lcov-report/api/controllers/table/index.js.html +80 -350
  45. package/coverage/lcov-report/api/controllers/table/internal.js.html +545 -0
  46. package/coverage/lcov-report/api/controllers/table/utils.js.html +175 -52
  47. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  48. package/coverage/lcov-report/api/controllers/user.js.html +390 -33
  49. package/coverage/lcov-report/api/controllers/view/exporters.js.html +19 -4
  50. package/coverage/lcov-report/api/controllers/view/index.html +22 -22
  51. package/coverage/lcov-report/api/controllers/view/index.js.html +52 -13
  52. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  53. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  54. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  55. package/coverage/lcov-report/api/index.html +1 -1
  56. package/coverage/lcov-report/api/index.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  68. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/index.html +4 -4
  70. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  76. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  82. package/coverage/lcov-report/api/routes/table.js.html +35 -2
  83. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  84. package/coverage/lcov-report/api/routes/user.js.html +17 -2
  85. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  86. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  87. package/coverage/lcov-report/automations/actions.js.html +2 -2
  88. package/coverage/lcov-report/automations/automationUtils.js.html +4 -4
  89. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  90. package/coverage/lcov-report/automations/index.html +35 -50
  91. package/coverage/lcov-report/automations/index.js.html +2 -2
  92. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  97. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  99. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/index.html +14 -14
  101. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  103. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  104. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  108. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  109. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  114. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  115. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  116. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  117. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  118. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  119. package/coverage/lcov-report/automations/utils.js.html +42 -12
  120. package/coverage/lcov-report/constants/index.html +5 -5
  121. package/coverage/lcov-report/constants/index.js.html +87 -21
  122. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  123. package/coverage/lcov-report/constants/screens.js.html +1 -1
  124. package/coverage/lcov-report/db/client.js.html +2 -2
  125. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  126. package/coverage/lcov-report/db/index.html +2 -2
  127. package/coverage/lcov-report/db/index.js.html +1 -1
  128. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  129. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  130. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  131. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  132. package/coverage/lcov-report/db/newid.js.html +3 -3
  133. package/coverage/lcov-report/db/utils.js.html +57 -57
  134. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  135. package/coverage/lcov-report/events/index.html +6 -6
  136. package/coverage/lcov-report/events/index.js.html +1 -1
  137. package/coverage/lcov-report/events/utils.js.html +5 -5
  138. package/coverage/lcov-report/index.html +108 -93
  139. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  140. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  141. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  142. package/coverage/lcov-report/middleware/authorized.js.html +58 -34
  143. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  144. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  145. package/coverage/lcov-report/middleware/index.html +27 -27
  146. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  147. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  148. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  149. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  150. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  151. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +90 -33
  152. package/coverage/lcov-report/threads/index.html +141 -0
  153. package/coverage/lcov-report/threads/index.js.html +278 -0
  154. package/coverage/lcov-report/threads/query.js.html +278 -0
  155. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  156. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  157. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  158. package/coverage/lcov-report/utilities/csvParser.js.html +144 -15
  159. package/coverage/lcov-report/utilities/global.js.html +26 -11
  160. package/coverage/lcov-report/utilities/index.html +48 -48
  161. package/coverage/lcov-report/utilities/index.js.html +47 -14
  162. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  163. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  164. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  165. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  166. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  167. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  168. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  169. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  170. package/coverage/lcov-report/utilities/security.js.html +3 -3
  171. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  172. package/coverage/lcov-report/utilities/users.js.html +1 -1
  173. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  174. package/coverage/lcov.info +2558 -1787
  175. package/dist/api/controllers/application.js +15 -1
  176. package/dist/api/controllers/auth.js +3 -3
  177. package/dist/api/controllers/datasource.js +67 -16
  178. package/dist/api/controllers/deploy/index.js +2 -0
  179. package/dist/api/controllers/dev.js +4 -1
  180. package/dist/api/controllers/query.js +30 -58
  181. package/dist/api/controllers/row/ExternalRequest.js +37 -14
  182. package/dist/api/controllers/row/external.js +3 -1
  183. package/dist/api/controllers/row/utils.js +6 -12
  184. package/dist/api/controllers/table/external.js +249 -0
  185. package/dist/api/controllers/table/index.js +49 -123
  186. package/dist/api/controllers/table/internal.js +150 -0
  187. package/dist/api/controllers/table/utils.js +62 -28
  188. package/dist/api/controllers/user.js +123 -11
  189. package/dist/api/controllers/view/exporters.js +4 -0
  190. package/dist/api/controllers/view/index.js +14 -2
  191. package/dist/api/routes/query.js +1 -1
  192. package/dist/api/routes/table.js +7 -1
  193. package/dist/api/routes/user.js +2 -1
  194. package/dist/app.js +2 -11
  195. package/dist/automations/bullboard.js +37 -10
  196. package/dist/automations/triggers.js +7 -3
  197. package/dist/automations/utils.js +11 -2
  198. package/dist/constants/index.js +19 -0
  199. package/dist/definitions/datasource.js +5 -0
  200. package/dist/environment.js +13 -0
  201. package/dist/integrations/base/IntegrationBase.js +2 -0
  202. package/dist/integrations/base/datasourcePlus.js +2 -0
  203. package/dist/integrations/base/sql.js +338 -180
  204. package/dist/integrations/base/sqlTable.js +143 -0
  205. package/dist/integrations/base/utils.js +30 -0
  206. package/dist/integrations/index.js +6 -0
  207. package/dist/integrations/microsoftSqlServer.js +117 -9
  208. package/dist/integrations/mysql.js +14 -84
  209. package/dist/integrations/oracle.js +345 -0
  210. package/dist/integrations/postgres.js +35 -28
  211. package/dist/integrations/utils.js +71 -9
  212. package/dist/middleware/authorized.js +22 -11
  213. package/dist/middleware/builder.js +4 -1
  214. package/dist/package.json +13 -8
  215. package/dist/tests/utilities/TestConfiguration.js +2 -1
  216. package/dist/{automations/thread.js → threads/automation.js} +26 -8
  217. package/dist/threads/index.js +64 -0
  218. package/dist/threads/query.js +64 -0
  219. package/dist/tsconfig.tsbuildinfo +1 -1
  220. package/dist/utilities/csvParser.js +46 -5
  221. package/dist/utilities/global.js +6 -2
  222. package/dist/utilities/index.js +11 -0
  223. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  224. package/dist/utilities/scriptRunner.js +4 -1
  225. package/package.json +14 -9
  226. package/scripts/dev/manage.js +1 -0
  227. package/scripts/integrations/mssql/data/Dockerfile +9 -0
  228. package/scripts/integrations/mssql/data/entrypoint.sh +24 -0
  229. package/scripts/integrations/mssql/data/setup.sql +54 -0
  230. package/scripts/integrations/mssql/docker-compose.yaml +12 -0
  231. package/scripts/integrations/mssql/reset.sh +3 -0
  232. package/scripts/integrations/oracle/docker-compose.yml +19 -0
  233. package/scripts/integrations/oracle/instantclient/linux/x86-64/basiclite-21.4.zip +0 -0
  234. package/scripts/integrations/oracle/instantclient/linux/x86-64/install.sh +23 -0
  235. package/scripts/integrations/oracle/oracle.md +90 -0
  236. package/scripts/integrations/postgres/docker-compose.yml +3 -3
  237. package/scripts/likeCypress.ts +33 -0
  238. package/src/api/controllers/application.js +18 -1
  239. package/src/api/controllers/auth.js +3 -0
  240. package/src/api/controllers/datasource.js +84 -16
  241. package/src/api/controllers/deploy/index.js +2 -0
  242. package/src/api/controllers/dev.js +4 -1
  243. package/src/api/controllers/query.js +29 -81
  244. package/src/api/controllers/row/ExternalRequest.ts +47 -16
  245. package/src/api/controllers/row/external.js +4 -1
  246. package/src/api/controllers/row/utils.js +8 -11
  247. package/src/api/controllers/table/external.js +307 -0
  248. package/src/api/controllers/table/index.js +47 -137
  249. package/src/api/controllers/table/internal.js +155 -0
  250. package/src/api/controllers/table/utils.js +74 -33
  251. package/src/api/controllers/user.js +132 -13
  252. package/src/api/controllers/view/exporters.js +5 -0
  253. package/src/api/controllers/view/index.js +15 -2
  254. package/src/api/routes/query.js +1 -0
  255. package/src/api/routes/table.js +11 -0
  256. package/src/api/routes/tests/datasource.spec.js +2 -2
  257. package/src/api/routes/tests/misc.spec.js +5 -1
  258. package/src/api/routes/tests/query.spec.js +0 -1
  259. package/src/api/routes/user.js +5 -0
  260. package/src/app.ts +2 -10
  261. package/src/automations/bullboard.js +28 -11
  262. package/src/automations/tests/automation.spec.js +3 -4
  263. package/src/automations/triggers.js +7 -3
  264. package/src/automations/utils.js +12 -2
  265. package/src/constants/index.js +22 -0
  266. package/src/definitions/common.ts +7 -1
  267. package/src/definitions/datasource.ts +10 -3
  268. package/src/environment.js +15 -0
  269. package/src/integrations/airtable.ts +2 -1
  270. package/src/integrations/arangodb.ts +2 -1
  271. package/src/integrations/base/IntegrationBase.ts +6 -0
  272. package/src/integrations/base/datasourcePlus.ts +9 -0
  273. package/src/integrations/base/sql.ts +362 -222
  274. package/src/integrations/base/sqlTable.ts +180 -0
  275. package/src/integrations/base/utils.ts +22 -0
  276. package/src/integrations/couchdb.ts +2 -1
  277. package/src/integrations/dynamodb.ts +2 -1
  278. package/src/integrations/elasticsearch.ts +2 -1
  279. package/src/integrations/index.ts +7 -0
  280. package/src/integrations/microsoftSqlServer.ts +145 -13
  281. package/src/integrations/mongodb.ts +2 -1
  282. package/src/integrations/mysql.ts +20 -94
  283. package/src/integrations/oracle.ts +445 -0
  284. package/src/integrations/postgres.ts +45 -35
  285. package/src/integrations/rest.ts +2 -1
  286. package/src/integrations/s3.ts +2 -1
  287. package/src/integrations/tests/microsoftSqlServer.spec.js +22 -15
  288. package/src/integrations/tests/oracle.spec.js +94 -0
  289. package/src/integrations/tests/postgres.spec.js +4 -0
  290. package/src/integrations/utils.ts +74 -8
  291. package/src/middleware/authorized.js +26 -18
  292. package/src/middleware/builder.js +4 -1
  293. package/src/middleware/tests/authorized.spec.js +2 -0
  294. package/src/tests/utilities/TestConfiguration.js +2 -1
  295. package/src/{automations/thread.js → threads/automation.js} +27 -8
  296. package/src/threads/index.js +66 -0
  297. package/src/threads/query.js +66 -0
  298. package/src/utilities/csvParser.js +48 -5
  299. package/src/utilities/global.js +7 -2
  300. package/src/utilities/index.js +11 -0
  301. package/src/utilities/queue/inMemoryQueue.js +7 -0
  302. package/src/utilities/scriptRunner.js +4 -1
  303. package/src/utilities/tests/__snapshots__/csvParser.spec.js.snap +0 -6
  304. package/src/utilities/tests/csvParser.spec.js +3 -0
  305. package/tsconfig.json +1 -1
  306. package/builder/assets/index.10556cc1.js +0 -201
  307. package/builder/assets/index.7469e1e4.css +0 -29
  308. package/builder/assets/vendor.278a305c.js +0 -9
  309. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">75.56% </span>
26
+ <span class="strong">79.45% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>34/45</span>
28
+ <span class='fraction'>58/73</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">70% </span>
33
+ <span class="strong">68.75% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>14/20</span>
35
+ <span class='fraction'>22/32</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">75% </span>
40
+ <span class="strong">80% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>9/12</span>
42
+ <span class='fraction'>12/15</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">75.56% </span>
47
+ <span class="strong">78.87% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>34/45</span>
49
+ <span class='fraction'>56/71</span>
50
50
  </div>
51
51
 
52
52
 
@@ -155,7 +155,50 @@
155
155
  <a name='L96'></a><a href='#L96'>96</a>
156
156
  <a name='L97'></a><a href='#L97'>97</a>
157
157
  <a name='L98'></a><a href='#L98'>98</a>
158
- <a name='L99'></a><a href='#L99'>99</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">35x</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">35x</span>
159
202
  <span class="cline-any cline-yes">35x</span>
160
203
  <span class="cline-any cline-neutral">&nbsp;</span>
161
204
  <span class="cline-any cline-yes">35x</span>
@@ -234,15 +277,57 @@
234
277
  <span class="cline-any cline-neutral">&nbsp;</span>
235
278
  <span class="cline-any cline-neutral">&nbsp;</span>
236
279
  <span class="cline-any cline-neutral">&nbsp;</span>
280
+ <span class="cline-any cline-yes">1x</span>
281
+ <span class="cline-any cline-no">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
283
+ <span class="cline-any cline-yes">1x</span>
284
+ <span class="cline-any cline-yes">1x</span>
285
+ <span class="cline-any cline-yes">4x</span>
286
+ <span class="cline-any cline-yes">1x</span>
287
+ <span class="cline-any cline-yes">4x</span>
288
+ <span class="cline-any cline-yes">4x</span>
289
+ <span class="cline-any cline-yes">4x</span>
290
+ <span class="cline-any cline-yes">4x</span>
291
+ <span class="cline-any cline-yes">4x</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-yes">1x</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-neutral">&nbsp;</span>
297
+ <span class="cline-any cline-neutral">&nbsp;</span>
237
298
  <span class="cline-any cline-yes">4x</span>
238
299
  <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
239
301
  <span class="cline-any cline-yes">4x</span>
302
+ <span class="cline-any cline-yes">1x</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
305
  <span class="cline-any cline-yes">4x</span>
306
+ <span class="cline-any cline-yes">9x</span>
241
307
  <span class="cline-any cline-neutral">&nbsp;</span>
242
308
  <span class="cline-any cline-neutral">&nbsp;</span>
243
309
  <span class="cline-any cline-yes">4x</span>
244
310
  <span class="cline-any cline-yes">4x</span>
245
311
  <span class="cline-any cline-yes">3x</span>
312
+ <span class="cline-any cline-yes">8x</span>
313
+ <span class="cline-any cline-yes">3x</span>
314
+ <span class="cline-any cline-yes">7x</span>
315
+ <span class="cline-any cline-no">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-yes">7x</span>
318
+ <span class="cline-any cline-yes">16x</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-yes">16x</span>
321
+ <span class="cline-any cline-yes">6x</span>
322
+ <span class="cline-any cline-neutral">&nbsp;</span>
323
+ <span class="cline-any cline-neutral">&nbsp;</span>
324
+ <span class="cline-any cline-yes">10x</span>
325
+ <span class="cline-any cline-no">&nbsp;</span>
326
+ <span class="cline-any cline-no">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-yes">3x</span>
246
331
  <span class="cline-any cline-neutral">&nbsp;</span>
247
332
  <span class="cline-any cline-yes">1x</span>
248
333
  <span class="cline-any cline-yes">1x</span>
@@ -253,6 +338,7 @@
253
338
  <span class="cline-any cline-neutral">&nbsp;</span>
254
339
  <span class="cline-any cline-neutral">&nbsp;</span>
255
340
  <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
342
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const csv = require("csvtojson")
257
343
  const { FieldTypes } = require("../constants")
258
344
  &nbsp;
@@ -306,7 +392,7 @@ function parse(csvString, parsers) {
306
392
  })
307
393
  result.subscribe(row =&gt; {
308
394
  // For each CSV row parse all the columns that need parsed
309
- for (let key in parsers) {
395
+ for (let key of Object.keys(parsers)) {
310
396
  if (!schema[key] || schema[key].success) {
311
397
  // get the validator for the column type
312
398
  const validator = VALIDATORS[parsers[key].type]
@@ -331,16 +417,58 @@ function parse(csvString, parsers) {
331
417
  })
332
418
  }
333
419
  &nbsp;
334
- async function transform({ schema, csvString }) {
420
+ function updateSchema({ schema, existingTable }) {
421
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!schema) {
422
+ <span class="cstat-no" title="statement not covered" > return schema</span>
423
+ }
424
+ const finalSchema = {}
425
+ const schemaKeyMap = {}
426
+ Object.keys(schema).forEach(key =&gt; (schemaKeyMap[key.toLowerCase()] = key))
427
+ for (let [key, field] of Object.entries(existingTable.schema)) {
428
+ const lcKey = key.toLowerCase()
429
+ const foundKey = schemaKeyMap[lcKey]
430
+ if (foundKey) {
431
+ finalSchema[key] = schema[foundKey]
432
+ finalSchema[key].type = field.type
433
+ }
434
+ }
435
+ return finalSchema
436
+ }
437
+ &nbsp;
438
+ async function transform({ schema, csvString, existingTable }) {
335
439
  const colParser = {}
336
440
  &nbsp;
337
- for (let key in schema) {
441
+ // make sure the table has all the columns required for import
442
+ if (existingTable) {
443
+ schema = updateSchema({ schema, existingTable })
444
+ }
445
+ &nbsp;
446
+ for (let key of Object.keys(schema)) {
338
447
  colParser[key] = PARSERS[schema[key].type] || schema[key].type
339
448
  }
340
449
  &nbsp;
341
450
  try {
342
- const json = await csv({ colParser }).fromString(csvString)
343
- return json
451
+ const data = await csv({ colParser }).fromString(csvString)
452
+ const schemaKeyMap = {}
453
+ Object.keys(schema).forEach(key =&gt; (schemaKeyMap[key.toLowerCase()] = key))
454
+ for (let element of data) {
455
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!data) {
456
+ <span class="cstat-no" title="statement not covered" > continue</span>
457
+ }
458
+ for (let key of Object.keys(element)) {
459
+ const mappedKey = schemaKeyMap[key.toLowerCase()]
460
+ // isn't a column in the table, remove it
461
+ if (mappedKey == null) {
462
+ delete element[key]
463
+ }
464
+ // casing is different, fix it in row
465
+ else <span class="missing-if-branch" title="if path not taken" >I</span>if (key !== mappedKey) {
466
+ <span class="cstat-no" title="statement not covered" > element[mappedKey] = element[key]</span>
467
+ <span class="cstat-no" title="statement not covered" > delete element[key]</span>
468
+ }
469
+ }
470
+ }
471
+ return data
344
472
  } catch (err) {
345
473
  console.error(`Error transforming CSV to JSON for data import`, err)
346
474
  throw err
@@ -350,6 +478,7 @@ async function transform({ schema, csvString }) {
350
478
  module.exports = {
351
479
  parse,
352
480
  transform,
481
+ updateSchema,
353
482
  }
354
483
  &nbsp;</pre></td></tr></table></pre>
355
484
 
@@ -358,7 +487,7 @@ module.exports = {
358
487
  <div class='footer quiet pad2 space-top1 center small'>
359
488
  Code coverage generated by
360
489
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
361
- at Fri Nov 12 2021 13:13:12 GMT+0000 (Coordinated Universal Time)
490
+ at Thu Nov 25 2021 12:28:23 GMT+0000 (Coordinated Universal Time)
362
491
  </div>
363
492
  </div>
364
493
  <script src="../prettify.js"></script>
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">80% </span>
26
+ <span class="strong">81.03% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>44/55</span>
28
+ <span class='fraction'>47/58</span>
29
29
  </div>
30
30
 
31
31
 
@@ -37,16 +37,16 @@
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">71.43% </span>
40
+ <span class="strong">73.33% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/14</span>
42
+ <span class='fraction'>11/15</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">81.13% </span>
47
+ <span class="strong">82.14% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>43/53</span>
49
+ <span class='fraction'>46/56</span>
50
50
  </div>
51
51
 
52
52
 
@@ -153,7 +153,12 @@
153
153
  <a name='L94'></a><a href='#L94'>94</a>
154
154
  <a name='L95'></a><a href='#L95'>95</a>
155
155
  <a name='L96'></a><a href='#L96'>96</a>
156
- <a name='L97'></a><a href='#L97'>97</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
157
162
  <span class="cline-any cline-neutral">&nbsp;</span>
158
163
  <span class="cline-any cline-neutral">&nbsp;</span>
159
164
  <span class="cline-any cline-yes">39x</span>
@@ -204,6 +209,10 @@
204
209
  <span class="cline-any cline-yes">39x</span>
205
210
  <span class="cline-any cline-yes">2x</span>
206
211
  <span class="cline-any cline-yes">2x</span>
212
+ <span class="cline-any cline-neutral">&nbsp;</span>
213
+ <span class="cline-any cline-neutral">&nbsp;</span>
214
+ <span class="cline-any cline-yes">39x</span>
215
+ <span class="cline-any cline-yes">2x</span>
207
216
  <span class="cline-any cline-yes">2x</span>
208
217
  <span class="cline-any cline-neutral">&nbsp;</span>
209
218
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -229,6 +238,7 @@
229
238
  <span class="cline-any cline-neutral">&nbsp;</span>
230
239
  <span class="cline-any cline-yes">7x</span>
231
240
  <span class="cline-any cline-yes">7x</span>
241
+ <span class="cline-any cline-yes">7x</span>
232
242
  <span class="cline-any cline-neutral">&nbsp;</span>
233
243
  <span class="cline-any cline-yes">32x</span>
234
244
  <span class="cline-any cline-no">&nbsp;</span>
@@ -284,7 +294,7 @@ exports.updateAppRole = (appId, user) =&gt; {
284
294
  }
285
295
  &nbsp;
286
296
  function processUser(appId, user) {
287
- <span class="missing-if-branch" title="else path not taken" >E</span>if (user) {
297
+ if (user) {
288
298
  delete user.password
289
299
  }
290
300
  return exports.updateAppRole(appId, user)
@@ -297,9 +307,13 @@ exports.getCachedSelf = async (ctx, appId) =&gt; {
297
307
  return processUser(appId, user)
298
308
  }
299
309
  &nbsp;
300
- exports.getGlobalUser = async (appId, userId) =&gt; {
310
+ exports.getRawGlobalUser = async userId =&gt; {
301
311
  const db = getGlobalDB()
302
- let user = await db.get(getGlobalIDFromUserMetadataID(userId))
312
+ return db.get(getGlobalIDFromUserMetadataID(userId))
313
+ }
314
+ &nbsp;
315
+ exports.getGlobalUser = async (appId, userId) =&gt; {
316
+ let user = await exports.getRawGlobalUser(userId)
303
317
  return processUser(appId, user)
304
318
  }
305
319
  &nbsp;
@@ -324,6 +338,7 @@ exports.getGlobalUsers = async (appId = <span class="branch-0 cbranch-no" title=
324
338
  .filter(user =&gt; user != null)
325
339
  .map(user =&gt; {
326
340
  delete user.password
341
+ delete user.forceResetPassword
327
342
  return user
328
343
  })
329
344
  <span class="missing-if-branch" title="if path not taken" >I</span>if (!appId) {
@@ -352,7 +367,7 @@ exports.getGlobalUsersFromMetadata = async (appId, users) =&gt; {
352
367
  <div class='footer quiet pad2 space-top1 center small'>
353
368
  Code coverage generated by
354
369
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
355
- at Fri Nov 12 2021 13:13:12 GMT+0000 (Coordinated Universal Time)
370
+ at Thu Nov 25 2021 12:28:23 GMT+0000 (Coordinated Universal Time)
356
371
  </div>
357
372
  </div>
358
373
  <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">71.82% </span>
26
+ <span class="strong">72.34% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>209/291</span>
28
+ <span class='fraction'>238/329</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">54.21% </span>
33
+ <span class="strong">54.54% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>58/107</span>
35
+ <span class='fraction'>66/121</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">66.67% </span>
40
+ <span class="strong">67.74% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>38/57</span>
42
+ <span class='fraction'>42/62</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">71.68% </span>
47
+ <span class="strong">72.04% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>205/286</span>
49
+ <span class='fraction'>232/322</span>
50
50
  </div>
51
51
 
52
52
 
@@ -119,70 +119,70 @@
119
119
 
120
120
  <tr>
121
121
  <td class="file medium" data-value="csvParser.js"><a href="csvParser.js.html">csvParser.js</a></td>
122
- <td data-value="75.56" class="pic medium">
123
- <div class="chart"><div class="cover-fill" style="width: 75%"></div><div class="cover-empty" style="width: 25%"></div></div>
122
+ <td data-value="79.45" class="pic medium">
123
+ <div class="chart"><div class="cover-fill" style="width: 79%"></div><div class="cover-empty" style="width: 21%"></div></div>
124
124
  </td>
125
- <td data-value="75.56" class="pct medium">75.56%</td>
126
- <td data-value="45" class="abs medium">34/45</td>
127
- <td data-value="70" class="pct medium">70%</td>
128
- <td data-value="20" class="abs medium">14/20</td>
129
- <td data-value="75" class="pct medium">75%</td>
130
- <td data-value="12" class="abs medium">9/12</td>
131
- <td data-value="75.56" class="pct medium">75.56%</td>
132
- <td data-value="45" class="abs medium">34/45</td>
125
+ <td data-value="79.45" class="pct medium">79.45%</td>
126
+ <td data-value="73" class="abs medium">58/73</td>
127
+ <td data-value="68.75" class="pct medium">68.75%</td>
128
+ <td data-value="32" class="abs medium">22/32</td>
129
+ <td data-value="80" class="pct high">80%</td>
130
+ <td data-value="15" class="abs high">12/15</td>
131
+ <td data-value="78.87" class="pct medium">78.87%</td>
132
+ <td data-value="71" class="abs medium">56/71</td>
133
133
  </tr>
134
134
 
135
135
  <tr>
136
136
  <td class="file high" data-value="global.js"><a href="global.js.html">global.js</a></td>
137
- <td data-value="80" class="pic high">
138
- <div class="chart"><div class="cover-fill" style="width: 80%"></div><div class="cover-empty" style="width: 20%"></div></div>
137
+ <td data-value="81.03" class="pic high">
138
+ <div class="chart"><div class="cover-fill" style="width: 81%"></div><div class="cover-empty" style="width: 19%"></div></div>
139
139
  </td>
140
- <td data-value="80" class="pct high">80%</td>
141
- <td data-value="55" class="abs high">44/55</td>
140
+ <td data-value="81.03" class="pct high">81.03%</td>
141
+ <td data-value="58" class="abs high">47/58</td>
142
142
  <td data-value="68" class="pct medium">68%</td>
143
143
  <td data-value="25" class="abs medium">17/25</td>
144
- <td data-value="71.43" class="pct medium">71.43%</td>
145
- <td data-value="14" class="abs medium">10/14</td>
146
- <td data-value="81.13" class="pct high">81.13%</td>
147
- <td data-value="53" class="abs high">43/53</td>
144
+ <td data-value="73.33" class="pct medium">73.33%</td>
145
+ <td data-value="15" class="abs medium">11/15</td>
146
+ <td data-value="82.14" class="pct high">82.14%</td>
147
+ <td data-value="56" class="abs high">46/56</td>
148
148
  </tr>
149
149
 
150
150
  <tr>
151
151
  <td class="file medium" data-value="index.js"><a href="index.js.html">index.js</a></td>
152
- <td data-value="76.56" class="pic medium">
153
- <div class="chart"><div class="cover-fill" style="width: 76%"></div><div class="cover-empty" style="width: 24%"></div></div>
152
+ <td data-value="71.42" class="pic medium">
153
+ <div class="chart"><div class="cover-fill" style="width: 71%"></div><div class="cover-empty" style="width: 29%"></div></div>
154
154
  </td>
155
- <td data-value="76.56" class="pct medium">76.56%</td>
156
- <td data-value="64" class="abs medium">49/64</td>
157
- <td data-value="43.75" class="pct low">43.75%</td>
158
- <td data-value="16" class="abs low">7/16</td>
159
- <td data-value="78.57" class="pct medium">78.57%</td>
160
- <td data-value="14" class="abs medium">11/14</td>
161
- <td data-value="75.81" class="pct medium">75.81%</td>
162
- <td data-value="62" class="abs medium">47/62</td>
155
+ <td data-value="71.42" class="pct medium">71.42%</td>
156
+ <td data-value="70" class="abs medium">50/70</td>
157
+ <td data-value="38.88" class="pct low">38.88%</td>
158
+ <td data-value="18" class="abs low">7/18</td>
159
+ <td data-value="73.33" class="pct medium">73.33%</td>
160
+ <td data-value="15" class="abs medium">11/15</td>
161
+ <td data-value="70.58" class="pct medium">70.58%</td>
162
+ <td data-value="68" class="abs medium">48/68</td>
163
163
  </tr>
164
164
 
165
165
  <tr>
166
166
  <td class="file low" data-value="scriptRunner.js"><a href="scriptRunner.js.html">scriptRunner.js</a></td>
167
- <td data-value="25" class="pic low">
168
- <div class="chart"><div class="cover-fill" style="width: 25%"></div><div class="cover-empty" style="width: 75%"></div></div>
167
+ <td data-value="30.76" class="pic low">
168
+ <div class="chart"><div class="cover-fill" style="width: 30%"></div><div class="cover-empty" style="width: 70%"></div></div>
169
169
  </td>
170
- <td data-value="25" class="pct low">25%</td>
171
- <td data-value="12" class="abs low">3/12</td>
170
+ <td data-value="30.76" class="pct low">30.76%</td>
171
+ <td data-value="13" class="abs low">4/13</td>
172
172
  <td data-value="100" class="pct high">100%</td>
173
173
  <td data-value="0" class="abs high">0/0</td>
174
174
  <td data-value="0" class="pct low">0%</td>
175
175
  <td data-value="2" class="abs low">0/2</td>
176
- <td data-value="25" class="pct low">25%</td>
177
- <td data-value="12" class="abs low">3/12</td>
176
+ <td data-value="30.76" class="pct low">30.76%</td>
177
+ <td data-value="13" class="abs low">4/13</td>
178
178
  </tr>
179
179
 
180
180
  <tr>
181
181
  <td class="file high" data-value="security.js"><a href="security.js.html">security.js</a></td>
182
- <td data-value="82.76" class="pic high">
182
+ <td data-value="82.75" class="pic high">
183
183
  <div class="chart"><div class="cover-fill" style="width: 82%"></div><div class="cover-empty" style="width: 18%"></div></div>
184
184
  </td>
185
- <td data-value="82.76" class="pct high">82.76%</td>
185
+ <td data-value="82.75" class="pct high">82.75%</td>
186
186
  <td data-value="29" class="abs high">24/29</td>
187
187
  <td data-value="53.33" class="pct medium">53.33%</td>
188
188
  <td data-value="15" class="abs medium">8/15</td>
@@ -224,16 +224,16 @@
224
224
 
225
225
  <tr>
226
226
  <td class="file medium" data-value="workerRequests.js"><a href="workerRequests.js.html">workerRequests.js</a></td>
227
- <td data-value="66.04" class="pic medium">
227
+ <td data-value="66.03" class="pic medium">
228
228
  <div class="chart"><div class="cover-fill" style="width: 66%"></div><div class="cover-empty" style="width: 34%"></div></div>
229
229
  </td>
230
- <td data-value="66.04" class="pct medium">66.04%</td>
230
+ <td data-value="66.03" class="pct medium">66.03%</td>
231
231
  <td data-value="53" class="abs medium">35/53</td>
232
232
  <td data-value="44.44" class="pct low">44.44%</td>
233
233
  <td data-value="27" class="abs low">12/27</td>
234
234
  <td data-value="60" class="pct medium">60%</td>
235
235
  <td data-value="5" class="abs medium">3/5</td>
236
- <td data-value="66.04" class="pct medium">66.04%</td>
236
+ <td data-value="66.03" class="pct medium">66.03%</td>
237
237
  <td data-value="53" class="abs medium">35/53</td>
238
238
  </tr>
239
239
 
@@ -245,7 +245,7 @@
245
245
  <div class='footer quiet pad2 space-top1 center small'>
246
246
  Code coverage generated by
247
247
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
248
- at Fri Nov 12 2021 13:13:12 GMT+0000 (Coordinated Universal Time)
248
+ at Thu Nov 25 2021 12:28:23 GMT+0000 (Coordinated Universal Time)
249
249
  </div>
250
250
  </div>
251
251
  <script src="../prettify.js"></script>