@vandenberghinc/volt 1.1.26 → 1.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/backend/dist/cjs/{blacklist.d.ts → backend/src/blacklist.d.ts} +5 -3
- package/backend/dist/cjs/{blacklist.js → backend/src/blacklist.js} +8 -5
- package/backend/dist/cjs/{cli.js → backend/src/cli.js} +29 -47
- package/backend/dist/cjs/backend/src/database/collection.d.ts +1543 -0
- package/backend/dist/cjs/backend/src/database/collection.js +3042 -0
- package/backend/dist/cjs/backend/src/database/database.d.ts +66 -0
- package/backend/dist/cjs/{database → backend/src/database}/database.js +48 -43
- package/backend/dist/cjs/backend/src/database/filters/filters.d.ts +6 -0
- package/backend/dist/cjs/backend/src/database/filters/filters.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter.d.ts +223 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_test.js +443 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_test_v0.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v0.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v1.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v2.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_filter_v3.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.d.ts +165 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_update_filter.js +15 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
- package/backend/dist/cjs/backend/src/database/filters/strict_update_filter_test.js +355 -0
- package/backend/dist/cjs/backend/src/database/flatten.d.ts +75 -0
- package/backend/dist/cjs/{logger.js → backend/src/database/flatten.js} +18 -7
- package/backend/dist/cjs/backend/src/database/flatten_test.js +175 -0
- package/backend/dist/cjs/backend/src/database/quota/quota.d.ts +461 -0
- package/backend/dist/cjs/backend/src/database/quota/quota.js +1014 -0
- package/backend/dist/cjs/backend/src/database/quota/quota_v1.d.ts +534 -0
- package/backend/dist/cjs/backend/src/database/quota/quota_v1.js +1087 -0
- package/backend/dist/cjs/backend/src/database/quota/safe_int.d.ts +293 -0
- package/backend/dist/cjs/backend/src/database/quota/safe_int.js +573 -0
- package/backend/dist/{esm → cjs/backend/src}/endpoint.d.ts +69 -46
- package/backend/dist/cjs/{endpoint.js → backend/src/endpoint.js} +87 -101
- package/backend/dist/cjs/backend/src/errors/index.d.ts +7 -0
- package/backend/dist/cjs/backend/src/errors/index.js +25 -0
- package/backend/dist/{esm/utils.d.ts → cjs/backend/src/errors/internal_external.d.ts} +14 -22
- package/backend/dist/cjs/backend/src/errors/internal_external.js +85 -0
- package/backend/dist/cjs/backend/src/errors/invalid_usage_error.d.ts +38 -0
- package/backend/dist/cjs/{mutex.js → backend/src/errors/invalid_usage_error.js} +20 -37
- package/backend/dist/cjs/backend/src/errors/system_error.d.ts +230 -0
- package/backend/dist/cjs/backend/src/errors/system_error.js +393 -0
- package/backend/dist/cjs/backend/src/events.d.ts +54 -0
- package/backend/dist/cjs/backend/src/events.js +15 -0
- package/backend/dist/cjs/{frontend.js → backend/src/frontend.js} +1 -1
- package/backend/dist/cjs/{image_endpoint.d.ts → backend/src/image_endpoint.d.ts} +16 -1
- package/backend/dist/cjs/{image_endpoint.js → backend/src/image_endpoint.js} +3 -5
- package/backend/dist/cjs/backend/src/logger.d.ts +5 -0
- package/backend/dist/cjs/backend/src/logger.js +15 -0
- package/backend/dist/cjs/backend/src/meta.d.ts +64 -0
- package/backend/dist/cjs/{meta.js → backend/src/meta.js} +9 -12
- package/backend/dist/cjs/backend/src/payments/paddle.d.ts +326 -0
- package/backend/dist/cjs/{payments → backend/src/payments}/paddle.js +377 -327
- package/backend/dist/cjs/backend/src/plugins/browser.d.ts +1 -0
- package/backend/dist/cjs/backend/src/plugins/browser.js +15 -0
- package/backend/dist/cjs/backend/src/plugins/mail/mail.d.ts +248 -0
- package/backend/dist/cjs/backend/src/plugins/mail/mail.js +379 -0
- package/backend/dist/{esm → cjs/backend/src}/plugins/mail/ui.d.ts +23 -0
- package/backend/dist/cjs/backend/src/plugins/pdf.d.ts +1 -0
- package/backend/dist/cjs/backend/src/rate_limit.d.ts +145 -0
- package/backend/dist/cjs/backend/src/rate_limit.js +549 -0
- package/backend/dist/cjs/{route.d.ts → backend/src/route.d.ts} +3 -10
- package/backend/dist/cjs/{route.js → backend/src/route.js} +23 -21
- package/backend/dist/cjs/backend/src/server.d.ts +485 -0
- package/backend/dist/cjs/{server.js → backend/src/server.js} +688 -873
- package/backend/dist/cjs/backend/src/splash_screen.d.ts +80 -0
- package/backend/dist/cjs/{splash_screen.js → backend/src/splash_screen.js} +24 -3
- package/backend/dist/cjs/backend/src/status.d.ts +74 -0
- package/backend/dist/cjs/{status.js → backend/src/status.js} +64 -64
- package/backend/dist/cjs/backend/src/stream.d.ts +376 -0
- package/backend/dist/cjs/{stream.js → backend/src/stream.js} +299 -276
- package/backend/dist/cjs/backend/src/users.d.ts +807 -0
- package/backend/dist/cjs/backend/src/users.js +1971 -0
- package/backend/dist/cjs/backend/src/utils.d.ts +16 -0
- package/backend/dist/cjs/{utils.js → backend/src/utils.js} +14 -77
- package/backend/dist/{esm → cjs/backend/src}/view.d.ts +33 -11
- package/backend/dist/cjs/backend/src/view.js +508 -0
- package/backend/dist/{esm → cjs/backend/src}/volt.d.ts +10 -1
- package/backend/dist/cjs/{volt.js → backend/src/volt.js} +8 -5
- package/backend/dist/cjs/frontend/src/modules/request.d.ts +70 -0
- package/backend/dist/cjs/frontend/src/modules/request.js +99 -0
- package/backend/dist/esm/{blacklist.d.ts → backend/src/blacklist.d.ts} +5 -3
- package/backend/dist/esm/{blacklist.js → backend/src/blacklist.js} +9 -6
- package/backend/dist/esm/{cli.js → backend/src/cli.js} +43 -60
- package/backend/dist/esm/backend/src/database/collection.d.ts +1543 -0
- package/backend/dist/esm/backend/src/database/collection.js +3510 -0
- package/backend/dist/esm/backend/src/database/database.d.ts +66 -0
- package/backend/dist/esm/{database → backend/src/database}/database.js +62 -103
- package/backend/dist/esm/backend/src/database/document.d.ts +1 -0
- package/backend/dist/esm/backend/src/database/document.js +558 -0
- package/backend/dist/esm/backend/src/database/filters/filters.d.ts +6 -0
- package/backend/dist/esm/backend/src/database/filters/filters.js +1 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter.d.ts +223 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter.js +3 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_test.d.ts +1 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_test.js +505 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.d.ts +1 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_test_v0.js +712 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.d.ts +50 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v0.js +5 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.d.ts +76 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v1.js +44 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.d.ts +75 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v2.js +5 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.d.ts +219 -0
- package/backend/dist/esm/backend/src/database/filters/strict_filter_v3.js +1 -0
- package/backend/dist/esm/backend/src/database/filters/strict_update_filter.d.ts +165 -0
- package/backend/dist/esm/backend/src/database/filters/strict_update_filter.js +5 -0
- package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.d.ts +5 -0
- package/backend/dist/esm/backend/src/database/filters/strict_update_filter_test.js +405 -0
- package/backend/dist/esm/backend/src/database/flatten.d.ts +75 -0
- package/backend/dist/esm/backend/src/database/flatten.js +22 -0
- package/backend/dist/esm/backend/src/database/flatten_test.d.ts +1 -0
- package/backend/dist/esm/backend/src/database/flatten_test.js +174 -0
- package/backend/dist/esm/backend/src/database/quota/quota.d.ts +461 -0
- package/backend/dist/esm/backend/src/database/quota/quota.js +1118 -0
- package/backend/dist/esm/backend/src/database/quota/quota_v1.d.ts +534 -0
- package/backend/dist/esm/backend/src/database/quota/quota_v1.js +1242 -0
- package/backend/dist/esm/backend/src/database/quota/safe_int.d.ts +293 -0
- package/backend/dist/esm/backend/src/database/quota/safe_int.js +602 -0
- package/backend/dist/{cjs → esm/backend/src}/endpoint.d.ts +69 -46
- package/backend/dist/esm/{endpoint.js → backend/src/endpoint.js} +136 -127
- package/backend/dist/esm/backend/src/errors/index.d.ts +7 -0
- package/backend/dist/esm/backend/src/errors/index.js +7 -0
- package/backend/dist/{cjs/utils.d.ts → esm/backend/src/errors/internal_external.d.ts} +14 -22
- package/backend/dist/esm/backend/src/errors/internal_external.js +70 -0
- package/backend/dist/esm/backend/src/errors/invalid_usage_error.d.ts +38 -0
- package/backend/dist/esm/backend/src/errors/invalid_usage_error.js +30 -0
- package/backend/dist/esm/backend/src/errors/system_error.d.ts +230 -0
- package/backend/dist/esm/backend/src/errors/system_error.js +402 -0
- package/backend/dist/esm/backend/src/events.d.ts +54 -0
- package/backend/dist/esm/backend/src/events.js +5 -0
- package/backend/dist/esm/{frontend.js → backend/src/frontend.js} +1 -1
- package/backend/dist/esm/{image_endpoint.d.ts → backend/src/image_endpoint.d.ts} +16 -1
- package/backend/dist/esm/{image_endpoint.js → backend/src/image_endpoint.js} +16 -20
- package/backend/dist/esm/backend/src/logger.d.ts +5 -0
- package/backend/dist/esm/backend/src/logger.js +8 -0
- package/backend/dist/esm/backend/src/meta.d.ts +64 -0
- package/backend/dist/esm/{meta.js → backend/src/meta.js} +15 -54
- package/backend/dist/esm/backend/src/payments/paddle.d.ts +326 -0
- package/backend/dist/esm/{payments → backend/src/payments}/paddle.js +417 -452
- package/backend/dist/esm/backend/src/plugins/browser.d.ts +1 -0
- package/backend/dist/esm/backend/src/plugins/browser.js +170 -0
- package/backend/dist/esm/backend/src/plugins/mail/mail.d.ts +248 -0
- package/backend/dist/esm/backend/src/plugins/mail/mail.js +389 -0
- package/backend/dist/{cjs → esm/backend/src}/plugins/mail/ui.d.ts +23 -0
- package/backend/dist/esm/{plugins → backend/src/plugins}/mail/ui.js +3 -6
- package/backend/dist/esm/backend/src/plugins/pdf.d.ts +1 -0
- package/backend/dist/esm/{plugins → backend/src/plugins}/pdf.js +3 -3
- package/backend/dist/esm/backend/src/rate_limit.d.ts +145 -0
- package/backend/dist/esm/backend/src/rate_limit.js +667 -0
- package/backend/dist/esm/{route.d.ts → backend/src/route.d.ts} +3 -10
- package/backend/dist/esm/{route.js → backend/src/route.js} +26 -21
- package/backend/dist/esm/backend/src/server.d.ts +485 -0
- package/backend/dist/esm/{server.js → backend/src/server.js} +891 -1441
- package/backend/dist/esm/backend/src/splash_screen.d.ts +80 -0
- package/backend/dist/esm/{splash_screen.js → backend/src/splash_screen.js} +42 -55
- package/backend/dist/esm/backend/src/status.d.ts +74 -0
- package/backend/dist/esm/backend/src/status.js +199 -0
- package/backend/dist/esm/backend/src/stream.d.ts +376 -0
- package/backend/dist/esm/{stream.js → backend/src/stream.js} +327 -292
- package/backend/dist/esm/backend/src/users.d.ts +809 -0
- package/backend/dist/esm/backend/src/users.js +2140 -0
- package/backend/dist/esm/backend/src/utils.d.ts +16 -0
- package/backend/dist/esm/{utils.js → backend/src/utils.js} +20 -81
- package/backend/dist/{cjs → esm/backend/src}/view.d.ts +33 -11
- package/backend/dist/esm/{view.js → backend/src/view.js} +266 -86
- package/backend/dist/{cjs → esm/backend/src}/volt.d.ts +10 -1
- package/backend/dist/esm/{volt.js → backend/src/volt.js} +7 -4
- package/backend/dist/esm/frontend/src/modules/request.d.ts +70 -0
- package/backend/dist/esm/frontend/src/modules/request.js +117 -0
- package/frontend/dist/backend/src/database/collection.d.ts +1543 -0
- package/frontend/dist/backend/src/database/collection.js +3510 -0
- package/frontend/dist/backend/src/database/database.d.ts +66 -0
- package/frontend/dist/backend/src/database/database.js +196 -0
- package/frontend/dist/backend/src/database/filters/filters.d.ts +6 -0
- package/frontend/dist/backend/src/database/filters/filters.js +1 -0
- package/frontend/dist/backend/src/database/filters/strict_filter.d.ts +223 -0
- package/frontend/dist/backend/src/database/filters/strict_filter.js +3 -0
- package/frontend/dist/backend/src/database/filters/strict_update_filter.d.ts +165 -0
- package/frontend/dist/backend/src/database/filters/strict_update_filter.js +5 -0
- package/frontend/dist/backend/src/database/flatten.d.ts +75 -0
- package/frontend/dist/backend/src/database/flatten.js +22 -0
- package/frontend/dist/backend/src/endpoint.d.ts +204 -0
- package/frontend/dist/backend/src/endpoint.js +570 -0
- package/frontend/dist/backend/src/errors/index.d.ts +7 -0
- package/frontend/dist/backend/src/errors/index.js +7 -0
- package/frontend/dist/backend/src/errors/internal_external.d.ts +38 -0
- package/frontend/dist/backend/src/errors/internal_external.js +70 -0
- package/frontend/dist/backend/src/errors/invalid_usage_error.d.ts +38 -0
- package/frontend/dist/backend/src/errors/invalid_usage_error.js +30 -0
- package/frontend/dist/backend/src/errors/system_error.d.ts +230 -0
- package/frontend/dist/backend/src/errors/system_error.js +402 -0
- package/frontend/dist/backend/src/events.d.ts +54 -0
- package/frontend/dist/backend/src/events.js +5 -0
- package/frontend/dist/backend/src/frontend.d.ts +11 -0
- package/frontend/dist/backend/src/frontend.js +12 -0
- package/frontend/dist/backend/src/image_endpoint.d.ts +39 -0
- package/frontend/dist/backend/src/image_endpoint.js +202 -0
- package/frontend/dist/backend/src/meta.d.ts +64 -0
- package/frontend/dist/backend/src/meta.js +110 -0
- package/frontend/dist/backend/src/payments/paddle.d.ts +326 -0
- package/frontend/dist/backend/src/payments/paddle.js +2256 -0
- package/frontend/dist/backend/src/plugins/mail/mail.d.ts +248 -0
- package/frontend/dist/backend/src/plugins/mail/mail.js +389 -0
- package/{backend/dist/esm/plugins/mail.d.ts → frontend/dist/backend/src/plugins/mail/ui.d.ts} +23 -0
- package/{backend/dist/esm/plugins/mail.js → frontend/dist/backend/src/plugins/mail/ui.js} +3 -6
- package/frontend/dist/backend/src/rate_limit.d.ts +145 -0
- package/frontend/dist/backend/src/rate_limit.js +673 -0
- package/frontend/dist/backend/src/route.d.ts +35 -0
- package/frontend/dist/backend/src/route.js +212 -0
- package/frontend/dist/backend/src/server.d.ts +485 -0
- package/frontend/dist/backend/src/server.js +2670 -0
- package/frontend/dist/backend/src/splash_screen.d.ts +80 -0
- package/frontend/dist/backend/src/splash_screen.js +135 -0
- package/frontend/dist/backend/src/status.d.ts +74 -0
- package/frontend/dist/backend/src/status.js +199 -0
- package/frontend/dist/backend/src/stream.d.ts +376 -0
- package/frontend/dist/backend/src/stream.js +1007 -0
- package/frontend/dist/backend/src/users.d.ts +807 -0
- package/frontend/dist/backend/src/users.js +2118 -0
- package/frontend/dist/backend/src/utils.d.ts +16 -0
- package/frontend/dist/backend/src/utils.js +241 -0
- package/frontend/dist/backend/src/view.d.ts +162 -0
- package/frontend/dist/backend/src/view.js +720 -0
- package/frontend/dist/frontend/src/elements/base.d.ts +4414 -0
- package/frontend/dist/{elements → frontend/src/elements}/base.js +3624 -260
- package/frontend/dist/frontend/src/elements/module.d.ts +95 -0
- package/frontend/dist/{elements → frontend/src/elements}/module.js +53 -52
- package/frontend/dist/frontend/src/elements/types.d.ts +52 -0
- package/frontend/dist/frontend/src/elements/types.js +5 -0
- package/frontend/dist/frontend/src/modules/attachment.d.ts +126 -0
- package/frontend/dist/frontend/src/modules/attachment.js +306 -0
- package/frontend/dist/frontend/src/modules/auth.d.ts +44 -0
- package/frontend/dist/frontend/src/modules/auth.js +80 -0
- package/frontend/dist/{modules → frontend/src/modules}/color.js +2 -2
- package/frontend/dist/frontend/src/modules/compression.d.ts +39 -0
- package/frontend/dist/frontend/src/modules/compression.js +102 -0
- package/frontend/dist/frontend/src/modules/cookies.d.ts +44 -0
- package/frontend/dist/frontend/src/modules/cookies.js +143 -0
- package/frontend/dist/frontend/src/modules/events.d.ts +31 -0
- package/frontend/dist/frontend/src/modules/events.js +74 -0
- package/frontend/dist/frontend/src/modules/google.d.ts +23 -0
- package/frontend/dist/frontend/src/modules/google.js +52 -0
- package/frontend/dist/frontend/src/modules/meta.d.ts +14 -0
- package/frontend/dist/{modules → frontend/src/modules}/meta.js +9 -7
- package/frontend/dist/{modules → frontend/src/modules}/paddle.d.ts +37 -134
- package/frontend/dist/{modules → frontend/src/modules}/paddle.js +620 -568
- package/frontend/dist/frontend/src/modules/request.d.ts +70 -0
- package/frontend/dist/frontend/src/modules/request.js +117 -0
- package/frontend/dist/frontend/src/modules/settings.d.ts +3 -0
- package/frontend/dist/frontend/src/modules/settings.js +5 -0
- package/frontend/dist/frontend/src/modules/statics.d.ts +21 -0
- package/frontend/dist/{modules → frontend/src/modules}/statics.js +15 -18
- package/frontend/dist/frontend/src/modules/support.d.ts +30 -0
- package/frontend/dist/frontend/src/modules/support.js +53 -0
- package/frontend/dist/{modules → frontend/src/modules}/theme.d.ts +67 -0
- package/frontend/dist/{modules → frontend/src/modules}/theme.js +68 -38
- package/frontend/dist/frontend/src/modules/themes.d.ts +12 -0
- package/frontend/dist/frontend/src/modules/themes.js +22 -0
- package/frontend/dist/frontend/src/modules/user.d.ts +164 -0
- package/frontend/dist/frontend/src/modules/user.js +268 -0
- package/frontend/dist/frontend/src/modules/utils.d.ts +176 -0
- package/frontend/dist/frontend/src/modules/utils.js +569 -0
- package/frontend/dist/frontend/src/types/gradient.d.ts +29 -0
- package/frontend/dist/{types → frontend/src/types}/gradient.js +14 -18
- package/frontend/dist/frontend/src/ui/border_button.d.ts +94 -0
- package/frontend/dist/{ui → frontend/src/ui}/border_button.js +7 -13
- package/frontend/dist/frontend/src/ui/button.d.ts +28 -0
- package/frontend/dist/{ui → frontend/src/ui}/button.js +21 -12
- package/frontend/dist/frontend/src/ui/canvas.d.ts +138 -0
- package/frontend/dist/{ui → frontend/src/ui}/canvas.js +88 -55
- package/frontend/dist/frontend/src/ui/checkbox.d.ts +74 -0
- package/frontend/dist/{ui → frontend/src/ui}/checkbox.js +80 -41
- package/frontend/dist/{ui → frontend/src/ui}/code.d.ts +73 -6
- package/frontend/dist/{ui → frontend/src/ui}/code.js +55 -52
- package/frontend/dist/{ui → frontend/src/ui}/context_menu.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/context_menu.js +12 -17
- package/frontend/dist/{ui → frontend/src/ui}/css.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/css.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/divider.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/divider.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/dropdown.d.ts +57 -2
- package/frontend/dist/{ui → frontend/src/ui}/dropdown.js +87 -94
- package/frontend/dist/{ui → frontend/src/ui}/for_each.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/for_each.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/form.d.ts +6 -2
- package/frontend/dist/{ui → frontend/src/ui}/form.js +10 -7
- package/frontend/dist/frontend/src/ui/frame_modes.d.ts +37 -0
- package/frontend/dist/{ui → frontend/src/ui}/frame_modes.js +16 -22
- package/frontend/dist/{ui → frontend/src/ui}/google_map.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/google_map.js +4 -4
- package/frontend/dist/{ui → frontend/src/ui}/gradient.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/gradient.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/image.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/image.js +5 -5
- package/frontend/dist/frontend/src/ui/input.d.ts +392 -0
- package/frontend/dist/{ui → frontend/src/ui}/input.js +346 -360
- package/frontend/dist/{ui → frontend/src/ui}/link.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/link.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/list.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/list.js +12 -6
- package/frontend/dist/frontend/src/ui/loader_button.d.ts +80 -0
- package/frontend/dist/{ui → frontend/src/ui}/loader_button.js +35 -47
- package/frontend/dist/frontend/src/ui/loaders.d.ts +57 -0
- package/frontend/dist/{ui → frontend/src/ui}/loaders.js +11 -11
- package/frontend/dist/{ui → frontend/src/ui}/popup.d.ts +11 -6
- package/frontend/dist/{ui → frontend/src/ui}/popup.js +32 -18
- package/frontend/dist/frontend/src/ui/pseudo.d.ts +44 -0
- package/frontend/dist/{ui → frontend/src/ui}/pseudo.js +84 -8
- package/frontend/dist/{ui → frontend/src/ui}/scroller.d.ts +14 -2
- package/frontend/dist/{ui → frontend/src/ui}/scroller.js +37 -43
- package/frontend/dist/{ui → frontend/src/ui}/slider.d.ts +5 -1
- package/frontend/dist/{ui → frontend/src/ui}/slider.js +4 -4
- package/frontend/dist/{ui → frontend/src/ui}/spacer.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/spacer.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/span.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/span.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/stack.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/stack.js +3 -9
- package/frontend/dist/frontend/src/ui/steps.d.ts +131 -0
- package/frontend/dist/{ui → frontend/src/ui}/steps.js +30 -45
- package/frontend/dist/{ui → frontend/src/ui}/style.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/style.js +3 -3
- package/frontend/dist/{ui → frontend/src/ui}/switch.d.ts +5 -1
- package/frontend/dist/{ui → frontend/src/ui}/switch.js +4 -4
- package/frontend/dist/{ui → frontend/src/ui}/table.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/table.js +6 -6
- package/frontend/dist/{ui → frontend/src/ui}/tabs.d.ts +45 -3
- package/frontend/dist/{ui → frontend/src/ui}/tabs.js +65 -40
- package/frontend/dist/{ui → frontend/src/ui}/text.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/text.js +3 -3
- package/frontend/dist/frontend/src/ui/title.d.ts +91 -0
- package/frontend/dist/frontend/src/ui/title.js +272 -0
- package/frontend/dist/{ui → frontend/src/ui}/view.d.ts +4 -0
- package/frontend/dist/{ui → frontend/src/ui}/view.js +3 -3
- package/frontend/dist/{volt.d.ts → frontend/src/volt.d.ts} +3 -0
- package/frontend/dist/{volt.js → frontend/src/volt.js} +4 -0
- package/frontend/tools/bundle_d_ts.js +71 -0
- package/frontend/tools/convert_to_jsdoc_input.txt +9452 -0
- package/frontend/tools/convert_to_jsdoc_output.txt +7626 -0
- package/frontend/tools/convert_to_jsdoc_tmp.js +345 -0
- package/package.json +11 -12
- package/backend/dist/cjs/database/collection.d.ts +0 -160
- package/backend/dist/cjs/database/collection.js +0 -842
- package/backend/dist/cjs/database/database.d.ts +0 -121
- package/backend/dist/cjs/database/document.d.ts +0 -131
- package/backend/dist/cjs/database/document.js +0 -224
- package/backend/dist/cjs/database.d.ts +0 -502
- package/backend/dist/cjs/database.js +0 -2248
- package/backend/dist/cjs/logger.d.ts +0 -3
- package/backend/dist/cjs/meta.d.ts +0 -50
- package/backend/dist/cjs/mutex.d.ts +0 -24
- package/backend/dist/cjs/payments/paddle.d.ts +0 -160
- package/backend/dist/cjs/plugins/browser.d.ts +0 -36
- package/backend/dist/cjs/plugins/browser.js +0 -198
- package/backend/dist/cjs/plugins/css.d.ts +0 -11
- package/backend/dist/cjs/plugins/css.js +0 -80
- package/backend/dist/cjs/plugins/mail.d.ts +0 -277
- package/backend/dist/cjs/plugins/mail.js +0 -1370
- package/backend/dist/cjs/plugins/ts/compiler.d.ts +0 -139
- package/backend/dist/cjs/plugins/ts/compiler.js +0 -750
- package/backend/dist/cjs/plugins/ts/preprocessing.d.ts +0 -14
- package/backend/dist/cjs/plugins/ts/preprocessing.js +0 -440
- package/backend/dist/cjs/rate_limit.d.ts +0 -63
- package/backend/dist/cjs/rate_limit.js +0 -348
- package/backend/dist/cjs/request.deprc.d.ts +0 -48
- package/backend/dist/cjs/request.deprc.js +0 -572
- package/backend/dist/cjs/response.deprc.d.ts +0 -55
- package/backend/dist/cjs/response.deprc.js +0 -275
- package/backend/dist/cjs/server.d.ts +0 -342
- package/backend/dist/cjs/splash_screen.d.ts +0 -35
- package/backend/dist/cjs/status.d.ts +0 -61
- package/backend/dist/cjs/stream.d.ts +0 -79
- package/backend/dist/cjs/users.d.ts +0 -111
- package/backend/dist/cjs/users.js +0 -1817
- package/backend/dist/cjs/view.js +0 -352
- package/backend/dist/cjs/vinc.dev.d.ts +0 -3
- package/backend/dist/cjs/vinc.dev.js +0 -7
- package/backend/dist/css/adyen.css +0 -92
- package/backend/dist/css/volt.css +0 -70
- package/backend/dist/esm/database/collection.d.ts +0 -160
- package/backend/dist/esm/database/collection.js +0 -1328
- package/backend/dist/esm/database/database.d.ts +0 -121
- package/backend/dist/esm/database/document.d.ts +0 -131
- package/backend/dist/esm/database/document.js +0 -247
- package/backend/dist/esm/database.d.ts +0 -502
- package/backend/dist/esm/database.js +0 -2423
- package/backend/dist/esm/file_watcher.js +0 -329
- package/backend/dist/esm/logger.d.ts +0 -3
- package/backend/dist/esm/logger.js +0 -11
- package/backend/dist/esm/meta.d.ts +0 -50
- package/backend/dist/esm/mutex.d.ts +0 -24
- package/backend/dist/esm/mutex.js +0 -48
- package/backend/dist/esm/payments/paddle.d.ts +0 -160
- package/backend/dist/esm/plugins/browser.d.ts +0 -36
- package/backend/dist/esm/plugins/browser.js +0 -176
- package/backend/dist/esm/plugins/css.d.ts +0 -11
- package/backend/dist/esm/plugins/css.js +0 -90
- package/backend/dist/esm/plugins/ts/compiler.d.ts +0 -139
- package/backend/dist/esm/plugins/ts/compiler.js +0 -1194
- package/backend/dist/esm/plugins/ts/preprocessing.d.ts +0 -14
- package/backend/dist/esm/plugins/ts/preprocessing.js +0 -726
- package/backend/dist/esm/rate_limit.d.ts +0 -63
- package/backend/dist/esm/rate_limit.js +0 -417
- package/backend/dist/esm/request.deprc.d.ts +0 -48
- package/backend/dist/esm/request.deprc.js +0 -572
- package/backend/dist/esm/response.deprc.d.ts +0 -55
- package/backend/dist/esm/response.deprc.js +0 -275
- package/backend/dist/esm/server.d.ts +0 -342
- package/backend/dist/esm/splash_screen.d.ts +0 -35
- package/backend/dist/esm/status.d.ts +0 -61
- package/backend/dist/esm/status.js +0 -197
- package/backend/dist/esm/stream.d.ts +0 -79
- package/backend/dist/esm/users.d.ts +0 -111
- package/backend/dist/esm/users.js +0 -1935
- package/backend/dist/esm/vinc.dev.d.ts +0 -3
- package/backend/dist/esm/vinc.dev.js +0 -7
- package/frontend/dist/elements/base.d.ts +0 -9889
- package/frontend/dist/elements/module.d.ts +0 -30
- package/frontend/dist/modules/array.d.ts +0 -94
- package/frontend/dist/modules/array.js +0 -634
- package/frontend/dist/modules/auth.d.ts +0 -46
- package/frontend/dist/modules/auth.js +0 -139
- package/frontend/dist/modules/colors.d.ts +0 -1
- package/frontend/dist/modules/colors.js +0 -417
- package/frontend/dist/modules/compression.d.ts +0 -6
- package/frontend/dist/modules/compression.js +0 -999
- package/frontend/dist/modules/cookies.d.ts +0 -18
- package/frontend/dist/modules/cookies.js +0 -167
- package/frontend/dist/modules/date.d.ts +0 -142
- package/frontend/dist/modules/date.js +0 -493
- package/frontend/dist/modules/events.d.ts +0 -8
- package/frontend/dist/modules/events.js +0 -91
- package/frontend/dist/modules/google.d.ts +0 -11
- package/frontend/dist/modules/google.js +0 -54
- package/frontend/dist/modules/meta.d.ts +0 -10
- package/frontend/dist/modules/mutex.d.ts +0 -7
- package/frontend/dist/modules/mutex.js +0 -51
- package/frontend/dist/modules/number.d.ts +0 -16
- package/frontend/dist/modules/number.js +0 -23
- package/frontend/dist/modules/object.d.ts +0 -52
- package/frontend/dist/modules/object.js +0 -383
- package/frontend/dist/modules/scheme.d.ts +0 -227
- package/frontend/dist/modules/scheme.js +0 -531
- package/frontend/dist/modules/settings.d.ts +0 -3
- package/frontend/dist/modules/settings.js +0 -4
- package/frontend/dist/modules/statics.d.ts +0 -5
- package/frontend/dist/modules/string.d.ts +0 -124
- package/frontend/dist/modules/string.js +0 -745
- package/frontend/dist/modules/support.d.ts +0 -19
- package/frontend/dist/modules/support.js +0 -103
- package/frontend/dist/modules/themes.d.ts +0 -8
- package/frontend/dist/modules/themes.js +0 -18
- package/frontend/dist/modules/user.d.ts +0 -59
- package/frontend/dist/modules/user.js +0 -280
- package/frontend/dist/modules/utils.d.ts +0 -87
- package/frontend/dist/modules/utils.js +0 -923
- package/frontend/dist/types/gradient.d.ts +0 -12
- package/frontend/dist/ui/border_button.d.ts +0 -152
- package/frontend/dist/ui/button.d.ts +0 -21
- package/frontend/dist/ui/canvas.d.ts +0 -56
- package/frontend/dist/ui/checkbox.d.ts +0 -52
- package/frontend/dist/ui/frame_modes.d.ts +0 -25
- package/frontend/dist/ui/input.d.ts +0 -241
- package/frontend/dist/ui/loader_button.d.ts +0 -93
- package/frontend/dist/ui/loaders.d.ts +0 -57
- package/frontend/dist/ui/pseudo.d.ts +0 -16
- package/frontend/dist/ui/steps.d.ts +0 -59
- package/frontend/dist/ui/title.d.ts +0 -21
- package/frontend/dist/ui/title.js +0 -121
- package/frontend/examples/dashboard/dashboard.ts +0 -776
- /package/backend/dist/cjs/{cli.d.ts → backend/src/cli.d.ts} +0 -0
- /package/backend/dist/cjs/{file_watcher.d.ts → backend/src/database/document.d.ts} +0 -0
- /package/backend/dist/cjs/{file_watcher.js → backend/src/database/document.js} +0 -0
- /package/backend/dist/cjs/{plugins/pdf.d.ts → backend/src/database/filters/strict_filter_test.d.ts} +0 -0
- /package/backend/dist/{esm/file_watcher.d.ts → cjs/backend/src/database/filters/strict_filter_test_v0.d.ts} +0 -0
- /package/backend/dist/{esm/plugins/pdf.d.ts → cjs/backend/src/database/flatten_test.d.ts} +0 -0
- /package/backend/dist/cjs/{frontend.d.ts → backend/src/frontend.d.ts} +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/communication.d.ts +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/communication.js +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/mail/ui.js +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/pdf.js +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/thread_monitor.d.ts +0 -0
- /package/backend/dist/cjs/{plugins → backend/src/plugins}/thread_monitor.js +0 -0
- /package/backend/dist/cjs/{vinc.d.ts → backend/src/vinc.d.ts} +0 -0
- /package/backend/dist/cjs/{vinc.js → backend/src/vinc.js} +0 -0
- /package/backend/dist/esm/{cli.d.ts → backend/src/cli.d.ts} +0 -0
- /package/backend/dist/esm/{frontend.d.ts → backend/src/frontend.d.ts} +0 -0
- /package/backend/dist/esm/{plugins → backend/src/plugins}/communication.d.ts +0 -0
- /package/backend/dist/esm/{plugins → backend/src/plugins}/communication.js +0 -0
- /package/backend/dist/esm/{plugins → backend/src/plugins}/thread_monitor.d.ts +0 -0
- /package/backend/dist/esm/{plugins → backend/src/plugins}/thread_monitor.js +0 -0
- /package/backend/dist/esm/{vinc.d.ts → backend/src/vinc.d.ts} +0 -0
- /package/backend/dist/esm/{vinc.js → backend/src/vinc.js} +0 -0
- /package/frontend/dist/{elements → frontend/src/elements}/register_element.d.ts +0 -0
- /package/frontend/dist/{elements → frontend/src/elements}/register_element.js +0 -0
- /package/frontend/dist/{modules → frontend/src/modules}/color.d.ts +0 -0
- /package/frontend/dist/{ui → frontend/src/ui}/ui.d.ts +0 -0
- /package/frontend/dist/{ui → frontend/src/ui}/ui.js +0 -0
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __copyProps = (to, from, except, desc) => {
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from))
|
|
10
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
11
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
12
|
+
}
|
|
13
|
+
return to;
|
|
14
|
+
};
|
|
15
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
16
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
17
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
18
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
19
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var mongodb = __toESM(require("mongodb"));
|
|
24
|
+
const ok_id = {
|
|
25
|
+
_id: new mongodb.ObjectId("507f191e810c19729de860ea")
|
|
26
|
+
};
|
|
27
|
+
const ok_eq = {
|
|
28
|
+
name: "Ada"
|
|
29
|
+
};
|
|
30
|
+
const ok_eq_regex_on_string = {
|
|
31
|
+
name: /A.*/i
|
|
32
|
+
};
|
|
33
|
+
const ok_numeric_ops = {
|
|
34
|
+
age: {
|
|
35
|
+
$gte: 18,
|
|
36
|
+
$lt: 65,
|
|
37
|
+
$mod: [10, 0]
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
const ok_string_ops = {
|
|
41
|
+
name: {
|
|
42
|
+
$regex: "Ada",
|
|
43
|
+
$options: "i"
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const ok_date_ops = {
|
|
47
|
+
createdAt: { $gt: /* @__PURE__ */ new Date("2020-01-01") }
|
|
48
|
+
};
|
|
49
|
+
const ok_exists_and_type = {
|
|
50
|
+
active: { $exists: true },
|
|
51
|
+
createdAt: { $type: ["date", 9] }
|
|
52
|
+
// array of BSON types
|
|
53
|
+
};
|
|
54
|
+
const ok_array_ops_scalars = {
|
|
55
|
+
tags: {
|
|
56
|
+
$all: ["pro", "admin"],
|
|
57
|
+
$in: ["alpha", "beta"],
|
|
58
|
+
$nin: ["zzz"],
|
|
59
|
+
$size: 2,
|
|
60
|
+
$elemMatch: { $eq: "pro" }
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
const ok_array_ops_numbers = {
|
|
64
|
+
scores: {
|
|
65
|
+
$elemMatch: { $gt: 90 }
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const ok_bitwise = {
|
|
69
|
+
age: { $bitsAnySet: 10 }
|
|
70
|
+
};
|
|
71
|
+
const ok_dot_path_string = {
|
|
72
|
+
"address.street": { $regex: /Main/i }
|
|
73
|
+
};
|
|
74
|
+
const ok_dot_path_optional_number = {
|
|
75
|
+
"address.zip": { $type: "int" }
|
|
76
|
+
};
|
|
77
|
+
const ok_subdoc_equality = {
|
|
78
|
+
address: { street: "Main", zip: 12345 }
|
|
79
|
+
};
|
|
80
|
+
const ok_field_not_numeric = {
|
|
81
|
+
age: { $not: { $lt: 18 } }
|
|
82
|
+
};
|
|
83
|
+
const ok_field_not_regex_string = {
|
|
84
|
+
name: { $not: /tmp/i }
|
|
85
|
+
};
|
|
86
|
+
const ok_const_status = {
|
|
87
|
+
status: { $in: ["active", "inactive", "pending"] }
|
|
88
|
+
};
|
|
89
|
+
const ok_geo_near = {
|
|
90
|
+
location: {
|
|
91
|
+
$near: { type: "Point", coordinates: [10, 20], $maxDistance: 1e3 }
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const ok_geo_within = {
|
|
95
|
+
location: {
|
|
96
|
+
$geoWithin: {
|
|
97
|
+
$centerSphere: [[10, 20], 1]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const ok_geo_intersects = {
|
|
102
|
+
location: {
|
|
103
|
+
$geoIntersects: {
|
|
104
|
+
$geometry: { type: "Point", coordinates: [11, 21] }
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const ok_and_or_nor = {
|
|
109
|
+
$and: [
|
|
110
|
+
{ active: { $exists: true } },
|
|
111
|
+
{ $or: [{ age: { $gte: 21 } }, { "address.street": "Baker St" }] },
|
|
112
|
+
{ $nor: [{ tags: { $size: 0 } }] }
|
|
113
|
+
]
|
|
114
|
+
};
|
|
115
|
+
const ok_expr_math_compare = {
|
|
116
|
+
$expr: {
|
|
117
|
+
$and: [
|
|
118
|
+
{ $gte: ["$age", 18] },
|
|
119
|
+
{ $lt: ["$age", { $add: [60, -1] }] }
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const ok_expr_string_array_helpers = {
|
|
124
|
+
$expr: {
|
|
125
|
+
$or: [
|
|
126
|
+
// { $eq: [{ $toString: '$age' }, '42'] },
|
|
127
|
+
{ $in: ["admin", "$tags"] },
|
|
128
|
+
{ $size: "$tags" }
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const bad_expr_string_array_helpers = {
|
|
133
|
+
// @ts-expect-error
|
|
134
|
+
$expr: {
|
|
135
|
+
$or: [
|
|
136
|
+
{ $in: ["admin", "$tagsUNKNOWN"] },
|
|
137
|
+
{ $size: "$tags" }
|
|
138
|
+
]
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
const ok_text = {
|
|
142
|
+
$text: { $search: "engineer", $language: "en", $caseSensitive: false, $diacriticSensitive: true }
|
|
143
|
+
};
|
|
144
|
+
const ok_where_string = {
|
|
145
|
+
$where: "this.age > 20"
|
|
146
|
+
};
|
|
147
|
+
const ok_where_function = {
|
|
148
|
+
$where: function() {
|
|
149
|
+
return this.age >= 18 && this.name.length > 0;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const ok_json_schema_comment = {
|
|
153
|
+
$jsonSchema: { bsonType: "object", required: ["name"] },
|
|
154
|
+
$comment: "unit-test"
|
|
155
|
+
};
|
|
156
|
+
const ok_elemMatch_subdoc = {
|
|
157
|
+
notes: {
|
|
158
|
+
$elemMatch: {
|
|
159
|
+
title: { $regex: "^T" },
|
|
160
|
+
// Keep `as any` here – we aren't building a full, deep StrictFilter<Note> shape
|
|
161
|
+
// and equality to subdocs is allowed; using any avoids creating another type.
|
|
162
|
+
meta: {
|
|
163
|
+
rank: { $gte: 1 },
|
|
164
|
+
tags: { $in: ["x"] }
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
const bad_id = {
|
|
170
|
+
// @ts-expect-error - must be ObjectId
|
|
171
|
+
_id: []
|
|
172
|
+
};
|
|
173
|
+
const bad_id_1 = {
|
|
174
|
+
// @ts-expect-error - must be ObjectId
|
|
175
|
+
_id: false
|
|
176
|
+
};
|
|
177
|
+
const bad_unknown_top = {
|
|
178
|
+
// @ts-expect-error - 'nmae' is not a declared key on User
|
|
179
|
+
nmae: "typo"
|
|
180
|
+
};
|
|
181
|
+
const bad_unknown_dot = {
|
|
182
|
+
// @ts-expect-error - 'adress.stret' doesn't exist
|
|
183
|
+
"adress.stret": "nope"
|
|
184
|
+
};
|
|
185
|
+
const bad_too_deep = {
|
|
186
|
+
// @ts-expect-error - 'address.zip.code' is not a valid path
|
|
187
|
+
"address.zip.code": 5
|
|
188
|
+
};
|
|
189
|
+
const bad_string_size = {
|
|
190
|
+
name: {
|
|
191
|
+
// @ts-expect-error
|
|
192
|
+
$size: 3
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
const bad_regex_on_number = {
|
|
196
|
+
// @ts-expect-error
|
|
197
|
+
age: /x/
|
|
198
|
+
};
|
|
199
|
+
const bad_number_regex = {
|
|
200
|
+
age: {
|
|
201
|
+
// @ts-expect-error
|
|
202
|
+
$regex: /x/
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
const bad_mod_arity = {
|
|
206
|
+
age: {
|
|
207
|
+
// @ts-expect-error
|
|
208
|
+
$mod: [2]
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
const bad_type_name = {
|
|
212
|
+
age: {
|
|
213
|
+
// @ts-expect-error
|
|
214
|
+
$type: "nonsense"
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
const bad_in_scalar_type = {
|
|
218
|
+
age: {
|
|
219
|
+
// @ts-expect-error
|
|
220
|
+
$in: ["x"]
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
const bad_in_array_elem_type = {
|
|
224
|
+
// @ts-expect-error
|
|
225
|
+
tags: {
|
|
226
|
+
$in: [1, 2]
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
const bad_all_type = {
|
|
230
|
+
// @ts-expect-error
|
|
231
|
+
tags: {
|
|
232
|
+
$all: [1, 2, 3]
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
const bad_elemMatch_type = {
|
|
236
|
+
scores: {
|
|
237
|
+
$elemMatch: {
|
|
238
|
+
// @ts-expect-error
|
|
239
|
+
$regex: /x/
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
};
|
|
243
|
+
const bad_near_shape = {
|
|
244
|
+
location: {
|
|
245
|
+
// @ts-expect-error
|
|
246
|
+
$near: [0, 0]
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
const bad_geo_intersects_shape = {
|
|
250
|
+
location: {
|
|
251
|
+
$geoIntersects: {
|
|
252
|
+
// @ts-expect-error
|
|
253
|
+
foo: 1
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
const bad_not_regex_on_number = {
|
|
258
|
+
age: {
|
|
259
|
+
// @ts-expect-error
|
|
260
|
+
$not: /x/
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
const bad_subdoc_extra_key = {
|
|
264
|
+
address: {
|
|
265
|
+
street: "Main",
|
|
266
|
+
zip: 1,
|
|
267
|
+
// @ts-expect-error
|
|
268
|
+
oops: true
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
const bad_unknown_top_op = {
|
|
272
|
+
// @ts-expect-error
|
|
273
|
+
$foo: 1
|
|
274
|
+
};
|
|
275
|
+
const bad_text_extra = {
|
|
276
|
+
$text: {
|
|
277
|
+
$search: "q",
|
|
278
|
+
// @ts-expect-error
|
|
279
|
+
unknown: true
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
const bad_comment_type = {
|
|
283
|
+
// @ts-expect-error
|
|
284
|
+
$comment: 42
|
|
285
|
+
};
|
|
286
|
+
const bad_where_type = {
|
|
287
|
+
// @ts-expect-error
|
|
288
|
+
$where: 7
|
|
289
|
+
};
|
|
290
|
+
const bad_expr_field_ref = {
|
|
291
|
+
// @ts-expect-error
|
|
292
|
+
$expr: {
|
|
293
|
+
$eq: ["$ages", 12]
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
const bad_expr_add_scalar = {
|
|
297
|
+
// @ts-expect-error
|
|
298
|
+
$expr: {
|
|
299
|
+
$add: 1
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
const bad_and_unknown_inside = {
|
|
303
|
+
$and: [
|
|
304
|
+
{
|
|
305
|
+
// @ts-expect-error
|
|
306
|
+
nmae: "typo"
|
|
307
|
+
// should be name
|
|
308
|
+
}
|
|
309
|
+
]
|
|
310
|
+
};
|
|
311
|
+
const bad_or_wrong_elem_type = {
|
|
312
|
+
$or: [
|
|
313
|
+
// @ts-expect-error
|
|
314
|
+
42
|
|
315
|
+
]
|
|
316
|
+
};
|
|
317
|
+
const bad_elemMatch_unknown_nested = {
|
|
318
|
+
notes: {
|
|
319
|
+
$elemMatch: {
|
|
320
|
+
// @ts-expect-error
|
|
321
|
+
titla: { $regex: "^T" }
|
|
322
|
+
// typo
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
const typo_in_and = {
|
|
327
|
+
"address.street": { $regex: "Main", $options: "i" },
|
|
328
|
+
age: { $gte: 18, $lte: 99 },
|
|
329
|
+
// @ts-expect-error
|
|
330
|
+
$expr: {
|
|
331
|
+
$and: [
|
|
332
|
+
{ $gte: ["$ageXXX", 18] },
|
|
333
|
+
{ $lt: ["$ageXXX", 100] }
|
|
334
|
+
]
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
const bad_const_status = {
|
|
338
|
+
// @ts-expect-error
|
|
339
|
+
status: { $in: ["UNKNOWN"] }
|
|
340
|
+
};
|
|
341
|
+
const strictOk = {
|
|
342
|
+
"address.street": { $regex: "Main", $options: "i" },
|
|
343
|
+
age: { $gte: 18, $lte: 99 },
|
|
344
|
+
$expr: { $and: [{ $gte: ["$age", 18] }, { $lt: ["$age", 100] }] }
|
|
345
|
+
};
|
|
346
|
+
const mongoFilterAccepts = strictOk;
|
|
347
|
+
async function _useInFindOne() {
|
|
348
|
+
const r = await usersCol.findOne(strictOk);
|
|
349
|
+
void r;
|
|
350
|
+
}
|
|
351
|
+
class SomeClassGeneric {
|
|
352
|
+
col;
|
|
353
|
+
cast(query) {
|
|
354
|
+
const q = query;
|
|
355
|
+
void q;
|
|
356
|
+
}
|
|
357
|
+
async find(query) {
|
|
358
|
+
return await this.col.findOne(query) ?? void 0;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
const repo1 = new SomeClassGeneric();
|
|
362
|
+
repo1.cast(strictOk);
|
|
363
|
+
function acceptsStrict(q) {
|
|
364
|
+
const f = q;
|
|
365
|
+
void f;
|
|
366
|
+
}
|
|
367
|
+
acceptsStrict({ $and: [{ age: { $gte: 1 } }] });
|
|
368
|
+
class FancyRepo {
|
|
369
|
+
col;
|
|
370
|
+
whereRecent(q) {
|
|
371
|
+
const f = q;
|
|
372
|
+
void f;
|
|
373
|
+
}
|
|
374
|
+
async findOneStrict(q) {
|
|
375
|
+
return await this.col.findOne(q) ?? void 0;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
const fancy = new FancyRepo();
|
|
379
|
+
fancy.whereRecent({ createdAt: { $gt: /* @__PURE__ */ new Date(0) } });
|
|
380
|
+
function complexWhere(conds) {
|
|
381
|
+
const merged = {
|
|
382
|
+
$and: conds
|
|
383
|
+
};
|
|
384
|
+
const f = merged;
|
|
385
|
+
void f;
|
|
386
|
+
}
|
|
387
|
+
complexWhere([{ name: "Ada" }, { age: { $gt: 20 } }]);
|
|
388
|
+
const ok_mix = {
|
|
389
|
+
name: { $eq: "Ada" },
|
|
390
|
+
age: 36
|
|
391
|
+
};
|
|
392
|
+
const ok_dot_eq = {
|
|
393
|
+
"address.street": "Baker St"
|
|
394
|
+
};
|
|
395
|
+
const ok_array_equality = {
|
|
396
|
+
tags: ["x", "y"]
|
|
397
|
+
};
|
|
398
|
+
const bad_options_without_regex = {
|
|
399
|
+
// @ts-expect-error
|
|
400
|
+
name: {
|
|
401
|
+
$options: "i"
|
|
402
|
+
}
|
|
403
|
+
};
|
|
404
|
+
const bad_nearSphere_shape = {
|
|
405
|
+
location: {
|
|
406
|
+
$nearSphere: {
|
|
407
|
+
// @ts-expect-error
|
|
408
|
+
foo: "bar"
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
};
|
|
412
|
+
const ok_jsonSchema_any = {
|
|
413
|
+
$jsonSchema: 123
|
|
414
|
+
};
|
|
415
|
+
void ok_jsonSchema_any;
|
|
416
|
+
void ok_eq;
|
|
417
|
+
void ok_eq_regex_on_string;
|
|
418
|
+
void ok_numeric_ops;
|
|
419
|
+
void ok_string_ops;
|
|
420
|
+
void ok_date_ops;
|
|
421
|
+
void ok_exists_and_type;
|
|
422
|
+
void ok_array_ops_scalars;
|
|
423
|
+
void ok_array_ops_numbers;
|
|
424
|
+
void ok_bitwise;
|
|
425
|
+
void ok_dot_path_string;
|
|
426
|
+
void ok_dot_path_optional_number;
|
|
427
|
+
void ok_subdoc_equality;
|
|
428
|
+
void ok_field_not_numeric;
|
|
429
|
+
void ok_field_not_regex_string;
|
|
430
|
+
void ok_geo_near;
|
|
431
|
+
void ok_geo_within;
|
|
432
|
+
void ok_geo_intersects;
|
|
433
|
+
void ok_and_or_nor;
|
|
434
|
+
void ok_expr_math_compare;
|
|
435
|
+
void ok_expr_string_array_helpers;
|
|
436
|
+
void ok_text;
|
|
437
|
+
void ok_where_string;
|
|
438
|
+
void ok_where_function;
|
|
439
|
+
void ok_json_schema_comment;
|
|
440
|
+
void ok_elemMatch_subdoc;
|
|
441
|
+
void ok_mix;
|
|
442
|
+
void ok_dot_eq;
|
|
443
|
+
void ok_array_equality;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
var stdin_exports = {};
|
|
15
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Daan van den Bergh
|
|
3
|
+
* @copyright © 2022 - 2025 Daan van den Bergh.
|
|
4
|
+
*/
|
|
5
|
+
import * as mongodb from 'mongodb';
|
|
6
|
+
/**
|
|
7
|
+
* Helper type for recursive depth limiting
|
|
8
|
+
*/
|
|
9
|
+
type PathsPrev = [never, 0, 1, 2, 3, 4];
|
|
10
|
+
/**
|
|
11
|
+
* Extract all valid paths from a schema including nested paths
|
|
12
|
+
* Supports dot notation for nested objects
|
|
13
|
+
*/
|
|
14
|
+
type Paths<T, D extends number = 4> = [D] extends [never] ? never : T extends object ? {
|
|
15
|
+
[K in keyof T]-?: K extends string | number ? `${K}` | (T[K] extends object ? T[K] extends ReadonlyArray<any> ? never : Paths<T[K], PathsPrev[D]> extends infer P ? P extends string ? `${K}.${P}` : never : never : never) : never;
|
|
16
|
+
}[keyof T] : '';
|
|
17
|
+
/**
|
|
18
|
+
* Get the value type at a specific path in the schema
|
|
19
|
+
*/
|
|
20
|
+
type PathValue<T, P extends string> = P extends keyof T ? T[P] : P extends `${infer K}.${infer Rest}` ? K extends keyof T ? PathValue<T[K], Rest> : never : never;
|
|
21
|
+
/**
|
|
22
|
+
* Create an exact object type that doesn't allow extra properties
|
|
23
|
+
* This is the key to making our types strict
|
|
24
|
+
*/
|
|
25
|
+
type Exact<T, Shape = T> = T extends Shape ? T extends infer O ? {
|
|
26
|
+
[K in keyof O]: O[K];
|
|
27
|
+
} & {
|
|
28
|
+
[K in Exclude<keyof T, keyof Shape>]?: never;
|
|
29
|
+
} : never : Shape;
|
|
30
|
+
/**
|
|
31
|
+
* Strict filter fields that only allow schema paths.
|
|
32
|
+
* If a field is an array (e.g., string[]), allow operators for the *element* type
|
|
33
|
+
* (e.g., FilterOperators<string>) in addition to plain array equality and
|
|
34
|
+
* array-typed operators.
|
|
35
|
+
*/
|
|
36
|
+
type FilterFields<TSchema> = {
|
|
37
|
+
[K in Paths<TSchema>]?: PathValue<TSchema, K> extends (infer U)[] ? PathValue<TSchema, K> | mongodb.FilterOperators<U> : PathValue<TSchema, K> | mongodb.FilterOperators<PathValue<TSchema, K>>;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Strict version of MongoDB Filter that only allows querying existing fields
|
|
41
|
+
* Supports logical operators ($and, $or, $nor) with recursive StrictFilter values.
|
|
42
|
+
* NOTE: We intentionally avoid mongodb.RootFilterOperators here to keep keys airtight.
|
|
43
|
+
* @template TSchema - The document schema type
|
|
44
|
+
*/
|
|
45
|
+
export type StrictFilter<TSchema> = Exact<FilterFields<TSchema> & {
|
|
46
|
+
$and?: StrictFilter<TSchema>[];
|
|
47
|
+
$or?: StrictFilter<TSchema>[];
|
|
48
|
+
$nor?: StrictFilter<TSchema>[];
|
|
49
|
+
}>;
|
|
50
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
var stdin_exports = {};
|
|
15
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Daan van den Bergh
|
|
3
|
+
* @copyright © 2022 - 2025 Daan van den Bergh.
|
|
4
|
+
*/
|
|
5
|
+
import * as mongodb from 'mongodb';
|
|
6
|
+
/**
|
|
7
|
+
* Helper type for recursive depth limiting
|
|
8
|
+
*/
|
|
9
|
+
type PathsPrev = [never, 0, 1, 2, 3, 4];
|
|
10
|
+
/**
|
|
11
|
+
* Extract all valid paths from a schema including nested paths
|
|
12
|
+
* Supports dot notation for nested objects
|
|
13
|
+
*/
|
|
14
|
+
type Paths<T, D extends number = 4> = [D] extends [never] ? never : T extends object ? {
|
|
15
|
+
[K in keyof T]-?: K extends string | number ? `${K}` | (T[K] extends object ? T[K] extends ReadonlyArray<any> ? never : Paths<T[K], PathsPrev[D]> extends infer P ? P extends string ? `${K}.${P}` : never : never : never) : never;
|
|
16
|
+
}[keyof T] : '';
|
|
17
|
+
/**
|
|
18
|
+
* Get the value type at a specific path in the schema
|
|
19
|
+
*/
|
|
20
|
+
type PathValue<T, P extends string> = P extends keyof T ? T[P] : P extends `${infer K}.${infer Rest}` ? K extends keyof T ? PathValue<T[K], Rest> : never : never;
|
|
21
|
+
type Expand<T> = {
|
|
22
|
+
[K in keyof T]: T[K];
|
|
23
|
+
};
|
|
24
|
+
type CommonOpKeys = '$eq' | '$ne' | '$gt' | '$gte' | '$lt' | '$lte' | '$in' | '$nin' | '$exists' | '$type' | '$not';
|
|
25
|
+
type StringOnlyOpKeys = '$regex' | '$options';
|
|
26
|
+
type NumberOnlyOpKeys = '$mod' | '$bitsAllClear' | '$bitsAllSet' | '$bitsAnyClear' | '$bitsAnySet';
|
|
27
|
+
type GeoOpKeys = '$geoIntersects' | '$geoWithin' | '$near' | '$nearSphere';
|
|
28
|
+
/**
|
|
29
|
+
* Field-level operators we allow.
|
|
30
|
+
* Using Pick<...> *removes* any inherited `[key: string]: any]` index signature
|
|
31
|
+
* so unknown operator keys will NOT type-check.
|
|
32
|
+
*/
|
|
33
|
+
type KnownFieldOps<V> = Pick<mongodb.FilterOperators<V>, CommonOpKeys | StringOnlyOpKeys | NumberOnlyOpKeys | GeoOpKeys>;
|
|
34
|
+
/**
|
|
35
|
+
* For whole-array field (not element-wise) we only allow a few generic checks.
|
|
36
|
+
* This avoids array-of-arrays `$in` through `FilterOperators<A>`.
|
|
37
|
+
*/
|
|
38
|
+
type ArrayFieldGenericOps<A> = Pick<mongodb.FilterOperators<A>, '$exists' | '$type' | '$not'>;
|
|
39
|
+
type Elem<T> = T extends ReadonlyArray<infer U> ? U : T extends Array<infer U> ? U : never;
|
|
40
|
+
type ElemMatchValue<U> = U extends object ? StrictFilter<U> : KnownFieldOps<U>;
|
|
41
|
+
type StrictArrayLevelOperators<A> = A extends ReadonlyArray<infer U> | (infer U)[] ? {
|
|
42
|
+
$all?: ReadonlyArray<U>;
|
|
43
|
+
$size?: number;
|
|
44
|
+
$elemMatch?: ElemMatchValue<U>;
|
|
45
|
+
} : never;
|
|
46
|
+
/**
|
|
47
|
+
* Full value type allowed for an array field — *without* ever using
|
|
48
|
+
* `mongodb.FilterOperators<A>` wholesale (prevents indexer leakage and
|
|
49
|
+
* array-of-arrays `$in`).
|
|
50
|
+
*/
|
|
51
|
+
type StrictArrayValue<A> = A extends ReadonlyArray<any> | any[] ? A | Elem<A> | KnownFieldOps<Elem<A>> | ArrayFieldGenericOps<A> | StrictArrayLevelOperators<A> : never;
|
|
52
|
+
type DotOnlyPaths<T> = Exclude<Paths<T>, Extract<keyof T, string>>;
|
|
53
|
+
type DotPathFilters<T> = {
|
|
54
|
+
[K in DotOnlyPaths<T>]?: PathValue<T, K> extends ReadonlyArray<any> | any[] ? StrictArrayValue<PathValue<T, K>> : PathValue<T, K> | KnownFieldOps<PathValue<T, K>>;
|
|
55
|
+
};
|
|
56
|
+
type TopFieldKeys<T> = '_id' | Extract<keyof mongodb.EnhancedOmit<T, '_id'>, string>;
|
|
57
|
+
type TopFieldFilters<T> = {
|
|
58
|
+
[K in TopFieldKeys<T>]?: K extends keyof T ? (T[K] extends ReadonlyArray<any> | any[] ? StrictArrayValue<T[K]> : T[K] | KnownFieldOps<T[K]>) : mongodb.Condition<mongodb.WithId<T>[K]>;
|
|
59
|
+
};
|
|
60
|
+
type StrictLogicalOps<T> = {
|
|
61
|
+
$and?: StrictFilter<T>[];
|
|
62
|
+
$or?: StrictFilter<T>[];
|
|
63
|
+
$nor?: StrictFilter<T>[];
|
|
64
|
+
};
|
|
65
|
+
type StrictOtherRootOps<T> = Partial<Pick<mongodb.RootFilterOperators<T>, '$expr' | '$jsonSchema' | '$text' | '$where' | '$comment' | '$rand'>>;
|
|
66
|
+
type StrictRootOperators<T> = StrictLogicalOps<T> & StrictOtherRootOps<T>;
|
|
67
|
+
/**
|
|
68
|
+
* StrictFilter:
|
|
69
|
+
* • Unknown keys rejected on object literals (no string index signature)
|
|
70
|
+
* • Dot-notation paths allowed & typed
|
|
71
|
+
* • Arrays keep strict $elemMatch/$size/$all behavior
|
|
72
|
+
* • Root operators optional and typed to the driver
|
|
73
|
+
* • Structurally compatible with mongodb.Filter<T>
|
|
74
|
+
*/
|
|
75
|
+
export type StrictFilter<T> = Expand<TopFieldFilters<T> & DotPathFilters<T> & StrictRootOperators<T>>;
|
|
76
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
var stdin_exports = {};
|
|
15
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Daan van den Bergh
|
|
3
|
+
* @copyright © 2022 - 2025 Daan van den Bergh.
|
|
4
|
+
*/
|
|
5
|
+
import * as mongodb from 'mongodb';
|
|
6
|
+
/**
|
|
7
|
+
* Helper type for recursive depth limiting
|
|
8
|
+
*/
|
|
9
|
+
type PathsPrev = [never, 0, 1, 2, 3, 4];
|
|
10
|
+
/**
|
|
11
|
+
* Extract all valid paths from a schema including nested paths
|
|
12
|
+
* Supports dot notation for nested objects
|
|
13
|
+
*/
|
|
14
|
+
type Paths<T, D extends number = 4> = [D] extends [never] ? never : T extends object ? {
|
|
15
|
+
[K in keyof T]-?: K extends string | number ? `${K}` | (T[K] extends object ? T[K] extends ReadonlyArray<any> ? never : Paths<T[K], PathsPrev[D]> extends infer P ? P extends string ? `${K}.${P}` : never : never : never) : never;
|
|
16
|
+
}[keyof T] : '';
|
|
17
|
+
/**
|
|
18
|
+
* Get the value type at a specific path in the schema
|
|
19
|
+
*/
|
|
20
|
+
type PathValue<T, P extends string> = P extends keyof T ? T[P] : P extends `${infer K}.${infer Rest}` ? K extends keyof T ? PathValue<T[K], Rest> : never : never;
|
|
21
|
+
type Expand<T> = {
|
|
22
|
+
[K in keyof T]: T[K];
|
|
23
|
+
};
|
|
24
|
+
type CommonOpKeys = '$eq' | '$ne' | '$gt' | '$gte' | '$lt' | '$lte' | '$in' | '$nin' | '$exists' | '$type' | '$not';
|
|
25
|
+
type StringOnlyOpKeys = '$regex' | '$options';
|
|
26
|
+
type NumberOnlyOpKeys = '$mod' | '$bitsAllClear' | '$bitsAllSet' | '$bitsAnyClear' | '$bitsAnySet';
|
|
27
|
+
type GeoOpKeys = '$geoIntersects' | '$geoWithin' | '$near' | '$nearSphere';
|
|
28
|
+
/**
|
|
29
|
+
* Field-level operators we allow.
|
|
30
|
+
* Using Pick<...> removes any inherited index signature,
|
|
31
|
+
* so unknown operator keys will NOT type-check.
|
|
32
|
+
*/
|
|
33
|
+
type KnownFieldOps<V> = Pick<mongodb.FilterOperators<V>, CommonOpKeys | StringOnlyOpKeys | NumberOnlyOpKeys | GeoOpKeys>;
|
|
34
|
+
/**
|
|
35
|
+
* For whole-array field (not element-wise) we only allow a few generic checks.
|
|
36
|
+
* This avoids array-of-arrays `$in` through `FilterOperators<A>`.
|
|
37
|
+
*/
|
|
38
|
+
type ArrayFieldGenericOps<A> = Pick<mongodb.FilterOperators<A>, '$exists' | '$type' | '$not'>;
|
|
39
|
+
type Elem<T> = T extends ReadonlyArray<infer U> ? U : T extends Array<infer U> ? U : never;
|
|
40
|
+
type ElemMatchValue<U> = U extends object ? StrictFilter<U> : KnownFieldOps<U>;
|
|
41
|
+
type StrictArrayLevelOperators<A> = A extends ReadonlyArray<infer U> | (infer U)[] ? {
|
|
42
|
+
$all?: ReadonlyArray<U>;
|
|
43
|
+
$size?: number;
|
|
44
|
+
$elemMatch?: ElemMatchValue<U>;
|
|
45
|
+
} : never;
|
|
46
|
+
/**
|
|
47
|
+
* Full value type allowed for an array field — *without* ever using
|
|
48
|
+
* `mongodb.FilterOperators<A>` wholesale (prevents indexer leakage and
|
|
49
|
+
* array-of-arrays `$in`).
|
|
50
|
+
*/
|
|
51
|
+
type StrictArrayValue<A> = A extends ReadonlyArray<any> | any[] ? A | Elem<A> | KnownFieldOps<Elem<A>> | ArrayFieldGenericOps<A> | StrictArrayLevelOperators<A> : never;
|
|
52
|
+
type DotOnlyPaths<T> = Exclude<Paths<T>, Extract<keyof T, string>>;
|
|
53
|
+
type DotPathFilters<T> = {
|
|
54
|
+
[K in DotOnlyPaths<T>]?: PathValue<T, K> extends ReadonlyArray<any> | any[] ? StrictArrayValue<PathValue<T, K>> : PathValue<T, K> | KnownFieldOps<PathValue<T, K>>;
|
|
55
|
+
};
|
|
56
|
+
type TopFieldFilters<T> = {
|
|
57
|
+
[K in keyof mongodb.WithId<T> as K extends string ? K : never]?: K extends keyof T ? (T[K] extends ReadonlyArray<any> | any[] ? StrictArrayValue<T[K]> : T[K] | KnownFieldOps<T[K]>) : mongodb.Condition<mongodb.WithId<T>[K]>;
|
|
58
|
+
};
|
|
59
|
+
type StrictLogicalOps<T> = {
|
|
60
|
+
$and?: StrictFilter<T>[];
|
|
61
|
+
$or?: StrictFilter<T>[];
|
|
62
|
+
$nor?: StrictFilter<T>[];
|
|
63
|
+
};
|
|
64
|
+
type StrictOtherRootOps<T> = Partial<Pick<mongodb.RootFilterOperators<T>, '$expr' | '$jsonSchema' | '$text' | '$where' | '$comment' | '$rand'>>;
|
|
65
|
+
type StrictRootOperators<T> = StrictLogicalOps<T> & StrictOtherRootOps<T>;
|
|
66
|
+
/**
|
|
67
|
+
* StrictFilter:
|
|
68
|
+
* • Unknown keys rejected on object literals (no string index signature)
|
|
69
|
+
* • Dot-notation paths allowed & typed
|
|
70
|
+
* • Arrays keep strict $elemMatch/$size/$all behavior
|
|
71
|
+
* • Root operators optional and typed to the driver
|
|
72
|
+
* • Assignable to mongodb.Filter<T> even at generic boundaries
|
|
73
|
+
*/
|
|
74
|
+
export type StrictFilter<T> = Expand<TopFieldFilters<T> & DotPathFilters<T> & StrictRootOperators<T>>;
|
|
75
|
+
export {};
|