@budibase/server 1.0.27-alpha.0 → 1.0.27

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/__mocks__/node-fetch.ts +0 -3
  2. package/builder/assets/{index.4a13c4cb.css → index.4fb3f887.css} +1 -1
  3. package/builder/assets/{index.e2f56628.js → index.593a5d3e.js} +204 -208
  4. package/builder/assets/{vendor.f9faf6ab.js → vendor.470042a4.js} +88 -88
  5. package/builder/index.html +3 -3
  6. package/coverage/clover.xml +512 -589
  7. package/coverage/coverage-final.json +19 -20
  8. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/automation.js.html +10 -22
  13. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/datasource.js.html +14 -14
  17. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/index.html +43 -28
  20. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/{query/index.js.html → query.js.html} +27 -159
  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 +1 -1
  29. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/user.js.html +9 -108
  42. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/webhook.js.html +6 -18
  48. package/coverage/lcov-report/api/index.html +1 -1
  49. package/coverage/lcov-report/api/index.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/hosting.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/index.html +9 -9
  63. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/query.js.html +98 -11
  69. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/user.js.html +2 -32
  78. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  80. package/coverage/lcov-report/automations/actions.js.html +1 -1
  81. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  82. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  83. package/coverage/lcov-report/automations/index.html +20 -20
  84. package/coverage/lcov-report/automations/index.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/index.html +1 -1
  94. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -5
  96. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  112. package/coverage/lcov-report/automations/utils.js.html +11 -44
  113. package/coverage/lcov-report/constants/index.html +1 -1
  114. package/coverage/lcov-report/constants/index.js.html +22 -22
  115. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  116. package/coverage/lcov-report/constants/screens.js.html +1 -1
  117. package/coverage/lcov-report/db/client.js.html +18 -18
  118. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  119. package/coverage/lcov-report/db/index.html +15 -15
  120. package/coverage/lcov-report/db/index.js.html +3 -3
  121. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  124. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  125. package/coverage/lcov-report/db/newid.js.html +4 -4
  126. package/coverage/lcov-report/db/utils.js.html +64 -91
  127. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  128. package/coverage/lcov-report/events/index.html +1 -1
  129. package/coverage/lcov-report/events/index.js.html +1 -1
  130. package/coverage/lcov-report/events/utils.js.html +1 -1
  131. package/coverage/lcov-report/index.html +60 -75
  132. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  133. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  134. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  135. package/coverage/lcov-report/middleware/authorized.js.html +2 -2
  136. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  137. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  138. package/coverage/lcov-report/middleware/index.html +1 -1
  139. package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
  140. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  141. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  142. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  143. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  144. package/coverage/lcov-report/threads/automation.js.html +1 -1
  145. package/coverage/lcov-report/threads/index.html +19 -19
  146. package/coverage/lcov-report/threads/index.js.html +1 -1
  147. package/coverage/lcov-report/threads/query.js.html +12 -63
  148. package/coverage/lcov-report/threads/utils.js.html +1 -1
  149. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  150. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  151. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  152. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  153. package/coverage/lcov-report/utilities/global.js.html +1 -1
  154. package/coverage/lcov-report/utilities/index.html +19 -19
  155. package/coverage/lcov-report/utilities/index.js.html +33 -66
  156. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  157. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  158. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  159. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  160. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  162. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  163. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  164. package/coverage/lcov-report/utilities/security.js.html +2 -2
  165. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  166. package/coverage/lcov-report/utilities/users.js.html +1 -1
  167. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  168. package/coverage/lcov.info +851 -969
  169. package/dist/api/controllers/automation.js +5 -7
  170. package/dist/api/controllers/{query/index.js → query.js} +6 -42
  171. package/dist/api/controllers/user.js +1 -37
  172. package/dist/api/controllers/webhook.js +0 -4
  173. package/dist/api/routes/query.js +32 -2
  174. package/dist/api/routes/user.js +1 -3
  175. package/dist/automations/steps/outgoingWebhook.js +3 -2
  176. package/dist/automations/utils.js +0 -10
  177. package/dist/db/utils.js +0 -8
  178. package/dist/definitions/datasource.js +1 -6
  179. package/dist/integrations/rest.js +117 -207
  180. package/dist/package.json +0 -6
  181. package/dist/threads/query.js +2 -14
  182. package/dist/tsconfig.tsbuildinfo +1 -1
  183. package/dist/utilities/index.js +0 -10
  184. package/package.json +5 -11
  185. package/src/api/controllers/automation.js +4 -8
  186. package/src/api/controllers/{query/index.js → query.js} +6 -50
  187. package/src/api/controllers/user.js +0 -33
  188. package/src/api/controllers/webhook.js +0 -4
  189. package/src/api/routes/query.js +34 -5
  190. package/src/api/routes/user.js +0 -10
  191. package/src/automations/steps/outgoingWebhook.js +3 -2
  192. package/src/automations/utils.js +0 -11
  193. package/src/db/utils.js +0 -9
  194. package/src/definitions/common.ts +16 -2
  195. package/src/definitions/datasource.ts +1 -73
  196. package/src/integrations/base/IntegrationBase.ts +4 -4
  197. package/src/integrations/oracle.ts +1 -1
  198. package/src/integrations/rest.ts +137 -227
  199. package/src/integrations/tests/rest.spec.js +19 -167
  200. package/src/threads/query.js +2 -19
  201. package/src/utilities/index.js +0 -11
  202. package/builder/assets/bb-spaceship.8f6e81e1.svg +0 -227
  203. package/coverage/lcov-report/api/controllers/query/index.html +0 -126
  204. package/coverage/lcov-report/api/controllers/query/validation.js.html +0 -203
  205. package/dist/api/controllers/query/import/index.js +0 -79
  206. package/dist/api/controllers/query/import/sources/base/index.js +0 -63
  207. package/dist/api/controllers/query/import/sources/base/openapi.js +0 -42
  208. package/dist/api/controllers/query/import/sources/curl.js +0 -90
  209. package/dist/api/controllers/query/import/sources/openapi2.js +0 -139
  210. package/dist/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
  211. package/dist/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
  212. package/dist/api/controllers/query/validation.js +0 -37
  213. package/src/api/controllers/query/import/index.ts +0 -85
  214. package/src/api/controllers/query/import/sources/base/index.ts +0 -85
  215. package/src/api/controllers/query/import/sources/base/openapi.ts +0 -24
  216. package/src/api/controllers/query/import/sources/curl.ts +0 -94
  217. package/src/api/controllers/query/import/sources/openapi2.ts +0 -159
  218. package/src/api/controllers/query/import/sources/tests/curl/curl.spec.js +0 -104
  219. package/src/api/controllers/query/import/sources/tests/curl/data/delete.txt +0 -1
  220. package/src/api/controllers/query/import/sources/tests/curl/data/empty-body.txt +0 -2
  221. package/src/api/controllers/query/import/sources/tests/curl/data/get.txt +0 -1
  222. package/src/api/controllers/query/import/sources/tests/curl/data/headers.txt +0 -3
  223. package/src/api/controllers/query/import/sources/tests/curl/data/patch.txt +0 -2
  224. package/src/api/controllers/query/import/sources/tests/curl/data/path.txt +0 -1
  225. package/src/api/controllers/query/import/sources/tests/curl/data/post.txt +0 -2
  226. package/src/api/controllers/query/import/sources/tests/curl/data/put.txt +0 -2
  227. package/src/api/controllers/query/import/sources/tests/curl/data/query.txt +0 -1
  228. package/src/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.json +0 -253
  229. package/src/api/controllers/query/import/sources/tests/openapi2/data/crud/crud.yaml +0 -160
  230. package/src/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.json +0 -1054
  231. package/src/api/controllers/query/import/sources/tests/openapi2/data/petstore/petstore.yaml +0 -711
  232. package/src/api/controllers/query/import/sources/tests/openapi2/openapi2.spec.js +0 -239
  233. package/src/api/controllers/query/import/tests/index.spec.js +0 -115
  234. package/src/api/controllers/query/validation.js +0 -41
