@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,740 @@
1
+ /*
2
+ * Author: Daan van den Bergh
3
+ * Copyright: © 2022 - 2024 Daan van den Bergh.
4
+ *
5
+ * WARNING:
6
+ * This script is also embedded into vweb.
7
+ * Therefore, it must be a standalone script not depending on anything from vlib except for Array.iterate.
8
+ * And beware that `vlib` will be replaced with `vweb`.
9
+ */
10
+
11
+ import { Colors } from "./colors.js"
12
+
13
+ // Types for scheme validation
14
+ type SchemeType = string | Function | (string | Function)[];
15
+
16
+ interface SchemeItem {
17
+ type?: SchemeType;
18
+ default?: any | ((obj: any) => any);
19
+ def?: any | ((obj: any) => any);
20
+ required?: boolean | ((attrs: any) => boolean);
21
+ allow_empty?: boolean;
22
+ min_length?: number;
23
+ max_length?: number;
24
+ alias?: string;
25
+ verify?: (attr: any, attrs: any, key?: string | number) => string | void | null | undefined;
26
+ callback?: (attr: any, attrs: any, key?: string | number) => string | void | null | undefined;
27
+ postprocess?: (attr: any, parent_obj: any, key: string | number) => any;
28
+ preprocess?: (attr: any, parent_obj: any, key: string | number) => any;
29
+ scheme?: Record<string, SchemeItem | string>;
30
+ value_scheme?: SchemeItem | string;
31
+ enum?: any[];
32
+ attrs?: Record<string, SchemeItem | string>;
33
+ attributes?: Record<string, SchemeItem | string>;
34
+ enumerate?: any[];
35
+ }
36
+
37
+ /** @docs
38
+ * @title Scheme
39
+ * @desc The scheme validation module
40
+ */
41
+ export const Scheme = {
42
+
43
+ /** @docs
44
+ * @title value_type
45
+ * @desc Get a value type for error reporting
46
+ */
47
+ value_type(value: any): string {
48
+ if (value == null) { return "null"; }
49
+ else if (typeof value === "object" && Array.isArray(value)) { return "array"; }
50
+ else { return typeof value; }
51
+ },
52
+
53
+ // Initialize scheme item.
54
+ // Param `scheme` and `scheme` key should be assigned when validating non array objects.
55
+ init_scheme_item(scheme_item: SchemeItem | string, scheme?: Record<string, string | SchemeItem>, scheme_key?: string): SchemeItem {
56
+
57
+ // Convert scheme item into object.
58
+ if (typeof scheme_item === "string") {
59
+ scheme_item = {type: scheme_item};
60
+
61
+ // Convert to object for subsequent requests, useful for vweb restapi callback.
62
+ if (scheme !== undefined && scheme_key !== undefined) {
63
+ scheme[scheme_key] = scheme_item;
64
+ }
65
+ }
66
+
67
+ // Rename aliases.
68
+ else {
69
+ if (scheme_item.def !== undefined) {
70
+ scheme_item.default = scheme_item.def;
71
+ delete scheme_item.def;
72
+ }
73
+ if (scheme_item.attrs !== undefined) {
74
+ scheme_item.scheme = scheme_item.attrs;
75
+ delete scheme_item.attrs;
76
+ }
77
+ else if (scheme_item.attributes !== undefined) {
78
+ scheme_item.scheme = scheme_item.attributes;
79
+ delete scheme_item.attributes;
80
+ }
81
+ if (scheme_item.enumerate !== undefined) {
82
+ scheme_item.enum = scheme_item.enumerate;
83
+ delete scheme_item.enumerate;
84
+ }
85
+ }
86
+
87
+ // Response.
88
+ return scheme_item as SchemeItem;
89
+ },
90
+
91
+ /** @docs
92
+ * @title type_error_str
93
+ * @desc Generate a type error string
94
+ */
95
+ type_error_str(scheme_item: SchemeItem, prefix: string = " of type "): string {
96
+ let type_error_str = "";
97
+ if (Array.isArray(scheme_item.type)) {
98
+ type_error_str = prefix;
99
+ for (let i = 0; i < scheme_item.type.length; i++) {
100
+ if (typeof scheme_item.type[i] === "function") {
101
+ try {
102
+ type_error_str += `"${(scheme_item.type[i] as unknown as Function).name}"`
103
+ } catch (e) {
104
+ type_error_str += `"${scheme_item.type[i]}"`
105
+ }
106
+ } else {
107
+ type_error_str += `"${scheme_item.type[i]}"`
108
+ }
109
+ if (i === scheme_item.type.length - 2) {
110
+ type_error_str += " or "
111
+ } else if (i < scheme_item.type.length - 2) {
112
+ type_error_str += ", "
113
+ }
114
+ }
115
+ } else {
116
+ type_error_str = `${prefix}"${scheme_item.type}"`
117
+ }
118
+ return type_error_str;
119
+ },
120
+
121
+ /** @docs:
122
+ * @title: Verify scheme
123
+ * @desc:
124
+ * Verify an object/array against a scheme
125
+ *
126
+ * This function can also be used to verify array items. Pass the array in parameter `object` and pass a `AttributeScheme` object in parameter `scheme`.
127
+ * @param:
128
+ * @name: object
129
+ * @desc: The object parameters.
130
+ * @type: object
131
+ * @param:
132
+ * @name: scheme
133
+ * @desc:
134
+ * The object or array scheme.
135
+ * @type: Scheme
136
+ * @attribute:
137
+ * @name: [key]
138
+ * @desc: The matching parameter key from parameter `object`.
139
+ * @attribute:
140
+ * @name: property
141
+ * @desc:
142
+ * The parameter information. It can either be a string or an object.
143
+
144
+ * When the property is a string, then it will be assigned as to the parameter's type value.
145
+ * @type: string, AttributeScheme
146
+ * @attributes_type: AttributeScheme
147
+ * @attribute:
148
+ * @name: type
149
+ * @desc: The type(s) of the parameter.
150
+ * @type: string, array[string]
151
+ * @attribute:
152
+ * @name: def
153
+ * @type: any, function
154
+ * @desc:
155
+ * The default value of the parameter.
156
+ * A function may also be passed to this attribute to compute the default value. The function takes a single argument `object`, the parent object of the attribute that will be set. The returned value will be assigned to the missing attribute.
157
+ * @attribute:
158
+ * @name: required
159
+ * @desc:
160
+ * A flag to indicate if the parameter is required. However, when attribute `def` is defined, the attribute is never required.
161
+ * The type may also be an callback function which should return a boolean indicating the required flag. The callback takes arguments `(attrs)`, which is the parent attributes object of the attribute being checked.
162
+ * @type: boolean, function
163
+ * @def: true
164
+ * @attribute:
165
+ * @name: allow_empty
166
+ * @desc: By default empty strings are not allowed when one of the types is `string`, the allow empty flag can be set to `true` to disable this behaviour.
167
+ * @type: boolean
168
+ * @def: false
169
+ * @attribute:
170
+ * @name: min_length
171
+ * @desc: The minimum value length of arrays or strings.
172
+ * @type: number
173
+ * @required: false
174
+ * @attribute:
175
+ * @name: max_length
176
+ * @desc: The maximum value length of arrays or strings.
177
+ * @type: number
178
+ * @required: false
179
+ * @attribute:
180
+ * @name: alias
181
+ * @desc: When two attributes share the same value scheme you can refer to the value scheme of another attribute by assigning the alias attribute with the according attribute name.
182
+ * @type: string
183
+ * @required: false
184
+ * @attribute:
185
+ * @name: verify
186
+ * @desc:
187
+ * A callback to check the parameter.
188
+ * The callback takes arguments `(attr, attrs)` with the assigned attribute value and the parent attribute object.
189
+ * However, when the `object` is an array the callback takes arguments `(attr, attrs, index)`.
190
+ * The callback will only be executed when the parameter is defined, so not when it is undefined but set by attribute `def`.
191
+ * An error can be caused by returning a string as an error description. This ensures errors are thrown in the same way.
192
+ * @type: function
193
+ * @attribute:
194
+ * @deprecated: true
195
+ * @name: callback
196
+ * @desc:
197
+ * A callback to check the parameter.
198
+ * The callback takes arguments `(attr, parent_obj, key)` with the assigned attribute value and the parent attribute object.
199
+ * However, when the `object` is an array the callback takes arguments `(attr, parent_arr, index)`.
200
+ * The callback will only be executed when the parameter is defined, so not when it is undefined but set by attribtue `def`.
201
+ * An error can be caused by returning a string as an error description. This ensures errors are thrown in the same way.
202
+ * @type: function
203
+ * @attribute:
204
+ * @name: postprocess
205
+ * @desc:
206
+ * A callback to post process the attribute's value. The returned value of the callback will be assigned to the attribute, unless the callback returns `undefined`.
207
+ * The callback takes arguments `(attr, parent_obj, key)` with the assigned attribute value and the parent attribute object.
208
+ * However, when the `object` is an array the callback takes arguments `(attr, parent_arr, index)`.
209
+ * @type: function
210
+ * @attribute:
211
+ * @name: preprocess
212
+ * @desc:
213
+ * A callback to pre process the attribute's value before anyting else. The returned value of the callback will be assigned to the attribute, unless the callback returns `undefined`.
214
+ * The callback takes arguments `(attr, parent_obj, key)` with the assigned attribute value and the parent attribute object.
215
+ * However, when the `object` is an array the callback takes arguments `(attr, parent_arr, index)`.
216
+ * @type: function
217
+ * @attribute:
218
+ * @name: scheme
219
+ * @desc: The recursive `scheme` for when the parameter is an object, the `scheme` attribute follows the same rules as the main function's `scheme` parameter. However, when the object is an array, the scheme should be for an array item.
220
+ * @type: object
221
+ * @attribute:
222
+ * @name: value_scheme
223
+ * @desc: The universal `scheme` for object values, only used in arrays and raw objects.
224
+ * @type: object
225
+ * @attribute:
226
+ * @name: enum
227
+ * @desc: Validate that an object/array value is one of the enumerate items.
228
+ * @type: string[]
229
+ * @param:
230
+ * @name: check_unknown
231
+ * @desc: Throw an error when unknown attributes were passed.
232
+ * @type: boolean
233
+ * @param:
234
+ * @name: parent
235
+ * @desc: The error parent prefix.
236
+ * @type: string
237
+ * @param:
238
+ * @name: error_prefix
239
+ * @desc: The error prefix.
240
+ * @type: string
241
+ * @param:
242
+ * @name: throw_err
243
+ * @desc: Throw an error or return a response object.
244
+ * @type: boolean
245
+ */
246
+ verify({
247
+ object = {},
248
+ scheme = {},
249
+ value_scheme = null,
250
+ check_unknown = false,
251
+ parent = "",
252
+ error_prefix = "",
253
+ err_prefix = null,
254
+ throw_err = true,
255
+ }: {
256
+ object?: any;
257
+ scheme?: Record<string, SchemeItem | string>;
258
+ value_scheme?: SchemeItem | string | null;
259
+ check_unknown?: boolean;
260
+ parent?: string;
261
+ error_prefix?: string;
262
+ err_prefix?: string | null;
263
+ throw_err?: boolean;
264
+ }): any {
265
+
266
+ // Set error prefix.
267
+ if (err_prefix !== null) {
268
+ error_prefix = err_prefix;
269
+ }
270
+ if (typeof parent === "string" && parent.length > 0 && /[a-zA-Z0-9]+/g.test(parent.charAt(parent.length - 1))) {
271
+ parent += ".";
272
+ }
273
+
274
+ // Throw an error and pop the verify_object from the stacktrace.
275
+ const throw_err_h = (e, field) => {
276
+ const invalid_fields = {};
277
+ invalid_fields[field] = e;
278
+ if (throw_err === false) {
279
+ return {error: e, invalid_fields, object: null};
280
+ }
281
+ const error = new Error(e);
282
+ // let stack = error.stack.split("\n");
283
+ // stack = [stack[0], ...stack.slice(3)];
284
+ // error.stack = stack.join("\n");
285
+ error.json = {error: e, invalid_fields, object: null};
286
+ throw error;
287
+ }
288
+
289
+ // Check type of the parameter function.
290
+ // Scheme key may also be an index for when object is an array.
291
+ const check_type = (object, obj_key, scheme_item, type) => {
292
+
293
+ // Check VS instance.
294
+ if (typeof type === "function") {
295
+ return object[obj_key] instanceof type;
296
+ }
297
+
298
+ // Check vs string named type.
299
+ switch (type) {
300
+ case "null":
301
+ return object[obj_key] == null;
302
+ case "array": {
303
+ if (Array.isArray(object[obj_key]) === false) {
304
+ return false;
305
+ }
306
+ if (scheme_item.scheme || scheme_item.value_scheme) {
307
+ try {
308
+ object[obj_key] = Scheme.verify({
309
+ object: object[obj_key],
310
+ scheme: scheme_item.scheme,
311
+ value_scheme: scheme_item.value_scheme,
312
+ check_unknown,
313
+ parent: `${parent}${obj_key}.`,
314
+ error_prefix,
315
+ throw_err: true,
316
+ });
317
+ } catch (e: any) {
318
+ if (!throw_err && e.json) { return e.json; }
319
+ else { throw e; }
320
+ }
321
+ }
322
+
323
+ // Check min max items.
324
+ if (typeof scheme_item.min_length === "number" && object[obj_key].length < scheme_item.min_length) {
325
+ const field = `${parent}${obj_key}`;
326
+ return throw_err_h(`${error_prefix}Attribute "${field}" has an invalid array length [${object[obj_key].length}], the minimum length is [${scheme_item.min_length}].`, field);
327
+ }
328
+ if (typeof scheme_item.max_length === "number" && object[obj_key].length > scheme_item.max_length) {
329
+ const field = `${parent}${obj_key}`;
330
+ return throw_err_h(`${error_prefix}Attribute "${field}" has an invalid array length [${object[obj_key].length}], the maximum length is [${scheme_item.max_length}].`, field);
331
+ }
332
+ return true;
333
+ }
334
+ case "object": {
335
+ if (typeof object[obj_key] !== "object" || object[obj_key] == null) {
336
+ return false;
337
+ }
338
+ if (scheme_item.scheme || scheme_item.value_scheme) {
339
+ try {
340
+ object[obj_key] = Scheme.verify({
341
+ object: object[obj_key],
342
+ scheme: scheme_item.scheme,
343
+ value_scheme: scheme_item.value_scheme,
344
+ check_unknown,
345
+ parent: `${parent}${obj_key}.`,
346
+ error_prefix,
347
+ throw_err: true,
348
+ });
349
+ } catch (e: any) {
350
+ if (!throw_err && e.json) { return e.json; }
351
+ else { throw e; }
352
+ }
353
+ }
354
+ return true;
355
+ }
356
+ case "string": {
357
+ if (typeof object[obj_key] !== "string" && !(object[obj_key] instanceof String)) {
358
+ return false;
359
+ }
360
+ if (scheme_item.allow_empty !== true && object[obj_key].length === 0) {
361
+ return 1;
362
+ }
363
+ if (typeof scheme_item.min_length === "number" && object[obj_key].length < scheme_item.min_length) {
364
+ const field = `${parent}${obj_key}`;
365
+ return throw_err_h(`${error_prefix}Attribute "${field}" has an invalid string length [${object[obj_key].length}], the minimum length is [${scheme_item.min_length}].`, field);
366
+ }
367
+ if (typeof scheme_item.max_length === "number" && object[obj_key].length > scheme_item.max_length) {
368
+ const field = `${parent}${obj_key}`;
369
+ return throw_err_h(`${error_prefix}Attribute "${field}" has an invalid string length [${object[obj_key].length}], the maximum length is [${scheme_item.max_length}].`, field);
370
+ }
371
+ }
372
+ default:
373
+ if (type !== typeof object[obj_key]) {
374
+ return false;
375
+ }
376
+ if (type === "string" && scheme_item.allow_empty !== true && object[obj_key].length === 0) {
377
+ return 1;
378
+ }
379
+ return true;
380
+ }
381
+ }
382
+
383
+ // Verify a value by scheme.
384
+ const verify_value_scheme = (scheme_item, key, object, value_scheme_key = undefined) => {
385
+
386
+ // Execute the pre process callback.
387
+ if (typeof scheme_item.preprocess === "function") {
388
+ const res = scheme_item.preprocess(object[key], object, key);
389
+ if (res !== undefined) {
390
+ object[key] = res;
391
+ }
392
+ }
393
+
394
+ // Do a type check.
395
+ if (scheme_item.type && scheme_item.type !== "any") {
396
+ const is_required = scheme_item.required ?? true;
397
+
398
+ // Skip when value is `null / undefined` and default is `null`.
399
+ if (scheme_item.default === null && object[key] == null) {
400
+ }
401
+
402
+ // Multiple types supported.
403
+ else if (Array.isArray(scheme_item.type)) {
404
+ let correct_type = false;
405
+ let is_empty = false;
406
+ for (let i = 0; i < scheme_item.type.length; i++) {
407
+ const res = check_type(object, key, scheme_item, scheme_item.type[i]);
408
+ if (typeof res === "object") { // json error.
409
+ return res;
410
+ }
411
+ else if (res === true) {
412
+ correct_type = true;
413
+ break;
414
+ }
415
+ else if (res === 1) {
416
+ correct_type = true;
417
+ is_empty = true;
418
+ break;
419
+ }
420
+ }
421
+ if (correct_type === false) {
422
+ const field = `${parent}${value_scheme_key || key}`;
423
+ const current_type = Scheme.value_type(object[key]);
424
+ return throw_err_h(`${error_prefix}Attribute "${field}" has an invalid type "${current_type}", the valid type is ${Scheme.type_error_str(scheme_item, "")}.`, field);
425
+ }
426
+ else if (is_empty && is_required && scheme_item.default !== "") {
427
+ const field = `${parent}${value_scheme_key || key}`;
428
+ return throw_err_h(`${error_prefix}Attribute "${field}" is an empty string.`, field);
429
+ }
430
+ }
431
+
432
+ // Single type supported.
433
+ else {
434
+ const res = check_type(object, key, scheme_item, scheme_item.type);
435
+ if (typeof res === "object") { // json error.
436
+ return res;
437
+ }
438
+ else if (res === false) {
439
+ const field = `${parent}${value_scheme_key || key}`;
440
+ const current_type = Scheme.value_type(object[key]);
441
+ return throw_err_h(`${error_prefix}Attribute "${field}" has an invalid type "${current_type}", the valid type is ${Scheme.type_error_str(scheme_item, "")}.`, field);
442
+ }
443
+ else if (res === 1 && is_required && scheme_item.default !== "") {
444
+ const field = `${parent}${value_scheme_key || key}`;
445
+ return throw_err_h(`${error_prefix}Attribute "${field}" is an empty string.`, field);
446
+ }
447
+ }
448
+ }
449
+
450
+ // Set default.
451
+ if (object[key] === undefined && scheme_item.default !== undefined) {
452
+ if (typeof scheme_item.default === "function") {
453
+ object[key] = scheme_item.default(object);
454
+ } else {
455
+ object[key] = scheme_item.default;
456
+ }
457
+ }
458
+ // if (object[key] === undefined && scheme_item[key]?.default !== undefined) {
459
+ // // console.log(`Set default "${key}" with value "${scheme_item[key].default}".`)
460
+ // object[key] = scheme_item[key].default;
461
+ // }
462
+
463
+ // Check enum.
464
+ if (scheme_item.enum) {
465
+ if (!scheme_item.enum.includes(object[key])) {
466
+ const field = `${parent}${value_scheme_key || key}`;
467
+ const joined = scheme_item.enum.map(item => {
468
+ if (item == null) {
469
+ return 'null';
470
+ } else if (typeof item !== "string" && !(item instanceof String)) {
471
+ return item.toString();
472
+ }
473
+ return `"${item.toString()}"`;
474
+ }).join(", ");
475
+ return throw_err_h(`${error_prefix}Attribute "${field}" must be one of the following enumerated values [${joined}].`, field);
476
+ }
477
+ }
478
+
479
+ // Execute the verify callback.
480
+ if (typeof scheme_item.verify === "function") {
481
+ const err = scheme_item.verify(object[key], object, key);
482
+ if (err) {
483
+ return throw_err_h(`${error_prefix}${err}`, `${parent}${value_scheme_key || key}`);
484
+ }
485
+ }
486
+ if (typeof scheme_item.callback === "function") {
487
+
488
+ // Show deprecated warning with shortened stack trace.
489
+ let stack: string[] = new Error("SPLIT-AFTER").stack?.split("SPLIT-AFTER\n")[1].split('\n') ?? [];
490
+ let last = -1;
491
+ for (let i = 0; i < stack.length; i++) {
492
+ if (stack[i].includes('at Scheme.verify ')) {
493
+ last = i;
494
+ }
495
+ }
496
+ if (last !== -1) {
497
+ stack = stack.slice(last);
498
+ }
499
+ console.warn(`${Colors.end}[Scheme.verify] ${Colors.yellow}Warning${Colors.end}: Attribute "callback" is deprecated and replaced by attribute "verify" and will be removed in future versions.\n${stack.join('\n')}`);
500
+
501
+ // Still proceed as normal.
502
+ const err = scheme_item.callback(object[key], object, key);
503
+ if (err) {
504
+ return throw_err_h(`${error_prefix}${err}`, `${parent}${value_scheme_key || key}`);
505
+ }
506
+ }
507
+
508
+ // Execute the post process callback.
509
+ if (typeof scheme_item.postprocess === "function") {
510
+ const res = scheme_item.postprocess(object[key], object, key);
511
+ if (res !== undefined) {
512
+ object[key] = res;
513
+ }
514
+ }
515
+ }
516
+
517
+
518
+ // When object is an array.
519
+ if (Array.isArray(object)) {
520
+
521
+ // @deprecated: No longer use scheme for arrays since if a param may be both an array and obj, there must be a distinction possible to verify the scheme of the possible object vs the value scheme of a possible array.
522
+ //
523
+ // Always use value scheme.
524
+ if (value_scheme != null) {
525
+
526
+ // Use the scheme as a scheme item for the entire array.
527
+ const scheme_item = Scheme.init_scheme_item(value_scheme);
528
+
529
+ // Iterate array.
530
+ for (let index = 0; index < object.length; index++) {
531
+ const err = verify_value_scheme(scheme_item, index, object);
532
+ if (err) { return err; }
533
+ }
534
+ }
535
+ }
536
+
537
+ // When object is an object.
538
+ else {
539
+
540
+ // Verify object's value scheme.
541
+ // So only check the values of the object, not the object itself.
542
+ if (value_scheme != null) {
543
+
544
+ // Convert scheme item into object.
545
+ const scheme_item = Scheme.init_scheme_item(value_scheme);
546
+
547
+ // Iterate the object.
548
+ const keys = Object.keys(object);
549
+ for (let i = 0; i < keys.length; i++) {
550
+
551
+ // Verify the values of the object by scheme.
552
+ const err = verify_value_scheme(scheme_item, keys[i], object);
553
+ if (err) { return err; }
554
+ }
555
+ }
556
+
557
+ // Verify the object itself.
558
+ else {
559
+
560
+ // Iterate all object to check if there are any undefined object passed.
561
+ // This must be done before checking known attributes, otherwise it can lead to weird error messages when attributes are only required if other (wrongly-spelled) attributes are missing.
562
+ if (check_unknown) {
563
+ const object_keys = Object.keys(object);
564
+ for (let x = 0; x < object_keys.length; x++) {
565
+ if (object_keys[x] in scheme === false) {
566
+ const field = `${parent}${object_keys[x]}`;
567
+ return throw_err_h(`${error_prefix}Attribute "${field}" is not a valid attribute name.`, field);
568
+ }
569
+ }
570
+ }
571
+
572
+ // Iterate all scheme object to check if any object are missing.
573
+ const scheme_keys = Object.keys(scheme);
574
+ for (let scheme_index = 0; scheme_index < scheme_keys.length; scheme_index++) {
575
+ const scheme_key = scheme_keys[scheme_index];
576
+ if (scheme[scheme_key] == null) {
577
+ continue;
578
+ }
579
+ let scheme_item = Scheme.init_scheme_item(scheme[scheme_key], scheme, scheme_key);
580
+ if (typeof scheme_item.alias === "string") {
581
+ scheme_item = Scheme.init_scheme_item(scheme[scheme_item.alias], scheme, scheme_item.alias);
582
+ }
583
+
584
+
585
+ // Parameter is not found in passed object.
586
+ if (scheme_key in object === false) {
587
+
588
+ // Not required.
589
+
590
+ // Set default.
591
+ if (scheme_item.default !== undefined) {
592
+ if (typeof scheme_item.default === "function") {
593
+ object[scheme_key] = scheme_item.default(object);
594
+ } else {
595
+ object[scheme_key] = scheme_item.default;
596
+ }
597
+ }
598
+
599
+ // Required unless specified otherwise.
600
+ else {
601
+ if (scheme_item.required === false) {
602
+ continue;
603
+ }
604
+ else if (typeof scheme_item.required === "function") {
605
+ const required = scheme_item.required(object);
606
+ if (required) {
607
+ const field = `${parent}${scheme_key}`;
608
+ return throw_err_h(`${error_prefix}Attribute "${field}" should be a defined value${Scheme.type_error_str(scheme_item)}.`, field);
609
+ }
610
+ } else {
611
+ const field = `${parent}${scheme_key}`;
612
+ return throw_err_h(`${error_prefix}Attribute "${field}" should be a defined value${Scheme.type_error_str(scheme_item)}.`, field);
613
+ }
614
+ }
615
+
616
+ // Continue.
617
+ continue;
618
+ }
619
+
620
+ // Verify value.
621
+ const err = verify_value_scheme(scheme_item, scheme_key, object);
622
+ if (err) { return err; }
623
+ }
624
+ }
625
+ }
626
+
627
+ // Return when no throw err.
628
+ if (throw_err === false) {
629
+ return {error: null, invalid_fields: {}, object};
630
+ }
631
+ return object;
632
+ },
633
+
634
+ /** @docs
635
+ * @title _type_string
636
+ * @desc Create a type string from an array
637
+ */
638
+ _type_string(type: SchemeType = [], prefix: string = ""): string {
639
+ if (typeof type === "string") {
640
+ return `${prefix}"${type}"`;
641
+ }
642
+ if (Array.isArray(type) && type.length > 0) {
643
+ let str = prefix;
644
+ for (let i = 0; i < type.length; i++) {
645
+ if (typeof type[i] === "function") {
646
+ try {
647
+ str += `"${(type[i] as unknown as Function).name}"`
648
+ } catch (e) {
649
+ str += `"${type[i]}"`
650
+ }
651
+ } else {
652
+ str += `"${type[i]}"`
653
+ }
654
+ if (i === type.length - 2) {
655
+ str += " or "
656
+ } else if (i < type.length - 2) {
657
+ str += ", "
658
+ }
659
+ }
660
+ return str;
661
+ }
662
+ return "";
663
+ },
664
+
665
+ // Throw an error saying an argument is undefined.
666
+ // @note supports keyword (obj) assignment parameters using the same names and a single object argument.
667
+ /** @docs
668
+ * @title throw_undefined
669
+ * @desc Throw an error for undefined arguments
670
+ */
671
+ throw_undefined(
672
+ name: string | {
673
+ name: string;
674
+ type?: SchemeType;
675
+ throw_err?: boolean;
676
+ },
677
+ type: SchemeType = [],
678
+ throw_err: boolean = true
679
+ ): string {
680
+ // Support keyword assignment params.
681
+ if (typeof name === "object" && name != null) {
682
+ ({
683
+ name,
684
+ type = [],
685
+ throw_err = true,
686
+ } = name);
687
+ }
688
+ const err = `Argument "${name as string}" should be a defined value${Scheme._type_string(type, " of type ")}.`
689
+ if (throw_err) {
690
+ throw new Error(err);
691
+ }
692
+ return err;
693
+ },
694
+
695
+ // Throw an error saying an argument is undefined.
696
+ // @note supports keyword (obj) assignment parameters using the same names and a single object argument.
697
+ /** @docs
698
+ * @title throw_invalid_type
699
+ * @desc Throw an error for invalid type arguments
700
+ */
701
+ throw_invalid_type(
702
+ name: string | {
703
+ name: string;
704
+ value: any;
705
+ type?: SchemeType;
706
+ throw_err?: boolean;
707
+ },
708
+ value?: any,
709
+ type: SchemeType = [],
710
+ throw_err: boolean = true
711
+ ): string {
712
+ // Support keyword assignment params.
713
+ if (typeof name === "object" && name != null) {
714
+ ({
715
+ name,
716
+ value,
717
+ type = [],
718
+ throw_err = true,
719
+ } = name);
720
+ }
721
+ const err = `Invalid type "${Scheme.value_type(value)}" for argument "${name as string}"${Scheme._type_string(type, ", the valid type is ")}.`
722
+ if (throw_err) {
723
+ throw new Error(err);
724
+ }
725
+ return err;
726
+ }
727
+ } as const;
728
+
729
+ // Add type for extended Error with json property
730
+ declare global {
731
+ interface Error {
732
+ json?: {
733
+ error: string;
734
+ invalid_fields: Record<string, string>;
735
+ object: null;
736
+ };
737
+ }
738
+ }
739
+
740
+ export default Scheme;