@vandenberghinc/volt 1.1.26 → 1.1.28

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 (502) hide show
  1. package/backend/dist/cjs/{blacklist.d.ts → backend/src/blacklist.d.ts} +5 -3
  2. package/backend/dist/cjs/{blacklist.js → backend/src/blacklist.js} +8 -5
  3. package/backend/dist/cjs/{cli.js → backend/src/cli.js} +29 -47
  4. package/backend/dist/cjs/backend/src/database/collection.d.ts +1543 -0
  5. package/backend/dist/cjs/backend/src/database/collection.js +3042 -0
  6. package/backend/dist/cjs/backend/src/database/database.d.ts +66 -0
  7. package/backend/dist/cjs/{database → backend/src/database}/database.js +48 -43
  8. package/backend/dist/cjs/backend/src/database/filters/filters.d.ts +6 -0
  9. package/backend/dist/cjs/backend/src/database/filters/filters.js +15 -0
  10. package/backend/dist/cjs/backend/src/database/filters/strict_filter.d.ts +223 -0
  11. package/backend/dist/cjs/backend/src/database/filters/strict_filter.js +15 -0
  12. package/backend/dist/cjs/backend/src/database/filters/strict_filter_test.js +443 -0
  13. package/backend/dist/cjs/backend/src/database/filters/strict_filter_test_v0.js +15 -0
  14. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
  15. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.js +15 -0
  16. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
  17. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.js +15 -0
  18. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
  19. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.js +15 -0
  20. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
  21. package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.js +15 -0
  22. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.d.ts +165 -0
  23. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.js +15 -0
  24. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
  25. package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.js +355 -0
  26. package/backend/dist/cjs/backend/src/database/flatten.d.ts +75 -0
  27. package/backend/dist/cjs/{logger.js → backend/src/database/flatten.js} +18 -7
  28. package/backend/dist/cjs/backend/src/database/flatten_test.js +175 -0
  29. package/backend/dist/cjs/backend/src/database/quota/quota.d.ts +461 -0
  30. package/backend/dist/cjs/backend/src/database/quota/quota.js +1014 -0
  31. package/backend/dist/cjs/backend/src/database/quota/quota_v1.d.ts +534 -0
  32. package/backend/dist/cjs/backend/src/database/quota/quota_v1.js +1087 -0
  33. package/backend/dist/cjs/backend/src/database/quota/safe_int.d.ts +293 -0
  34. package/backend/dist/cjs/backend/src/database/quota/safe_int.js +573 -0
  35. package/backend/dist/{esm → cjs/backend/src}/endpoint.d.ts +69 -46
  36. package/backend/dist/cjs/{endpoint.js → backend/src/endpoint.js} +87 -101
  37. package/backend/dist/cjs/backend/src/errors/index.d.ts +7 -0
  38. package/backend/dist/cjs/backend/src/errors/index.js +25 -0
  39. package/backend/dist/{esm/utils.d.ts → cjs/backend/src/errors/internal_external.d.ts} +14 -22
  40. package/backend/dist/cjs/backend/src/errors/internal_external.js +85 -0
  41. package/backend/dist/cjs/backend/src/errors/invalid_usage_error.d.ts +38 -0
  42. package/backend/dist/cjs/{mutex.js → backend/src/errors/invalid_usage_error.js} +20 -37
  43. package/backend/dist/cjs/backend/src/errors/system_error.d.ts +230 -0
  44. package/backend/dist/cjs/backend/src/errors/system_error.js +393 -0
  45. package/backend/dist/cjs/backend/src/events.d.ts +54 -0
  46. package/backend/dist/cjs/backend/src/events.js +15 -0
  47. package/backend/dist/cjs/{frontend.js → backend/src/frontend.js} +1 -1
  48. package/backend/dist/cjs/{image_endpoint.d.ts → backend/src/image_endpoint.d.ts} +16 -1
  49. package/backend/dist/cjs/{image_endpoint.js → backend/src/image_endpoint.js} +3 -5
  50. package/backend/dist/cjs/backend/src/logger.d.ts +5 -0
  51. package/backend/dist/cjs/backend/src/logger.js +15 -0
  52. package/backend/dist/cjs/backend/src/meta.d.ts +64 -0
  53. package/backend/dist/cjs/{meta.js → backend/src/meta.js} +9 -12
  54. package/backend/dist/cjs/backend/src/payments/paddle.d.ts +326 -0
  55. package/backend/dist/cjs/{payments → backend/src/payments}/paddle.js +377 -327
  56. package/backend/dist/cjs/backend/src/plugins/browser.d.ts +1 -0
  57. package/backend/dist/cjs/backend/src/plugins/browser.js +15 -0
  58. package/backend/dist/cjs/backend/src/plugins/mail/mail.d.ts +248 -0
  59. package/backend/dist/cjs/backend/src/plugins/mail/mail.js +379 -0
  60. package/backend/dist/{esm → cjs/backend/src}/plugins/mail/ui.d.ts +23 -0
  61. package/backend/dist/cjs/backend/src/plugins/pdf.d.ts +1 -0
  62. package/backend/dist/cjs/backend/src/rate_limit.d.ts +145 -0
  63. package/backend/dist/cjs/backend/src/rate_limit.js +549 -0
  64. package/backend/dist/cjs/{route.d.ts → backend/src/route.d.ts} +3 -10
  65. package/backend/dist/cjs/{route.js → backend/src/route.js} +23 -21
  66. package/backend/dist/cjs/backend/src/server.d.ts +485 -0
  67. package/backend/dist/cjs/{server.js → backend/src/server.js} +688 -873
  68. package/backend/dist/cjs/backend/src/splash_screen.d.ts +80 -0
  69. package/backend/dist/cjs/{splash_screen.js → backend/src/splash_screen.js} +24 -3
  70. package/backend/dist/cjs/backend/src/status.d.ts +74 -0
  71. package/backend/dist/cjs/{status.js → backend/src/status.js} +64 -64
  72. package/backend/dist/cjs/backend/src/stream.d.ts +376 -0
  73. package/backend/dist/cjs/{stream.js → backend/src/stream.js} +299 -276
  74. package/backend/dist/cjs/backend/src/users.d.ts +807 -0
  75. package/backend/dist/cjs/backend/src/users.js +1971 -0
  76. package/backend/dist/cjs/backend/src/utils.d.ts +16 -0
  77. package/backend/dist/cjs/{utils.js → backend/src/utils.js} +14 -77
  78. package/backend/dist/{esm → cjs/backend/src}/view.d.ts +33 -11
  79. package/backend/dist/cjs/backend/src/view.js +508 -0
  80. package/backend/dist/{esm → cjs/backend/src}/volt.d.ts +10 -1
  81. package/backend/dist/cjs/{volt.js → backend/src/volt.js} +8 -5
  82. package/backend/dist/cjs/frontend/src/modules/request.d.ts +70 -0
  83. package/backend/dist/cjs/frontend/src/modules/request.js +99 -0
  84. package/backend/dist/esm/{blacklist.d.ts → backend/src/blacklist.d.ts} +5 -3
  85. package/backend/dist/esm/{blacklist.js → backend/src/blacklist.js} +9 -6
  86. package/backend/dist/esm/{cli.js → backend/src/cli.js} +43 -60
  87. package/backend/dist/esm/backend/src/database/collection.d.ts +1543 -0
  88. package/backend/dist/esm/backend/src/database/collection.js +3510 -0
  89. package/backend/dist/esm/backend/src/database/database.d.ts +66 -0
  90. package/backend/dist/esm/{database → backend/src/database}/database.js +62 -103
  91. package/backend/dist/esm/backend/src/database/document.d.ts +1 -0
  92. package/backend/dist/esm/backend/src/database/document.js +558 -0
  93. package/backend/dist/esm/backend/src/database/filters/filters.d.ts +6 -0
  94. package/backend/dist/esm/backend/src/database/filters/filters.js +1 -0
  95. package/backend/dist/esm/backend/src/database/filters/strict_filter.d.ts +223 -0
  96. package/backend/dist/esm/backend/src/database/filters/strict_filter.js +3 -0
  97. package/backend/dist/esm/backend/src/database/filters/strict_filter_test.d.ts +1 -0
  98. package/backend/dist/esm/backend/src/database/filters/strict_filter_test.js +505 -0
  99. package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.d.ts +1 -0
  100. package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.js +712 -0
  101. package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
  102. package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.js +5 -0
  103. package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
  104. package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.js +44 -0
  105. package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
  106. package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.js +5 -0
  107. package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
  108. package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.js +1 -0
  109. package/backend/dist/esm/backend/src/database/filters/strict_update_filter.d.ts +165 -0
  110. package/backend/dist/esm/backend/src/database/filters/strict_update_filter.js +5 -0
  111. package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
  112. package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.js +405 -0
  113. package/backend/dist/esm/backend/src/database/flatten.d.ts +75 -0
  114. package/backend/dist/esm/backend/src/database/flatten.js +22 -0
  115. package/backend/dist/esm/backend/src/database/flatten_test.d.ts +1 -0
  116. package/backend/dist/esm/backend/src/database/flatten_test.js +174 -0
  117. package/backend/dist/esm/backend/src/database/quota/quota.d.ts +461 -0
  118. package/backend/dist/esm/backend/src/database/quota/quota.js +1118 -0
  119. package/backend/dist/esm/backend/src/database/quota/quota_v1.d.ts +534 -0
  120. package/backend/dist/esm/backend/src/database/quota/quota_v1.js +1242 -0
  121. package/backend/dist/esm/backend/src/database/quota/safe_int.d.ts +293 -0
  122. package/backend/dist/esm/backend/src/database/quota/safe_int.js +602 -0
  123. package/backend/dist/{cjs → esm/backend/src}/endpoint.d.ts +69 -46
  124. package/backend/dist/esm/{endpoint.js → backend/src/endpoint.js} +136 -127
  125. package/backend/dist/esm/backend/src/errors/index.d.ts +7 -0
  126. package/backend/dist/esm/backend/src/errors/index.js +7 -0
  127. package/backend/dist/{cjs/utils.d.ts → esm/backend/src/errors/internal_external.d.ts} +14 -22
  128. package/backend/dist/esm/backend/src/errors/internal_external.js +70 -0
  129. package/backend/dist/esm/backend/src/errors/invalid_usage_error.d.ts +38 -0
  130. package/backend/dist/esm/backend/src/errors/invalid_usage_error.js +30 -0
  131. package/backend/dist/esm/backend/src/errors/system_error.d.ts +230 -0
  132. package/backend/dist/esm/backend/src/errors/system_error.js +402 -0
  133. package/backend/dist/esm/backend/src/events.d.ts +54 -0
  134. package/backend/dist/esm/backend/src/events.js +5 -0
  135. package/backend/dist/esm/{frontend.js → backend/src/frontend.js} +1 -1
  136. package/backend/dist/esm/{image_endpoint.d.ts → backend/src/image_endpoint.d.ts} +16 -1
  137. package/backend/dist/esm/{image_endpoint.js → backend/src/image_endpoint.js} +16 -20
  138. package/backend/dist/esm/backend/src/logger.d.ts +5 -0
  139. package/backend/dist/esm/backend/src/logger.js +8 -0
  140. package/backend/dist/esm/backend/src/meta.d.ts +64 -0
  141. package/backend/dist/esm/{meta.js → backend/src/meta.js} +15 -54
  142. package/backend/dist/esm/backend/src/payments/paddle.d.ts +326 -0
  143. package/backend/dist/esm/{payments → backend/src/payments}/paddle.js +417 -452
  144. package/backend/dist/esm/backend/src/plugins/browser.d.ts +1 -0
  145. package/backend/dist/esm/backend/src/plugins/browser.js +170 -0
  146. package/backend/dist/esm/backend/src/plugins/mail/mail.d.ts +248 -0
  147. package/backend/dist/esm/backend/src/plugins/mail/mail.js +389 -0
  148. package/backend/dist/{cjs → esm/backend/src}/plugins/mail/ui.d.ts +23 -0
  149. package/backend/dist/esm/{plugins → backend/src/plugins}/mail/ui.js +3 -6
  150. package/backend/dist/esm/backend/src/plugins/pdf.d.ts +1 -0
  151. package/backend/dist/esm/{plugins → backend/src/plugins}/pdf.js +3 -3
  152. package/backend/dist/esm/backend/src/rate_limit.d.ts +145 -0
  153. package/backend/dist/esm/backend/src/rate_limit.js +667 -0
  154. package/backend/dist/esm/{route.d.ts → backend/src/route.d.ts} +3 -10
  155. package/backend/dist/esm/{route.js → backend/src/route.js} +26 -21
  156. package/backend/dist/esm/backend/src/server.d.ts +485 -0
  157. package/backend/dist/esm/{server.js → backend/src/server.js} +891 -1441
  158. package/backend/dist/esm/backend/src/splash_screen.d.ts +80 -0
  159. package/backend/dist/esm/{splash_screen.js → backend/src/splash_screen.js} +42 -55
  160. package/backend/dist/esm/backend/src/status.d.ts +74 -0
  161. package/backend/dist/esm/backend/src/status.js +199 -0
  162. package/backend/dist/esm/backend/src/stream.d.ts +376 -0
  163. package/backend/dist/esm/{stream.js → backend/src/stream.js} +327 -292
  164. package/backend/dist/esm/backend/src/users.d.ts +809 -0
  165. package/backend/dist/esm/backend/src/users.js +2140 -0
  166. package/backend/dist/esm/backend/src/utils.d.ts +16 -0
  167. package/backend/dist/esm/{utils.js → backend/src/utils.js} +20 -81
  168. package/backend/dist/{cjs → esm/backend/src}/view.d.ts +33 -11
  169. package/backend/dist/esm/{view.js → backend/src/view.js} +266 -86
  170. package/backend/dist/{cjs → esm/backend/src}/volt.d.ts +10 -1
  171. package/backend/dist/esm/{volt.js → backend/src/volt.js} +7 -4
  172. package/backend/dist/esm/frontend/src/modules/request.d.ts +70 -0
  173. package/backend/dist/esm/frontend/src/modules/request.js +117 -0
  174. package/frontend/dist/backend/src/database/collection.d.ts +1543 -0
  175. package/frontend/dist/backend/src/database/collection.js +3510 -0
  176. package/frontend/dist/backend/src/database/database.d.ts +66 -0
  177. package/frontend/dist/backend/src/database/database.js +196 -0
  178. package/frontend/dist/backend/src/database/filters/filters.d.ts +6 -0
  179. package/frontend/dist/backend/src/database/filters/filters.js +1 -0
  180. package/frontend/dist/backend/src/database/filters/strict_filter.d.ts +223 -0
  181. package/frontend/dist/backend/src/database/filters/strict_filter.js +3 -0
  182. package/frontend/dist/backend/src/database/filters/strict_update_filter.d.ts +165 -0
  183. package/frontend/dist/backend/src/database/filters/strict_update_filter.js +5 -0
  184. package/frontend/dist/backend/src/database/flatten.d.ts +75 -0
  185. package/frontend/dist/backend/src/database/flatten.js +22 -0
  186. package/frontend/dist/backend/src/endpoint.d.ts +204 -0
  187. package/frontend/dist/backend/src/endpoint.js +570 -0
  188. package/frontend/dist/backend/src/errors/index.d.ts +7 -0
  189. package/frontend/dist/backend/src/errors/index.js +7 -0
  190. package/frontend/dist/backend/src/errors/internal_external.d.ts +38 -0
  191. package/frontend/dist/backend/src/errors/internal_external.js +70 -0
  192. package/frontend/dist/backend/src/errors/invalid_usage_error.d.ts +38 -0
  193. package/frontend/dist/backend/src/errors/invalid_usage_error.js +30 -0
  194. package/frontend/dist/backend/src/errors/system_error.d.ts +230 -0
  195. package/frontend/dist/backend/src/errors/system_error.js +402 -0
  196. package/frontend/dist/backend/src/events.d.ts +54 -0
  197. package/frontend/dist/backend/src/events.js +5 -0
  198. package/frontend/dist/backend/src/frontend.d.ts +11 -0
  199. package/frontend/dist/backend/src/frontend.js +12 -0
  200. package/frontend/dist/backend/src/image_endpoint.d.ts +39 -0
  201. package/frontend/dist/backend/src/image_endpoint.js +202 -0
  202. package/frontend/dist/backend/src/meta.d.ts +64 -0
  203. package/frontend/dist/backend/src/meta.js +110 -0
  204. package/frontend/dist/backend/src/payments/paddle.d.ts +326 -0
  205. package/frontend/dist/backend/src/payments/paddle.js +2256 -0
  206. package/frontend/dist/backend/src/plugins/mail/mail.d.ts +248 -0
  207. package/frontend/dist/backend/src/plugins/mail/mail.js +389 -0
  208. package/{backend/dist/esm/plugins/mail.d.ts → frontend/dist/backend/src/plugins/mail/ui.d.ts} +23 -0
  209. package/{backend/dist/esm/plugins/mail.js → frontend/dist/backend/src/plugins/mail/ui.js} +3 -6
  210. package/frontend/dist/backend/src/rate_limit.d.ts +145 -0
  211. package/frontend/dist/backend/src/rate_limit.js +673 -0
  212. package/frontend/dist/backend/src/route.d.ts +35 -0
  213. package/frontend/dist/backend/src/route.js +212 -0
  214. package/frontend/dist/backend/src/server.d.ts +485 -0
  215. package/frontend/dist/backend/src/server.js +2670 -0
  216. package/frontend/dist/backend/src/splash_screen.d.ts +80 -0
  217. package/frontend/dist/backend/src/splash_screen.js +135 -0
  218. package/frontend/dist/backend/src/status.d.ts +74 -0
  219. package/frontend/dist/backend/src/status.js +199 -0
  220. package/frontend/dist/backend/src/stream.d.ts +376 -0
  221. package/frontend/dist/backend/src/stream.js +1007 -0
  222. package/frontend/dist/backend/src/users.d.ts +807 -0
  223. package/frontend/dist/backend/src/users.js +2118 -0
  224. package/frontend/dist/backend/src/utils.d.ts +16 -0
  225. package/frontend/dist/backend/src/utils.js +241 -0
  226. package/frontend/dist/backend/src/view.d.ts +162 -0
  227. package/frontend/dist/backend/src/view.js +720 -0
  228. package/frontend/dist/frontend/src/elements/base.d.ts +4414 -0
  229. package/frontend/dist/{elements → frontend/src/elements}/base.js +3624 -260
  230. package/frontend/dist/frontend/src/elements/module.d.ts +95 -0
  231. package/frontend/dist/{elements → frontend/src/elements}/module.js +53 -52
  232. package/frontend/dist/frontend/src/elements/types.d.ts +52 -0
  233. package/frontend/dist/frontend/src/elements/types.js +5 -0
  234. package/frontend/dist/frontend/src/modules/attachment.d.ts +126 -0
  235. package/frontend/dist/frontend/src/modules/attachment.js +306 -0
  236. package/frontend/dist/frontend/src/modules/auth.d.ts +44 -0
  237. package/frontend/dist/frontend/src/modules/auth.js +80 -0
  238. package/frontend/dist/{modules → frontend/src/modules}/color.js +2 -2
  239. package/frontend/dist/frontend/src/modules/compression.d.ts +39 -0
  240. package/frontend/dist/frontend/src/modules/compression.js +102 -0
  241. package/frontend/dist/frontend/src/modules/cookies.d.ts +44 -0
  242. package/frontend/dist/frontend/src/modules/cookies.js +143 -0
  243. package/frontend/dist/frontend/src/modules/events.d.ts +31 -0
  244. package/frontend/dist/frontend/src/modules/events.js +74 -0
  245. package/frontend/dist/frontend/src/modules/google.d.ts +23 -0
  246. package/frontend/dist/frontend/src/modules/google.js +52 -0
  247. package/frontend/dist/frontend/src/modules/meta.d.ts +14 -0
  248. package/frontend/dist/{modules → frontend/src/modules}/meta.js +9 -7
  249. package/frontend/dist/{modules → frontend/src/modules}/paddle.d.ts +37 -134
  250. package/frontend/dist/{modules → frontend/src/modules}/paddle.js +620 -568
  251. package/frontend/dist/frontend/src/modules/request.d.ts +70 -0
  252. package/frontend/dist/frontend/src/modules/request.js +117 -0
  253. package/frontend/dist/frontend/src/modules/settings.d.ts +3 -0
  254. package/frontend/dist/frontend/src/modules/settings.js +5 -0
  255. package/frontend/dist/frontend/src/modules/statics.d.ts +21 -0
  256. package/frontend/dist/{modules → frontend/src/modules}/statics.js +15 -18
  257. package/frontend/dist/frontend/src/modules/support.d.ts +30 -0
  258. package/frontend/dist/frontend/src/modules/support.js +53 -0
  259. package/frontend/dist/{modules → frontend/src/modules}/theme.d.ts +67 -0
  260. package/frontend/dist/{modules → frontend/src/modules}/theme.js +68 -38
  261. package/frontend/dist/frontend/src/modules/themes.d.ts +12 -0
  262. package/frontend/dist/frontend/src/modules/themes.js +22 -0
  263. package/frontend/dist/frontend/src/modules/user.d.ts +164 -0
  264. package/frontend/dist/frontend/src/modules/user.js +268 -0
  265. package/frontend/dist/frontend/src/modules/utils.d.ts +176 -0
  266. package/frontend/dist/frontend/src/modules/utils.js +569 -0
  267. package/frontend/dist/frontend/src/types/gradient.d.ts +29 -0
  268. package/frontend/dist/{types → frontend/src/types}/gradient.js +14 -18
  269. package/frontend/dist/frontend/src/ui/border_button.d.ts +94 -0
  270. package/frontend/dist/{ui → frontend/src/ui}/border_button.js +7 -13
  271. package/frontend/dist/frontend/src/ui/button.d.ts +28 -0
  272. package/frontend/dist/{ui → frontend/src/ui}/button.js +21 -12
  273. package/frontend/dist/frontend/src/ui/canvas.d.ts +138 -0
  274. package/frontend/dist/{ui → frontend/src/ui}/canvas.js +88 -55
  275. package/frontend/dist/frontend/src/ui/checkbox.d.ts +74 -0
  276. package/frontend/dist/{ui → frontend/src/ui}/checkbox.js +80 -41
  277. package/frontend/dist/{ui → frontend/src/ui}/code.d.ts +73 -6
  278. package/frontend/dist/{ui → frontend/src/ui}/code.js +55 -52
  279. package/frontend/dist/{ui → frontend/src/ui}/context_menu.d.ts +4 -0
  280. package/frontend/dist/{ui → frontend/src/ui}/context_menu.js +12 -17
  281. package/frontend/dist/{ui → frontend/src/ui}/css.d.ts +4 -0
  282. package/frontend/dist/{ui → frontend/src/ui}/css.js +3 -3
  283. package/frontend/dist/{ui → frontend/src/ui}/divider.d.ts +4 -0
  284. package/frontend/dist/{ui → frontend/src/ui}/divider.js +3 -3
  285. package/frontend/dist/{ui → frontend/src/ui}/dropdown.d.ts +57 -2
  286. package/frontend/dist/{ui → frontend/src/ui}/dropdown.js +87 -94
  287. package/frontend/dist/{ui → frontend/src/ui}/for_each.d.ts +4 -0
  288. package/frontend/dist/{ui → frontend/src/ui}/for_each.js +3 -3
  289. package/frontend/dist/{ui → frontend/src/ui}/form.d.ts +6 -2
  290. package/frontend/dist/{ui → frontend/src/ui}/form.js +10 -7
  291. package/frontend/dist/frontend/src/ui/frame_modes.d.ts +37 -0
  292. package/frontend/dist/{ui → frontend/src/ui}/frame_modes.js +16 -22
  293. package/frontend/dist/{ui → frontend/src/ui}/google_map.d.ts +4 -0
  294. package/frontend/dist/{ui → frontend/src/ui}/google_map.js +4 -4
  295. package/frontend/dist/{ui → frontend/src/ui}/gradient.d.ts +4 -0
  296. package/frontend/dist/{ui → frontend/src/ui}/gradient.js +3 -3
  297. package/frontend/dist/{ui → frontend/src/ui}/image.d.ts +4 -0
  298. package/frontend/dist/{ui → frontend/src/ui}/image.js +5 -5
  299. package/frontend/dist/frontend/src/ui/input.d.ts +392 -0
  300. package/frontend/dist/{ui → frontend/src/ui}/input.js +346 -360
  301. package/frontend/dist/{ui → frontend/src/ui}/link.d.ts +4 -0
  302. package/frontend/dist/{ui → frontend/src/ui}/link.js +3 -3
  303. package/frontend/dist/{ui → frontend/src/ui}/list.d.ts +4 -0
  304. package/frontend/dist/{ui → frontend/src/ui}/list.js +12 -6
  305. package/frontend/dist/frontend/src/ui/loader_button.d.ts +80 -0
  306. package/frontend/dist/{ui → frontend/src/ui}/loader_button.js +35 -47
  307. package/frontend/dist/frontend/src/ui/loaders.d.ts +57 -0
  308. package/frontend/dist/{ui → frontend/src/ui}/loaders.js +11 -11
  309. package/frontend/dist/{ui → frontend/src/ui}/popup.d.ts +11 -6
  310. package/frontend/dist/{ui → frontend/src/ui}/popup.js +32 -18
  311. package/frontend/dist/frontend/src/ui/pseudo.d.ts +44 -0
  312. package/frontend/dist/{ui → frontend/src/ui}/pseudo.js +84 -8
  313. package/frontend/dist/{ui → frontend/src/ui}/scroller.d.ts +14 -2
  314. package/frontend/dist/{ui → frontend/src/ui}/scroller.js +37 -43
  315. package/frontend/dist/{ui → frontend/src/ui}/slider.d.ts +5 -1
  316. package/frontend/dist/{ui → frontend/src/ui}/slider.js +4 -4
  317. package/frontend/dist/{ui → frontend/src/ui}/spacer.d.ts +4 -0
  318. package/frontend/dist/{ui → frontend/src/ui}/spacer.js +3 -3
  319. package/frontend/dist/{ui → frontend/src/ui}/span.d.ts +4 -0
  320. package/frontend/dist/{ui → frontend/src/ui}/span.js +3 -3
  321. package/frontend/dist/{ui → frontend/src/ui}/stack.d.ts +4 -0
  322. package/frontend/dist/{ui → frontend/src/ui}/stack.js +3 -9
  323. package/frontend/dist/frontend/src/ui/steps.d.ts +131 -0
  324. package/frontend/dist/{ui → frontend/src/ui}/steps.js +30 -45
  325. package/frontend/dist/{ui → frontend/src/ui}/style.d.ts +4 -0
  326. package/frontend/dist/{ui → frontend/src/ui}/style.js +3 -3
  327. package/frontend/dist/{ui → frontend/src/ui}/switch.d.ts +5 -1
  328. package/frontend/dist/{ui → frontend/src/ui}/switch.js +4 -4
  329. package/frontend/dist/{ui → frontend/src/ui}/table.d.ts +4 -0
  330. package/frontend/dist/{ui → frontend/src/ui}/table.js +6 -6
  331. package/frontend/dist/{ui → frontend/src/ui}/tabs.d.ts +45 -3
  332. package/frontend/dist/{ui → frontend/src/ui}/tabs.js +65 -40
  333. package/frontend/dist/{ui → frontend/src/ui}/text.d.ts +4 -0
  334. package/frontend/dist/{ui → frontend/src/ui}/text.js +3 -3
  335. package/frontend/dist/frontend/src/ui/title.d.ts +91 -0
  336. package/frontend/dist/frontend/src/ui/title.js +272 -0
  337. package/frontend/dist/{ui → frontend/src/ui}/view.d.ts +4 -0
  338. package/frontend/dist/{ui → frontend/src/ui}/view.js +3 -3
  339. package/frontend/dist/{volt.d.ts → frontend/src/volt.d.ts} +3 -0
  340. package/frontend/dist/{volt.js → frontend/src/volt.js} +4 -0
  341. package/frontend/tools/bundle_d_ts.js +71 -0
  342. package/frontend/tools/convert_to_jsdoc_input.txt +9452 -0
  343. package/frontend/tools/convert_to_jsdoc_output.txt +7626 -0
  344. package/frontend/tools/convert_to_jsdoc_tmp.js +345 -0
  345. package/package.json +11 -12
  346. package/backend/dist/cjs/database/collection.d.ts +0 -160
  347. package/backend/dist/cjs/database/collection.js +0 -842
  348. package/backend/dist/cjs/database/database.d.ts +0 -121
  349. package/backend/dist/cjs/database/document.d.ts +0 -131
  350. package/backend/dist/cjs/database/document.js +0 -224
  351. package/backend/dist/cjs/database.d.ts +0 -502
  352. package/backend/dist/cjs/database.js +0 -2248
  353. package/backend/dist/cjs/logger.d.ts +0 -3
  354. package/backend/dist/cjs/meta.d.ts +0 -50
  355. package/backend/dist/cjs/mutex.d.ts +0 -24
  356. package/backend/dist/cjs/payments/paddle.d.ts +0 -160
  357. package/backend/dist/cjs/plugins/browser.d.ts +0 -36
  358. package/backend/dist/cjs/plugins/browser.js +0 -198
  359. package/backend/dist/cjs/plugins/css.d.ts +0 -11
  360. package/backend/dist/cjs/plugins/css.js +0 -80
  361. package/backend/dist/cjs/plugins/mail.d.ts +0 -277
  362. package/backend/dist/cjs/plugins/mail.js +0 -1370
  363. package/backend/dist/cjs/plugins/ts/compiler.d.ts +0 -139
  364. package/backend/dist/cjs/plugins/ts/compiler.js +0 -750
  365. package/backend/dist/cjs/plugins/ts/preprocessing.d.ts +0 -14
  366. package/backend/dist/cjs/plugins/ts/preprocessing.js +0 -440
  367. package/backend/dist/cjs/rate_limit.d.ts +0 -63
  368. package/backend/dist/cjs/rate_limit.js +0 -348
  369. package/backend/dist/cjs/request.deprc.d.ts +0 -48
  370. package/backend/dist/cjs/request.deprc.js +0 -572
  371. package/backend/dist/cjs/response.deprc.d.ts +0 -55
  372. package/backend/dist/cjs/response.deprc.js +0 -275
  373. package/backend/dist/cjs/server.d.ts +0 -342
  374. package/backend/dist/cjs/splash_screen.d.ts +0 -35
  375. package/backend/dist/cjs/status.d.ts +0 -61
  376. package/backend/dist/cjs/stream.d.ts +0 -79
  377. package/backend/dist/cjs/users.d.ts +0 -111
  378. package/backend/dist/cjs/users.js +0 -1817
  379. package/backend/dist/cjs/view.js +0 -352
  380. package/backend/dist/cjs/vinc.dev.d.ts +0 -3
  381. package/backend/dist/cjs/vinc.dev.js +0 -7
  382. package/backend/dist/css/adyen.css +0 -92
  383. package/backend/dist/css/volt.css +0 -70
  384. package/backend/dist/esm/database/collection.d.ts +0 -160
  385. package/backend/dist/esm/database/collection.js +0 -1328
  386. package/backend/dist/esm/database/database.d.ts +0 -121
  387. package/backend/dist/esm/database/document.d.ts +0 -131
  388. package/backend/dist/esm/database/document.js +0 -247
  389. package/backend/dist/esm/database.d.ts +0 -502
  390. package/backend/dist/esm/database.js +0 -2423
  391. package/backend/dist/esm/file_watcher.js +0 -329
  392. package/backend/dist/esm/logger.d.ts +0 -3
  393. package/backend/dist/esm/logger.js +0 -11
  394. package/backend/dist/esm/meta.d.ts +0 -50
  395. package/backend/dist/esm/mutex.d.ts +0 -24
  396. package/backend/dist/esm/mutex.js +0 -48
  397. package/backend/dist/esm/payments/paddle.d.ts +0 -160
  398. package/backend/dist/esm/plugins/browser.d.ts +0 -36
  399. package/backend/dist/esm/plugins/browser.js +0 -176
  400. package/backend/dist/esm/plugins/css.d.ts +0 -11
  401. package/backend/dist/esm/plugins/css.js +0 -90
  402. package/backend/dist/esm/plugins/ts/compiler.d.ts +0 -139
  403. package/backend/dist/esm/plugins/ts/compiler.js +0 -1194
  404. package/backend/dist/esm/plugins/ts/preprocessing.d.ts +0 -14
  405. package/backend/dist/esm/plugins/ts/preprocessing.js +0 -726
  406. package/backend/dist/esm/rate_limit.d.ts +0 -63
  407. package/backend/dist/esm/rate_limit.js +0 -417
  408. package/backend/dist/esm/request.deprc.d.ts +0 -48
  409. package/backend/dist/esm/request.deprc.js +0 -572
  410. package/backend/dist/esm/response.deprc.d.ts +0 -55
  411. package/backend/dist/esm/response.deprc.js +0 -275
  412. package/backend/dist/esm/server.d.ts +0 -342
  413. package/backend/dist/esm/splash_screen.d.ts +0 -35
  414. package/backend/dist/esm/status.d.ts +0 -61
  415. package/backend/dist/esm/status.js +0 -197
  416. package/backend/dist/esm/stream.d.ts +0 -79
  417. package/backend/dist/esm/users.d.ts +0 -111
  418. package/backend/dist/esm/users.js +0 -1935
  419. package/backend/dist/esm/vinc.dev.d.ts +0 -3
  420. package/backend/dist/esm/vinc.dev.js +0 -7
  421. package/frontend/dist/elements/base.d.ts +0 -9889
  422. package/frontend/dist/elements/module.d.ts +0 -30
  423. package/frontend/dist/modules/array.d.ts +0 -94
  424. package/frontend/dist/modules/array.js +0 -634
  425. package/frontend/dist/modules/auth.d.ts +0 -46
  426. package/frontend/dist/modules/auth.js +0 -139
  427. package/frontend/dist/modules/colors.d.ts +0 -1
  428. package/frontend/dist/modules/colors.js +0 -417
  429. package/frontend/dist/modules/compression.d.ts +0 -6
  430. package/frontend/dist/modules/compression.js +0 -999
  431. package/frontend/dist/modules/cookies.d.ts +0 -18
  432. package/frontend/dist/modules/cookies.js +0 -167
  433. package/frontend/dist/modules/date.d.ts +0 -142
  434. package/frontend/dist/modules/date.js +0 -493
  435. package/frontend/dist/modules/events.d.ts +0 -8
  436. package/frontend/dist/modules/events.js +0 -91
  437. package/frontend/dist/modules/google.d.ts +0 -11
  438. package/frontend/dist/modules/google.js +0 -54
  439. package/frontend/dist/modules/meta.d.ts +0 -10
  440. package/frontend/dist/modules/mutex.d.ts +0 -7
  441. package/frontend/dist/modules/mutex.js +0 -51
  442. package/frontend/dist/modules/number.d.ts +0 -16
  443. package/frontend/dist/modules/number.js +0 -23
  444. package/frontend/dist/modules/object.d.ts +0 -52
  445. package/frontend/dist/modules/object.js +0 -383
  446. package/frontend/dist/modules/scheme.d.ts +0 -227
  447. package/frontend/dist/modules/scheme.js +0 -531
  448. package/frontend/dist/modules/settings.d.ts +0 -3
  449. package/frontend/dist/modules/settings.js +0 -4
  450. package/frontend/dist/modules/statics.d.ts +0 -5
  451. package/frontend/dist/modules/string.d.ts +0 -124
  452. package/frontend/dist/modules/string.js +0 -745
  453. package/frontend/dist/modules/support.d.ts +0 -19
  454. package/frontend/dist/modules/support.js +0 -103
  455. package/frontend/dist/modules/themes.d.ts +0 -8
  456. package/frontend/dist/modules/themes.js +0 -18
  457. package/frontend/dist/modules/user.d.ts +0 -59
  458. package/frontend/dist/modules/user.js +0 -280
  459. package/frontend/dist/modules/utils.d.ts +0 -87
  460. package/frontend/dist/modules/utils.js +0 -923
  461. package/frontend/dist/types/gradient.d.ts +0 -12
  462. package/frontend/dist/ui/border_button.d.ts +0 -152
  463. package/frontend/dist/ui/button.d.ts +0 -21
  464. package/frontend/dist/ui/canvas.d.ts +0 -56
  465. package/frontend/dist/ui/checkbox.d.ts +0 -52
  466. package/frontend/dist/ui/frame_modes.d.ts +0 -25
  467. package/frontend/dist/ui/input.d.ts +0 -241
  468. package/frontend/dist/ui/loader_button.d.ts +0 -93
  469. package/frontend/dist/ui/loaders.d.ts +0 -57
  470. package/frontend/dist/ui/pseudo.d.ts +0 -16
  471. package/frontend/dist/ui/steps.d.ts +0 -59
  472. package/frontend/dist/ui/title.d.ts +0 -21
  473. package/frontend/dist/ui/title.js +0 -121
  474. package/frontend/examples/dashboard/dashboard.ts +0 -776
  475. /package/backend/dist/cjs/{cli.d.ts → backend/src/cli.d.ts} +0 -0
  476. /package/backend/dist/cjs/{file_watcher.d.ts → backend/src/database/document.d.ts} +0 -0
  477. /package/backend/dist/cjs/{file_watcher.js → backend/src/database/document.js} +0 -0
  478. /package/backend/dist/cjs/{plugins/pdf.d.ts → backend/src/database/filters/strict_filter_test.d.ts} +0 -0
  479. /package/backend/dist/{esm/file_watcher.d.ts → cjs/backend/src/database/filters/strict_filter_test_v0.d.ts} +0 -0
  480. /package/backend/dist/{esm/plugins/pdf.d.ts → cjs/backend/src/database/flatten_test.d.ts} +0 -0
  481. /package/backend/dist/cjs/{frontend.d.ts → backend/src/frontend.d.ts} +0 -0
  482. /package/backend/dist/cjs/{plugins → backend/src/plugins}/communication.d.ts +0 -0
  483. /package/backend/dist/cjs/{plugins → backend/src/plugins}/communication.js +0 -0
  484. /package/backend/dist/cjs/{plugins → backend/src/plugins}/mail/ui.js +0 -0
  485. /package/backend/dist/cjs/{plugins → backend/src/plugins}/pdf.js +0 -0
  486. /package/backend/dist/cjs/{plugins → backend/src/plugins}/thread_monitor.d.ts +0 -0
  487. /package/backend/dist/cjs/{plugins → backend/src/plugins}/thread_monitor.js +0 -0
  488. /package/backend/dist/cjs/{vinc.d.ts → backend/src/vinc.d.ts} +0 -0
  489. /package/backend/dist/cjs/{vinc.js → backend/src/vinc.js} +0 -0
  490. /package/backend/dist/esm/{cli.d.ts → backend/src/cli.d.ts} +0 -0
  491. /package/backend/dist/esm/{frontend.d.ts → backend/src/frontend.d.ts} +0 -0
  492. /package/backend/dist/esm/{plugins → backend/src/plugins}/communication.d.ts +0 -0
  493. /package/backend/dist/esm/{plugins → backend/src/plugins}/communication.js +0 -0
  494. /package/backend/dist/esm/{plugins → backend/src/plugins}/thread_monitor.d.ts +0 -0
  495. /package/backend/dist/esm/{plugins → backend/src/plugins}/thread_monitor.js +0 -0
  496. /package/backend/dist/esm/{vinc.d.ts → backend/src/vinc.d.ts} +0 -0
  497. /package/backend/dist/esm/{vinc.js → backend/src/vinc.js} +0 -0
  498. /package/frontend/dist/{elements → frontend/src/elements}/register_element.d.ts +0 -0
  499. /package/frontend/dist/{elements → frontend/src/elements}/register_element.js +0 -0
  500. /package/frontend/dist/{modules → frontend/src/modules}/color.d.ts +0 -0
  501. /package/frontend/dist/{ui → frontend/src/ui}/ui.d.ts +0 -0
  502. /package/frontend/dist/{ui → frontend/src/ui}/ui.js +0 -0