@@ -25,7 +25,7 @@
25
25
  <div class='fl pad1y space-right2'>
26
26
  <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>9/9</span>
28
+ <span class='fraction'>12/12</span>
29
29
  </div>
30
30
 
31
31
 
@@ -39,14 +39,14 @@
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/0</span>
42
+ <span class='fraction'>2/2</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>9/9</span>
49
+ <span class='fraction'>12/12</span>
50
50
  </div>
51
51
 
52
52
 
@@ -114,7 +114,37 @@
114
114
  <a name='L55'></a><a href='#L55'>55</a>
115
115
  <a name='L56'></a><a href='#L56'>56</a>
116
116
  <a name='L57'></a><a href='#L57'>57</a>
117
- <a name='L58'></a><a href='#L58'>58</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
117
+ <a name='L58'></a><a href='#L58'>58</a>
118
+ <a name='L59'></a><a href='#L59'>59</a>
119
+ <a name='L60'></a><a href='#L60'>60</a>
120
+ <a name='L61'></a><a href='#L61'>61</a>
121
+ <a name='L62'></a><a href='#L62'>62</a>
122
+ <a name='L63'></a><a href='#L63'>63</a>
123
+ <a name='L64'></a><a href='#L64'>64</a>
124
+ <a name='L65'></a><a href='#L65'>65</a>
125
+ <a name='L66'></a><a href='#L66'>66</a>
126
+ <a name='L67'></a><a href='#L67'>67</a>
127
+ <a name='L68'></a><a href='#L68'>68</a>
128
+ <a name='L69'></a><a href='#L69'>69</a>
129
+ <a name='L70'></a><a href='#L70'>70</a>
130
+ <a name='L71'></a><a href='#L71'>71</a>
131
+ <a name='L72'></a><a href='#L72'>72</a>
132
+ <a name='L73'></a><a href='#L73'>73</a>
133
+ <a name='L74'></a><a href='#L74'>74</a>
134
+ <a name='L75'></a><a href='#L75'>75</a>
135
+ <a name='L76'></a><a href='#L76'>76</a>
136
+ <a name='L77'></a><a href='#L77'>77</a>
137
+ <a name='L78'></a><a href='#L78'>78</a>
138
+ <a name='L79'></a><a href='#L79'>79</a>
139
+ <a name='L80'></a><a href='#L80'>80</a>
140
+ <a name='L81'></a><a href='#L81'>81</a>
141
+ <a name='L82'></a><a href='#L82'>82</a>
142
+ <a name='L83'></a><a href='#L83'>83</a>
143
+ <a name='L84'></a><a href='#L84'>84</a>
144
+ <a name='L85'></a><a href='#L85'>85</a>
145
+ <a name='L86'></a><a href='#L86'>86</a>
146
+ <a name='L87'></a><a href='#L87'>87</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
147
+ <span class="cline-any cline-yes">23x</span>
118
148
  <span class="cline-any cline-yes">23x</span>
