@budibase/server 2.3.18-alpha.9 → 2.3.18

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 (477) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/builder/assets/index.4488f38d.css +6 -0
  3. package/builder/assets/{index.956858d3.js → index.527a5fcb.js} +415 -422
  4. package/builder/index.html +2 -2
  5. package/coverage/clover.xml +11774 -0
  6. package/coverage/coverage-final.json +284 -0
  7. package/coverage/lcov-report/base.css +224 -0
  8. package/coverage/lcov-report/block-navigation.js +87 -0
  9. package/coverage/lcov-report/favicon.png +0 -0
  10. package/coverage/lcov-report/index.html +1031 -0
  11. package/coverage/lcov-report/prettify.css +1 -0
  12. package/coverage/lcov-report/prettify.js +2 -0
  13. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  14. package/coverage/lcov-report/sorter.js +196 -0
  15. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +190 -0
  16. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +247 -0
  17. package/coverage/lcov-report/src/api/controllers/application.ts.html +1987 -0
  18. package/coverage/lcov-report/src/api/controllers/auth.ts.html +301 -0
  19. package/coverage/lcov-report/src/api/controllers/automation.ts.html +940 -0
  20. package/coverage/lcov-report/src/api/controllers/backup.ts.html +148 -0
  21. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +442 -0
  22. package/coverage/lcov-report/src/api/controllers/component.ts.html +259 -0
  23. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +1135 -0
  24. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +262 -0
  25. package/coverage/lcov-report/src/api/controllers/deploy/index.html +131 -0
  26. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +694 -0
  27. package/coverage/lcov-report/src/api/controllers/dev.ts.html +472 -0
  28. package/coverage/lcov-report/src/api/controllers/index.html +431 -0
  29. package/coverage/lcov-report/src/api/controllers/integration.ts.html +124 -0
  30. package/coverage/lcov-report/src/api/controllers/layout.ts.html +226 -0
  31. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +211 -0
  32. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +127 -0
  33. package/coverage/lcov-report/src/api/controllers/permission.ts.html +619 -0
  34. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +130 -0
  35. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +310 -0
  36. package/coverage/lcov-report/src/api/controllers/plugin/index.html +206 -0
  37. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +499 -0
  38. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +253 -0
  39. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +97 -0
  40. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +121 -0
  41. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +136 -0
  42. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +385 -0
  43. package/coverage/lcov-report/src/api/controllers/public/index.html +191 -0
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +181 -0
  45. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +191 -0
  46. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +124 -0
  47. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +202 -0
  48. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +178 -0
  49. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +163 -0
  50. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +181 -0
  51. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +145 -0
  52. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +328 -0
  53. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +253 -0
  54. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +325 -0
  55. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +220 -0
  56. package/coverage/lcov-report/src/api/controllers/query/import/index.html +116 -0
  57. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +373 -0
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +131 -0
  59. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +379 -0
  60. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +157 -0
  61. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +403 -0
  62. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +146 -0
  63. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +586 -0
  64. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +712 -0
  65. package/coverage/lcov-report/src/api/controllers/query/index.html +131 -0
  66. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +1000 -0
  67. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +235 -0
  68. package/coverage/lcov-report/src/api/controllers/role.ts.html +397 -0
  69. package/coverage/lcov-report/src/api/controllers/routing.ts.html +370 -0
  70. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +2305 -0
  71. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +931 -0
  72. package/coverage/lcov-report/src/api/controllers/row/index.html +206 -0
  73. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +541 -0
  74. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +1609 -0
  75. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +1678 -0
  76. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +595 -0
  77. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +556 -0
  78. package/coverage/lcov-report/src/api/controllers/screen.ts.html +463 -0
  79. package/coverage/lcov-report/src/api/controllers/script.ts.html +121 -0
  80. package/coverage/lcov-report/src/api/controllers/static/index.html +116 -0
  81. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +679 -0
  82. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +649 -0
  83. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +1153 -0
  84. package/coverage/lcov-report/src/api/controllers/table/index.html +176 -0
  85. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +514 -0
  86. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +658 -0
  87. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +1273 -0
  88. package/coverage/lcov-report/src/api/controllers/templates.ts.html +214 -0
  89. package/coverage/lcov-report/src/api/controllers/user.ts.html +634 -0
  90. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +214 -0
  91. package/coverage/lcov-report/src/api/controllers/view/index.html +161 -0
  92. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +661 -0
  93. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +580 -0
  94. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +694 -0
  95. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +385 -0
  96. package/coverage/lcov-report/src/api/index.html +116 -0
  97. package/coverage/lcov-report/src/api/index.ts.html +352 -0
  98. package/coverage/lcov-report/src/api/routes/analytics.ts.html +112 -0
  99. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +121 -0
  100. package/coverage/lcov-report/src/api/routes/application.ts.html +256 -0
  101. package/coverage/lcov-report/src/api/routes/auth.ts.html +109 -0
  102. package/coverage/lcov-report/src/api/routes/automation.ts.html +346 -0
  103. package/coverage/lcov-report/src/api/routes/backup.ts.html +127 -0
  104. package/coverage/lcov-report/src/api/routes/cloud.ts.html +139 -0
  105. package/coverage/lcov-report/src/api/routes/component.ts.html +127 -0
  106. package/coverage/lcov-report/src/api/routes/datasource.ts.html +265 -0
  107. package/coverage/lcov-report/src/api/routes/deploy.ts.html +145 -0
  108. package/coverage/lcov-report/src/api/routes/dev.ts.html +199 -0
  109. package/coverage/lcov-report/src/api/routes/index.html +551 -0
  110. package/coverage/lcov-report/src/api/routes/index.ts.html +298 -0
  111. package/coverage/lcov-report/src/api/routes/integration.ts.html +133 -0
  112. package/coverage/lcov-report/src/api/routes/layout.ts.html +133 -0
  113. package/coverage/lcov-report/src/api/routes/metadata.ts.html +199 -0
  114. package/coverage/lcov-report/src/api/routes/migrations.ts.html +127 -0
  115. package/coverage/lcov-report/src/api/routes/permission.ts.html +208 -0
  116. package/coverage/lcov-report/src/api/routes/plugin.ts.html +151 -0
  117. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +673 -0
  118. package/coverage/lcov-report/src/api/routes/public/index.html +191 -0
  119. package/coverage/lcov-report/src/api/routes/public/index.ts.html +493 -0
  120. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +116 -0
  121. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +340 -0
  122. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +313 -0
  123. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +598 -0
  124. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +586 -0
  125. package/coverage/lcov-report/src/api/routes/public/tests/index.html +116 -0
  126. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +169 -0
  127. package/coverage/lcov-report/src/api/routes/public/users.ts.html +511 -0
  128. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +238 -0
  129. package/coverage/lcov-report/src/api/routes/public/utils/index.html +116 -0
  130. package/coverage/lcov-report/src/api/routes/query.ts.html +268 -0
  131. package/coverage/lcov-report/src/api/routes/role.ts.html +157 -0
  132. package/coverage/lcov-report/src/api/routes/routing.ts.html +127 -0
  133. package/coverage/lcov-report/src/api/routes/row.ts.html +883 -0
  134. package/coverage/lcov-report/src/api/routes/screen.ts.html +154 -0
  135. package/coverage/lcov-report/src/api/routes/script.ts.html +115 -0
  136. package/coverage/lcov-report/src/api/routes/static.ts.html +280 -0
  137. package/coverage/lcov-report/src/api/routes/table.ts.html +595 -0
  138. package/coverage/lcov-report/src/api/routes/templates.ts.html +133 -0
  139. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +550 -0
  140. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +131 -0
  141. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +367 -0
  142. package/coverage/lcov-report/src/api/routes/user.ts.html +238 -0
  143. package/coverage/lcov-report/src/api/routes/utils/index.html +116 -0
  144. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +805 -0
  145. package/coverage/lcov-report/src/api/routes/view.ts.html +187 -0
  146. package/coverage/lcov-report/src/api/routes/webhook.ts.html +166 -0
  147. package/coverage/lcov-report/src/app.ts.html +424 -0
  148. package/coverage/lcov-report/src/automations/actions.ts.html +316 -0
  149. package/coverage/lcov-report/src/automations/automationUtils.ts.html +562 -0
  150. package/coverage/lcov-report/src/automations/bullboard.ts.html +199 -0
  151. package/coverage/lcov-report/src/automations/index.html +191 -0
  152. package/coverage/lcov-report/src/automations/index.ts.html +163 -0
  153. package/coverage/lcov-report/src/automations/logging/index.html +116 -0
  154. package/coverage/lcov-report/src/automations/logging/index.ts.html +199 -0
  155. package/coverage/lcov-report/src/automations/steps/bash.ts.html +319 -0
  156. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +382 -0
  157. package/coverage/lcov-report/src/automations/steps/delay.ts.html +217 -0
  158. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +349 -0
  159. package/coverage/lcov-report/src/automations/steps/discord.ts.html +397 -0
  160. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +370 -0
  161. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +325 -0
  162. package/coverage/lcov-report/src/automations/steps/filter.ts.html +394 -0
  163. package/coverage/lcov-report/src/automations/steps/index.html +371 -0
  164. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +409 -0
  165. package/coverage/lcov-report/src/automations/steps/loop.ts.html +241 -0
  166. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +499 -0
  167. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +664 -0
  168. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +355 -0
  169. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +256 -0
  170. package/coverage/lcov-report/src/automations/steps/slack.ts.html +340 -0
  171. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +439 -0
  172. package/coverage/lcov-report/src/automations/steps/utils.ts.html +223 -0
  173. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +403 -0
  174. package/coverage/lcov-report/src/automations/tests/utilities/index.html +116 -0
  175. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +265 -0
  176. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +196 -0
  177. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +193 -0
  178. package/coverage/lcov-report/src/automations/triggerInfo/index.html +206 -0
  179. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +130 -0
  180. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +196 -0
  181. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +220 -0
  182. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +220 -0
  183. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +208 -0
  184. package/coverage/lcov-report/src/automations/triggers.ts.html +553 -0
  185. package/coverage/lcov-report/src/automations/utils.ts.html +886 -0
  186. package/coverage/lcov-report/src/constants/index.html +146 -0
  187. package/coverage/lcov-report/src/constants/index.ts.html +697 -0
  188. package/coverage/lcov-report/src/constants/layouts.ts.html +526 -0
  189. package/coverage/lcov-report/src/constants/screens.ts.html +229 -0
  190. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +2059 -0
  191. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +541 -0
  192. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +427 -0
  193. package/coverage/lcov-report/src/db/defaultData/index.html +176 -0
  194. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +403 -0
  195. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +559 -0
  196. package/coverage/lcov-report/src/db/dynamoClient.ts.html +526 -0
  197. package/coverage/lcov-report/src/db/inMemoryView.ts.html +250 -0
  198. package/coverage/lcov-report/src/db/index.html +176 -0
  199. package/coverage/lcov-report/src/db/index.ts.html +133 -0
  200. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +1417 -0
  201. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +265 -0
  202. package/coverage/lcov-report/src/db/linkedRows/index.html +161 -0
  203. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +736 -0
  204. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +460 -0
  205. package/coverage/lcov-report/src/db/newid.ts.html +100 -0
  206. package/coverage/lcov-report/src/db/utils.ts.html +913 -0
  207. package/coverage/lcov-report/src/definitions/automations.ts.html +184 -0
  208. package/coverage/lcov-report/src/definitions/index.html +116 -0
  209. package/coverage/lcov-report/src/environment.ts.html +472 -0
  210. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +259 -0
  211. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +172 -0
  212. package/coverage/lcov-report/src/events/index.html +161 -0
  213. package/coverage/lcov-report/src/events/index.ts.html +100 -0
  214. package/coverage/lcov-report/src/events/utils.ts.html +319 -0
  215. package/coverage/lcov-report/src/index.html +191 -0
  216. package/coverage/lcov-report/src/index.ts.html +133 -0
  217. package/coverage/lcov-report/src/integrations/airtable.ts.html +529 -0
  218. package/coverage/lcov-report/src/integrations/arangodb.ts.html +415 -0
  219. package/coverage/lcov-report/src/integrations/base/index.html +161 -0
  220. package/coverage/lcov-report/src/integrations/base/query.ts.html +139 -0
  221. package/coverage/lcov-report/src/integrations/base/sql.ts.html +2017 -0
  222. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +691 -0
  223. package/coverage/lcov-report/src/integrations/base/utils.ts.html +121 -0
  224. package/coverage/lcov-report/src/integrations/couchdb.ts.html +484 -0
  225. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +745 -0
  226. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +646 -0
  227. package/coverage/lcov-report/src/integrations/firebase.ts.html +646 -0
  228. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +1315 -0
  229. package/coverage/lcov-report/src/integrations/index.html +371 -0
  230. package/coverage/lcov-report/src/integrations/index.ts.html +460 -0
  231. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +1012 -0
  232. package/coverage/lcov-report/src/integrations/mongodb.ts.html +1999 -0
  233. package/coverage/lcov-report/src/integrations/mysql.ts.html +979 -0
  234. package/coverage/lcov-report/src/integrations/oracle.ts.html +1387 -0
  235. package/coverage/lcov-report/src/integrations/postgres.ts.html +1087 -0
  236. package/coverage/lcov-report/src/integrations/queries/index.html +116 -0
  237. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +328 -0
  238. package/coverage/lcov-report/src/integrations/redis.ts.html +550 -0
  239. package/coverage/lcov-report/src/integrations/rest.ts.html +1372 -0
  240. package/coverage/lcov-report/src/integrations/s3.ts.html +862 -0
  241. package/coverage/lcov-report/src/integrations/snowflake.ts.html +376 -0
  242. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +85 -0
  243. package/coverage/lcov-report/src/integrations/tests/index.html +116 -0
  244. package/coverage/lcov-report/src/integrations/utils.ts.html +1036 -0
  245. package/coverage/lcov-report/src/middleware/appInfo.ts.html +145 -0
  246. package/coverage/lcov-report/src/middleware/authorized.ts.html +472 -0
  247. package/coverage/lcov-report/src/middleware/builder.ts.html +361 -0
  248. package/coverage/lcov-report/src/middleware/currentapp.ts.html +508 -0
  249. package/coverage/lcov-report/src/middleware/index.html +236 -0
  250. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +205 -0
  251. package/coverage/lcov-report/src/middleware/publicApi.ts.html +148 -0
  252. package/coverage/lcov-report/src/middleware/resourceId.ts.html +283 -0
  253. package/coverage/lcov-report/src/middleware/selfhost.ts.html +121 -0
  254. package/coverage/lcov-report/src/middleware/utils.ts.html +112 -0
  255. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +166 -0
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +163 -0
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +151 -0
  258. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +206 -0
  259. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +172 -0
  260. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +226 -0
  261. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +151 -0
  262. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +151 -0
  263. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +166 -0
  264. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +532 -0
  265. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +286 -0
  266. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +146 -0
  267. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +265 -0
  268. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +232 -0
  269. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +724 -0
  270. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +161 -0
  271. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +106 -0
  272. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +235 -0
  273. package/coverage/lcov-report/src/migrations/functions/index.html +161 -0
  274. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +130 -0
  275. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +520 -0
  276. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +161 -0
  277. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +94 -0
  278. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +127 -0
  279. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +115 -0
  280. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +169 -0
  281. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +124 -0
  282. package/coverage/lcov-report/src/migrations/index.html +116 -0
  283. package/coverage/lcov-report/src/migrations/index.ts.html +430 -0
  284. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +205 -0
  285. package/coverage/lcov-report/src/migrations/tests/index.html +131 -0
  286. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +283 -0
  287. package/coverage/lcov-report/src/sdk/app/applications/index.html +146 -0
  288. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +106 -0
  289. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +268 -0
  290. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +136 -0
  291. package/coverage/lcov-report/src/sdk/app/automations/index.html +131 -0
  292. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +100 -0
  293. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +214 -0
  294. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +91 -0
  295. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +604 -0
  296. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +640 -0
  297. package/coverage/lcov-report/src/sdk/app/backups/index.html +176 -0
  298. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +112 -0
  299. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +292 -0
  300. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +562 -0
  301. package/coverage/lcov-report/src/sdk/app/datasources/index.html +131 -0
  302. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +100 -0
  303. package/coverage/lcov-report/src/sdk/app/queries/index.html +131 -0
  304. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +100 -0
  305. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +235 -0
  306. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +265 -0
  307. package/coverage/lcov-report/src/sdk/app/rows/index.html +146 -0
  308. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +106 -0
  309. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +139 -0
  310. package/coverage/lcov-report/src/sdk/app/tables/index.html +116 -0
  311. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +274 -0
  312. package/coverage/lcov-report/src/sdk/index.html +116 -0
  313. package/coverage/lcov-report/src/sdk/index.ts.html +151 -0
  314. package/coverage/lcov-report/src/sdk/users/index.html +131 -0
  315. package/coverage/lcov-report/src/sdk/users/index.ts.html +100 -0
  316. package/coverage/lcov-report/src/sdk/users/utils.ts.html +277 -0
  317. package/coverage/lcov-report/src/sdk/utils/index.html +116 -0
  318. package/coverage/lcov-report/src/sdk/utils/index.ts.html +133 -0
  319. package/coverage/lcov-report/src/startup.ts.html +484 -0
  320. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +2032 -0
  321. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +127 -0
  322. package/coverage/lcov-report/src/tests/utilities/index.html +161 -0
  323. package/coverage/lcov-report/src/tests/utilities/index.ts.html +118 -0
  324. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +856 -0
  325. package/coverage/lcov-report/src/threads/automation.ts.html +1555 -0
  326. package/coverage/lcov-report/src/threads/index.html +161 -0
  327. package/coverage/lcov-report/src/threads/index.ts.html +418 -0
  328. package/coverage/lcov-report/src/threads/query.ts.html +1000 -0
  329. package/coverage/lcov-report/src/threads/utils.ts.html +373 -0
  330. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +94 -0
  331. package/coverage/lcov-report/src/utilities/centralPath.ts.html +151 -0
  332. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +343 -0
  333. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +547 -0
  334. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +601 -0
  335. package/coverage/lcov-report/src/utilities/fileSystem/index.html +206 -0
  336. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +100 -0
  337. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +277 -0
  338. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +142 -0
  339. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +193 -0
  340. package/coverage/lcov-report/src/utilities/global.ts.html +499 -0
  341. package/coverage/lcov-report/src/utilities/index.html +251 -0
  342. package/coverage/lcov-report/src/utilities/index.ts.html +487 -0
  343. package/coverage/lcov-report/src/utilities/redis.ts.html +343 -0
  344. package/coverage/lcov-report/src/utilities/routing/index.html +116 -0
  345. package/coverage/lcov-report/src/utilities/routing/index.ts.html +181 -0
  346. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +146 -0
  347. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +922 -0
  348. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +373 -0
  349. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +373 -0
  350. package/coverage/lcov-report/src/utilities/schema.ts.html +508 -0
  351. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +169 -0
  352. package/coverage/lcov-report/src/utilities/security.ts.html +280 -0
  353. package/coverage/lcov-report/src/utilities/usageQuota/index.html +131 -0
  354. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +325 -0
  355. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +139 -0
  356. package/coverage/lcov-report/src/utilities/users.ts.html +232 -0
  357. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +646 -0
  358. package/coverage/lcov-report/src/watch.ts.html +196 -0
  359. package/coverage/lcov-report/src/websocket.ts.html +163 -0
  360. package/coverage/lcov.info +21777 -0
  361. package/dist/api/controllers/automation.js +2 -11
  362. package/dist/api/controllers/query/index.js +0 -2
  363. package/dist/api/controllers/row/ExternalRequest.js +2 -4
  364. package/dist/api/controllers/row/external.js +1 -12
  365. package/dist/api/controllers/table/external.js +8 -8
  366. package/dist/api/index.js +21 -1
  367. package/dist/api/routes/automation.js +1 -1
  368. package/dist/api/routes/public/tests/utils.js +33 -0
  369. package/dist/app.js +1 -7
  370. package/dist/constants/index.js +24 -4
  371. package/dist/db/defaultData/datasource_bb_default.js +5 -6
  372. package/dist/db/linkedRows/LinkController.js +8 -9
  373. package/dist/integrations/base/sql.js +3 -10
  374. package/dist/middleware/authorized.js +3 -5
  375. package/dist/middleware/builder.js +3 -6
  376. package/dist/package.json +8 -12
  377. package/dist/sdk/app/backups/exports.js +2 -8
  378. package/dist/sdk/app/datasources/datasources.js +0 -3
  379. package/dist/tsconfig.build.tsbuildinfo +1 -1
  380. package/dist/utilities/redis.js +0 -2
  381. package/jest.config.ts +22 -34
  382. package/package.json +9 -13
  383. package/specs/openapi.json +6 -6
  384. package/specs/openapi.yaml +3 -3
  385. package/specs/resources/query.js +1 -1
  386. package/specs/resources/table.js +1 -1
  387. package/src/api/controllers/automation.ts +2 -13
  388. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  389. package/src/api/controllers/query/index.ts +0 -2
  390. package/src/api/controllers/row/ExternalRequest.ts +2 -6
  391. package/src/api/controllers/row/external.ts +1 -13
  392. package/src/api/controllers/table/external.ts +2 -3
  393. package/src/api/index.ts +22 -3
  394. package/src/api/routes/automation.ts +1 -1
  395. package/src/api/routes/public/applications.ts +1 -0
  396. package/src/api/routes/public/tests/compare.spec.js +1 -1
  397. package/src/api/routes/public/tests/users.spec.js +1 -1
  398. package/src/api/routes/public/tests/utils.ts +8 -25
  399. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  400. package/src/api/routes/tests/analytics.spec.js +1 -4
  401. package/src/api/routes/tests/apikeys.spec.js +1 -1
  402. package/src/api/routes/tests/application.spec.ts +6 -20
  403. package/src/api/routes/tests/auth.spec.js +2 -2
  404. package/src/api/routes/tests/automation.spec.js +2 -6
  405. package/src/api/routes/tests/backup.spec.ts +14 -4
  406. package/src/api/routes/tests/{cloud.seq.spec.ts → cloud.spec.ts} +15 -11
  407. package/src/api/routes/tests/component.spec.js +1 -1
  408. package/src/api/routes/tests/datasource.spec.ts +3 -20
  409. package/src/api/routes/tests/dev.spec.js +1 -1
  410. package/src/api/routes/tests/integration.spec.js +1 -1
  411. package/src/api/routes/tests/layout.spec.js +1 -1
  412. package/src/api/routes/tests/metadata.spec.js +1 -1
  413. package/src/api/routes/tests/misc.spec.js +1 -1
  414. package/src/api/routes/tests/permissions.spec.js +1 -4
  415. package/src/api/routes/tests/{query.seq.spec.js → query.spec.js} +1 -22
  416. package/src/api/routes/tests/role.spec.js +1 -6
  417. package/src/api/routes/tests/routing.spec.js +1 -1
  418. package/src/api/routes/tests/row.spec.js +3 -11
  419. package/src/api/routes/tests/screen.spec.js +1 -1
  420. package/src/api/routes/tests/static.spec.js +13 -2
  421. package/src/api/routes/tests/table.spec.js +1 -1
  422. package/src/api/routes/tests/templates.spec.js +1 -1
  423. package/src/api/routes/tests/user.spec.js +12 -11
  424. package/src/api/routes/tests/utilities/TestFunctions.ts +2 -25
  425. package/src/api/routes/tests/utilities/index.ts +3 -5
  426. package/src/api/routes/tests/view.spec.js +1 -4
  427. package/src/api/routes/tests/webhook.spec.js +2 -11
  428. package/src/app.ts +1 -10
  429. package/src/automations/tests/automation.spec.js +4 -4
  430. package/src/automations/tests/bash.spec.js +1 -1
  431. package/src/automations/tests/discord.spec.js +1 -1
  432. package/src/automations/tests/executeQuery.spec.js +3 -2
  433. package/src/automations/tests/executeScript.spec.js +1 -1
  434. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  435. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  436. package/src/automations/tests/serverLog.spec.js +1 -1
  437. package/src/automations/tests/updateRow.spec.js +1 -1
  438. package/src/automations/tests/zapier.spec.js +1 -1
  439. package/src/constants/index.ts +23 -1
  440. package/src/db/defaultData/datasource_bb_default.ts +10 -6
  441. package/src/db/linkedRows/LinkController.ts +1 -2
  442. package/src/db/tests/linkController.spec.js +1 -4
  443. package/src/db/tests/linkTests.spec.js +1 -1
  444. package/src/integrations/base/sql.ts +5 -15
  445. package/src/integrations/oracle.ts +1 -1
  446. package/src/integrations/tests/couchdb.spec.ts +2 -0
  447. package/src/middleware/authorized.ts +4 -6
  448. package/src/middleware/builder.ts +3 -8
  449. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  450. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  451. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  452. package/src/migrations/tests/index.spec.ts +20 -13
  453. package/src/sdk/app/backups/exports.ts +2 -8
  454. package/src/sdk/app/datasources/datasources.ts +0 -3
  455. package/src/tests/jestEnv.ts +11 -8
  456. package/src/tests/jestSetup.ts +7 -9
  457. package/src/tests/utilities/TestConfiguration.ts +92 -166
  458. package/src/tests/utilities/structures.ts +2 -16
  459. package/src/utilities/redis.ts +0 -2
  460. package/tsconfig.build.json +0 -1
  461. package/builder/assets/blankScreenPreview.72634dd1.png +0 -0
  462. package/builder/assets/index.22724f34.css +0 -6
  463. package/builder/assets/listScreenPreview.599c0aae.png +0 -0
  464. package/dist/ddApm.js +0 -11
  465. package/dist/elasticApm.js +0 -14
  466. package/dist/utilities/retry.js +0 -30
  467. package/jest-testcontainers-config.js +0 -8
  468. package/scripts/load/create-many-apps.js +0 -24
  469. package/scripts/load/create-many-rows.js +0 -30
  470. package/scripts/load/utils.js +0 -66
  471. package/scripts/test.sh +0 -12
  472. package/src/api/routes/tests/environmentVariables.spec.ts +0 -144
  473. package/src/ddApm.ts +0 -7
  474. package/src/elasticApm.ts +0 -10
  475. package/src/integration-test/postgres.spec.ts +0 -762
  476. package/src/tests/logging.ts +0 -34
  477. package/src/utilities/retry.ts +0 -18