@@ -1,17 +1,17 @@
1
- /*
2
- * Author: Daan van den Bergh
3
- * Copyright: © 2022 - 2024 Daan van den Bergh.
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2022 - 2025 Daan van den Bergh. All rights reserved
4
4
  */
5
5
  // ---------------------------------------------------------
6
6
  // Imports.
7
7
  import * as vlib from "@vandenberghinc/vlib";
8
8
  import * as vts from "@vandenberghinc/vlib/vts";
9
9
  import * as vhighlight from "@vandenberghinc/vhighlight";
10
- import Meta from "./meta.js";
11
- import logger from "./logger.js";
10
+ import zlib from 'zlib';
11
+ import { Meta } from "./meta.js";
12
12
  import { Route } from './route.js';
13
- import Frontend from './frontend.js';
14
- const { log, error } = logger;
13
+ import { Frontend } from './frontend.js';
14
+ import * as crypto from "crypto";
15
15
  const { debug } = vlib;
16
16
  // ---------------------------------------------------------
17
17
  // View.
@@ -101,7 +101,7 @@ export class View {
101
101
  static includes = [];
102
102
  static links = [];
103
103
  static body_style = null; // css string style.
104
- static splash_screen = null; // SplashScreen object.
104
+ static splash_screen = undefined; // SplashScreen object.
105
105
  // Private static attributes,
106
106
  static _volt_css;
107
107
  static _vhighlight_css;
@@ -122,16 +122,16 @@ export class View {
122
122
  _src;
123
123
  _embedded_sources;
124
124
  is_js_ts_view;
125
- html;
125
+ _html;
126
126
  raw_html;
127
127
  _bundle;
128
128
  payments;
129
129
  // vhighlight?: string | undefined;
130
130
  min_device_width;
131
- _server;
132
- _endpoint;
131
+ server;
132
+ endpoint;
133
133
  // Constructor.
134
- constructor({ source = null, callback = null, includes = [], links = [], templates = {}, meta = new Meta(), jquery = false, lang = "en", body_style = null, splash_screen = null, tree_shaking = false, mangle = false, min_device_width = 600, _src, }) {
134
+ constructor({ source = null, callback = null, includes = [], links = [], templates = {}, meta = new Meta(), jquery = false, lang = "en", body_style = null, splash_screen = undefined, tree_shaking = false, mangle = false, min_device_width = 600, _src, }) {
135
135
  // Arguments.
136
136
  this.source = source;
137
137
  this.callback = callback;
@@ -167,7 +167,7 @@ export class View {
167
167
  // Drop duplicate includes.
168
168
  this.includes = vlib.Array.drop_duplicates(this.includes);
169
169
  // Attributes.
170
- this.html = undefined;
170
+ this._html = undefined;
171
171
  this._bundle = undefined;
172
172
  }
173
173
  // Initialize.
@@ -178,48 +178,32 @@ export class View {
178
178
  if (endpoint === undefined) {
179
179
  throw Error("Invalid usage, define parameter \"endpoint\".");
180
180
  }
181
- this._server = server;
182
- this._endpoint = endpoint;
181
+ this.server = server;
182
+ this.endpoint = endpoint;
183
183
  }
184
184
  // Bundle the compiled typescript / javascript dynamically on demand to optimize server startup for development purposes.
185
185
  async _dynamic_bundle() {
186
186
  // Server & endpoint.
187
- if (this._server === undefined || this._endpoint === undefined) {
187
+ if (this.server === undefined || this.endpoint === undefined) {
188
188
  throw Error("View has not been initialized with \"View._initialize()\" yet.");
189
189
  }
190
190
  // Bundle.
191
- // const had_bundle = this.bundle !== undefined;
192
- // if (bundle != null) {
193
- // // also accept already bundled for server.js in case multiple endpoint paths serve the same bundle.
194
- // this.bundle = bundle;
195
- // } else {
196
- debug(3, this._endpoint?.route?.id, `: Bundling entry path "${this.source_path?.str()}".`);
191
+ debug(3, this.endpoint?.route?.id, `: Bundling entry path "${this.source_path?.str()}".`);
197
192
  this._bundle = await vts.bundle({
198
- entry_paths: [this.source_path?.str() ?? ""],
199
- output: `/tmp/${this._endpoint.route.method}_${this.source_path.str().replace(/\//g, "_")}.js`, // esbuild requires an output path to resolve .css and .ttf files etc which can be imported by libraries (such as monaco-editor).
193
+ include: this.source_path ? [this.source_path?.str()] : [],
194
+ output: `/tmp/${this.endpoint.route.method}_${this.source_path.str().replace(/\//g, "_")}.js`, // esbuild requires an output path to resolve .css and .ttf files etc which can be imported by libraries (such as monaco-editor).
200
195
  minify: false, //this._server.production,
201
196
  platform: "browser",
202
- // format: "esm",
203
- format: "iife",
197
+ format: "esm",
198
+ // format: "iife", // can causes issues with node_modules imports.
204
199
  target: "es2022",
205
- // target: "esnext",
206
- // sourcemap: this._server.production ? false : "inline",
200
+ // sourcemap: this.server.production ? false : "inline",
207
201
  extract_inputs: true, // since bundle.inputs is used by server.js.
208
202
  tree_shaking: true,
209
203
  });
210
- // console.log("Bundle:", this._bundle);
211
- if (this._bundle.errors.length > 0) {
212
- error(this._endpoint?.route?.id, `: Encountered an error while bundling "${this.source}".\n`, this._bundle.debug());
213
- return;
214
- }
215
- // }
216
204
  // Set options based on inputs.
217
205
  this.payments = this._bundle.inputs.find((path) => path.endsWith("/modules/paddle.js"));
218
206
  // this.vhighlight = this.bundle.inputs.find((path: string) => path.endsWith("/vhighlight.js"));
219
- // Rebuild html.
220
- await this._build_html();
221
- // Response.
222
- // return this.bundle;
223
207
  }
224
208
  /** Ensure the view is bundled when required. */
225
209
  async ensure_bundle() {
@@ -227,39 +211,187 @@ export class View {
227
211
  return this._dynamic_bundle();
228
212
  }
229
213
  }
214
+ /** Create an error HTML file when errors are encountered during the bundle process. */
215
+ async _build_bundle_err_html() {
216
+ // Dont show in production.
217
+ if (this.server?.production) {
218
+ throw new Error("Encountered an error while bundling in production.");
219
+ }
220
+ // A nonce identifier.
221
+ const nonce_identifier = "{{__VOLT_NONCE__}}";
222
+ // Inspect bundle.
223
+ const bundle = await vts.inspect_bundle({
224
+ include: this.source_path ? [this.source_path?.str()] : [],
225
+ output: vlib.Path.tmp().join(`${this.endpoint?.route.method}_${this.source_path.str().replace(/\//g, "_")}.js`), // esbuild requires an output path to resolve .css and .ttf files etc which can be imported by libraries (such as monaco-editor).
226
+ minify: false, //this._server.production,
227
+ platform: "browser",
228
+ format: "esm",
229
+ // format: "iife", // can causes issues with node_modules imports.
230
+ target: "es2022",
231
+ tree_shaking: true,
232
+ });
233
+ // Log to server
234
+ this.server?.log.error(this.endpoint?.route?.id, `: Encountered an error while bundling "${this.source}".\n${bundle.debug({ limit: 25 })}`);
235
+ // HTML escape function
236
+ const escape_html = (str) => vlib.Color.to_html(str
237
+ .replace(/&/g, '&')
238
+ .replace(/</g, '&lt;')
239
+ .replace(/>/g, '&gt;')
240
+ .replace(/"/g, '&quot;')
241
+ .replace(/'/g, '&#39;'));
242
+ if (this.server?.production) {
243
+ this._html = `
244
+ <!DOCTYPE html>
245
+ <html lang='${this.lang}'>
246
+ <head>
247
+ <meta charset="UTF-8">
248
+ <meta name="viewport" content="width=device-width, initial-scale=1">
249
+ <title>Bundling Error</title>
250
+ <style nonce="${nonce_identifier}">
251
+ body {
252
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; padding: 2rem; background: #f5f5f5;
253
+ }
254
+ h1 {
255
+ color: #d32f2f; margin-top: 0;
256
+ }
257
+ #error-container {
258
+ max-width: 800px; margin: 0 auto; background: white; padding: 2rem; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);
259
+ }
260
+ </style>
261
+ </head>
262
+ <body>
263
+ <div id="error-container">
264
+ <h1>Bundling Error</h1>
265
+ <p>An error occurred while processing your request. Please contact support if this issue persists.</p>
266
+ </div>
267
+ </body>
268
+ </html>
269
+ `.dedent(false);
270
+ }
271
+ else {
272
+ // Development mode - show full debug info
273
+ const formatted_import_chains = bundle.format_import_chains();
274
+ const formatted_errors = bundle.format_errors();
275
+ this._html = `
276
+ <!DOCTYPE html>
277
+ <html lang='${this.lang}'>
278
+ <head>
279
+ <meta charset="UTF-8">
280
+ <meta name="viewport" content="width=device-width, initial-scale=1">
281
+ <title>Bundling Error - ${escape_html(this.source || 'Unknown')}</title>
282
+ <style nonce="${nonce_identifier}">
283
+ body {
284
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
285
+ margin: 0;
286
+ padding: 1rem;
287
+ background: #1e1e1e;
288
+ color: #d4d4d4;
289
+ }
290
+ .container {
291
+ max-width: 1200px;
292
+ margin: 0 auto;
293
+ }
294
+ h1 {
295
+ color: #FFFFFF;
296
+ font-size: 1.5rem;
297
+ margin-bottom: 0.5rem;
298
+ }
299
+ .source {
300
+ color: #C0C0C0;
301
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
302
+ font-size: 0.875rem;
303
+ margin-bottom: 1rem;
304
+ }
305
+ pre {
306
+ background: #2d2d2d;
307
+ border: 1px solid #3e3e3e;
308
+ border-radius: 4px;
309
+ padding: 1rem;
310
+ overflow-x: auto;
311
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
312
+ font-size: 0.875rem;
313
+ line-height: 1.5;
314
+ margin: 20px 0px 0px 0px;
315
+ }
316
+ .error-count {
317
+ background: #f44336;
318
+ color: white;
319
+ padding: 0.25rem 0.5rem;
320
+ border-radius: 4px;
321
+ font-size: 0.875rem;
322
+ display: inline-block;
323
+ margin-bottom: 1rem;
324
+ }
325
+ </style>
326
+ </head>
327
+ <body>
328
+ <div class="container">
329
+ <h1>Bundle Error</h1>
330
+ <div class="source">Source: ${escape_html(this.source || 'Unknown')}</div>
331
+ <div class="error-count">${bundle.errors.length} error${bundle.errors.length === 1 ? '' : 's'}</div>
332
+ <pre>${escape_html(bundle.debug({ limit: -1 }))}</pre>
333
+ <!--<h2>Metafile</h2>
334
+ <pre>${escape_html(bundle.metafile ?? "No metafile detected.")}</pre>
335
+ <h2>Input files</h2>
336
+ <pre>${escape_html(bundle.inputs.length ? bundle.inputs.join("\n") : "No input files detected.")}</pre>
337
+ <h2>Import Chains</h2>
338
+ <pre>${escape_html(formatted_import_chains.length
339
+ ? formatted_import_chains.join("\n")
340
+ : "No import chains detected.")}</pre>
341
+ <h2>Encountered Errors</h2>
342
+ <pre>${escape_html(formatted_errors.length ? formatted_errors.join("\n") : "No errors detected.")}</pre>
343
+ -->
344
+ </div>
345
+ </body>
346
+ </html>
347
+ `.dedent(false);
348
+ }
349
+ this.html_nonce_split = this._html.split(nonce_identifier);
350
+ }
230
351
  // Build html.
231
352
  async _build_html() {
353
+ // A nonce identifier.
354
+ const nonce_identifier = "{{__VOLT_NONCE__}}";
232
355
  // Server & endpoint.
233
- if (this._server == null || this._endpoint == null) {
356
+ if (this.server == null || this.endpoint == null) {
234
357
  throw Error("View has not been initialized with \"View._initialize()\" yet.");
235
358
  }
236
359
  // Bundle js files automatically.
237
360
  if (this.is_js_ts_view && !this._bundle) {
238
361
  await this._dynamic_bundle();
239
362
  }
363
+ if (this._bundle != null && this._bundle.errors.length > 0) {
364
+ return this._build_bundle_err_html();
365
+ }
240
366
  // Vars.
241
- const line_break = this._server.production ? "\n" : "\n";
367
+ const line_break = this.server.production ? "\n" : "\n";
242
368
  const has_bundle = this._bundle != null && typeof this._bundle === "object";
369
+ // console.log("Bundle:", this._bundle)
243
370
  // Initialize html.
244
- this.html = "";
371
+ this._html = "";
245
372
  // Doctype.
246
- this.html += `<!DOCTYPE html><html style='min-width:100%;min-height:100%;' lang='${this.lang}'>${line_break}`;
373
+ this._html += `<!DOCTYPE html><html lang='${this.lang}'>${line_break}`;
247
374
  // Headers.
248
- this.html += `<head>${line_break}`;
375
+ this._html += `<head>${line_break}`;
249
376
  // Meta.
250
377
  if (this.meta) {
251
- this.html += this.meta.build_html(this._server.full_domain) + line_break;
378
+ this._html += this.meta.build_html(this.server.full_domain) + line_break;
252
379
  }
253
380
  // this.html = "Hello World!";
254
381
  // return;
255
382
  // ------------------------------------------------------------------------------------------
256
383
  // Stylesheets & links.
384
+ // Default stylesheet to avoid inline `style=""`.
385
+ this._html += `<style nonce="${nonce_identifier}">` +
386
+ `html { min-width:100%;min-height:100%; }` +
387
+ `body { width:100vw;height:100vh;margin:0;padding:0;${this.body_style ?? ""} }` +
388
+ `</style>${line_break}`;
257
389
  // Embed stylesheet.
258
390
  const embed_stylesheet = (url, embed) => {
259
391
  if (embed == null &&
260
392
  url != null &&
261
393
  url.charAt(0) === "/") {
262
- for (const endpoint of this._server.endpoints.values()) {
394
+ for (const endpoint of this.server.endpoints.values()) {
263
395
  if (url === endpoint.route.endpoint_str) {
264
396
  if (typeof endpoint.raw_data === "string") {
265
397
  embed = endpoint.raw_data;
@@ -272,7 +404,7 @@ export class View {
272
404
  }
273
405
  }
274
406
  if (embed) {
275
- this.html += `<style>${line_break}${embed}${line_break}</style>${line_break}`;
407
+ this._html += `<style nonce="${nonce_identifier}">${line_break}${embed}${line_break}</style>${line_break}`;
276
408
  if (url) {
277
409
  this._embedded_sources.push(url);
278
410
  }
@@ -302,8 +434,8 @@ export class View {
302
434
  embed_stylesheet(undefined, View._vhighlight_css);
303
435
  // Add custom stylesheet for minimum device width on smaller screens.
304
436
  if (this.min_device_width != null) {
305
- this.html += `
306
- <script>
437
+ this._html += `
438
+ <script nonce="${nonce_identifier}">
307
439
  let has_min_width = false;
308
440
  const viewport = document.querySelector('meta[name="viewport"]');
309
441
  function set_min_width() {
@@ -329,7 +461,7 @@ export class View {
329
461
  </script>
330
462
  `.dedent();
331
463
  }
332
- // this.html += `<script>
464
+ // this.html += `<script nonce="${nonce_identifier}">
333
465
  // // This version prevents the infinite loop
334
466
  // let resizeTimeout;
335
467
  // let viewportChangeInProgress = false;
@@ -362,7 +494,7 @@ export class View {
362
494
  // Custom links.
363
495
  this.links.forEach((url) => {
364
496
  if (typeof url === "string") {
365
- this.html += `<link rel="stylesheet" href="${url}">`;
497
+ this._html += `<link rel="stylesheet" href="${url}">`;
366
498
  }
367
499
  else if (typeof url === "object") {
368
500
  // Embed content.
@@ -374,13 +506,13 @@ export class View {
374
506
  include_link_async(url);
375
507
  }
376
508
  else {
377
- this.html += "<link";
509
+ this._html += "<link";
378
510
  Object.keys(url).forEach((key) => {
379
511
  if (key !== "embed") {
380
- this.html += ` ${key}="${url[key]}"`;
512
+ this._html += ` ${key}="${url[key]}"`;
381
513
  }
382
514
  });
383
- this.html += ">" + line_break;
515
+ this._html += ">" + line_break;
384
516
  }
385
517
  }
386
518
  }
@@ -390,21 +522,17 @@ export class View {
390
522
  });
391
523
  // Add include links script.
392
524
  if (include_links_script) {
393
- this.html += `<script>${line_break}${include_links_script}${line_break}</script>${line_break}`;
525
+ this._html += `<script nonce="${nonce_identifier}">${line_break}${include_links_script}${line_break}</script>${line_break}`;
394
526
  }
395
527
  // End headers.
396
- this.html += "</head>" + line_break;
528
+ this._html += "</head>" + line_break;
397
529
  // ------------------------------------------------------------------------------------------
398
530
  // Body.
399
531
  // Body.
400
- this.html += "<body id='body' style='width:100vw;height:100vh;margin:0;padding:0;";
401
- if (this.body_style != null) {
402
- this.html += this.body_style;
403
- }
404
- this.html += "'>" + line_break;
532
+ this._html += "<body id='body'>";
405
533
  // Create splash screen.
406
534
  if (this.splash_screen != null) {
407
- this.html += this.splash_screen.html + line_break;
535
+ this._html += this.splash_screen.html + line_break;
408
536
  }
409
537
  // ------------------------------------------------------------------------------------------
410
538
  // Include scripts.
@@ -412,7 +540,7 @@ export class View {
412
540
  // Returns `false` when the endpoint is not found.
413
541
  const embed_script = (url) => {
414
542
  let embed;
415
- for (const endpoint of this._server.endpoints.values()) {
543
+ for (const endpoint of this.server.endpoints.values()) {
416
544
  if (url === endpoint.route.endpoint_str &&
417
545
  (endpoint.raw_data != null || endpoint.data != null)) {
418
546
  embed = endpoint;
@@ -422,10 +550,10 @@ export class View {
422
550
  if (embed && (embed.raw_data || embed.data)) {
423
551
  // Dont embed code.
424
552
  if (embed.content_type === "application/javascript") {
425
- this.html += `<script>${line_break}${embed.raw_data || embed.data}${line_break}</script>${line_break}`;
553
+ this._html += `<script nonce="${nonce_identifier}">${line_break}${embed.raw_data || embed.data}${line_break}</script>${line_break}`;
426
554
  }
427
555
  else {
428
- this.html += `<script type='${embed.content_type}'>${line_break}${embed.raw_data || embed.data}${line_break}</script>${line_break}`;
556
+ this._html += `<script nonce="${nonce_identifier}" type='${embed.content_type}'>${line_break}${embed.raw_data || embed.data}${line_break}</script>${line_break}`;
429
557
  }
430
558
  this._embedded_sources.push(url);
431
559
  return true;
@@ -437,30 +565,30 @@ export class View {
437
565
  // 3rd party js includes.
438
566
  if (this.jquery) {
439
567
  // Keep first since it needs to be included before volt.
440
- this.html += "<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js'></script>" + line_break;
568
+ this._html += `<script nonce="${nonce_identifier}" src='https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js'></script>${line_break}`;
441
569
  }
442
- if (this._server.google_tag !== undefined) {
570
+ if (this.server.google_tag !== undefined) {
443
571
  // this.html += `<script async src="https://www.googletagmanager.com/gtag/js?id=${this._server.google_tag}" onload='volt.google._initialize()'></script>`;
444
- include_js_script += `__volt_incl_js("https://www.googletagmanager.com/gtag/js?id=${this._server.google_tag}");${line_break}`;
572
+ include_js_script += `__volt_incl_js("https://www.googletagmanager.com/gtag/js?id=${this.server.google_tag}");${line_break}`;
445
573
  }
446
574
  // Primary volt includes do not add them to cached_code since they need to be included before any other includes.
447
575
  // Otherwise when including several files, most of them embedded and one not, then the not embedded will not have access to volt.
448
576
  // Since volt is
449
- // embed_script("/volt/volt.js", false);
577
+ // embed_script("/volt/api/v1/volt.js", false);
450
578
  // Add volt static aspect ratios.
451
579
  // @todo volt.static
452
- this.html += `<script>${line_break}window.volt_statics_aspect_ratios = ${JSON.stringify(Object.fromEntries(this._server.statics_aspect_ratios))}${line_break}</script>${line_break}`;
580
+ this._html += `<script nonce="${nonce_identifier}">${line_break}window.volt_statics_aspect_ratios = ${JSON.stringify(Object.fromEntries(this.server.statics_aspect_ratios))}${line_break}</script>${line_break}`;
453
581
  // Embed other scripts.
454
- if (this._server.payments) {
455
- if (this._server.payments.type === "paddle") {
456
- // embed_script("/volt/payments/paddle.js", false); // no longer required due to auto imports.
582
+ if (this.server.payments) {
583
+ if (this.server.payments.type === "paddle") {
584
+ // embed_script("/volt/api/v1/payments/paddle.js", false); // no longer required due to auto imports.
457
585
  if (this.payments) {
458
586
  include_js_script += `__volt_incl_js("https://cdn.paddle.com/paddle/v2/paddle.js");${line_break}`;
459
587
  }
460
588
  }
461
589
  }
462
590
  // Add the include js script.
463
- this.html += `<script>${line_break}${include_js_script.trimEnd()}${line_break}</script>${line_break}`;
591
+ this._html += `<script nonce="${nonce_identifier}">${line_break}${include_js_script.trimEnd()}${line_break}</script>${line_break}`;
464
592
  // Additional js includes.
465
593
  this.includes.forEach((url) => {
466
594
  // Embed content.
@@ -468,16 +596,16 @@ export class View {
468
596
  // Include.
469
597
  else {
470
598
  if (typeof url === "string") {
471
- this.html += `<script src='${url}'></script>${line_break}`;
599
+ this._html += `<script nonce="${nonce_identifier}" src='${url}'></script>${line_break}`;
472
600
  }
473
601
  else if (typeof url === "object") {
474
- this.html += "<script";
602
+ this._html += `<script nonce="${nonce_identifier}"`;
475
603
  Object.keys(url).forEach((key) => {
476
604
  if (key !== "embed") {
477
- this.html += ` ${key}="${url[key]}"`;
605
+ this._html += ` ${key}="${url[key]}"`;
478
606
  }
479
607
  });
480
- this.html += "></script>" + line_break;
608
+ this._html += "></script>" + line_break;
481
609
  }
482
610
  else {
483
611
  throw Error("Invalid type for a js include, the valid value types are \"string\" and \"object\".");
@@ -485,12 +613,12 @@ export class View {
485
613
  }
486
614
  });
487
615
  // Add direct source code.
488
- if (has_bundle && typeof this._bundle.code === "string") {
489
- this.html += `<script type='module'>${line_break}${this._bundle.code}${line_break}</script>${line_break}`;
616
+ if (has_bundle && this._bundle != null && typeof this._bundle.code === "string") {
617
+ this._html += `<script nonce="${nonce_identifier}" type='module'>${line_break}${this._bundle.code}${line_break}</script>${line_break}`;
490
618
  }
491
619
  // Include the source.
492
620
  else if (typeof this.source === "string") {
493
- this.html += `<script>${line_break}${await new vlib.Path(this.source).load()}${line_break}</script>${line_break}`;
621
+ this._html += `<script nonce="${nonce_identifier}">${line_break}${await new vlib.Path(this.source).load()}${line_break}</script>${line_break}`;
494
622
  }
495
623
  // JS code.
496
624
  else if (this.callback != null) {
@@ -520,21 +648,73 @@ export class View {
520
648
  // utils.set_compiled_cache(cache_path, code, code_hash);
521
649
  // }
522
650
  // Add.
523
- this.html += `<script>${line_break}(${code})()${line_break}</script>${line_break}`;
651
+ this._html += `<script nonce="${nonce_identifier}">${line_break}(${code})()${line_break}</script>${line_break}`;
524
652
  // cached_code += `;(${code})();`;
525
653
  }
526
654
  // Close body.
527
- this.html += "</body>" + line_break;
655
+ this._html += "</body>" + line_break;
528
656
  // End.
529
- this.html += "</html>" + line_break;
657
+ this._html += "</html>" + line_break;
658
+ // Split by nonce.
659
+ this.html_nonce_split = this._html.split(nonce_identifier);
660
+ // console.log("Built HTML for endpoint", this.endpoint?.route?.endpoint_str + "\n" +this.html.slice(0, 25_000) + (this.html.length > 25_000 ? "..." : ""));
661
+ }
662
+ /** Retrieve the content length of the built html. */
663
+ async content_length() {
664
+ // Create nonce.
665
+ const nonce = crypto.randomBytes(16).toString('base64');
666
+ // Build html if needed.
667
+ if (!this._html) {
668
+ await this._build_html();
669
+ }
670
+ // Create html.
671
+ let html = this.html_nonce_split.join(nonce);
672
+ // Return.
673
+ return html.length;
674
+ }
675
+ /** Retrieve the HTML. */
676
+ async html(opts) {
677
+ // Create nonce.
678
+ const nonce = crypto.randomBytes(16).toString('base64');
679
+ // Build html if needed.
680
+ if (!this._html) {
681
+ await this._build_html();
682
+ }
683
+ // Create html.
684
+ let html = this.html_nonce_split.join(nonce);
685
+ // Content length.
686
+ const content_length = Buffer.byteLength(html, 'utf-8');
687
+ // Compress.
688
+ if (opts?.compress) {
689
+ html = zlib.gzipSync(html, { level: zlib.constants.Z_BEST_COMPRESSION });
690
+ }
691
+ // Return.
692
+ return {
693
+ html,
694
+ content_length,
695
+ nonce,
696
+ };
530
697
  }
531
698
  // Serve a client.
532
- _serve(stream, status_code = 200) {
533
- debug(2, this._endpoint?.route?.id, ": Serving HTML ", this.html?.slice(0, 50), "...");
699
+ async _serve(stream, status_code = 200, opts) {
700
+ debug(2, this.endpoint?.route?.id, ": Serving HTML ", this._html?.slice(0, 50), "...");
701
+ // Create html.
702
+ const html = await this.html(opts);
703
+ // Compute content length on view & when not defined.
704
+ stream.set_header("Content-Length", html.content_length.toString());
705
+ // Set nonce.
706
+ const csp = stream.get_header("Content-Security-Policy");
707
+ if (csp == null || typeof csp !== "string") {
708
+ throw new Error("Cannot serve HTML without a string typed Content-Security-Policy (CSP) header defined on the endpoint. This should by default be defined by the Server.");
709
+ }
710
+ const new_csp = csp.replace(/(script-src|style-src)([^;]*)/g, (_, g1, g2) => `${g1}${g2} 'nonce-${html.nonce}'`);
711
+ stream.set_header("Content-Security-Policy", new_csp);
712
+ // Generate a nonce here and use it both in the CSP header and the inline script.
534
713
  stream.send({
535
714
  status: status_code,
536
715
  headers: { "Content-Type": "text/html" },
537
- body: this.html,
716
+ data: html.html,
538
717
  });
539
718
  }
719
+ html_nonce_split;
540
720
  }
@@ -1,4 +1,8 @@
1
- export { ExternalError, InternalError } from "./utils.js";
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2022 - 2025 Daan van den Bergh. All rights reserved
4
+ */
5
+ export * from "./errors/index.js";
2
6
  export * from "./status.js";
3
7
  export * from "./meta.js";
4
8
  export * from "./splash_screen.js";
@@ -9,7 +13,12 @@ export * from "./server.js";
9
13
  export * from "./database/database.js";
10
14
  export * from "./database/document.js";
11
15
  export * from "./database/collection.js";
16
+ export * from "./database/quota/quota.js";
17
+ export * from "./database/quota/safe_int.js";
12
18
  export * from "./rate_limit.js";
13
19
  export * from "./logger.js";
20
+ export * from "./events.js";
21
+ export { User } from "./users.js";
14
22
  export * as Mail from "./plugins/mail/ui.js";
15
23
  export * from "./frontend.js";
24
+ export type { Request } from "../../frontend/src/modules/request.js";
@@ -1,11 +1,11 @@
1
- /*
2
- * Author: Daan van den Bergh
3
- * Copyright: © 2022 - 2024 Daan van den Bergh.
1
+ /**
2
+ * @author Daan van den Bergh
3
+ * @copyright © 2022 - 2025 Daan van den Bergh. All rights reserved
4
4
  */
5
5
  // ---------------------------------------------------------
6
6
  // Exports.
7
7
  // Create volt lib.
8
- export { ExternalError, InternalError } from "./utils.js";
8
+ export * from "./errors/index.js";
9
9
  export * from "./status.js";
10
10
  export * from "./meta.js";
11
11
  export * from "./splash_screen.js";
@@ -16,8 +16,11 @@ export * from "./server.js";
16
16
  export * from "./database/database.js";
17
17
  export * from "./database/document.js";
18
18
  export * from "./database/collection.js";
19
+ export * from "./database/quota/quota.js";
20
+ export * from "./database/quota/safe_int.js";
19
21
  export * from "./rate_limit.js";
20
22
  export * from "./logger.js";
23
+ export * from "./events.js";
21
24
  // export * from "./file_watcher.js"
22
25
  export * as Mail from "./plugins/mail/ui.js";
23
26
  // export * as PDF from "./plugins/pdf.js"