119
149
  <span class="cline-any cline-yes">23x</span>
120
150
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -122,18 +152,37 @@
122
152
  <span class="cline-any cline-neutral">&nbsp;</span>
123
153
  <span class="cline-any cline-neutral">&nbsp;</span>
124
154
  <span class="cline-any cline-yes">23x</span>
155
+ <span class="cline-any cline-yes">23x</span>
125
156
  <span class="cline-any cline-neutral">&nbsp;</span>
126
157
  <span class="cline-any cline-neutral">&nbsp;</span>
127
158
  <span class="cline-any cline-neutral">&nbsp;</span>
128
159
  <span class="cline-any cline-neutral">&nbsp;</span>
129
160
  <span class="cline-any cline-yes">23x</span>
130
161
  <span class="cline-any cline-neutral">&nbsp;</span>
162
+ <span class="cline-any cline-yes">23x</span>
131
163
  <span class="cline-any cline-neutral">&nbsp;</span>
132
164
  <span class="cline-any cline-neutral">&nbsp;</span>
133
- <span class="cline-any cline-yes">23x</span>
134
165
  <span class="cline-any cline-neutral">&nbsp;</span>
135
166
  <span class="cline-any cline-yes">23x</span>
136
167
  <span class="cline-any cline-neutral">&nbsp;</span>
168
+ <span class="cline-any cline-neutral">&nbsp;</span>
169
+ <span class="cline-any cline-neutral">&nbsp;</span>
170
+ <span class="cline-any cline-neutral">&nbsp;</span>
171
+ <span class="cline-any cline-neutral">&nbsp;</span>
172
+ <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-neutral">&nbsp;</span>
174
+ <span class="cline-any cline-neutral">&nbsp;</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-neutral">&nbsp;</span>
177
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</span>
179
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
+ <span class="cline-any cline-neutral">&nbsp;</span>
181
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
+ <span class="cline-any cline-neutral">&nbsp;</span>
184
+ <span class="cline-any cline-neutral">&nbsp;</span>
185
+ <span class="cline-any cline-neutral">&nbsp;</span>
137
186
  <span class="cline-any cline-yes">23x</span>
