@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,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,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,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Daan van den Bergh
|
|
3
|
+
* @copyright © 2022 - 2025 Daan van den Bergh.
|
|
4
|
+
*/
|
|
5
|
+
export {};
|
|
6
|
+
// // ==================================================================
|
|
7
|
+
// // Strict Filter — v1
|
|
8
|
+
// // ==================================================================
|
|
9
|
+
// /**
|
|
10
|
+
// * Create an exact object type that doesn't allow extra properties
|
|
11
|
+
// * This is the key to making our types strict
|
|
12
|
+
// */
|
|
13
|
+
// type Exact<T, Shape = T> = T extends Shape ?
|
|
14
|
+
// T extends infer O ?
|
|
15
|
+
// { [K in keyof O]: O[K] } &
|
|
16
|
+
// { [K in Exclude<keyof T, keyof Shape>]?: never }
|
|
17
|
+
// : never
|
|
18
|
+
// : Shape;
|
|
19
|
+
// /**
|
|
20
|
+
// * Strict filter fields that only allow schema paths.
|
|
21
|
+
// * If a field is an array (e.g., string[]), allow operators for the *element* type
|
|
22
|
+
// * (e.g., FilterOperators<string>) in addition to plain array equality and
|
|
23
|
+
// * array-typed operators.
|
|
24
|
+
// */
|
|
25
|
+
// type FilterFields<TSchema> = {
|
|
26
|
+
// [K in Paths<TSchema>]?: PathValue<TSchema, K> extends (infer U)[]
|
|
27
|
+
// // arrays: allow equality on the whole array OR element-wise operators
|
|
28
|
+
// ? PathValue<TSchema, K> | mongodb.FilterOperators<U>
|
|
29
|
+
// // non-arrays: keep original behavior
|
|
30
|
+
// : PathValue<TSchema, K> | mongodb.FilterOperators<PathValue<TSchema, K>>;
|
|
31
|
+
// };
|
|
32
|
+
// /**
|
|
33
|
+
// * Strict version of MongoDB Filter that only allows querying existing fields
|
|
34
|
+
// * Supports logical operators ($and, $or, $nor) with recursive StrictFilter values.
|
|
35
|
+
// * NOTE: We intentionally avoid mongodb.RootFilterOperators here to keep keys airtight.
|
|
36
|
+
// * @template TSchema - The document schema type
|
|
37
|
+
// */
|
|
38
|
+
// export type StrictFilter<TSchema> = Exact<
|
|
39
|
+
// FilterFields<TSchema> & {
|
|
40
|
+
// $and?: StrictFilter<TSchema>[];
|
|
41
|
+
// $or?: StrictFilter<TSchema>[];
|
|
42
|
+
// $nor?: StrictFilter<TSchema>[];
|
|
43
|
+
// }
|
|
44
|
+
// >;
|
|
@@ -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 {};
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import type { ObjectId, Document as MongoDocument, WithId } from "mongodb";
|
|
2
|
+
type KnownKeys<T> = {
|
|
3
|
+
[K in keyof T]-?: string extends K ? never : number extends K ? never : symbol extends K ? never : K;
|
|
4
|
+
}[keyof T];
|
|
5
|
+
type Comparable = number | bigint | Date;
|
|
6
|
+
type Elem<T> = T extends readonly (infer U)[] ? U : never;
|
|
7
|
+
type IsArray<T> = T extends readonly any[] ? true : false;
|
|
8
|
+
type Defined<T> = Exclude<T, undefined>;
|
|
9
|
+
type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
10
|
+
type Join<K, P> = K extends string | number ? P extends string | number ? `${K}.${P}` : never : never;
|
|
11
|
+
/** Dot paths over object properties, ignoring arrays. Depth default = 5. */
|
|
12
|
+
export type DotPaths<T, D extends number = 5> = [D] extends [never] ? never : T extends object ? {
|
|
13
|
+
[K in KnownKeys<T>]: T[K] extends object ? IsArray<T[K]> extends true ? K & string : (K & string) | Join<K & string, DotPaths<T[K], Prev[D]>> : K & string;
|
|
14
|
+
}[KnownKeys<T>] : never;
|
|
15
|
+
/** Value type at a given dot-path (subset handles up to depth ~5 cleanly). */
|
|
16
|
+
export type PathValue<T, P extends string> = P extends `${infer K}.${infer R}` ? K extends keyof T ? PathValue<T[K], R> : never : P extends keyof T ? T[P] : never;
|
|
17
|
+
export type BSONTypeName = "double" | "string" | "object" | "array" | "binData" | "undefined" | "objectId" | "bool" | "date" | "null" | "regex" | "dbPointer" | "javascript" | "symbol" | "javascriptWithScope" | "int" | "timestamp" | "long" | "decimal" | "minKey" | "maxKey";
|
|
18
|
+
export type BSONType = BSONTypeName | number;
|
|
19
|
+
export type Position = [number, number] | [number, number, number];
|
|
20
|
+
export type Point = {
|
|
21
|
+
type: "Point";
|
|
22
|
+
coordinates: Position;
|
|
23
|
+
};
|
|
24
|
+
export type LineString = {
|
|
25
|
+
type: "LineString";
|
|
26
|
+
coordinates: Position[];
|
|
27
|
+
};
|
|
28
|
+
export type Polygon = {
|
|
29
|
+
type: "Polygon";
|
|
30
|
+
coordinates: Position[][];
|
|
31
|
+
};
|
|
32
|
+
export type MultiPoint = {
|
|
33
|
+
type: "MultiPoint";
|
|
34
|
+
coordinates: Position[];
|
|
35
|
+
};
|
|
36
|
+
export type MultiLineString = {
|
|
37
|
+
type: "MultiLineString";
|
|
38
|
+
coordinates: Position[][];
|
|
39
|
+
};
|
|
40
|
+
export type MultiPolygon = {
|
|
41
|
+
type: "MultiPolygon";
|
|
42
|
+
coordinates: Position[][][];
|
|
43
|
+
};
|
|
44
|
+
export type Geometry = Point | LineString | Polygon | MultiPoint | MultiLineString | MultiPolygon;
|
|
45
|
+
type AllFieldPaths<T extends MongoDocument> = DotPaths<WithId<T>> | "_id";
|
|
46
|
+
export type FieldRef<T extends MongoDocument> = `$${AllFieldPaths<T>}`;
|
|
47
|
+
type ExprLiteral = string | number | boolean | null | Date;
|
|
48
|
+
/** Strict expression tree for `$expr`. */
|
|
49
|
+
export type Expr<T extends MongoDocument> = ExprLiteral | FieldRef<T> | Expr<T>[] | {
|
|
50
|
+
$add?: Expr<T>[];
|
|
51
|
+
$subtract?: [Expr<T>, Expr<T>];
|
|
52
|
+
$multiply?: Expr<T>[];
|
|
53
|
+
$divide?: [Expr<T>, Expr<T>];
|
|
54
|
+
$mod?: [Expr<T>, Expr<T>];
|
|
55
|
+
$eq?: [Expr<T>, Expr<T>];
|
|
56
|
+
$ne?: [Expr<T>, Expr<T>];
|
|
57
|
+
$gt?: [Expr<T>, Expr<T>];
|
|
58
|
+
$gte?: [Expr<T>, Expr<T>];
|
|
59
|
+
$lt?: [Expr<T>, Expr<T>];
|
|
60
|
+
$lte?: [Expr<T>, Expr<T>];
|
|
61
|
+
$and?: Expr<T>[];
|
|
62
|
+
$or?: Expr<T>[];
|
|
63
|
+
$not?: Expr<T>;
|
|
64
|
+
$concat?: Expr<T>[];
|
|
65
|
+
$size?: Expr<T>;
|
|
66
|
+
$in?: [Expr<T>, Expr<T>];
|
|
67
|
+
$toString?: Expr<T>;
|
|
68
|
+
$toInt?: Expr<T>;
|
|
69
|
+
$toDouble?: Expr<T>;
|
|
70
|
+
$toDecimal?: Expr<T>;
|
|
71
|
+
$toLong?: Expr<T>;
|
|
72
|
+
$toBool?: Expr<T>;
|
|
73
|
+
$toDate?: Expr<T>;
|
|
74
|
+
};
|
|
75
|
+
type BitwiseOps<T> = T extends number | bigint ? {
|
|
76
|
+
$bitsAllClear?: number;
|
|
77
|
+
$bitsAllSet?: number;
|
|
78
|
+
$bitsAnyClear?: number;
|
|
79
|
+
$bitsAnySet?: number;
|
|
80
|
+
} : {};
|
|
81
|
+
type NumericComparators<T> = T extends Comparable ? {
|
|
82
|
+
$gt?: T;
|
|
83
|
+
$gte?: T;
|
|
84
|
+
$lt?: T;
|
|
85
|
+
$lte?: T;
|
|
86
|
+
$mod?: T extends number | bigint ? [number, number] : never;
|
|
87
|
+
} : {};
|
|
88
|
+
/**
|
|
89
|
+
* String ops:
|
|
90
|
+
* - `$regex` optional overall, but `$options` is only legal when `$regex` is present.
|
|
91
|
+
*/
|
|
92
|
+
type StringRegexOps = {
|
|
93
|
+
$regex: RegExp | string;
|
|
94
|
+
$options?: string;
|
|
95
|
+
} | {
|
|
96
|
+
$regex?: undefined;
|
|
97
|
+
$options?: undefined;
|
|
98
|
+
};
|
|
99
|
+
type StringOps<T> = T extends string ? StringRegexOps : {};
|
|
100
|
+
type ArrayOps<T> = T extends readonly any[] ? {
|
|
101
|
+
$size?: number;
|
|
102
|
+
$all?: Elem<T>[];
|
|
103
|
+
$elemMatch?: Elem<T> extends object ? StrictFilter<Elem<T>> | FieldOperators<Elem<T>> : FieldOperators<Elem<T>>;
|
|
104
|
+
$in?: Elem<T>[];
|
|
105
|
+
$nin?: Elem<T>[];
|
|
106
|
+
} : {};
|
|
107
|
+
type ExistsOp = {
|
|
108
|
+
$exists?: boolean;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* `$type` differs for string fields for driver-interop:
|
|
112
|
+
* - For string/regex fields, the mongodb driver narrows *`$type`* to **names only** (no numeric codes).
|
|
113
|
+
* - For other fields we allow both numeric codes and names.
|
|
114
|
+
*/
|
|
115
|
+
type TypeOpByField<T> = {
|
|
116
|
+
$type?: Defined<T> extends string ? BSONTypeName | BSONTypeName[] : BSONType | BSONType[];
|
|
117
|
+
};
|
|
118
|
+
type ArrayOfUnion<T> = T extends any ? T[] : never;
|
|
119
|
+
/** For arrays, omit $in/$nin here to avoid the `string[][] & string[]` intersection. */
|
|
120
|
+
type EqualityOps<T> = T extends readonly any[] ? {
|
|
121
|
+
$eq?: T;
|
|
122
|
+
$ne?: T;
|
|
123
|
+
} : {
|
|
124
|
+
$eq?: T;
|
|
125
|
+
$ne?: T;
|
|
126
|
+
$in?: ArrayOfUnion<T>;
|
|
127
|
+
$nin?: ArrayOfUnion<T>;
|
|
128
|
+
};
|
|
129
|
+
/** Geospatial operators (field-level) */
|
|
130
|
+
type GeoOps = {
|
|
131
|
+
$geoWithin?: {
|
|
132
|
+
$geometry: Geometry;
|
|
133
|
+
} | {
|
|
134
|
+
$box: [Position, Position];
|
|
135
|
+
} | {
|
|
136
|
+
$polygon: Position[];
|
|
137
|
+
} | {
|
|
138
|
+
$centerSphere: [Position, number];
|
|
139
|
+
};
|
|
140
|
+
$geoIntersects?: {
|
|
141
|
+
$geometry: Geometry;
|
|
142
|
+
};
|
|
143
|
+
/**
|
|
144
|
+
* `$near`/`$nearSphere`: accept only GeoJSON Point (+ optional distance bounds).
|
|
145
|
+
* (Unit tests expect raw coordinate arrays to be rejected.)
|
|
146
|
+
*/
|
|
147
|
+
$near?: Point & {
|
|
148
|
+
$maxDistance?: number;
|
|
149
|
+
$minDistance?: number;
|
|
150
|
+
};
|
|
151
|
+
$nearSphere?: Point & {
|
|
152
|
+
$maxDistance?: number;
|
|
153
|
+
$minDistance?: number;
|
|
154
|
+
};
|
|
155
|
+
};
|
|
156
|
+
/** Operators excluding equality — used as the inner type for $not */
|
|
157
|
+
type FieldOperatorsBase<T> = ExistsOp & TypeOpByField<T> & NumericComparators<Defined<T>> & StringOps<Defined<T>> & ArrayOps<T extends undefined ? never : T> & BitwiseOps<Defined<T>> & GeoOps;
|
|
158
|
+
type NotInner<T> = Omit<FieldOperatorsBase<T>, "$not">;
|
|
159
|
+
export type FieldOperators<T> = EqualityOps<Defined<T>> & FieldOperatorsBase<T> & {
|
|
160
|
+
/**
|
|
161
|
+
* Field-level $not wrapping EITHER a regex (only for string fields)
|
|
162
|
+
* OR any non-equality operators. (Equality inside $not is not allowed.)
|
|
163
|
+
*
|
|
164
|
+
* This shape also matches the driver's `FilterOperators<string | RegExp | BSONRegExp>`
|
|
165
|
+
* so `StrictFilter<T>` remains assignable to `mongodb.Filter<T>`.
|
|
166
|
+
*/
|
|
167
|
+
$not?: (Defined<T> extends string ? RegExp : never) | NotInner<Defined<T>>;
|
|
168
|
+
};
|
|
169
|
+
/** Value OR operators for a given field type.
|
|
170
|
+
* For strings, allow bare RegExp because the driver accepts `{ name: /x/ }`.
|
|
171
|
+
*/
|
|
172
|
+
export type FieldCondition<T> = T extends string ? string | RegExp | FieldOperators<T> : Defined<T> | FieldOperators<T>;
|
|
173
|
+
type IdField = {
|
|
174
|
+
_id?: ObjectId | FieldOperators<ObjectId>;
|
|
175
|
+
};
|
|
176
|
+
type FieldQueryMap<T extends MongoDocument> = {
|
|
177
|
+
[K in KnownKeys<T>]?: FieldCondition<T[K]>;
|
|
178
|
+
};
|
|
179
|
+
type DotPathQueryMap<T extends MongoDocument> = {
|
|
180
|
+
[P in DotPaths<T>]?: FieldCondition<PathValue<T, P>>;
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* Use `WithId<T>` in logicals for driver interop (driver defines logicals in terms of `Filter<WithId<T>>`).
|
|
184
|
+
* That lets `StrictFilter<T>` be assignable to `Filter<T>` and also makes arrays of `StrictFilter<T>`
|
|
185
|
+
* usable where the driver expects `Filter<WithId<T>>[]` (because `StrictFilter<T>` is a subtype).
|
|
186
|
+
*/
|
|
187
|
+
type LogicalOps<T extends MongoDocument> = {
|
|
188
|
+
$and?: StrictFilter<WithId<T>>[];
|
|
189
|
+
$or?: StrictFilter<WithId<T>>[];
|
|
190
|
+
$nor?: StrictFilter<WithId<T>>[];
|
|
191
|
+
};
|
|
192
|
+
/** Top-level evaluation-ish operators accepted by find() / $match */
|
|
193
|
+
type TopEvalOps<T extends MongoDocument> = {
|
|
194
|
+
$expr?: Expr<T>;
|
|
195
|
+
$jsonSchema?: unknown;
|
|
196
|
+
/**
|
|
197
|
+
* Accept a $where function compatible with both our tests (WithId<T>) and the driver
|
|
198
|
+
* (which spells it as WithId<WithId<T>>). The intersection makes it callable as either.
|
|
199
|
+
*/
|
|
200
|
+
$where?: string | (((this: WithId<T>) => boolean) & ((this: WithId<WithId<T>>) => boolean));
|
|
201
|
+
$text?: {
|
|
202
|
+
$search: string;
|
|
203
|
+
$language?: string;
|
|
204
|
+
$caseSensitive?: boolean;
|
|
205
|
+
$diacriticSensitive?: boolean;
|
|
206
|
+
};
|
|
207
|
+
$comment?: string;
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* StrictFilter<T>
|
|
211
|
+
* - Only allows T's declared keys (plus dot paths) and legal top-level operators.
|
|
212
|
+
* - Field operators strictly depend on the field type.
|
|
213
|
+
* - `$expr` has a strongly-typed expression tree with field refs limited to known paths.
|
|
214
|
+
* - Includes support for _id field which is always present in MongoDB documents.
|
|
215
|
+
*
|
|
216
|
+
* NOTE: No string index signatures anywhere — TS excess property checks will catch typos.
|
|
217
|
+
*/
|
|
218
|
+
export type StrictFilter<TSchema extends MongoDocument> = IdField & FieldQueryMap<TSchema> & DotPathQueryMap<TSchema> & LogicalOps<TSchema> & TopEvalOps<TSchema>;
|
|
219
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,165 @@
|
|
|
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
|
+
* MongoDB bitwise operations — exactly one of 'and' | 'or' | 'xor',
|
|
23
|
+
* each requiring an integer value per the driver typings.
|
|
24
|
+
*/
|
|
25
|
+
type BitwiseOperators = {
|
|
26
|
+
and: mongodb.IntegerType;
|
|
27
|
+
} | {
|
|
28
|
+
or: mongodb.IntegerType;
|
|
29
|
+
} | {
|
|
30
|
+
xor: mongodb.IntegerType;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Create an exact object type that doesn't allow extra properties
|
|
34
|
+
* This is the key to making our types strict
|
|
35
|
+
*/
|
|
36
|
+
type Exact<T, Shape = T> = T extends Shape ? T extends infer O ? {
|
|
37
|
+
[K in keyof O]: O[K];
|
|
38
|
+
} & {
|
|
39
|
+
[K in Exclude<keyof T, keyof Shape>]?: never;
|
|
40
|
+
} : never : Shape;
|
|
41
|
+
/**
|
|
42
|
+
* Strict set/update fields
|
|
43
|
+
*/
|
|
44
|
+
type SetFields<TSchema> = Exact<{
|
|
45
|
+
[K in Paths<TSchema>]?: PathValue<TSchema, K>;
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* Strict numeric fields for math operations
|
|
49
|
+
*/
|
|
50
|
+
type NumericFields<TSchema> = Exact<{
|
|
51
|
+
[K in Paths<TSchema> as PathValue<TSchema, K> extends number | undefined ? K : never]?: number;
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Strict unset fields
|
|
55
|
+
*/
|
|
56
|
+
type UnsetFields<TSchema> = Exact<{
|
|
57
|
+
[K in Paths<TSchema>]?: '' | true | 1;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* Strict rename fields
|
|
61
|
+
*/
|
|
62
|
+
type RenameFields<TSchema> = Exact<{
|
|
63
|
+
[K in Paths<TSchema>]?: string;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* Strict date fields
|
|
67
|
+
*/
|
|
68
|
+
type DateFields<TSchema> = Exact<{
|
|
69
|
+
[K in Paths<TSchema> as PathValue<TSchema, K> extends Date | mongodb.Timestamp | undefined ? K : never]?: true | {
|
|
70
|
+
$type: 'date' | 'timestamp';
|
|
71
|
+
};
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* Strict array fields for array operations
|
|
75
|
+
*/
|
|
76
|
+
type ArrayAddFields<TSchema> = Exact<{
|
|
77
|
+
[K in Paths<TSchema> as PathValue<TSchema, K> extends any[] ? K : never]?: PathValue<TSchema, K> extends (infer U)[] ? U | {
|
|
78
|
+
$each: U[];
|
|
79
|
+
} : never;
|
|
80
|
+
}>;
|
|
81
|
+
type ArrayPopFields<TSchema> = Exact<{
|
|
82
|
+
[K in Paths<TSchema> as PathValue<TSchema, K> extends any[] ? K : never]?: 1 | -1;
|
|
83
|
+
}>;
|
|
84
|
+
type ArrayPullFields<TSchema> = Exact<{
|
|
85
|
+
[K in Paths<TSchema> as PathValue<TSchema, K> extends any[] ? K : never]?: PathValue<TSchema, K> extends (infer U)[] ? U | mongodb.FilterOperators<U> : never;
|
|
86
|
+
}>;
|
|
87
|
+
type ArrayPushFields<TSchema> = Exact<{
|
|
88
|
+
[K in Paths<TSchema> as PathValue<TSchema, K> extends any[] ? K : never]?: PathValue<TSchema, K> extends (infer U)[] ? U | mongodb.ArrayOperator<PathValue<TSchema, K>> : never;
|
|
89
|
+
}>;
|
|
90
|
+
type ArrayPullAllFields<TSchema> = Exact<{
|
|
91
|
+
[K in Paths<TSchema> as PathValue<TSchema, K> extends any[] ? K : never]?: PathValue<TSchema, K> extends (infer U)[] ? U[] : never;
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* Strict bit fields
|
|
95
|
+
*/
|
|
96
|
+
type BitFields<TSchema> = Exact<{
|
|
97
|
+
[K in Paths<TSchema> as PathValue<TSchema, K> extends number | undefined ? K : never]?: BitwiseOperators;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Strict version of MongoDB UpdateFilter that only allows updating existing fields
|
|
101
|
+
* @template TSchema - The document schema type
|
|
102
|
+
*/
|
|
103
|
+
export type StrictUpdateFilter<TSchema> = Exact<{
|
|
104
|
+
/**
|
|
105
|
+
* The $set operator replaces the value of a field with the specified value.
|
|
106
|
+
*/
|
|
107
|
+
$set?: SetFields<TSchema>;
|
|
108
|
+
/**
|
|
109
|
+
* The $setOnInsert operator assigns values to fields during an upsert only when inserting a new document.
|
|
110
|
+
*/
|
|
111
|
+
$setOnInsert?: SetFields<TSchema>;
|
|
112
|
+
/**
|
|
113
|
+
* The $unset operator deletes a particular field.
|
|
114
|
+
*/
|
|
115
|
+
$unset?: UnsetFields<TSchema>;
|
|
116
|
+
/**
|
|
117
|
+
* The $inc operator increments a field by a specified value.
|
|
118
|
+
*/
|
|
119
|
+
$inc?: NumericFields<TSchema>;
|
|
120
|
+
/**
|
|
121
|
+
* The $mul operator multiplies the value of a field by a number.
|
|
122
|
+
*/
|
|
123
|
+
$mul?: NumericFields<TSchema>;
|
|
124
|
+
/**
|
|
125
|
+
* The $min operator updates the value of the field to a specified value if the specified value is less than the current value of the field.
|
|
126
|
+
*/
|
|
127
|
+
$min?: SetFields<TSchema>;
|
|
128
|
+
/**
|
|
129
|
+
* The $max operator updates the value of the field to a specified value if the specified value is greater than the current value of the field.
|
|
130
|
+
*/
|
|
131
|
+
$max?: SetFields<TSchema>;
|
|
132
|
+
/**
|
|
133
|
+
* The $currentDate operator sets the value of a field to the current date.
|
|
134
|
+
*/
|
|
135
|
+
$currentDate?: DateFields<TSchema>;
|
|
136
|
+
/**
|
|
137
|
+
* The $rename operator updates the name of a field.
|
|
138
|
+
*/
|
|
139
|
+
$rename?: RenameFields<TSchema>;
|
|
140
|
+
/**
|
|
141
|
+
* The $addToSet operator adds a value to an array unless the value is already present.
|
|
142
|
+
*/
|
|
143
|
+
$addToSet?: ArrayAddFields<TSchema>;
|
|
144
|
+
/**
|
|
145
|
+
* The $pop operator removes the first or last element of an array.
|
|
146
|
+
*/
|
|
147
|
+
$pop?: ArrayPopFields<TSchema>;
|
|
148
|
+
/**
|
|
149
|
+
* The $pull operator removes from an array all instances of a value or values that match a specified condition.
|
|
150
|
+
*/
|
|
151
|
+
$pull?: ArrayPullFields<TSchema>;
|
|
152
|
+
/**
|
|
153
|
+
* The $push operator appends a specified value to an array.
|
|
154
|
+
*/
|
|
155
|
+
$push?: ArrayPushFields<TSchema>;
|
|
156
|
+
/**
|
|
157
|
+
* The $pullAll operator removes all instances of the specified values from an array.
|
|
158
|
+
*/
|
|
159
|
+
$pullAll?: ArrayPullAllFields<TSchema>;
|
|
160
|
+
/**
|
|
161
|
+
* The $bit operator performs a bitwise update of a field.
|
|
162
|
+
*/
|
|
163
|
+
$bit?: BitFields<TSchema>;
|
|
164
|
+
}>;
|
|
165
|
+
export {};
|