@vandenberghinc/volt 1.1.2

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 (451) hide show
  1. package/.vrepo +28 -0
  2. package/.vscode/tasks.json +87 -0
  3. package/README.md +67 -0
  4. package/backend/dist/cjs/blacklist.d.ts +10 -0
  5. package/backend/dist/cjs/blacklist.js +53 -0
  6. package/backend/dist/cjs/cli.d.ts +2 -0
  7. package/backend/dist/cjs/cli.js +263 -0
  8. package/backend/dist/cjs/database.d.ts +364 -0
  9. package/backend/dist/cjs/database.js +1962 -0
  10. package/backend/dist/cjs/endpoint.d.ts +57 -0
  11. package/backend/dist/cjs/endpoint.js +425 -0
  12. package/backend/dist/cjs/file_watcher.d.ts +44 -0
  13. package/backend/dist/cjs/file_watcher.js +348 -0
  14. package/backend/dist/cjs/frontend.d.ts +13 -0
  15. package/backend/dist/cjs/frontend.js +30 -0
  16. package/backend/dist/cjs/image_endpoint.d.ts +24 -0
  17. package/backend/dist/cjs/image_endpoint.js +210 -0
  18. package/backend/dist/cjs/logger.d.ts +5 -0
  19. package/backend/dist/cjs/logger.js +16 -0
  20. package/backend/dist/cjs/meta.d.ts +50 -0
  21. package/backend/dist/cjs/meta.js +153 -0
  22. package/backend/dist/cjs/mutex.d.ts +24 -0
  23. package/backend/dist/cjs/mutex.js +52 -0
  24. package/backend/dist/cjs/package.json +1 -0
  25. package/backend/dist/cjs/payments/paddle.d.ts +161 -0
  26. package/backend/dist/cjs/payments/paddle.js +2301 -0
  27. package/backend/dist/cjs/plugins/browser.d.ts +36 -0
  28. package/backend/dist/cjs/plugins/browser.js +183 -0
  29. package/backend/dist/cjs/plugins/communication.d.ts +70 -0
  30. package/backend/dist/cjs/plugins/communication.js +177 -0
  31. package/backend/dist/cjs/plugins/css.d.ts +10 -0
  32. package/backend/dist/cjs/plugins/css.js +71 -0
  33. package/backend/dist/cjs/plugins/mail.d.ts +277 -0
  34. package/backend/dist/cjs/plugins/mail.js +1419 -0
  35. package/backend/dist/cjs/plugins/pdf.d.ts +757 -0
  36. package/backend/dist/cjs/plugins/pdf.js +1694 -0
  37. package/backend/dist/cjs/plugins/thread_monitor.d.ts +18 -0
  38. package/backend/dist/cjs/plugins/thread_monitor.js +127 -0
  39. package/backend/dist/cjs/plugins/ts/compiler.d.ts +132 -0
  40. package/backend/dist/cjs/plugins/ts/compiler.js +944 -0
  41. package/backend/dist/cjs/plugins/ts/preprocessing.d.ts +14 -0
  42. package/backend/dist/cjs/plugins/ts/preprocessing.js +762 -0
  43. package/backend/dist/cjs/rate_limit.d.ts +65 -0
  44. package/backend/dist/cjs/rate_limit.js +463 -0
  45. package/backend/dist/cjs/request.deprc.d.ts +48 -0
  46. package/backend/dist/cjs/request.deprc.js +572 -0
  47. package/backend/dist/cjs/response.deprc.d.ts +55 -0
  48. package/backend/dist/cjs/response.deprc.js +275 -0
  49. package/backend/dist/cjs/server.d.ts +311 -0
  50. package/backend/dist/cjs/server.js +3475 -0
  51. package/backend/dist/cjs/splash_screen.d.ts +35 -0
  52. package/backend/dist/cjs/splash_screen.js +152 -0
  53. package/backend/dist/cjs/status.d.ts +60 -0
  54. package/backend/dist/cjs/status.js +199 -0
  55. package/backend/dist/cjs/stream.d.ts +75 -0
  56. package/backend/dist/cjs/stream.js +954 -0
  57. package/backend/dist/cjs/users.d.ts +111 -0
  58. package/backend/dist/cjs/users.js +1945 -0
  59. package/backend/dist/cjs/utils.d.ts +27 -0
  60. package/backend/dist/cjs/utils.js +329 -0
  61. package/backend/dist/cjs/view.d.ts +52 -0
  62. package/backend/dist/cjs/view.js +568 -0
  63. package/backend/dist/cjs/vinc.d.ts +2 -0
  64. package/backend/dist/cjs/vinc.dev.d.ts +2 -0
  65. package/backend/dist/cjs/vinc.dev.js +42 -0
  66. package/backend/dist/cjs/vinc.js +42 -0
  67. package/backend/dist/cjs/volt.d.ts +15 -0
  68. package/backend/dist/cjs/volt.js +64 -0
  69. package/backend/dist/css/adyen.css +92 -0
  70. package/backend/dist/css/volt.css +65 -0
  71. package/backend/dist/esm/blacklist.d.ts +10 -0
  72. package/backend/dist/esm/blacklist.js +49 -0
  73. package/backend/dist/esm/cli.d.ts +2 -0
  74. package/backend/dist/esm/cli.js +228 -0
  75. package/backend/dist/esm/database.d.ts +364 -0
  76. package/backend/dist/esm/database.js +1957 -0
  77. package/backend/dist/esm/endpoint.d.ts +57 -0
  78. package/backend/dist/esm/endpoint.js +421 -0
  79. package/backend/dist/esm/file_watcher.d.ts +44 -0
  80. package/backend/dist/esm/file_watcher.js +313 -0
  81. package/backend/dist/esm/frontend.d.ts +13 -0
  82. package/backend/dist/esm/frontend.js +27 -0
  83. package/backend/dist/esm/image_endpoint.d.ts +24 -0
  84. package/backend/dist/esm/image_endpoint.js +206 -0
  85. package/backend/dist/esm/logger.d.ts +5 -0
  86. package/backend/dist/esm/logger.js +13 -0
  87. package/backend/dist/esm/meta.d.ts +50 -0
  88. package/backend/dist/esm/meta.js +149 -0
  89. package/backend/dist/esm/mutex.d.ts +24 -0
  90. package/backend/dist/esm/mutex.js +48 -0
  91. package/backend/dist/esm/payments/paddle.d.ts +161 -0
  92. package/backend/dist/esm/payments/paddle.js +2261 -0
  93. package/backend/dist/esm/plugins/browser.d.ts +36 -0
  94. package/backend/dist/esm/plugins/browser.js +176 -0
  95. package/backend/dist/esm/plugins/communication.d.ts +70 -0
  96. package/backend/dist/esm/plugins/communication.js +169 -0
  97. package/backend/dist/esm/plugins/css.d.ts +10 -0
  98. package/backend/dist/esm/plugins/css.js +64 -0
  99. package/backend/dist/esm/plugins/mail.d.ts +277 -0
  100. package/backend/dist/esm/plugins/mail.js +1403 -0
  101. package/backend/dist/esm/plugins/pdf.d.ts +757 -0
  102. package/backend/dist/esm/plugins/pdf.js +1694 -0
  103. package/backend/dist/esm/plugins/thread_monitor.d.ts +18 -0
  104. package/backend/dist/esm/plugins/thread_monitor.js +120 -0
  105. package/backend/dist/esm/plugins/ts/compiler.d.ts +132 -0
  106. package/backend/dist/esm/plugins/ts/compiler.js +907 -0
  107. package/backend/dist/esm/plugins/ts/preprocessing.d.ts +14 -0
  108. package/backend/dist/esm/plugins/ts/preprocessing.js +724 -0
  109. package/backend/dist/esm/rate_limit.d.ts +65 -0
  110. package/backend/dist/esm/rate_limit.js +425 -0
  111. package/backend/dist/esm/request.deprc.d.ts +48 -0
  112. package/backend/dist/esm/request.deprc.js +572 -0
  113. package/backend/dist/esm/response.deprc.d.ts +55 -0
  114. package/backend/dist/esm/response.deprc.js +275 -0
  115. package/backend/dist/esm/server.d.ts +311 -0
  116. package/backend/dist/esm/server.js +3435 -0
  117. package/backend/dist/esm/splash_screen.d.ts +35 -0
  118. package/backend/dist/esm/splash_screen.js +148 -0
  119. package/backend/dist/esm/status.d.ts +60 -0
  120. package/backend/dist/esm/status.js +196 -0
  121. package/backend/dist/esm/stream.d.ts +75 -0
  122. package/backend/dist/esm/stream.js +947 -0
  123. package/backend/dist/esm/users.d.ts +111 -0
  124. package/backend/dist/esm/users.js +1908 -0
  125. package/backend/dist/esm/utils.d.ts +27 -0
  126. package/backend/dist/esm/utils.js +324 -0
  127. package/backend/dist/esm/view.d.ts +52 -0
  128. package/backend/dist/esm/view.js +561 -0
  129. package/backend/dist/esm/vinc.d.ts +2 -0
  130. package/backend/dist/esm/vinc.dev.d.ts +2 -0
  131. package/backend/dist/esm/vinc.dev.js +6 -0
  132. package/backend/dist/esm/vinc.js +6 -0
  133. package/backend/dist/esm/volt.d.ts +15 -0
  134. package/backend/dist/esm/volt.js +23 -0
  135. package/backend/dist/esm-dev/blacklist.d.ts +10 -0
  136. package/backend/dist/esm-dev/blacklist.js +49 -0
  137. package/backend/dist/esm-dev/cli.d.ts +2 -0
  138. package/backend/dist/esm-dev/cli.js +228 -0
  139. package/backend/dist/esm-dev/database.d.ts +364 -0
  140. package/backend/dist/esm-dev/database.js +1957 -0
  141. package/backend/dist/esm-dev/endpoint.d.ts +57 -0
  142. package/backend/dist/esm-dev/endpoint.js +421 -0
  143. package/backend/dist/esm-dev/file_watcher.d.ts +44 -0
  144. package/backend/dist/esm-dev/file_watcher.js +313 -0
  145. package/backend/dist/esm-dev/frontend.d.ts +13 -0
  146. package/backend/dist/esm-dev/frontend.js +27 -0
  147. package/backend/dist/esm-dev/image_endpoint.d.ts +24 -0
  148. package/backend/dist/esm-dev/image_endpoint.js +206 -0
  149. package/backend/dist/esm-dev/logger.d.ts +5 -0
  150. package/backend/dist/esm-dev/logger.js +13 -0
  151. package/backend/dist/esm-dev/meta.d.ts +50 -0
  152. package/backend/dist/esm-dev/meta.js +149 -0
  153. package/backend/dist/esm-dev/mutex.d.ts +24 -0
  154. package/backend/dist/esm-dev/mutex.js +48 -0
  155. package/backend/dist/esm-dev/payments/paddle.d.ts +161 -0
  156. package/backend/dist/esm-dev/payments/paddle.js +2261 -0
  157. package/backend/dist/esm-dev/plugins/browser.d.ts +36 -0
  158. package/backend/dist/esm-dev/plugins/browser.js +176 -0
  159. package/backend/dist/esm-dev/plugins/communication.d.ts +70 -0
  160. package/backend/dist/esm-dev/plugins/communication.js +169 -0
  161. package/backend/dist/esm-dev/plugins/css.d.ts +10 -0
  162. package/backend/dist/esm-dev/plugins/css.js +64 -0
  163. package/backend/dist/esm-dev/plugins/mail.d.ts +277 -0
  164. package/backend/dist/esm-dev/plugins/mail.js +1403 -0
  165. package/backend/dist/esm-dev/plugins/pdf.d.ts +757 -0
  166. package/backend/dist/esm-dev/plugins/pdf.js +1694 -0
  167. package/backend/dist/esm-dev/plugins/thread_monitor.d.ts +18 -0
  168. package/backend/dist/esm-dev/plugins/thread_monitor.js +120 -0
  169. package/backend/dist/esm-dev/plugins/ts/compiler.d.ts +132 -0
  170. package/backend/dist/esm-dev/plugins/ts/compiler.js +907 -0
  171. package/backend/dist/esm-dev/plugins/ts/preprocessing.d.ts +14 -0
  172. package/backend/dist/esm-dev/plugins/ts/preprocessing.js +724 -0
  173. package/backend/dist/esm-dev/rate_limit.d.ts +65 -0
  174. package/backend/dist/esm-dev/rate_limit.js +425 -0
  175. package/backend/dist/esm-dev/request.deprc.d.ts +48 -0
  176. package/backend/dist/esm-dev/request.deprc.js +572 -0
  177. package/backend/dist/esm-dev/response.deprc.d.ts +55 -0
  178. package/backend/dist/esm-dev/response.deprc.js +275 -0
  179. package/backend/dist/esm-dev/server.d.ts +311 -0
  180. package/backend/dist/esm-dev/server.js +3435 -0
  181. package/backend/dist/esm-dev/splash_screen.d.ts +35 -0
  182. package/backend/dist/esm-dev/splash_screen.js +148 -0
  183. package/backend/dist/esm-dev/status.d.ts +60 -0
  184. package/backend/dist/esm-dev/status.js +196 -0
  185. package/backend/dist/esm-dev/stream.d.ts +75 -0
  186. package/backend/dist/esm-dev/stream.js +947 -0
  187. package/backend/dist/esm-dev/users.d.ts +111 -0
  188. package/backend/dist/esm-dev/users.js +1908 -0
  189. package/backend/dist/esm-dev/utils.d.ts +27 -0
  190. package/backend/dist/esm-dev/utils.js +324 -0
  191. package/backend/dist/esm-dev/view.d.ts +52 -0
  192. package/backend/dist/esm-dev/view.js +561 -0
  193. package/backend/dist/esm-dev/vinc.d.ts +2 -0
  194. package/backend/dist/esm-dev/vinc.dev.d.ts +2 -0
  195. package/backend/dist/esm-dev/vinc.dev.js +6 -0
  196. package/backend/dist/esm-dev/vinc.js +6 -0
  197. package/backend/dist/esm-dev/volt.d.ts +15 -0
  198. package/backend/dist/esm-dev/volt.js +23 -0
  199. package/backend/src/blacklist.ts +69 -0
  200. package/backend/src/cli.js +245 -0
  201. package/backend/src/database.ts +2241 -0
  202. package/backend/src/endpoint.ts +494 -0
  203. package/backend/src/file_watcher.ts +359 -0
  204. package/backend/src/frontend.ts +35 -0
  205. package/backend/src/globals.d.ts +8 -0
  206. package/backend/src/image_endpoint.ts +258 -0
  207. package/backend/src/logger.ts +18 -0
  208. package/backend/src/meta.ts +202 -0
  209. package/backend/src/mutex.ts +51 -0
  210. package/backend/src/payments/paddle.ts +2659 -0
  211. package/backend/src/plugins/browser.ts +188 -0
  212. package/backend/src/plugins/communication.ts +204 -0
  213. package/backend/src/plugins/css.ts +84 -0
  214. package/backend/src/plugins/fonts/Menlo-Bold.ttf +0 -0
  215. package/backend/src/plugins/fonts/Menlo-Regular.ttf +0 -0
  216. package/backend/src/plugins/mail.ts +1720 -0
  217. package/backend/src/plugins/pdf.js +1932 -0
  218. package/backend/src/plugins/thread_monitor.ts +164 -0
  219. package/backend/src/plugins/ts/compiler.ts +1242 -0
  220. package/backend/src/plugins/ts/preprocessing.ts +812 -0
  221. package/backend/src/rate_limit.ts +503 -0
  222. package/backend/src/request.deprc.js +626 -0
  223. package/backend/src/response.deprc.js +354 -0
  224. package/backend/src/server.ts +4149 -0
  225. package/backend/src/splash_screen.ts +192 -0
  226. package/backend/src/status.ts +199 -0
  227. package/backend/src/stream.ts +1070 -0
  228. package/backend/src/users.ts +2077 -0
  229. package/backend/src/utils.ts +359 -0
  230. package/backend/src/view.ts +655 -0
  231. package/backend/src/vinc.dev.js +6 -0
  232. package/backend/src/vinc.ts +6 -0
  233. package/backend/src/volt.js +25 -0
  234. package/backend/tsconfig.cjs.json +29 -0
  235. package/backend/tsconfig.esm.dev.json +34 -0
  236. package/backend/tsconfig.esm.json +30 -0
  237. package/backend/tsconfig.json +2 -0
  238. package/frontend/compile.js +436 -0
  239. package/frontend/dist/elements/base.d.ts +9891 -0
  240. package/frontend/dist/elements/base.js +8818 -0
  241. package/frontend/dist/elements/module.d.ts +16 -0
  242. package/frontend/dist/elements/module.js +178 -0
  243. package/frontend/dist/modules/array.d.ts +37 -0
  244. package/frontend/dist/modules/array.js +284 -0
  245. package/frontend/dist/modules/auth.d.ts +45 -0
  246. package/frontend/dist/modules/auth.js +138 -0
  247. package/frontend/dist/modules/colors.d.ts +26 -0
  248. package/frontend/dist/modules/colors.js +340 -0
  249. package/frontend/dist/modules/compression.d.ts +6 -0
  250. package/frontend/dist/modules/compression.js +999 -0
  251. package/frontend/dist/modules/cookies.d.ts +17 -0
  252. package/frontend/dist/modules/cookies.js +166 -0
  253. package/frontend/dist/modules/date.d.ts +142 -0
  254. package/frontend/dist/modules/date.js +493 -0
  255. package/frontend/dist/modules/events.d.ts +7 -0
  256. package/frontend/dist/modules/events.js +90 -0
  257. package/frontend/dist/modules/google.d.ts +10 -0
  258. package/frontend/dist/modules/google.js +53 -0
  259. package/frontend/dist/modules/meta.d.ts +9 -0
  260. package/frontend/dist/modules/meta.js +45 -0
  261. package/frontend/dist/modules/mutex.d.ts +8 -0
  262. package/frontend/dist/modules/mutex.js +52 -0
  263. package/frontend/dist/modules/number.d.ts +12 -0
  264. package/frontend/dist/modules/number.js +8 -0
  265. package/frontend/dist/modules/object.d.ts +50 -0
  266. package/frontend/dist/modules/object.js +147 -0
  267. package/frontend/dist/modules/paddle.d.ts +1403 -0
  268. package/frontend/dist/modules/paddle.js +2641 -0
  269. package/frontend/dist/modules/scheme.d.ts +207 -0
  270. package/frontend/dist/modules/scheme.js +649 -0
  271. package/frontend/dist/modules/settings.d.ts +3 -0
  272. package/frontend/dist/modules/settings.js +4 -0
  273. package/frontend/dist/modules/statics.d.ts +4 -0
  274. package/frontend/dist/modules/statics.js +45 -0
  275. package/frontend/dist/modules/string.d.ts +163 -0
  276. package/frontend/dist/modules/string.js +291 -0
  277. package/frontend/dist/modules/support.d.ts +18 -0
  278. package/frontend/dist/modules/support.js +102 -0
  279. package/frontend/dist/modules/themes.d.ts +8 -0
  280. package/frontend/dist/modules/themes.js +17 -0
  281. package/frontend/dist/modules/user.d.ts +58 -0
  282. package/frontend/dist/modules/user.js +279 -0
  283. package/frontend/dist/modules/utils.d.ts +58 -0
  284. package/frontend/dist/modules/utils.js +1159 -0
  285. package/frontend/dist/types/gradient.d.ts +12 -0
  286. package/frontend/dist/types/gradient.js +79 -0
  287. package/frontend/dist/ui/border_button.d.ts +177 -0
  288. package/frontend/dist/ui/border_button.js +235 -0
  289. package/frontend/dist/ui/button.d.ts +42 -0
  290. package/frontend/dist/ui/button.js +114 -0
  291. package/frontend/dist/ui/canvas.d.ts +56 -0
  292. package/frontend/dist/ui/canvas.js +411 -0
  293. package/frontend/dist/ui/checkbox.d.ts +72 -0
  294. package/frontend/dist/ui/checkbox.js +277 -0
  295. package/frontend/dist/ui/code.d.ts +232 -0
  296. package/frontend/dist/ui/code.js +977 -0
  297. package/frontend/dist/ui/color.d.ts +1 -0
  298. package/frontend/dist/ui/color.js +110 -0
  299. package/frontend/dist/ui/context_menu.d.ts +30 -0
  300. package/frontend/dist/ui/context_menu.js +211 -0
  301. package/frontend/dist/ui/css.d.ts +10 -0
  302. package/frontend/dist/ui/css.js +44 -0
  303. package/frontend/dist/ui/divider.d.ts +18 -0
  304. package/frontend/dist/ui/divider.js +82 -0
  305. package/frontend/dist/ui/dropdown.d.ts +115 -0
  306. package/frontend/dist/ui/dropdown.js +446 -0
  307. package/frontend/dist/ui/for_each.d.ts +38 -0
  308. package/frontend/dist/ui/for_each.js +97 -0
  309. package/frontend/dist/ui/form.d.ts +25 -0
  310. package/frontend/dist/ui/form.js +227 -0
  311. package/frontend/dist/ui/frame_modes.d.ts +28 -0
  312. package/frontend/dist/ui/frame_modes.js +116 -0
  313. package/frontend/dist/ui/google_map.d.ts +31 -0
  314. package/frontend/dist/ui/google_map.js +111 -0
  315. package/frontend/dist/ui/gradient.d.ts +24 -0
  316. package/frontend/dist/ui/gradient.js +115 -0
  317. package/frontend/dist/ui/image.d.ts +138 -0
  318. package/frontend/dist/ui/image.js +570 -0
  319. package/frontend/dist/ui/input.d.ts +316 -0
  320. package/frontend/dist/ui/input.js +1187 -0
  321. package/frontend/dist/ui/link.d.ts +39 -0
  322. package/frontend/dist/ui/link.js +146 -0
  323. package/frontend/dist/ui/list.d.ts +33 -0
  324. package/frontend/dist/ui/list.js +161 -0
  325. package/frontend/dist/ui/loader_button.d.ts +108 -0
  326. package/frontend/dist/ui/loader_button.js +207 -0
  327. package/frontend/dist/ui/loaders.d.ts +60 -0
  328. package/frontend/dist/ui/loaders.js +150 -0
  329. package/frontend/dist/ui/popup.d.ts +84 -0
  330. package/frontend/dist/ui/popup.js +331 -0
  331. package/frontend/dist/ui/pseudo.d.ts +16 -0
  332. package/frontend/dist/ui/pseudo.js +81 -0
  333. package/frontend/dist/ui/scroller.d.ts +131 -0
  334. package/frontend/dist/ui/scroller.js +1251 -0
  335. package/frontend/dist/ui/slider.d.ts +35 -0
  336. package/frontend/dist/ui/slider.js +203 -0
  337. package/frontend/dist/ui/spacer.d.ts +20 -0
  338. package/frontend/dist/ui/spacer.js +83 -0
  339. package/frontend/dist/ui/span.d.ts +11 -0
  340. package/frontend/dist/ui/span.js +75 -0
  341. package/frontend/dist/ui/stack.d.ts +123 -0
  342. package/frontend/dist/ui/stack.js +344 -0
  343. package/frontend/dist/ui/steps.d.ts +72 -0
  344. package/frontend/dist/ui/steps.js +306 -0
  345. package/frontend/dist/ui/style.d.ts +12 -0
  346. package/frontend/dist/ui/style.js +78 -0
  347. package/frontend/dist/ui/switch.d.ts +44 -0
  348. package/frontend/dist/ui/switch.js +280 -0
  349. package/frontend/dist/ui/table.d.ts +118 -0
  350. package/frontend/dist/ui/table.js +411 -0
  351. package/frontend/dist/ui/tabs.d.ts +85 -0
  352. package/frontend/dist/ui/tabs.js +392 -0
  353. package/frontend/dist/ui/text.d.ts +19 -0
  354. package/frontend/dist/ui/text.js +88 -0
  355. package/frontend/dist/ui/theme.d.ts +25 -0
  356. package/frontend/dist/ui/theme.js +237 -0
  357. package/frontend/dist/ui/title.d.ts +36 -0
  358. package/frontend/dist/ui/title.js +127 -0
  359. package/frontend/dist/ui/ui.d.ts +38 -0
  360. package/frontend/dist/ui/ui.js +41 -0
  361. package/frontend/dist/ui/view.d.ts +25 -0
  362. package/frontend/dist/ui/view.js +93 -0
  363. package/frontend/dist/volt.d.ts +22 -0
  364. package/frontend/dist/volt.js +27 -0
  365. package/frontend/exports.json +1340 -0
  366. package/frontend/src/css/adyen.css +92 -0
  367. package/frontend/src/css/volt.css +65 -0
  368. package/frontend/src/elements/base.ts +16790 -0
  369. package/frontend/src/elements/module.ts +184 -0
  370. package/frontend/src/elements/types.d.ts +155 -0
  371. package/frontend/src/modules/array.ts +366 -0
  372. package/frontend/src/modules/auth.ts +188 -0
  373. package/frontend/src/modules/colors.ts +449 -0
  374. package/frontend/src/modules/compression.ts +67 -0
  375. package/frontend/src/modules/cookies.ts +182 -0
  376. package/frontend/src/modules/date.js +535 -0
  377. package/frontend/src/modules/date.ts +583 -0
  378. package/frontend/src/modules/events.ts +96 -0
  379. package/frontend/src/modules/google.ts +60 -0
  380. package/frontend/src/modules/meta.ts +59 -0
  381. package/frontend/src/modules/mutex.ts +59 -0
  382. package/frontend/src/modules/number.ts +20 -0
  383. package/frontend/src/modules/object.ts +212 -0
  384. package/frontend/src/modules/paddle.ts +2990 -0
  385. package/frontend/src/modules/scheme.ts +740 -0
  386. package/frontend/src/modules/settings.ts +5 -0
  387. package/frontend/src/modules/statics.ts +47 -0
  388. package/frontend/src/modules/string.ts +500 -0
  389. package/frontend/src/modules/support.ts +118 -0
  390. package/frontend/src/modules/themes.ts +24 -0
  391. package/frontend/src/modules/user.ts +321 -0
  392. package/frontend/src/modules/utils.ts +1260 -0
  393. package/frontend/src/static/admin/admin.png +0 -0
  394. package/frontend/src/static/admin/password.webp +0 -0
  395. package/frontend/src/static/icons/copy.webp +0 -0
  396. package/frontend/src/static/payments/arrow.long.webp +0 -0
  397. package/frontend/src/static/payments/arrow.long2.webp +0 -0
  398. package/frontend/src/static/payments/cancelled.webp +0 -0
  399. package/frontend/src/static/payments/check.sign.webp +0 -0
  400. package/frontend/src/static/payments/check.webp +0 -0
  401. package/frontend/src/static/payments/close.webp +0 -0
  402. package/frontend/src/static/payments/error.webp +0 -0
  403. package/frontend/src/static/payments/exclamation.webp +0 -0
  404. package/frontend/src/static/payments/minus.webp +0 -0
  405. package/frontend/src/static/payments/party.webp +0 -0
  406. package/frontend/src/static/payments/plus.webp +0 -0
  407. package/frontend/src/static/payments/shopping_cart.webp +0 -0
  408. package/frontend/src/static/payments/trash.webp +0 -0
  409. package/frontend/src/types/global.d.ts +4 -0
  410. package/frontend/src/types/gradient.ts +87 -0
  411. package/frontend/src/ui/any_element.d.ts +5 -0
  412. package/frontend/src/ui/border_button.ts +320 -0
  413. package/frontend/src/ui/button.ts +62 -0
  414. package/frontend/src/ui/canvas.ts +431 -0
  415. package/frontend/src/ui/checkbox.ts +284 -0
  416. package/frontend/src/ui/code.ts +1049 -0
  417. package/frontend/src/ui/color.ts +117 -0
  418. package/frontend/src/ui/context_menu.ts +194 -0
  419. package/frontend/src/ui/css.ts +57 -0
  420. package/frontend/src/ui/divider.ts +28 -0
  421. package/frontend/src/ui/dropdown.ts +503 -0
  422. package/frontend/src/ui/for_each.ts +71 -0
  423. package/frontend/src/ui/form.ts +208 -0
  424. package/frontend/src/ui/frame_modes.ts +140 -0
  425. package/frontend/src/ui/google_map.ts +70 -0
  426. package/frontend/src/ui/gradient.ts +73 -0
  427. package/frontend/src/ui/image.ts +587 -0
  428. package/frontend/src/ui/input.ts +1284 -0
  429. package/frontend/src/ui/link.ts +77 -0
  430. package/frontend/src/ui/list.ts +88 -0
  431. package/frontend/src/ui/loader_button.ts +192 -0
  432. package/frontend/src/ui/loaders.ts +126 -0
  433. package/frontend/src/ui/popup.ts +370 -0
  434. package/frontend/src/ui/pseudo.ts +33 -0
  435. package/frontend/src/ui/scroller.ts +1324 -0
  436. package/frontend/src/ui/slider.ts +215 -0
  437. package/frontend/src/ui/spacer.ts +29 -0
  438. package/frontend/src/ui/span.ts +23 -0
  439. package/frontend/src/ui/stack.ts +238 -0
  440. package/frontend/src/ui/steps.ts +334 -0
  441. package/frontend/src/ui/style.ts +26 -0
  442. package/frontend/src/ui/switch.ts +286 -0
  443. package/frontend/src/ui/table.ts +323 -0
  444. package/frontend/src/ui/tabs.ts +441 -0
  445. package/frontend/src/ui/text.ts +38 -0
  446. package/frontend/src/ui/theme.ts +279 -0
  447. package/frontend/src/ui/title.ts +64 -0
  448. package/frontend/src/ui/ui.ts +47 -0
  449. package/frontend/src/ui/view.ts +44 -0
  450. package/frontend/src/volt.ts +31 -0
  451. package/package.json +58 -0