138
187
  <span class="cline-any cline-neutral">&nbsp;</span>
139
188
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -144,6 +193,15 @@
144
193
  <span class="cline-any cline-neutral">&nbsp;</span>
145
194
  <span class="cline-any cline-neutral">&nbsp;</span>
146
195
  <span class="cline-any cline-neutral">&nbsp;</span>
196
+ <span class="cline-any cline-yes">23x</span>
197
+ <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-neutral">&nbsp;</span>
201
+ <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-neutral">&nbsp;</span>
203
+ <span class="cline-any cline-neutral">&nbsp;</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
147
205
  <span class="cline-any cline-neutral">&nbsp;</span>
148
206
  <span class="cline-any cline-neutral">&nbsp;</span>
149
207
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -174,23 +232,53 @@
174
232
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const Router = require("@koa/router")
175
233
  const queryController = require("../controllers/query")
176
234
  const authorized = require("../../middleware/authorized")
235
+ const Joi = require("joi")
177
236
  const {
178
237
  PermissionLevels,
179
238
  PermissionTypes,
180
239
  BUILDER,
181
240
  } = require("@budibase/auth/permissions")
241
+ const joiValidator = require("../../middleware/joi-validator")
182
242
  const {
183
243
  bodyResource,
184
244
  bodySubResource,
185
245
  paramResource,
186
246
  } = require("../../middleware/resourceId")
187
- const {
188
- generateQueryPreviewValidation,
189
- generateQueryValidation,
190
- } = require("../controllers/query/validation")
191
247
  &nbsp;
192
248
  const router = Router()
193
249
  &nbsp;
250
+ function generateQueryValidation() {
251
+ // prettier-ignore
252
+ return joiValidator.body(Joi.object({
253
+ _id: Joi.string(),
254
+ _rev: Joi.string(),
255
+ name: Joi.string().required(),
256
+ fields: Joi.object().required(),
257
+ datasourceId: Joi.string().required(),
258
+ readable: Joi.boolean(),
259
+ parameters: Joi.array().items(Joi.object({
260
+ name: Joi.string(),
261
+ default: Joi.string().allow(""),
262
+ })),
263
+ queryVerb: Joi.string().allow().required(),
264
+ extra: Joi.object().optional(),
265
+ schema: Joi.object({}).required().unknown(true),
266
+ transformer: Joi.string().optional(),
267
+ }))
268
+ }
269
+ &nbsp;
270
+ function generateQueryPreviewValidation() {
271
+ // prettier-ignore
272
+ return joiValidator.body(Joi.object({
273
+ fields: Joi.object().required(),
274
+ queryVerb: Joi.string().allow().required(),
275
+ extra: Joi.object().optional(),
276
+ datasourceId: Joi.string().required(),
277
+ transformer: Joi.string().optional(),
278
+ parameters: Joi.object({}).required().unknown(true)
279
+ }))
280
+ }
281
+ &nbsp;
194
282
  router
195
283
  .get("/api/queries", authorized(BUILDER), queryController.fetch)
196
284
  .post(
@@ -200,7 +288,6 @@ router
200
288
  generateQueryValidation(),
201
289
  queryController.save
202
290
  )
