@budibase/server 0.9.185-alpha.1 → 0.9.185-alpha.13

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 (234) hide show
  1. package/Dockerfile +1 -1
  2. package/builder/assets/bb-space-man.5be51a45.svg +290 -0
  3. package/builder/assets/index.4a7c5636.css +1 -0
  4. package/builder/assets/index.dc495306.js +1317 -0
  5. package/builder/assets/vendor.470042a4.js +152 -0
  6. package/builder/assets/vendor.5e1fe644.css +1 -0
  7. package/builder/index.html +4 -4
  8. package/coverage/clover.xml +689 -598
  9. package/coverage/coverage-final.json +89 -87
  10. package/coverage/lcov-report/api/controllers/analytics.js.html +2 -2
  11. package/coverage/lcov-report/api/controllers/apikeys.js.html +2 -2
  12. package/coverage/lcov-report/api/controllers/application.js.html +43 -13
  13. package/coverage/lcov-report/api/controllers/auth.js.html +7 -7
  14. package/coverage/lcov-report/api/controllers/automation.js.html +3 -3
  15. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  18. package/coverage/lcov-report/api/controllers/datasource.js.html +129 -21
  19. package/coverage/lcov-report/api/controllers/dev.js.html +16 -7
  20. package/coverage/lcov-report/api/controllers/hosting.js.html +10 -10
  21. package/coverage/lcov-report/api/controllers/index.html +83 -83
  22. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/layout.js.html +3 -3
  24. package/coverage/lcov-report/api/controllers/metadata.js.html +3 -3
  25. package/coverage/lcov-report/api/controllers/permission.js.html +3 -3
  26. package/coverage/lcov-report/api/controllers/query.js.html +48 -210
  27. package/coverage/lcov-report/api/controllers/role.js.html +9 -9
  28. package/coverage/lcov-report/api/controllers/routing.js.html +3 -3
  29. package/coverage/lcov-report/api/controllers/row/external.js.html +2 -2
  30. package/coverage/lcov-report/api/controllers/row/index.html +10 -10
  31. package/coverage/lcov-report/api/controllers/row/index.js.html +2 -2
  32. package/coverage/lcov-report/api/controllers/row/internal.js.html +9 -9
  33. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +2 -2
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +2 -2
  35. package/coverage/lcov-report/api/controllers/screen.js.html +2 -2
  36. package/coverage/lcov-report/api/controllers/script.js.html +3 -3
  37. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.html +11 -11
  39. package/coverage/lcov-report/api/controllers/table/index.js.html +3 -3
  40. package/coverage/lcov-report/api/controllers/table/internal.js.html +2 -2
  41. package/coverage/lcov-report/api/controllers/table/utils.js.html +8 -8
  42. package/coverage/lcov-report/api/controllers/templates.js.html +4 -4
  43. package/coverage/lcov-report/api/controllers/user.js.html +33 -18
  44. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.html +9 -9
  46. package/coverage/lcov-report/api/controllers/view/index.js.html +5 -5
  47. package/coverage/lcov-report/api/controllers/view/utils.js.html +11 -11
  48. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -3
  49. package/coverage/lcov-report/api/controllers/webhook.js.html +4 -4
  50. package/coverage/lcov-report/api/index.html +1 -1
  51. package/coverage/lcov-report/api/index.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/dev.js.html +2 -2
  63. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.html +4 -4
  65. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/query.js.html +5 -2
  71. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/static.js.html +2 -2
  77. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  82. package/coverage/lcov-report/automations/actions.js.html +2 -2
  83. package/coverage/lcov-report/automations/automationUtils.js.html +3 -3
  84. package/coverage/lcov-report/automations/bullboard.js.html +71 -20
  85. package/coverage/lcov-report/automations/index.html +33 -48
  86. package/coverage/lcov-report/automations/index.js.html +2 -2
  87. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/discord.js.html +3 -3
  92. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -3
  94. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/index.html +14 -14
  96. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +3 -3
  98. package/coverage/lcov-report/automations/steps/queryRows.js.html +3 -3
  99. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/utils.js.html +7 -7
  104. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
  106. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
  107. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
  109. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
  110. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
  111. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
  112. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
  113. package/coverage/lcov-report/automations/triggers.js.html +22 -10
  114. package/coverage/lcov-report/automations/utils.js.html +42 -12
  115. package/coverage/lcov-report/constants/index.html +5 -5
  116. package/coverage/lcov-report/constants/index.js.html +25 -4
  117. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  118. package/coverage/lcov-report/constants/screens.js.html +1 -1
  119. package/coverage/lcov-report/db/client.js.html +2 -2
  120. package/coverage/lcov-report/db/inMemoryView.js.html +2 -2
  121. package/coverage/lcov-report/db/index.html +2 -2
  122. package/coverage/lcov-report/db/index.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +6 -6
  124. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  125. package/coverage/lcov-report/db/linkedRows/index.js.html +5 -5
  126. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +6 -6
  127. package/coverage/lcov-report/db/newid.js.html +1 -1
  128. package/coverage/lcov-report/db/utils.js.html +1 -1
  129. package/coverage/lcov-report/events/AutomationEmitter.js.html +6 -6
  130. package/coverage/lcov-report/events/index.html +6 -6
  131. package/coverage/lcov-report/events/index.js.html +1 -1
  132. package/coverage/lcov-report/events/utils.js.html +5 -5
  133. package/coverage/lcov-report/index.html +83 -68
  134. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  135. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  136. package/coverage/lcov-report/middleware/appInfo.js.html +2 -2
  137. package/coverage/lcov-report/middleware/authorized.js.html +4 -4
  138. package/coverage/lcov-report/middleware/builder.js.html +16 -7
  139. package/coverage/lcov-report/middleware/currentapp.js.html +6 -6
  140. package/coverage/lcov-report/middleware/index.html +21 -21
  141. package/coverage/lcov-report/middleware/joi-validator.js.html +2 -2
  142. package/coverage/lcov-report/middleware/resourceId.js.html +18 -18
  143. package/coverage/lcov-report/middleware/selfhost.js.html +2 -2
  144. package/coverage/lcov-report/middleware/usageQuota.js.html +4 -4
  145. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  146. package/coverage/lcov-report/{automations/thread.js.html → threads/automation.js.html} +83 -32
  147. package/coverage/lcov-report/threads/index.html +141 -0
  148. package/coverage/lcov-report/threads/index.js.html +260 -0
  149. package/coverage/lcov-report/threads/query.js.html +269 -0
  150. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  151. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  152. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  153. package/coverage/lcov-report/utilities/csvParser.js.html +2 -2
  154. package/coverage/lcov-report/utilities/global.js.html +2 -2
  155. package/coverage/lcov-report/utilities/index.html +21 -21
  156. package/coverage/lcov-report/utilities/index.js.html +12 -9
  157. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +30 -9
  158. package/coverage/lcov-report/utilities/queue/index.html +14 -14
  159. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  160. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/index.html +4 -4
  162. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +2 -2
  163. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +3 -3
  164. package/coverage/lcov-report/utilities/scriptRunner.js.html +16 -7
  165. package/coverage/lcov-report/utilities/security.js.html +3 -3
  166. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  167. package/coverage/lcov-report/utilities/users.js.html +1 -1
  168. package/coverage/lcov-report/utilities/workerRequests.js.html +5 -5
  169. package/coverage/lcov.info +1136 -972
  170. package/dist/api/controllers/application.js +11 -1
  171. package/dist/api/controllers/datasource.js +31 -7
  172. package/dist/api/controllers/deploy/index.js +2 -0
  173. package/dist/api/controllers/dev.js +4 -1
  174. package/dist/api/controllers/query.js +27 -57
  175. package/dist/api/controllers/user.js +10 -6
  176. package/dist/api/routes/query.js +1 -1
  177. package/dist/app.js +2 -11
  178. package/dist/automations/bullboard.js +37 -10
  179. package/dist/automations/triggers.js +7 -3
  180. package/dist/automations/utils.js +11 -2
  181. package/dist/constants/index.js +6 -0
  182. package/dist/integrations/base/IntegrationBase.js +2 -0
  183. package/dist/integrations/base/sql.js +36 -8
  184. package/dist/integrations/mysql.js +3 -1
  185. package/dist/integrations/utils.js +7 -1
  186. package/dist/middleware/builder.js +4 -1
  187. package/dist/package.json +7 -6
  188. package/dist/{automations/thread.js → threads/automation.js} +23 -7
  189. package/dist/threads/index.js +58 -0
  190. package/dist/threads/query.js +61 -0
  191. package/dist/tsconfig.tsbuildinfo +1 -1
  192. package/dist/utilities/index.js +1 -0
  193. package/dist/utilities/queue/inMemoryQueue.js +8 -0
  194. package/dist/utilities/scriptRunner.js +4 -1
  195. package/package.json +8 -7
  196. package/scripts/likeCypress.ts +33 -0
  197. package/src/api/controllers/application.js +11 -1
  198. package/src/api/controllers/datasource.js +45 -9
  199. package/src/api/controllers/deploy/index.js +2 -0
  200. package/src/api/controllers/dev.js +4 -1
  201. package/src/api/controllers/query.js +26 -80
  202. package/src/api/controllers/user.js +15 -10
  203. package/src/api/routes/query.js +1 -0
  204. package/src/app.ts +2 -10
  205. package/src/automations/bullboard.js +28 -11
  206. package/src/automations/tests/automation.spec.js +3 -4
  207. package/src/automations/triggers.js +7 -3
  208. package/src/automations/utils.js +12 -2
  209. package/src/constants/index.js +7 -0
  210. package/src/integrations/airtable.ts +2 -1
  211. package/src/integrations/arangodb.ts +2 -1
  212. package/src/integrations/base/IntegrationBase.ts +6 -0
  213. package/src/integrations/base/datasourcePlus.ts +2 -1
  214. package/src/integrations/base/sql.ts +38 -9
  215. package/src/integrations/couchdb.ts +2 -1
  216. package/src/integrations/dynamodb.ts +2 -1
  217. package/src/integrations/elasticsearch.ts +2 -1
  218. package/src/integrations/mongodb.ts +2 -1
  219. package/src/integrations/mysql.ts +1 -1
  220. package/src/integrations/rest.ts +2 -1
  221. package/src/integrations/s3.ts +2 -1
  222. package/src/integrations/utils.ts +6 -1
  223. package/src/middleware/builder.js +4 -1
  224. package/src/{automations/thread.js → threads/automation.js} +24 -7
  225. package/src/threads/index.js +60 -0
  226. package/src/threads/query.js +63 -0
  227. package/src/utilities/index.js +1 -0
  228. package/src/utilities/queue/inMemoryQueue.js +7 -0
  229. package/src/utilities/scriptRunner.js +4 -1
  230. package/tsconfig.json +1 -1
  231. package/builder/assets/index.4feb6e69.js +0 -201
  232. package/builder/assets/index.a79ec0ef.css +0 -29
  233. package/builder/assets/vendor.278a305c.js +0 -9
  234. package/builder/assets/vendor.d75d5eb7.css +0 -1
