@budibase/server 0.9.140-alpha.4 → 0.9.140-alpha.5

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 (200) hide show
  1. package/builder/assets/{index.2bcd18f5.js → index.80d850d1.js} +1 -1
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +646 -528
  4. package/coverage/coverage-final.json +17 -15
  5. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/datasource.js.html +3 -3
  13. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/index.html +1 -1
  16. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/query.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/row/index.html +19 -19
  25. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/internal.js.html +242 -47
  27. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  32. package/coverage/lcov-report/api/controllers/table/index.js.html +2 -2
  33. package/coverage/lcov-report/api/controllers/table/utils.js.html +31 -19
  34. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/view/index.html +32 -17
  38. package/coverage/lcov-report/api/controllers/view/index.js.html +84 -186
  39. package/coverage/lcov-report/api/controllers/view/utils.js.html +407 -0
  40. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  42. package/coverage/lcov-report/api/index.html +1 -1
  43. package/coverage/lcov-report/api/index.js.html +1 -1
  44. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  45. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  46. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  47. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  48. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  49. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/index.html +1 -1
  56. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  73. package/coverage/lcov-report/automations/actions.js.html +1 -1
  74. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  75. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  76. package/coverage/lcov-report/automations/index.html +1 -1
  77. package/coverage/lcov-report/automations/index.js.html +1 -1
  78. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  79. package/coverage/lcov-report/automations/steps/createRow.js.html +10 -19
  80. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  81. package/coverage/lcov-report/automations/steps/deleteRow.js.html +14 -20
  82. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/index.html +31 -31
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/queryRows.js.html +18 -27
  90. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/updateRow.js.html +12 -21
  94. package/coverage/lcov-report/automations/steps/utils.js.html +23 -23
  95. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  96. package/coverage/lcov-report/automations/thread.js.html +1 -1
  97. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  98. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  99. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  100. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  101. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  102. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  106. package/coverage/lcov-report/automations/utils.js.html +1 -1
  107. package/coverage/lcov-report/constants/index.html +1 -1
  108. package/coverage/lcov-report/constants/index.js.html +1 -1
  109. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  110. package/coverage/lcov-report/constants/screens.js.html +1 -1
  111. package/coverage/lcov-report/db/client.js.html +1 -1
  112. package/coverage/lcov-report/db/inMemoryView.js.html +224 -0
  113. package/coverage/lcov-report/db/index.html +34 -19
  114. package/coverage/lcov-report/db/index.js.html +1 -1
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +4 -4
  116. package/coverage/lcov-report/db/linkedRows/index.html +14 -14
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +18 -9
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  119. package/coverage/lcov-report/db/newid.js.html +1 -1
  120. package/coverage/lcov-report/db/utils.js.html +37 -10
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  122. package/coverage/lcov-report/events/index.html +1 -1
  123. package/coverage/lcov-report/events/index.js.html +1 -1
  124. package/coverage/lcov-report/events/utils.js.html +1 -1
  125. package/coverage/lcov-report/index.html +65 -65
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  127. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  128. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  129. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  130. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  131. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  132. package/coverage/lcov-report/middleware/index.html +1 -1
  133. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  134. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  135. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  136. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  137. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  138. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  139. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  140. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  141. package/coverage/lcov-report/utilities/global.js.html +1 -1
  142. package/coverage/lcov-report/utilities/index.html +1 -1
  143. package/coverage/lcov-report/utilities/index.js.html +1 -1
  144. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  145. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  146. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  147. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  148. package/coverage/lcov-report/utilities/rowProcessor/index.html +15 -15
  149. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +58 -13
  150. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  151. package/coverage/lcov-report/utilities/security.js.html +2 -2
  152. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  153. package/coverage/lcov-report/utilities/users.js.html +1 -1
  154. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  155. package/coverage/lcov.info +1093 -883
  156. package/dist/api/controllers/datasource.js +2 -2
  157. package/dist/api/controllers/row/ExternalRequest.js +4 -0
  158. package/dist/api/controllers/row/internal.js +97 -23
  159. package/dist/api/controllers/table/index.js +1 -1
  160. package/dist/api/controllers/table/utils.js +13 -11
  161. package/dist/api/controllers/view/index.js +74 -96
  162. package/dist/api/controllers/view/utils.js +102 -0
  163. package/dist/automations/steps/createRow.js +5 -8
  164. package/dist/automations/steps/deleteRow.js +7 -10
  165. package/dist/automations/steps/queryRows.js +11 -14
  166. package/dist/automations/steps/updateRow.js +4 -7
  167. package/dist/db/inMemoryView.js +51 -0
  168. package/dist/db/linkedRows/index.js +5 -2
  169. package/dist/db/utils.js +7 -0
  170. package/dist/environment.js +7 -1
  171. package/dist/integrations/mysql.js +2 -13
  172. package/dist/integrations/postgres.js +8 -14
  173. package/dist/integrations/utils.js +19 -1
  174. package/dist/package.json +5 -5
  175. package/dist/tsconfig.tsbuildinfo +1 -1
  176. package/dist/utilities/rowProcessor/index.js +10 -5
  177. package/package.json +6 -6
  178. package/scripts/integrations/service-vehicles/docker-compose.yml +28 -0
  179. package/scripts/integrations/service-vehicles/init.sql +52 -0
  180. package/scripts/integrations/service-vehicles/reset.sh +3 -0
  181. package/src/api/controllers/datasource.js +2 -2
  182. package/src/api/controllers/row/ExternalRequest.ts +5 -1
  183. package/src/api/controllers/row/internal.js +88 -23
  184. package/src/api/controllers/table/index.js +1 -1
  185. package/src/api/controllers/table/utils.js +16 -12
  186. package/src/api/controllers/view/index.js +82 -116
  187. package/src/api/controllers/view/utils.js +109 -0
  188. package/src/api/routes/tests/view.spec.js +1 -1
  189. package/src/automations/steps/createRow.js +5 -8
  190. package/src/automations/steps/deleteRow.js +8 -10
  191. package/src/automations/steps/queryRows.js +11 -14
  192. package/src/automations/steps/updateRow.js +7 -10
  193. package/src/db/inMemoryView.js +48 -0
  194. package/src/db/linkedRows/index.js +5 -2
  195. package/src/db/utils.js +9 -0
  196. package/src/environment.js +8 -1
  197. package/src/integrations/mysql.ts +2 -13
  198. package/src/integrations/postgres.ts +9 -16
  199. package/src/integrations/utils.ts +18 -0
  200. package/src/utilities/rowProcessor/index.js +20 -5
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">93.33% </span>
26
+ <span class="strong">77.85% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>98/105</span>
28
+ <span class='fraction'>116/149</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">78.43% </span>
33
+ <span class="strong">65.67% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>40/51</span>
35
+ <span class='fraction'>44/67</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">88.24% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>11/11</span>
42
+ <span class='fraction'>15/17</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">94.17% </span>
47
+ <span class="strong">78.23% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>97/103</span>
49
+ <span class='fraction'>115/147</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
  <div class="pad1">