203
- .post("/api/queries/import", authorized(BUILDER), queryController.import)
204
291
  .post(
205
292
  "/api/queries/preview",
206
293
  bodyResource("datasourceId"),
@@ -235,7 +322,7 @@ module.exports = router
235
322
  <div class='footer quiet pad2 space-top1 center small'>
236
323
  Code coverage generated by
237
324
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
238
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
325
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
239
326
  </div>
240
327
  </div>
241
328
  <script src="../../prettify.js"></script>
@@ -172,7 +172,7 @@ module.exports = router
172
172
  <div class='footer quiet pad2 space-top1 center small'>
173
173
  Code coverage generated by
174
174
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
175
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
175
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
176
176
  </div>
177
177
  </div>
178
178
  <script src="../../prettify.js"></script>
@@ -106,7 +106,7 @@ module.exports = router
106
106
  <div class='footer quiet pad2 space-top1 center small'>
107
107
  Code coverage generated by
108
108
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
109
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
109
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
110
110
  </div>
111
111
  </div>
112
112
  <script src="../../prettify.js"></script>
@@ -826,7 +826,7 @@ module.exports = router
826
826
  <div class='footer quiet pad2 space-top1 center small'>
827
827
  Code coverage generated by
828
828
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
829
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
829
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
830
830
  </div>
831
831
  </div>
832
832
  <script src="../../prettify.js"></script>
@@ -199,7 +199,7 @@ module.exports = router
199
199
  <div class='footer quiet pad2 space-top1 center small'>
200
200
  Code coverage generated by
201
201
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
202
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
202
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
203
203
  </div>
204
204
  </div>
205
205
  <script src="../../prettify.js"></script>
@@ -94,7 +94,7 @@ const router = <span class="cstat-no" title="statement not covered" >Router()</s
94
94
  <div class='footer quiet pad2 space-top1 center small'>
95
95
  Code coverage generated by
96
96
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
97
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
97
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
98
98
  </div>
99
99
  </div>
100
100
  <script src="../../prettify.js"></script>
@@ -214,7 +214,7 @@ module.exports = router
214
214
  <div class='footer quiet pad2 space-top1 center small'>
215
215
  Code coverage generated by
216
216
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
217
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
217
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
218
218
  </div>
219
219
  </div>
220
220
  <script src="../../prettify.js"></script>
@@ -697,7 +697,7 @@ module.exports = router
697
697
  <div class='footer quiet pad2 space-top1 center small'>
698
698
  Code coverage generated by
699
699
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
700
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
700
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
701
701
  </div>
702
702
  </div>
703
703
  <script src="../../prettify.js"></script>
@@ -112,7 +112,7 @@ module.exports = router
112
112
  <div class='footer quiet pad2 space-top1 center small'>
113
113
  Code coverage generated by
114
114
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
115
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
115
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
116
116
  </div>
117
117
  </div>
118
118
  <script src="../../prettify.js"></script>
@@ -100,17 +100,7 @@
100
100
  <a name='L41'></a><a href='#L41'>41</a>
101
101
  <a name='L42'></a><a href='#L42'>42</a>
102
102
  <a name='L43'></a><a href='#L43'>43</a>
103
- <a name='L44'></a><a href='#L44'>44</a>
104
- <a name='L45'></a><a href='#L45'>45</a>
105
- <a name='L46'></a><a href='#L46'>46</a>
106
- <a name='L47'></a><a href='#L47'>47</a>
107
- <a name='L48'></a><a href='#L48'>48</a>
108
- <a name='L49'></a><a href='#L49'>49</a>
109
- <a name='L50'></a><a href='#L50'>50</a>
110
- <a name='L51'></a><a href='#L51'>51</a>
111
- <a name='L52'></a><a href='#L52'>52</a>
112
- <a name='L53'></a><a href='#L53'>53</a>
113
- <a name='L54'></a><a href='#L54'>54</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
103
+ <a name='L44'></a><a href='#L44'>44</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">23x</span>
114
104
  <span class="cline-any cline-yes">23x</span>
115
105
  <span class="cline-any cline-yes">23x</span>
116
106
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -152,16 +142,6 @@
152
142
  <span class="cline-any cline-neutral">&nbsp;</span>
153
143
  <span class="cline-any cline-neutral">&nbsp;</span>
154
144
  <span class="cline-any cline-neutral">&nbsp;</span>
155
- <span class="cline-any cline-neutral">&nbsp;</span>
156
- <span class="cline-any cline-neutral">&nbsp;</span>
157
- <span class="cline-any cline-neutral">&nbsp;</span>
158
- <span class="cline-any cline-neutral">&nbsp;</span>
159
- <span class="cline-any cline-neutral">&nbsp;</span>
160
- <span class="cline-any cline-neutral">&nbsp;</span>
161
- <span class="cline-any cline-neutral">&nbsp;</span>
162
- <span class="cline-any cline-neutral">&nbsp;</span>
163
- <span class="cline-any cline-neutral">&nbsp;</span>
164
- <span class="cline-any cline-neutral">&nbsp;</span>
165
145
  <span class="cline-any cline-yes">23x</span>
166
146
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const Router = require("@koa/router")
167
147
  const controller = require("../controllers/user")
@@ -204,16 +184,6 @@ router
204
184
  authorized(PermissionTypes.USER, PermissionLevels.WRITE),
205
185
  controller.syncUser
206
186
  )