@@ -0,0 +1,1036 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/integrations/utils.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/integrations</a> utils.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">25.86% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>30/116</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">11.53% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>6/52</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">27.27% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>9/33</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">23.42% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>26/111</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
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
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">64x</span>
384
+ <span class="cline-any cline-yes">64x</span>
385
+ <span class="cline-any cline-yes">64x</span>
386
+ <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-yes">64x</span>
388
+ <span class="cline-any cline-yes">64x</span>
389
+ <span class="cline-any cline-neutral">&nbsp;</span>
390
+ <span class="cline-any cline-yes">64x</span>
391
+ <span class="cline-any cline-neutral">&nbsp;</span>
392
+ <span class="cline-any cline-neutral">&nbsp;</span>
393
+ <span class="cline-any cline-neutral">&nbsp;</span>
394
+ <span class="cline-any cline-neutral">&nbsp;</span>
395
+ <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-neutral">&nbsp;</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-neutral">&nbsp;</span>
400
+ <span class="cline-any cline-neutral">&nbsp;</span>
401
+ <span class="cline-any cline-neutral">&nbsp;</span>
402
+ <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
408
+ <span class="cline-any cline-neutral">&nbsp;</span>
409
+ <span class="cline-any cline-neutral">&nbsp;</span>
410
+ <span class="cline-any cline-yes">64x</span>
411
+ <span class="cline-any cline-neutral">&nbsp;</span>
412
+ <span class="cline-any cline-neutral">&nbsp;</span>
413
+ <span class="cline-any cline-neutral">&nbsp;</span>
414
+ <span class="cline-any cline-neutral">&nbsp;</span>
415
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-neutral">&nbsp;</span>
417
+ <span class="cline-any cline-neutral">&nbsp;</span>
418
+ <span class="cline-any cline-yes">64x</span>
419
+ <span class="cline-any cline-yes">64x</span>
420
+ <span class="cline-any cline-neutral">&nbsp;</span>
421
+ <span class="cline-any cline-yes">64x</span>
422
+ <span class="cline-any cline-neutral">&nbsp;</span>
423
+ <span class="cline-any cline-neutral">&nbsp;</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-neutral">&nbsp;</span>
426
+ <span class="cline-any cline-neutral">&nbsp;</span>
427
+ <span class="cline-any cline-neutral">&nbsp;</span>
428
+ <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-neutral">&nbsp;</span>
432
+ <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-yes">64x</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-neutral">&nbsp;</span>
437
+ <span class="cline-any cline-neutral">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-yes">64x</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-yes">64x</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
446
+ <span class="cline-any cline-neutral">&nbsp;</span>
447
+ <span class="cline-any cline-neutral">&nbsp;</span>
448
+ <span class="cline-any cline-neutral">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-yes">64x</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-neutral">&nbsp;</span>
455
+ <span class="cline-any cline-neutral">&nbsp;</span>
456
+ <span class="cline-any cline-neutral">&nbsp;</span>
457
+ <span class="cline-any cline-neutral">&nbsp;</span>
458
+ <span class="cline-any cline-neutral">&nbsp;</span>
459
+ <span class="cline-any cline-yes">189x</span>
460
+ <span class="cline-any cline-yes">189x</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-neutral">&nbsp;</span>
463
+ <span class="cline-any cline-no">&nbsp;</span>
464
+ <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-neutral">&nbsp;</span>
466
+ <span class="cline-any cline-neutral">&nbsp;</span>
467
+ <span class="cline-any cline-no">&nbsp;</span>
468
+ <span class="cline-any cline-no">&nbsp;</span>
469
+ <span class="cline-any cline-no">&nbsp;</span>
470
+ <span class="cline-any cline-neutral">&nbsp;</span>
471
+ <span class="cline-any cline-no">&nbsp;</span>
472
+ <span class="cline-any cline-no">&nbsp;</span>
473
+ <span class="cline-any cline-neutral">&nbsp;</span>
474
+ <span class="cline-any cline-no">&nbsp;</span>
475
+ <span class="cline-any cline-no">&nbsp;</span>
476
+ <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-neutral">&nbsp;</span>
478
+ <span class="cline-any cline-no">&nbsp;</span>
479
+ <span class="cline-any cline-no">&nbsp;</span>
480
+ <span class="cline-any cline-no">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-no">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-no">&nbsp;</span>
489
+ <span class="cline-any cline-no">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-neutral">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-no">&nbsp;</span>
496
+ <span class="cline-any cline-no">&nbsp;</span>
497
+ <span class="cline-any cline-no">&nbsp;</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-no">&nbsp;</span>
500
+ <span class="cline-any cline-no">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-no">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-no">&nbsp;</span>
507
+ <span class="cline-any cline-no">&nbsp;</span>
508
+ <span class="cline-any cline-no">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-no">&nbsp;</span>
513
+ <span class="cline-any cline-no">&nbsp;</span>
514
+ <span class="cline-any cline-no">&nbsp;</span>
515
+ <span class="cline-any cline-no">&nbsp;</span>
516
+ <span class="cline-any cline-no">&nbsp;</span>
517
+ <span class="cline-any cline-neutral">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-no">&nbsp;</span>
520
+ <span class="cline-any cline-neutral">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-no">&nbsp;</span>
524
+ <span class="cline-any cline-no">&nbsp;</span>
525
+ <span class="cline-any cline-no">&nbsp;</span>
526
+ <span class="cline-any cline-no">&nbsp;</span>
527
+ <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
530
+ <span class="cline-any cline-neutral">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-no">&nbsp;</span>
539
+ <span class="cline-any cline-no">&nbsp;</span>
540
+ <span class="cline-any cline-no">&nbsp;</span>
541
+ <span class="cline-any cline-no">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-yes">31x</span>
547
+ <span class="cline-any cline-yes">31x</span>
548
+ <span class="cline-any cline-no">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-yes">31x</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
552
+ <span class="cline-any cline-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-yes">22x</span>
555
+ <span class="cline-any cline-yes">22x</span>
556
+ <span class="cline-any cline-no">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-yes">22x</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-neutral">&nbsp;</span>
561
+ <span class="cline-any cline-neutral">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-yes">22x</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-yes">51x</span>
568
+ <span class="cline-any cline-yes">51x</span>
569
+ <span class="cline-any cline-yes">51x</span>
570
+ <span class="cline-any cline-neutral">&nbsp;</span>
571
+ <span class="cline-any cline-no">&nbsp;</span>
572
+ <span class="cline-any cline-no">&nbsp;</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-neutral">&nbsp;</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-no">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-neutral">&nbsp;</span>
593
+ <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-neutral">&nbsp;</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-neutral">&nbsp;</span>
613
+ <span class="cline-any cline-neutral">&nbsp;</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-no">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-no">&nbsp;</span>
620
+ <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-neutral">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span>
631
+ <span class="cline-any cline-neutral">&nbsp;</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-neutral">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
+ <span class="cline-any cline-no">&nbsp;</span>
643
+ <span class="cline-any cline-neutral">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-no">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
647
+ <span class="cline-any cline-no">&nbsp;</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-no">&nbsp;</span>
650
+ <span class="cline-any cline-no">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-neutral">&nbsp;</span>
654
+ <span class="cline-any cline-no">&nbsp;</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-no">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-no">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-no">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-no">&nbsp;</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-no">&nbsp;</span>
677
+ <span class="cline-any cline-no">&nbsp;</span>
678
+ <span class="cline-any cline-no">&nbsp;</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
682
+ <span class="cline-any cline-no">&nbsp;</span>
683
+ <span class="cline-any cline-no">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
685
+ <span class="cline-any cline-no">&nbsp;</span>
686
+ <span class="cline-any cline-neutral">&nbsp;</span>
687
+ <span class="cline-any cline-neutral">&nbsp;</span>
688
+ <span class="cline-any cline-no">&nbsp;</span>
689
+ <span class="cline-any cline-no">&nbsp;</span>
690
+ <span class="cline-any cline-neutral">&nbsp;</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-neutral">&nbsp;</span>
694
+ <span class="cline-any cline-neutral">&nbsp;</span>
695
+ <span class="cline-any cline-no">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-no">&nbsp;</span>
699
+ <span class="cline-any cline-neutral">&nbsp;</span>
700
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { SourceName, SqlQuery, Datasource, Table } from "@budibase/types"
701
+ import { DocumentType, SEPARATOR } from "../db/utils"
702
+ import { FieldTypes, BuildSchemaErrors, InvalidColumns } from "../constants"
703
+ &nbsp;
704
+ const DOUBLE_SEPARATOR = `${SEPARATOR}${SEPARATOR}`
705
+ const ROW_ID_REGEX = /^\[.*]$/g
706
+ &nbsp;
707
+ const SQL_NUMBER_TYPE_MAP = {
708
+ integer: FieldTypes.NUMBER,
709
+ int: FieldTypes.NUMBER,
710
+ decimal: FieldTypes.NUMBER,
711
+ smallint: FieldTypes.NUMBER,
712
+ real: FieldTypes.NUMBER,
713
+ float: FieldTypes.NUMBER,
714
+ numeric: FieldTypes.NUMBER,
715
+ mediumint: FieldTypes.NUMBER,
716
+ dec: FieldTypes.NUMBER,
717
+ double: FieldTypes.NUMBER,
718
+ fixed: FieldTypes.NUMBER,
719
+ "double precision": FieldTypes.NUMBER,
720
+ number: FieldTypes.NUMBER,
721
+ binary_float: FieldTypes.NUMBER,
722
+ binary_double: FieldTypes.NUMBER,
723
+ money: FieldTypes.NUMBER,
724
+ smallmoney: FieldTypes.NUMBER,
725
+ }
726
+ &nbsp;
727
+ const SQL_DATE_TYPE_MAP = {
728
+ timestamp: FieldTypes.DATETIME,
729
+ time: FieldTypes.DATETIME,
730
+ datetime: FieldTypes.DATETIME,
731
+ smalldatetime: FieldTypes.DATETIME,
732
+ date: FieldTypes.DATETIME,
733
+ }
734
+ &nbsp;
735
+ const SQL_DATE_ONLY_TYPES = ["date"]
736
+ const SQL_TIME_ONLY_TYPES = ["time"]
737
+ &nbsp;
738
+ const SQL_STRING_TYPE_MAP = {
739
+ varchar: FieldTypes.STRING,
740
+ char: FieldTypes.STRING,
741
+ nchar: FieldTypes.STRING,
742
+ nvarchar: FieldTypes.STRING,
743
+ ntext: FieldTypes.STRING,
744
+ enum: FieldTypes.STRING,
745
+ blob: FieldTypes.STRING,
746
+ long: FieldTypes.STRING,
747
+ text: FieldTypes.STRING,
748
+ bigint: FieldTypes.STRING,
749
+ }
750
+ &nbsp;
751
+ const SQL_BOOLEAN_TYPE_MAP = {
752
+ boolean: FieldTypes.BOOLEAN,
753
+ bit: FieldTypes.BOOLEAN,
754
+ tinyint: FieldTypes.BOOLEAN,
755
+ }
756
+ &nbsp;
757
+ const SQL_MISC_TYPE_MAP = {
758
+ json: FieldTypes.JSON,
759
+ }
760
+ &nbsp;
761
+ const SQL_TYPE_MAP = {
762
+ ...SQL_NUMBER_TYPE_MAP,
763
+ ...SQL_DATE_TYPE_MAP,
764
+ ...SQL_STRING_TYPE_MAP,
765
+ ...SQL_BOOLEAN_TYPE_MAP,
766
+ ...SQL_MISC_TYPE_MAP,
767
+ }
768
+ &nbsp;
769
+ export enum SqlClient {
770
+ MS_SQL = "mssql",
771
+ POSTGRES = "pg",
772
+ MY_SQL = "mysql2",
773
+ ORACLE = "oracledb",
774
+ }
775
+ &nbsp;
776
+ export function isExternalTable(tableId: string) {
777
+ return tableId.includes(DocumentType.DATASOURCE)
778
+ }
779
+ &nbsp;
780
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >buildExternalTableId<span class="fstat-no" title="function not covered" >(</span></span>d</span>atasourceId: string, tableName: string) {
781
+ <span class="cstat-no" title="statement not covered" > return `${datasourceId}${DOUBLE_SEPARATOR}${tableName}`</span>
782
+ }
783
+ &nbsp;
784
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >breakExternalTableId<span class="fstat-no" title="function not covered" >(</span></span>t</span>ableId: string | undefined) {
785
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!tableId) {</span>
786
+ <span class="cstat-no" title="statement not covered" > return {}</span>
787
+ }
788
+ const parts = <span class="cstat-no" title="statement not covered" >tableId.split(DOUBLE_SEPARATOR)</span>
789
+ let datasourceId = <span class="cstat-no" title="statement not covered" >parts.shift()</span>
790
+ // if they need joined
791
+ let tableName = <span class="cstat-no" title="statement not covered" >parts.join(DOUBLE_SEPARATOR)</span>
792
+ <span class="cstat-no" title="statement not covered" > return { datasourceId, tableName }</span>
793
+ }
794
+ &nbsp;
795
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >generateRowIdField<span class="fstat-no" title="function not covered" >(</span></span>k</span>eyProps: any[] = <span class="branch-0 cbranch-no" title="branch not covered" >[])</span> {
796
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(keyProps)) {</span>
797
+ <span class="cstat-no" title="statement not covered" > keyProps = [keyProps]</span>
798
+ }
799
+ // this conserves order and types
800
+ // we have to swap the double quotes to single quotes for use in HBS statements
801
+ // when using the literal helper the double quotes can break things
802
+ <span class="cstat-no" title="statement not covered" > return encodeURIComponent(JSON.stringify(keyProps).replace(/"/g, "'"))</span>
803
+ }
804
+ &nbsp;
805
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >isRowId<span class="fstat-no" title="function not covered" >(</span></span>f</span>ield: any) {
806
+ <span class="cstat-no" title="statement not covered" > return (</span>
807
+ Array.isArray(field) ||
808
+ (typeof field === "string" &amp;&amp; field.match(ROW_ID_REGEX) != null)
809
+ )
810
+ }
811
+ &nbsp;
812
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >convertRowId<span class="fstat-no" title="function not covered" >(</span></span>f</span>ield: any) {
813
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(field)) {</span>
814
+ <span class="cstat-no" title="statement not covered" > return field[0]</span>
815
+ }
816
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof field === "string" &amp;&amp; field.match(ROW_ID_REGEX) != null) {</span>
817
+ <span class="cstat-no" title="statement not covered" > return field.substring(1, field.length - 1)</span>
818
+ }
819
+ <span class="cstat-no" title="statement not covered" > return field</span>
820
+ }
821
+ &nbsp;
822
+ // should always return an array
823
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >breakRowIdField<span class="fstat-no" title="function not covered" >(</span></span>_</span>id: string | { _id: string }): any[] {
824
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!_id) {</span>
825
+ <span class="cstat-no" title="statement not covered" > return []</span>
826
+ }
827
+ // have to replace on the way back as we swapped out the double quotes
828
+ // when encoding, but JSON can't handle the single quotes
829
+ const id = <span class="cstat-no" title="statement not covered" >typeof _id === "string" ? _id : _id._id</span>
830
+ const decoded: string = <span class="cstat-no" title="statement not covered" >decodeURIComponent(id).replace(/'/g, '"')</span>
831
+ <span class="cstat-no" title="statement not covered" > try {</span>
832
+ const parsed = <span class="cstat-no" title="statement not covered" >JSON.parse(decoded)</span>
833
+ <span class="cstat-no" title="statement not covered" > return Array.isArray(parsed) ? parsed : [parsed]</span>
834
+ } catch (err) {
835
+ // wasn't json - likely was handlebars for a many to many
836
+ <span class="cstat-no" title="statement not covered" > return [_id]</span>
837
+ }
838
+ }
839
+ &nbsp;
840
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >convertSqlType<span class="fstat-no" title="function not covered" >(</span></span>t</span>ype: string) {
841
+ let foundType = <span class="cstat-no" title="statement not covered" >FieldTypes.STRING</span>
842
+ const lcType = <span class="cstat-no" title="statement not covered" >type.toLowerCase()</span>
843
+ let matchingTypes = <span class="cstat-no" title="statement not covered" >[]</span>
844
+ <span class="cstat-no" title="statement not covered" > for (let [external, internal] of Object.entries(SQL_TYPE_MAP)) {</span>
845
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (lcType.includes(external)) {</span>
846
+ <span class="cstat-no" title="statement not covered" > matchingTypes.push({ external, internal })</span>
847
+ }
848
+ }
849
+ //Set the foundType based the longest match
850
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (matchingTypes.length &gt; 0) {</span>
851
+ <span class="cstat-no" title="statement not covered" > foundType = matchingTypes.reduce(<span class="fstat-no" title="function not covered" >(a</span>cc, val) =&gt; {</span>
852
+ <span class="cstat-no" title="statement not covered" > return acc.external.length &gt;= val.external.length ? acc : val</span>
853
+ }).internal
854
+ }
855
+ const schema: any = <span class="cstat-no" title="statement not covered" >{ type: foundType }</span>
856
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (foundType === FieldTypes.DATETIME) {</span>
857
+ <span class="cstat-no" title="statement not covered" > schema.dateOnly = SQL_DATE_ONLY_TYPES.includes(lcType)</span>
858
+ <span class="cstat-no" title="statement not covered" > schema.timeOnly = SQL_TIME_ONLY_TYPES.includes(lcType)</span>
859
+ }
860
+ <span class="cstat-no" title="statement not covered" > return schema</span>
861
+ }
862
+ &nbsp;
863
+ export function getSqlQuery(query: SqlQuery | string): SqlQuery {
864
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof query === "string") {
865
+ <span class="cstat-no" title="statement not covered" > return { sql: query }</span>
866
+ } else {
867
+ return query
868
+ }
869
+ }
870
+ &nbsp;
871
+ export function isSQL(datasource: Datasource): boolean {
872
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!datasource || !datasource.source) {
873
+ <span class="cstat-no" title="statement not covered" > return false</span>
874
+ }
875
+ const SQL = [
876
+ SourceName.POSTGRES,
877
+ SourceName.SQL_SERVER,
878
+ SourceName.MYSQL,
879
+ SourceName.ORACLE,
880
+ ]
881
+ return SQL.indexOf(datasource.source) !== -1
882
+ }
883
+ &nbsp;
884
+ export function isIsoDateString(str: string) {
885
+ if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(str)) {
886
+ return false
887
+ }
888
+ let d = <span class="cstat-no" title="statement not covered" >new Date(str)</span>
889
+ <span class="cstat-no" title="statement not covered" > return d.toISOString() === str</span>
890
+ }
891
+ &nbsp;
892
+ /**
893
+ * This function will determine whether a column is a relationship and whether it
894
+ * is currently valid. The reason for the validity check is that tables can be deleted
895
+ * outside of Budibase control and if this is the case it will break Budibase relationships.
896
+ * The tableIds is a list passed down from the main finalise tables function, which is
897
+ * based on the tables that have just been fetched. This will only really be used on subsequent
898
+ * fetches to the first one - if the user is periodically refreshing Budibase knowledge of tables.
899
+ * @param column The column to check, to see if it is a valid relationship.
900
+ * @param tableIds The IDs of the tables which currently exist.
901
+ */
902
+ function <span class="fstat-no" title="function not covered" >shouldCopyRelationship(</span>
903
+ column: { type: string; tableId?: string },
904
+ tableIds: [string]
905
+ ) {
906
+ <span class="cstat-no" title="statement not covered" > return (</span>
907
+ column.type === FieldTypes.LINK &amp;&amp;
908
+ column.tableId &amp;&amp;
909
+ tableIds.includes(column.tableId)
910
+ )
911
+ }
912
+ &nbsp;
913
+ /**
914
+ * Similar function to the shouldCopyRelationship function, but instead this looks for options and boolean
915
+ * types. It is possible to switch a string -&gt; options and a number -&gt; boolean (and vice versus) need to make
916
+ * sure that these get copied over when tables are fetched. Also checks whether they are still valid, if a
917
+ * column has changed type in the external database then copying it over may not be possible.
918
+ * @param column The column to check for options or boolean type.
919
+ * @param fetchedColumn The fetched column to check for the type in the external database.
920
+ */
921
+ function <span class="fstat-no" title="function not covered" >shouldCopySpecialColumn(</span>
922
+ column: { type: string },
923
+ fetchedColumn: { type: string } | undefined
924
+ ) {
925
+ const specialTypes = <span class="cstat-no" title="statement not covered" >[</span>
926
+ FieldTypes.OPTIONS,
927
+ FieldTypes.LONGFORM,
928
+ FieldTypes.ARRAY,
929
+ FieldTypes.FORMULA,
930
+ ]
931
+ // column has been deleted, remove
932
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (column &amp;&amp; !fetchedColumn) {</span>
933
+ <span class="cstat-no" title="statement not covered" > return false</span>
934
+ }
935
+ const fetchedIsNumber =
936
+ <span class="cstat-no" title="statement not covered" > !fetchedColumn || fetchedColumn.type === FieldTypes.NUMBER</span>
937
+ <span class="cstat-no" title="statement not covered" > return (</span>
938
+ specialTypes.indexOf(column.type as FieldTypes) !== -1 ||
939
+ (fetchedIsNumber &amp;&amp; column.type === FieldTypes.BOOLEAN)
940
+ )
941
+ }
942
+ &nbsp;
943
+ /**
944
+ * Looks for columns which need to be copied over into the new table definitions, like relationships
945
+ * and options types.
946
+ * @param tableName The name of the table which is being checked.
947
+ * @param table The specific table which is being checked.
948
+ * @param entities All the tables that existed before - the old table definitions.
949
+ * @param tableIds The IDs of the tables which exist now, to check if anything has been removed.
950
+ */
951
+ function <span class="fstat-no" title="function not covered" >copyExistingPropsOver(</span>
952
+ tableName: string,
953
+ table: Table,
954
+ entities: { [key: string]: any },
955
+ tableIds: [string]
956
+ ) {
957
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (entities &amp;&amp; entities[tableName]) {</span>
958
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (entities[tableName].primaryDisplay) {</span>
959
+ <span class="cstat-no" title="statement not covered" > table.primaryDisplay = entities[tableName].primaryDisplay</span>
960
+ }
961
+ const existingTableSchema = <span class="cstat-no" title="statement not covered" >entities[tableName].schema</span>
962
+ <span class="cstat-no" title="statement not covered" > for (let key in existingTableSchema) {</span>
963
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!existingTableSchema.hasOwnProperty(key)) {</span>
964
+ <span class="cstat-no" title="statement not covered" > continue</span>
965
+ }
966
+ const column = <span class="cstat-no" title="statement not covered" >existingTableSchema[key]</span>
967
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
968
+ shouldCopyRelationship(column, tableIds) ||
969
+ shouldCopySpecialColumn(column, table.schema[key])
970
+ ) {
971
+ <span class="cstat-no" title="statement not covered" > table.schema[key] = existingTableSchema[key]</span>
972
+ }
973
+ }
974
+ }
975
+ <span class="cstat-no" title="statement not covered" > return table</span>
976
+ }
977
+ &nbsp;
978
+ /**
979
+ * Look through the final table definitions to see if anything needs to be
980
+ * copied over from the old and if any errors have occurred mark them so
981
+ * that the user can be made aware.
982
+ * @param tables The list of tables that have been retrieved from the external database.
983
+ * @param entities The old list of tables, if there was any to look for definitions in.
984
+ */
985
+ export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >finaliseExternalTables<span class="fstat-no" title="function not covered" >(</span></span></span>
986
+ tables: { [key: string]: any },
987
+ entities: { [key: string]: any }
988
+ ) {
989
+ const invalidColumns = <span class="cstat-no" title="statement not covered" >Object.values(InvalidColumns)</span>
990
+ let finalTables: { [key: string]: any } = <span class="cstat-no" title="statement not covered" >{}</span>
991
+ const errors: { [key: string]: string } = <span class="cstat-no" title="statement not covered" >{}</span>
992
+ // @ts-ignore
993
+ const tableIds: [string] = <span class="cstat-no" title="statement not covered" >Object.values(tables).map(<span class="fstat-no" title="function not covered" >table =&gt; <span class="cstat-no" title="statement not covered" >t</span>able._id)</span></span>
994
+ <span class="cstat-no" title="statement not covered" > for (let [name, table] of Object.entries(tables)) {</span>
995
+ const schemaFields = <span class="cstat-no" title="statement not covered" >Object.keys(table.schema)</span>
996
+ // make sure every table has a key
997
+ <span class="cstat-no" title="statement not covered" > if (table.primary == null || table.primary.length === 0) {</span>
998
+ <span class="cstat-no" title="statement not covered" > errors[name] = BuildSchemaErrors.NO_KEY</span>
999
+ <span class="cstat-no" title="statement not covered" > continue</span>
1000
+ } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
1001
+ schemaFields.find(<span class="fstat-no" title="function not covered" >field =&gt;</span>
1002
+ <span class="cstat-no" title="statement not covered" > invalidColumns.includes(field as InvalidColumns)</span>
1003
+ )
1004
+ ) {
1005
+ <span class="cstat-no" title="statement not covered" > errors[name] = BuildSchemaErrors.INVALID_COLUMN</span>
1006
+ <span class="cstat-no" title="statement not covered" > continue</span>
1007
+ }
1008
+ // make sure all previous props have been added back
1009
+ <span class="cstat-no" title="statement not covered" > finalTables[name] = copyExistingPropsOver(name, table, entities, tableIds)</span>
1010
+ }
1011
+ // sort the tables by name
1012
+ <span class="cstat-no" title="statement not covered" > finalTables = Object.entries(finalTables)</span>
1013
+ .sort(<span class="fstat-no" title="function not covered" >([</span>a], [b]) =&gt; <span class="cstat-no" title="statement not covered" >a.localeCompare(b))</span>
1014
+ .reduce(<span class="fstat-no" title="function not covered" >(r</span>, [k, v]) =&gt; (<span class="cstat-no" title="statement not covered" >{ ...r, [k]: v }), {</span>})
1015
+ <span class="cstat-no" title="statement not covered" > return { tables: finalTables, errors }</span>
1016
+ }
1017
+ &nbsp;</pre></td></tr></table></pre>
1018
+
1019
+ <div class='push'></div><!-- for sticky footer -->
1020
+ </div><!-- /wrapper -->
1021
+ <div class='footer quiet pad2 space-top1 center small'>
1022
+ Code coverage generated by
1023
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1024
+ at Mon Feb 27 2023 10:11:39 GMT+0000 (Coordinated Universal Time)
1025
+ </div>
1026
+ <script src="../../prettify.js"></script>
1027
+ <script>
1028
+ window.onload = function () {
1029
+ prettyPrint();
1030
+ };
1031
+ </script>
1032
+ <script src="../../sorter.js"></script>
1033
+ <script src="../../block-navigation.js"></script>
1034
+ </body>
1035
+ </html>
1036
+