60
60
  <table class="coverage-summary">
61
61
  <thead>
@@ -89,17 +89,32 @@
89
89
 
90
90
  <tr>
91
91
  <td class="file high" data-value="index.js"><a href="index.js.html">index.js</a></td>
92
- <td data-value="92.54" class="pic high">
92
+ <td data-value="92.73" class="pic high">
93
93
  <div class="chart"><div class="cover-fill" style="width: 92%"></div><div class="cover-empty" style="width: 8%"></div></div>
94
94
  </td>
95
- <td data-value="92.54" class="pct high">92.54%</td>
96
- <td data-value="67" class="abs high">62/67</td>
97
- <td data-value="69.57" class="pct medium">69.57%</td>
98
- <td data-value="23" class="abs medium">16/23</td>
95
+ <td data-value="92.73" class="pct high">92.73%</td>
96
+ <td data-value="55" class="abs high">51/55</td>
97
+ <td data-value="68.42" class="pct medium">68.42%</td>
98
+ <td data-value="19" class="abs medium">13/19</td>
99
99
  <td data-value="100" class="pct high">100%</td>
100
100
  <td data-value="4" class="abs high">4/4</td>
101
- <td data-value="93.94" class="pct high">93.94%</td>
102
- <td data-value="66" class="abs high">62/66</td>
101
+ <td data-value="94.44" class="pct high">94.44%</td>
102
+ <td data-value="54" class="abs high">51/54</td>
103
+ </tr>
104
+
105
+ <tr>
106
+ <td class="file medium" data-value="utils.js"><a href="utils.js.html">utils.js</a></td>
107
+ <td data-value="51.79" class="pic medium">
108
+ <div class="chart"><div class="cover-fill" style="width: 51%"></div><div class="cover-empty" style="width: 49%"></div></div>
109
+ </td>
110
+ <td data-value="51.79" class="pct medium">51.79%</td>
111
+ <td data-value="56" class="abs medium">29/56</td>
112
+ <td data-value="35" class="pct low">35%</td>
113
+ <td data-value="20" class="abs low">7/20</td>
114
+ <td data-value="66.67" class="pct medium">66.67%</td>
115
+ <td data-value="6" class="abs medium">4/6</td>
116
+ <td data-value="51.79" class="pct medium">51.79%</td>
117
+ <td data-value="56" class="abs medium">29/56</td>
103
118
  </tr>