@@ -30,7 +30,7 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">30.77% </span>
33
+ <span class="strong">30.76% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>4/13</span>
36
36
  </div>
@@ -181,7 +181,7 @@ exports.endUserPing = <span class="fstat-no" title="function not covered" >as</s
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
184
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
184
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>
@@ -205,7 +205,7 @@ exports.update = async function (ctx) {
205
205
  &nbsp;
206
206
  try {
207
207
  const mainDoc = await getBuilderMainDoc()
208
- <span class="missing-if-branch" title="else path not taken" >E</span>if (mainDoc.apiKeys == null) {
208
+ if (mainDoc.apiKeys == null) {
209
209
  mainDoc.apiKeys = {}
210
210
  }
211
211
  mainDoc.apiKeys[key] = value
@@ -226,7 +226,7 @@ exports.update = async function (ctx) {
226
226
  <div class='footer quiet pad2 space-top1 center small'>
227
227
  Code coverage generated by
228
228
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
229
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
229
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
230
230
  </div>
231
231
  </div>
232
232
  <script src="../../prettify.js"></script>
@@ -23,16 +23,16 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">78.09% </span>
26
+ <span class="strong">78.49% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>139/178</span>
28
+ <span class='fraction'>146/186</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">57.35% </span>
33
+ <span class="strong">56.94% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>39/68</span>
35
+ <span class='fraction'>41/72</span>
36
36
  </div>
37
37
 
38
38
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">78.98% </span>
47
+ <span class="strong">79.34% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>139/176</span>
49
+ <span class='fraction'>146/184</span>
50
50
  </div>
51
51
 
52
52
 
@@ -464,7 +464,17 @@
464
464
  <a name='L405'></a><a href='#L405'>405</a>
465
465
  <a name='L406'></a><a href='#L406'>406</a>
466
466
  <a name='L407'></a><a href='#L407'>407</a>
467
- <a name='L408'></a><a href='#L408'>408</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
467
+ <a name='L408'></a><a href='#L408'>408</a>
468
+ <a name='L409'></a><a href='#L409'>409</a>
469
+ <a name='L410'></a><a href='#L410'>410</a>
470
+ <a name='L411'></a><a href='#L411'>411</a>
471
+ <a name='L412'></a><a href='#L412'>412</a>
472
+ <a name='L413'></a><a href='#L413'>413</a>
473
+ <a name='L414'></a><a href='#L414'>414</a>
474
+ <a name='L415'></a><a href='#L415'>415</a>
475
+ <a name='L416'></a><a href='#L416'>416</a>
476
+ <a name='L417'></a><a href='#L417'>417</a>
477
+ <a name='L418'></a><a href='#L418'>418</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
468
478
  <span class="cline-any cline-yes">33x</span>
469
479
  <span class="cline-any cline-yes">33x</span>
470
480
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -511,6 +521,8 @@
511
521
  <span class="cline-any cline-yes">33x</span>
512
522
  <span class="cline-any cline-yes">33x</span>
513
523
  <span class="cline-any cline-yes">33x</span>
524
+ <span class="cline-any cline-yes">33x</span>
525
+ <span class="cline-any cline-yes">33x</span>
514
526
  <span class="cline-any cline-neutral">&nbsp;</span>
515
527
  <span class="cline-any cline-yes">33x</span>
516
528
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -722,6 +734,7 @@
722
734
  <span class="cline-any cline-neutral">&nbsp;</span>
723
735
  <span class="cline-any cline-yes">178x</span>
724
736
  <span class="cline-any cline-yes">178x</span>
737
+ <span class="cline-any cline-yes">178x</span>
725
738
  <span class="cline-any cline-neutral">&nbsp;</span>
726
739
  <span class="cline-any cline-neutral">&nbsp;</span>
727
740
  <span class="cline-any cline-yes">33x</span>
@@ -783,8 +796,12 @@
783
796
  <span class="cline-any cline-neutral">&nbsp;</span>
784
797
  <span class="cline-any cline-neutral">&nbsp;</span>
785
798
  <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-yes">11x</span>
800
+ <span class="cline-any cline-no">&nbsp;</span>
801
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
802
  <span class="cline-any cline-neutral">&nbsp;</span>
787
803
  <span class="cline-any cline-yes">11x</span>
804
+ <span class="cline-any cline-yes">11x</span>
788
805
  <span class="cline-any cline-neutral">&nbsp;</span>
789
806
  <span class="cline-any cline-yes">11x</span>
790
807
  <span class="cline-any cline-yes">11x</span>
@@ -855,6 +872,9 @@
855
872
  <span class="cline-any cline-neutral">&nbsp;</span>
856
873
  <span class="cline-any cline-yes">5x</span>
857
874
  <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-yes">5x</span>
876
+ <span class="cline-any cline-yes">5x</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
878
  <span class="cline-any cline-neutral">&nbsp;</span>
859
879
  <span class="cline-any cline-yes">33x</span>
860
880
  <span class="cline-any cline-yes">178x</span>
@@ -918,6 +938,8 @@ const {
918
938
  } = require("../../utilities/fileSystem/clientLibrary")
919
939
  const { getTenantId, isMultiTenant } = require("@budibase/auth/tenancy")
920
940
  const { syncGlobalUsers } = require("./user")
941
+ const { app: appCache } = require("@budibase/auth/cache")
942
+ const { cleanupAutomations } = require("../../automations/utils")
921
943
  &nbsp;
922
944
  const URL_REGEX_SLASH = /\/|\\/g
923
945
  &nbsp;
@@ -1019,10 +1041,10 @@ exports.fetch = async ctx =&gt; {
1019
1041
  const apps = await getAllApps(CouchDB, { dev, all })
1020
1042
  &nbsp;
1021
1043
  // get the locks for all the dev apps
1022
- <span class="missing-if-branch" title="else path not taken" >E</span>if (dev || <span class="branch-1 cbranch-no" title="branch not covered" >all)</span> {
1044
+ if (dev || <span class="branch-1 cbranch-no" title="branch not covered" >all)</span> {
1023
1045
  const locks = await getAllLocks()
1024
1046
  for (let app of apps) {
1025
- <span class="missing-if-branch" title="else path not taken" >E</span>if (app.status !== "development") {
1047
+ if (app.status !== "development") {
1026
1048
  continue
1027
1049
  }
1028
1050
  const lock = <span class="cstat-no" title="statement not covered" >locks.find(<span class="fstat-no" title="function not covered" >lo</span>ck =&gt; <span class="cstat-no" title="statement not covered" >lock.appId === app.appId)</span></span>
@@ -1118,7 +1140,7 @@ exports.create = async ctx =&gt; {
1118
1140
  &nbsp;
1119
1141
  // Only create the default home screens and layout if we aren't importing
1120
1142
  // an app
1121
- <span class="missing-if-branch" title="else path not taken" >E</span>if (useTemplate !== "true") {
1143
+ if (useTemplate !== "true") {
1122
1144
  await createEmptyAppPackage(ctx, newApplication)
1123
1145
  }
1124
1146
  &nbsp;
@@ -1127,6 +1149,7 @@ exports.create = async ctx =&gt; {
1127
1149
  await createApp(appId)
1128
1150
  }
1129
1151
  &nbsp;
1152
+ await appCache.invalidateAppMetadata(appId, newApplication)
1130
1153
  ctx.status = 200
1131
1154
  ctx.body = newApplication
1132
1155
  }
@@ -1190,8 +1213,12 @@ exports.delete = async ctx =&gt; {
1190
1213
  if (!env.isTest() &amp;&amp; !ctx.query.unpublish) {
1191
1214
  await deleteApp(ctx.params.appId)
1192
1215
  }
1216
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (ctx.query &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >ctx.query.unpublish)</span> {
1217
+ <span class="cstat-no" title="statement not covered" > await cleanupAutomations(ctx.params.appId)</span>
1218
+ }
1193
1219
  // make sure the app/role doesn't stick around after the app has been deleted
1194
1220
  await removeAppFromUserRoles(ctx, ctx.params.appId)
1221
+ await appCache.invalidateAppMetadata(ctx.params.appId)
1195
1222
  &nbsp;
1196
1223
  ctx.status = 200
1197
1224
  ctx.body = result
@@ -1252,7 +1279,7 @@ const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1252
1279
  const application = await db.get(DocumentTypes.APP_METADATA)
1253
1280
  &nbsp;
1254
1281
  const newAppPackage = { ...application, ...appPackage, url }
1255
- <span class="missing-if-branch" title="else path not taken" >E</span>if (appPackage._rev !== application._rev) {
1282
+ if (appPackage._rev !== application._rev) {
1256
1283
  newAppPackage._rev = application._rev
1257
1284
  }
1258
1285
  &nbsp;
@@ -1260,7 +1287,10 @@ const updateAppPackage = async (ctx, appPackage, appId) =&gt; {
1260
1287
  // Redis, shouldn't ever store it
1261
1288
  delete newAppPackage.lockedBy
1262
1289
  &nbsp;
1263
- return await db.put(newAppPackage)
1290
+ const response = await db.put(newAppPackage)
1291
+ // remove any cached metadata, so that it will be updated
1292
+ await appCache.invalidateAppMetadata(appId)
1293
+ return response
1264
1294
  }
1265
1295
  &nbsp;
1266
1296
  const createEmptyAppPackage = async (ctx, app) =&gt; {
@@ -1285,7 +1315,7 @@ const createEmptyAppPackage = async (ctx, app) =&gt; {
1285
1315
  <div class='footer quiet pad2 space-top1 center small'>
1286
1316
  Code coverage generated by
1287
1317
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1288
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
1318
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
1289
1319
  </div>
1290
1320
  </div>
1291
1321
  <script src="../../prettify.js"></script>
@@ -23,7 +23,7 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">85.19% </span>
26
+ <span class="strong">85.18% </span>
27
27
  <span class="quiet">Statements</span>
28
28
  <span class='fraction'>23/27</span>
29
29
  </div>
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">85.19% </span>
47
+ <span class="strong">85.18% </span>
48
48
  <span class="quiet">Lines</span>
49
49
  <span class='fraction'>23/27</span>
50
50
  </div>
@@ -186,7 +186,7 @@ exports.fetchSelf = async ctx =&gt; {
186
186
  // this shouldn't be returned by the app self
187
187
  delete user.roles
188
188
  &nbsp;
189
- <span class="missing-if-branch" title="else path not taken" >E</span>if (appId) {
189
+ if (appId) {
190
190
  const db = new CouchDB(appId)
191
191
  // remove the full roles structure
192
192
  delete user.roles
@@ -205,7 +205,7 @@ exports.fetchSelf = async ctx =&gt; {
205
205
  <span class="cstat-no" title="statement not covered" > response = {}</span>
206
206
  }
207
207
  // user has a role of some sort, return them
208
- else <span class="missing-if-branch" title="else path not taken" >E</span>if (err.status === 404) {
208
+ else if (err.status === 404) {
209
209
  const metadata = {
210
210
  ...user,
211
211
  _id: userId,
@@ -213,12 +213,12 @@ exports.fetchSelf = async ctx =&gt; {
213
213
  const dbResp = await db.put(metadata)
214
214
  user._rev = dbResp.rev
215
215
  response = user
216
- } else {
216
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
217
217
  <span class="cstat-no" title="statement not covered" > response = user</span>
218
218
  }
219
219
  ctx.body = response
220
220
  }
221
- } else {
221
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
222
222
  <span class="cstat-no" title="statement not covered" > ctx.body = user</span>
223
223
  }
224
224
  }
@@ -229,7 +229,7 @@ exports.fetchSelf = async ctx =&gt; {
229
229
  <div class='footer quiet pad2 space-top1 center small'>
230
230
  Code coverage generated by
231
231
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
232
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
232
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
233
233
  </div>
234
234
  </div>
235
235
  <script src="../../prettify.js"></script>
@@ -30,14 +30,14 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">71.88% </span>
33
+ <span class="strong">71.87% </span>
34
34
  <span class="quiet">Branches</span>
35
35
  <span class='fraction'>23/32</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">92.86% </span>
40
+ <span class="strong">92.85% </span>
41
41
  <span class="quiet">Functions</span>
42
42
  <span class='fraction'>13/14</span>
43
43
  </div>
@@ -736,7 +736,7 @@ exports.test = async function (ctx) {
736
736
  <div class='footer quiet pad2 space-top1 center small'>
737
737
  Code coverage generated by
738
738
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
739
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
739
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
740
740
  </div>
741
741
  </div>
742
742
  <script src="../../prettify.js"></script>
@@ -91,7 +91,7 @@ exports.exportAppDump = async function (ctx) {
91
91
  <div class='footer quiet pad2 space-top1 center small'>
92
92
  Code coverage generated by
93
93
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
94
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
94
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
95
95
  </div>
96
96
  </div>
97
97
  <script src="../../prettify.js"></script>
@@ -397,7 +397,7 @@ exports.importApps = <span class="fstat-no" title="function not covered" >as</sp
397
397
  <div class='footer quiet pad2 space-top1 center small'>
398
398
  Code coverage generated by
399
399
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
400
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
400
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
401
401
  </div>
402
402
  </div>
403
403
  <script src="../../prettify.js"></script>
@@ -114,11 +114,11 @@
114
114
  <span class="cline-any cline-yes">1x</span>
115
115
  <span class="cline-any cline-yes">1x</span>
116
116
  <span class="cline-any cline-yes">1x</span>
117
- <span class="cline-any cline-yes">45x</span>
117
+ <span class="cline-any cline-yes">46x</span>
118
118
  <span class="cline-any cline-yes">1x</span>
119
119
  <span class="cline-any cline-neutral">&nbsp;</span>
120
- <span class="cline-any cline-yes">44x</span>
121
- <span class="cline-any cline-yes">44x</span>
120
+ <span class="cline-any cline-yes">45x</span>
121
+ <span class="cline-any cline-yes">45x</span>
122
122
  <span class="cline-any cline-neutral">&nbsp;</span>
123
123
  <span class="cline-any cline-neutral">&nbsp;</span>
124
124
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -169,7 +169,7 @@ exports.fetchAppComponentDefinitions = async function (ctx) {
169
169
  <div class='footer quiet pad2 space-top1 center small'>
170
170
  Code coverage generated by
171
171
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
172
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
172
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
173
173
  </div>
174
174
  </div>
175
175
  <script src="../../prettify.js"></script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">50% </span>
26
+ <span class="strong">44.44% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>48/96</span>
28
+ <span class='fraction'>48/108</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">25% </span>
33
+ <span class="strong">19.44% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>7/28</span>
35
+ <span class='fraction'>7/36</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">57.14% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>8/14</span>
42
+ <span class='fraction'>8/16</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">48.94% </span>
47
+ <span class="strong">43.92% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>46/94</span>
49
+ <span class='fraction'>47/107</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line medium'></div>
58
+ <div class='status-line low'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -236,7 +236,43 @@
236
236
  <a name='L177'></a><a href='#L177'>177</a>
237
237
  <a name='L178'></a><a href='#L178'>178</a>
238
238
  <a name='L179'></a><a href='#L179'>179</a>
239
- <a name='L180'></a><a href='#L180'>180</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
239
+ <a name='L180'></a><a href='#L180'>180</a>
240
+ <a name='L181'></a><a href='#L181'>181</a>
241
+ <a name='L182'></a><a href='#L182'>182</a>
242
+ <a name='L183'></a><a href='#L183'>183</a>
243
+ <a name='L184'></a><a href='#L184'>184</a>
244
+ <a name='L185'></a><a href='#L185'>185</a>
245
+ <a name='L186'></a><a href='#L186'>186</a>
246
+ <a name='L187'></a><a href='#L187'>187</a>
247
+ <a name='L188'></a><a href='#L188'>188</a>
248
+ <a name='L189'></a><a href='#L189'>189</a>
249
+ <a name='L190'></a><a href='#L190'>190</a>
250
+ <a name='L191'></a><a href='#L191'>191</a>
251
+ <a name='L192'></a><a href='#L192'>192</a>
252
+ <a name='L193'></a><a href='#L193'>193</a>
253
+ <a name='L194'></a><a href='#L194'>194</a>
254
+ <a name='L195'></a><a href='#L195'>195</a>
255
+ <a name='L196'></a><a href='#L196'>196</a>
256
+ <a name='L197'></a><a href='#L197'>197</a>
257
+ <a name='L198'></a><a href='#L198'>198</a>
258
+ <a name='L199'></a><a href='#L199'>199</a>
259
+ <a name='L200'></a><a href='#L200'>200</a>
260
+ <a name='L201'></a><a href='#L201'>201</a>
261
+ <a name='L202'></a><a href='#L202'>202</a>
262
+ <a name='L203'></a><a href='#L203'>203</a>
263
+ <a name='L204'></a><a href='#L204'>204</a>
264
+ <a name='L205'></a><a href='#L205'>205</a>
265
+ <a name='L206'></a><a href='#L206'>206</a>
266
+ <a name='L207'></a><a href='#L207'>207</a>
267
+ <a name='L208'></a><a href='#L208'>208</a>
268
+ <a name='L209'></a><a href='#L209'>209</a>
269
+ <a name='L210'></a><a href='#L210'>210</a>
270
+ <a name='L211'></a><a href='#L211'>211</a>
271
+ <a name='L212'></a><a href='#L212'>212</a>
272
+ <a name='L213'></a><a href='#L213'>213</a>
273
+ <a name='L214'></a><a href='#L214'>214</a>
274
+ <a name='L215'></a><a href='#L215'>215</a>
275
+ <a name='L216'></a><a href='#L216'>216</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
240
276
  <span class="cline-any cline-neutral">&nbsp;</span>
241
277
  <span class="cline-any cline-neutral">&nbsp;</span>
242
278
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -358,9 +394,17 @@
358
394
  <span class="cline-any cline-neutral">&nbsp;</span>
359
395
  <span class="cline-any cline-neutral">&nbsp;</span>
360
396
  <span class="cline-any cline-yes">1x</span>
397
+ <span class="cline-any cline-neutral">&nbsp;</span>
398
+ <span class="cline-any cline-neutral">&nbsp;</span>
399
+ <span class="cline-any cline-yes">1x</span>
361
400
  <span class="cline-any cline-yes">1x</span>
362
401
  <span class="cline-any cline-neutral">&nbsp;</span>
363
402
  <span class="cline-any cline-neutral">&nbsp;</span>
403
+ <span class="cline-any cline-neutral">&nbsp;</span>
404
+ <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-neutral">&nbsp;</span>
406
+ <span class="cline-any cline-neutral">&nbsp;</span>
407
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
408
  <span class="cline-any cline-yes">1x</span>
365
409
  <span class="cline-any cline-neutral">&nbsp;</span>
366
410
  <span class="cline-any cline-yes">1x</span>
@@ -382,6 +426,23 @@
382
426
  <span class="cline-any cline-neutral">&nbsp;</span>
383
427
  <span class="cline-any cline-neutral">&nbsp;</span>
384
428
  <span class="cline-any cline-neutral">&nbsp;</span>
429
+ <span class="cline-any cline-neutral">&nbsp;</span>
430
+ <span class="cline-any cline-no">&nbsp;</span>
431
+ <span class="cline-any cline-no">&nbsp;</span>
432
+ <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-neutral">&nbsp;</span>
434
+ <span class="cline-any cline-neutral">&nbsp;</span>
435
+ <span class="cline-any cline-neutral">&nbsp;</span>
436
+ <span class="cline-any cline-no">&nbsp;</span>
437
+ <span class="cline-any cline-no">&nbsp;</span>
438
+ <span class="cline-any cline-neutral">&nbsp;</span>
439
+ <span class="cline-any cline-no">&nbsp;</span>
440
+ <span class="cline-any cline-no">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-no">&nbsp;</span>
443
+ <span class="cline-any cline-no">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
445
+ <span class="cline-any cline-neutral">&nbsp;</span>
385
446
  <span class="cline-any cline-yes">33x</span>
386
447
  <span class="cline-any cline-no">&nbsp;</span>
387
448
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -413,6 +474,17 @@
413
474
  <span class="cline-any cline-neutral">&nbsp;</span>
414
475
  <span class="cline-any cline-neutral">&nbsp;</span>
415
476
  <span class="cline-any cline-neutral">&nbsp;</span>
477
+ <span class="cline-any cline-neutral">&nbsp;</span>
478
+ <span class="cline-any cline-neutral">&nbsp;</span>
479
+ <span class="cline-any cline-no">&nbsp;</span>
480
+ <span class="cline-any cline-no">&nbsp;</span>
481
+ <span class="cline-any cline-no">&nbsp;</span>
482
+ <span class="cline-any cline-neutral">&nbsp;</span>
483
+ <span class="cline-any cline-neutral">&nbsp;</span>
484
+ <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-neutral">&nbsp;</span>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
416
488
  <span class="cline-any cline-no">&nbsp;</span>
417
489
  <span class="cline-any cline-neutral">&nbsp;</span>
418
490
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../db")
@@ -424,7 +496,7 @@ const {
424
496
  BudibaseInternalDB,
425
497
  getTableParams,
426
498
  } = require("../../db/utils")
427
- const { BuildSchemaErrors } = require("../../constants")
499
+ const { BuildSchemaErrors, InvalidColumns } = require("../../constants")
428
500
  const { integrations } = require("../../integrations")
429
501
  const { getDatasourceAndQuery } = require("./row/utils")
430
502
  &nbsp;
@@ -518,7 +590,7 @@ exports.save = async function (ctx) {
518
590
  datasource._rev = dbResp.rev
519
591
  &nbsp;
520
592
  // Drain connection pools when configuration is changed
521
- <span class="missing-if-branch" title="else path not taken" >E</span>if (datasource.source) {
593
+ if (datasource.source) {
522
594
  const source = integrations[datasource.source]
523
595
  <span class="missing-if-branch" title="if path not taken" >I</span>if (source &amp;&amp; source.pool) {
524
596
  <span class="cstat-no" title="statement not covered" > await source.pool.end()</span>
@@ -536,8 +608,16 @@ exports.destroy = async function (ctx) {
536
608
  const db = new CouchDB(ctx.appId)
537
609
  &nbsp;
538
610
  // Delete all queries for the datasource
539
- const rows = await db.allDocs(getQueryParams(ctx.params.datasourceId, null))
540
- await db.bulkDocs(rows.rows.map(row =&gt; ({ ...row.doc, _deleted: true })))
611
+ const queries = await db.allDocs(
612
+ getQueryParams(ctx.params.datasourceId, null)
613
+ )
614
+ await db.bulkDocs(
615
+ queries.rows.map(row =&gt; ({
616
+ _id: row.id,
617
+ _rev: row.value.rev,
618
+ _deleted: true,
619
+ }))
620
+ )
541
621
  &nbsp;
542
622
  // delete the datasource
543
623
  await db.remove(ctx.params.datasourceId, ctx.params.revId)
@@ -561,6 +641,23 @@ exports.query = async function (ctx) {
561
641
  }
562
642
  }
563
643
  &nbsp;
644
+ function <span class="fstat-no" title="function not covered" >getErrorTables(</span>errors, errorType) {
645
+ <span class="cstat-no" title="statement not covered" > return Object.entries(errors)</span>
646
+ .filter(<span class="fstat-no" title="function not covered" >en</span>try =&gt; <span class="cstat-no" title="statement not covered" >entry[1] === errorType)</span>
647
+ .map(<span class="fstat-no" title="function not covered" >([</span>name]) =&gt; <span class="cstat-no" title="statement not covered" >name)</span>
648
+ }
649
+ &nbsp;
650
+ function <span class="fstat-no" title="function not covered" >updateError(</span>error, newError, tables) {
651
+ <span class="cstat-no" title="statement not covered" > if (!error) {</span>
652
+ <span class="cstat-no" title="statement not covered" > error = ""</span>
653
+ }
654
+ <span class="cstat-no" title="statement not covered" > if (error.length &gt; 0) {</span>
655
+ <span class="cstat-no" title="statement not covered" > error += "\n"</span>
656
+ }
657
+ <span class="cstat-no" title="statement not covered" > error += `${newError} ${tables.join(", ")}`</span>
658
+ <span class="cstat-no" title="statement not covered" > return error</span>
659
+ }
660
+ &nbsp;
564
661
  const buildSchemaHelper = <span class="fstat-no" title="function not covered" >as</span>ync datasource =&gt; {
565
662
  const Connector = <span class="cstat-no" title="statement not covered" >integrations[datasource.source]</span>
566
663
  &nbsp;
@@ -585,12 +682,23 @@ const buildSchemaHelper = <span class="fstat-no" title="function not covered" >a
585
682
  const errors = <span class="cstat-no" title="statement not covered" >connector.schemaErrors</span>
586
683
  let error = <span class="cstat-no" title="statement not covered" >null</span>
587
684
  <span class="cstat-no" title="statement not covered" > if (errors &amp;&amp; Object.keys(errors).length &gt; 0) {</span>
588
- const noKeyTables = <span class="cstat-no" title="statement not covered" >Object.entries(errors)</span>
589
- .filter(<span class="fstat-no" title="function not covered" >en</span>try =&gt; <span class="cstat-no" title="statement not covered" >entry[1] === BuildSchemaErrors.NO_KEY)</span>
590
- .map(<span class="fstat-no" title="function not covered" >([</span>name]) =&gt; <span class="cstat-no" title="statement not covered" >name)</span>
591
- <span class="cstat-no" title="statement not covered" > error = `No primary key constraint found for the following: ${noKeyTables.join(</span>
592
- ", "
593
- )}`
685
+ const noKey = <span class="cstat-no" title="statement not covered" >getErrorTables(errors, BuildSchemaErrors.NO_KEY)</span>
686
+ const invalidCol = <span class="cstat-no" title="statement not covered" >getErrorTables(errors, BuildSchemaErrors.INVALID_COLUMN)</span>
687
+ <span class="cstat-no" title="statement not covered" > if (noKey.length) {</span>
688
+ <span class="cstat-no" title="statement not covered" > error = updateError(</span>
689
+ error,
690
+ "No primary key constraint found for the following:",
691
+ noKey
692
+ )
693
+ }
694
+ <span class="cstat-no" title="statement not covered" > if (invalidCol.length) {</span>
695
+ const invalidCols = <span class="cstat-no" title="statement not covered" >Object.values(InvalidColumns).join(", ")</span>
696
+ <span class="cstat-no" title="statement not covered" > error = updateError(</span>
697
+ error,
698
+ `Cannot use columns ${invalidCols} found in following:`,
699
+ invalidCol
700
+ )
701
+ }
594
702
  }
595
703
  <span class="cstat-no" title="statement not covered" > return { tables: connector.tables, error }</span>
596
704
  }
@@ -601,7 +709,7 @@ const buildSchemaHelper = <span class="fstat-no" title="function not covered" >a
601
709
  <div class='footer quiet pad2 space-top1 center small'>
602
710
  Code coverage generated by
603
711
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
604
- at Mon Nov 15 2021 14:40:16 GMT+0000 (Coordinated Universal Time)
712
+ at Mon Nov 22 2021 11:11:02 GMT+0000 (Coordinated Universal Time)
605
713
  </div>
606
714
  </div>
607
715
  <script src="../../prettify.js"></script>