@budibase/server 2.1.39 → 2.1.40-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 (785) hide show
  1. package/__mocks__/aws-sdk.ts +14 -0
  2. package/__mocks__/node-fetch.ts +5 -1
  3. package/builder/assets/{index.534f6c29.css → index.144dddb2.css} +2 -2
  4. package/builder/assets/{index.a89ac148.js → index.93f18258.js} +308 -308
  5. package/builder/index.html +2 -2
  6. package/coverage/clover.xml +10747 -3757
  7. package/coverage/coverage-final.json +266 -118
  8. package/coverage/lcov-report/index.html +679 -184
  9. package/coverage/lcov-report/src/api/controllers/analytics.ts.html +190 -0
  10. package/coverage/lcov-report/{api/controllers/apikeys.js.html → src/api/controllers/apikeys.ts.html} +26 -26
  11. package/coverage/lcov-report/src/api/controllers/application.ts.html +2038 -0
  12. package/coverage/lcov-report/src/api/controllers/auth.ts.html +301 -0
  13. package/coverage/lcov-report/{api/controllers/automation.js.html → src/api/controllers/automation.ts.html} +75 -75
  14. package/coverage/lcov-report/src/api/controllers/backup.ts.html +148 -0
  15. package/coverage/lcov-report/{api/controllers/cloud.js.html → src/api/controllers/cloud.ts.html} +47 -47
  16. package/coverage/lcov-report/src/api/controllers/component.ts.html +259 -0
  17. package/coverage/lcov-report/{api/controllers/datasource.js.html → src/api/controllers/datasource.ts.html} +246 -87
  18. package/coverage/lcov-report/src/api/controllers/deploy/Deployment.ts.html +259 -0
  19. package/coverage/lcov-report/{utilities/rowProcessor → src/api/controllers/deploy}/index.html +40 -40
  20. package/coverage/lcov-report/src/api/controllers/deploy/index.ts.html +730 -0
  21. package/coverage/lcov-report/{api/controllers/dev.js.html → src/api/controllers/dev.ts.html} +53 -71
  22. package/coverage/lcov-report/src/api/controllers/index.html +431 -0
  23. package/coverage/lcov-report/{api/controllers/integration.js.html → src/api/controllers/integration.ts.html} +19 -22
  24. package/coverage/lcov-report/{api/controllers/layout.js.html → src/api/controllers/layout.ts.html} +26 -26
  25. package/coverage/lcov-report/{api/controllers/metadata.js.html → src/api/controllers/metadata.ts.html} +26 -23
  26. package/coverage/lcov-report/{api/controllers/migrations.js.html → src/api/controllers/migrations.ts.html} +18 -15
  27. package/coverage/lcov-report/{api/controllers/permission.js.html → src/api/controllers/permission.ts.html} +80 -71
  28. package/coverage/lcov-report/src/api/controllers/plugin/file.ts.html +130 -0
  29. package/coverage/lcov-report/src/api/controllers/plugin/github.ts.html +310 -0
  30. package/coverage/lcov-report/src/api/controllers/plugin/index.html +206 -0
  31. package/coverage/lcov-report/src/api/controllers/plugin/index.ts.html +484 -0
  32. package/coverage/lcov-report/src/api/controllers/plugin/npm.ts.html +253 -0
  33. package/coverage/lcov-report/src/api/controllers/plugin/uploaders.ts.html +97 -0
  34. package/coverage/lcov-report/src/api/controllers/plugin/url.ts.html +121 -0
  35. package/coverage/lcov-report/src/api/controllers/plugin/utils.ts.html +136 -0
  36. package/coverage/lcov-report/src/api/controllers/public/applications.ts.html +334 -0
  37. package/coverage/lcov-report/src/api/controllers/public/index.html +191 -0
  38. package/coverage/lcov-report/src/api/controllers/public/mapping/applications.ts.html +181 -0
  39. package/coverage/lcov-report/src/api/controllers/public/mapping/index.html +191 -0
  40. package/coverage/lcov-report/src/api/controllers/public/mapping/index.ts.html +124 -0
  41. package/coverage/lcov-report/src/api/controllers/public/mapping/queries.ts.html +202 -0
  42. package/coverage/lcov-report/src/api/controllers/public/mapping/rows.ts.html +178 -0
  43. package/coverage/lcov-report/src/api/controllers/public/mapping/tables.ts.html +163 -0
  44. package/coverage/lcov-report/src/api/controllers/public/mapping/users.ts.html +181 -0
  45. package/coverage/lcov-report/src/api/controllers/public/queries.ts.html +145 -0
  46. package/coverage/lcov-report/src/api/controllers/public/rows.ts.html +328 -0
  47. package/coverage/lcov-report/src/api/controllers/public/tables.ts.html +253 -0
  48. package/coverage/lcov-report/src/api/controllers/public/users.ts.html +268 -0
  49. package/coverage/lcov-report/src/api/controllers/public/utils.ts.html +220 -0
  50. package/coverage/lcov-report/src/api/controllers/query/import/index.html +116 -0
  51. package/coverage/lcov-report/src/api/controllers/query/import/index.ts.html +373 -0
  52. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.html +131 -0
  53. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/index.ts.html +379 -0
  54. package/coverage/lcov-report/src/api/controllers/query/import/sources/base/openapi.ts.html +157 -0
  55. package/coverage/lcov-report/src/api/controllers/query/import/sources/curl.ts.html +403 -0
  56. package/coverage/lcov-report/src/api/controllers/query/import/sources/index.html +146 -0
  57. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi2.ts.html +586 -0
  58. package/coverage/lcov-report/src/api/controllers/query/import/sources/openapi3.ts.html +712 -0
  59. package/coverage/lcov-report/src/api/controllers/query/index.html +131 -0
  60. package/coverage/lcov-report/src/api/controllers/query/index.ts.html +976 -0
  61. package/coverage/lcov-report/{api/controllers/query/validation.js.html → src/api/controllers/query/validation.ts.html} +17 -17
  62. package/coverage/lcov-report/{api/controllers/role.js.html → src/api/controllers/role.ts.html} +44 -56
  63. package/coverage/lcov-report/{api/controllers/routing.js.html → src/api/controllers/routing.ts.html} +65 -56
  64. package/coverage/lcov-report/src/api/controllers/row/ExternalRequest.ts.html +2260 -0
  65. package/coverage/lcov-report/{api/controllers/row/external.js.html → src/api/controllers/row/external.ts.html} +145 -94
  66. package/coverage/lcov-report/{api → src/api}/controllers/row/index.html +82 -52
  67. package/coverage/lcov-report/src/api/controllers/row/index.ts.html +541 -0
  68. package/coverage/lcov-report/{api/controllers/row/internal.js.html → src/api/controllers/row/internal.ts.html} +137 -95
  69. package/coverage/lcov-report/{api/controllers/row/internalSearch.js.html → src/api/controllers/row/internalSearch.ts.html} +182 -110
  70. package/coverage/lcov-report/{api/controllers/row/staticFormula.js.html → src/api/controllers/row/staticFormula.ts.html} +66 -51
  71. package/coverage/lcov-report/{api/controllers/row/utils.js.html → src/api/controllers/row/utils.ts.html} +77 -47
  72. package/coverage/lcov-report/src/api/controllers/screen.ts.html +463 -0
  73. package/coverage/lcov-report/{api/controllers/script.js.html → src/api/controllers/script.ts.html} +17 -14
  74. package/coverage/lcov-report/src/api/controllers/static/index.html +116 -0
  75. package/coverage/lcov-report/src/api/controllers/static/index.ts.html +694 -0
  76. package/coverage/lcov-report/{api/controllers/table/bulkFormula.js.html → src/api/controllers/table/bulkFormula.ts.html} +96 -54
  77. package/coverage/lcov-report/{api/controllers/table/external.js.html → src/api/controllers/table/external.ts.html} +196 -103
  78. package/coverage/lcov-report/src/api/controllers/table/index.html +176 -0
  79. package/coverage/lcov-report/{api/controllers/table/index.js.html → src/api/controllers/table/index.ts.html} +46 -37
  80. package/coverage/lcov-report/src/api/controllers/table/internal.ts.html +661 -0
  81. package/coverage/lcov-report/src/api/controllers/table/utils.ts.html +1255 -0
  82. package/coverage/lcov-report/{api/controllers/templates.js.html → src/api/controllers/templates.ts.html} +34 -25
  83. package/coverage/lcov-report/{api/controllers/user.js.html → src/api/controllers/user.ts.html} +79 -85
  84. package/coverage/lcov-report/{api/controllers/view/exporters.js.html → src/api/controllers/view/exporters.ts.html} +20 -14
  85. package/coverage/lcov-report/{api → src/api}/controllers/view/index.html +36 -36
  86. package/coverage/lcov-report/{api/controllers/view/index.js.html → src/api/controllers/view/index.ts.html} +75 -48
  87. package/coverage/lcov-report/{api/controllers/view/utils.js.html → src/api/controllers/view/utils.ts.html} +61 -43
  88. package/coverage/lcov-report/{api/controllers/view/viewBuilder.js.html → src/api/controllers/view/viewBuilder.ts.html} +74 -32
  89. package/coverage/lcov-report/src/api/controllers/webhook.ts.html +379 -0
  90. package/coverage/lcov-report/{api → src/api}/index.html +23 -23
  91. package/coverage/lcov-report/{api/index.js.html → src/api/index.ts.html} +35 -56
  92. package/coverage/lcov-report/{api/routes/analytics.js.html → src/api/routes/analytics.ts.html} +14 -14
  93. package/coverage/lcov-report/{api/routes/integration.js.html → src/api/routes/apikeys.ts.html} +18 -18
  94. package/coverage/lcov-report/{constants/screens.js.html → src/api/routes/application.ts.html} +63 -63
  95. package/coverage/lcov-report/src/api/routes/auth.ts.html +109 -0
  96. package/coverage/lcov-report/{api/routes/automation.js.html → src/api/routes/automation.ts.html} +48 -42
  97. package/coverage/lcov-report/{api/routes/cloud.js.html → src/api/routes/backup.ts.html} +21 -21
  98. package/coverage/lcov-report/{api/routes/deploy.js.html → src/api/routes/cloud.ts.html} +25 -22
  99. package/coverage/lcov-report/{api/routes/component.js.html → src/api/routes/component.ts.html} +17 -17
  100. package/coverage/lcov-report/src/api/routes/datasource.ts.html +265 -0
  101. package/coverage/lcov-report/src/api/routes/deploy.ts.html +148 -0
  102. package/coverage/lcov-report/src/api/routes/dev.ts.html +199 -0
  103. package/coverage/lcov-report/{api → src/api}/routes/index.html +167 -47
  104. package/coverage/lcov-report/src/api/routes/index.ts.html +289 -0
  105. package/coverage/lcov-report/src/api/routes/integration.ts.html +133 -0
  106. package/coverage/lcov-report/{api/routes/layout.js.html → src/api/routes/layout.ts.html} +18 -18
  107. package/coverage/lcov-report/{api/routes/metadata.js.html → src/api/routes/metadata.ts.html} +24 -24
  108. package/coverage/lcov-report/src/api/routes/migrations.ts.html +127 -0
  109. package/coverage/lcov-report/{api/routes/permission.js.html → src/api/routes/permission.ts.html} +48 -24
  110. package/coverage/lcov-report/src/api/routes/plugin.ts.html +151 -0
  111. package/coverage/lcov-report/src/api/routes/public/applications.ts.html +541 -0
  112. package/coverage/lcov-report/src/api/routes/public/index.html +191 -0
  113. package/coverage/lcov-report/src/api/routes/public/index.ts.html +493 -0
  114. package/coverage/lcov-report/src/api/routes/public/middleware/index.html +116 -0
  115. package/coverage/lcov-report/src/api/routes/public/middleware/mapper.ts.html +328 -0
  116. package/coverage/lcov-report/src/api/routes/public/queries.ts.html +313 -0
  117. package/coverage/lcov-report/src/api/routes/public/rows.ts.html +598 -0
  118. package/coverage/lcov-report/src/api/routes/public/tables.ts.html +586 -0
  119. package/coverage/lcov-report/src/api/routes/public/users.ts.html +511 -0
  120. package/coverage/lcov-report/src/api/routes/public/utils/Endpoint.ts.html +238 -0
  121. package/coverage/lcov-report/src/api/routes/public/utils/index.html +116 -0
  122. package/coverage/lcov-report/{api/routes/query.js.html → src/api/routes/query.ts.html} +33 -42
  123. package/coverage/lcov-report/{utilities/routing/index.js.html → src/api/routes/role.ts.html} +39 -42
  124. package/coverage/lcov-report/{api/routes/routing.js.html → src/api/routes/routing.ts.html} +17 -17
  125. package/coverage/lcov-report/src/api/routes/row.ts.html +883 -0
  126. package/coverage/lcov-report/{api/routes/screen.js.html → src/api/routes/screen.ts.html} +36 -21
  127. package/coverage/lcov-report/{api/routes/script.js.html → src/api/routes/script.ts.html} +17 -17
  128. package/coverage/lcov-report/src/api/routes/static.ts.html +280 -0
  129. package/coverage/lcov-report/{api/routes/table.js.html → src/api/routes/table.ts.html} +24 -33
  130. package/coverage/lcov-report/{api/routes/templates.js.html → src/api/routes/templates.ts.html} +18 -18
  131. package/coverage/lcov-report/src/api/routes/tests/utilities/TestFunctions.ts.html +550 -0
  132. package/coverage/lcov-report/src/api/routes/tests/utilities/index.html +131 -0
  133. package/coverage/lcov-report/src/api/routes/tests/utilities/index.ts.html +367 -0
  134. package/coverage/lcov-report/{api/routes/user.js.html → src/api/routes/user.ts.html} +29 -35
  135. package/coverage/lcov-report/{api → src/api}/routes/utils/index.html +15 -15
  136. package/coverage/lcov-report/{api/routes/utils/validators.js.html → src/api/routes/utils/validators.ts.html} +46 -58
  137. package/coverage/lcov-report/{api/routes/view.js.html → src/api/routes/view.ts.html} +40 -31
  138. package/coverage/lcov-report/src/api/routes/webhook.ts.html +166 -0
  139. package/coverage/lcov-report/src/app.ts.html +406 -0
  140. package/coverage/lcov-report/{automations/actions.js.html → src/automations/actions.ts.html} +50 -41
  141. package/coverage/lcov-report/{automations/automationUtils.js.html → src/automations/automationUtils.ts.html} +30 -27
  142. package/coverage/lcov-report/{automations/bullboard.js.html → src/automations/bullboard.ts.html} +30 -33
  143. package/coverage/lcov-report/{automations → src/automations}/index.html +63 -48
  144. package/coverage/lcov-report/{api/routes/dev.js.html → src/automations/index.ts.html} +42 -42
  145. package/coverage/lcov-report/src/automations/logging/index.html +116 -0
  146. package/coverage/lcov-report/{events/utils.js.html → src/automations/logging/index.ts.html} +70 -70
  147. package/coverage/lcov-report/{automations/steps/bash.js.html → src/automations/steps/bash.ts.html} +40 -25
  148. package/coverage/lcov-report/src/automations/steps/createRow.ts.html +382 -0
  149. package/coverage/lcov-report/{automations/steps/delay.js.html → src/automations/steps/delay.ts.html} +32 -17
  150. package/coverage/lcov-report/src/automations/steps/deleteRow.ts.html +349 -0
  151. package/coverage/lcov-report/{automations/steps/discord.js.html → src/automations/steps/discord.ts.html} +38 -23
  152. package/coverage/lcov-report/{automations/steps/executeQuery.js.html → src/automations/steps/executeQuery.ts.html} +41 -26
  153. package/coverage/lcov-report/{automations/steps/executeScript.js.html → src/automations/steps/executeScript.ts.html} +54 -24
  154. package/coverage/lcov-report/{automations/steps/filter.js.html → src/automations/steps/filter.ts.html} +36 -27
  155. package/coverage/lcov-report/src/automations/steps/index.html +371 -0
  156. package/coverage/lcov-report/{automations/steps/integromat.js.html → src/automations/steps/integromat.ts.html} +35 -20
  157. package/coverage/lcov-report/{automations/steps/loop.js.html → src/automations/steps/loop.ts.html} +21 -15
  158. package/coverage/lcov-report/{automations/steps/outgoingWebhook.js.html → src/automations/steps/outgoingWebhook.ts.html} +48 -33
  159. package/coverage/lcov-report/{automations/steps/queryRows.js.html → src/automations/steps/queryRows.ts.html} +94 -58
  160. package/coverage/lcov-report/{automations/steps/sendSmtpEmail.js.html → src/automations/steps/sendSmtpEmail.ts.html} +37 -22
  161. package/coverage/lcov-report/{automations/steps/serverLog.js.html → src/automations/steps/serverLog.ts.html} +38 -20
  162. package/coverage/lcov-report/{automations/steps/slack.js.html → src/automations/steps/slack.ts.html} +35 -20
  163. package/coverage/lcov-report/{automations/steps/updateRow.js.html → src/automations/steps/updateRow.ts.html} +36 -21
  164. package/coverage/lcov-report/{automations/steps/utils.js.html → src/automations/steps/utils.ts.html} +44 -26
  165. package/coverage/lcov-report/{automations/steps/zapier.js.html → src/automations/steps/zapier.ts.html} +38 -20
  166. package/coverage/lcov-report/src/automations/tests/utilities/index.html +116 -0
  167. package/coverage/lcov-report/src/automations/tests/utilities/index.ts.html +265 -0
  168. package/coverage/lcov-report/src/automations/triggerInfo/app.ts.html +196 -0
  169. package/coverage/lcov-report/{automations/triggerInfo/cron.js.html → src/automations/triggerInfo/cron.ts.html} +30 -15
  170. package/coverage/lcov-report/{automations → src/automations}/triggerInfo/index.html +31 -31
  171. package/coverage/lcov-report/{automations/triggerInfo/index.js.html → src/automations/triggerInfo/index.ts.html} +17 -17
  172. package/coverage/lcov-report/{automations/triggerInfo/rowDeleted.js.html → src/automations/triggerInfo/rowDeleted.ts.html} +30 -15
  173. package/coverage/lcov-report/{automations/triggerInfo/rowSaved.js.html → src/automations/triggerInfo/rowSaved.ts.html} +30 -15
  174. package/coverage/lcov-report/{automations/triggerInfo/rowUpdated.js.html → src/automations/triggerInfo/rowUpdated.ts.html} +30 -15
  175. package/coverage/lcov-report/{automations/triggerInfo/webhook.js.html → src/automations/triggerInfo/webhook.ts.html} +30 -15
  176. package/coverage/lcov-report/{automations/triggers.js.html → src/automations/triggers.ts.html} +59 -47
  177. package/coverage/lcov-report/src/automations/utils.ts.html +886 -0
  178. package/coverage/lcov-report/{constants → src/constants}/index.html +26 -26
  179. package/coverage/lcov-report/{constants/index.js.html → src/constants/index.ts.html} +173 -185
  180. package/coverage/lcov-report/{constants/layouts.js.html → src/constants/layouts.ts.html} +16 -34
  181. package/coverage/lcov-report/{api/routes/datasource.js.html → src/constants/screens.ts.html} +56 -65
  182. package/coverage/lcov-report/src/db/defaultData/datasource_bb_default.ts.html +2032 -0
  183. package/coverage/lcov-report/src/db/defaultData/employeeImport.ts.html +541 -0
  184. package/coverage/lcov-report/src/db/defaultData/expensesImport.ts.html +427 -0
  185. package/coverage/lcov-report/src/db/defaultData/index.html +176 -0
  186. package/coverage/lcov-report/src/db/defaultData/inventoryImport.ts.html +403 -0
  187. package/coverage/lcov-report/src/db/defaultData/jobsImport.ts.html +559 -0
  188. package/coverage/lcov-report/src/db/dynamoClient.ts.html +526 -0
  189. package/coverage/lcov-report/{db/inMemoryView.js.html → src/db/inMemoryView.ts.html} +44 -26
  190. package/coverage/lcov-report/{db → src/db}/index.html +48 -33
  191. package/coverage/lcov-report/src/db/index.ts.html +133 -0
  192. package/coverage/lcov-report/{db/linkedRows/LinkController.js.html → src/db/linkedRows/LinkController.ts.html} +92 -155
  193. package/coverage/lcov-report/src/db/linkedRows/LinkDocument.ts.html +265 -0
  194. package/coverage/lcov-report/src/db/linkedRows/index.html +161 -0
  195. package/coverage/lcov-report/{db/linkedRows/index.js.html → src/db/linkedRows/index.ts.html} +83 -68
  196. package/coverage/lcov-report/{db/linkedRows/linkUtils.js.html → src/db/linkedRows/linkUtils.ts.html} +73 -46
  197. package/coverage/lcov-report/{db/newid.js.html → src/db/newid.ts.html} +11 -11
  198. package/coverage/lcov-report/{db/utils.js.html → src/db/utils.ts.html} +105 -153
  199. package/coverage/lcov-report/{automations/triggerInfo/app.js.html → src/definitions/automations.ts.html} +42 -42
  200. package/coverage/lcov-report/src/definitions/datasource.ts.html +235 -0
  201. package/coverage/lcov-report/src/definitions/index.html +131 -0
  202. package/coverage/lcov-report/src/environment.ts.html +457 -0
  203. package/coverage/lcov-report/{events/AutomationEmitter.js.html → src/events/AutomationEmitter.ts.html} +36 -21
  204. package/coverage/lcov-report/{events/index.js.html → src/events/BudibaseEmitter.ts.html} +23 -26
  205. package/coverage/lcov-report/{events → src/events}/index.html +48 -33
  206. package/coverage/lcov-report/src/events/index.ts.html +100 -0
  207. package/coverage/lcov-report/src/events/utils.ts.html +319 -0
  208. package/coverage/lcov-report/src/index.html +191 -0
  209. package/coverage/lcov-report/{db/index.js.html → src/index.ts.html} +35 -35
  210. package/coverage/lcov-report/{utilities/queue/inMemoryQueue.js.html → src/integrations/airtable.ts.html} +213 -135
  211. package/coverage/lcov-report/src/integrations/arangodb.ts.html +415 -0
  212. package/coverage/lcov-report/src/integrations/base/index.html +161 -0
  213. package/coverage/lcov-report/src/integrations/base/query.ts.html +133 -0
  214. package/coverage/lcov-report/src/integrations/base/sql.ts.html +1951 -0
  215. package/coverage/lcov-report/src/integrations/base/sqlTable.ts.html +691 -0
  216. package/coverage/lcov-report/src/integrations/base/utils.ts.html +121 -0
  217. package/coverage/lcov-report/src/integrations/couchdb.ts.html +406 -0
  218. package/coverage/lcov-report/src/integrations/dynamodb.ts.html +745 -0
  219. package/coverage/lcov-report/src/integrations/elasticsearch.ts.html +634 -0
  220. package/coverage/lcov-report/src/integrations/firebase.ts.html +646 -0
  221. package/coverage/lcov-report/src/integrations/googlesheets.ts.html +1315 -0
  222. package/coverage/lcov-report/src/integrations/index.html +371 -0
  223. package/coverage/lcov-report/src/integrations/index.ts.html +445 -0
  224. package/coverage/lcov-report/src/integrations/microsoftSqlServer.ts.html +1006 -0
  225. package/coverage/lcov-report/src/integrations/mongodb.ts.html +1867 -0
  226. package/coverage/lcov-report/src/integrations/mysql.ts.html +964 -0
  227. package/coverage/lcov-report/src/integrations/oracle.ts.html +1474 -0
  228. package/coverage/lcov-report/src/integrations/postgres.ts.html +1069 -0
  229. package/coverage/lcov-report/src/integrations/queries/index.html +116 -0
  230. package/coverage/lcov-report/src/integrations/queries/sql.ts.html +463 -0
  231. package/coverage/lcov-report/src/integrations/redis.ts.html +550 -0
  232. package/coverage/lcov-report/src/integrations/rest.ts.html +1381 -0
  233. package/coverage/lcov-report/src/integrations/s3.ts.html +862 -0
  234. package/coverage/lcov-report/src/integrations/snowflake.ts.html +376 -0
  235. package/coverage/lcov-report/{integrations → src/integrations}/tests/TestConfiguration.js.html +10 -10
  236. package/coverage/lcov-report/{integrations → src/integrations}/tests/index.html +10 -10
  237. package/coverage/lcov-report/src/integrations/utils.ts.html +1018 -0
  238. package/coverage/lcov-report/{middleware/appInfo.js.html → src/middleware/appInfo.ts.html} +31 -28
  239. package/coverage/lcov-report/src/middleware/authorized.ts.html +460 -0
  240. package/coverage/lcov-report/{middleware/builder.js.html → src/middleware/builder.ts.html} +43 -37
  241. package/coverage/lcov-report/{middleware/currentapp.js.html → src/middleware/currentapp.ts.html} +77 -68
  242. package/coverage/lcov-report/{middleware → src/middleware}/index.html +78 -63
  243. package/coverage/lcov-report/{middleware/joi-validator.js.html → src/middleware/joi-validator.ts.html} +25 -22
  244. package/coverage/lcov-report/{middleware/publicApi.js.html → src/middleware/publicApi.ts.html} +24 -24
  245. package/coverage/lcov-report/{middleware/resourceId.js.html → src/middleware/resourceId.ts.html} +40 -25
  246. package/coverage/lcov-report/{api/routes/apikeys.js.html → src/middleware/selfhost.ts.html} +27 -27
  247. package/coverage/lcov-report/{middleware/utils.js.html → src/middleware/utils.ts.html} +19 -13
  248. package/coverage/lcov-report/src/migrations/functions/appUrls.ts.html +187 -0
  249. package/coverage/lcov-report/src/migrations/functions/backfill/app/automations.ts.html +163 -0
  250. package/coverage/lcov-report/src/migrations/functions/backfill/app/datasources.ts.html +151 -0
  251. package/coverage/lcov-report/src/migrations/functions/backfill/app/index.html +206 -0
  252. package/coverage/lcov-report/{automations/index.js.html → src/migrations/functions/backfill/app/layouts.ts.html} +53 -53
  253. package/coverage/lcov-report/src/migrations/functions/backfill/app/queries.ts.html +226 -0
  254. package/coverage/lcov-report/src/migrations/functions/backfill/app/roles.ts.html +151 -0
  255. package/coverage/lcov-report/src/migrations/functions/backfill/app/screens.ts.html +151 -0
  256. package/coverage/lcov-report/src/migrations/functions/backfill/app/tables.ts.html +166 -0
  257. package/coverage/lcov-report/src/migrations/functions/backfill/app.ts.html +532 -0
  258. package/coverage/lcov-report/src/migrations/functions/backfill/global/configs.ts.html +283 -0
  259. package/coverage/lcov-report/src/migrations/functions/backfill/global/index.html +146 -0
  260. package/coverage/lcov-report/src/migrations/functions/backfill/global/quotas.ts.html +265 -0
  261. package/coverage/lcov-report/src/migrations/functions/backfill/global/users.ts.html +232 -0
  262. package/coverage/lcov-report/src/migrations/functions/backfill/global.ts.html +724 -0
  263. package/coverage/lcov-report/src/migrations/functions/backfill/index.html +161 -0
  264. package/coverage/lcov-report/src/migrations/functions/backfill/index.ts.html +106 -0
  265. package/coverage/lcov-report/src/migrations/functions/backfill/installation.ts.html +235 -0
  266. package/coverage/lcov-report/src/migrations/functions/index.html +146 -0
  267. package/coverage/lcov-report/{api/routes/role.js.html → src/migrations/functions/syncQuotas.ts.html} +32 -32
  268. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.html +161 -0
  269. package/coverage/lcov-report/src/migrations/functions/usageQuotas/index.ts.html +94 -0
  270. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncApps.ts.html +127 -0
  271. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncPlugins.ts.html +115 -0
  272. package/coverage/lcov-report/src/migrations/functions/usageQuotas/syncRows.ts.html +169 -0
  273. package/coverage/lcov-report/src/migrations/functions/userEmailViewCasing.ts.html +124 -0
  274. package/coverage/lcov-report/{utilities/queue → src/migrations}/index.html +23 -23
  275. package/coverage/lcov-report/src/migrations/index.ts.html +403 -0
  276. package/coverage/lcov-report/src/migrations/tests/helpers.ts.html +205 -0
  277. package/coverage/lcov-report/src/migrations/tests/index.html +131 -0
  278. package/coverage/lcov-report/src/migrations/tests/structures.ts.html +283 -0
  279. package/coverage/lcov-report/src/sdk/app/automations/index.html +131 -0
  280. package/coverage/lcov-report/src/sdk/app/automations/index.ts.html +100 -0
  281. package/coverage/lcov-report/src/sdk/app/automations/webhook.ts.html +214 -0
  282. package/coverage/lcov-report/src/sdk/app/backups/constants.ts.html +91 -0
  283. package/coverage/lcov-report/src/sdk/app/backups/exports.ts.html +604 -0
  284. package/coverage/lcov-report/src/sdk/app/backups/imports.ts.html +682 -0
  285. package/coverage/lcov-report/src/sdk/app/backups/index.html +176 -0
  286. package/coverage/lcov-report/src/sdk/app/backups/index.ts.html +112 -0
  287. package/coverage/lcov-report/src/sdk/app/backups/statistics.ts.html +292 -0
  288. package/coverage/lcov-report/src/sdk/app/tables/index.html +116 -0
  289. package/coverage/lcov-report/src/sdk/app/tables/index.ts.html +265 -0
  290. package/coverage/lcov-report/{utilities/routing → src/sdk}/index.html +10 -10
  291. package/coverage/lcov-report/{api/routes/migrations.js.html → src/sdk/index.ts.html} +24 -21
  292. package/coverage/lcov-report/src/startup.ts.html +499 -0
  293. package/coverage/lcov-report/src/tests/utilities/TestConfiguration.ts.html +1966 -0
  294. package/coverage/lcov-report/src/tests/utilities/controllers.ts.html +127 -0
  295. package/coverage/lcov-report/src/tests/utilities/index.html +161 -0
  296. package/coverage/lcov-report/{middleware/selfhost.js.html → src/tests/utilities/index.ts.html} +33 -30
  297. package/coverage/lcov-report/src/tests/utilities/structures.ts.html +667 -0
  298. package/coverage/lcov-report/src/threads/automation.ts.html +1594 -0
  299. package/coverage/lcov-report/src/threads/index.html +161 -0
  300. package/coverage/lcov-report/src/threads/index.ts.html +418 -0
  301. package/coverage/lcov-report/src/threads/query.ts.html +961 -0
  302. package/coverage/lcov-report/src/threads/utils.ts.html +373 -0
  303. package/coverage/lcov-report/{utilities/budibaseDir.js.html → src/utilities/budibaseDir.ts.html} +12 -12
  304. package/coverage/lcov-report/{utilities/centralPath.js.html → src/utilities/centralPath.ts.html} +13 -13
  305. package/coverage/lcov-report/{utilities/csvParser.js.html → src/utilities/csvParser.ts.html} +104 -56
  306. package/coverage/lcov-report/src/utilities/fileSystem/clientLibrary.ts.html +547 -0
  307. package/coverage/lcov-report/{api/controllers/table → src/utilities/fileSystem}/index.html +43 -43
  308. package/coverage/lcov-report/src/utilities/fileSystem/index.ts.html +1117 -0
  309. package/coverage/lcov-report/src/utilities/fileSystem/processor.ts.html +142 -0
  310. package/coverage/lcov-report/{utilities/global.js.html → src/utilities/global.ts.html} +107 -74
  311. package/coverage/lcov-report/{utilities → src/utilities}/index.html +92 -77
  312. package/coverage/lcov-report/{utilities/index.js.html → src/utilities/index.ts.html} +78 -54
  313. package/coverage/lcov-report/{utilities/plugins.js.html → src/utilities/plugins.ts.html} +22 -19
  314. package/coverage/lcov-report/src/utilities/redis.ts.html +343 -0
  315. package/coverage/lcov-report/{api/controllers/query → src/utilities/routing}/index.html +8 -8
  316. package/coverage/lcov-report/src/utilities/routing/index.ts.html +181 -0
  317. package/coverage/lcov-report/src/utilities/rowProcessor/index.html +146 -0
  318. package/coverage/lcov-report/{utilities/rowProcessor/index.js.html → src/utilities/rowProcessor/index.ts.html} +115 -346
  319. package/coverage/lcov-report/src/utilities/rowProcessor/map.ts.html +373 -0
  320. package/coverage/lcov-report/{utilities/rowProcessor/utils.js.html → src/utilities/rowProcessor/utils.ts.html} +50 -38
  321. package/coverage/lcov-report/{utilities/scriptRunner.js.html → src/utilities/scriptRunner.ts.html} +28 -16
  322. package/coverage/lcov-report/{utilities/security.js.html → src/utilities/security.ts.html} +56 -74
  323. package/coverage/lcov-report/{utilities/statusCodes.js.html → src/utilities/statusCodes.ts.html} +11 -11
  324. package/coverage/lcov-report/{utilities → src/utilities}/usageQuota/index.html +28 -28
  325. package/coverage/lcov-report/{utilities/usageQuota/rows.js.html → src/utilities/usageQuota/rows.ts.html} +34 -46
  326. package/coverage/lcov-report/{utilities/usageQuota/usageQuoteReset.js.html → src/utilities/usageQuota/usageQuoteReset.ts.html} +13 -13
  327. package/coverage/lcov-report/{utilities/users.js.html → src/utilities/users.ts.html} +29 -35
  328. package/coverage/lcov-report/{utilities/workerRequests.js.html → src/utilities/workerRequests.ts.html} +129 -114
  329. package/coverage/lcov-report/src/watch.ts.html +196 -0
  330. package/coverage/lcov-report/src/websocket.ts.html +163 -0
  331. package/coverage/lcov.info +19514 -6962
  332. package/dist/api/controllers/apikeys.js +12 -9
  333. package/dist/api/controllers/application.js +48 -45
  334. package/dist/api/controllers/automation.js +122 -82
  335. package/dist/api/controllers/cloud.js +84 -71
  336. package/dist/api/controllers/component.js +4 -2
  337. package/dist/api/controllers/datasource.js +144 -92
  338. package/dist/api/controllers/deploy/Deployment.js +10 -6
  339. package/dist/api/controllers/deploy/index.js +13 -16
  340. package/dist/api/controllers/dev.js +96 -81
  341. package/dist/api/controllers/integration.js +11 -8
  342. package/dist/api/controllers/layout.js +18 -15
  343. package/dist/api/controllers/metadata.js +51 -37
  344. package/dist/api/controllers/migrations.js +19 -11
  345. package/dist/api/controllers/permission.js +52 -43
  346. package/dist/api/controllers/plugin/index.js +6 -7
  347. package/dist/api/controllers/plugin/utils.js +2 -1
  348. package/dist/api/controllers/public/applications.js +17 -9
  349. package/dist/api/controllers/public/tables.js +29 -9
  350. package/dist/api/controllers/public/utils.js +2 -2
  351. package/dist/api/controllers/query/import/index.js +1 -2
  352. package/dist/api/controllers/query/index.js +10 -13
  353. package/dist/api/controllers/query/validation.js +41 -33
  354. package/dist/api/controllers/role.js +29 -27
  355. package/dist/api/controllers/routing.js +71 -58
  356. package/dist/api/controllers/row/ExternalRequest.js +538 -542
  357. package/dist/api/controllers/row/external.js +258 -190
  358. package/dist/api/controllers/row/index.js +43 -14
  359. package/dist/api/controllers/row/internal.js +354 -295
  360. package/dist/api/controllers/row/internalSearch.js +95 -80
  361. package/dist/api/controllers/row/staticFormula.js +125 -112
  362. package/dist/api/controllers/row/utils.js +122 -84
  363. package/dist/api/controllers/screen.js +81 -66
  364. package/dist/api/controllers/script.js +13 -6
  365. package/dist/api/controllers/static/index.js +11 -14
  366. package/dist/api/controllers/table/bulkFormula.js +47 -35
  367. package/dist/api/controllers/table/external.js +89 -53
  368. package/dist/api/controllers/table/index.js +64 -31
  369. package/dist/api/controllers/table/internal.js +5 -6
  370. package/dist/api/controllers/table/utils.js +39 -35
  371. package/dist/api/controllers/templates.js +17 -10
  372. package/dist/api/controllers/user.js +82 -70
  373. package/dist/api/controllers/view/exporters.js +8 -4
  374. package/dist/api/controllers/view/index.js +201 -153
  375. package/dist/api/controllers/view/utils.js +151 -121
  376. package/dist/api/controllers/view/viewBuilder.js +4 -16
  377. package/dist/api/controllers/webhook.js +25 -2
  378. package/dist/api/index.js +38 -34
  379. package/dist/api/routes/analytics.js +29 -3
  380. package/dist/api/routes/apikeys.js +33 -7
  381. package/dist/api/routes/application.js +8 -9
  382. package/dist/api/routes/auth.js +1 -2
  383. package/dist/api/routes/automation.js +46 -20
  384. package/dist/api/routes/backup.js +3 -4
  385. package/dist/api/routes/cloud.js +32 -6
  386. package/dist/api/routes/component.js +32 -6
  387. package/dist/api/routes/datasource.js +39 -13
  388. package/dist/api/routes/deploy.js +34 -8
  389. package/dist/api/routes/dev.js +36 -10
  390. package/dist/api/routes/integration.js +33 -7
  391. package/dist/api/routes/layout.js +33 -7
  392. package/dist/api/routes/metadata.js +36 -10
  393. package/dist/api/routes/migrations.js +32 -6
  394. package/dist/api/routes/permission.js +38 -12
  395. package/dist/api/routes/plugin.js +5 -5
  396. package/dist/api/routes/public/index.js +11 -11
  397. package/dist/api/routes/query.js +42 -15
  398. package/dist/api/routes/role.js +36 -10
  399. package/dist/api/routes/routing.js +32 -6
  400. package/dist/api/routes/row.js +12 -11
  401. package/dist/api/routes/screen.js +35 -9
  402. package/dist/api/routes/script.js +32 -6
  403. package/dist/api/routes/static.js +9 -9
  404. package/dist/api/routes/table.js +40 -13
  405. package/dist/api/routes/templates.js +33 -7
  406. package/dist/api/routes/tests/utilities/TestFunctions.js +6 -8
  407. package/dist/api/routes/tests/utilities/index.js +69 -32
  408. package/dist/api/routes/user.js +40 -13
  409. package/dist/api/routes/utils/validators.js +142 -126
  410. package/dist/api/routes/view.js +38 -12
  411. package/dist/api/routes/webhook.js +1 -2
  412. package/dist/app.js +22 -22
  413. package/dist/automations/actions.js +53 -24
  414. package/dist/automations/automationUtils.js +31 -19
  415. package/dist/automations/bullboard.js +59 -29
  416. package/dist/automations/index.js +23 -18
  417. package/dist/automations/steps/bash.js +40 -10
  418. package/dist/automations/steps/createRow.js +2 -1
  419. package/dist/automations/steps/delay.js +9 -5
  420. package/dist/automations/steps/deleteRow.js +2 -1
  421. package/dist/automations/steps/discord.js +14 -7
  422. package/dist/automations/steps/executeQuery.js +34 -7
  423. package/dist/automations/steps/executeScript.js +34 -7
  424. package/dist/automations/steps/filter.js +20 -18
  425. package/dist/automations/steps/integromat.js +14 -7
  426. package/dist/automations/steps/loop.js +4 -1
  427. package/dist/automations/steps/outgoingWebhook.js +45 -14
  428. package/dist/automations/steps/queryRows.js +71 -38
  429. package/dist/automations/steps/sendSmtpEmail.js +33 -6
  430. package/dist/automations/steps/serverLog.js +12 -8
  431. package/dist/automations/steps/slack.js +14 -7
  432. package/dist/automations/steps/updateRow.js +34 -7
  433. package/dist/automations/steps/utils.js +22 -16
  434. package/dist/automations/steps/zapier.js +15 -7
  435. package/dist/automations/tests/utilities/index.js +62 -38
  436. package/dist/automations/triggerInfo/app.js +4 -1
  437. package/dist/automations/triggerInfo/cron.js +4 -1
  438. package/dist/automations/triggerInfo/index.js +31 -6
  439. package/dist/automations/triggerInfo/rowDeleted.js +4 -1
  440. package/dist/automations/triggerInfo/rowSaved.js +4 -1
  441. package/dist/automations/triggerInfo/rowUpdated.js +4 -1
  442. package/dist/automations/triggerInfo/webhook.js +4 -1
  443. package/dist/automations/triggers.js +90 -57
  444. package/dist/automations/utils.js +9 -8
  445. package/dist/constants/index.js +118 -104
  446. package/dist/constants/layouts.js +7 -10
  447. package/dist/constants/screens.js +49 -44
  448. package/dist/db/defaultData/datasource_bb_default.js +571 -0
  449. package/dist/db/defaultData/employeeImport.js +155 -0
  450. package/dist/db/defaultData/expensesImport.js +117 -0
  451. package/dist/db/defaultData/inventoryImport.js +109 -0
  452. package/dist/db/defaultData/jobsImport.js +152 -0
  453. package/dist/db/dynamoClient.js +20 -20
  454. package/dist/db/inMemoryView.js +47 -38
  455. package/dist/db/index.js +7 -4
  456. package/dist/db/linkedRows/LinkController.js +51 -70
  457. package/dist/db/linkedRows/LinkDocument.js +32 -0
  458. package/dist/db/linkedRows/index.js +93 -81
  459. package/dist/db/linkedRows/linkUtils.js +42 -32
  460. package/dist/db/utils.js +146 -119
  461. package/dist/db/views/staticViews.js +91 -74
  462. package/dist/environment.js +9 -6
  463. package/dist/events/AutomationEmitter.js +13 -10
  464. package/dist/events/BudibaseEmitter.js +24 -0
  465. package/dist/events/index.js +5 -23
  466. package/dist/events/utils.js +18 -10
  467. package/dist/integrations/elasticsearch.js +26 -2
  468. package/dist/integrations/googlesheets.js +5 -6
  469. package/dist/integrations/index.js +15 -6
  470. package/dist/integrations/s3.js +157 -1
  471. package/dist/middleware/appInfo.js +14 -9
  472. package/dist/middleware/authorized.js +22 -21
  473. package/dist/middleware/builder.js +41 -40
  474. package/dist/middleware/currentapp.js +39 -37
  475. package/dist/middleware/joi-validator.js +17 -10
  476. package/dist/middleware/publicApi.js +5 -6
  477. package/dist/middleware/resourceId.js +16 -9
  478. package/dist/middleware/selfhost.js +5 -4
  479. package/dist/middleware/utils.js +5 -2
  480. package/dist/migrations/functions/appUrls.js +2 -2
  481. package/dist/migrations/functions/backfill/global.js +1 -1
  482. package/dist/migrations/functions/usageQuotas/syncApps.js +3 -4
  483. package/dist/migrations/functions/usageQuotas/syncRows.js +3 -4
  484. package/dist/migrations/functions/userEmailViewCasing.js +3 -3
  485. package/dist/package.json +10 -44
  486. package/dist/sdk/app/backups/exports.js +1 -2
  487. package/dist/sdk/app/backups/imports.js +2 -3
  488. package/dist/sdk/app/tables/index.js +5 -5
  489. package/dist/startup.js +10 -10
  490. package/dist/tests/utilities/TestConfiguration.js +111 -87
  491. package/dist/tests/utilities/controllers.js +38 -15
  492. package/dist/tests/utilities/structures.js +72 -53
  493. package/dist/threads/automation.js +49 -27
  494. package/dist/threads/query.js +17 -19
  495. package/dist/threads/utils.js +33 -8
  496. package/dist/tsconfig.build.tsbuildinfo +1 -1
  497. package/dist/utilities/budibaseDir.js +4 -2
  498. package/dist/utilities/centralPath.js +14 -7
  499. package/dist/utilities/csvParser.js +27 -21
  500. package/dist/utilities/fileSystem/clientLibrary.js +87 -73
  501. package/dist/utilities/fileSystem/index.js +202 -175
  502. package/dist/utilities/fileSystem/processor.js +8 -3
  503. package/dist/utilities/global.js +87 -66
  504. package/dist/utilities/index.js +102 -75
  505. package/dist/utilities/plugins.js +15 -9
  506. package/dist/utilities/redis.js +100 -65
  507. package/dist/utilities/routing/index.js +27 -23
  508. package/dist/utilities/rowProcessor/index.js +133 -191
  509. package/dist/utilities/rowProcessor/map.js +99 -0
  510. package/dist/utilities/rowProcessor/utils.js +35 -26
  511. package/dist/utilities/scriptRunner.js +8 -5
  512. package/dist/utilities/security.js +39 -35
  513. package/dist/utilities/usageQuota/rows.js +56 -49
  514. package/dist/utilities/users.js +31 -28
  515. package/dist/utilities/workerRequests.js +115 -82
  516. package/dist/watch.js +1 -2
  517. package/jest.config.ts +33 -0
  518. package/package.json +11 -45
  519. package/scripts/exportAppTemplate.js +2 -2
  520. package/scripts/localdomain.js +34 -6
  521. package/src/api/controllers/{apikeys.js → apikeys.ts} +10 -10
  522. package/src/api/controllers/application.ts +56 -42
  523. package/src/api/controllers/auth.ts +4 -3
  524. package/src/api/controllers/{automation.js → automation.ts} +48 -48
  525. package/src/api/controllers/{cloud.js → cloud.ts} +24 -24
  526. package/src/api/controllers/component.ts +2 -1
  527. package/src/api/controllers/{datasource.js → datasource.ts} +100 -47
  528. package/src/api/controllers/deploy/{Deployment.js → Deployment.ts} +13 -10
  529. package/src/api/controllers/deploy/index.ts +13 -25
  530. package/src/api/controllers/{dev.js → dev.ts} +31 -37
  531. package/src/api/controllers/integration.ts +13 -0
  532. package/src/api/controllers/{layout.js → layout.ts} +8 -8
  533. package/src/api/controllers/{metadata.js → metadata.ts} +11 -10
  534. package/src/api/controllers/migrations.ts +14 -0
  535. package/src/api/controllers/{permission.js → permission.ts} +49 -46
  536. package/src/api/controllers/plugin/index.ts +4 -5
  537. package/src/api/controllers/plugin/utils.ts +3 -5
  538. package/src/api/controllers/public/applications.ts +15 -9
  539. package/src/api/controllers/public/rows.ts +1 -1
  540. package/src/api/controllers/public/tables.ts +2 -2
  541. package/src/api/controllers/public/utils.ts +2 -2
  542. package/src/api/controllers/query/import/index.ts +2 -3
  543. package/src/api/controllers/query/index.ts +11 -14
  544. package/src/api/controllers/query/{validation.js → validation.ts} +7 -7
  545. package/src/api/controllers/{role.js → role.ts} +21 -25
  546. package/src/api/controllers/{routing.js → routing.ts} +37 -34
  547. package/src/api/controllers/row/ExternalRequest.ts +602 -624
  548. package/src/api/controllers/row/{external.js → external.ts} +79 -62
  549. package/src/api/controllers/row/index.ts +19 -11
  550. package/src/api/controllers/row/{internal.js → internal.ts} +87 -73
  551. package/src/api/controllers/row/{internalSearch.js → internalSearch.ts} +92 -68
  552. package/src/api/controllers/row/{staticFormula.js → staticFormula.ts} +30 -25
  553. package/src/api/controllers/row/{utils.js → utils.ts} +32 -22
  554. package/src/api/controllers/screen.ts +10 -6
  555. package/src/api/controllers/script.ts +12 -0
  556. package/src/api/controllers/static/index.ts +14 -16
  557. package/src/api/controllers/table/{bulkFormula.js → bulkFormula.ts} +39 -25
  558. package/src/api/controllers/table/{external.js → external.ts} +86 -55
  559. package/src/api/controllers/table/{index.js → index.ts} +21 -18
  560. package/src/api/controllers/table/internal.ts +5 -6
  561. package/src/api/controllers/table/utils.ts +26 -21
  562. package/src/api/controllers/{templates.js → templates.ts} +10 -7
  563. package/src/api/controllers/{user.js → user.ts} +47 -49
  564. package/src/api/controllers/view/{exporters.js → exporters.ts} +5 -3
  565. package/src/api/controllers/view/{index.js → index.ts} +36 -27
  566. package/src/api/controllers/view/{utils.js → utils.ts} +26 -20
  567. package/src/api/controllers/view/{viewBuilder.js → viewBuilder.ts} +25 -11
  568. package/src/api/controllers/webhook.ts +1 -1
  569. package/src/api/{index.js → index.ts} +15 -22
  570. package/src/api/routes/analytics.ts +9 -0
  571. package/src/api/routes/apikeys.ts +12 -0
  572. package/src/api/routes/application.ts +17 -9
  573. package/src/api/routes/auth.ts +2 -2
  574. package/src/api/routes/automation.ts +87 -0
  575. package/src/api/routes/backup.ts +8 -4
  576. package/src/api/routes/cloud.ts +18 -0
  577. package/src/api/routes/component.ts +14 -0
  578. package/src/api/routes/datasource.ts +60 -0
  579. package/src/api/routes/deploy.ts +21 -0
  580. package/src/api/routes/dev.ts +38 -0
  581. package/src/api/routes/integration.ts +16 -0
  582. package/src/api/routes/layout.ts +16 -0
  583. package/src/api/routes/{metadata.js → metadata.ts} +13 -13
  584. package/src/api/routes/migrations.ts +14 -0
  585. package/src/api/routes/permission.ts +41 -0
  586. package/src/api/routes/plugin.ts +14 -6
  587. package/src/api/routes/public/index.ts +11 -14
  588. package/src/api/routes/public/tests/compare.spec.js +1 -1
  589. package/src/api/routes/{query.js → query.ts} +19 -22
  590. package/src/api/routes/role.ts +24 -0
  591. package/src/api/routes/routing.ts +14 -0
  592. package/src/api/routes/row.ts +13 -15
  593. package/src/api/routes/screen.ts +23 -0
  594. package/src/api/routes/script.ts +10 -0
  595. package/src/api/routes/static.ts +7 -10
  596. package/src/api/routes/{table.js → table.ts} +10 -13
  597. package/src/api/routes/templates.ts +16 -0
  598. package/src/api/routes/tests/analytics.spec.js +1 -1
  599. package/src/api/routes/tests/backup.spec.js +9 -1
  600. package/src/api/routes/tests/deployment.spec.ts +1 -1
  601. package/src/api/routes/tests/permissions.spec.js +2 -1
  602. package/src/api/routes/tests/query.spec.js +15 -10
  603. package/src/api/routes/tests/role.spec.js +7 -9
  604. package/src/api/routes/tests/routing.spec.js +2 -1
  605. package/src/api/routes/tests/row.spec.js +3 -4
  606. package/src/api/routes/tests/static.spec.js +2 -2
  607. package/src/api/routes/tests/table.spec.js +40 -36
  608. package/src/api/routes/tests/user.spec.js +2 -1
  609. package/src/api/routes/tests/utilities/TestFunctions.ts +6 -8
  610. package/src/api/routes/tests/utilities/{index.js → index.ts} +12 -12
  611. package/src/api/routes/user.ts +51 -0
  612. package/src/api/routes/utils/{validators.js → validators.ts} +33 -37
  613. package/src/api/routes/view.ts +34 -0
  614. package/src/api/routes/webhook.ts +2 -2
  615. package/src/app.ts +15 -14
  616. package/src/automations/{actions.js → actions.ts} +26 -23
  617. package/src/automations/{automationUtils.js → automationUtils.ts} +13 -12
  618. package/src/automations/bullboard.ts +38 -0
  619. package/src/automations/index.ts +26 -0
  620. package/src/automations/steps/{bash.js → bash.ts} +13 -8
  621. package/src/automations/steps/createRow.ts +8 -3
  622. package/src/automations/steps/{delay.js → delay.ts} +9 -4
  623. package/src/automations/steps/deleteRow.ts +8 -3
  624. package/src/automations/steps/{discord.js → discord.ts} +10 -5
  625. package/src/automations/steps/{executeQuery.js → executeQuery.ts} +12 -7
  626. package/src/automations/steps/{executeScript.js → executeScript.ts} +17 -7
  627. package/src/automations/steps/{filter.js → filter.ts} +12 -9
  628. package/src/automations/steps/{integromat.js → integromat.ts} +10 -5
  629. package/src/automations/steps/{loop.js → loop.ts} +4 -2
  630. package/src/automations/steps/{outgoingWebhook.js → outgoingWebhook.ts} +18 -13
  631. package/src/automations/steps/{queryRows.js → queryRows.ts} +48 -36
  632. package/src/automations/steps/{sendSmtpEmail.js → sendSmtpEmail.ts} +10 -5
  633. package/src/automations/steps/{serverLog.js → serverLog.ts} +9 -3
  634. package/src/automations/steps/{slack.js → slack.ts} +10 -5
  635. package/src/automations/steps/{updateRow.js → updateRow.ts} +12 -7
  636. package/src/automations/steps/{utils.js → utils.ts} +10 -4
  637. package/src/automations/steps/{zapier.js → zapier.ts} +11 -5
  638. package/src/automations/tests/updateRow.spec.js +0 -1
  639. package/src/automations/tests/utilities/index.ts +60 -0
  640. package/src/automations/triggerInfo/{app.js → app.ts} +7 -2
  641. package/src/automations/triggerInfo/{cron.js → cron.ts} +7 -2
  642. package/src/automations/triggerInfo/index.ts +15 -0
  643. package/src/automations/triggerInfo/{rowDeleted.js → rowDeleted.ts} +7 -2
  644. package/src/automations/triggerInfo/{rowSaved.js → rowSaved.ts} +7 -2
  645. package/src/automations/triggerInfo/{rowUpdated.js → rowUpdated.ts} +7 -2
  646. package/src/automations/triggerInfo/{webhook.js → webhook.ts} +7 -2
  647. package/src/automations/{triggers.js → triggers.ts} +30 -26
  648. package/src/automations/utils.ts +9 -12
  649. package/src/constants/index.ts +204 -0
  650. package/src/constants/{layouts.js → layouts.ts} +3 -9
  651. package/src/constants/screens.ts +48 -0
  652. package/src/db/defaultData/datasource_bb_default.ts +649 -0
  653. package/src/db/defaultData/employeeImport.ts +152 -0
  654. package/src/db/defaultData/expensesImport.ts +114 -0
  655. package/src/db/defaultData/inventoryImport.ts +106 -0
  656. package/src/db/defaultData/jobsImport.ts +158 -0
  657. package/src/db/{dynamoClient.js → dynamoClient.ts} +39 -19
  658. package/src/db/{inMemoryView.js → inMemoryView.ts} +15 -9
  659. package/src/db/index.ts +16 -0
  660. package/src/db/linkedRows/{LinkController.js → LinkController.ts} +64 -85
  661. package/src/db/linkedRows/LinkDocument.ts +60 -0
  662. package/src/db/linkedRows/{index.js → index.ts} +43 -38
  663. package/src/db/linkedRows/{linkUtils.js → linkUtils.ts} +33 -24
  664. package/src/db/{newid.js → newid.ts} +1 -1
  665. package/src/db/tests/linkController.spec.js +73 -57
  666. package/src/db/tests/linkTests.spec.js +17 -14
  667. package/src/db/{utils.js → utils.ts} +77 -93
  668. package/src/db/views/{staticViews.js → staticViews.ts} +20 -13
  669. package/src/{environment.js → environment.ts} +11 -7
  670. package/src/events/{AutomationEmitter.js → AutomationEmitter.ts} +12 -7
  671. package/src/events/{index.js → BudibaseEmitter.ts} +7 -8
  672. package/src/events/index.ts +5 -0
  673. package/src/events/utils.ts +78 -0
  674. package/src/integrations/base/sql.ts +1 -1
  675. package/src/integrations/base/sqlTable.ts +1 -1
  676. package/src/integrations/elasticsearch.ts +32 -2
  677. package/src/integrations/googlesheets.ts +5 -7
  678. package/src/integrations/index.ts +45 -41
  679. package/src/integrations/s3.ts +179 -3
  680. package/src/integrations/tests/s3.spec.ts +85 -1
  681. package/src/integrations/utils.ts +6 -2
  682. package/src/middleware/appInfo.ts +20 -0
  683. package/src/middleware/authorized.ts +21 -28
  684. package/src/middleware/{builder.js → builder.ts} +17 -15
  685. package/src/middleware/{currentapp.js → currentapp.ts} +42 -39
  686. package/src/middleware/{joi-validator.js → joi-validator.ts} +9 -8
  687. package/src/middleware/publicApi.ts +21 -0
  688. package/src/middleware/{resourceId.js → resourceId.ts} +16 -11
  689. package/src/middleware/{selfhost.js → selfhost.ts} +4 -2
  690. package/src/middleware/tests/authorized.spec.js +5 -6
  691. package/src/middleware/tests/currentapp.spec.js +118 -63
  692. package/src/middleware/{utils.js → utils.ts} +3 -1
  693. package/src/migrations/functions/appUrls.ts +2 -2
  694. package/src/migrations/functions/backfill/app/tables.ts +2 -5
  695. package/src/migrations/functions/backfill/global.ts +1 -1
  696. package/src/migrations/functions/tests/appUrls.spec.js +4 -4
  697. package/src/migrations/functions/tests/userEmailViewCasing.spec.js +14 -9
  698. package/src/migrations/functions/usageQuotas/syncApps.ts +3 -4
  699. package/src/migrations/functions/usageQuotas/syncRows.ts +4 -5
  700. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +7 -7
  701. package/src/migrations/functions/userEmailViewCasing.ts +3 -3
  702. package/src/migrations/tests/index.spec.ts +1 -1
  703. package/src/sdk/app/backups/exports.ts +5 -3
  704. package/src/sdk/app/backups/imports.ts +7 -14
  705. package/src/sdk/app/backups/statistics.ts +9 -18
  706. package/src/sdk/app/tables/index.ts +7 -8
  707. package/src/startup.ts +5 -5
  708. package/{scripts/jestSetup.js → src/tests/jestSetup.ts} +11 -2
  709. package/src/tests/utilities/{TestConfiguration.js → TestConfiguration.ts} +111 -78
  710. package/src/tests/utilities/controllers.ts +14 -0
  711. package/src/tests/utilities/{index.js → index.ts} +2 -2
  712. package/src/tests/utilities/{structures.js → structures.ts} +41 -36
  713. package/src/threads/automation.ts +18 -19
  714. package/src/threads/query.ts +11 -16
  715. package/src/threads/utils.ts +4 -5
  716. package/src/utilities/budibaseDir.ts +3 -0
  717. package/src/utilities/{centralPath.js → centralPath.ts} +3 -3
  718. package/src/utilities/{csvParser.js → csvParser.ts} +42 -26
  719. package/src/utilities/fileSystem/{clientLibrary.js → clientLibrary.ts} +20 -20
  720. package/src/utilities/fileSystem/{index.js → index.ts} +55 -63
  721. package/src/utilities/fileSystem/{processor.js → processor.ts} +3 -5
  722. package/src/utilities/global.ts +138 -0
  723. package/src/utilities/{index.js → index.ts} +40 -32
  724. package/src/utilities/{plugins.js → plugins.ts} +5 -4
  725. package/src/utilities/{redis.js → redis.ts} +21 -20
  726. package/src/utilities/routing/index.ts +32 -0
  727. package/src/utilities/rowProcessor/{index.js → index.ts} +67 -144
  728. package/src/utilities/rowProcessor/map.ts +96 -0
  729. package/src/utilities/rowProcessor/{utils.js → utils.ts} +19 -15
  730. package/src/utilities/{scriptRunner.js → scriptRunner.ts} +8 -4
  731. package/src/utilities/security.ts +65 -0
  732. package/src/utilities/{statusCodes.js → statusCodes.ts} +1 -1
  733. package/src/utilities/usageQuota/{rows.js → rows.ts} +14 -18
  734. package/src/utilities/usageQuota/{usageQuoteReset.js → usageQuoteReset.ts} +1 -1
  735. package/src/utilities/{users.js → users.ts} +11 -13
  736. package/src/utilities/{workerRequests.js → workerRequests.ts} +43 -38
  737. package/src/watch.ts +2 -3
  738. package/tsconfig.build.json +1 -2
  739. package/tsconfig.json +3 -1
  740. package/coverage/lcov-report/api/controllers/index.html +0 -326
  741. package/coverage/lcov-report/automations/steps/index.html +0 -341
  742. package/coverage/lcov-report/db/linkedRows/index.html +0 -146
  743. package/dist/integrations/tests/TestConfiguration.js +0 -1
  744. package/dist/utilities/fileSystem/utilities.js +0 -22
  745. package/dist/utilities/queue/inMemoryQueue.js +0 -126
  746. package/src/api/controllers/integration.js +0 -14
  747. package/src/api/controllers/migrations.js +0 -13
  748. package/src/api/controllers/script.js +0 -11
  749. package/src/api/routes/analytics.js +0 -9
  750. package/src/api/routes/apikeys.js +0 -12
  751. package/src/api/routes/automation.js +0 -85
  752. package/src/api/routes/cloud.js +0 -14
  753. package/src/api/routes/component.js +0 -14
  754. package/src/api/routes/datasource.js +0 -51
  755. package/src/api/routes/deploy.js +0 -17
  756. package/src/api/routes/dev.js +0 -26
  757. package/src/api/routes/integration.js +0 -12
  758. package/src/api/routes/layout.js +0 -16
  759. package/src/api/routes/migrations.js +0 -14
  760. package/src/api/routes/permission.js +0 -33
  761. package/src/api/routes/role.js +0 -15
  762. package/src/api/routes/routing.js +0 -14
  763. package/src/api/routes/screen.js +0 -18
  764. package/src/api/routes/script.js +0 -10
  765. package/src/api/routes/templates.js +0 -16
  766. package/src/api/routes/user.js +0 -53
  767. package/src/api/routes/view.js +0 -31
  768. package/src/automations/bullboard.js +0 -39
  769. package/src/automations/index.js +0 -29
  770. package/src/automations/tests/utilities/index.js +0 -51
  771. package/src/automations/triggerInfo/index.js +0 -15
  772. package/src/constants/index.js +0 -208
  773. package/src/constants/screens.js +0 -46
  774. package/src/db/index.js +0 -16
  775. package/src/events/utils.js +0 -38
  776. package/src/middleware/appInfo.js +0 -19
  777. package/src/middleware/publicApi.js +0 -21
  778. package/src/module.d.ts +0 -14
  779. package/src/tests/utilities/controllers.js +0 -16
  780. package/src/utilities/budibaseDir.js +0 -3
  781. package/src/utilities/fileSystem/utilities.js +0 -36
  782. package/src/utilities/global.js +0 -127
  783. package/src/utilities/queue/inMemoryQueue.js +0 -122
  784. package/src/utilities/routing/index.js +0 -25
  785. package/src/utilities/security.js +0 -71