104
119
 
105
120
  <tr>
@@ -125,7 +140,7 @@
125
140
  <div class='footer quiet pad2 space-top1 center small'>
126
141
  Code coverage generated by
127
142
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
128
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
143
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
129
144
  </div>
130
145
  </div>
131
146
  <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">92.54% </span>
26
+ <span class="strong">92.73% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>62/67</span>
28
+ <span class='fraction'>51/55</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">69.57% </span>
33
+ <span class="strong">68.42% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>16/23</span>
35
+ <span class='fraction'>13/19</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">93.94% </span>
47
+ <span class="strong">94.44% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>62/66</span>
49
+ <span class='fraction'>51/54</span>
50
50
  </div>
51
51
 
52
52
 
@@ -151,41 +151,7 @@
151
151
  <a name='L92'></a><a href='#L92'>92</a>
152
152
  <a name='L93'></a><a href='#L93'>93</a>
153
153
  <a name='L94'></a><a href='#L94'>94</a>
154
- <a name='L95'></a><a href='#L95'>95</a>
155
- <a name='L96'></a><a href='#L96'>96</a>
156
- <a name='L97'></a><a href='#L97'>97</a>
157
- <a name='L98'></a><a href='#L98'>98</a>
158
- <a name='L99'></a><a href='#L99'>99</a>
159
- <a name='L100'></a><a href='#L100'>100</a>
160
- <a name='L101'></a><a href='#L101'>101</a>
161
- <a name='L102'></a><a href='#L102'>102</a>
162
- <a name='L103'></a><a href='#L103'>103</a>
163
- <a name='L104'></a><a href='#L104'>104</a>
164
- <a name='L105'></a><a href='#L105'>105</a>
165
- <a name='L106'></a><a href='#L106'>106</a>
166
- <a name='L107'></a><a href='#L107'>107</a>
167
- <a name='L108'></a><a href='#L108'>108</a>
168
- <a name='L109'></a><a href='#L109'>109</a>
169
- <a name='L110'></a><a href='#L110'>110</a>
170
- <a name='L111'></a><a href='#L111'>111</a>
171
- <a name='L112'></a><a href='#L112'>112</a>
172
- <a name='L113'></a><a href='#L113'>113</a>
173
- <a name='L114'></a><a href='#L114'>114</a>
174
- <a name='L115'></a><a href='#L115'>115</a>
175
- <a name='L116'></a><a href='#L116'>116</a>
176
- <a name='L117'></a><a href='#L117'>117</a>
177
- <a name='L118'></a><a href='#L118'>118</a>
178
- <a name='L119'></a><a href='#L119'>119</a>
179
- <a name='L120'></a><a href='#L120'>120</a>
180
- <a name='L121'></a><a href='#L121'>121</a>
181
- <a name='L122'></a><a href='#L122'>122</a>
182
- <a name='L123'></a><a href='#L123'>123</a>
183
- <a name='L124'></a><a href='#L124'>124</a>
184
- <a name='L125'></a><a href='#L125'>125</a>
185
- <a name='L126'></a><a href='#L126'>126</a>
186
- <a name='L127'></a><a href='#L127'>127</a>
187
- <a name='L128'></a><a href='#L128'>128</a>
188
- <a name='L129'></a><a href='#L129'>129</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
154
+ <a name='L95'></a><a href='#L95'>95</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">33x</span>
189
155
  <span class="cline-any cline-yes">33x</span>
190
156
  <span class="cline-any cline-yes">33x</span>
191
157
  <span class="cline-any cline-yes">33x</span>
@@ -193,39 +159,14 @@
193
159
  <span class="cline-any cline-yes">33x</span>
194
160
  <span class="cline-any cline-neutral">&nbsp;</span>
195
161
  <span class="cline-any cline-yes">33x</span>
196
- <span class="cline-any cline-neutral">&nbsp;</span>
197
- <span class="cline-any cline-yes">1x</span>
198
- <span class="cline-any cline-yes">1x</span>
199
- <span class="cline-any cline-yes">1x</span>
200
- <span class="cline-any cline-neutral">&nbsp;</span>
201
162
  <span class="cline-any cline-yes">1x</span>