207
- .post(
208
- "/api/users/flags",
209
- authorized(PermissionTypes.USER, PermissionLevels.WRITE),
210
- controller.setFlag
211
- )
212
- .get(
213
- "/api/users/flags",
214
- authorized(PermissionTypes.USER, PermissionLevels.READ),
215
- controller.getFlags
216
- )
217
187
  &nbsp;
218
188
  module.exports = router
219
189
  &nbsp;</pre></td></tr></table></pre>
@@ -223,7 +193,7 @@ module.exports = router
223
193
  <div class='footer quiet pad2 space-top1 center small'>
224
194
  Code coverage generated by
225
195
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
226
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
196
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
227
197
  </div>
228
198
  </div>
229
199
  <script src="../../prettify.js"></script>
@@ -157,7 +157,7 @@ module.exports = router
157
157
  <div class='footer quiet pad2 space-top1 center small'>
158
158
  Code coverage generated by
159
159
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
160
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
160
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
161
161
  </div>
162
162
  </div>
163
163
  <script src="../../prettify.js"></script>
@@ -190,7 +190,7 @@ module.exports = router
190
190
  <div class='footer quiet pad2 space-top1 center small'>
191
191
  Code coverage generated by
192
192
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
193
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
193
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
194
194
  </div>
195
195
  </div>
196
196
  <script src="../../prettify.js"></script>
@@ -277,7 +277,7 @@ exports.ACTION_DEFINITIONS = ACTION_DEFINITIONS
277
277
  <div class='footer quiet pad2 space-top1 center small'>
278
278
  Code coverage generated by
279
279
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
280
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
280
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
281
281
  </div>
282
282
  </div>
283
283
  <script src="../prettify.js"></script>
