@budibase/server 1.0.49-alpha.0 → 1.0.49-alpha.1

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 (203) hide show
  1. package/builder/assets/{index.dd9e386f.css → index.ba78c49d.css} +1 -1
  2. package/builder/assets/{index.8184eed9.js → index.ed1cf508.js} +205 -204
  3. package/builder/assets/{vendor.3bd2f661.js → vendor.d526bfe8.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +844 -680
  6. package/coverage/coverage-final.json +12 -10
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +1 -1
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/index.html +40 -25
  29. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internal.js.html +60 -123
  31. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +35 -11
  32. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +551 -0
  33. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +629 -0
  37. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.html +45 -30
  39. package/coverage/lcov-report/api/controllers/table/index.js.html +11 -53
  40. package/coverage/lcov-report/api/controllers/table/internal.js.html +25 -7
  41. package/coverage/lcov-report/api/controllers/table/utils.js.html +136 -16
  42. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  49. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  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 +1 -1
  63. package/coverage/lcov-report/api/routes/index.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  81. package/coverage/lcov-report/automations/actions.js.html +1 -1
  82. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  83. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  84. package/coverage/lcov-report/automations/index.html +1 -1
  85. package/coverage/lcov-report/automations/index.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/index.html +1 -1
  95. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  113. package/coverage/lcov-report/automations/utils.js.html +1 -1
  114. package/coverage/lcov-report/constants/index.html +5 -5
  115. package/coverage/lcov-report/constants/index.js.html +19 -4
  116. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  117. package/coverage/lcov-report/constants/screens.js.html +1 -1
  118. package/coverage/lcov-report/db/client.js.html +1 -1
  119. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  120. package/coverage/lcov-report/db/index.html +1 -1
  121. package/coverage/lcov-report/db/index.js.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/index.html +10 -10
  124. package/coverage/lcov-report/db/linkedRows/index.js.html +10 -13
  125. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  126. package/coverage/lcov-report/db/newid.js.html +1 -1
  127. package/coverage/lcov-report/db/utils.js.html +5 -5
  128. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  129. package/coverage/lcov-report/events/index.html +1 -1
  130. package/coverage/lcov-report/events/index.js.html +1 -1
  131. package/coverage/lcov-report/events/utils.js.html +1 -1
  132. package/coverage/lcov-report/index.html +44 -44
  133. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  134. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  135. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  136. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  137. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  138. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  139. package/coverage/lcov-report/middleware/index.html +1 -1
  140. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  141. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  142. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  143. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  144. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  145. package/coverage/lcov-report/migrations/usageQuotas/index.html +1 -1
  146. package/coverage/lcov-report/migrations/usageQuotas/index.js.html +1 -1
  147. package/coverage/lcov-report/migrations/usageQuotas/syncApps.js.html +1 -1
  148. package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +1 -1
  149. package/coverage/lcov-report/threads/automation.js.html +1 -1
  150. package/coverage/lcov-report/threads/index.html +1 -1
  151. package/coverage/lcov-report/threads/index.js.html +1 -1
  152. package/coverage/lcov-report/threads/query.js.html +1 -1
  153. package/coverage/lcov-report/threads/utils.js.html +1 -1
  154. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  155. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  156. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  157. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  158. package/coverage/lcov-report/utilities/global.js.html +1 -1
  159. package/coverage/lcov-report/utilities/index.html +1 -1
  160. package/coverage/lcov-report/utilities/index.js.html +1 -1
  161. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  162. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  163. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  164. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  165. package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -27
  166. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +65 -29
  167. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +73 -25
  168. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  169. package/coverage/lcov-report/utilities/security.js.html +1 -1
  170. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  171. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  174. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  175. package/coverage/lcov-report/utilities/users.js.html +1 -1
  176. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  177. package/coverage/lcov.info +1509 -1173
  178. package/dist/api/controllers/row/internal.js +30 -53
  179. package/dist/api/controllers/row/internalSearch.js +12 -4
  180. package/dist/api/controllers/row/staticFormula.js +147 -0
  181. package/dist/api/controllers/table/bulkFormula.js +160 -0
  182. package/dist/api/controllers/table/index.js +3 -6
  183. package/dist/api/controllers/table/internal.js +7 -0
  184. package/dist/api/controllers/table/utils.js +32 -10
  185. package/dist/constants/index.js +4 -0
  186. package/dist/db/linkedRows/index.js +4 -5
  187. package/dist/package.json +4 -4
  188. package/dist/tsconfig.tsbuildinfo +1 -1
  189. package/dist/utilities/rowProcessor/index.js +18 -11
  190. package/dist/utilities/rowProcessor/utils.js +14 -4
  191. package/package.json +5 -5
  192. package/src/api/controllers/row/internal.js +29 -50
  193. package/src/api/controllers/row/internalSearch.js +12 -4
  194. package/src/api/controllers/row/staticFormula.js +157 -0
  195. package/src/api/controllers/table/bulkFormula.js +183 -0
  196. package/src/api/controllers/table/index.js +3 -17
  197. package/src/api/controllers/table/internal.js +7 -1
  198. package/src/api/controllers/table/utils.js +48 -8
  199. package/src/constants/index.js +5 -0
  200. package/src/db/linkedRows/index.js +4 -5
  201. package/src/definitions/common.ts +3 -0
  202. package/src/utilities/rowProcessor/index.js +24 -12
  203. package/src/utilities/rowProcessor/utils.js +23 -7
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">59.52% </span>
26
+ <span class="strong">57.69% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>75/126</span>
28
+ <span class='fraction'>75/130</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">45.74% </span>
33
+ <span class="strong">43% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>43/94</span>
35
+ <span class='fraction'>43/100</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">52.63% </span>
40
+ <span class="strong">50% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>10/19</span>
42
+ <span class='fraction'>10/20</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">61.66% </span>
47
+ <span class="strong">60.16% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>74/120</span>
49
+ <span class='fraction'>74/123</span>
50
50
  </div>
51
51
 
52
52
 
@@ -398,7 +398,19 @@
398
398
  <a name='L339'></a><a href='#L339'>339</a>
399
399
  <a name='L340'></a><a href='#L340'>340</a>
400
400
  <a name='L341'></a><a href='#L341'>341</a>
401
- <a name='L342'></a><a href='#L342'>342</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">37x</span>
401
+ <a name='L342'></a><a href='#L342'>342</a>
402
+ <a name='L343'></a><a href='#L343'>343</a>
403
+ <a name='L344'></a><a href='#L344'>344</a>
404
+ <a name='L345'></a><a href='#L345'>345</a>
405
+ <a name='L346'></a><a href='#L346'>346</a>
406
+ <a name='L347'></a><a href='#L347'>347</a>
407
+ <a name='L348'></a><a href='#L348'>348</a>
408
+ <a name='L349'></a><a href='#L349'>349</a>
409
+ <a name='L350'></a><a href='#L350'>350</a>
410
+ <a name='L351'></a><a href='#L351'>351</a>
411
+ <a name='L352'></a><a href='#L352'>352</a>
412
+ <a name='L353'></a><a href='#L353'>353</a>
413
+ <a name='L354'></a><a href='#L354'>354</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">37x</span>
402
414
  <span class="cline-any cline-yes">37x</span>
403
415
  <span class="cline-any cline-yes">37x</span>
404
416
  <span class="cline-any cline-yes">37x</span>
@@ -580,6 +592,8 @@
580
592
  <span class="cline-any cline-neutral">&nbsp;</span>
581
593
  <span class="cline-any cline-yes">37x</span>
582
594
  <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-yes">37x</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
597
  <span class="cline-any cline-neutral">&nbsp;</span>
584
598
  <span class="cline-any cline-neutral">&nbsp;</span>
585
599
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -630,10 +644,11 @@
630
644
  <span class="cline-any cline-yes">165x</span>
631
645
  <span class="cline-any cline-neutral">&nbsp;</span>
632
646
  <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
647
  <span class="cline-any cline-yes">179x</span>
635
648
  <span class="cline-any cline-no">&nbsp;</span>
636
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>
637
652
  <span class="cline-any cline-yes">179x</span>
638
653
  <span class="cline-any cline-neutral">&nbsp;</span>
639
654
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -665,7 +680,6 @@
665
680
  <span class="cline-any cline-neutral">&nbsp;</span>
666
681
  <span class="cline-any cline-yes">103x</span>
667
682
  <span class="cline-any cline-yes">103x</span>
668
- <span class="cline-any cline-yes">103x</span>
669
683
  <span class="cline-any cline-yes">90x</span>
670
684
  <span class="cline-any cline-yes">90x</span>
671
685
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -707,13 +721,19 @@
707
721
  <span class="cline-any cline-neutral">&nbsp;</span>
708
722
  <span class="cline-any cline-neutral">&nbsp;</span>
709
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>
710
726
  <span class="cline-any cline-yes">37x</span>
711
- <span class="cline-any cline-yes">8x</span>
712
- <span class="cline-any cline-yes">8x</span>
713
727
  <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-yes">8x</span>
715
- <span class="cline-any cline-yes">8x</span>
716
- <span class="cline-any cline-yes">8x</span>
728
+ <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-yes">11x</span>
732
+ <span class="cline-any cline-yes">11x</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-yes">11x</span>
735
+ <span class="cline-any cline-yes">11x</span>
736
+ <span class="cline-any cline-yes">11x</span>
717
737
  <span class="cline-any cline-neutral">&nbsp;</span>
718
738
  <span class="cline-any cline-neutral">&nbsp;</span>
719
739
  <span class="cline-any cline-no">&nbsp;</span>
@@ -725,11 +745,15 @@
725
745
  <span class="cline-any cline-no">&nbsp;</span>
726
746
  <span class="cline-any cline-no">&nbsp;</span>
727
747
  <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
728
749
  <span class="cline-any cline-neutral">&nbsp;</span>
729
750
  <span class="cline-any cline-neutral">&nbsp;</span>
730
751
  <span class="cline-any cline-no">&nbsp;</span>
731
752
  <span class="cline-any cline-no">&nbsp;</span>
732
753
  <span class="cline-any cline-no">&nbsp;</span>
754
+ <span class="cline-any cline-neutral">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-no">&nbsp;</span>
733
757
  <span class="cline-any cline-no">&nbsp;</span>
734
758
  <span class="cline-any cline-no">&nbsp;</span>
735
759
  <span class="cline-any cline-no">&nbsp;</span>
@@ -921,6 +945,8 @@ function processAutoColumn(
921
945
  }
922
946
  exports.processAutoColumn = processAutoColumn
923
947
  &nbsp;
948
+ exports.processFormulas = processFormulas
949
+ &nbsp;
924
950
  /**
925
951
  * This will coerce a value to the correct types based on the type transform map
926
952
  * @param {object} row The value to coerce
@@ -970,11 +996,12 @@ exports.inputProcessing = (
970
996
  }
971
997
  continue
972
998
  }
973
- // specific case to delete formula values if they get saved
974
- // type coercion cannot completely remove the field, so have to do it here
999
+ // remove any formula values, they are to be generated
975
1000
  <span class="missing-if-branch" title="if path not taken" >I</span>if (field.type === FieldTypes.FORMULA) {
976
1001
  <span class="cstat-no" title="statement not covered" > delete clonedRow[key]</span>
977
- } else {
1002
+ }
1003
+ // otherwise coerce what is there to correct types
1004
+ else {
978
1005
  clonedRow[key] = exports.coerce(value, field.type)
979
1006
  }
980
1007
  }
@@ -991,7 +1018,7 @@ exports.inputProcessing = (
991
1018
  /**
992
1019
  * This function enriches the input rows with anything they are supposed to contain, for example
993
1020
  * link records or attachment links.
994
- * @param {object} ctx the request which is looking for enriched rows.
1021
+ * @param {string} appId the app in which the request is looking for enriched rows.
995
1022
  * @param {object} table the table from which these rows came from originally, this is used to determine
996
1023
  * the schema of the rows and then enrich.
997
1024
  * @param {object[]|object} rows the rows which are to be enriched.
@@ -999,22 +1026,21 @@ exports.inputProcessing = (
999
1026
  * @returns {object[]|object} the enriched rows will be returned.
1000
1027
  */
1001
1028
  exports.outputProcessing = async (
1002
- ctx,
1029
+ { appId },
1003
1030
  table,
1004
1031
  rows,
1005
1032
  opts = { squash: true }
1006
1033
  ) =&gt; {
1007
- const appId = ctx.appId
1008
1034
  let wasArray = true
1009
1035
  if (!(rows instanceof Array)) {
1010
1036
  rows = [rows]
1011
1037
  wasArray = false
1012
1038
  }
1013
1039
  // attach any linked row information
1014
- let enriched = await linkRows.attachFullLinkedDocs(ctx, table, rows)
1040
+ let enriched = await linkRows.attachFullLinkedDocs(appId, table, rows)
1015
1041
  &nbsp;
1016
1042
  // process formulas
1017
- enriched = processFormulas(table, enriched)
1043
+ enriched = processFormulas(table, enriched, { dynamic: true })
1018
1044
  &nbsp;
1019
1045
  // update the attachments URL depending on hosting
1020
1046
  for (let [property, column] of Object.entries(table.schema)) {
@@ -1046,9 +1072,15 @@ exports.outputProcessing = async (
1046
1072
  * @param {any} row optional - the row being removed.
1047
1073
  * @param {any} rows optional - if multiple rows being deleted can do this in bulk.
1048
1074
  * @param {any} oldRow optional - if updating a row this will determine the difference.
1075
+ * @param {any} oldTable optional - if updating a table, can supply the old table to look for
1076
+ * deleted attachment columns.
1049
1077
  * @return {Promise&lt;void&gt;} When all attachments have been removed this will return.
1050
1078
  */
1051
- exports.cleanupAttachments = async (appId, table, { row, rows, oldRow }) =&gt; {
1079
+ exports.cleanupAttachments = async (
1080
+ appId,
1081
+ table,
1082
+ { row, rows, oldRow, oldTable }
1083
+ ) =&gt; {
1052
1084
  if (!isProdAppID(appId)) {
1053
1085
  const prodAppId = getDeployedAppID(appId)
1054
1086
  // if prod exists, then don't allow deleting
@@ -1063,12 +1095,16 @@ exports.cleanupAttachments = async (appId, table, { row, rows, oldRow }) =&gt; {
1063
1095
  <span class="cstat-no" title="statement not covered" > files = files.concat(row[key].map(<span class="fstat-no" title="function not covered" >at</span>tachment =&gt; <span class="cstat-no" title="statement not covered" >attachment.key)</span>)</span>
1064
1096
  }
1065
1097
  }
1066
- <span class="cstat-no" title="statement not covered" > for (let [key, schema] of Object.entries(table.schema)) {</span>
1098
+ const schemaToUse = <span class="cstat-no" title="statement not covered" >oldTable ? oldTable.schema : table.schema</span>
1099
+ <span class="cstat-no" title="statement not covered" > for (let [key, schema] of Object.entries(schemaToUse)) {</span>
1067
1100
  <span class="cstat-no" title="statement not covered" > if (schema.type !== FieldTypes.ATTACHMENT) {</span>
1068
1101
  <span class="cstat-no" title="statement not covered" > continue</span>
1069
1102
  }
1070
- // if updating, need to manage the differences
1071
- <span class="cstat-no" title="statement not covered" > if (oldRow &amp;&amp; row) {</span>
1103
+ // old table had this column, new table doesn't - delete it
1104
+ <span class="cstat-no" title="statement not covered" > if (oldTable &amp;&amp; !table.schema[key]) {</span>
1105
+ <span class="cstat-no" title="statement not covered" > rows.forEach(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; <span class="cstat-no" title="statement not covered" >addFiles(row, key))</span></span>
1106
+ } else <span class="cstat-no" title="statement not covered" >if (oldRow &amp;&amp; row) {</span>
1107
+ // if updating, need to manage the differences
1072
1108
  <span class="cstat-no" title="statement not covered" > files = files.concat(getRemovedAttachmentKeys(oldRow, row, key))</span>
1073
1109
  } else <span class="cstat-no" title="statement not covered" >if (row) {</span>
1074
1110
  <span class="cstat-no" title="statement not covered" > addFiles(row, key)</span>
@@ -1087,7 +1123,7 @@ exports.cleanupAttachments = async (appId, table, { row, rows, oldRow }) =&gt; {
1087
1123
  <div class='footer quiet pad2 space-top1 center small'>
1088
1124
  Code coverage generated by
1089
1125
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
1090
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
1126
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
1091
1127
  </div>
1092
1128
  </div>
1093
1129
  <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">83.33% </span>
26
+ <span class="strong">66.66% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>10/12</span>
28
+ <span class='fraction'>12/18</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">83.33% </span>
33
+ <span class="strong">50% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>5/6</span>
35
+ <span class='fraction'>9/18</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">50% </span>
40
+ <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>1/2</span>
42
+ <span class='fraction'>1/1</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">90.9% </span>
47
+ <span class="strong">70.58% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>10/11</span>
49
+ <span class='fraction'>12/17</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 high'></div>
58
+ <div class='status-line medium'></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>
@@ -80,49 +80,97 @@
80
80
  <a name='L21'></a><a href='#L21'>21</a>
81
81
  <a name='L22'></a><a href='#L22'>22</a>
82
82
  <a name='L23'></a><a href='#L23'>23</a>
83
- <a name='L24'></a><a href='#L24'>24</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">37x</span>
83
+ <a name='L24'></a><a href='#L24'>24</a>
84
+ <a name='L25'></a><a href='#L25'>25</a>
85
+ <a name='L26'></a><a href='#L26'>26</a>
86
+ <a name='L27'></a><a href='#L27'>27</a>
87
+ <a name='L28'></a><a href='#L28'>28</a>
88
+ <a name='L29'></a><a href='#L29'>29</a>
89
+ <a name='L30'></a><a href='#L30'>30</a>
90
+ <a name='L31'></a><a href='#L31'>31</a>
91
+ <a name='L32'></a><a href='#L32'>32</a>
92
+ <a name='L33'></a><a href='#L33'>33</a>
93
+ <a name='L34'></a><a href='#L34'>34</a>
94
+ <a name='L35'></a><a href='#L35'>35</a>
95
+ <a name='L36'></a><a href='#L36'>36</a>
96
+ <a name='L37'></a><a href='#L37'>37</a>
97
+ <a name='L38'></a><a href='#L38'>38</a>
98
+ <a name='L39'></a><a href='#L39'>39</a>
99
+ <a name='L40'></a><a href='#L40'>40</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">37x</span>
84
100
  <span class="cline-any cline-yes">37x</span>
85
101
  <span class="cline-any cline-neutral">&nbsp;</span>
86
102
  <span class="cline-any cline-neutral">&nbsp;</span>
87
103
  <span class="cline-any cline-neutral">&nbsp;</span>
88
104
  <span class="cline-any cline-neutral">&nbsp;</span>
89
105
  <span class="cline-any cline-yes">37x</span>
90
- <span class="cline-any cline-yes">121x</span>
91
- <span class="cline-any cline-yes">121x</span>
92
- <span class="cline-any cline-yes">18x</span>
93
106
  <span class="cline-any cline-neutral">&nbsp;</span>
94
- <span class="cline-any cline-yes">121x</span>
95
- <span class="cline-any cline-yes">370x</span>
96
- <span class="cline-any cline-yes">370x</span>
97
107
  <span class="cline-any cline-neutral">&nbsp;</span>
98
108
  <span class="cline-any cline-neutral">&nbsp;</span>
109
+ <span class="cline-any cline-neutral">&nbsp;</span>
110
+ <span class="cline-any cline-yes">267x</span>
111
+ <span class="cline-any cline-yes">267x</span>
112
+ <span class="cline-any cline-yes">164x</span>
113
+ <span class="cline-any cline-yes">164x</span>
114
+ <span class="cline-any cline-neutral">&nbsp;</span>
115
+ <span class="cline-any cline-yes">267x</span>
116
+ <span class="cline-any cline-yes">776x</span>
117
+ <span class="cline-any cline-yes">776x</span>
118
+ <span class="cline-any cline-neutral">&nbsp;</span>
119
+ <span class="cline-any cline-neutral">&nbsp;</span>
120
+ <span class="cline-any cline-neutral">&nbsp;</span>
121
+ <span class="cline-any cline-neutral">&nbsp;</span>
122
+ <span class="cline-any cline-yes">776x</span>
123
+ <span class="cline-any cline-neutral">&nbsp;</span>
124
+ <span class="cline-any cline-neutral">&nbsp;</span>
125
+ <span class="cline-any cline-no">&nbsp;</span>
126
+ <span class="cline-any cline-no">&nbsp;</span>
127
+ <span class="cline-any cline-no">&nbsp;</span>
128
+ <span class="cline-any cline-no">&nbsp;</span>
99
129
  <span class="cline-any cline-no">&nbsp;</span>
100
130
  <span class="cline-any cline-neutral">&nbsp;</span>
101
131
  <span class="cline-any cline-neutral">&nbsp;</span>
102
132
  <span class="cline-any cline-neutral">&nbsp;</span>
103
133
  <span class="cline-any cline-neutral">&nbsp;</span>
104
- <span class="cline-any cline-yes">121x</span>
105
134
  <span class="cline-any cline-neutral">&nbsp;</span>
106
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { FieldTypes } = require("../../constants")
135
+ <span class="cline-any cline-neutral">&nbsp;</span>
136
+ <span class="cline-any cline-yes">267x</span>
137
+ <span class="cline-any cline-neutral">&nbsp;</span>
138
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const { FieldTypes, FormulaTypes } = require("../../constants")
107
139
  const { processStringSync } = require("@budibase/string-templates")
108
140
  &nbsp;
109
141
  /**
110
142
  * Looks through the rows provided and finds formulas - which it then processes.
111
143
  */
112
- exports.processFormulas = (table, rows) =&gt; {
144
+ exports.processFormulas = (
145
+ table,
146
+ rows,
147
+ { dynamic, contextRows } = { dynamic: true }
148
+ ) =&gt; {
113
149
  const single = !Array.isArray(rows)
114
150
  if (single) {
115
151
  rows = [rows]
152
+ contextRows = contextRows ? [contextRows] : contextRows
116
153
  }
117
154
  for (let [column, schema] of Object.entries(table.schema)) {
118
- if (schema.type !== FieldTypes.FORMULA) {
155
+ const isStatic = schema.formulaType === FormulaTypes.STATIC
156
+ if (
157
+ schema.type !== FieldTypes.FORMULA ||
158
+ (<span class="branch-1 cbranch-no" title="branch not covered" >dynamic </span>&amp;&amp; <span class="branch-2 cbranch-no" title="branch not covered" >isStatic)</span> ||
159
+ (<span class="branch-3 cbranch-no" title="branch not covered" >!dynamic </span>&amp;&amp; <span class="branch-4 cbranch-no" title="branch not covered" >!isStatic)</span>
160
+ ) {
119
161
  continue
120
162
  }
121
163
  // iterate through rows and process formula
122
- <span class="cstat-no" title="statement not covered" > rows = rows.map(<span class="fstat-no" title="function not covered" >ro</span>w =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
123
- ...row,
124
- [column]: processStringSync(schema.formula, row),
125
- }))
164
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; rows.length; i++) {</span>
165
+ <span class="cstat-no" title="statement not covered" > if (schema.formula) {</span>
166
+ let row = <span class="cstat-no" title="statement not covered" >rows[i]</span>
167
+ let context = <span class="cstat-no" title="statement not covered" >contextRows ? contextRows[i] : row</span>
168
+ <span class="cstat-no" title="statement not covered" > rows[i] = {</span>
169
+ ...row,
170
+ [column]: processStringSync(schema.formula, context),
171
+ }
172
+ }
173
+ }
126
174
  }
127
175
  return single ? rows[0] : rows
128
176
  }
@@ -133,7 +181,7 @@ exports.processFormulas = (table, rows) =&gt; {
133
181
  <div class='footer quiet pad2 space-top1 center small'>
134
182
  Code coverage generated by
135
183
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
136
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
184
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
137
185
  </div>
138
186
  </div>
139
187
  <script src="../../prettify.js"></script>
@@ -136,7 +136,7 @@ module.exports = ScriptRunner
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
139
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
139
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  </div>
142
142
  <script src="../prettify.js"></script>
@@ -274,7 +274,7 @@ exports.CURRENTLY_SUPPORTED_LEVELS = CURRENTLY_SUPPORTED_LEVELS
274
274
  <div class='footer quiet pad2 space-top1 center small'>
275
275
  Code coverage generated by
276
276
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
277
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
277
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
278
278
  </div>
279
279
  </div>
280
280
  <script src="../prettify.js"></script>
@@ -85,7 +85,7 @@
85
85
  <div class='footer quiet pad2 space-top1 center small'>
86
86
  Code coverage generated by
87
87
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
88
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
88
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
89
89
  </div>
90
90
  </div>
91
91
  <script src="../prettify.js"></script>
@@ -125,7 +125,7 @@
125
125
  <div class='footer quiet pad2 space-top1 center small'>
126
126
  Code coverage generated by
127
127
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
128
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
128
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
129
129
  </div>
130
130
  </div>
131
131
  <script src="../../prettify.js"></script>
@@ -340,7 +340,7 @@ exports.update = async (property, usage, opts = { dryRun: false }) =&gt; {
340
340
  <div class='footer quiet pad2 space-top1 center small'>
341
341
  Code coverage generated by
342
342
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
343
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
343
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
344
344
  </div>
345
345
  </div>
346
346
  <script src="../../prettify.js"></script>
@@ -286,7 +286,7 @@ exports.getUniqueRows = async appIds =&gt; {
286
286
  <div class='footer quiet pad2 space-top1 center small'>
287
287
  Code coverage generated by
288
288
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
289
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
289
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
290
290
  </div>
291
291
  </div>
292
292
  <script src="../../prettify.js"></script>
@@ -118,7 +118,7 @@ function <span class="fstat-no" title="function not covered" >resetQuotasIfRequi
118
118
  <div class='footer quiet pad2 space-top1 center small'>
119
119
  Code coverage generated by
120
120
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
121
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
121
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
122
122
  </div>
123
123
  </div>
124
124
  <script src="../../prettify.js"></script>
@@ -136,7 +136,7 @@ exports.getFullUser = async (ctx, userId) =&gt; {
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
139
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
139
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
140
140
  </div>
141
141
  </div>
142
142
  <script src="../prettify.js"></script>
@@ -334,7 +334,7 @@ exports.removeAppFromUserRoles = async (ctx, appId) =&gt; {
334
334
  <div class='footer quiet pad2 space-top1 center small'>
335
335
  Code coverage generated by
336
336
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
337
- at Mon Jan 31 2022 14:38:52 GMT+0000 (Coordinated Universal Time)
337
+ at Mon Jan 31 2022 16:01:47 GMT+0000 (Coordinated Universal Time)
338
338
  </div>
339
339
  </div>
340
340
  <script src="../prettify.js"></script>