202
- <span class="cline-any cline-neutral">&nbsp;</span>
203
- <span class="cline-any cline-yes">3x</span>
204
- <span class="cline-any cline-yes">2x</span>
205
- <span class="cline-any cline-neutral">&nbsp;</span>
206
- <span class="cline-any cline-yes">1x</span>
207
- <span class="cline-any cline-neutral">&nbsp;</span>
208
- <span class="cline-any cline-neutral">&nbsp;</span>
209
- <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-neutral">&nbsp;</span>
211
- <span class="cline-any cline-neutral">&nbsp;</span>
212
163
  <span class="cline-any cline-yes">1x</span>
213
164
  <span class="cline-any cline-neutral">&nbsp;</span>
214
165
  <span class="cline-any cline-neutral">&nbsp;</span>
166
+ <span class="cline-any cline-yes">33x</span>
215
167
  <span class="cline-any cline-yes">8x</span>
216
168
  <span class="cline-any cline-yes">8x</span>
217
169
  <span class="cline-any cline-yes">8x</span>
218
- <span class="cline-any cline-yes">8x</span>
219
- <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-yes">8x</span>
221
- <span class="cline-any cline-no">&nbsp;</span>
222
- <span class="cline-any cline-neutral">&nbsp;</span>
223
- <span class="cline-any cline-neutral">&nbsp;</span>
224
- <span class="cline-any cline-yes">8x</span>
225
- <span class="cline-any cline-neutral">&nbsp;</span>
226
- <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-neutral">&nbsp;</span>
228
- <span class="cline-any cline-neutral">&nbsp;</span>
229
170
  <span class="cline-any cline-neutral">&nbsp;</span>
230
171
  <span class="cline-any cline-yes">8x</span>
231
172
  <span class="cline-any cline-no">&nbsp;</span>
@@ -240,11 +181,9 @@
240
181
  <span class="cline-any cline-yes">3x</span>
241
182
  <span class="cline-any cline-neutral">&nbsp;</span>
242
183
  <span class="cline-any cline-yes">8x</span>
243
- <span class="cline-any cline-neutral">&nbsp;</span>
244
184
  <span class="cline-any cline-yes">8x</span>
245
185
  <span class="cline-any cline-no">&nbsp;</span>
246
186
  <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-neutral">&nbsp;</span>
248
187
  <span class="cline-any cline-yes">8x</span>
249
188
  <span class="cline-any cline-neutral">&nbsp;</span>
250
189
  <span class="cline-any cline-yes">8x</span>
@@ -253,28 +192,24 @@
253
192
  <span class="cline-any cline-neutral">&nbsp;</span>
254
193
  <span class="cline-any cline-neutral">&nbsp;</span>
255
194
  <span class="cline-any cline-neutral">&nbsp;</span>
195
+ <span class="cline-any cline-yes">33x</span>
256
196
  <span class="cline-any cline-yes">1x</span>
257
197
  <span class="cline-any cline-yes">1x</span>
258
198
  <span class="cline-any cline-yes">1x</span>
259
199
  <span class="cline-any cline-yes">1x</span>
260
200
  <span class="cline-any cline-yes">1x</span>
261
- <span class="cline-any cline-neutral">&nbsp;</span>
262
- <span class="cline-any cline-yes">1x</span>
263
- <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-yes">1x</span>
265
- <span class="cline-any cline-yes">1x</span>
266
201
  <span class="cline-any cline-yes">1x</span>
267
202
  <span class="cline-any cline-neutral">&nbsp;</span>
268
203
  <span class="cline-any cline-yes">1x</span>
269
204
  <span class="cline-any cline-neutral">&nbsp;</span>
270
205
  <span class="cline-any cline-neutral">&nbsp;</span>
206
+ <span class="cline-any cline-yes">33x</span>
271
207
  <span class="cline-any cline-yes">2x</span>
272
208
  <span class="cline-any cline-yes">2x</span>
273
209
  <span class="cline-any cline-yes">2x</span>
274
210
  <span class="cline-any cline-neutral">&nbsp;</span>
275
211
  <span class="cline-any cline-yes">2x</span>
276
212
  <span class="cline-any cline-yes">2x</span>
277
- <span class="cline-any cline-yes">2x</span>
278
213
  <span class="cline-any cline-no">&nbsp;</span>
