@budibase/server 1.0.123-alpha.0 → 1.0.123

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 (330) hide show
  1. package/builder/assets/index.68a7f4e3.css +6 -0
  2. package/builder/assets/index.8d4a5b33.js +1291 -0
  3. package/builder/assets/{vendor.5240f480.js → vendor.8e34a169.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +1763 -758
  6. package/coverage/coverage-final.json +43 -28
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +3 -8
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +4 -9
  9. package/coverage/lcov-report/api/controllers/application.js.html +1436 -0
  10. package/coverage/lcov-report/api/controllers/auth.js.html +3 -8
  11. package/coverage/lcov-report/api/controllers/automation.js.html +3 -8
  12. package/coverage/lcov-report/api/controllers/backup.js.html +3 -8
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +3 -8
  14. package/coverage/lcov-report/api/controllers/component.js.html +3 -8
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +6 -11
  16. package/coverage/lcov-report/api/controllers/dev.js.html +3 -8
  17. package/coverage/lcov-report/api/controllers/index.html +26 -16
  18. package/coverage/lcov-report/api/controllers/integration.js.html +3 -8
  19. package/coverage/lcov-report/api/controllers/layout.js.html +3 -8
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -8
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +3 -8
  22. package/coverage/lcov-report/api/controllers/permission.js.html +3 -8
  23. package/coverage/lcov-report/api/controllers/query/index.html +26 -16
  24. package/coverage/lcov-report/api/controllers/query/index.js.html +713 -0
  25. package/coverage/lcov-report/api/controllers/query/validation.js.html +3 -8
  26. package/coverage/lcov-report/api/controllers/role.js.html +5 -10
  27. package/coverage/lcov-report/api/controllers/routing.js.html +4 -9
  28. package/coverage/lcov-report/api/controllers/row/external.js.html +3 -8
  29. package/coverage/lcov-report/api/controllers/row/index.html +35 -25
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +524 -0
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +24 -32
  32. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +16 -21
  33. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +19 -24
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +19 -33
  35. package/coverage/lcov-report/api/controllers/screen.js.html +4 -9
  36. package/coverage/lcov-report/api/controllers/script.js.html +3 -8
  37. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +50 -55
  38. package/coverage/lcov-report/api/controllers/table/external.js.html +3 -8
  39. package/coverage/lcov-report/api/controllers/table/index.html +44 -19
  40. package/coverage/lcov-report/api/controllers/table/index.js.html +15 -20
  41. package/coverage/lcov-report/api/controllers/table/internal.js.html +620 -0
  42. package/coverage/lcov-report/api/controllers/table/utils.js.html +1331 -0
  43. package/coverage/lcov-report/api/controllers/templates.js.html +3 -8
  44. package/coverage/lcov-report/api/controllers/user.js.html +3 -8
  45. package/coverage/lcov-report/api/controllers/view/exporters.js.html +3 -8
  46. package/coverage/lcov-report/api/controllers/view/index.html +3 -8
  47. package/coverage/lcov-report/api/controllers/view/index.js.html +5 -10
  48. package/coverage/lcov-report/api/controllers/view/utils.js.html +3 -8
  49. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -8
  50. package/coverage/lcov-report/api/controllers/webhook.js.html +5 -10
  51. package/coverage/lcov-report/api/index.html +13 -18
  52. package/coverage/lcov-report/api/index.js.html +8 -28
  53. package/coverage/lcov-report/api/routes/analytics.js.html +3 -8
  54. package/coverage/lcov-report/api/routes/apikeys.js.html +3 -8
  55. package/coverage/lcov-report/api/routes/application.js.html +179 -0
  56. package/coverage/lcov-report/api/routes/auth.js.html +3 -8
  57. package/coverage/lcov-report/api/routes/automation.js.html +3 -8
  58. package/coverage/lcov-report/api/routes/backup.js.html +3 -8
  59. package/coverage/lcov-report/api/routes/cloud.js.html +3 -8
  60. package/coverage/lcov-report/api/routes/component.js.html +3 -8
  61. package/coverage/lcov-report/api/routes/datasource.js.html +3 -8
  62. package/coverage/lcov-report/api/routes/deploy.js.html +3 -8
  63. package/coverage/lcov-report/api/routes/dev.js.html +4 -9
  64. package/coverage/lcov-report/api/routes/index.html +68 -13
  65. package/coverage/lcov-report/api/routes/index.js.html +266 -0
  66. package/coverage/lcov-report/api/routes/integration.js.html +3 -8
  67. package/coverage/lcov-report/api/routes/layout.js.html +3 -8
  68. package/coverage/lcov-report/api/routes/metadata.js.html +3 -8
  69. package/coverage/lcov-report/api/routes/migrations.js.html +3 -8
  70. package/coverage/lcov-report/api/routes/permission.js.html +3 -8
  71. package/coverage/lcov-report/api/routes/query.js.html +3 -8
  72. package/coverage/lcov-report/api/routes/role.js.html +3 -8
  73. package/coverage/lcov-report/api/routes/routing.js.html +3 -8
  74. package/coverage/lcov-report/api/routes/row.js.html +908 -0
  75. package/coverage/lcov-report/api/routes/screen.js.html +3 -8
  76. package/coverage/lcov-report/api/routes/script.js.html +3 -8
  77. package/coverage/lcov-report/{automations/steps/loop.js.html → api/routes/static.js.html} +80 -70
  78. package/coverage/lcov-report/api/routes/table.js.html +3 -8
  79. package/coverage/lcov-report/api/routes/templates.js.html +3 -8
  80. package/coverage/lcov-report/api/routes/user.js.html +3 -8
  81. package/coverage/lcov-report/api/routes/utils/index.html +3 -8
  82. package/coverage/lcov-report/api/routes/utils/validators.js.html +3 -8
  83. package/coverage/lcov-report/api/routes/view.js.html +3 -8
  84. package/coverage/lcov-report/api/routes/webhook.js.html +3 -8
  85. package/coverage/lcov-report/automations/actions.js.html +7 -21
  86. package/coverage/lcov-report/automations/automationUtils.js.html +23 -64
  87. package/coverage/lcov-report/automations/bullboard.js.html +3 -8
  88. package/coverage/lcov-report/automations/index.html +37 -27
  89. package/coverage/lcov-report/automations/index.js.html +3 -8
  90. package/coverage/lcov-report/automations/steps/bash.js.html +3 -8
  91. package/coverage/lcov-report/automations/steps/createRow.js.html +380 -0
  92. package/coverage/lcov-report/automations/steps/delay.js.html +3 -8
  93. package/coverage/lcov-report/automations/steps/deleteRow.js.html +347 -0
  94. package/coverage/lcov-report/automations/steps/discord.js.html +3 -8
  95. package/coverage/lcov-report/automations/steps/executeQuery.js.html +3 -8
  96. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -8
  97. package/coverage/lcov-report/automations/steps/filter.js.html +3 -8
  98. package/coverage/lcov-report/automations/steps/index.html +41 -31
  99. package/coverage/lcov-report/automations/steps/integromat.js.html +3 -8
  100. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +4 -9
  101. package/coverage/lcov-report/automations/steps/queryRows.js.html +4 -9
  102. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +3 -8
  103. package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -8
  104. package/coverage/lcov-report/automations/steps/slack.js.html +3 -8
  105. package/coverage/lcov-report/automations/steps/updateRow.js.html +3 -8
  106. package/coverage/lcov-report/automations/steps/utils.js.html +9 -14
  107. package/coverage/lcov-report/automations/steps/zapier.js.html +3 -8
  108. package/coverage/lcov-report/automations/triggerInfo/app.js.html +3 -8
  109. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +3 -8
  110. package/coverage/lcov-report/automations/triggerInfo/index.html +3 -8
  111. package/coverage/lcov-report/automations/triggerInfo/index.js.html +3 -8
  112. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +3 -8
  113. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +3 -8
  114. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +3 -8
  115. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +3 -8
  116. package/coverage/lcov-report/automations/triggers.js.html +11 -16
  117. package/coverage/lcov-report/automations/utils.js.html +665 -0
  118. package/coverage/lcov-report/block-navigation.js +0 -8
  119. package/coverage/lcov-report/constants/index.html +3 -8
  120. package/coverage/lcov-report/constants/index.js.html +42 -41
  121. package/coverage/lcov-report/constants/layouts.js.html +3 -8
  122. package/coverage/lcov-report/constants/screens.js.html +3 -8
  123. package/coverage/lcov-report/db/inMemoryView.js.html +3 -8
  124. package/coverage/lcov-report/db/index.html +3 -8
  125. package/coverage/lcov-report/db/index.js.html +4 -9
  126. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +23 -25
  127. package/coverage/lcov-report/db/linkedRows/index.html +12 -17
  128. package/coverage/lcov-report/db/linkedRows/index.js.html +17 -22
  129. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +7 -12
  130. package/coverage/lcov-report/db/newid.js.html +6 -11
  131. package/coverage/lcov-report/db/utils.js.html +79 -84
  132. package/coverage/lcov-report/events/AutomationEmitter.js.html +9 -14
  133. package/coverage/lcov-report/events/index.html +3 -8
  134. package/coverage/lcov-report/events/index.js.html +4 -9
  135. package/coverage/lcov-report/events/utils.js.html +13 -18
  136. package/coverage/lcov-report/index.html +132 -137
  137. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +3 -8
  138. package/coverage/lcov-report/integrations/tests/index.html +3 -8
  139. package/coverage/lcov-report/middleware/appInfo.js.html +3 -8
  140. package/coverage/lcov-report/middleware/authorized.js.html +458 -0
  141. package/coverage/lcov-report/middleware/builder.js.html +3 -8
  142. package/coverage/lcov-report/middleware/currentapp.js.html +15 -65
  143. package/coverage/lcov-report/middleware/index.html +50 -25
  144. package/coverage/lcov-report/middleware/joi-validator.js.html +4 -9
  145. package/coverage/lcov-report/middleware/publicApi.js.html +3 -8
  146. package/coverage/lcov-report/middleware/resourceId.js.html +3 -8
  147. package/coverage/lcov-report/middleware/selfhost.js.html +4 -9
  148. package/coverage/lcov-report/middleware/usageQuota.js.html +572 -0
  149. package/coverage/lcov-report/middleware/utils.js.html +3 -8
  150. package/coverage/lcov-report/sorter.js +0 -26
  151. package/coverage/lcov-report/threads/automation.js.html +90 -581
  152. package/coverage/lcov-report/threads/index.html +40 -30
  153. package/coverage/lcov-report/threads/index.js.html +296 -0
  154. package/coverage/lcov-report/threads/query.js.html +4 -9
  155. package/coverage/lcov-report/threads/utils.js.html +9 -17
  156. package/coverage/lcov-report/utilities/bcrypt.js.html +3 -8
  157. package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -8
  158. package/coverage/lcov-report/utilities/centralPath.js.html +3 -8
  159. package/coverage/lcov-report/utilities/csvParser.js.html +5 -10
  160. package/coverage/lcov-report/utilities/global.js.html +4 -9
  161. package/coverage/lcov-report/utilities/index.html +3 -8
  162. package/coverage/lcov-report/utilities/index.js.html +6 -11
  163. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -32
  164. package/coverage/lcov-report/utilities/queue/index.html +7 -12
  165. package/coverage/lcov-report/utilities/routing/index.html +3 -8
  166. package/coverage/lcov-report/utilities/routing/index.js.html +3 -8
  167. package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -32
  168. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +71 -67
  169. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +106 -27
  170. package/coverage/lcov-report/utilities/scriptRunner.js.html +3 -8
  171. package/coverage/lcov-report/utilities/security.js.html +4 -9
  172. package/coverage/lcov-report/utilities/statusCodes.js.html +3 -8
  173. package/coverage/lcov-report/utilities/usageQuota/index.html +34 -24
  174. package/coverage/lcov-report/utilities/usageQuota/index.js.html +359 -0
  175. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +39 -44
  176. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +3 -8
  177. package/coverage/lcov-report/utilities/users.js.html +3 -8
  178. package/coverage/lcov-report/utilities/workerRequests.js.html +4 -9
  179. package/coverage/lcov.info +3061 -1290
  180. package/dist/api/controllers/application.js +73 -145
  181. package/dist/api/controllers/deploy/index.js +36 -68
  182. package/dist/api/controllers/public/applications.js +9 -29
  183. package/dist/api/controllers/public/queries.js +7 -27
  184. package/dist/api/controllers/public/rows.js +12 -32
  185. package/dist/api/controllers/public/tables.js +2 -2
  186. package/dist/api/controllers/public/users.js +8 -8
  187. package/dist/api/controllers/public/utils.js +1 -1
  188. package/dist/api/controllers/query/import/index.js +3 -3
  189. package/dist/api/controllers/query/index.js +44 -57
  190. package/dist/api/controllers/row/ExternalRequest.js +27 -27
  191. package/dist/api/controllers/row/index.js +60 -83
  192. package/dist/api/controllers/row/internal.js +1 -2
  193. package/dist/api/controllers/row/utils.js +1 -2
  194. package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -3
  195. package/dist/api/controllers/table/bulkFormula.js +1 -2
  196. package/dist/api/controllers/table/internal.js +55 -40
  197. package/dist/api/controllers/table/utils.js +229 -271
  198. package/dist/api/index.js +0 -5
  199. package/dist/api/routes/application.js +13 -39
  200. package/dist/api/routes/index.js +56 -61
  201. package/dist/api/routes/public/index.js +9 -6
  202. package/dist/api/routes/public/queries.js +1 -1
  203. package/dist/api/routes/public/rows.js +1 -1
  204. package/dist/api/routes/public/tables.js +3 -3
  205. package/dist/api/routes/public/users.js +1 -1
  206. package/dist/api/routes/row.js +17 -43
  207. package/dist/api/routes/static.js +13 -40
  208. package/dist/api/routes/tests/utilities/TestFunctions.js +33 -75
  209. package/dist/app.js +4 -8
  210. package/dist/automations/actions.js +0 -3
  211. package/dist/automations/automationUtils.js +0 -10
  212. package/dist/automations/steps/createRow.js +12 -12
  213. package/dist/automations/steps/deleteRow.js +16 -13
  214. package/dist/automations/tests/utilities/index.js +11 -13
  215. package/dist/automations/utils.js +133 -187
  216. package/dist/constants/index.js +7 -5
  217. package/dist/db/linkedRows/LinkController.js +1 -0
  218. package/dist/definitions/datasource.js +0 -1
  219. package/dist/environment.js +3 -2
  220. package/dist/index.js +0 -4
  221. package/dist/integrations/base/sql.js +2 -2
  222. package/dist/integrations/base/sqlTable.js +2 -2
  223. package/dist/integrations/googlesheets.js +1 -1
  224. package/dist/integrations/index.js +0 -4
  225. package/dist/integrations/microsoftSqlServer.js +8 -8
  226. package/dist/integrations/mysql.js +9 -9
  227. package/dist/integrations/oracle.js +7 -7
  228. package/dist/integrations/postgres.js +7 -7
  229. package/dist/integrations/queries/sql.js +2 -2
  230. package/dist/integrations/rest.js +1 -1
  231. package/dist/middleware/authorized.js +51 -51
  232. package/dist/middleware/currentapp.js +1 -15
  233. package/dist/middleware/usageQuota.js +154 -0
  234. package/dist/migrations/functions/appUrls.js +1 -1
  235. package/dist/migrations/functions/quotas1.js +2 -6
  236. package/dist/migrations/functions/usageQuotas/index.js +4 -0
  237. package/dist/migrations/functions/usageQuotas/syncApps.js +7 -4
  238. package/dist/migrations/functions/usageQuotas/syncRows.js +8 -5
  239. package/dist/migrations/index.js +1 -17
  240. package/dist/package.json +4 -10
  241. package/dist/threads/automation.js +27 -149
  242. package/dist/threads/index.js +10 -36
  243. package/dist/threads/utils.js +0 -1
  244. package/dist/tsconfig.tsbuildinfo +1 -0
  245. package/dist/utilities/queue/inMemoryQueue.js +1 -6
  246. package/dist/utilities/rowProcessor/index.js +11 -6
  247. package/dist/utilities/rowProcessor/utils.js +27 -1
  248. package/dist/utilities/usageQuota/index.js +86 -0
  249. package/nodemon.json +1 -1
  250. package/package.json +9 -15
  251. package/scripts/dev/manage.js +0 -2
  252. package/src/api/controllers/{application.ts → application.js} +51 -118
  253. package/src/api/controllers/deploy/{index.ts → index.js} +29 -53
  254. package/src/api/controllers/public/applications.ts +2 -2
  255. package/src/api/controllers/public/queries.ts +1 -1
  256. package/src/api/controllers/public/rows.ts +1 -1
  257. package/src/api/controllers/query/{index.ts → index.js} +48 -51
  258. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  259. package/src/api/controllers/row/{index.ts → index.js} +17 -24
  260. package/src/api/controllers/row/internal.js +1 -2
  261. package/src/api/controllers/row/utils.js +1 -4
  262. package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -3
  263. package/src/api/controllers/table/bulkFormula.js +1 -1
  264. package/src/api/controllers/table/{internal.ts → internal.js} +48 -27
  265. package/src/api/controllers/table/{utils.ts → utils.js} +69 -86
  266. package/src/api/index.js +0 -5
  267. package/src/api/routes/{application.ts → application.js} +14 -8
  268. package/src/api/routes/index.js +62 -0
  269. package/src/api/routes/public/index.ts +4 -1
  270. package/src/api/routes/{row.ts → row.js} +15 -7
  271. package/src/api/routes/{static.ts → static.js} +11 -11
  272. package/src/api/routes/tests/misc.spec.js +37 -39
  273. package/src/api/routes/tests/routing.spec.js +0 -1
  274. package/src/api/routes/tests/utilities/{TestFunctions.ts → TestFunctions.js} +33 -57
  275. package/src/app.ts +2 -1
  276. package/src/automations/actions.js +0 -3
  277. package/src/automations/automationUtils.js +0 -12
  278. package/src/automations/steps/{createRow.ts → createRow.js} +15 -9
  279. package/src/automations/steps/{deleteRow.ts → deleteRow.js} +16 -10
  280. package/src/automations/tests/automation.spec.js +1 -0
  281. package/src/automations/tests/{createRow.spec.ts → createRow.spec.js} +15 -4
  282. package/src/automations/tests/{deleteRow.spec.ts → deleteRow.spec.js} +5 -3
  283. package/src/automations/tests/utilities/index.js +10 -12
  284. package/src/automations/{utils.ts → utils.js} +28 -39
  285. package/src/constants/index.js +8 -6
  286. package/src/db/linkedRows/LinkController.js +1 -0
  287. package/src/definitions/datasource.ts +0 -1
  288. package/src/environment.js +3 -2
  289. package/src/index.ts +0 -3
  290. package/src/integrations/index.ts +0 -4
  291. package/src/middleware/{authorized.ts → authorized.js} +14 -20
  292. package/src/middleware/currentapp.js +1 -16
  293. package/src/middleware/tests/usageQuota.spec.js +120 -0
  294. package/src/middleware/usageQuota.js +164 -0
  295. package/src/migrations/functions/tests/quotas1.spec.js +2 -0
  296. package/src/migrations/functions/usageQuotas/index.ts +5 -0
  297. package/src/migrations/functions/usageQuotas/syncApps.ts +6 -3
  298. package/src/migrations/functions/usageQuotas/syncRows.ts +6 -3
  299. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +41 -0
  300. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +45 -0
  301. package/src/migrations/index.ts +1 -13
  302. package/src/threads/automation.js +34 -196
  303. package/src/threads/{index.ts → index.js} +14 -18
  304. package/src/threads/utils.js +0 -1
  305. package/src/utilities/queue/inMemoryQueue.js +1 -7
  306. package/src/utilities/rowProcessor/index.js +12 -9
  307. package/src/utilities/rowProcessor/utils.js +29 -1
  308. package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
  309. package/src/utilities/usageQuota/index.js +93 -0
  310. package/tsconfig.json +2 -2
  311. package/builder/assets/index.89795487.css +0 -6
  312. package/builder/assets/index.be9a1b80.js +0 -1299
  313. package/dist/automations/steps/loop.js +0 -51
  314. package/dist/integrations/redis.js +0 -158
  315. package/dist/migrations/functions/developerQuota.js +0 -49
  316. package/dist/migrations/functions/publishedAppsQuota.js +0 -47
  317. package/dist/migrations/functions/usageQuotas/syncDevelopers.js +0 -24
  318. package/dist/migrations/functions/usageQuotas/syncPublishedApps.js +0 -26
  319. package/dist/tsconfig.build.tsbuildinfo +0 -1
  320. package/src/api/routes/index.ts +0 -60
  321. package/src/automations/steps/loop.js +0 -50
  322. package/src/integrations/redis.ts +0 -152
  323. package/src/integrations/tests/redis.spec.js +0 -60
  324. package/src/migrations/functions/developerQuota.ts +0 -15
  325. package/src/migrations/functions/publishedAppsQuota.ts +0 -13
  326. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +0 -19
  327. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +0 -21
  328. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +0 -34
  329. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +0 -40
  330. package/tsconfig.build.json +0 -10
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">42.1% </span>
33
+ <span class="strong">43.63% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>24/57</span>
35
+ <span class='fraction'>24/55</span>
36
36
  </div>
37
37
 
38
38
 
@@ -54,12 +54,6 @@
54
54
  <p class="quiet">
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
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
57
  </div>
64
58
  <div class='status-line medium'></div>
65
59
  <pre><table class="coverage">
@@ -245,7 +239,7 @@
245
239
  <span class="cline-any cline-yes">41x</span>
246
240
  <span class="cline-any cline-neutral">&nbsp;</span>
247
241
  <span class="cline-any cline-neutral">&nbsp;</span>
248
- <span class="cline-any cline-yes">1378x</span>
242
+ <span class="cline-any cline-yes">1384x</span>
249
243
  <span class="cline-any cline-neutral">&nbsp;</span>
250
244
  <span class="cline-any cline-neutral">&nbsp;</span>
251
245
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -256,19 +250,19 @@
256
250
  <span class="cline-any cline-neutral">&nbsp;</span>
257
251
  <span class="cline-any cline-neutral">&nbsp;</span>
258
252
  <span class="cline-any cline-neutral">&nbsp;</span>
259
- <span class="cline-any cline-yes">269x</span>
260
- <span class="cline-any cline-yes">269x</span>
261
- <span class="cline-any cline-yes">269x</span>
253
+ <span class="cline-any cline-yes">271x</span>
254
+ <span class="cline-any cline-yes">271x</span>
255
+ <span class="cline-any cline-yes">271x</span>
262
256
  <span class="cline-any cline-neutral">&nbsp;</span>
263
- <span class="cline-any cline-yes">1111x</span>
264
- <span class="cline-any cline-yes">1111x</span>
257
+ <span class="cline-any cline-yes">1115x</span>
258
+ <span class="cline-any cline-yes">1115x</span>
265
259
  <span class="cline-any cline-neutral">&nbsp;</span>
266
260
  <span class="cline-any cline-no">&nbsp;</span>
267
261
  <span class="cline-any cline-no">&nbsp;</span>
268
262
  <span class="cline-any cline-neutral">&nbsp;</span>
269
263
  <span class="cline-any cline-no">&nbsp;</span>
270
264
  <span class="cline-any cline-neutral">&nbsp;</span>
271
- <span class="cline-any cline-yes">269x</span>
265
+ <span class="cline-any cline-yes">271x</span>
272
266
  <span class="cline-any cline-neutral">&nbsp;</span>
273
267
  <span class="cline-any cline-neutral">&nbsp;</span>
274
268
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -277,28 +271,28 @@
277
271
  <span class="cline-any cline-neutral">&nbsp;</span>
278
272
  <span class="cline-any cline-neutral">&nbsp;</span>
279
273
  <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-yes">108x</span>
281
- <span class="cline-any cline-yes">249x</span>
274
+ <span class="cline-any cline-yes">109x</span>
275
+ <span class="cline-any cline-yes">251x</span>
282
276
  <span class="cline-any cline-neutral">&nbsp;</span>
283
- <span class="cline-any cline-yes">108x</span>
284
- <span class="cline-any cline-yes">108x</span>
285
- <span class="cline-any cline-yes">272x</span>
277
+ <span class="cline-any cline-yes">109x</span>
278
+ <span class="cline-any cline-yes">109x</span>
279
+ <span class="cline-any cline-yes">274x</span>
286
280
  <span class="cline-any cline-neutral">&nbsp;</span>
287
281
  <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-yes">108x</span>
289
- <span class="cline-any cline-yes">236x</span>
282
+ <span class="cline-any cline-yes">109x</span>
283
+ <span class="cline-any cline-yes">238x</span>
290
284
  <span class="cline-any cline-neutral">&nbsp;</span>
291
- <span class="cline-any cline-yes">236x</span>
285
+ <span class="cline-any cline-yes">238x</span>
292
286
  <span class="cline-any cline-yes">2x</span>
293
287
  <span class="cline-any cline-neutral">&nbsp;</span>
294
- <span class="cline-any cline-yes">236x</span>
295
- <span class="cline-any cline-yes">236x</span>
288
+ <span class="cline-any cline-yes">238x</span>
289
+ <span class="cline-any cline-yes">238x</span>
296
290
  <span class="cline-any cline-no">&nbsp;</span>
297
291
  <span class="cline-any cline-neutral">&nbsp;</span>
298
292
  <span class="cline-any cline-neutral">&nbsp;</span>
299
293
  <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-yes">236x</span>
301
- <span class="cline-any cline-yes">236x</span>
294
+ <span class="cline-any cline-yes">238x</span>
295
+ <span class="cline-any cline-yes">238x</span>
302
296
  <span class="cline-any cline-neutral">&nbsp;</span>
303
297
  <span class="cline-any cline-no">&nbsp;</span>
304
298
  <span class="cline-any cline-no">&nbsp;</span>
@@ -335,21 +329,21 @@
335
329
  <span class="cline-any cline-neutral">&nbsp;</span>
336
330
  <span class="cline-any cline-neutral">&nbsp;</span>
337
331
  <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-yes">108x</span>
332
+ <span class="cline-any cline-yes">109x</span>
339
333
  <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-yes">108x</span>
341
- <span class="cline-any cline-yes">249x</span>
334
+ <span class="cline-any cline-yes">109x</span>
335
+ <span class="cline-any cline-yes">251x</span>
342
336
  <span class="cline-any cline-neutral">&nbsp;</span>
343
337
  <span class="cline-any cline-neutral">&nbsp;</span>
344
- <span class="cline-any cline-yes">108x</span>
338
+ <span class="cline-any cline-yes">109x</span>
345
339
  <span class="cline-any cline-neutral">&nbsp;</span>
346
- <span class="cline-any cline-yes">108x</span>
347
- <span class="cline-any cline-yes">274x</span>
340
+ <span class="cline-any cline-yes">109x</span>
341
+ <span class="cline-any cline-yes">276x</span>
348
342
  <span class="cline-any cline-neutral">&nbsp;</span>
349
343
  <span class="cline-any cline-neutral">&nbsp;</span>
350
- <span class="cline-any cline-yes">108x</span>
351
- <span class="cline-any cline-yes">144x</span>
352
- <span class="cline-any cline-yes">144x</span>
344
+ <span class="cline-any cline-yes">109x</span>
345
+ <span class="cline-any cline-yes">145x</span>
346
+ <span class="cline-any cline-yes">145x</span>
353
347
  <span class="cline-any cline-neutral">&nbsp;</span>
354
348
  <span class="cline-any cline-no">&nbsp;</span>
355
349
  <span class="cline-any cline-no">&nbsp;</span>
@@ -357,8 +351,8 @@
357
351
  <span class="cline-any cline-neutral">&nbsp;</span>
358
352
  <span class="cline-any cline-neutral">&nbsp;</span>
359
353
  <span class="cline-any cline-neutral">&nbsp;</span>
360
- <span class="cline-any cline-yes">108x</span>
361
- <span class="cline-any cline-yes">105x</span>
354
+ <span class="cline-any cline-yes">109x</span>
355
+ <span class="cline-any cline-yes">106x</span>
362
356
  <span class="cline-any cline-yes">33x</span>
363
357
  <span class="cline-any cline-yes">33x</span>
364
358
  <span class="cline-any cline-yes">33x</span>
@@ -379,9 +373,9 @@
379
373
  <span class="cline-any cline-neutral">&nbsp;</span>
380
374
  <span class="cline-any cline-neutral">&nbsp;</span>
381
375
  <span class="cline-any cline-neutral">&nbsp;</span>
382
- <span class="cline-any cline-yes">108x</span>
383
- <span class="cline-any cline-yes">191x</span>
384
- <span class="cline-any cline-yes">144x</span>
376
+ <span class="cline-any cline-yes">109x</span>
377
+ <span class="cline-any cline-yes">192x</span>
378
+ <span class="cline-any cline-yes">145x</span>
385
379
  <span class="cline-any cline-no">&nbsp;</span>
386
380
  <span class="cline-any cline-neutral">&nbsp;</span>
387
381
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -389,24 +383,24 @@
389
383
  <span class="cline-any cline-neutral">&nbsp;</span>
390
384
  <span class="cline-any cline-neutral">&nbsp;</span>
391
385
  <span class="cline-any cline-neutral">&nbsp;</span>
392
- <span class="cline-any cline-yes">105x</span>
386
+ <span class="cline-any cline-yes">106x</span>
393
387
  <span class="cline-any cline-neutral">&nbsp;</span>
394
- <span class="cline-any cline-yes">267x</span>
388
+ <span class="cline-any cline-yes">269x</span>
395
389
  <span class="cline-any cline-neutral">&nbsp;</span>
396
390
  <span class="cline-any cline-neutral">&nbsp;</span>
397
391
  <span class="cline-any cline-neutral">&nbsp;</span>
398
392
  <span class="cline-any cline-neutral">&nbsp;</span>
399
393
  <span class="cline-any cline-neutral">&nbsp;</span>
400
- <span class="cline-any cline-yes">105x</span>
394
+ <span class="cline-any cline-yes">106x</span>
401
395
  <span class="cline-any cline-no">&nbsp;</span>
402
396
  <span class="cline-any cline-neutral">&nbsp;</span>
403
397
  <span class="cline-any cline-neutral">&nbsp;</span>
404
398
  <span class="cline-any cline-neutral">&nbsp;</span>
405
399
  <span class="cline-any cline-yes">41x</span>
406
- <span class="cline-any cline-yes">108x</span>
407
- <span class="cline-any cline-yes">108x</span>
408
- <span class="cline-any cline-yes">108x</span>
409
- <span class="cline-any cline-yes">105x</span>
400
+ <span class="cline-any cline-yes">109x</span>
401
+ <span class="cline-any cline-yes">109x</span>
402
+ <span class="cline-any cline-yes">109x</span>
403
+ <span class="cline-any cline-yes">106x</span>
410
404
  <span class="cline-any cline-neutral">&nbsp;</span>
411
405
  <span class="cline-any cline-neutral">&nbsp;</span>
412
406
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { FieldTypes, FormulaTypes } = require("../../../constants")
@@ -433,10 +427,10 @@ function getFormulaThatUseColumn(table, columnNames) {
433
427
  columnNames = Array.isArray(columnNames) ? <span class="branch-0 cbranch-no" title="branch not covered" >columnNames </span>: [columnNames]
434
428
  for (let column of Object.values(table.schema)) {
435
429
  // not a static formula, or doesn't contain a relationship
436
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!isStaticFormula(column)) {
430
+ if (!isStaticFormula(column)) {
437
431
  continue
438
432
  }
439
- <span class="cstat-no" title="statement not covered" > if (!doesContainStrings(column?.formula ?? "", columnNames)) {</span>
433
+ <span class="cstat-no" title="statement not covered" > if (!doesContainStrings(column.formula, columnNames)) {</span>
440
434
  <span class="cstat-no" title="statement not covered" > continue</span>
441
435
  }
442
436
  <span class="cstat-no" title="statement not covered" > formula.push(column.name)</span>
@@ -470,7 +464,7 @@ async function checkIfFormulaNeedsCleared(table, { oldTable, deletion }) {
470
464
  }
471
465
  // need a special case, where a column has been removed from this table, but was used
472
466
  // in a different, related tables formula
473
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!table.relatedFormula) {
467
+ if (!table.relatedFormula) {
474
468
  continue
475
469
  }
476
470
  <span class="cstat-no" title="statement not covered" > for (let relatedTableId of table.relatedFormula) {</span>
@@ -521,7 +515,7 @@ async function updateRelatedFormulaLinksOnTables(
521
515
  )
522
516
  // we start by removing the formula field from all tables
523
517
  for (let otherTable of tables) {
524
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!otherTable.relatedFormula) {
518
+ if (!otherTable.relatedFormula) {
525
519
  continue
526
520
  }
527
521
  const index = <span class="cstat-no" title="statement not covered" >otherTable.relatedFormula.indexOf(table._id)</span>
@@ -533,7 +527,7 @@ async function updateRelatedFormulaLinksOnTables(
533
527
  if (!deletion) {
534
528
  for (let relatedCol of relatedColumns) {
535
529
  let columns = getFormulaThatUseColumn(table, relatedCol.name)
536
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!columns || columns.length === 0) {
530
+ if (!columns || columns.length === 0) {
537
531
  continue
538
532
  }
539
533
  const relatedTable = <span class="cstat-no" title="statement not covered" >tables.find(</span>
@@ -588,9 +582,10 @@ exports.runStaticFormulaChecks = async (table, { oldTable, deletion }) =&gt; {
588
582
  </div><!-- /wrapper -->
589
583
  <div class='footer quiet pad2 space-top1 center small'>
590
584
  Code coverage generated by
591
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
592
- at Tue Apr 26 2022 16:11:58 GMT+0000 (Coordinated Universal Time)
585
+ <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
586
+ at Tue Apr 26 2022 17:11:02 GMT+0000 (Coordinated Universal Time)
593
587
  </div>
588
+ </div>
594
589
  <script src="../../../prettify.js"></script>
595
590
  <script>
596
591
  window.onload = function () {
@@ -54,12 +54,6 @@
54
54
  <p class="quiet">
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
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
57
  </div>
64
58
  <div class='status-line low'></div>
65
59
  <pre><table class="coverage">
@@ -1023,9 +1017,10 @@ exports.bulkImport = <span class="fstat-no" title="function not covered" >as</sp
1023
1017
  </div><!-- /wrapper -->
1024
1018
  <div class='footer quiet pad2 space-top1 center small'>
1025
1019
  Code coverage generated by
1026
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1027
- at Tue Apr 26 2022 16:11:58 GMT+0000 (Coordinated Universal Time)
1020
+ <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1021
+ at Tue Apr 26 2022 17:11:02 GMT+0000 (Coordinated Universal Time)
1028
1022
  </div>
1023
+ </div>
1029
1024
  <script src="../../../prettify.js"></script>
1030
1025
  <script>
1031
1026
  window.onload = function () {
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">39.92% </span>
26
+ <span class="strong">53.58% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>109/273</span>
28
+ <span class='fraction'>299/558</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">25.78% </span>
33
+ <span class="strong">37.24% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>41/159</span>
35
+ <span class='fraction'>111/298</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">48.71% </span>
40
+ <span class="strong">53.16% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>19/39</span>
42
+ <span class='fraction'>42/79</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">39.77% </span>
47
+ <span class="strong">53.94% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>107/269</span>
49
+ <span class='fraction'>294/545</span>
50
50
  </div>
51
51
 
52
52
 
@@ -54,14 +54,8 @@
54
54
  <p class="quiet">
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
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
57
  </div>
64
- <div class='status-line low'></div>
58
+ <div class='status-line medium'></div>
65
59
  <div class="pad1">
66
60
  <table class="coverage-summary">
67
61
  <thead>
@@ -85,8 +79,8 @@
85
79
  </td>
86
80
  <td data-value="69.23" class="pct medium">69.23%</td>
87
81
  <td data-value="78" class="abs medium">54/78</td>
88
- <td data-value="42.1" class="pct low">42.1%</td>
89
- <td data-value="57" class="abs low">24/57</td>
82
+ <td data-value="43.63" class="pct low">43.63%</td>
83
+ <td data-value="55" class="abs low">24/55</td>
90
84
  <td data-value="81.25" class="pct high">81.25%</td>
91
85
  <td data-value="16" class="abs high">13/16</td>
92
86
  <td data-value="69.33" class="pct medium">69.33%</td>
@@ -123,6 +117,36 @@
123
117
  <td data-value="56" class="abs medium">44/56</td>
124
118
  </tr>
125
119
 
120
+ <tr>
121
+ <td class="file medium" data-value="internal.js"><a href="internal.js.html">internal.js</a></td>
122
+ <td data-value="73.75" class="pic medium">
123
+ <div class="chart"><div class="cover-fill" style="width: 73%"></div><div class="cover-empty" style="width: 27%"></div></div>
124
+ </td>
125
+ <td data-value="73.75" class="pct medium">73.75%</td>
126
+ <td data-value="80" class="abs medium">59/80</td>
127
+ <td data-value="69.56" class="pct medium">69.56%</td>
128
+ <td data-value="46" class="abs medium">32/46</td>
129
+ <td data-value="50" class="pct medium">50%</td>
130
+ <td data-value="6" class="abs medium">3/6</td>
131
+ <td data-value="76.62" class="pct medium">76.62%</td>
132
+ <td data-value="77" class="abs medium">59/77</td>
133
+ </tr>
134
+
135
+ <tr>
136
+ <td class="file medium" data-value="utils.js"><a href="utils.js.html">utils.js</a></td>
137
+ <td data-value="63.9" class="pic medium">
138
+ <div class="chart"><div class="cover-fill" style="width: 63%"></div><div class="cover-empty" style="width: 37%"></div></div>
139
+ </td>
140
+ <td data-value="63.9" class="pct medium">63.9%</td>
141
+ <td data-value="205" class="abs medium">131/205</td>
142
+ <td data-value="40" class="pct low">40%</td>
143
+ <td data-value="95" class="abs low">38/95</td>
144
+ <td data-value="58.82" class="pct medium">58.82%</td>
145
+ <td data-value="34" class="abs medium">20/34</td>
146
+ <td data-value="64.32" class="pct medium">64.32%</td>
147
+ <td data-value="199" class="abs medium">128/199</td>
148
+ </tr>
149
+
126
150
  </tbody>
127
151
  </table>
128
152
  </div>
@@ -130,9 +154,10 @@
130
154
  </div><!-- /wrapper -->
131
155
  <div class='footer quiet pad2 space-top1 center small'>
132
156
  Code coverage generated by
133
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at Tue Apr 26 2022 16:11:58 GMT+0000 (Coordinated Universal Time)
157
+ <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
158
+ at Tue Apr 26 2022 17:11:02 GMT+0000 (Coordinated Universal Time)
135
159
  </div>
160
+ </div>
136
161
  <script src="../../../prettify.js"></script>
137
162
  <script>
138
163
  window.onload = function () {
@@ -54,12 +54,6 @@
54
54
  <p class="quiet">
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
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
57
  </div>
64
58
  <div class='status-line medium'></div>
65
59
  <pre><table class="coverage">
@@ -171,15 +165,15 @@
171
165
  <span class="cline-any cline-yes">41x</span>
172
166
  <span class="cline-any cline-neutral">&nbsp;</span>
173
167
  <span class="cline-any cline-neutral">&nbsp;</span>
174
- <span class="cline-any cline-yes">108x</span>
175
- <span class="cline-any cline-yes">105x</span>
168
+ <span class="cline-any cline-yes">109x</span>
169
+ <span class="cline-any cline-yes">106x</span>
176
170
  <span class="cline-any cline-neutral">&nbsp;</span>
177
- <span class="cline-any cline-yes">108x</span>
171
+ <span class="cline-any cline-yes">109x</span>
178
172
  <span class="cline-any cline-no">&nbsp;</span>
179
- <span class="cline-any cline-yes">108x</span>
173
+ <span class="cline-any cline-yes">109x</span>
180
174
  <span class="cline-any cline-no">&nbsp;</span>
181
175
  <span class="cline-any cline-neutral">&nbsp;</span>
182
- <span class="cline-any cline-yes">108x</span>
176
+ <span class="cline-any cline-yes">109x</span>
183
177
  <span class="cline-any cline-neutral">&nbsp;</span>
184
178
  <span class="cline-any cline-neutral">&nbsp;</span>
185
179
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -217,14 +211,14 @@
217
211
  <span class="cline-any cline-neutral">&nbsp;</span>
218
212
  <span class="cline-any cline-neutral">&nbsp;</span>
219
213
  <span class="cline-any cline-yes">41x</span>
220
- <span class="cline-any cline-yes">105x</span>
221
- <span class="cline-any cline-yes">105x</span>
222
- <span class="cline-any cline-yes">105x</span>
223
- <span class="cline-any cline-yes">105x</span>
224
- <span class="cline-any cline-yes">105x</span>
225
- <span class="cline-any cline-yes">105x</span>
214
+ <span class="cline-any cline-yes">106x</span>
215
+ <span class="cline-any cline-yes">106x</span>
216
+ <span class="cline-any cline-yes">106x</span>
217
+ <span class="cline-any cline-yes">106x</span>
218
+ <span class="cline-any cline-yes">106x</span>
219
+ <span class="cline-any cline-yes">106x</span>
226
220
  <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">105x</span>
221
+ <span class="cline-any cline-yes">106x</span>
228
222
  <span class="cline-any cline-neutral">&nbsp;</span>
229
223
  <span class="cline-any cline-neutral">&nbsp;</span>
230
224
  <span class="cline-any cline-yes">41x</span>
@@ -366,9 +360,10 @@ exports.validateCSVSchema = async function (ctx) {
366
360
  </div><!-- /wrapper -->
367
361
  <div class='footer quiet pad2 space-top1 center small'>
368
362
  Code coverage generated by
369
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
370
- at Tue Apr 26 2022 16:11:58 GMT+0000 (Coordinated Universal Time)
363
+ <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
364
+ at Tue Apr 26 2022 17:11:02 GMT+0000 (Coordinated Universal Time)
371
365
  </div>
366
+ </div>
372
367
  <script src="../../../prettify.js"></script>
373
368
  <script>
374
369
  window.onload = function () {