@@ -0,0 +1,1474 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/integrations/oracle.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/integrations</a> oracle.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">32.52% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>40/123</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">26.47% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>18/68</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">34.61% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>9/26</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">32.23% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>39/121</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
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>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">47x</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">47x</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-yes">47x</span>
547
+ <span class="cline-any cline-yes">47x</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-neutral">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</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">47x</span>
557
+ <span class="cline-any cline-yes">47x</span>
558
+ <span class="cline-any cline-yes">47x</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-neutral">&nbsp;</span>
570
+ <span class="cline-any cline-neutral">&nbsp;</span>
571
+ <span class="cline-any cline-yes">47x</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-neutral">&nbsp;</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-neutral">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-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-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-neutral">&nbsp;</span>
609
+ <span class="cline-any cline-neutral">&nbsp;</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-neutral">&nbsp;</span>
613
+ <span class="cline-any cline-neutral">&nbsp;</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">47x</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-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-neutral">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span>
631
+ <span class="cline-any cline-neutral">&nbsp;</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-neutral">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-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-neutral">&nbsp;</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-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-neutral">&nbsp;</span>
654
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-yes">47x</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-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-yes">7x</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-yes">7x</span>
676
+ <span class="cline-any cline-yes">7x</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-yes">7x</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-neutral">&nbsp;</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</span>
683
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
687
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
694
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
698
+ <span class="cline-any cline-neutral">&nbsp;</span>
699
+ <span class="cline-any cline-neutral">&nbsp;</span>
700
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
705
+ <span class="cline-any cline-neutral">&nbsp;</span>
706
+ <span class="cline-any cline-neutral">&nbsp;</span>
707
+ <span class="cline-any cline-yes">7x</span>
708
+ <span class="cline-any cline-yes">7x</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-neutral">&nbsp;</span>
711
+ <span class="cline-any cline-neutral">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-neutral">&nbsp;</span>
714
+ <span class="cline-any cline-neutral">&nbsp;</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-no">&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-yes">46x</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
728
+ <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-no">&nbsp;</span>
732
+ <span class="cline-any cline-no">&nbsp;</span>
733
+ <span class="cline-any cline-no">&nbsp;</span>
734
+ <span class="cline-any cline-no">&nbsp;</span>
735
+ <span class="cline-any cline-no">&nbsp;</span>
736
+ <span class="cline-any cline-no">&nbsp;</span>
737
+ <span class="cline-any cline-no">&nbsp;</span>
738
+ <span class="cline-any cline-no">&nbsp;</span>
739
+ <span class="cline-any cline-no">&nbsp;</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
741
+ <span class="cline-any cline-no">&nbsp;</span>
742
+ <span class="cline-any cline-neutral">&nbsp;</span>
743
+ <span class="cline-any cline-no">&nbsp;</span>
744
+ <span class="cline-any cline-no">&nbsp;</span>
745
+ <span class="cline-any cline-no">&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-no">&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-no">&nbsp;</span>
753
+ <span class="cline-any cline-no">&nbsp;</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-neutral">&nbsp;</span>
761
+ <span class="cline-any cline-no">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-no">&nbsp;</span>
765
+ <span class="cline-any cline-no">&nbsp;</span>
766
+ <span class="cline-any cline-no">&nbsp;</span>
767
+ <span class="cline-any cline-no">&nbsp;</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-neutral">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&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-no">&nbsp;</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-neutral">&nbsp;</span>
782
+ <span class="cline-any cline-neutral">&nbsp;</span>
783
+ <span class="cline-any cline-no">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-no">&nbsp;</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&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-no">&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-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-no">&nbsp;</span>
805
+ <span class="cline-any cline-neutral">&nbsp;</span>
806
+ <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-no">&nbsp;</span>
808
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
812
+ <span class="cline-any cline-neutral">&nbsp;</span>
813
+ <span class="cline-any cline-neutral">&nbsp;</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span>
817
+ <span class="cline-any cline-no">&nbsp;</span>
818
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
822
+ <span class="cline-any cline-neutral">&nbsp;</span>
823
+ <span class="cline-any cline-neutral">&nbsp;</span>
824
+ <span class="cline-any cline-neutral">&nbsp;</span>
825
+ <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&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-no">&nbsp;</span>
834
+ <span class="cline-any cline-neutral">&nbsp;</span>
835
+ <span class="cline-any cline-no">&nbsp;</span>
836
+ <span class="cline-any cline-neutral">&nbsp;</span>
837
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-no">&nbsp;</span>
839
+ <span class="cline-any cline-no">&nbsp;</span>
840
+ <span class="cline-any cline-no">&nbsp;</span>
841
+ <span class="cline-any cline-no">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-no">&nbsp;</span>
860
+ <span class="cline-any cline-no">&nbsp;</span>
861
+ <span class="cline-any cline-no">&nbsp;</span>
862
+ <span class="cline-any cline-no">&nbsp;</span>
863
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
872
+ <span class="cline-any cline-no">&nbsp;</span>
873
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</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-no">&nbsp;</span>
880
+ <span class="cline-any cline-no">&nbsp;</span>
881
+ <span class="cline-any cline-no">&nbsp;</span>
882
+ <span class="cline-any cline-neutral">&nbsp;</span>
883
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">7x</span>
887
+ <span class="cline-any cline-yes">7x</span>
888
+ <span class="cline-any cline-yes">7x</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-yes">7x</span>
891
+ <span class="cline-any cline-yes">7x</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-yes">7x</span>
894
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
+ <span class="cline-any cline-yes">7x</span>
896
+ <span class="cline-any cline-yes">7x</span>
897
+ <span class="cline-any cline-yes">7x</span>
898
+ <span class="cline-any cline-neutral">&nbsp;</span>
899
+ <span class="cline-any cline-no">&nbsp;</span>
900
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
+ <span class="cline-any cline-neutral">&nbsp;</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</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-yes">7x</span>
906
+ <span class="cline-any cline-neutral">&nbsp;</span>
907
+ <span class="cline-any cline-yes">7x</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">7x</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-yes">7x</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-yes">2x</span>
920
+ <span class="cline-any cline-yes">2x</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-neutral">&nbsp;</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-neutral">&nbsp;</span>
926
+ <span class="cline-any cline-yes">1x</span>
927
+ <span class="cline-any cline-yes">1x</span>
928
+ <span class="cline-any cline-neutral">&nbsp;</span>
929
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
+ <span class="cline-any cline-neutral">&nbsp;</span>
931
+ <span class="cline-any cline-yes">2x</span>
932
+ <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
938
+ <span class="cline-any cline-yes">2x</span>
939
+ <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-neutral">&nbsp;</span>
945
+ <span class="cline-any cline-no">&nbsp;</span>
946
+ <span class="cline-any cline-no">&nbsp;</span>
947
+ <span class="cline-any cline-no">&nbsp;</span>
948
+ <span class="cline-any cline-no">&nbsp;</span>
949
+ <span class="cline-any cline-no">&nbsp;</span>
950
+ <span class="cline-any cline-no">&nbsp;</span>
951
+ <span class="cline-any cline-neutral">&nbsp;</span>
952
+ <span class="cline-any cline-no">&nbsp;</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-neutral">&nbsp;</span>
955
+ <span class="cline-any cline-neutral">&nbsp;</span>
956
+ <span class="cline-any cline-no">&nbsp;</span>
957
+ <span class="cline-any cline-no">&nbsp;</span>
958
+ <span class="cline-any cline-no">&nbsp;</span>
959
+ <span class="cline-any cline-neutral">&nbsp;</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-no">&nbsp;</span>
963
+ <span class="cline-any cline-neutral">&nbsp;</span>
964
+ <span class="cline-any cline-neutral">&nbsp;</span>
965
+ <span class="cline-any cline-no">&nbsp;</span>
966
+ <span class="cline-any cline-no">&nbsp;</span>
967
+ <span class="cline-any cline-no">&nbsp;</span>
968
+ <span class="cline-any cline-no">&nbsp;</span>
969
+ <span class="cline-any cline-neutral">&nbsp;</span>
970
+ <span class="cline-any cline-neutral">&nbsp;</span>
971
+ <span class="cline-any cline-no">&nbsp;</span>
972
+ <span class="cline-any cline-neutral">&nbsp;</span>
973
+ <span class="cline-any cline-neutral">&nbsp;</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-neutral">&nbsp;</span>
976
+ <span class="cline-any cline-no">&nbsp;</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-neutral">&nbsp;</span>
979
+ <span class="cline-any cline-no">&nbsp;</span>
980
+ <span class="cline-any cline-neutral">&nbsp;</span>
981
+ <span class="cline-any cline-no">&nbsp;</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-neutral">&nbsp;</span>
984
+ <span class="cline-any cline-neutral">&nbsp;</span>
985
+ <span class="cline-any cline-neutral">&nbsp;</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-yes">47x</span>
989
+ <span class="cline-any cline-neutral">&nbsp;</span>
990
+ <span class="cline-any cline-neutral">&nbsp;</span>
991
+ <span class="cline-any cline-neutral">&nbsp;</span>
992
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
993
+ DatasourceFieldType,
994
+ Integration,
995
+ Operation,
996
+ QueryJson,
997
+ QueryType,
998
+ SqlQuery,
999
+ Table,
1000
+ DatasourcePlus,
1001
+ } from "@budibase/types"
1002
+ import {
1003
+ buildExternalTableId,
1004
+ convertSqlType,
1005
+ finaliseExternalTables,
1006
+ getSqlQuery,
1007
+ SqlClient,
1008
+ } from "./utils"
1009
+ import Sql from "./base/sql"
1010
+ import { FieldTypes } from "../constants"
1011
+ import {
1012
+ BindParameters,
1013
+ Connection,
1014
+ ConnectionAttributes,
1015
+ ExecuteOptions,
1016
+ Result,
1017
+ } from "oracledb"
1018
+ let oracledb: any
1019
+ try {
1020
+ oracledb = require("oracledb")
1021
+ oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT
1022
+ } catch (err) {
1023
+ <span class="cstat-no" title="statement not covered" > console.log("ORACLEDB is not installed")</span>
1024
+ }
1025
+ &nbsp;
1026
+ interface OracleConfig {
1027
+ host: string
1028
+ port: number
1029
+ database: string
1030
+ user: string
1031
+ password: string
1032
+ }
1033
+ &nbsp;
1034
+ const SCHEMA: Integration = {
1035
+ docs: "https://github.com/oracle/node-oracledb",
1036
+ plus: true,
1037
+ friendlyName: "Oracle",
1038
+ type: "Relational",
1039
+ description:
1040
+ "Oracle Database is an object-relational database management system developed by Oracle Corporation",
1041
+ datasource: {
1042
+ host: {
1043
+ type: DatasourceFieldType.STRING,
1044
+ default: "localhost",
1045
+ required: true,
1046
+ },
1047
+ port: {
1048
+ type: DatasourceFieldType.NUMBER,
1049
+ required: true,
1050
+ default: 1521,
1051
+ },
1052
+ database: {
1053
+ type: DatasourceFieldType.STRING,
1054
+ required: true,
1055
+ },
1056
+ user: {
1057
+ type: DatasourceFieldType.STRING,
1058
+ required: true,
1059
+ },
1060
+ password: {
1061
+ type: DatasourceFieldType.PASSWORD,
1062
+ required: true,
1063
+ },
1064
+ },
1065
+ query: {
1066
+ create: {
1067
+ type: QueryType.SQL,
1068
+ },
1069
+ read: {
1070
+ type: QueryType.SQL,
1071
+ },
1072
+ update: {
1073
+ type: QueryType.SQL,
1074
+ },
1075
+ delete: {
1076
+ type: QueryType.SQL,
1077
+ },
1078
+ },
1079
+ }
1080
+ &nbsp;
1081
+ const UNSUPPORTED_TYPES = ["BLOB", "CLOB", "NCLOB"]
1082
+ &nbsp;
1083
+ /**
1084
+ * Raw query response
1085
+ */
1086
+ interface ColumnsResponse {
1087
+ TABLE_NAME: string
1088
+ COLUMN_NAME: string
1089
+ DATA_TYPE: string
1090
+ DATA_DEFAULT: string | null
1091
+ COLUMN_ID: number
1092
+ CONSTRAINT_NAME: string | null
1093
+ CONSTRAINT_TYPE: string | null
1094
+ R_CONSTRAINT_NAME: string | null
1095
+ SEARCH_CONDITION: string | null
1096
+ }
1097
+ &nbsp;
1098
+ /**
1099
+ * An oracle constraint
1100
+ */
1101
+ interface OracleConstraint {
1102
+ name: string
1103
+ type: string
1104
+ relatedConstraintName: string | null
1105
+ searchCondition: string | null
1106
+ }
1107
+ &nbsp;
1108
+ /**
1109
+ * An oracle column and it's related constraints
1110
+ */
1111
+ interface OracleColumn {
1112
+ name: string
1113
+ type: string
1114
+ default: string | null
1115
+ id: number
1116
+ constraints: { [key: string]: OracleConstraint }
1117
+ }
1118
+ &nbsp;
1119
+ /**
1120
+ * An oracle table and it's related columns
1121
+ */
1122
+ interface OracleTable {
1123
+ name: string
1124
+ columns: { [key: string]: OracleColumn }
1125
+ }
1126
+ &nbsp;
1127
+ const OracleContraintTypes = {
1128
+ PRIMARY: "P",
1129
+ NOT_NULL_OR_CHECK: "C",
1130
+ FOREIGN_KEY: "R",
1131
+ UNIQUE: "U",
1132
+ }
1133
+ &nbsp;
1134
+ class OracleIntegration extends Sql implements DatasourcePlus {
1135
+ private readonly config: OracleConfig
1136
+ private index: number = 1
1137
+ &nbsp;
1138
+ public tables: Record&lt;string, Table&gt; = {}
1139
+ public schemaErrors: Record&lt;string, string&gt; = {}
1140
+ &nbsp;
1141
+ private readonly COLUMNS_SQL = `
1142
+ SELECT
1143
+ tabs.table_name,
1144
+ cols.column_name,
1145
+ cols.data_type,
1146
+ cols.data_default,
1147
+ cols.column_id,
1148
+ cons.constraint_name,
1149
+ cons.constraint_type,
1150
+ cons.r_constraint_name,
1151
+ cons.search_condition
1152
+ FROM
1153
+ user_tables tabs
1154
+ JOIN
1155
+ user_tab_columns cols
1156
+ ON tabs.table_name = cols.table_name
1157
+ LEFT JOIN
1158
+ user_cons_columns col_cons
1159
+ ON cols.column_name = col_cons.column_name
1160
+ AND cols.table_name = col_cons.table_name
1161
+ LEFT JOIN
1162
+ user_constraints cons
1163
+ ON col_cons.constraint_name = cons.constraint_name
1164
+ AND cons.table_name = cols.table_name
1165
+ WHERE
1166
+ (cons.status = 'ENABLED'
1167
+ OR cons.status IS NULL)
1168
+ `
1169
+ constructor(config: OracleConfig) {
1170
+ super(SqlClient.ORACLE)
1171
+ this.config = config
1172
+ }
1173
+ &nbsp;
1174
+ <span class="fstat-no" title="function not covered" > getBindingIdentifier(</span>): string {
1175
+ <span class="cstat-no" title="statement not covered" > return `:${this.index++}`</span>
1176
+ }
1177
+ &nbsp;
1178
+ <span class="fstat-no" title="function not covered" > getStringConcat(</span>parts: string[]): string {
1179
+ <span class="cstat-no" title="statement not covered" > return parts.join(" || ")</span>
1180
+ }
1181
+ &nbsp;
1182
+ static isInstalled() {
1183
+ return oracledb != null
1184
+ }
1185
+ &nbsp;
1186
+ /**
1187
+ * Map the flat tabular columns and constraints data into a nested object
1188
+ */
1189
+ private <span class="fstat-no" title="function not covered" >mapColumns(</span>result: Result&lt;ColumnsResponse&gt;): {
1190
+ [key: string]: OracleTable
1191
+ } {
1192
+ const oracleTables: { [key: string]: OracleTable } = <span class="cstat-no" title="statement not covered" >{}</span>
1193
+ &nbsp;
1194
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (result.rows) {</span>
1195
+ <span class="cstat-no" title="statement not covered" > result.rows.forEach(<span class="fstat-no" title="function not covered" >row </span>=&gt; {</span>
1196
+ const tableName = <span class="cstat-no" title="statement not covered" >row.TABLE_NAME</span>
1197
+ const columnName = <span class="cstat-no" title="statement not covered" >row.COLUMN_NAME</span>
1198
+ const dataType = <span class="cstat-no" title="statement not covered" >row.DATA_TYPE</span>
1199
+ const dataDefault = <span class="cstat-no" title="statement not covered" >row.DATA_DEFAULT</span>
1200
+ const columnId = <span class="cstat-no" title="statement not covered" >row.COLUMN_ID</span>
1201
+ const constraintName = <span class="cstat-no" title="statement not covered" >row.CONSTRAINT_NAME</span>
1202
+ const constraintType = <span class="cstat-no" title="statement not covered" >row.CONSTRAINT_TYPE</span>
1203
+ const relatedConstraintName = <span class="cstat-no" title="statement not covered" >row.R_CONSTRAINT_NAME</span>
1204
+ const searchCondition = <span class="cstat-no" title="statement not covered" >row.SEARCH_CONDITION</span>
1205
+ &nbsp;
1206
+ let table = <span class="cstat-no" title="statement not covered" >oracleTables[tableName]</span>
1207
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!table) {</span>
1208
+ <span class="cstat-no" title="statement not covered" > table = {</span>
1209
+ name: tableName,
1210
+ columns: {},
1211
+ }
1212
+ <span class="cstat-no" title="statement not covered" > oracleTables[tableName] = table</span>
1213
+ }
1214
+ &nbsp;
1215
+ let column = <span class="cstat-no" title="statement not covered" >table.columns[columnName]</span>
1216
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!column) {</span>
1217
+ <span class="cstat-no" title="statement not covered" > column = {</span>
1218
+ name: columnName,
1219
+ type: dataType,
1220
+ default: dataDefault,
1221
+ id: columnId,
1222
+ constraints: {},
1223
+ }
1224
+ <span class="cstat-no" title="statement not covered" > table.columns[columnName] = column</span>
1225
+ }
1226
+ &nbsp;
1227
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (constraintName &amp;&amp; constraintType) {</span>
1228
+ let constraint = <span class="cstat-no" title="statement not covered" >column.constraints[constraintName]</span>
1229
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!constraint) {</span>
1230
+ <span class="cstat-no" title="statement not covered" > constraint = {</span>
1231
+ name: constraintName,
1232
+ type: constraintType,
1233
+ relatedConstraintName: relatedConstraintName,
1234
+ searchCondition: searchCondition,
1235
+ }
1236
+ }
1237
+ <span class="cstat-no" title="statement not covered" > column.constraints[constraintName] = constraint</span>
1238
+ }
1239
+ })
1240
+ }
1241
+ &nbsp;
1242
+ <span class="cstat-no" title="statement not covered" > return oracleTables</span>
1243
+ }
1244
+ &nbsp;
1245
+ private <span class="fstat-no" title="function not covered" >static </span>isSupportedColumn(column: OracleColumn) {
1246
+ <span class="cstat-no" title="statement not covered" > return !UNSUPPORTED_TYPES.includes(column.type)</span>
1247
+ }
1248
+ &nbsp;
1249
+ private <span class="fstat-no" title="function not covered" >static </span>isAutoColumn(column: OracleColumn) {
1250
+ <span class="cstat-no" title="statement not covered" > return !!(</span>
1251
+ column.default &amp;&amp; column.default.toLowerCase().includes("nextval")
1252
+ )
1253
+ }
1254
+ &nbsp;
1255
+ /**
1256
+ * No native boolean in oracle. Best we can do is to check if a manual 1 or 0 number constraint has been set up
1257
+ * This matches the default behaviour for generating DDL used in knex.
1258
+ */
1259
+ private <span class="fstat-no" title="function not covered" >isBooleanType(</span>column: OracleColumn): boolean {
1260
+ <span class="cstat-no" title="statement not covered" > return (</span>
1261
+ column.type.toLowerCase() === "number" &amp;&amp;
1262
+ Object.values(column.constraints).filter(<span class="fstat-no" title="function not covered" >c </span>=&gt; {
1263
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
1264
+ c.type === OracleContraintTypes.NOT_NULL_OR_CHECK &amp;&amp;
1265
+ c.searchCondition
1266
+ ) {
1267
+ const condition = <span class="cstat-no" title="statement not covered" >c.searchCondition</span>
1268
+ .replace(/\s/g, "") // remove spaces
1269
+ .replace(/[']+/g, "") // remove quotes
1270
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (condition.includes("in(0,1)") || condition.includes("in(1,0)")) {</span>
1271
+ <span class="cstat-no" title="statement not covered" > return true</span>
1272
+ }
1273
+ }
1274
+ <span class="cstat-no" title="statement not covered" > return false</span>
1275
+ }).length &gt; 0
1276
+ )
1277
+ }
1278
+ &nbsp;
1279
+ private <span class="fstat-no" title="function not covered" >internalConvertType(</span>column: OracleColumn): { type: string } {
1280
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.isBooleanType(column)) {</span>
1281
+ <span class="cstat-no" title="statement not covered" > return { type: FieldTypes.BOOLEAN }</span>
1282
+ }
1283
+ &nbsp;
1284
+ <span class="cstat-no" title="statement not covered" > return convertSqlType(column.type)</span>
1285
+ }
1286
+ &nbsp;
1287
+ /**
1288
+ * Fetches the tables from the oracle table and assigns them to the datasource.
1289
+ * @param {*} datasourceId - datasourceId to fetch
1290
+ * @param entities - the tables that are to be built
1291
+ */
1292
+ async <span class="fstat-no" title="function not covered" >buildSchema(</span>datasourceId: string, entities: Record&lt;string, Table&gt;) {
1293
+ const columnsResponse = <span class="cstat-no" title="statement not covered" >await this.internalQuery&lt;ColumnsResponse&gt;({</span>
1294
+ sql: this.COLUMNS_SQL,
1295
+ })
1296
+ const oracleTables = <span class="cstat-no" title="statement not covered" >this.mapColumns(columnsResponse)</span>
1297
+ &nbsp;
1298
+ const tables: { [key: string]: Table } = <span class="cstat-no" title="statement not covered" >{}</span>
1299
+ &nbsp;
1300
+ // iterate each table
1301
+ <span class="cstat-no" title="statement not covered" > Object.values(oracleTables).forEach(<span class="fstat-no" title="function not covered" >oracleTable </span>=&gt; {</span>
1302
+ let table = <span class="cstat-no" title="statement not covered" >tables[oracleTable.name]</span>
1303
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!table) {</span>
1304
+ <span class="cstat-no" title="statement not covered" > table = {</span>
1305
+ _id: buildExternalTableId(datasourceId, oracleTable.name),
1306
+ primary: [],
1307
+ name: oracleTable.name,
1308
+ schema: {},
1309
+ }
1310
+ <span class="cstat-no" title="statement not covered" > tables[oracleTable.name] = table</span>
1311
+ }
1312
+ &nbsp;
1313
+ // iterate each column on the table
1314
+ <span class="cstat-no" title="statement not covered" > Object.values(oracleTable.columns)</span>
1315
+ // remove columns that we can't read / save
1316
+ .filter(<span class="fstat-no" title="function not covered" >oracleColumn </span>=&gt;
1317
+ <span class="cstat-no" title="statement not covered" > OracleIntegration.isSupportedColumn(oracleColumn)</span>
1318
+ )
1319
+ // match the order of the columns in the db
1320
+ .sort(<span class="fstat-no" title="function not covered" >(c</span>1, c2) =&gt; <span class="cstat-no" title="statement not covered" >c1.id - c2.id)</span>
1321
+ .forEach(<span class="fstat-no" title="function not covered" >oracleColumn </span>=&gt; {
1322
+ const columnName = <span class="cstat-no" title="statement not covered" >oracleColumn.name</span>
1323
+ let fieldSchema = <span class="cstat-no" title="statement not covered" >table.schema[columnName]</span>
1324
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!fieldSchema) {</span>
1325
+ <span class="cstat-no" title="statement not covered" > fieldSchema = {</span>
1326
+ autocolumn: OracleIntegration.isAutoColumn(oracleColumn),
1327
+ name: columnName,
1328
+ ...this.internalConvertType(oracleColumn),
1329
+ }
1330
+ <span class="cstat-no" title="statement not covered" > table.schema[columnName] = fieldSchema</span>
1331
+ }
1332
+ &nbsp;
1333
+ // iterate each constraint on the column
1334
+ <span class="cstat-no" title="statement not covered" > Object.values(oracleColumn.constraints).forEach(<span class="fstat-no" title="function not covered" >oracleConstraint </span>=&gt; {</span>
1335
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (oracleConstraint.type === OracleContraintTypes.PRIMARY) {</span>
1336
+ <span class="cstat-no" title="statement not covered" > table.primary!.push(columnName)</span>
1337
+ }
1338
+ })
1339
+ })
1340
+ })
1341
+ &nbsp;
1342
+ const final = <span class="cstat-no" title="statement not covered" >finaliseExternalTables(tables, entities)</span>
1343
+ <span class="cstat-no" title="statement not covered" > this.tables = final.tables</span>
1344
+ <span class="cstat-no" title="statement not covered" > this.schemaErrors = final.errors</span>
1345
+ }
1346
+ &nbsp;
1347
+ private async internalQuery&lt;T&gt;(query: SqlQuery): Promise&lt;Result&lt;T&gt;&gt; {
1348
+ let connection
1349
+ try {
1350
+ this.index = 1
1351
+ connection = await this.getConnection()
1352
+ &nbsp;
1353
+ const options: ExecuteOptions = { autoCommit: true }
1354
+ const bindings: BindParameters = query.bindings || []
1355
+ &nbsp;
1356
+ return await connection.execute&lt;T&gt;(query.sql, bindings, options)
1357
+ } finally {
1358
+ if (connection) {
1359
+ try {
1360
+ await connection.close()
1361
+ } catch (err) {
1362
+ <span class="cstat-no" title="statement not covered" > console.error(err)</span>
1363
+ }
1364
+ }
1365
+ }
1366
+ }
1367
+ &nbsp;
1368
+ private getConnection = async (): Promise&lt;Connection&gt; =&gt; {
1369
+ //connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SID= ORCL)))"
1370
+ const connectString = `${this.config.host}:${this.config.port || 1521}/${
1371
+ this.config.database
1372
+ }`
1373
+ const attributes: ConnectionAttributes = {
1374
+ user: this.config.user,
1375
+ password: this.config.password,
1376
+ connectString,
1377
+ }
1378
+ return oracledb.getConnection(attributes)
1379
+ }
1380
+ &nbsp;
1381
+ async create(query: SqlQuery | string): Promise&lt;any[]&gt; {
1382
+ const response = await this.internalQuery&lt;any&gt;(getSqlQuery(query))
1383
+ return response.rows &amp;&amp; response.rows.length
1384
+ ? response.rows
1385
+ : [{ created: true }]
1386
+ }
1387
+ &nbsp;
1388
+ async read(query: SqlQuery | string): Promise&lt;any[]&gt; {
1389
+ const response = await this.internalQuery&lt;any&gt;(getSqlQuery(query))
1390
+ return response.rows ? response.rows : <span class="branch-1 cbranch-no" title="branch not covered" >[]</span>
1391
+ }
1392
+ &nbsp;
1393
+ async update(query: SqlQuery | string): Promise&lt;any[]&gt; {
1394
+ const response = await this.internalQuery(getSqlQuery(query))
1395
+ return response.rows &amp;&amp; response.rows.length
1396
+ ? response.rows
1397
+ : [{ updated: true }]
1398
+ }
1399
+ &nbsp;
1400
+ async delete(query: SqlQuery | string): Promise&lt;any[]&gt; {
1401
+ const response = await this.internalQuery(getSqlQuery(query))
1402
+ return response.rows &amp;&amp; response.rows.length
1403
+ ? response.rows
1404
+ : [{ deleted: true }]
1405
+ }
1406
+ &nbsp;
1407
+ async <span class="fstat-no" title="function not covered" >query(</span>json: QueryJson) {
1408
+ const operation = <span class="cstat-no" title="statement not covered" >this._operation(json)</span>
1409
+ const input = <span class="cstat-no" title="statement not covered" >this._query(json, { disableReturning: true })</span>
1410
+ <span class="cstat-no" title="statement not covered" > if (Array.isArray(input)) {</span>
1411
+ const responses = <span class="cstat-no" title="statement not covered" >[]</span>
1412
+ <span class="cstat-no" title="statement not covered" > for (let query of input) {</span>
1413
+ <span class="cstat-no" title="statement not covered" > responses.push(await this.internalQuery(query))</span>
1414
+ }
1415
+ <span class="cstat-no" title="statement not covered" > return responses</span>
1416
+ } else {
1417
+ // read the row to be deleted up front for the return
1418
+ let deletedRows
1419
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (operation === Operation.DELETE) {</span>
1420
+ const queryFn = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(q</span>uery: any) =&gt; <span class="cstat-no" title="statement not covered" >this.internalQuery(query)</span></span>
1421
+ <span class="cstat-no" title="statement not covered" > deletedRows = await this.getReturningRow(queryFn, json)</span>
1422
+ }
1423
+ &nbsp;
1424
+ // run the query
1425
+ const response = <span class="cstat-no" title="statement not covered" >await this.internalQuery(input)</span>
1426
+ &nbsp;
1427
+ // get the results or return the created / updated / deleted row
1428
+ <span class="cstat-no" title="statement not covered" > if (deletedRows?.rows?.length) {</span>
1429
+ <span class="cstat-no" title="statement not covered" > return deletedRows.rows</span>
1430
+ } else <span class="cstat-no" title="statement not covered" >if (response.rows?.length) {</span>
1431
+ <span class="cstat-no" title="statement not covered" > return response.rows</span>
1432
+ } else {
1433
+ // get the last row that was updated
1434
+ <span class="cstat-no" title="statement not covered" > if (</span>
1435
+ response.lastRowid &amp;&amp;
1436
+ json.endpoint?.entityId &amp;&amp;
1437
+ operation !== Operation.DELETE
1438
+ ) {
1439
+ const lastRow = <span class="cstat-no" title="statement not covered" >await this.internalQuery({</span>
1440
+ sql: `SELECT * FROM \"${json.endpoint.entityId}\" WHERE ROWID = '${response.lastRowid}'`,
1441
+ })
1442
+ <span class="cstat-no" title="statement not covered" > return lastRow.rows</span>
1443
+ } else {
1444
+ <span class="cstat-no" title="statement not covered" > return [{ [operation.toLowerCase()]: true }]</span>
1445
+ }
1446
+ }
1447
+ }
1448
+ }
1449
+ }
1450
+ &nbsp;
1451
+ export default {
1452
+ schema: SCHEMA,
1453
+ integration: OracleIntegration,
1454
+ }
1455
+ &nbsp;</pre></td></tr></table></pre>
1456
+
1457
+ <div class='push'></div><!-- for sticky footer -->
1458
+ </div><!-- /wrapper -->
1459
+ <div class='footer quiet pad2 space-top1 center small'>
1460
+ Code coverage generated by
1461
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1462
+ at Tue Nov 29 2022 11:32:32 GMT+0000 (Coordinated Universal Time)
1463
+ </div>
1464
+ <script src="../../prettify.js"></script>
1465
+ <script>
1466
+ window.onload = function () {
1467
+ prettyPrint();
1468
+ };
1469
+ </script>
1470
+ <script src="../../sorter.js"></script>
1471
+ <script src="../../block-navigation.js"></script>
1472
+ </body>
1473
+ </html>
1474
+