279
214
  <span class="cline-any cline-neutral">&nbsp;</span>
280
215
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -310,137 +245,100 @@
310
245
  <span class="cline-any cline-yes">2x</span>
311
246
  <span class="cline-any cline-yes">2x</span>
312
247
  <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-neutral">&nbsp;</span>
315
- <span class="cline-any cline-yes">33x</span>
316
248
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const CouchDB = require("../../../db")
317
249
  const viewTemplate = require("./viewBuilder")
318
250
  const { apiFileReturn } = require("../../../utilities/fileSystem")
319
251
  const exporters = require("./exporters")
252
+ const { saveView, getView, getViews, deleteView } = require("./utils")
320
253
  const { fetchView } = require("../row")
321
- const { ViewNames } = require("../../../db/utils")
322
- &nbsp;
323
- const controller = {
324
- fetch: async ctx =&gt; {
325
- const db = new CouchDB(ctx.appId)
326
- const designDoc = await db.get("_design/database")
327
- const response = []
328
- &nbsp;
329
- for (let name of Object.keys(designDoc.views)) {
330
- // Only return custom views, not built ins
331
- if (Object.values(ViewNames).indexOf(name) !== -1) {
332
- continue
333
- }
334
- response.push({
335
- name,
336
- ...designDoc.views[name],
337
- })
338
- }
339
- &nbsp;
340
- ctx.body = response
341
- },
342
- save: async ctx =&gt; {
343
- const db = new CouchDB(ctx.appId)
344
- const { originalName, ...viewToSave } = ctx.request.body
345
- const designDoc = await db.get("_design/database")
346
- const view = viewTemplate(viewToSave)
347
254
  &nbsp;
348
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!viewToSave.name) {
349
- <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Cannot create view without a name")</span>
350
- }
351
- &nbsp;
352
- designDoc.views = {
353
- ...designDoc.views,
354
- [viewToSave.name]: view,
355
- }
356
- &nbsp;
357
- // view has been renamed
358
- <span class="missing-if-branch" title="if path not taken" >I</span>if (originalName) {
359
- <span class="cstat-no" title="statement not covered" > delete designDoc.views[originalName]</span>
360
- }
255
+ exports.fetch = async ctx =&gt; {
256
+ const db = new CouchDB(ctx.appId)
257
+ ctx.body = await getViews(db)
258
+ }
361
259
  &nbsp;
362
- await db.put(designDoc)
260
+ exports.save = async ctx =&gt; {
261
+ const db = new CouchDB(ctx.appId)
262
+ const { originalName, ...viewToSave } = ctx.request.body
263
+ const view = viewTemplate(viewToSave)
363
264
  &nbsp;
364
- // add views to table document
365
- const table = await db.get(ctx.request.body.tableId)
366
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!table.views) <span class="cstat-no" title="statement not covered" >table.views = {}</span>
367
- if (!view.meta.schema) {
368
- view.meta.schema = table.schema
369
- }
370
- table.views[viewToSave.name] = view.meta
265
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!viewToSave.name) {
266
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Cannot create view without a name")</span>
267
+ }
371
268
  &nbsp;
372
- <span class="missing-if-branch" title="if path not taken" >I</span>if (originalName) {
373
- <span class="cstat-no" title="statement not covered" > delete table.views[originalName]</span>
374
- }
269
+ await saveView(db, originalName, viewToSave.name, view)
375
270
  &nbsp;
376
- await db.put(table)
271
+ // add views to table document
272
+ const table = await db.get(ctx.request.body.tableId)
273
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!table.views) <span class="cstat-no" title="statement not covered" >table.views = {}</span>
274
+ if (!view.meta.schema) {
275
+ view.meta.schema = table.schema
276
+ }
277
+ table.views[viewToSave.name] = view.meta
278
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (originalName) {
279
+ <span class="cstat-no" title="statement not covered" > delete table.views[originalName]</span>
280
+ }
281
+ await db.put(table)
377
282
  &nbsp;
378
- ctx.body = {
379
- ...table.views[viewToSave.name],
380
- name: viewToSave.name,
381
- }
382
- },
383
- destroy: async ctx =&gt; {
384
- const db = new CouchDB(ctx.appId)
385
- const designDoc = await db.get("_design/database")
386
- const viewName = decodeURI(ctx.params.viewName)
387
- const view = designDoc.views[viewName]
388
- delete designDoc.views[viewName]
283
+ ctx.body = {
284
+ ...table.views[viewToSave.name],
285
+ name: viewToSave.name,
286
+ }
287
+ }
389
288
  &nbsp;
