@budibase/server 2.3.17 → 2.3.18-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (463) hide show
  1. package/__mocks__/aws-sdk.ts +1 -1
  2. package/builder/assets/{index.4488f38d.css → index.7e76c039.css} +1 -1
  3. package/builder/assets/{index.06e34d35.js → index.e7d5703a.js} +361 -361
  4. package/builder/index.html +2 -2
  5. package/dist/api/controllers/query/index.js +2 -0
  6. package/dist/api/controllers/row/ExternalRequest.js +4 -2
  7. package/dist/api/controllers/row/external.js +12 -1
  8. package/dist/api/controllers/row/staticFormula.js +5 -1
  9. package/dist/api/controllers/table/external.js +8 -8
  10. package/dist/api/index.js +1 -21
  11. package/dist/app.js +7 -1
  12. package/dist/constants/index.js +4 -24
  13. package/dist/db/defaultData/datasource_bb_default.js +6 -5
  14. package/dist/db/linkedRows/LinkController.js +9 -8
  15. package/dist/ddApm.js +11 -0
  16. package/dist/elasticApm.js +14 -0
  17. package/dist/integrations/base/sql.js +10 -3
  18. package/dist/package.json +11 -7
  19. package/dist/sdk/app/backups/exports.js +8 -2
  20. package/dist/sdk/app/datasources/datasources.js +3 -0
  21. package/dist/tsconfig.build.tsbuildinfo +1 -1
  22. package/dist/utilities/retry.js +30 -0
  23. package/jest-testcontainers-config.js +8 -0
  24. package/jest.config.ts +28 -11
  25. package/package.json +12 -8
  26. package/scripts/load/create-many-apps.js +24 -0
  27. package/scripts/load/create-many-rows.js +30 -0
  28. package/scripts/load/utils.js +66 -0
  29. package/specs/openapi.json +6 -6
  30. package/specs/openapi.yaml +3 -3
  31. package/src/api/controllers/query/import/tests/index.spec.js +1 -1
  32. package/src/api/controllers/query/index.ts +2 -0
  33. package/src/api/controllers/row/ExternalRequest.ts +6 -2
  34. package/src/api/controllers/row/external.ts +13 -1
  35. package/src/api/controllers/row/staticFormula.ts +7 -1
  36. package/src/api/controllers/table/external.ts +3 -2
  37. package/src/api/index.ts +3 -22
  38. package/src/api/routes/public/applications.ts +0 -1
  39. package/src/api/routes/public/tests/compare.spec.js +1 -1
  40. package/src/api/routes/public/tests/users.spec.js +1 -1
  41. package/src/api/routes/public/tests/utils.ts +25 -8
  42. package/src/api/routes/tests/__snapshots__/datasource.spec.ts.snap +1 -1
  43. package/src/api/routes/tests/analytics.spec.js +4 -1
  44. package/src/api/routes/tests/apikeys.spec.js +1 -1
  45. package/src/api/routes/tests/application.spec.ts +20 -6
  46. package/src/api/routes/tests/auth.spec.js +2 -2
  47. package/src/api/routes/tests/automation.spec.js +6 -2
  48. package/src/api/routes/tests/backup.spec.ts +4 -14
  49. package/src/api/routes/tests/{cloud.spec.ts → cloud.seq.spec.ts} +11 -15
  50. package/src/api/routes/tests/component.spec.js +1 -1
  51. package/src/api/routes/tests/datasource.spec.ts +20 -3
  52. package/src/api/routes/tests/dev.spec.js +1 -1
  53. package/src/api/routes/tests/environmentVariables.spec.ts +144 -0
  54. package/src/api/routes/tests/integration.spec.js +1 -1
  55. package/src/api/routes/tests/layout.spec.js +1 -1
  56. package/src/api/routes/tests/metadata.spec.js +1 -1
  57. package/src/api/routes/tests/misc.spec.js +1 -1
  58. package/src/api/routes/tests/permissions.spec.js +4 -1
  59. package/src/api/routes/tests/{query.spec.js → query.seq.spec.js} +22 -1
  60. package/src/api/routes/tests/role.spec.js +6 -1
  61. package/src/api/routes/tests/routing.spec.js +1 -1
  62. package/src/api/routes/tests/row.spec.js +11 -3
  63. package/src/api/routes/tests/screen.spec.js +1 -1
  64. package/src/api/routes/tests/static.spec.js +2 -1
  65. package/src/api/routes/tests/table.spec.js +1 -1
  66. package/src/api/routes/tests/templates.spec.js +1 -1
  67. package/src/api/routes/tests/user.spec.js +12 -12
  68. package/src/api/routes/tests/utilities/TestFunctions.ts +25 -2
  69. package/src/api/routes/tests/utilities/index.ts +5 -3
  70. package/src/api/routes/tests/view.spec.js +4 -1
  71. package/src/api/routes/tests/webhook.spec.js +11 -2
  72. package/src/app.ts +10 -1
  73. package/src/automations/tests/automation.spec.js +4 -4
  74. package/src/automations/tests/bash.spec.js +1 -1
  75. package/src/automations/tests/discord.spec.js +1 -1
  76. package/src/automations/tests/executeQuery.spec.js +2 -3
  77. package/src/automations/tests/executeScript.spec.js +1 -1
  78. package/src/automations/tests/outgoingWebhook.spec.js +1 -1
  79. package/src/automations/tests/sendSmtpEmail.spec.js +1 -1
  80. package/src/automations/tests/serverLog.spec.js +1 -1
  81. package/src/automations/tests/updateRow.spec.js +1 -1
  82. package/src/automations/tests/zapier.spec.js +1 -1
  83. package/src/constants/index.ts +1 -23
  84. package/src/db/defaultData/datasource_bb_default.ts +6 -10
  85. package/src/db/linkedRows/LinkController.ts +2 -1
  86. package/src/db/tests/linkController.spec.js +4 -1
  87. package/src/db/tests/linkTests.spec.js +1 -1
  88. package/src/ddApm.ts +7 -0
  89. package/src/elasticApm.ts +10 -0
  90. package/src/integration-test/postgres.spec.ts +762 -0
  91. package/src/integrations/base/sql.ts +15 -5
  92. package/src/integrations/oracle.ts +1 -1
  93. package/src/integrations/tests/couchdb.spec.ts +0 -2
  94. package/src/migrations/functions/tests/appUrls.spec.js +1 -1
  95. package/src/migrations/functions/tests/syncQuotas.spec.js +1 -1
  96. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +1 -1
  97. package/src/migrations/tests/index.spec.ts +13 -20
  98. package/src/sdk/app/backups/exports.ts +8 -2
  99. package/src/sdk/app/datasources/datasources.ts +3 -0
  100. package/src/tests/jestEnv.ts +8 -11
  101. package/src/tests/jestSetup.ts +9 -7
  102. package/src/tests/logging.ts +34 -0
  103. package/src/tests/utilities/TestConfiguration.ts +166 -92
  104. package/src/tests/utilities/structures.ts +16 -2
  105. package/src/utilities/retry.ts +18 -0
  106. package/tsconfig.build.json +1 -0
  107. package/coverage/clover.xml +0 -11771
  108. package/coverage/coverage-final.json +0 -284
  109. package/coverage/lcov-report/base.css +0 -224
  110. package/coverage/lcov-report/block-navigation.js +0 -87
  111. package/coverage/lcov-report/favicon.png +0 -0
  112. package/coverage/lcov-report/index.html +0 -1031
  113. package/coverage/lcov-report/prettify.css +0 -1
  114. package/coverage/lcov-report/prettify.js +0 -2
  115. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  116. package/coverage/lcov-report/sorter.js +0 -196
  117. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +0 -190
  118. package/coverage/lcov-report/src/api/controllers/apikeys.ts.html +0 -247
  119. package/coverage/lcov-report/src/api/controllers/application.ts.html +0 -1987
  120. package/coverage/lcov-report/src/api/controllers/auth.ts.html +0 -301
  121. package/coverage/lcov-report/src/api/controllers/automation.ts.html +0 -940
  122. package/coverage/lcov-report/src/api/controllers/backup.ts.html +0 -148
  123. package/coverage/lcov-report/src/api/controllers/cloud.ts.html +0 -442
  124. package/coverage/lcov-report/src/api/controllers/component.ts.html +0 -259
  125. package/coverage/lcov-report/src/api/controllers/datasource.ts.html +0 -1135
  126. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +0 -262
  127. package/coverage/lcov-report/src/api/controllers/deploy/index.html +0 -131
  128. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +0 -694
  129. package/coverage/lcov-report/src/api/controllers/dev.ts.html +0 -472
  130. package/coverage/lcov-report/src/api/controllers/index.html +0 -431
  131. package/coverage/lcov-report/src/api/controllers/integration.ts.html +0 -124
  132. package/coverage/lcov-report/src/api/controllers/layout.ts.html +0 -226
  133. package/coverage/lcov-report/src/api/controllers/metadata.ts.html +0 -211
  134. package/coverage/lcov-report/src/api/controllers/migrations.ts.html +0 -127
  135. package/coverage/lcov-report/src/api/controllers/permission.ts.html +0 -619
  136. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +0 -130
  137. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +0 -310
  138. package/coverage/lcov-report/src/api/controllers/plugin/index.html +0 -206
  139. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +0 -499
  140. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +0 -253
  141. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +0 -97
  142. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +0 -121
  143. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +0 -136
  144. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +0 -385
  145. package/coverage/lcov-report/src/api/controllers/public/index.html +0 -191
  146. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +0 -181
  147. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +0 -191
  148. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +0 -124
  149. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +0 -202
  150. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +0 -178
  151. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +0 -163
  152. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +0 -181
  153. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +0 -145
  154. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +0 -328
  155. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +0 -253
  156. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +0 -325
  157. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +0 -220
  158. package/coverage/lcov-report/src/api/controllers/query/import/index.html +0 -116
  159. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +0 -373
  160. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +0 -131
  161. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +0 -379
  162. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +0 -157
  163. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +0 -403
  164. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +0 -146
  165. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +0 -586
  166. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +0 -712
  167. package/coverage/lcov-report/src/api/controllers/query/index.html +0 -131
  168. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +0 -1000
  169. package/coverage/lcov-report/src/api/controllers/query/validation.ts.html +0 -235
  170. package/coverage/lcov-report/src/api/controllers/role.ts.html +0 -397
  171. package/coverage/lcov-report/src/api/controllers/routing.ts.html +0 -370
  172. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +0 -2305
  173. package/coverage/lcov-report/src/api/controllers/row/external.ts.html +0 -931
  174. package/coverage/lcov-report/src/api/controllers/row/index.html +0 -206
  175. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +0 -541
  176. package/coverage/lcov-report/src/api/controllers/row/internal.ts.html +0 -1609
  177. package/coverage/lcov-report/src/api/controllers/row/internalSearch.ts.html +0 -1678
  178. package/coverage/lcov-report/src/api/controllers/row/staticFormula.ts.html +0 -577
  179. package/coverage/lcov-report/src/api/controllers/row/utils.ts.html +0 -556
  180. package/coverage/lcov-report/src/api/controllers/screen.ts.html +0 -463
  181. package/coverage/lcov-report/src/api/controllers/script.ts.html +0 -121
  182. package/coverage/lcov-report/src/api/controllers/static/index.html +0 -116
  183. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +0 -679
  184. package/coverage/lcov-report/src/api/controllers/table/bulkFormula.ts.html +0 -649
  185. package/coverage/lcov-report/src/api/controllers/table/external.ts.html +0 -1153
  186. package/coverage/lcov-report/src/api/controllers/table/index.html +0 -176
  187. package/coverage/lcov-report/src/api/controllers/table/index.ts.html +0 -514
  188. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +0 -658
  189. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +0 -1273
  190. package/coverage/lcov-report/src/api/controllers/templates.ts.html +0 -214
  191. package/coverage/lcov-report/src/api/controllers/user.ts.html +0 -634
  192. package/coverage/lcov-report/src/api/controllers/view/exporters.ts.html +0 -214
  193. package/coverage/lcov-report/src/api/controllers/view/index.html +0 -161
  194. package/coverage/lcov-report/src/api/controllers/view/index.ts.html +0 -661
  195. package/coverage/lcov-report/src/api/controllers/view/utils.ts.html +0 -580
  196. package/coverage/lcov-report/src/api/controllers/view/viewBuilder.ts.html +0 -694
  197. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +0 -385
  198. package/coverage/lcov-report/src/api/index.html +0 -116
  199. package/coverage/lcov-report/src/api/index.ts.html +0 -352
  200. package/coverage/lcov-report/src/api/routes/analytics.ts.html +0 -112
  201. package/coverage/lcov-report/src/api/routes/apikeys.ts.html +0 -121
  202. package/coverage/lcov-report/src/api/routes/application.ts.html +0 -256
  203. package/coverage/lcov-report/src/api/routes/auth.ts.html +0 -109
  204. package/coverage/lcov-report/src/api/routes/automation.ts.html +0 -346
  205. package/coverage/lcov-report/src/api/routes/backup.ts.html +0 -127
  206. package/coverage/lcov-report/src/api/routes/cloud.ts.html +0 -139
  207. package/coverage/lcov-report/src/api/routes/component.ts.html +0 -127
  208. package/coverage/lcov-report/src/api/routes/datasource.ts.html +0 -265
  209. package/coverage/lcov-report/src/api/routes/deploy.ts.html +0 -145
  210. package/coverage/lcov-report/src/api/routes/dev.ts.html +0 -199
  211. package/coverage/lcov-report/src/api/routes/index.html +0 -551
  212. package/coverage/lcov-report/src/api/routes/index.ts.html +0 -298
  213. package/coverage/lcov-report/src/api/routes/integration.ts.html +0 -133
  214. package/coverage/lcov-report/src/api/routes/layout.ts.html +0 -133
  215. package/coverage/lcov-report/src/api/routes/metadata.ts.html +0 -199
  216. package/coverage/lcov-report/src/api/routes/migrations.ts.html +0 -127
  217. package/coverage/lcov-report/src/api/routes/permission.ts.html +0 -208
  218. package/coverage/lcov-report/src/api/routes/plugin.ts.html +0 -151
  219. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +0 -673
  220. package/coverage/lcov-report/src/api/routes/public/index.html +0 -191
  221. package/coverage/lcov-report/src/api/routes/public/index.ts.html +0 -493
  222. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +0 -116
  223. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +0 -340
  224. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +0 -313
  225. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +0 -598
  226. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +0 -586
  227. package/coverage/lcov-report/src/api/routes/public/tests/index.html +0 -116
  228. package/coverage/lcov-report/src/api/routes/public/tests/utils.ts.html +0 -169
  229. package/coverage/lcov-report/src/api/routes/public/users.ts.html +0 -511
  230. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +0 -238
  231. package/coverage/lcov-report/src/api/routes/public/utils/index.html +0 -116
  232. package/coverage/lcov-report/src/api/routes/query.ts.html +0 -268
  233. package/coverage/lcov-report/src/api/routes/role.ts.html +0 -157
  234. package/coverage/lcov-report/src/api/routes/routing.ts.html +0 -127
  235. package/coverage/lcov-report/src/api/routes/row.ts.html +0 -883
  236. package/coverage/lcov-report/src/api/routes/screen.ts.html +0 -154
  237. package/coverage/lcov-report/src/api/routes/script.ts.html +0 -115
  238. package/coverage/lcov-report/src/api/routes/static.ts.html +0 -280
  239. package/coverage/lcov-report/src/api/routes/table.ts.html +0 -595
  240. package/coverage/lcov-report/src/api/routes/templates.ts.html +0 -133
  241. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +0 -550
  242. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +0 -131
  243. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +0 -367
  244. package/coverage/lcov-report/src/api/routes/user.ts.html +0 -238
  245. package/coverage/lcov-report/src/api/routes/utils/index.html +0 -116
  246. package/coverage/lcov-report/src/api/routes/utils/validators.ts.html +0 -805
  247. package/coverage/lcov-report/src/api/routes/view.ts.html +0 -187
  248. package/coverage/lcov-report/src/api/routes/webhook.ts.html +0 -166
  249. package/coverage/lcov-report/src/app.ts.html +0 -424
  250. package/coverage/lcov-report/src/automations/actions.ts.html +0 -316
  251. package/coverage/lcov-report/src/automations/automationUtils.ts.html +0 -562
  252. package/coverage/lcov-report/src/automations/bullboard.ts.html +0 -199
  253. package/coverage/lcov-report/src/automations/index.html +0 -191
  254. package/coverage/lcov-report/src/automations/index.ts.html +0 -163
  255. package/coverage/lcov-report/src/automations/logging/index.html +0 -116
  256. package/coverage/lcov-report/src/automations/logging/index.ts.html +0 -199
  257. package/coverage/lcov-report/src/automations/steps/bash.ts.html +0 -319
  258. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +0 -382
  259. package/coverage/lcov-report/src/automations/steps/delay.ts.html +0 -217
  260. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +0 -349
  261. package/coverage/lcov-report/src/automations/steps/discord.ts.html +0 -397
  262. package/coverage/lcov-report/src/automations/steps/executeQuery.ts.html +0 -370
  263. package/coverage/lcov-report/src/automations/steps/executeScript.ts.html +0 -325
  264. package/coverage/lcov-report/src/automations/steps/filter.ts.html +0 -394
  265. package/coverage/lcov-report/src/automations/steps/index.html +0 -371
  266. package/coverage/lcov-report/src/automations/steps/integromat.ts.html +0 -409
  267. package/coverage/lcov-report/src/automations/steps/loop.ts.html +0 -241
  268. package/coverage/lcov-report/src/automations/steps/outgoingWebhook.ts.html +0 -499
  269. package/coverage/lcov-report/src/automations/steps/queryRows.ts.html +0 -664
  270. package/coverage/lcov-report/src/automations/steps/sendSmtpEmail.ts.html +0 -355
  271. package/coverage/lcov-report/src/automations/steps/serverLog.ts.html +0 -256
  272. package/coverage/lcov-report/src/automations/steps/slack.ts.html +0 -340
  273. package/coverage/lcov-report/src/automations/steps/updateRow.ts.html +0 -439
  274. package/coverage/lcov-report/src/automations/steps/utils.ts.html +0 -223
  275. package/coverage/lcov-report/src/automations/steps/zapier.ts.html +0 -403
  276. package/coverage/lcov-report/src/automations/tests/utilities/index.html +0 -116
  277. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +0 -265
  278. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +0 -196
  279. package/coverage/lcov-report/src/automations/triggerInfo/cron.ts.html +0 -193
  280. package/coverage/lcov-report/src/automations/triggerInfo/index.html +0 -206
  281. package/coverage/lcov-report/src/automations/triggerInfo/index.ts.html +0 -130
  282. package/coverage/lcov-report/src/automations/triggerInfo/rowDeleted.ts.html +0 -196
  283. package/coverage/lcov-report/src/automations/triggerInfo/rowSaved.ts.html +0 -220
  284. package/coverage/lcov-report/src/automations/triggerInfo/rowUpdated.ts.html +0 -220
  285. package/coverage/lcov-report/src/automations/triggerInfo/webhook.ts.html +0 -208
  286. package/coverage/lcov-report/src/automations/triggers.ts.html +0 -553
  287. package/coverage/lcov-report/src/automations/utils.ts.html +0 -886
  288. package/coverage/lcov-report/src/constants/index.html +0 -146
  289. package/coverage/lcov-report/src/constants/index.ts.html +0 -697
  290. package/coverage/lcov-report/src/constants/layouts.ts.html +0 -526
  291. package/coverage/lcov-report/src/constants/screens.ts.html +0 -229
  292. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +0 -2059
  293. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +0 -541
  294. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +0 -427
  295. package/coverage/lcov-report/src/db/defaultData/index.html +0 -176
  296. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +0 -403
  297. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +0 -559
  298. package/coverage/lcov-report/src/db/dynamoClient.ts.html +0 -526
  299. package/coverage/lcov-report/src/db/inMemoryView.ts.html +0 -250
  300. package/coverage/lcov-report/src/db/index.html +0 -176
  301. package/coverage/lcov-report/src/db/index.ts.html +0 -133
  302. package/coverage/lcov-report/src/db/linkedRows/LinkController.ts.html +0 -1417
  303. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +0 -265
  304. package/coverage/lcov-report/src/db/linkedRows/index.html +0 -161
  305. package/coverage/lcov-report/src/db/linkedRows/index.ts.html +0 -736
  306. package/coverage/lcov-report/src/db/linkedRows/linkUtils.ts.html +0 -460
  307. package/coverage/lcov-report/src/db/newid.ts.html +0 -100
  308. package/coverage/lcov-report/src/db/utils.ts.html +0 -913
  309. package/coverage/lcov-report/src/definitions/automations.ts.html +0 -184
  310. package/coverage/lcov-report/src/definitions/index.html +0 -116
  311. package/coverage/lcov-report/src/environment.ts.html +0 -472
  312. package/coverage/lcov-report/src/events/AutomationEmitter.ts.html +0 -259
  313. package/coverage/lcov-report/src/events/BudibaseEmitter.ts.html +0 -172
  314. package/coverage/lcov-report/src/events/index.html +0 -161
  315. package/coverage/lcov-report/src/events/index.ts.html +0 -100
  316. package/coverage/lcov-report/src/events/utils.ts.html +0 -319
  317. package/coverage/lcov-report/src/index.html +0 -191
  318. package/coverage/lcov-report/src/index.ts.html +0 -133
  319. package/coverage/lcov-report/src/integrations/airtable.ts.html +0 -529
  320. package/coverage/lcov-report/src/integrations/arangodb.ts.html +0 -415
  321. package/coverage/lcov-report/src/integrations/base/index.html +0 -161
  322. package/coverage/lcov-report/src/integrations/base/query.ts.html +0 -139
  323. package/coverage/lcov-report/src/integrations/base/sql.ts.html +0 -2017
  324. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +0 -691
  325. package/coverage/lcov-report/src/integrations/base/utils.ts.html +0 -121
  326. package/coverage/lcov-report/src/integrations/couchdb.ts.html +0 -484
  327. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +0 -745
  328. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +0 -646
  329. package/coverage/lcov-report/src/integrations/firebase.ts.html +0 -646
  330. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +0 -1315
  331. package/coverage/lcov-report/src/integrations/index.html +0 -371
  332. package/coverage/lcov-report/src/integrations/index.ts.html +0 -460
  333. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +0 -1012
  334. package/coverage/lcov-report/src/integrations/mongodb.ts.html +0 -1999
  335. package/coverage/lcov-report/src/integrations/mysql.ts.html +0 -979
  336. package/coverage/lcov-report/src/integrations/oracle.ts.html +0 -1387
  337. package/coverage/lcov-report/src/integrations/postgres.ts.html +0 -1087
  338. package/coverage/lcov-report/src/integrations/queries/index.html +0 -116
  339. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +0 -328
  340. package/coverage/lcov-report/src/integrations/redis.ts.html +0 -550
  341. package/coverage/lcov-report/src/integrations/rest.ts.html +0 -1372
  342. package/coverage/lcov-report/src/integrations/s3.ts.html +0 -862
  343. package/coverage/lcov-report/src/integrations/snowflake.ts.html +0 -376
  344. package/coverage/lcov-report/src/integrations/tests/TestConfiguration.js.html +0 -85
  345. package/coverage/lcov-report/src/integrations/tests/index.html +0 -116
  346. package/coverage/lcov-report/src/integrations/utils.ts.html +0 -1036
  347. package/coverage/lcov-report/src/middleware/appInfo.ts.html +0 -145
  348. package/coverage/lcov-report/src/middleware/authorized.ts.html +0 -472
  349. package/coverage/lcov-report/src/middleware/builder.ts.html +0 -361
  350. package/coverage/lcov-report/src/middleware/currentapp.ts.html +0 -508
  351. package/coverage/lcov-report/src/middleware/index.html +0 -236
  352. package/coverage/lcov-report/src/middleware/joi-validator.ts.html +0 -205
  353. package/coverage/lcov-report/src/middleware/publicApi.ts.html +0 -148
  354. package/coverage/lcov-report/src/middleware/resourceId.ts.html +0 -283
  355. package/coverage/lcov-report/src/middleware/selfhost.ts.html +0 -121
  356. package/coverage/lcov-report/src/middleware/utils.ts.html +0 -112
  357. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +0 -166
  358. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +0 -163
  359. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +0 -151
  360. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +0 -206
  361. package/coverage/lcov-report/src/migrations/functions/backfill/app/layouts.ts.html +0 -172
  362. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +0 -226
  363. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +0 -151
  364. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +0 -151
  365. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +0 -166
  366. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +0 -532
  367. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +0 -286
  368. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +0 -146
  369. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +0 -265
  370. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +0 -232
  371. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +0 -724
  372. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +0 -161
  373. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +0 -106
  374. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +0 -235
  375. package/coverage/lcov-report/src/migrations/functions/index.html +0 -161
  376. package/coverage/lcov-report/src/migrations/functions/syncQuotas.ts.html +0 -130
  377. package/coverage/lcov-report/src/migrations/functions/tableSettings.ts.html +0 -520
  378. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +0 -161
  379. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +0 -94
  380. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +0 -127
  381. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +0 -115
  382. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +0 -169
  383. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +0 -124
  384. package/coverage/lcov-report/src/migrations/index.html +0 -116
  385. package/coverage/lcov-report/src/migrations/index.ts.html +0 -430
  386. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +0 -205
  387. package/coverage/lcov-report/src/migrations/tests/index.html +0 -131
  388. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +0 -283
  389. package/coverage/lcov-report/src/sdk/app/applications/index.html +0 -146
  390. package/coverage/lcov-report/src/sdk/app/applications/index.ts.html +0 -106
  391. package/coverage/lcov-report/src/sdk/app/applications/sync.ts.html +0 -268
  392. package/coverage/lcov-report/src/sdk/app/applications/utils.ts.html +0 -136
  393. package/coverage/lcov-report/src/sdk/app/automations/index.html +0 -131
  394. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +0 -100
  395. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +0 -214
  396. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +0 -91
  397. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +0 -604
  398. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +0 -640
  399. package/coverage/lcov-report/src/sdk/app/backups/index.html +0 -176
  400. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +0 -112
  401. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +0 -292
  402. package/coverage/lcov-report/src/sdk/app/datasources/datasources.ts.html +0 -562
  403. package/coverage/lcov-report/src/sdk/app/datasources/index.html +0 -131
  404. package/coverage/lcov-report/src/sdk/app/datasources/index.ts.html +0 -100
  405. package/coverage/lcov-report/src/sdk/app/queries/index.html +0 -131
  406. package/coverage/lcov-report/src/sdk/app/queries/index.ts.html +0 -100
  407. package/coverage/lcov-report/src/sdk/app/queries/queries.ts.html +0 -235
  408. package/coverage/lcov-report/src/sdk/app/rows/attachments.ts.html +0 -265
  409. package/coverage/lcov-report/src/sdk/app/rows/index.html +0 -146
  410. package/coverage/lcov-report/src/sdk/app/rows/index.ts.html +0 -106
  411. package/coverage/lcov-report/src/sdk/app/rows/rows.ts.html +0 -139
  412. package/coverage/lcov-report/src/sdk/app/tables/index.html +0 -116
  413. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +0 -274
  414. package/coverage/lcov-report/src/sdk/index.html +0 -116
  415. package/coverage/lcov-report/src/sdk/index.ts.html +0 -151
  416. package/coverage/lcov-report/src/sdk/users/index.html +0 -131
  417. package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -100
  418. package/coverage/lcov-report/src/sdk/users/utils.ts.html +0 -277
  419. package/coverage/lcov-report/src/sdk/utils/index.html +0 -116
  420. package/coverage/lcov-report/src/sdk/utils/index.ts.html +0 -133
  421. package/coverage/lcov-report/src/startup.ts.html +0 -484
  422. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +0 -2032
  423. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +0 -127
  424. package/coverage/lcov-report/src/tests/utilities/index.html +0 -161
  425. package/coverage/lcov-report/src/tests/utilities/index.ts.html +0 -118
  426. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +0 -856
  427. package/coverage/lcov-report/src/threads/automation.ts.html +0 -1555
  428. package/coverage/lcov-report/src/threads/index.html +0 -161
  429. package/coverage/lcov-report/src/threads/index.ts.html +0 -418
  430. package/coverage/lcov-report/src/threads/query.ts.html +0 -1000
  431. package/coverage/lcov-report/src/threads/utils.ts.html +0 -373
  432. package/coverage/lcov-report/src/utilities/budibaseDir.ts.html +0 -94
  433. package/coverage/lcov-report/src/utilities/centralPath.ts.html +0 -151
  434. package/coverage/lcov-report/src/utilities/fileSystem/app.ts.html +0 -343
  435. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +0 -547
  436. package/coverage/lcov-report/src/utilities/fileSystem/filesystem.ts.html +0 -601
  437. package/coverage/lcov-report/src/utilities/fileSystem/index.html +0 -206
  438. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +0 -100
  439. package/coverage/lcov-report/src/utilities/fileSystem/plugin.ts.html +0 -277
  440. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +0 -142
  441. package/coverage/lcov-report/src/utilities/fileSystem/template.ts.html +0 -193
  442. package/coverage/lcov-report/src/utilities/global.ts.html +0 -499
  443. package/coverage/lcov-report/src/utilities/index.html +0 -251
  444. package/coverage/lcov-report/src/utilities/index.ts.html +0 -487
  445. package/coverage/lcov-report/src/utilities/redis.ts.html +0 -343
  446. package/coverage/lcov-report/src/utilities/routing/index.html +0 -116
  447. package/coverage/lcov-report/src/utilities/routing/index.ts.html +0 -181
  448. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +0 -146
  449. package/coverage/lcov-report/src/utilities/rowProcessor/index.ts.html +0 -922
  450. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +0 -373
  451. package/coverage/lcov-report/src/utilities/rowProcessor/utils.ts.html +0 -373
  452. package/coverage/lcov-report/src/utilities/schema.ts.html +0 -508
  453. package/coverage/lcov-report/src/utilities/scriptRunner.ts.html +0 -169
  454. package/coverage/lcov-report/src/utilities/security.ts.html +0 -280
  455. package/coverage/lcov-report/src/utilities/usageQuota/index.html +0 -131
  456. package/coverage/lcov-report/src/utilities/usageQuota/rows.ts.html +0 -325
  457. package/coverage/lcov-report/src/utilities/usageQuota/usageQuoteReset.ts.html +0 -139
  458. package/coverage/lcov-report/src/utilities/users.ts.html +0 -232
  459. package/coverage/lcov-report/src/utilities/workerRequests.ts.html +0 -646
  460. package/coverage/lcov-report/src/watch.ts.html +0 -196
  461. package/coverage/lcov-report/src/websocket.ts.html +0 -163
  462. package/coverage/lcov.info +0 -21770
  463. package/dist/api/routes/public/tests/utils.js +0 -33