@@ -295,7 +295,7 @@ exports.getError = err =&gt; {
295
295
  <div class='footer quiet pad2 space-top1 center small'>
296
296
  Code coverage generated by
297
297
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
298
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
298
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
299
299
  </div>
300
300
  </div>
301
301
  <script src="../prettify.js"></script>
@@ -208,7 +208,7 @@ exports.queue = automationQueue
208
208
  <div class='footer quiet pad2 space-top1 center small'>
209
209
  Code coverage generated by
210
210
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
211
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
211
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
212
212
  </div>
213
213
  </div>
214
214
  <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">84.68% </span>
26
+ <span class="strong">84.15% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>177/209</span>
28
+ <span class='fraction'>170/202</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">80.2% </span>
33
+ <span class="strong">79.78% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>77/96</span>
35
+ <span class='fraction'>75/94</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">80.76% </span>
40
+ <span class="strong">80% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>21/26</span>
42
+ <span class='fraction'>20/25</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">84.68% </span>
47
+ <span class="strong">84.15% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>177/209</span>
49
+ <span class='fraction'>170/202</span>
50
50
  </div>
51
51
 
52
52
 
@@ -148,18 +148,18 @@
148
148
  </tr>
149
149
 
150
150
  <tr>
151
- <td class="file high" data-value="utils.js"><a href="utils.js.html">utils.js</a></td>
152
- <td data-value="81.08" class="pic high">
153
- <div class="chart"><div class="cover-fill" style="width: 81%"></div><div class="cover-empty" style="width: 19%"></div></div>
151
+ <td class="file medium" data-value="utils.js"><a href="utils.js.html">utils.js</a></td>
152
+ <td data-value="79.1" class="pic medium">
153
+ <div class="chart"><div class="cover-fill" style="width: 79%"></div><div class="cover-empty" style="width: 21%"></div></div>
154
154
  </td>
155
- <td data-value="81.08" class="pct high">81.08%</td>
156
- <td data-value="74" class="abs high">60/74</td>
157
- <td data-value="81.57" class="pct high">81.57%</td>
158
- <td data-value="38" class="abs high">31/38</td>
159
- <td data-value="90" class="pct high">90%</td>
160
- <td data-value="10" class="abs high">9/10</td>
161
- <td data-value="81.08" class="pct high">81.08%</td>
162
- <td data-value="74" class="abs high">60/74</td>
155
+ <td data-value="79.1" class="pct medium">79.1%</td>
156
+ <td data-value="67" class="abs medium">53/67</td>
157
+ <td data-value="80.55" class="pct high">80.55%</td>
158
+ <td data-value="36" class="abs high">29/36</td>
159
+ <td data-value="88.88" class="pct high">88.88%</td>
160
+ <td data-value="9" class="abs high">8/9</td>
161
+ <td data-value="79.1" class="pct medium">79.1%</td>
162
+ <td data-value="67" class="abs medium">53/67</td>
163
163
  </tr>
164
164
 
165
165
  </tbody>
@@ -170,7 +170,7 @@
170
170
  <div class='footer quiet pad2 space-top1 center small'>
171
171
  Code coverage generated by
172
172
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
173
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
173
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
174
174
  </div>
175
175
  </div>
176
176
  <script src="../prettify.js"></script>
@@ -115,7 +115,7 @@ exports.queue = queue
115
115
  <div class='footer quiet pad2 space-top1 center small'>
116
116
  Code coverage generated by
117
117
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
118
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
118
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
119
119
  </div>
120
120
  </div>
121
121
  <script src="../prettify.js"></script>
@@ -274,7 +274,7 @@ exports.run = <span class="fstat-no" title="function not covered" >as</span>ync
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 Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
277
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
278
278
  </div>
279
279
  </div>
280
280
  <script src="../../prettify.js"></script>
@@ -373,7 +373,7 @@ exports.run = async function ({ inputs, appId, emitter }) {
373
373
  <div class='footer quiet pad2 space-top1 center small'>
374
374
  Code coverage generated by
375
375
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
376
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
376
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
377
377
  </div>
378
378
  </div>
379
379
  <script src="../../prettify.js"></script>
@@ -181,7 +181,7 @@ exports.run = async function delay({ inputs }) {
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 Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
184
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
185
185
  </div>
186
186
  </div>
187
187
  <script src="../../prettify.js"></script>
@@ -340,7 +340,7 @@ exports.run = async function ({ inputs, appId, emitter }) {
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 Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
343
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
344
344
  </div>
345
345
  </div>
346
346
  <script src="../../prettify.js"></script>
@@ -313,7 +313,7 @@ exports.run = <span class="fstat-no" title="function not covered" >as</span>ync
313
313
  <div class='footer quiet pad2 space-top1 center small'>
314
314
  Code coverage generated by
315
315
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
316
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
316
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
317
317
  </div>
318
318
  </div>
319
319
  <script src="../../prettify.js"></script>
@@ -307,7 +307,7 @@ exports.run = <span class="fstat-no" title="function not covered" >as</span>ync
307
307
  <div class='footer quiet pad2 space-top1 center small'>
308
308
  Code coverage generated by
309
309
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
310
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
310
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
311
311
  </div>
312
312
  </div>
313
313
  <script src="../../prettify.js"></script>
@@ -274,7 +274,7 @@ exports.run = <span class="fstat-no" title="function not covered" >as</span>ync
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 Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
277
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
278
278
  </div>
279
279
  </div>
280
280
  <script src="../../prettify.js"></script>
@@ -337,7 +337,7 @@ exports.run = async function filter({ inputs }) {
337
337
  <div class='footer quiet pad2 space-top1 center small'>
338
338
  Code coverage generated by
339
339
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
340
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
340
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
341
341
  </div>
342
342
  </div>
343
343
  <script src="../../prettify.js"></script>
@@ -335,7 +335,7 @@
335
335
  <div class='footer quiet pad2 space-top1 center small'>
336
336
  Code coverage generated by
337
337
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
338
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
338
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
339
339
  </div>
340
340
  </div>
341
341
  <script src="../../prettify.js"></script>
@@ -325,7 +325,7 @@ exports.run = <span class="fstat-no" title="function not covered" >as</span>ync
325
325
  <div class='footer quiet pad2 space-top1 center small'>
326
326
  Code coverage generated by
327
327
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
328
- at Mon Dec 20 2021 09:21:37 GMT+0000 (Coordinated Universal Time)
328
+ at Tue Dec 21 2021 17:50:47 GMT+0000 (Coordinated Universal Time)
329
329
  </div>
330
330
  </div>
331
331
  <script src="../../prettify.js"></script>