@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.
- package/.vrepo +28 -0
- package/.vscode/tasks.json +87 -0
- package/README.md +67 -0
- package/backend/dist/cjs/blacklist.d.ts +10 -0
- package/backend/dist/cjs/blacklist.js +53 -0
- package/backend/dist/cjs/cli.d.ts +2 -0
- package/backend/dist/cjs/cli.js +263 -0
- package/backend/dist/cjs/database.d.ts +364 -0
- package/backend/dist/cjs/database.js +1962 -0
- package/backend/dist/cjs/endpoint.d.ts +57 -0
- package/backend/dist/cjs/endpoint.js +425 -0
- package/backend/dist/cjs/file_watcher.d.ts +44 -0
- package/backend/dist/cjs/file_watcher.js +348 -0
- package/backend/dist/cjs/frontend.d.ts +13 -0
- package/backend/dist/cjs/frontend.js +30 -0
- package/backend/dist/cjs/image_endpoint.d.ts +24 -0
- package/backend/dist/cjs/image_endpoint.js +210 -0
- package/backend/dist/cjs/logger.d.ts +5 -0
- package/backend/dist/cjs/logger.js +16 -0
- package/backend/dist/cjs/meta.d.ts +50 -0
- package/backend/dist/cjs/meta.js +153 -0
- package/backend/dist/cjs/mutex.d.ts +24 -0
- package/backend/dist/cjs/mutex.js +52 -0
- package/backend/dist/cjs/package.json +1 -0
- package/backend/dist/cjs/payments/paddle.d.ts +161 -0
- package/backend/dist/cjs/payments/paddle.js +2301 -0
- package/backend/dist/cjs/plugins/browser.d.ts +36 -0
- package/backend/dist/cjs/plugins/browser.js +183 -0
- package/backend/dist/cjs/plugins/communication.d.ts +70 -0
- package/backend/dist/cjs/plugins/communication.js +177 -0
- package/backend/dist/cjs/plugins/css.d.ts +10 -0
- package/backend/dist/cjs/plugins/css.js +71 -0
- package/backend/dist/cjs/plugins/mail.d.ts +277 -0
- package/backend/dist/cjs/plugins/mail.js +1419 -0
- package/backend/dist/cjs/plugins/pdf.d.ts +757 -0
- package/backend/dist/cjs/plugins/pdf.js +1694 -0
- package/backend/dist/cjs/plugins/thread_monitor.d.ts +18 -0
- package/backend/dist/cjs/plugins/thread_monitor.js +127 -0
- package/backend/dist/cjs/plugins/ts/compiler.d.ts +132 -0
- package/backend/dist/cjs/plugins/ts/compiler.js +944 -0
- package/backend/dist/cjs/plugins/ts/preprocessing.d.ts +14 -0
- package/backend/dist/cjs/plugins/ts/preprocessing.js +762 -0
- package/backend/dist/cjs/rate_limit.d.ts +65 -0
- package/backend/dist/cjs/rate_limit.js +463 -0
- package/backend/dist/cjs/request.deprc.d.ts +48 -0
- package/backend/dist/cjs/request.deprc.js +572 -0
- package/backend/dist/cjs/response.deprc.d.ts +55 -0
- package/backend/dist/cjs/response.deprc.js +275 -0
- package/backend/dist/cjs/server.d.ts +311 -0
- package/backend/dist/cjs/server.js +3475 -0
- package/backend/dist/cjs/splash_screen.d.ts +35 -0
- package/backend/dist/cjs/splash_screen.js +152 -0
- package/backend/dist/cjs/status.d.ts +60 -0
- package/backend/dist/cjs/status.js +199 -0
- package/backend/dist/cjs/stream.d.ts +75 -0
- package/backend/dist/cjs/stream.js +954 -0
- package/backend/dist/cjs/users.d.ts +111 -0
- package/backend/dist/cjs/users.js +1945 -0
- package/backend/dist/cjs/utils.d.ts +27 -0
- package/backend/dist/cjs/utils.js +329 -0
- package/backend/dist/cjs/view.d.ts +52 -0
- package/backend/dist/cjs/view.js +568 -0
- package/backend/dist/cjs/vinc.d.ts +2 -0
- package/backend/dist/cjs/vinc.dev.d.ts +2 -0
- package/backend/dist/cjs/vinc.dev.js +42 -0
- package/backend/dist/cjs/vinc.js +42 -0
- package/backend/dist/cjs/volt.d.ts +15 -0
- package/backend/dist/cjs/volt.js +64 -0
- package/backend/dist/css/adyen.css +92 -0
- package/backend/dist/css/volt.css +65 -0
- package/backend/dist/esm/blacklist.d.ts +10 -0
- package/backend/dist/esm/blacklist.js +49 -0
- package/backend/dist/esm/cli.d.ts +2 -0
- package/backend/dist/esm/cli.js +228 -0
- package/backend/dist/esm/database.d.ts +364 -0
- package/backend/dist/esm/database.js +1957 -0
- package/backend/dist/esm/endpoint.d.ts +57 -0
- package/backend/dist/esm/endpoint.js +421 -0
- package/backend/dist/esm/file_watcher.d.ts +44 -0
- package/backend/dist/esm/file_watcher.js +313 -0
- package/backend/dist/esm/frontend.d.ts +13 -0
- package/backend/dist/esm/frontend.js +27 -0
- package/backend/dist/esm/image_endpoint.d.ts +24 -0
- package/backend/dist/esm/image_endpoint.js +206 -0
- package/backend/dist/esm/logger.d.ts +5 -0
- package/backend/dist/esm/logger.js +13 -0
- package/backend/dist/esm/meta.d.ts +50 -0
- package/backend/dist/esm/meta.js +149 -0
- package/backend/dist/esm/mutex.d.ts +24 -0
- package/backend/dist/esm/mutex.js +48 -0
- package/backend/dist/esm/payments/paddle.d.ts +161 -0
- package/backend/dist/esm/payments/paddle.js +2261 -0
- package/backend/dist/esm/plugins/browser.d.ts +36 -0
- package/backend/dist/esm/plugins/browser.js +176 -0
- package/backend/dist/esm/plugins/communication.d.ts +70 -0
- package/backend/dist/esm/plugins/communication.js +169 -0
- package/backend/dist/esm/plugins/css.d.ts +10 -0
- package/backend/dist/esm/plugins/css.js +64 -0
- package/backend/dist/esm/plugins/mail.d.ts +277 -0
- package/backend/dist/esm/plugins/mail.js +1403 -0
- package/backend/dist/esm/plugins/pdf.d.ts +757 -0
- package/backend/dist/esm/plugins/pdf.js +1694 -0
- package/backend/dist/esm/plugins/thread_monitor.d.ts +18 -0
- package/backend/dist/esm/plugins/thread_monitor.js +120 -0
- package/backend/dist/esm/plugins/ts/compiler.d.ts +132 -0
- package/backend/dist/esm/plugins/ts/compiler.js +907 -0
- package/backend/dist/esm/plugins/ts/preprocessing.d.ts +14 -0
- package/backend/dist/esm/plugins/ts/preprocessing.js +724 -0
- package/backend/dist/esm/rate_limit.d.ts +65 -0
- package/backend/dist/esm/rate_limit.js +425 -0
- package/backend/dist/esm/request.deprc.d.ts +48 -0
- package/backend/dist/esm/request.deprc.js +572 -0
- package/backend/dist/esm/response.deprc.d.ts +55 -0
- package/backend/dist/esm/response.deprc.js +275 -0
- package/backend/dist/esm/server.d.ts +311 -0
- package/backend/dist/esm/server.js +3435 -0
- package/backend/dist/esm/splash_screen.d.ts +35 -0
- package/backend/dist/esm/splash_screen.js +148 -0
- package/backend/dist/esm/status.d.ts +60 -0
- package/backend/dist/esm/status.js +196 -0
- package/backend/dist/esm/stream.d.ts +75 -0
- package/backend/dist/esm/stream.js +947 -0
- package/backend/dist/esm/users.d.ts +111 -0
- package/backend/dist/esm/users.js +1908 -0
- package/backend/dist/esm/utils.d.ts +27 -0
- package/backend/dist/esm/utils.js +324 -0
- package/backend/dist/esm/view.d.ts +52 -0
- package/backend/dist/esm/view.js +561 -0
- package/backend/dist/esm/vinc.d.ts +2 -0
- package/backend/dist/esm/vinc.dev.d.ts +2 -0
- package/backend/dist/esm/vinc.dev.js +6 -0
- package/backend/dist/esm/vinc.js +6 -0
- package/backend/dist/esm/volt.d.ts +15 -0
- package/backend/dist/esm/volt.js +23 -0
- package/backend/dist/esm-dev/blacklist.d.ts +10 -0
- package/backend/dist/esm-dev/blacklist.js +49 -0
- package/backend/dist/esm-dev/cli.d.ts +2 -0
- package/backend/dist/esm-dev/cli.js +228 -0
- package/backend/dist/esm-dev/database.d.ts +364 -0
- package/backend/dist/esm-dev/database.js +1957 -0
- package/backend/dist/esm-dev/endpoint.d.ts +57 -0
- package/backend/dist/esm-dev/endpoint.js +421 -0
- package/backend/dist/esm-dev/file_watcher.d.ts +44 -0
- package/backend/dist/esm-dev/file_watcher.js +313 -0
- package/backend/dist/esm-dev/frontend.d.ts +13 -0
- package/backend/dist/esm-dev/frontend.js +27 -0
- package/backend/dist/esm-dev/image_endpoint.d.ts +24 -0
- package/backend/dist/esm-dev/image_endpoint.js +206 -0
- package/backend/dist/esm-dev/logger.d.ts +5 -0
- package/backend/dist/esm-dev/logger.js +13 -0
- package/backend/dist/esm-dev/meta.d.ts +50 -0
- package/backend/dist/esm-dev/meta.js +149 -0
- package/backend/dist/esm-dev/mutex.d.ts +24 -0
- package/backend/dist/esm-dev/mutex.js +48 -0
- package/backend/dist/esm-dev/payments/paddle.d.ts +161 -0
- package/backend/dist/esm-dev/payments/paddle.js +2261 -0
- package/backend/dist/esm-dev/plugins/browser.d.ts +36 -0
- package/backend/dist/esm-dev/plugins/browser.js +176 -0
- package/backend/dist/esm-dev/plugins/communication.d.ts +70 -0
- package/backend/dist/esm-dev/plugins/communication.js +169 -0
- package/backend/dist/esm-dev/plugins/css.d.ts +10 -0
- package/backend/dist/esm-dev/plugins/css.js +64 -0
- package/backend/dist/esm-dev/plugins/mail.d.ts +277 -0
- package/backend/dist/esm-dev/plugins/mail.js +1403 -0
- package/backend/dist/esm-dev/plugins/pdf.d.ts +757 -0
- package/backend/dist/esm-dev/plugins/pdf.js +1694 -0
- package/backend/dist/esm-dev/plugins/thread_monitor.d.ts +18 -0
- package/backend/dist/esm-dev/plugins/thread_monitor.js +120 -0
- package/backend/dist/esm-dev/plugins/ts/compiler.d.ts +132 -0
- package/backend/dist/esm-dev/plugins/ts/compiler.js +907 -0
- package/backend/dist/esm-dev/plugins/ts/preprocessing.d.ts +14 -0
- package/backend/dist/esm-dev/plugins/ts/preprocessing.js +724 -0
- package/backend/dist/esm-dev/rate_limit.d.ts +65 -0
- package/backend/dist/esm-dev/rate_limit.js +425 -0
- package/backend/dist/esm-dev/request.deprc.d.ts +48 -0
- package/backend/dist/esm-dev/request.deprc.js +572 -0
- package/backend/dist/esm-dev/response.deprc.d.ts +55 -0
- package/backend/dist/esm-dev/response.deprc.js +275 -0
- package/backend/dist/esm-dev/server.d.ts +311 -0
- package/backend/dist/esm-dev/server.js +3435 -0
- package/backend/dist/esm-dev/splash_screen.d.ts +35 -0
- package/backend/dist/esm-dev/splash_screen.js +148 -0
- package/backend/dist/esm-dev/status.d.ts +60 -0
- package/backend/dist/esm-dev/status.js +196 -0
- package/backend/dist/esm-dev/stream.d.ts +75 -0
- package/backend/dist/esm-dev/stream.js +947 -0
- package/backend/dist/esm-dev/users.d.ts +111 -0
- package/backend/dist/esm-dev/users.js +1908 -0
- package/backend/dist/esm-dev/utils.d.ts +27 -0
- package/backend/dist/esm-dev/utils.js +324 -0
- package/backend/dist/esm-dev/view.d.ts +52 -0
- package/backend/dist/esm-dev/view.js +561 -0
- package/backend/dist/esm-dev/vinc.d.ts +2 -0
- package/backend/dist/esm-dev/vinc.dev.d.ts +2 -0
- package/backend/dist/esm-dev/vinc.dev.js +6 -0
- package/backend/dist/esm-dev/vinc.js +6 -0
- package/backend/dist/esm-dev/volt.d.ts +15 -0
- package/backend/dist/esm-dev/volt.js +23 -0
- package/backend/src/blacklist.ts +69 -0
- package/backend/src/cli.js +245 -0
- package/backend/src/database.ts +2241 -0
- package/backend/src/endpoint.ts +494 -0
- package/backend/src/file_watcher.ts +359 -0
- package/backend/src/frontend.ts +35 -0
- package/backend/src/globals.d.ts +8 -0
- package/backend/src/image_endpoint.ts +258 -0
- package/backend/src/logger.ts +18 -0
- package/backend/src/meta.ts +202 -0
- package/backend/src/mutex.ts +51 -0
- package/backend/src/payments/paddle.ts +2659 -0
- package/backend/src/plugins/browser.ts +188 -0
- package/backend/src/plugins/communication.ts +204 -0
- package/backend/src/plugins/css.ts +84 -0
- package/backend/src/plugins/fonts/Menlo-Bold.ttf +0 -0
- package/backend/src/plugins/fonts/Menlo-Regular.ttf +0 -0
- package/backend/src/plugins/mail.ts +1720 -0
- package/backend/src/plugins/pdf.js +1932 -0
- package/backend/src/plugins/thread_monitor.ts +164 -0
- package/backend/src/plugins/ts/compiler.ts +1242 -0
- package/backend/src/plugins/ts/preprocessing.ts +812 -0
- package/backend/src/rate_limit.ts +503 -0
- package/backend/src/request.deprc.js +626 -0
- package/backend/src/response.deprc.js +354 -0
- package/backend/src/server.ts +4149 -0
- package/backend/src/splash_screen.ts +192 -0
- package/backend/src/status.ts +199 -0
- package/backend/src/stream.ts +1070 -0
- package/backend/src/users.ts +2077 -0
- package/backend/src/utils.ts +359 -0
- package/backend/src/view.ts +655 -0
- package/backend/src/vinc.dev.js +6 -0
- package/backend/src/vinc.ts +6 -0
- package/backend/src/volt.js +25 -0
- package/backend/tsconfig.cjs.json +29 -0
- package/backend/tsconfig.esm.dev.json +34 -0
- package/backend/tsconfig.esm.json +30 -0
- package/backend/tsconfig.json +2 -0
- package/frontend/compile.js +436 -0
- package/frontend/dist/elements/base.d.ts +9891 -0
- package/frontend/dist/elements/base.js +8818 -0
- package/frontend/dist/elements/module.d.ts +16 -0
- package/frontend/dist/elements/module.js +178 -0
- package/frontend/dist/modules/array.d.ts +37 -0
- package/frontend/dist/modules/array.js +284 -0
- package/frontend/dist/modules/auth.d.ts +45 -0
- package/frontend/dist/modules/auth.js +138 -0
- package/frontend/dist/modules/colors.d.ts +26 -0
- package/frontend/dist/modules/colors.js +340 -0
- package/frontend/dist/modules/compression.d.ts +6 -0
- package/frontend/dist/modules/compression.js +999 -0
- package/frontend/dist/modules/cookies.d.ts +17 -0
- package/frontend/dist/modules/cookies.js +166 -0
- package/frontend/dist/modules/date.d.ts +142 -0
- package/frontend/dist/modules/date.js +493 -0
- package/frontend/dist/modules/events.d.ts +7 -0
- package/frontend/dist/modules/events.js +90 -0
- package/frontend/dist/modules/google.d.ts +10 -0
- package/frontend/dist/modules/google.js +53 -0
- package/frontend/dist/modules/meta.d.ts +9 -0
- package/frontend/dist/modules/meta.js +45 -0
- package/frontend/dist/modules/mutex.d.ts +8 -0
- package/frontend/dist/modules/mutex.js +52 -0
- package/frontend/dist/modules/number.d.ts +12 -0
- package/frontend/dist/modules/number.js +8 -0
- package/frontend/dist/modules/object.d.ts +50 -0
- package/frontend/dist/modules/object.js +147 -0
- package/frontend/dist/modules/paddle.d.ts +1403 -0
- package/frontend/dist/modules/paddle.js +2641 -0
- package/frontend/dist/modules/scheme.d.ts +207 -0
- package/frontend/dist/modules/scheme.js +649 -0
- package/frontend/dist/modules/settings.d.ts +3 -0
- package/frontend/dist/modules/settings.js +4 -0
- package/frontend/dist/modules/statics.d.ts +4 -0
- package/frontend/dist/modules/statics.js +45 -0
- package/frontend/dist/modules/string.d.ts +163 -0
- package/frontend/dist/modules/string.js +291 -0
- package/frontend/dist/modules/support.d.ts +18 -0
- package/frontend/dist/modules/support.js +102 -0
- package/frontend/dist/modules/themes.d.ts +8 -0
- package/frontend/dist/modules/themes.js +17 -0
- package/frontend/dist/modules/user.d.ts +58 -0
- package/frontend/dist/modules/user.js +279 -0
- package/frontend/dist/modules/utils.d.ts +58 -0
- package/frontend/dist/modules/utils.js +1159 -0
- package/frontend/dist/types/gradient.d.ts +12 -0
- package/frontend/dist/types/gradient.js +79 -0
- package/frontend/dist/ui/border_button.d.ts +177 -0
- package/frontend/dist/ui/border_button.js +235 -0
- package/frontend/dist/ui/button.d.ts +42 -0
- package/frontend/dist/ui/button.js +114 -0
- package/frontend/dist/ui/canvas.d.ts +56 -0
- package/frontend/dist/ui/canvas.js +411 -0
- package/frontend/dist/ui/checkbox.d.ts +72 -0
- package/frontend/dist/ui/checkbox.js +277 -0
- package/frontend/dist/ui/code.d.ts +232 -0
- package/frontend/dist/ui/code.js +977 -0
- package/frontend/dist/ui/color.d.ts +1 -0
- package/frontend/dist/ui/color.js +110 -0
- package/frontend/dist/ui/context_menu.d.ts +30 -0
- package/frontend/dist/ui/context_menu.js +211 -0
- package/frontend/dist/ui/css.d.ts +10 -0
- package/frontend/dist/ui/css.js +44 -0
- package/frontend/dist/ui/divider.d.ts +18 -0
- package/frontend/dist/ui/divider.js +82 -0
- package/frontend/dist/ui/dropdown.d.ts +115 -0
- package/frontend/dist/ui/dropdown.js +446 -0
- package/frontend/dist/ui/for_each.d.ts +38 -0
- package/frontend/dist/ui/for_each.js +97 -0
- package/frontend/dist/ui/form.d.ts +25 -0
- package/frontend/dist/ui/form.js +227 -0
- package/frontend/dist/ui/frame_modes.d.ts +28 -0
- package/frontend/dist/ui/frame_modes.js +116 -0
- package/frontend/dist/ui/google_map.d.ts +31 -0
- package/frontend/dist/ui/google_map.js +111 -0
- package/frontend/dist/ui/gradient.d.ts +24 -0
- package/frontend/dist/ui/gradient.js +115 -0
- package/frontend/dist/ui/image.d.ts +138 -0
- package/frontend/dist/ui/image.js +570 -0
- package/frontend/dist/ui/input.d.ts +316 -0
- package/frontend/dist/ui/input.js +1187 -0
- package/frontend/dist/ui/link.d.ts +39 -0
- package/frontend/dist/ui/link.js +146 -0
- package/frontend/dist/ui/list.d.ts +33 -0
- package/frontend/dist/ui/list.js +161 -0
- package/frontend/dist/ui/loader_button.d.ts +108 -0
- package/frontend/dist/ui/loader_button.js +207 -0
- package/frontend/dist/ui/loaders.d.ts +60 -0
- package/frontend/dist/ui/loaders.js +150 -0
- package/frontend/dist/ui/popup.d.ts +84 -0
- package/frontend/dist/ui/popup.js +331 -0
- package/frontend/dist/ui/pseudo.d.ts +16 -0
- package/frontend/dist/ui/pseudo.js +81 -0
- package/frontend/dist/ui/scroller.d.ts +131 -0
- package/frontend/dist/ui/scroller.js +1251 -0
- package/frontend/dist/ui/slider.d.ts +35 -0
- package/frontend/dist/ui/slider.js +203 -0
- package/frontend/dist/ui/spacer.d.ts +20 -0
- package/frontend/dist/ui/spacer.js +83 -0
- package/frontend/dist/ui/span.d.ts +11 -0
- package/frontend/dist/ui/span.js +75 -0
- package/frontend/dist/ui/stack.d.ts +123 -0
- package/frontend/dist/ui/stack.js +344 -0
- package/frontend/dist/ui/steps.d.ts +72 -0
- package/frontend/dist/ui/steps.js +306 -0
- package/frontend/dist/ui/style.d.ts +12 -0
- package/frontend/dist/ui/style.js +78 -0
- package/frontend/dist/ui/switch.d.ts +44 -0
- package/frontend/dist/ui/switch.js +280 -0
- package/frontend/dist/ui/table.d.ts +118 -0
- package/frontend/dist/ui/table.js +411 -0
- package/frontend/dist/ui/tabs.d.ts +85 -0
- package/frontend/dist/ui/tabs.js +392 -0
- package/frontend/dist/ui/text.d.ts +19 -0
- package/frontend/dist/ui/text.js +88 -0
- package/frontend/dist/ui/theme.d.ts +25 -0
- package/frontend/dist/ui/theme.js +237 -0
- package/frontend/dist/ui/title.d.ts +36 -0
- package/frontend/dist/ui/title.js +127 -0
- package/frontend/dist/ui/ui.d.ts +38 -0
- package/frontend/dist/ui/ui.js +41 -0
- package/frontend/dist/ui/view.d.ts +25 -0
- package/frontend/dist/ui/view.js +93 -0
- package/frontend/dist/volt.d.ts +22 -0
- package/frontend/dist/volt.js +27 -0
- package/frontend/exports.json +1340 -0
- package/frontend/src/css/adyen.css +92 -0
- package/frontend/src/css/volt.css +65 -0
- package/frontend/src/elements/base.ts +16790 -0
- package/frontend/src/elements/module.ts +184 -0
- package/frontend/src/elements/types.d.ts +155 -0
- package/frontend/src/modules/array.ts +366 -0
- package/frontend/src/modules/auth.ts +188 -0
- package/frontend/src/modules/colors.ts +449 -0
- package/frontend/src/modules/compression.ts +67 -0
- package/frontend/src/modules/cookies.ts +182 -0
- package/frontend/src/modules/date.js +535 -0
- package/frontend/src/modules/date.ts +583 -0
- package/frontend/src/modules/events.ts +96 -0
- package/frontend/src/modules/google.ts +60 -0
- package/frontend/src/modules/meta.ts +59 -0
- package/frontend/src/modules/mutex.ts +59 -0
- package/frontend/src/modules/number.ts +20 -0
- package/frontend/src/modules/object.ts +212 -0
- package/frontend/src/modules/paddle.ts +2990 -0
- package/frontend/src/modules/scheme.ts +740 -0
- package/frontend/src/modules/settings.ts +5 -0
- package/frontend/src/modules/statics.ts +47 -0
- package/frontend/src/modules/string.ts +500 -0
- package/frontend/src/modules/support.ts +118 -0
- package/frontend/src/modules/themes.ts +24 -0
- package/frontend/src/modules/user.ts +321 -0
- package/frontend/src/modules/utils.ts +1260 -0
- package/frontend/src/static/admin/admin.png +0 -0
- package/frontend/src/static/admin/password.webp +0 -0
- package/frontend/src/static/icons/copy.webp +0 -0
- package/frontend/src/static/payments/arrow.long.webp +0 -0
- package/frontend/src/static/payments/arrow.long2.webp +0 -0
- package/frontend/src/static/payments/cancelled.webp +0 -0
- package/frontend/src/static/payments/check.sign.webp +0 -0
- package/frontend/src/static/payments/check.webp +0 -0
- package/frontend/src/static/payments/close.webp +0 -0
- package/frontend/src/static/payments/error.webp +0 -0
- package/frontend/src/static/payments/exclamation.webp +0 -0
- package/frontend/src/static/payments/minus.webp +0 -0
- package/frontend/src/static/payments/party.webp +0 -0
- package/frontend/src/static/payments/plus.webp +0 -0
- package/frontend/src/static/payments/shopping_cart.webp +0 -0
- package/frontend/src/static/payments/trash.webp +0 -0
- package/frontend/src/types/global.d.ts +4 -0
- package/frontend/src/types/gradient.ts +87 -0
- package/frontend/src/ui/any_element.d.ts +5 -0
- package/frontend/src/ui/border_button.ts +320 -0
- package/frontend/src/ui/button.ts +62 -0
- package/frontend/src/ui/canvas.ts +431 -0
- package/frontend/src/ui/checkbox.ts +284 -0
- package/frontend/src/ui/code.ts +1049 -0
- package/frontend/src/ui/color.ts +117 -0
- package/frontend/src/ui/context_menu.ts +194 -0
- package/frontend/src/ui/css.ts +57 -0
- package/frontend/src/ui/divider.ts +28 -0
- package/frontend/src/ui/dropdown.ts +503 -0
- package/frontend/src/ui/for_each.ts +71 -0
- package/frontend/src/ui/form.ts +208 -0
- package/frontend/src/ui/frame_modes.ts +140 -0
- package/frontend/src/ui/google_map.ts +70 -0
- package/frontend/src/ui/gradient.ts +73 -0
- package/frontend/src/ui/image.ts +587 -0
- package/frontend/src/ui/input.ts +1284 -0
- package/frontend/src/ui/link.ts +77 -0
- package/frontend/src/ui/list.ts +88 -0
- package/frontend/src/ui/loader_button.ts +192 -0
- package/frontend/src/ui/loaders.ts +126 -0
- package/frontend/src/ui/popup.ts +370 -0
- package/frontend/src/ui/pseudo.ts +33 -0
- package/frontend/src/ui/scroller.ts +1324 -0
- package/frontend/src/ui/slider.ts +215 -0
- package/frontend/src/ui/spacer.ts +29 -0
- package/frontend/src/ui/span.ts +23 -0
- package/frontend/src/ui/stack.ts +238 -0
- package/frontend/src/ui/steps.ts +334 -0
- package/frontend/src/ui/style.ts +26 -0
- package/frontend/src/ui/switch.ts +286 -0
- package/frontend/src/ui/table.ts +323 -0
- package/frontend/src/ui/tabs.ts +441 -0
- package/frontend/src/ui/text.ts +38 -0
- package/frontend/src/ui/theme.ts +279 -0
- package/frontend/src/ui/title.ts +64 -0
- package/frontend/src/ui/ui.ts +47 -0
- package/frontend/src/ui/view.ts +44 -0
- package/frontend/src/volt.ts +31 -0
- 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;
|