@@ -0,0 +1,947 @@
1
+ /*
2
+ * Author: Daan van den Bergh
3
+ * Copyright: © 2022 - 2024 Daan van den Bergh.
4
+ */
5
+ // ---------------------------------------------------------
6
+ // Imports.
7
+ import zlib from 'zlib';
8
+ // ---------------------------------------------------------
9
+ // Request object.
10
+ /* @docs
11
+ @nav: Backend
12
+ @chapter: Stream
13
+ @title: HTTP1/2 Stream
14
+ @description:
15
+ The http2 stream wrapper object.
16
+ @attribute:
17
+ @name: headers
18
+ @desc: The request headers.
19
+ */
20
+ export class Stream {
21
+ s;
22
+ headers;
23
+ req;
24
+ res;
25
+ http2;
26
+ http1;
27
+ _ip;
28
+ _port;
29
+ _method;
30
+ _params;
31
+ _is_query_params;
32
+ _endpoint;
33
+ _query_string;
34
+ _cookies;
35
+ _uid;
36
+ status_code;
37
+ finished;
38
+ res_cookies;
39
+ res_headers;
40
+ body;
41
+ promise;
42
+ constructor(stream, headers, req, res) {
43
+ // Parameters.
44
+ this.s = stream;
45
+ this.headers = (headers ?? {});
46
+ this.req = req;
47
+ this.res = res;
48
+ this.http2 = req == null;
49
+ this.http1 = req != null;
50
+ // HTTP1.
51
+ if (this.http1) {
52
+ this.headers = this.req.headers;
53
+ }
54
+ // Request attributes.
55
+ this._ip = this.http2 ? this.s.session.socket.remoteAddress : this.req.socket.remoteAddress;
56
+ this._port = this.http2 ? this.s.session.socket.remotePort : this.req.socket.remotePort;
57
+ this._method = this.http2 ? this.headers[':method'] : this.req.method;
58
+ this._params = undefined;
59
+ this._is_query_params = false;
60
+ this._endpoint = undefined;
61
+ this._query_string = undefined;
62
+ this._cookies = undefined;
63
+ this._uid = null;
64
+ // Response attributes
65
+ this.status_code = null;
66
+ this.finished = false;
67
+ this.res_cookies = [];
68
+ this.res_headers = this.http1 ? [] : {};
69
+ // Read body.
70
+ this.body = "";
71
+ this.promise = undefined;
72
+ this._recv_body();
73
+ }
74
+ // Receve the body.
75
+ _recv_body() {
76
+ this.promise = new Promise((resolve, reject) => {
77
+ // Buffers.
78
+ const buffs = [];
79
+ // Get decompress stream.
80
+ let decompress_stream;
81
+ const content_encoding = this.headers['content-encoding'];
82
+ if (content_encoding === 'gzip') {
83
+ decompress_stream = zlib.createGunzip();
84
+ }
85
+ else if (content_encoding === 'deflate') {
86
+ decompress_stream = zlib.createInflate();
87
+ }
88
+ const cleanup = () => {
89
+ if (decompress_stream) {
90
+ decompress_stream.close();
91
+ }
92
+ };
93
+ // HTTP2.
94
+ if (this.http2) {
95
+ let stream = this.s;
96
+ // If decompression is needed, pipe the stream through the decompression stream
97
+ if (decompress_stream) {
98
+ stream = this.s.pipe(decompress_stream);
99
+ // decompress_stream.on('error', (e) => { cleanup(); reject(e); });
100
+ }
101
+ // On error.
102
+ stream.on('error', (e) => { cleanup(); reject(e); });
103
+ // Receive data.
104
+ stream.on('data', (chunk) => {
105
+ buffs.push(chunk);
106
+ });
107
+ stream.on('end', () => {
108
+ this.body = Buffer.concat(buffs).toString();
109
+ cleanup();
110
+ resolve();
111
+ });
112
+ }
113
+ // HTTP1.
114
+ else {
115
+ let stream = this.req;
116
+ // Decompress data.
117
+ if (decompress_stream) {
118
+ this.req.pipe(decompress_stream);
119
+ stream = decompress_stream;
120
+ }
121
+ // On error.
122
+ stream.on('error', (e) => { cleanup(); reject(e); });
123
+ // Receive data.
124
+ stream.on("data", (data) => {
125
+ buffs.push(data);
126
+ });
127
+ stream.on("end", () => {
128
+ this.body = Buffer.concat(buffs).toString();
129
+ cleanup();
130
+ resolve();
131
+ });
132
+ }
133
+ });
134
+ }
135
+ // Parse endpoint.
136
+ _parse_endoint() {
137
+ if (this._endpoint !== undefined) {
138
+ return;
139
+ }
140
+ this._endpoint = this.http2 ? this.headers[":path"] : this.req.url;
141
+ let index;
142
+ if ((index = this._endpoint.indexOf("?")) !== -1) {
143
+ this._query_string = this._endpoint.substr(index + 1);
144
+ this._endpoint = this._endpoint.substr(0, index);
145
+ }
146
+ this._endpoint = this._endpoint.replace(/\/\//g, "/");
147
+ if (this._endpoint.length > 1 && this._endpoint.charAt(this._endpoint.length - 1) === "/") {
148
+ this._endpoint = this._endpoint.substr(0, this._endpoint.length - 1);
149
+ }
150
+ }
151
+ // Parse the parameters.
152
+ _parse_params() {
153
+ // Parse query string.
154
+ this._parse_endoint();
155
+ // Already parsed.
156
+ if (this._params !== undefined) {
157
+ return;
158
+ }
159
+ // Initialize.
160
+ this._params = {};
161
+ // By query string.
162
+ if (this._query_string !== undefined) {
163
+ // As encoded json.
164
+ if (this._query_string.charAt(0) === "{") {
165
+ try {
166
+ this._params = JSON.parse(decodeURIComponent(this._query_string));
167
+ }
168
+ catch (err) {
169
+ throw Error(`Invalid json request query: ${err}.`);
170
+ }
171
+ }
172
+ // As query string.
173
+ else {
174
+ // Assign.
175
+ this._is_query_params = true;
176
+ // Variables.
177
+ let is_key = true, key = "", value = "";
178
+ const number_regex = /^-?\d+(\.\d+)?$/;
179
+ // Callback.
180
+ const add_value = () => {
181
+ let output_value;
182
+ switch (value) {
183
+ case "true":
184
+ case "True":
185
+ output_value = true;
186
+ break;
187
+ case "false":
188
+ case "False":
189
+ output_value = false;
190
+ break;
191
+ case "null":
192
+ case "None":
193
+ case "undefined":
194
+ output_value = null;
195
+ break;
196
+ default:
197
+ output_value = decodeURIComponent(value.replaceAll("+", " "));
198
+ if (number_regex.test(output_value)) {
199
+ if (output_value.indexOf(".") !== -1) {
200
+ output_value = parseFloat(output_value);
201
+ }
202
+ else {
203
+ output_value = parseInt(output_value);
204
+ }
205
+ }
206
+ break;
207
+ }
208
+ this._params[decodeURIComponent(key.replaceAll("+", " "))] = output_value;
209
+ key = "";
210
+ value = "";
211
+ is_key = true;
212
+ };
213
+ // Iterate
214
+ for (let i = 0; i < this._query_string.length; i++) {
215
+ const c = this._query_string.charAt(i);
216
+ if (is_key && c === "=") {
217
+ is_key = false;
218
+ continue;
219
+ }
220
+ else if (is_key === false && c === "&") {
221
+ add_value();
222
+ continue;
223
+ }
224
+ if (is_key) {
225
+ key += c;
226
+ }
227
+ else {
228
+ value += c;
229
+ }
230
+ }
231
+ if (key.length > 0) {
232
+ add_value();
233
+ }
234
+ }
235
+ }
236
+ // By body.
237
+ else if (this.body.trim().charAt(0) === "{") {
238
+ try {
239
+ this._params = JSON.parse(this.body);
240
+ }
241
+ catch (err) {
242
+ throw Error(`Invalid json request body: ${err}.`);
243
+ }
244
+ }
245
+ // Handler.
246
+ return this._params;
247
+ }
248
+ // Parse cookies.
249
+ _parse_cookies() {
250
+ // Reset cookies.
251
+ this._cookies = {};
252
+ // Vars.
253
+ const cookie_str = this.http2 ? this.headers["cookie"] : this.req.headers.cookie;
254
+ if (cookie_str === undefined) {
255
+ return null;
256
+ }
257
+ let key = "";
258
+ let value = "";
259
+ let cookie = {};
260
+ let cookie_length = 0;
261
+ let cookie_key = null;
262
+ let is_value = false;
263
+ let is_str = null;
264
+ // Append to cookie.
265
+ const append_to_cookie = () => {
266
+ if (key.length > 0) {
267
+ if (cookie_length === 0) {
268
+ cookie.value = value;
269
+ }
270
+ else {
271
+ cookie[key] = value;
272
+ }
273
+ ++cookie_length;
274
+ }
275
+ key = "";
276
+ value = "";
277
+ is_value = false;
278
+ is_str = null;
279
+ };
280
+ // Append cookie.
281
+ const append_cookie = () => {
282
+ if (cookie_key != null) {
283
+ this._cookies[cookie_key] = cookie;
284
+ cookie_key = null;
285
+ cookie = {};
286
+ cookie_length = 0;
287
+ }
288
+ };
289
+ // Iterate.
290
+ for (let x = 0; x < cookie_str.length; x++) {
291
+ const c = cookie_str.charAt(x);
292
+ // Add char to value.
293
+ if (is_value) {
294
+ // End of cookie string.
295
+ if (is_str === c) {
296
+ value = value.substr(1, value.length - 1);
297
+ append_to_cookie();
298
+ }
299
+ // Cookie seperator.
300
+ else if (is_str == null && c === " ") {
301
+ append_to_cookie();
302
+ }
303
+ // End of cookie.
304
+ else if (is_str == null && c === ";") {
305
+ append_to_cookie();
306
+ append_cookie();
307
+ }
308
+ // Append to value.
309
+ else {
310
+ value += c;
311
+ if (value.length === 1 && (c === "\"" || c === "'")) {
312
+ is_str = c;
313
+ }
314
+ }
315
+ }
316
+ // Skip whitespace in keys.
317
+ else if (c == " " || c == "\t") {
318
+ continue;
319
+ }
320
+ // End of cookie key.
321
+ else if (c == "=") {
322
+ if (cookie_key == null) {
323
+ cookie_key = key;
324
+ }
325
+ is_value = true;
326
+ }
327
+ // Add char to key.
328
+ else {
329
+ key += c;
330
+ }
331
+ }
332
+ append_to_cookie();
333
+ append_cookie();
334
+ }
335
+ // ---------------------------------------------------------
336
+ // Functions.
337
+ // Wait till the request body is fully received.
338
+ async join() {
339
+ await this.promise;
340
+ }
341
+ // Get the requests ip.
342
+ /* @docs:
343
+ * @title: IP
344
+ * @description: Get the request's ip.
345
+ * @property: true
346
+ * @usage:
347
+ * ...
348
+ * const ip = stream.ip;
349
+ */
350
+ get ip() {
351
+ return this._ip;
352
+ }
353
+ // Get the requests port.
354
+ /* @docs:
355
+ * @title: Port
356
+ * @description: Get the request's port.
357
+ * @property: true
358
+ * @usage:
359
+ * ...
360
+ * const port = stream.port;
361
+ */
362
+ get port() {
363
+ return this._port;
364
+ }
365
+ // Get the method.
366
+ /* @docs:
367
+ * @title: Method
368
+ * @description: Get the request method.
369
+ * @property: true
370
+ * @usage:
371
+ * ...
372
+ * const method = stream.method;
373
+ */
374
+ get method() {
375
+ return this._method;
376
+ }
377
+ // Get the endpoint.
378
+ /* @docs:
379
+ * @title: Endpoint
380
+ * @description: Get the request's endpoint. This will not include the query string.
381
+ * @property: true
382
+ * @type: string
383
+ * @usage:
384
+ * ...
385
+ * const endpoint = stream.endpoint;
386
+ */
387
+ get endpoint() {
388
+ if (this._endpoint !== undefined) {
389
+ return this._endpoint;
390
+ }
391
+ this._parse_endoint();
392
+ return this._endpoint;
393
+ }
394
+ // Get the params.
395
+ /* @docs:
396
+ * @title: Parameters
397
+ * @description: Get the request's query or body params.
398
+ * property: true
399
+ * @type: object
400
+ * @usage:
401
+ * ...
402
+ * const params = stream.params;
403
+ */
404
+ get params() {
405
+ if (this._params !== undefined) {
406
+ return this._params;
407
+ }
408
+ this._parse_params();
409
+ return this._params;
410
+ }
411
+ // Get a param by name and optionally by type.
412
+ /* @docs:
413
+ * @title: Parameter
414
+ * @description: Get a single query or body parameter with an optional type cast.
415
+ * @warning: Throws an error when the parameter does not exist or when the type is different from the specified type(s), unless parameter `def` is defined.
416
+ * @param:
417
+ * @name: name
418
+ * @desc: The name of the parameter.
419
+ * @type: string
420
+ * @param:
421
+ * @name: type
422
+ * @desc: The type cast of the parameters, valid types are `[null, "boolean", "number", "string", "array", "object"]`.
423
+ * @type: string
424
+ * @param:
425
+ * @name: def
426
+ * @desc:
427
+ * The default value to return when the parameter does not exist.
428
+ *
429
+ * If the parameter is not defined and `def` is `undefined` then this function will throw an error.
430
+ * When `def` is `undefined` errors will be thrown, when `def` is `null` and the parameter is undefined then `null` will be returned as the default value.
431
+ *
432
+ * Errors will always be thrown when the incorrect type has been sent by the user.
433
+ * @type: any
434
+ * @usage:
435
+ * ...
436
+ * const param = stream.param("myparameter", "number", 10);
437
+ */
438
+ param(name, type = null, def = undefined) {
439
+ // Parse params.
440
+ this._parse_params();
441
+ // Get value.
442
+ let value = this._params[name];
443
+ // Check type.
444
+ if (type != null) {
445
+ // Vars.
446
+ let is_type_array = Array.isArray(type);
447
+ // Wrapper funcs.
448
+ const type_str = () => {
449
+ let str = "";
450
+ if (type != null) {
451
+ str += " type ";
452
+ if (is_type_array) {
453
+ let i = 0, one_but_last_i = type.length - 2;
454
+ type.forEach((item, i) => {
455
+ str += `"${item}"`;
456
+ if (i < one_but_last_i) {
457
+ str += ", ";
458
+ }
459
+ else if (i === one_but_last_i) {
460
+ str += " or ";
461
+ }
462
+ });
463
+ }
464
+ else {
465
+ str += `"${type}"`;
466
+ }
467
+ }
468
+ return str;
469
+ };
470
+ const type_eq_or_includes = (match) => {
471
+ if (is_type_array) {
472
+ return type.includes(match);
473
+ }
474
+ return match === type;
475
+ };
476
+ // Check undefined.
477
+ if (value == null || value === "") {
478
+ if (def !== undefined) {
479
+ return def;
480
+ }
481
+ throw Error(`Define parameter "${name}"${type_str()}.`);
482
+ }
483
+ // Cast the value to another type when a query string was used.
484
+ if (this._is_query_params && type_eq_or_includes("string") === false) {
485
+ if (is_type_array === false) {
486
+ type = [type];
487
+ }
488
+ const success = type.some((type) => {
489
+ // Convert to string.
490
+ if (type === "string") {
491
+ return true;
492
+ }
493
+ // Convert to null.
494
+ if (type === "null" && value === "null") {
495
+ value = null;
496
+ return true;
497
+ }
498
+ // Convert to boolean.
499
+ const is_boolean = type === "boolean";
500
+ if (is_boolean && value === "true") {
501
+ value = true;
502
+ return true;
503
+ }
504
+ if (is_boolean && value === "false") {
505
+ value = false;
506
+ return true;
507
+ }
508
+ // Convert to array.
509
+ if (type === "array") {
510
+ value = value.split(",");
511
+ return true;
512
+ }
513
+ // Convert to object.
514
+ if (type === "object") {
515
+ const split = value.split(",");
516
+ value = {};
517
+ split.forEach((item) => {
518
+ const pair = item.split(":");
519
+ value[pair[0]] = pair[1];
520
+ });
521
+ return true;
522
+ }
523
+ // Convert to numeric.
524
+ if (type === "number" && /^-?\d+(\.\d+)?$/.test(value)) {
525
+ value = parseFloat(value);
526
+ return true;
527
+ }
528
+ });
529
+ if (!success) {
530
+ throw Error(`Parameter "${name}" should be of${type_str()}.`);
531
+ }
532
+ }
533
+ // Check the type when no query params are defined since JSON.parse already parsed the types.
534
+ else if (!this._is_query_params) {
535
+ const value_type = typeof value;
536
+ if (!is_type_array) {
537
+ type = [type];
538
+ }
539
+ const success = type.some((type) => {
540
+ const l_is_array = type === "array";
541
+ const l_is_null = type === "null";
542
+ // Same type.
543
+ if (!l_is_array && !l_is_null && type === value_type) {
544
+ return true;
545
+ }
546
+ // Check to null.
547
+ if (l_is_null && value == null) {
548
+ return true;
549
+ }
550
+ // Convert to array.
551
+ if (l_is_array && Array.isArray(value)) {
552
+ return true;
553
+ }
554
+ });
555
+ if (!success) {
556
+ throw Error(`Parameter "${name}" should be of${type_str()}.`);
557
+ }
558
+ }
559
+ }
560
+ // Check undefined.
561
+ else if (value == null || value === "") {
562
+ if (def !== undefined) {
563
+ return def;
564
+ }
565
+ throw Error(`Define parameter "${name}".`);
566
+ }
567
+ // Return value.
568
+ return value;
569
+ }
570
+ // Get the request cookies.
571
+ /* @docs:
572
+ * @title: Cookies
573
+ * @description: Get the request's cookies
574
+ * property: true
575
+ * @type: object
576
+ * @usage:
577
+ * ...
578
+ * const cookies = stream.cookies;
579
+ */
580
+ get cookies() {
581
+ if (this._cookies !== undefined) {
582
+ return this._cookies;
583
+ }
584
+ this._parse_cookies();
585
+ return this._cookies;
586
+ }
587
+ // Check if the stream is closed
588
+ /* @docs:
589
+ * @title: Closed
590
+ * @description: Check if the stream is closed.
591
+ * @property: true
592
+ * @usage:
593
+ * ...
594
+ * const ip = stream.closed;
595
+ */
596
+ get closed() {
597
+ if (!this.http2) {
598
+ throw new Error("This function is only supported for http2 streams.");
599
+ }
600
+ return this.s.closed;
601
+ }
602
+ // Check if the stream is destroyed
603
+ /* @docs:
604
+ * @title: Destroyed
605
+ * @description: Check if the stream is destroyed.
606
+ * @property: true
607
+ * @usage:
608
+ * ...
609
+ * const ip = stream.destroyed;
610
+ */
611
+ get destroyed() {
612
+ if (this.http2) {
613
+ return this.s.destroyed;
614
+ }
615
+ else {
616
+ return this.req.destroyed;
617
+ }
618
+ }
619
+ // ---------------------------------------------------------
620
+ // Functions.
621
+ // Get the authenticated uid.
622
+ /* @docs:
623
+ * @title: UID
624
+ * @description: Get the authenticated uid, is `null` when the request was not authenticated.
625
+ * @property: true
626
+ * @type: string
627
+ * @usage:
628
+ * ...
629
+ * const uid = stream.uid;
630
+ */
631
+ get uid() {
632
+ return this._uid;
633
+ }
634
+ set uid(value) {
635
+ this._uid = value;
636
+ }
637
+ // Send a response.
638
+ /* @docs:
639
+ * @title: Send
640
+ * @description: Send a response
641
+ * @parameter:
642
+ * @name: status
643
+ * @description: The response status.
644
+ * @type: number
645
+ * @parameter:
646
+ * @name: headers
647
+ * @description: The response headers.
648
+ * @type: object
649
+ * @parameter:
650
+ * @name: body
651
+ * @description: The response body.
652
+ * @type: any
653
+ * @parameter:
654
+ * @name: data
655
+ * @description: The response data.
656
+ * @type: undefined, string
657
+ * @deprecated: true
658
+ * @parameter:
659
+ * @name: compress
660
+ * @description: A boolean indicating if the response data should be compressed.
661
+ * @type: boolean
662
+ * @usage:
663
+ * ...
664
+ * stream.send({status: 200, data: "Hello World!"});
665
+ */
666
+ send({ status = 200, headers = {}, body = null, data = null, compress = false } = {}) {
667
+ // Copy body.
668
+ if (data != null) {
669
+ body = data;
670
+ }
671
+ // Assign sent status code.
672
+ this.status_code = status;
673
+ // HTTP2.
674
+ if (this.http2) {
675
+ const stream = this.s;
676
+ // Headers.
677
+ this.res_headers[":status"] = status;
678
+ this.set_headers(headers);
679
+ if (this.res_cookies.length > 0) {
680
+ this.res_headers["set-cookie"] = this.res_cookies;
681
+ }
682
+ if (compress) {
683
+ this.res_headers["Content-Encoding"] = "gzip";
684
+ this.res_headers["Vary"] = "Accept-Encoding";
685
+ }
686
+ // Is json.
687
+ if (body != null && typeof body === 'object' && Buffer.isBuffer(body) === false && (body instanceof Uint8Array) === false) {
688
+ this.res_headers["Content-Type"] = "application/json";
689
+ body = JSON.stringify(body);
690
+ }
691
+ // Respond.
692
+ stream.respond(this.res_headers);
693
+ // Compress.
694
+ if (compress) {
695
+ body = zlib.gzipSync(body, { level: zlib.constants.Z_BEST_COMPRESSION });
696
+ }
697
+ // End.
698
+ if (body != null) {
699
+ stream.end(Buffer.from(body));
700
+ // stream.end(body); // do not use toString() here or it will cause issues with writing binary data.
701
+ }
702
+ else {
703
+ stream.end();
704
+ }
705
+ }
706
+ // HTTP1.
707
+ else {
708
+ const req = this.req;
709
+ const res = this.res;
710
+ // Set status code.
711
+ res.statusCode = status;
712
+ // Set headers.
713
+ for (let i = 0; i < this.res_headers.length; i++) {
714
+ res.setHeader(this.res_headers[i][0], this.res_headers[i][1]);
715
+ }
716
+ Object.keys(headers).forEach((key) => {
717
+ res.setHeader(key, headers[key]);
718
+ });
719
+ // Set cookies.
720
+ if (this.cookies.length > 0) {
721
+ res.setHeader('Set-Cookie', this.res_cookies);
722
+ }
723
+ // Convert data.
724
+ if (body != null && typeof body === 'object' && Buffer.isBuffer(body) === false && (body instanceof Uint8Array) === false) {
725
+ res.setHeader("Content-Type", "application/json");
726
+ body = JSON.stringify(body);
727
+ }
728
+ // @todo compress.
729
+ if (compress) {
730
+ res.setHeader("Content-Encoding", "gzip");
731
+ res.setHeader("Vary", "Accept-Encoding");
732
+ body = zlib.gzipSync(body, { level: zlib.constants.Z_BEST_COMPRESSION });
733
+ }
734
+ // Set data.
735
+ if (body != null) {
736
+ res.end(body); // do not use toString() here or it will cause issues with writing binary data.
737
+ }
738
+ // End.
739
+ else {
740
+ res.end();
741
+ }
742
+ }
743
+ // Set as finished.
744
+ this.finished = true;
745
+ return this;
746
+ }
747
+ // Send a successs response.
748
+ /* @docs:
749
+ * @title: Send Successs
750
+ * @description: Send a response
751
+ * @parameter:
752
+ * @name: status
753
+ * @description: The response status.
754
+ * @type: number
755
+ * @parameter:
756
+ * @name: headers
757
+ * @description: The response headers.
758
+ * @type: object
759
+ * @parameter:
760
+ * @name: body
761
+ * @description: The response data.
762
+ * @type: any
763
+ * @parameter:
764
+ * @name: data
765
+ * @description: The response data.
766
+ * @type: undefined, string
767
+ * @deprecated: true
768
+ * @parameter:
769
+ * @name: compress
770
+ * @description: A boolean indicating if the response data should be compressed.
771
+ * @type: boolean
772
+ * @usage:
773
+ * ...
774
+ * stream.success({data: "Hello World!"});
775
+ */
776
+ success({ status = 200, headers = {}, body = null, data = null, compress = false } = {}) {
777
+ return this.send({ status: status, headers: headers, body: body ?? data, compress: compress });
778
+ }
779
+ // Send an error response.
780
+ /* @docs:
781
+ * @title: Send Error
782
+ * @description: Send an error response
783
+ * @parameter:
784
+ * @name: status
785
+ * @description: The response status.
786
+ * @type: number
787
+ * @parameter:
788
+ * @name: headers
789
+ * @description: The response headers.
790
+ * @type: object
791
+ * @parameter:
792
+ * @name: body
793
+ * @description: The response data.
794
+ * @type: any
795
+ * @parameter:
796
+ * @name: data
797
+ * @description: The response data.
798
+ * @type: undefined, string
799
+ * @deprecated: true
800
+ * @parameter:
801
+ * @name: compress
802
+ * @description: A boolean indicating if the response data should be compressed.
803
+ * @type: boolean
804
+ * @usage:
805
+ * ...
806
+ * stream.error({data: "Some error occured"});
807
+ */
808
+ error({ status = 500, headers = {}, body = null, data = null, compress = false } = {}) {
809
+ return this.send({ status: status, headers: headers, body: body ?? data, compress: compress });
810
+ }
811
+ // Set headers.
812
+ /* @docs:
813
+ * @title: Set header
814
+ * @description: Add a new header to the response data.
815
+ * @parameter:
816
+ * @name: name
817
+ * @description: The header name.
818
+ * @type: string
819
+ * @parameter:
820
+ * @name: value
821
+ * @description: The header value.
822
+ * @type: string
823
+ * @usage:
824
+ * ...
825
+ * stream.set_header("Connection", "close");
826
+ */
827
+ set_header(name, value) {
828
+ if (this.http2) {
829
+ this.res_headers[name] = value;
830
+ }
831
+ else {
832
+ this.res_headers.append([name, value]);
833
+ }
834
+ return this;
835
+ }
836
+ // Set headers.
837
+ /* @docs:
838
+ * @title: Set headers
839
+ * @description: Add new headers to the response data.
840
+ * @parameter:
841
+ * @name: headers
842
+ * @description: The new response headers.
843
+ * @type: object
844
+ * @usage:
845
+ * ...
846
+ * stream.set_headers({"Connection": "close"});
847
+ */
848
+ set_headers(headers = {}) {
849
+ if (headers == null) {
850
+ return this;
851
+ }
852
+ if (this.http2) {
853
+ Object.keys(headers).forEach((key) => {
854
+ this.res_headers[key] = headers[key];
855
+ });
856
+ }
857
+ else {
858
+ Object.keys(headers).forEach((key) => {
859
+ this.res_headers.append([key, headers[key]]);
860
+ });
861
+ }
862
+ return this;
863
+ }
864
+ // Remove header.
865
+ /* @docs:
866
+ * @title: Remove headers
867
+ * @description: Remove header names from the response data.
868
+ * @parameter:
869
+ * @name: ...names
870
+ * @description: The header names to remove.
871
+ * @type: ...string
872
+ * @usage:
873
+ * ...
874
+ * stream.remove_header("Connection", "User-Agent");
875
+ * @funcs: 2
876
+ */
877
+ remove_header(...names) {
878
+ if (this.http1) {
879
+ const headers = [];
880
+ for (let i = 0; i < this.res_headers.length; i++) {
881
+ if (!names.includes(this.res_headers[i][0])) {
882
+ headers.push(this.res_headers[i]);
883
+ }
884
+ }
885
+ this.res_headers = headers;
886
+ }
887
+ else {
888
+ for (let i = 0; i < names.length; i++) {
889
+ delete this.res_headers[names[i]];
890
+ }
891
+ }
892
+ return this;
893
+ }
894
+ remove_headers(...names) {
895
+ return this.remove_header(...names);
896
+ }
897
+ // Set a cookie.
898
+ /* @docs:
899
+ * @title: Set cookie.
900
+ * @description: Set a cookie that will be sent with the response.
901
+ * @warning: Will only be added to the response when the user uses `send()`, `success()` or `error()`.
902
+ * @parameter:
903
+ * @name: cookie
904
+ * @description: The cookie string.
905
+ * @type: string
906
+ * @usage:
907
+ * ...
908
+ * stream.set_cookie("MyCookie=Hello World;");
909
+ */
910
+ set_cookie(cookie) {
911
+ cookie = cookie.trim();
912
+ const name_end = cookie.indexOf("=");
913
+ if (name_end !== -1) {
914
+ const name = cookie.substr(0, name_end);
915
+ for (let i = 0; i < this.res_cookies.length; i++) {
916
+ if (this.res_cookies[i].eq_first(name)) {
917
+ this.res_cookies[i] = cookie;
918
+ return this;
919
+ }
920
+ }
921
+ }
922
+ this.res_cookies.push(cookie);
923
+ return this;
924
+ }
925
+ // Set cookies.
926
+ /* @docs:
927
+ * @title: Set Cookies
928
+ * @description: Set a cookie that will be sent with the response.
929
+ * @warning: Will only be added to the response when the user uses `send()`, `success()` or `error()`.
930
+ * @parameter:
931
+ * @name: cookies
932
+ * @description: The cookie strings.
933
+ * @type: ...string
934
+ * @usage:
935
+ * ...
936
+ * stream.set_cookies("MyCookie1=Hello World;", "MyCookie2=Hello Universe;");
937
+ */
938
+ set_cookies(...cookies) {
939
+ for (let i = 0; i < cookies.length; i++) {
940
+ this.set_cookie(cookies[i]);
941
+ }
942
+ return this;
943
+ }
944
+ }
945
+ // ---------------------------------------------------------
946
+ // Exports.
947
+ export default Stream;