390
- await db.put(designDoc)
289
+ exports.destroy = async ctx =&gt; {
290
+ const db = new CouchDB(ctx.appId)
291
+ const viewName = decodeURI(ctx.params.viewName)
292
+ const view = await deleteView(db, viewName)
293
+ const table = await db.get(view.meta.tableId)
294
+ delete table.views[viewName]
295
+ await db.put(table)
391
296
  &nbsp;
392
- const table = await db.get(view.meta.tableId)
393
- delete table.views[viewName]
394
- await db.put(table)
297
+ ctx.body = view
298
+ }
395
299
  &nbsp;
396
- ctx.body = view
397
- },
398
- exportView: async ctx =&gt; {
399
- const db = new CouchDB(ctx.appId)
400
- const designDoc = await db.get("_design/database")
401
- const viewName = decodeURI(ctx.query.view)
300
+ exports.exportView = async ctx =&gt; {
301
+ const db = new CouchDB(ctx.appId)
302
+ const viewName = decodeURI(ctx.query.view)
303
+ const view = await getView(db, viewName)
402
304
  &nbsp;
403
- const view = designDoc.views[viewName]
404
- const format = ctx.query.format
405
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!format) {
406
- <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Format must be specified, either csv or json")</span>
407
- }
305
+ const format = ctx.query.format
306
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!format) {
307
+ <span class="cstat-no" title="statement not covered" > ctx.throw(400, "Format must be specified, either csv or json")</span>
308
+ }
408
309
  &nbsp;
409
- <span class="missing-if-branch" title="else path not taken" >E</span>if (view) {
410
- ctx.params.viewName = viewName
411
- // Fetch view rows
412
- ctx.query = {
413
- group: view.meta.groupBy,
414
- calculation: view.meta.calculation,
415
- stats: !!view.meta.field,
416
- field: view.meta.field,
417
- }
418
- } else {
419
- // table all_ view
420
- /* istanbul ignore next */
421
- ctx.params.viewName = viewName
310
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (view) {
311
+ ctx.params.viewName = viewName
312
+ // Fetch view rows
313
+ ctx.query = {
314
+ group: view.meta.groupBy,
315
+ calculation: view.meta.calculation,
316
+ stats: !!view.meta.field,
317
+ field: view.meta.field,
422
318
  }
319
+ } else {
320
+ // table all_ view
321
+ /* istanbul ignore next */
322
+ ctx.params.viewName = viewName
323
+ }
423
324
  &nbsp;
424
- await fetchView(ctx)
325
+ await fetchView(ctx)
425
326
  &nbsp;
426
- let schema = view &amp;&amp; view.meta &amp;&amp; view.meta.schema
427
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!schema) {
428
- const tableId = ctx.params.tableId || view.meta.tableId
429
- const table = await db.get(tableId)
430
- schema = table.schema
431
- }
327
+ let schema = view &amp;&amp; view.meta &amp;&amp; view.meta.schema
328
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (!schema) {
329
+ const tableId = ctx.params.tableId || view.meta.tableId
330
+ const table = await db.get(tableId)
331
+ schema = table.schema
332
+ }
432
333
  &nbsp;
433
- // Export part
434
- let headers = Object.keys(schema)
435
- const exporter = exporters[format]
436
- const filename = `${viewName}.${format}`
437
- // send down the file
438
- ctx.attachment(filename)
439
- ctx.body = apiFileReturn(exporter(headers, ctx.body))
440
- },
334
+ // Export part
335
+ let headers = Object.keys(schema)
336
+ const exporter = exporters[format]
337
+ const filename = `${viewName}.${format}`
338
+ // send down the file
339
+ ctx.attachment(filename)
340
+ ctx.body = apiFileReturn(exporter(headers, ctx.body))
441
341
  }
442
- &nbsp;
443
- module.exports = controller
444
342
  &nbsp;</pre></td></tr></table></pre>
445
343
 
446
344
  <div class='push'></div><!-- for sticky footer -->
@@ -448,7 +346,7 @@ module.exports = controller
448
346
  <div class='footer quiet pad2 space-top1 center small'>
449
347
  Code coverage generated by
450
348
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
451
- at Wed Sep 22 2021 15:00:11 GMT+0000 (Coordinated Universal Time)
349
+ at Wed Sep 22 2021 17:29:03 GMT+0000 (Coordinated Universal Time)
452
350
  </div>
453
351
  </div>
454
352
  <script src="../../../prettify.js"></script>