@@ -1,1417 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/db/linkedRows/LinkController.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/db/linkedRows</a> LinkController.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">95.39% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>145/152</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">87.03% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>47/54</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">88.88% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>24/27</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">96% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>144/150</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 high'></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>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">56x</span>
511
- <span class="cline-any cline-yes">56x</span>
512
- <span class="cline-any cline-yes">56x</span>
513
- <span class="cline-any cline-yes">56x</span>
514
- <span class="cline-any cline-yes">56x</span>
515
- <span class="cline-any cline-yes">56x</span>
516
- <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
534
- <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
539
- <span class="cline-any cline-yes">235x</span>
540
- <span class="cline-any cline-yes">235x</span>
541
- <span class="cline-any cline-yes">235x</span>
542
- <span class="cline-any cline-yes">235x</span>
543
- <span class="cline-any cline-yes">235x</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-neutral">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-neutral">&nbsp;</span>
549
- <span class="cline-any cline-neutral">&nbsp;</span>
550
- <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-neutral">&nbsp;</span>
552
- <span class="cline-any cline-yes">53x</span>
553
- <span class="cline-any cline-yes">6x</span>
554
- <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-yes">53x</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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">230x</span>
568
- <span class="cline-any cline-yes">6x</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-yes">230x</span>
571
- <span class="cline-any cline-yes">550x</span>
572
- <span class="cline-any cline-yes">550x</span>
573
- <span class="cline-any cline-yes">41x</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-yes">189x</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-yes">27x</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-neutral">&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-yes">9x</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-yes">22x</span>
605
- <span class="cline-any cline-yes">22x</span>
606
- <span class="cline-any cline-yes">82x</span>
607
- <span class="cline-any cline-yes">43x</span>
608
- <span class="cline-any cline-neutral">&nbsp;</span>
609
- <span class="cline-any cline-yes">39x</span>
610
- <span class="cline-any cline-yes">39x</span>
611
- <span class="cline-any cline-yes">1x</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-yes">38x</span>
616
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
620
- <span class="cline-any cline-neutral">&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-yes">4x</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-yes">4x</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-yes">21x</span>
634
- <span class="cline-any cline-yes">2x</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-yes">2x</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-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-yes">39x</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-yes">35x</span>
650
- <span class="cline-any cline-neutral">&nbsp;</span>
651
- <span class="cline-any cline-yes">35x</span>
652
- <span class="cline-any cline-yes">4x</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-yes">3x</span>
655
- <span class="cline-any cline-yes">1x</span>
656
- <span class="cline-any cline-yes">1x</span>
657
- <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-yes">39x</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-neutral">&nbsp;</span>
669
- <span class="cline-any cline-neutral">&nbsp;</span>
670
- <span class="cline-any cline-yes">22x</span>
671
- <span class="cline-any cline-yes">22x</span>
672
- <span class="cline-any cline-yes">22x</span>
673
- <span class="cline-any cline-neutral">&nbsp;</span>
674
- <span class="cline-any cline-yes">22x</span>
675
- <span class="cline-any cline-yes">22x</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-yes">83x</span>
678
- <span class="cline-any cline-yes">83x</span>
679
- <span class="cline-any cline-yes">83x</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-yes">12x</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-yes">1x</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-yes">12x</span>
687
- <span class="cline-any cline-yes">1x</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
693
- <span class="cline-any cline-yes">12x</span>
694
- <span class="cline-any cline-yes">12x</span>
695
- <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-yes">12x</span>
698
- <span class="cline-any cline-no">&nbsp;</span>
699
- <span class="cline-any cline-no">&nbsp;</span>
700
- <span class="cline-any cline-no">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-no">&nbsp;</span>
705
- <span class="cline-any cline-no">&nbsp;</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-neutral">&nbsp;</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-yes">12x</span>
711
- <span class="cline-any cline-yes">11x</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-yes">2x</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-neutral">&nbsp;</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-neutral">&nbsp;</span>
722
- <span class="cline-any cline-yes">1x</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-yes">2x</span>
728
- <span class="cline-any cline-yes">1x</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-yes">10x</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-yes">10x</span>
737
- <span class="cline-any cline-yes">10x</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-yes">1x</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-yes">9x</span>
743
- <span class="cline-any cline-neutral">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-yes">11x</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-yes">1x</span>
759
- <span class="cline-any cline-yes">1x</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-yes">1x</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-yes">11x</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-yes">11x</span>
768
- <span class="cline-any cline-neutral">&nbsp;</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-yes">21x</span>
771
- <span class="cline-any cline-yes">21x</span>
772
- <span class="cline-any cline-neutral">&nbsp;</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-yes">2x</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-yes">2x</span>
784
- <span class="cline-any cline-yes">2x</span>
785
- <span class="cline-any cline-yes">1x</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-yes">1x</span>
788
- <span class="cline-any cline-yes">1x</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-yes">1x</span>
794
- <span class="cline-any cline-yes">1x</span>
795
- <span class="cline-any cline-neutral">&nbsp;</span>
796
- <span class="cline-any cline-neutral">&nbsp;</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-neutral">&nbsp;</span>
803
- <span class="cline-any cline-yes">2x</span>
804
- <span class="cline-any cline-yes">2x</span>
805
- <span class="cline-any cline-yes">2x</span>
806
- <span class="cline-any cline-yes">2x</span>
807
- <span class="cline-any cline-neutral">&nbsp;</span>
808
- <span class="cline-any cline-yes">4x</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-yes">4x</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-yes">2x</span>
814
- <span class="cline-any cline-neutral">&nbsp;</span>
815
- <span class="cline-any cline-yes">3x</span>
816
- <span class="cline-any cline-neutral">&nbsp;</span>
817
- <span class="cline-any cline-neutral">&nbsp;</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-neutral">&nbsp;</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-neutral">&nbsp;</span>
822
- <span class="cline-any cline-yes">2x</span>
823
- <span class="cline-any cline-yes">2x</span>
824
- <span class="cline-any cline-yes">2x</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-yes">2x</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-neutral">&nbsp;</span>
831
- <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-neutral">&nbsp;</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-neutral">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-yes">21x</span>
837
- <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-yes">21x</span>
839
- <span class="cline-any cline-yes">21x</span>
840
- <span class="cline-any cline-yes">21x</span>
841
- <span class="cline-any cline-yes">76x</span>
842
- <span class="cline-any cline-yes">76x</span>
843
- <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-yes">35x</span>
848
- <span class="cline-any cline-yes">35x</span>
849
- <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-no">&nbsp;</span>
852
- <span class="cline-any cline-neutral">&nbsp;</span>
853
- <span class="cline-any cline-yes">35x</span>
854
- <span class="cline-any cline-neutral">&nbsp;</span>
855
- <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&nbsp;</span>
860
- <span class="cline-any cline-neutral">&nbsp;</span>
861
- <span class="cline-any cline-neutral">&nbsp;</span>
862
- <span class="cline-any cline-yes">35x</span>
863
- <span class="cline-any cline-yes">35x</span>
864
- <span class="cline-any cline-neutral">&nbsp;</span>
865
- <span class="cline-any cline-yes">35x</span>
866
- <span class="cline-any cline-yes">2x</span>
867
- <span class="cline-any cline-yes">2x</span>
868
- <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-neutral">&nbsp;</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-yes">35x</span>
872
- <span class="cline-any cline-yes">35x</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-yes">1x</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-yes">34x</span>
880
- <span class="cline-any cline-yes">34x</span>
881
- <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-yes">34x</span>
883
- <span class="cline-any cline-yes">1x</span>
884
- <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-neutral">&nbsp;</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-yes">20x</span>
888
- <span class="cline-any cline-neutral">&nbsp;</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-neutral">&nbsp;</span>
891
- <span class="cline-any cline-neutral">&nbsp;</span>
892
- <span class="cline-any cline-neutral">&nbsp;</span>
893
- <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-neutral">&nbsp;</span>
896
- <span class="cline-any cline-yes">2x</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-yes">2x</span>
899
- <span class="cline-any cline-yes">2x</span>
900
- <span class="cline-any cline-yes">6x</span>
901
- <span class="cline-any cline-neutral">&nbsp;</span>
902
- <span class="cline-any cline-yes">6x</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-yes">1x</span>
907
- <span class="cline-any cline-neutral">&nbsp;</span>
908
- <span class="cline-any cline-neutral">&nbsp;</span>
909
- <span class="cline-any cline-neutral">&nbsp;</span>
910
- <span class="cline-any cline-yes">2x</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-neutral">&nbsp;</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-neutral">&nbsp;</span>
916
- <span class="cline-any cline-neutral">&nbsp;</span>
917
- <span class="cline-any cline-neutral">&nbsp;</span>
918
- <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-neutral">&nbsp;</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-yes">2x</span>
922
- <span class="cline-any cline-yes">2x</span>
923
- <span class="cline-any cline-yes">2x</span>
924
- <span class="cline-any cline-yes">7x</span>
925
- <span class="cline-any cline-yes">7x</span>
926
- <span class="cline-any cline-yes">7x</span>
927
- <span class="cline-any cline-yes">3x</span>
928
- <span class="cline-any cline-yes">3x</span>
929
- <span class="cline-any cline-yes">3x</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-neutral">&nbsp;</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-neutral">&nbsp;</span>
934
- <span class="cline-any cline-neutral">&nbsp;</span>
935
- <span class="cline-any cline-neutral">&nbsp;</span>
936
- <span class="cline-any cline-neutral">&nbsp;</span>
937
- <span class="cline-any cline-yes">2x</span>
938
- <span class="cline-any cline-yes">2x</span>
939
- <span class="cline-any cline-yes">1x</span>
940
- <span class="cline-any cline-neutral">&nbsp;</span>
941
- <span class="cline-any cline-neutral">&nbsp;</span>
942
- <span class="cline-any cline-yes">1x</span>
943
- <span class="cline-any cline-yes">1x</span>
944
- <span class="cline-any cline-neutral">&nbsp;</span>
945
- <span class="cline-any cline-neutral">&nbsp;</span>
946
- <span class="cline-any cline-neutral">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-yes">1x</span>
949
- <span class="cline-any cline-yes">1x</span>
950
- <span class="cline-any cline-neutral">&nbsp;</span>
951
- <span class="cline-any cline-neutral">&nbsp;</span>
952
- <span class="cline-any cline-neutral">&nbsp;</span>
953
- <span class="cline-any cline-yes">226x</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { IncludeDocs, getLinkDocuments } from "./linkUtils"
955
- import { InternalTables, getUserMetadataParams } from "../utils"
956
- import Sentry from "@sentry/node"
957
- import { FieldTypes, RelationshipTypes } from "../../constants"
958
- import { context } from "@budibase/backend-core"
959
- import LinkDocument from "./LinkDocument"
960
- import {
961
- Database,
962
- FieldSchema,
963
- LinkDocumentValue,
964
- Row,
965
- Table,
966
- } from "@budibase/types"
967
- &nbsp;
968
- type LinkControllerOpts = {
969
- tableId?: string
970
- row?: Row
971
- table?: Table
972
- oldTable?: Table
973
- }
974
- &nbsp;
975
- class LinkController {
976
- _db: Database
977
- _tableId?: string
978
- _row?: Row
979
- _table?: Table
980
- _oldTable?: Table
981
- &nbsp;
982
- constructor({ tableId, row, table, oldTable }: LinkControllerOpts) {
983
- this._db = context.getAppDB()
984
- this._tableId = tableId
985
- this._row = row
986
- this._table = table
987
- this._oldTable = oldTable
988
- }
989
- &nbsp;
990
- /**
991
- * Retrieves the table, if it was not already found in the eventData.
992
- * @returns {Promise&lt;object&gt;} This will return a table based on the event data, either
993
- * if it was in the event already, or it uses the specified tableId to get it.
994
- */
995
- async table() {
996
- if (this._table == null) {
997
- this._table =
998
- this._table == null ? await this._db.get(this._tableId) : <span class="branch-1 cbranch-no" title="branch not covered" >this._table</span>
999
- }
1000
- return this._table!
1001
- }
1002
- &nbsp;
1003
- /**
1004
- * Checks if the table this was constructed with has any linking columns currently.
1005
- * If the table has not been retrieved this will retrieve it based on the eventData.
1006
- * @params {object|null} table If a table that is not known to the link controller is to be tested.
1007
- * @returns {Promise&lt;boolean&gt;} True if there are any linked fields, otherwise it will return
1008
- * false.
1009
- */
1010
- async doesTableHaveLinkedFields(table?: Table) {
1011
- if (table == null) {
1012
- table = await this.table()
1013
- }
1014
- for (let fieldName of Object.keys(table.schema)) {
1015
- const { type } = table.schema[fieldName]
1016
- if (type === FieldTypes.LINK) {
1017
- return true
1018
- }
1019
- }
1020
- return false
1021
- }
1022
- &nbsp;
1023
- /**
1024
- * Utility function for main getLinkDocuments function - refer to it for functionality.
1025
- */
1026
- getRowLinkDocs(rowId: string) {
1027
- return getLinkDocuments({
1028
- tableId: this._tableId,
1029
- rowId,
1030
- includeDocs: IncludeDocs.INCLUDE,
1031
- })
1032
- }
1033
- &nbsp;
1034
- /**
1035
- * Utility function for main getLinkDocuments function - refer to it for functionality.
1036
- */
1037
- async getTableLinkDocs() {
1038
- return (await getLinkDocuments({
1039
- tableId: this._tableId,
1040
- includeDocs: IncludeDocs.INCLUDE,
1041
- })) as LinkDocument[]
1042
- }
1043
- &nbsp;
1044
- /**
1045
- * Makes sure the passed in table schema contains valid relationship structures.
1046
- */
1047
- validateTable(table: Table) {
1048
- const usedAlready = []
1049
- for (let schema of Object.values(table.schema)) {
1050
- if (schema.type !== FieldTypes.LINK) {
1051
- continue
1052
- }
1053
- const unique = schema.tableId! + schema?.fieldName
1054
- if (usedAlready.indexOf(unique) !== -1) {
1055
- throw new Error(
1056
- "Cannot re-use the linked column name for a linked table."
1057
- )
1058
- }
1059
- usedAlready.push(unique)
1060
- }
1061
- }
1062
- &nbsp;
1063
- /**
1064
- * Returns whether the two link schemas are equal (in the important parts, not a pure equality check)
1065
- */
1066
- areLinkSchemasEqual(linkSchema1: FieldSchema, linkSchema2: FieldSchema) {
1067
- const compareFields = [
1068
- "name",
1069
- "type",
1070
- "tableId",
1071
- "fieldName",
1072
- "autocolumn",
1073
- "relationshipType",
1074
- ]
1075
- for (let field of compareFields) {
1076
- // @ts-ignore
1077
- if (linkSchema1[field] !== linkSchema2[field]) {
1078
- return false
1079
- }
1080
- }
1081
- return true
1082
- }
1083
- &nbsp;
1084
- /**
1085
- * Given the link field of this table, and the link field of the linked table, this makes sure
1086
- * the state of relationship type is accurate on both.
1087
- */
1088
- handleRelationshipType(linkerField: FieldSchema, linkedField: FieldSchema) {
1089
- if (
1090
- !linkerField.relationshipType ||
1091
- linkerField.relationshipType === RelationshipTypes.MANY_TO_MANY
1092
- ) {
1093
- linkedField.relationshipType = RelationshipTypes.MANY_TO_MANY
1094
- // make sure by default all are many to many (if not specified)
1095
- linkerField.relationshipType = RelationshipTypes.MANY_TO_MANY
1096
- } else if (linkerField.relationshipType === RelationshipTypes.MANY_TO_ONE) {
1097
- // Ensure that the other side of the relationship is locked to one record
1098
- linkedField.relationshipType = RelationshipTypes.ONE_TO_MANY
1099
- } else if (linkerField.relationshipType === RelationshipTypes.ONE_TO_MANY) {
1100
- linkedField.relationshipType = RelationshipTypes.MANY_TO_ONE
1101
- }
1102
- return { linkerField, linkedField }
1103
- }
1104
- &nbsp;
1105
- // all operations here will assume that the table
1106
- // this operation is related to has linked rows
1107
- /**
1108
- * When a row is saved this will carry out the necessary operations to make sure
1109
- * the link has been created/updated.
1110
- * @returns {Promise&lt;object&gt;} returns the row that has been cleaned and prepared to be written to the DB - links
1111
- * have also been created.
1112
- */
1113
- async rowSaved() {
1114
- const table = await this.table()
1115
- const row = this._row!
1116
- const operations = []
1117
- // get link docs to compare against
1118
- const linkDocs = (await this.getRowLinkDocs(row._id!)) as LinkDocument[]
1119
- for (let fieldName of Object.keys(table.schema)) {
1120
- // get the links this row wants to make
1121
- const rowField = row[fieldName]
1122
- const field = table.schema[fieldName]
1123
- if (field.type === FieldTypes.LINK &amp;&amp; rowField != null) {
1124
- // check which links actual pertain to the update in this row
1125
- const thisFieldLinkDocs = linkDocs.filter(
1126
- linkDoc =&gt;
1127
- linkDoc.doc1.fieldName === fieldName ||
1128
- <span class="branch-1 cbranch-no" title="branch not covered" > linkDoc.doc2.fieldName === fieldName</span>
1129
- )
1130
- const linkDocIds = thisFieldLinkDocs.map(linkDoc =&gt; {
1131
- return linkDoc.doc1.rowId === row._id
1132
- ? linkDoc.doc2.rowId
1133
- : <span class="branch-1 cbranch-no" title="branch not covered" >linkDoc.doc1.rowId</span>
1134
- })
1135
- &nbsp;
1136
- // if 1:N, ensure that this ID is not already attached to another record
1137
- const linkedTable = await this._db.get(field.tableId)
1138
- const linkedSchema = linkedTable.schema[field.fieldName!]
1139
- &nbsp;
1140
- // We need to map the global users to metadata in each app for relationships
1141
- <span class="missing-if-branch" title="if path not taken" >I</span>if (field.tableId === InternalTables.USER_METADATA) {
1142
- const users = <span class="cstat-no" title="statement not covered" >await this._db.allDocs(getUserMetadataParams(null, {}))</span>
1143
- const metadataRequired = <span class="cstat-no" title="statement not covered" >rowField.filter(</span>
1144
- <span class="fstat-no" title="function not covered" > (u</span>serId: string) =&gt; <span class="cstat-no" title="statement not covered" >!users.rows.some(<span class="fstat-no" title="function not covered" >user =&gt; <span class="cstat-no" title="statement not covered" >u</span>ser.id === userId)</span></span>
1145
- )
1146
- &nbsp;
1147
- // ensure non-existing user metadata is created in the app DB
1148
- <span class="cstat-no" title="statement not covered" > await this._db.bulkDocs(</span>
1149
- metadataRequired.map(<span class="fstat-no" title="function not covered" >(u</span>serId: string) =&gt; (<span class="cstat-no" title="statement not covered" >{ _id: userId }))</span>
1150
- )
1151
- }
1152
- &nbsp;
1153
- // iterate through the link IDs in the row field, see if any don't exist already
1154
- for (let linkId of rowField) {
1155
- if (
1156
- linkedSchema?.relationshipType === RelationshipTypes.ONE_TO_MANY
1157
- ) {
1158
- let links = (
1159
- (await getLinkDocuments({
1160
- tableId: field.tableId,
1161
- rowId: linkId,
1162
- includeDocs: IncludeDocs.EXCLUDE,
1163
- })) as LinkDocumentValue[]
1164
- ).filter(
1165
- link =&gt;
1166
- link.id !== row._id &amp;&amp; link.fieldName === linkedSchema.name
1167
- )
1168
- &nbsp;
1169
- // The 1 side of 1:N is already related to something else
1170
- // You must remove the existing relationship
1171
- if (links.length &gt; 0) {
1172
- throw new Error(
1173
- `1:N Relationship Error: Record already linked to another.`
1174
- )
1175
- }
1176
- }
1177
- &nbsp;
1178
- if (linkId &amp;&amp; linkId !== "" &amp;&amp; linkDocIds.indexOf(linkId) === -1) {
1179
- // first check the doc we're linking to exists
1180
- try {
1181
- await this._db.get(linkId)
1182
- } catch (err) {
1183
- // skip links that don't exist
1184
- continue
1185
- }
1186
- operations.push(
1187
- new LinkDocument(
1188
- table._id!,
1189
- fieldName,
1190
- row._id!,
1191
- field.tableId!,
1192
- field.fieldName!,
1193
- linkId
1194
- )
1195
- )
1196
- }
1197
- }
1198
- // find the docs that need to be deleted
1199
- let toDeleteDocs = thisFieldLinkDocs
1200
- .filter(doc =&gt; {
1201
- let correctDoc =
1202
- doc.doc1.fieldName === fieldName ? doc.doc2 : <span class="branch-1 cbranch-no" title="branch not covered" >doc.doc1</span>
1203
- return rowField.indexOf(correctDoc.rowId) === -1
1204
- })
1205
- .map(doc =&gt; {
1206
- return { ...doc, _deleted: true }
1207
- })
1208
- // now add the docs to be deleted to the bulk operation
1209
- operations.push(...toDeleteDocs)
1210
- // remove the field from this row, link doc will be added to row on way out
1211
- delete row[fieldName]
1212
- }
1213
- }
1214
- await this._db.bulkDocs(operations)
1215
- return row
1216
- }
1217
- &nbsp;
1218
- /**
1219
- * When a row is deleted this will carry out the necessary operations to make sure
1220
- * any links that existed have been removed.
1221
- * @returns {Promise&lt;object&gt;} The operation has been completed and the link documents should now
1222
- * be accurate. This also returns the row that was deleted.
1223
- */
1224
- async rowDeleted() {
1225
- const row = this._row!
1226
- // need to get the full link docs to be be able to delete it
1227
- const linkDocs = await this.getRowLinkDocs(row._id!)
1228
- if (linkDocs.length === 0) {
1229
- return null
1230
- }
1231
- const toDelete = linkDocs.map(doc =&gt; {
1232
- return {
1233
- ...doc,
1234
- _deleted: true,
1235
- }
1236
- })
1237
- await this._db.bulkDocs(toDelete)
1238
- return row
1239
- }
1240
- &nbsp;
1241
- /**
1242
- * Remove a field from a table as well as any linked rows that pertained to it.
1243
- * @param {string} fieldName The field to be removed from the table.
1244
- * @returns {Promise&lt;void&gt;} The table has now been updated.
1245
- */
1246
- async removeFieldFromTable(fieldName: string) {
1247
- let oldTable = this._oldTable
1248
- let field = oldTable?.schema[fieldName] as FieldSchema
1249
- const linkDocs = await this.getTableLinkDocs()
1250
- let toDelete = linkDocs.filter(linkDoc =&gt; {
1251
- let correctFieldName =
1252
- linkDoc.doc1.tableId === oldTable?._id
1253
- ? linkDoc.doc1.fieldName
1254
- : <span class="branch-1 cbranch-no" title="branch not covered" >linkDoc.doc2.fieldName</span>
1255
- return correctFieldName === fieldName
1256
- })
1257
- await this._db.bulkDocs(
1258
- toDelete.map(doc =&gt; {
1259
- return {
1260
- ...doc,
1261
- _deleted: true,
1262
- }
1263
- })
1264
- )
1265
- // remove schema from other table
1266
- let linkedTable = await this._db.get(field.tableId)
1267
- if (field.fieldName) {
1268
- delete linkedTable.schema[field.fieldName]
1269
- }
1270
- await this._db.put(linkedTable)
1271
- }
1272
- &nbsp;
1273
- /**
1274
- * When a table is saved this will carry out the necessary operations to make sure
1275
- * any linked tables are notified and updated correctly.
1276
- * @returns {Promise&lt;object&gt;} The operation has been completed and the link documents should now
1277
- * be accurate. Also returns the table that was operated on.
1278
- */
1279
- async tableSaved() {
1280
- const table = await this.table()
1281
- // validate the table first
1282
- this.validateTable(table)
1283
- const schema = table.schema
1284
- for (let fieldName of Object.keys(schema)) {
1285
- const field = schema[fieldName]
1286
- if (field.type === FieldTypes.LINK &amp;&amp; field.fieldName) {
1287
- // handle this in a separate try catch, want
1288
- // the put to bubble up as an error, if can't update
1289
- // table for some reason
1290
- let linkedTable
1291
- try {
1292
- linkedTable = await this._db.get(field.tableId)
1293
- } catch (err) {
1294
- /* istanbul ignore next */
1295
- <span class="cstat-no" title="statement not covered" > continue</span>
1296
- }
1297
- const fields = this.handleRelationshipType(field, {
1298
- name: field.fieldName,
1299
- type: FieldTypes.LINK,
1300
- // these are the props of the table that initiated the link
1301
- tableId: table._id,
1302
- fieldName: fieldName,
1303
- })
1304
- &nbsp;
1305
- // update table schema after checking relationship types
1306
- schema[fieldName] = fields.linkerField
1307
- const linkedField = fields.linkedField
1308
- &nbsp;
1309
- if (field.autocolumn) {
1310
- linkedField.autocolumn = field.autocolumn
1311
- linkedField.subtype = field.subtype
1312
- }
1313
- &nbsp;
1314
- // check the linked table to make sure we aren't overwriting an existing column
1315
- const existingSchema = linkedTable.schema[field.fieldName]
1316
- if (
1317
- existingSchema != null &amp;&amp;
1318
- !this.areLinkSchemasEqual(existingSchema, linkedField)
1319
- ) {
1320
- throw new Error("Cannot overwrite existing column.")
1321
- }
1322
- // create the link field in the other table
1323
- linkedTable.schema[field.fieldName] = linkedField
1324
- const response = await this._db.put(linkedTable)
1325
- // special case for when linking back to self, make sure rev updated
1326
- if (linkedTable._id === table._id) {
1327
- table._rev = response.rev
1328
- }
1329
- }
1330
- }
1331
- return table
1332
- }
1333
- &nbsp;
1334
- /**
1335
- * Update a table, this means if a field is removed need to handle removing from other table and removing
1336
- * any link docs that pertained to it.
1337
- * @returns {Promise&lt;Object&gt;} The table which has been saved, same response as with the tableSaved function.
1338
- */
1339
- async tableUpdated() {
1340
- const oldTable = this._oldTable
1341
- // first start by checking if any link columns have been deleted
1342
- const newTable = await this.table()
1343
- for (let fieldName of Object.keys(oldTable?.schema || <span class="branch-1 cbranch-no" title="branch not covered" >{})) {</span>
1344
- const field = oldTable?.schema[fieldName] as FieldSchema
1345
- // this field has been removed from the table schema
1346
- if (
1347
- field.type === FieldTypes.LINK &amp;&amp;
1348
- newTable.schema[fieldName] == null
1349
- ) {
1350
- await this.removeFieldFromTable(fieldName)
1351
- }
1352
- }
1353
- // now handle as if its a new save
1354
- return this.tableSaved()
1355
- }
1356
- &nbsp;
1357
- /**
1358
- * When a table is deleted this will carry out the necessary operations to make sure
1359
- * any linked tables have the joining column correctly removed as well as removing any
1360
- * now stale linking documents.
1361
- * @returns {Promise&lt;object&gt;} The operation has been completed and the link documents should now
1362
- * be accurate. Also returns the table that was operated on.
1363
- */
1364
- async tableDeleted() {
1365
- const table = await this.table()
1366
- const schema = table.schema
1367
- for (let fieldName of Object.keys(schema)) {
1368
- const field = schema[fieldName]
1369
- try {
1370
- if (field.type === FieldTypes.LINK &amp;&amp; field.fieldName) {
1371
- const linkedTable = await this._db.get(field.tableId)
1372
- delete linkedTable.schema[field.fieldName]
1373
- await this._db.put(linkedTable)
1374
- }
1375
- } catch (err) {
1376
- /* istanbul ignore next */
1377
- Sentry.captureException(err)
1378
- }
1379
- }
1380
- // need to get the full link docs to delete them
1381
- const linkDocs = await this.getTableLinkDocs()
1382
- if (linkDocs.length === 0) {
1383
- return null
1384
- }
1385
- // get link docs for this table and configure for deletion
1386
- const toDelete = linkDocs.map(doc =&gt; {
1387
- return {
1388
- ...doc,
1389
- _deleted: true,
1390
- }
1391
- })
1392
- await this._db.bulkDocs(toDelete)
1393
- return table
1394
- }
1395
- }
1396
- &nbsp;
1397
- export default LinkController
1398
- &nbsp;</pre></td></tr></table></pre>
1399
-
1400
- <div class='push'></div><!-- for sticky footer -->
1401
- </div><!-- /wrapper -->
1402
- <div class='footer quiet pad2 space-top1 center small'>
1403
- Code coverage generated by
1404
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1405
- at Thu Feb 16 2023 16:35:51 GMT+0000 (Coordinated Universal Time)
1406
- </div>
1407
- <script src="../../../prettify.js"></script>
1408
- <script>
1409
- window.onload = function () {
1410
- prettyPrint();
1411
- };
1412
- </script>
1413
- <script src="../../../sorter.js"></script>
1414
- <script src="../../../block-navigation.js"></script>
1415
- </body>
1416
- </html>
1417
-