@baasix/baasix 0.1.0
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/LICENSE.MD +85 -0
- package/README.md +526 -0
- package/assets/banner.jpg +0 -0
- package/assets/banner_small.jpg +0 -0
- package/assets/logo_icon.svg +20 -0
- package/assets/logo_icon_rounded.svg +20 -0
- package/dist/LICENSE.MD +85 -0
- package/dist/README.md +526 -0
- package/dist/app/404/index.html +1 -0
- package/dist/app/404.html +1 -0
- package/dist/app/_next/static/chunks/041e1f03-56ae8a902a7f2fe6.js +24 -0
- package/dist/app/_next/static/chunks/1117-05479929a8da73e3.js +1 -0
- package/dist/app/_next/static/chunks/1299.77cc7b7b76b75cba.js +1 -0
- package/dist/app/_next/static/chunks/1303-35a96e9c9cdeab9d.js +1 -0
- package/dist/app/_next/static/chunks/1509-56ac00cdaaecdf53.js +1 -0
- package/dist/app/_next/static/chunks/1668-e3eabd0f6753c780.js +1 -0
- package/dist/app/_next/static/chunks/1783-d9fb550fd324300c.js +1 -0
- package/dist/app/_next/static/chunks/2117-29b5fa47421595ad.js +2 -0
- package/dist/app/_next/static/chunks/2344.35b46d2179a765b5.js +1 -0
- package/dist/app/_next/static/chunks/257.990da16794a31292.js +1 -0
- package/dist/app/_next/static/chunks/2676-73b0ee7c80073a84.js +1 -0
- package/dist/app/_next/static/chunks/3563-b8842744384391fe.js +1 -0
- package/dist/app/_next/static/chunks/363642f4-933b579ed3c85f60.js +1 -0
- package/dist/app/_next/static/chunks/3817-e20c8f0a0810fc95.js +1 -0
- package/dist/app/_next/static/chunks/3834.84944e390d902509.js +2 -0
- package/dist/app/_next/static/chunks/4043-3a30c8a75896f241.js +1 -0
- package/dist/app/_next/static/chunks/4225-14090c7c0cd9dec6.js +1 -0
- package/dist/app/_next/static/chunks/4438-c9a12ca15b6e9160.js +1 -0
- package/dist/app/_next/static/chunks/4458-679fd0c6884f456a.js +1 -0
- package/dist/app/_next/static/chunks/4475-8bdfbd536fba8c48.js +1 -0
- package/dist/app/_next/static/chunks/4883-8a924721bb21b3b0.js +1 -0
- package/dist/app/_next/static/chunks/489-683ab07188f9df2b.js +1 -0
- package/dist/app/_next/static/chunks/4952-1b97320cf61f3f21.js +1 -0
- package/dist/app/_next/static/chunks/5094-8d53e403235d4ca6.js +1 -0
- package/dist/app/_next/static/chunks/5101-3a146e0625747ad1.js +1 -0
- package/dist/app/_next/static/chunks/54a60aa6-d9747982e0a81f58.js +79 -0
- package/dist/app/_next/static/chunks/5650-f096291df402bfc2.js +1 -0
- package/dist/app/_next/static/chunks/600-539045311240f579.js +1 -0
- package/dist/app/_next/static/chunks/6170-803b82e19d3ade6d.js +89 -0
- package/dist/app/_next/static/chunks/6241-30d7169d1010e5a4.js +1 -0
- package/dist/app/_next/static/chunks/6530-a91e10cffa4200c4.js +1 -0
- package/dist/app/_next/static/chunks/6547-4bbbdb5c399aef1e.js +1 -0
- package/dist/app/_next/static/chunks/6712-781937c53a2c49da.js +1 -0
- package/dist/app/_next/static/chunks/6fcbdc68-90be1a5480b8d353.js +1 -0
- package/dist/app/_next/static/chunks/70e0d97a-aeaf0cdc26ba1a58.js +1 -0
- package/dist/app/_next/static/chunks/7214-5154a89d08d24dde.js +1 -0
- package/dist/app/_next/static/chunks/7324-b53229c59a640880.js +10 -0
- package/dist/app/_next/static/chunks/7636-66424f0b51d350e9.js +1 -0
- package/dist/app/_next/static/chunks/7874-39a3f2541165a675.js +1 -0
- package/dist/app/_next/static/chunks/7982-9da12b83f11e3f5f.js +1 -0
- package/dist/app/_next/static/chunks/8213a2eb-da25a3b3c5521b2b.js +1 -0
- package/dist/app/_next/static/chunks/8473-6598318371eca31b.js +1 -0
- package/dist/app/_next/static/chunks/8640fa6b-72e43370f68e5587.js +1 -0
- package/dist/app/_next/static/chunks/9090-3ef676f29c95f1c7.js +1 -0
- package/dist/app/_next/static/chunks/9124-a02f9e209e6e3cce.js +1 -0
- package/dist/app/_next/static/chunks/926-156f32067d111d6b.js +1 -0
- package/dist/app/_next/static/chunks/9487-b17481605e513b83.js +1 -0
- package/dist/app/_next/static/chunks/9599-a7e572bb88c3392b.js +1 -0
- package/dist/app/_next/static/chunks/9881-419697138376e755.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/all-activity/page-8917930b4d663405.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/email-log/page-b27a6ee32782d7df.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/notifications/page-b7eda523ede2702c.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/page-1cfa62d1caedaed0.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/sessions/page-3e21e20db90aeff7.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/workflow-executions/page-27bcc26b747fb29b.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/activity-log/workflow-logs/page-9f9e9e952aef436e.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/change-password/page-8d61aa499eabb127.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/dashboard/page-1ceeac9e72997a8a.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/data-browser/page-8cda2b57759dd670.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/file-manager/page-8c6f1b1da66ad7e4.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/layout-f70d225b2759c998.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/migrations/page-aacec8f7cfb40ab2.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/permissions/page-828110cfcde429c6.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/project/page-420e794bb76bd204.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/roles/page-9001d02b28f70708.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/schema/page-899574f35091dd58.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/tasks/page-ad7ab3e27c83f44f.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/templates/edit/page-bd83414cb8c4cb04.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/templates/page-3181447f8772b1d3.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/settings/tenants/page-ef9bfbacef5a1d73.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/invites/page-480306b7b2bbac7e.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/list/page-74da51254c2606b3.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/page-e99c6f0b915001b2.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/preferences/page-1a935630ce8f2b12.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/users/user-roles/page-901dfb8ea1f39ca8.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/workflows/detail/page-9a6b839aea688ca4.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/workflows/edit/page-11774efbc2fecae2.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/workflows/execution/page-8ec1aea90412c03d.js +1 -0
- package/dist/app/_next/static/chunks/app/(authenticated)/workflows/page-88bc5b36ccb0a1f7.js +1 -0
- package/dist/app/_next/static/chunks/app/(public)/forgot-password/page-ed263fd46ef81c20.js +1 -0
- package/dist/app/_next/static/chunks/app/(public)/layout-f538977545844af8.js +1 -0
- package/dist/app/_next/static/chunks/app/(public)/login/page-c0a10b137f346096.js +1 -0
- package/dist/app/_next/static/chunks/app/(public)/register/page-4cb7644893efd9b3.js +1 -0
- package/dist/app/_next/static/chunks/app/_not-found/page-653f8815b78256cc.js +1 -0
- package/dist/app/_next/static/chunks/app/layout-591ca7a3e16528a1.js +1 -0
- package/dist/app/_next/static/chunks/app/page-dd19d124b5fa2577.js +1 -0
- package/dist/app/_next/static/chunks/c37d3baf.c2ff165f5b02c692.js +1 -0
- package/dist/app/_next/static/chunks/d0deef33.0379166a4ec23470.js +1 -0
- package/dist/app/_next/static/chunks/fd9d1056-54169f07cd680d6c.js +1 -0
- package/dist/app/_next/static/chunks/framework-8e0e0f4a6b83a956.js +1 -0
- package/dist/app/_next/static/chunks/main-324e91f5a430cddf.js +1 -0
- package/dist/app/_next/static/chunks/main-app-55bcae20c77aaf0e.js +1 -0
- package/dist/app/_next/static/chunks/pages/_app-3c9ca398d360b709.js +1 -0
- package/dist/app/_next/static/chunks/pages/_error-cf5ca766ac8f493f.js +1 -0
- package/dist/app/_next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
- package/dist/app/_next/static/chunks/webpack-2c306566f7ee1b63.js +1 -0
- package/dist/app/_next/static/css/6c4002bae4e236b2.css +3 -0
- package/dist/app/_next/static/css/a275cc2b185e04f8.css +1 -0
- package/dist/app/_next/static/eCWhKA8XHqmB1zgFcEtN2/_buildManifest.js +1 -0
- package/dist/app/_next/static/eCWhKA8XHqmB1zgFcEtN2/_ssgManifest.js +1 -0
- package/dist/app/activity-log/all-activity/index.html +1 -0
- package/dist/app/activity-log/all-activity/index.txt +14 -0
- package/dist/app/activity-log/email-log/index.html +1 -0
- package/dist/app/activity-log/email-log/index.txt +14 -0
- package/dist/app/activity-log/index.html +1 -0
- package/dist/app/activity-log/index.txt +14 -0
- package/dist/app/activity-log/notifications/index.html +1 -0
- package/dist/app/activity-log/notifications/index.txt +14 -0
- package/dist/app/activity-log/sessions/index.html +1 -0
- package/dist/app/activity-log/sessions/index.txt +14 -0
- package/dist/app/activity-log/workflow-executions/index.html +1 -0
- package/dist/app/activity-log/workflow-executions/index.txt +14 -0
- package/dist/app/activity-log/workflow-logs/index.html +1 -0
- package/dist/app/activity-log/workflow-logs/index.txt +14 -0
- package/dist/app/change-password/index.html +1 -0
- package/dist/app/change-password/index.txt +14 -0
- package/dist/app/dashboard/index.html +1 -0
- package/dist/app/dashboard/index.txt +14 -0
- package/dist/app/data-browser/index.html +1 -0
- package/dist/app/data-browser/index.txt +14 -0
- package/dist/app/file-manager/index.html +1 -0
- package/dist/app/file-manager/index.txt +14 -0
- package/dist/app/forgot-password/index.html +1 -0
- package/dist/app/forgot-password/index.txt +13 -0
- package/dist/app/index.html +1 -0
- package/dist/app/index.txt +9 -0
- package/dist/app/login/index.html +1 -0
- package/dist/app/login/index.txt +13 -0
- package/dist/app/logo-dark.png +0 -0
- package/dist/app/logo-icon.svg +81 -0
- package/dist/app/logo-light.png +0 -0
- package/dist/app/register/index.html +1 -0
- package/dist/app/register/index.txt +13 -0
- package/dist/app/settings/migrations/index.html +1 -0
- package/dist/app/settings/migrations/index.txt +14 -0
- package/dist/app/settings/permissions/index.html +1 -0
- package/dist/app/settings/permissions/index.txt +14 -0
- package/dist/app/settings/project/index.html +1 -0
- package/dist/app/settings/project/index.txt +14 -0
- package/dist/app/settings/roles/index.html +1 -0
- package/dist/app/settings/roles/index.txt +14 -0
- package/dist/app/settings/schema/index.html +1 -0
- package/dist/app/settings/schema/index.txt +14 -0
- package/dist/app/settings/tasks/index.html +1 -0
- package/dist/app/settings/tasks/index.txt +14 -0
- package/dist/app/settings/templates/edit/index.html +1 -0
- package/dist/app/settings/templates/edit/index.txt +14 -0
- package/dist/app/settings/templates/index.html +1 -0
- package/dist/app/settings/templates/index.txt +14 -0
- package/dist/app/settings/tenants/index.html +1 -0
- package/dist/app/settings/tenants/index.txt +14 -0
- package/dist/app/users/index.html +1 -0
- package/dist/app/users/index.txt +14 -0
- package/dist/app/users/invites/index.html +1 -0
- package/dist/app/users/invites/index.txt +14 -0
- package/dist/app/users/list/index.html +1 -0
- package/dist/app/users/list/index.txt +14 -0
- package/dist/app/users/preferences/index.html +1 -0
- package/dist/app/users/preferences/index.txt +14 -0
- package/dist/app/users/user-roles/index.html +1 -0
- package/dist/app/users/user-roles/index.txt +14 -0
- package/dist/app/workflows/detail/index.html +1 -0
- package/dist/app/workflows/detail/index.txt +14 -0
- package/dist/app/workflows/edit/index.html +1 -0
- package/dist/app/workflows/edit/index.txt +14 -0
- package/dist/app/workflows/execution/index.html +1 -0
- package/dist/app/workflows/execution/index.txt +14 -0
- package/dist/app/workflows/index.html +1 -0
- package/dist/app/workflows/index.txt +14 -0
- package/dist/app.d.ts +36 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +546 -0
- package/dist/app.js.map +1 -0
- package/dist/auth/adapters/baasix-adapter.d.ts +12 -0
- package/dist/auth/adapters/baasix-adapter.d.ts.map +1 -0
- package/dist/auth/adapters/baasix-adapter.js +318 -0
- package/dist/auth/adapters/baasix-adapter.js.map +1 -0
- package/dist/auth/adapters/index.d.ts +6 -0
- package/dist/auth/adapters/index.d.ts.map +1 -0
- package/dist/auth/adapters/index.js +5 -0
- package/dist/auth/adapters/index.js.map +1 -0
- package/dist/auth/core.d.ts +73 -0
- package/dist/auth/core.d.ts.map +1 -0
- package/dist/auth/core.js +528 -0
- package/dist/auth/core.js.map +1 -0
- package/dist/auth/index.d.ts +56 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +58 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth2/index.d.ts +5 -0
- package/dist/auth/oauth2/index.d.ts.map +1 -0
- package/dist/auth/oauth2/index.js +5 -0
- package/dist/auth/oauth2/index.js.map +1 -0
- package/dist/auth/oauth2/utils.d.ts +90 -0
- package/dist/auth/oauth2/utils.d.ts.map +1 -0
- package/dist/auth/oauth2/utils.js +167 -0
- package/dist/auth/oauth2/utils.js.map +1 -0
- package/dist/auth/providers/apple.d.ts +28 -0
- package/dist/auth/providers/apple.d.ts.map +1 -0
- package/dist/auth/providers/apple.js +192 -0
- package/dist/auth/providers/apple.js.map +1 -0
- package/dist/auth/providers/credential.d.ts +87 -0
- package/dist/auth/providers/credential.d.ts.map +1 -0
- package/dist/auth/providers/credential.js +162 -0
- package/dist/auth/providers/credential.js.map +1 -0
- package/dist/auth/providers/facebook.d.ts +26 -0
- package/dist/auth/providers/facebook.d.ts.map +1 -0
- package/dist/auth/providers/facebook.js +112 -0
- package/dist/auth/providers/facebook.js.map +1 -0
- package/dist/auth/providers/github.d.ts +29 -0
- package/dist/auth/providers/github.d.ts.map +1 -0
- package/dist/auth/providers/github.js +144 -0
- package/dist/auth/providers/github.js.map +1 -0
- package/dist/auth/providers/google.d.ts +32 -0
- package/dist/auth/providers/google.d.ts.map +1 -0
- package/dist/auth/providers/google.js +145 -0
- package/dist/auth/providers/google.js.map +1 -0
- package/dist/auth/providers/index.d.ts +22 -0
- package/dist/auth/providers/index.d.ts.map +1 -0
- package/dist/auth/providers/index.js +17 -0
- package/dist/auth/providers/index.js.map +1 -0
- package/dist/auth/routes.d.ts +63 -0
- package/dist/auth/routes.d.ts.map +1 -0
- package/dist/auth/routes.js +827 -0
- package/dist/auth/routes.js.map +1 -0
- package/dist/auth/services/index.d.ts +10 -0
- package/dist/auth/services/index.d.ts.map +1 -0
- package/dist/auth/services/index.js +7 -0
- package/dist/auth/services/index.js.map +1 -0
- package/dist/auth/services/session.d.ts +81 -0
- package/dist/auth/services/session.d.ts.map +1 -0
- package/dist/auth/services/session.js +186 -0
- package/dist/auth/services/session.js.map +1 -0
- package/dist/auth/services/token.d.ts +41 -0
- package/dist/auth/services/token.d.ts.map +1 -0
- package/dist/auth/services/token.js +44 -0
- package/dist/auth/services/token.js.map +1 -0
- package/dist/auth/services/verification.d.ts +77 -0
- package/dist/auth/services/verification.d.ts.map +1 -0
- package/dist/auth/services/verification.js +143 -0
- package/dist/auth/services/verification.js.map +1 -0
- package/dist/auth/types.d.ts +318 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +6 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/customTypes/arrays.d.ts +200 -0
- package/dist/customTypes/arrays.d.ts.map +1 -0
- package/dist/customTypes/arrays.js +309 -0
- package/dist/customTypes/arrays.js.map +1 -0
- package/dist/customTypes/index.d.ts +8 -0
- package/dist/customTypes/index.d.ts.map +1 -0
- package/dist/customTypes/index.js +11 -0
- package/dist/customTypes/index.js.map +1 -0
- package/dist/customTypes/postgis.d.ts +146 -0
- package/dist/customTypes/postgis.d.ts.map +1 -0
- package/dist/customTypes/postgis.js +315 -0
- package/dist/customTypes/postgis.js.map +1 -0
- package/dist/customTypes/ranges.d.ts +128 -0
- package/dist/customTypes/ranges.d.ts.map +1 -0
- package/dist/customTypes/ranges.js +257 -0
- package/dist/customTypes/ranges.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/0.1.0-alpha.0_initial_setup.d.ts +29 -0
- package/dist/migrations/0.1.0-alpha.0_initial_setup.d.ts.map +1 -0
- package/dist/migrations/0.1.0-alpha.0_initial_setup.js +72 -0
- package/dist/migrations/0.1.0-alpha.0_initial_setup.js.map +1 -0
- package/dist/migrations/_example_migration.d.ts +31 -0
- package/dist/migrations/_example_migration.d.ts.map +1 -0
- package/dist/migrations/_example_migration.js +75 -0
- package/dist/migrations/_example_migration.js.map +1 -0
- package/dist/plugins/definePlugin.d.ts +49 -0
- package/dist/plugins/definePlugin.d.ts.map +1 -0
- package/dist/plugins/definePlugin.js +131 -0
- package/dist/plugins/definePlugin.js.map +1 -0
- package/dist/plugins/softDelete.d.ts +179 -0
- package/dist/plugins/softDelete.d.ts.map +1 -0
- package/dist/plugins/softDelete.js +235 -0
- package/dist/plugins/softDelete.js.map +1 -0
- package/dist/routes/auth.route.d.ts +14 -0
- package/dist/routes/auth.route.d.ts.map +1 -0
- package/dist/routes/auth.route.js +421 -0
- package/dist/routes/auth.route.js.map +1 -0
- package/dist/routes/file.route.d.ts +7 -0
- package/dist/routes/file.route.d.ts.map +1 -0
- package/dist/routes/file.route.js +274 -0
- package/dist/routes/file.route.js.map +1 -0
- package/dist/routes/items.route.d.ts +7 -0
- package/dist/routes/items.route.d.ts.map +1 -0
- package/dist/routes/items.route.js +369 -0
- package/dist/routes/items.route.js.map +1 -0
- package/dist/routes/migration.route.d.ts +7 -0
- package/dist/routes/migration.route.d.ts.map +1 -0
- package/dist/routes/migration.route.js +225 -0
- package/dist/routes/migration.route.js.map +1 -0
- package/dist/routes/notification.route.d.ts +7 -0
- package/dist/routes/notification.route.d.ts.map +1 -0
- package/dist/routes/notification.route.js +124 -0
- package/dist/routes/notification.route.js.map +1 -0
- package/dist/routes/openapi.route.d.ts +7 -0
- package/dist/routes/openapi.route.d.ts.map +1 -0
- package/dist/routes/openapi.route.js +2169 -0
- package/dist/routes/openapi.route.js.map +1 -0
- package/dist/routes/permission.route.d.ts +7 -0
- package/dist/routes/permission.route.d.ts.map +1 -0
- package/dist/routes/permission.route.js +158 -0
- package/dist/routes/permission.route.js.map +1 -0
- package/dist/routes/realtime.route.d.ts +21 -0
- package/dist/routes/realtime.route.d.ts.map +1 -0
- package/dist/routes/realtime.route.js +243 -0
- package/dist/routes/realtime.route.js.map +1 -0
- package/dist/routes/reports.route.d.ts +7 -0
- package/dist/routes/reports.route.d.ts.map +1 -0
- package/dist/routes/reports.route.js +95 -0
- package/dist/routes/reports.route.js.map +1 -0
- package/dist/routes/schema.route.d.ts +7 -0
- package/dist/routes/schema.route.d.ts.map +1 -0
- package/dist/routes/schema.route.js +1780 -0
- package/dist/routes/schema.route.js.map +1 -0
- package/dist/routes/settings.route.d.ts +7 -0
- package/dist/routes/settings.route.d.ts.map +1 -0
- package/dist/routes/settings.route.js +154 -0
- package/dist/routes/settings.route.js.map +1 -0
- package/dist/routes/templates.route.d.ts +7 -0
- package/dist/routes/templates.route.d.ts.map +1 -0
- package/dist/routes/templates.route.js +91 -0
- package/dist/routes/templates.route.js.map +1 -0
- package/dist/routes/utils.route.d.ts +7 -0
- package/dist/routes/utils.route.d.ts.map +1 -0
- package/dist/routes/utils.route.js +33 -0
- package/dist/routes/utils.route.js.map +1 -0
- package/dist/routes/workflow.route.d.ts +7 -0
- package/dist/routes/workflow.route.d.ts.map +1 -0
- package/dist/routes/workflow.route.js +787 -0
- package/dist/routes/workflow.route.js.map +1 -0
- package/dist/services/AssetsService.d.ts +39 -0
- package/dist/services/AssetsService.d.ts.map +1 -0
- package/dist/services/AssetsService.js +255 -0
- package/dist/services/AssetsService.js.map +1 -0
- package/dist/services/CacheService.d.ts +169 -0
- package/dist/services/CacheService.d.ts.map +1 -0
- package/dist/services/CacheService.js +722 -0
- package/dist/services/CacheService.js.map +1 -0
- package/dist/services/FilesService.d.ts +30 -0
- package/dist/services/FilesService.d.ts.map +1 -0
- package/dist/services/FilesService.js +268 -0
- package/dist/services/FilesService.js.map +1 -0
- package/dist/services/HooksManager.d.ts +38 -0
- package/dist/services/HooksManager.d.ts.map +1 -0
- package/dist/services/HooksManager.js +165 -0
- package/dist/services/HooksManager.js.map +1 -0
- package/dist/services/ItemsService.d.ts +273 -0
- package/dist/services/ItemsService.d.ts.map +1 -0
- package/dist/services/ItemsService.js +2458 -0
- package/dist/services/ItemsService.js.map +1 -0
- package/dist/services/MailService.d.ts +76 -0
- package/dist/services/MailService.d.ts.map +1 -0
- package/dist/services/MailService.js +585 -0
- package/dist/services/MailService.js.map +1 -0
- package/dist/services/MigrationService.d.ts +243 -0
- package/dist/services/MigrationService.d.ts.map +1 -0
- package/dist/services/MigrationService.js +914 -0
- package/dist/services/MigrationService.js.map +1 -0
- package/dist/services/NotificationService.d.ts +35 -0
- package/dist/services/NotificationService.d.ts.map +1 -0
- package/dist/services/NotificationService.js +159 -0
- package/dist/services/NotificationService.js.map +1 -0
- package/dist/services/PermissionService.d.ts +128 -0
- package/dist/services/PermissionService.d.ts.map +1 -0
- package/dist/services/PermissionService.js +373 -0
- package/dist/services/PermissionService.js.map +1 -0
- package/dist/services/PluginManager.d.ts +138 -0
- package/dist/services/PluginManager.d.ts.map +1 -0
- package/dist/services/PluginManager.js +463 -0
- package/dist/services/PluginManager.js.map +1 -0
- package/dist/services/RealtimeService.d.ts +209 -0
- package/dist/services/RealtimeService.d.ts.map +1 -0
- package/dist/services/RealtimeService.js +978 -0
- package/dist/services/RealtimeService.js.map +1 -0
- package/dist/services/ReportService.d.ts +13 -0
- package/dist/services/ReportService.d.ts.map +1 -0
- package/dist/services/ReportService.js +91 -0
- package/dist/services/ReportService.js.map +1 -0
- package/dist/services/SettingsService.d.ts +60 -0
- package/dist/services/SettingsService.d.ts.map +1 -0
- package/dist/services/SettingsService.js +474 -0
- package/dist/services/SettingsService.js.map +1 -0
- package/dist/services/SocketService.d.ts +129 -0
- package/dist/services/SocketService.d.ts.map +1 -0
- package/dist/services/SocketService.js +600 -0
- package/dist/services/SocketService.js.map +1 -0
- package/dist/services/StatsService.d.ts +10 -0
- package/dist/services/StatsService.d.ts.map +1 -0
- package/dist/services/StatsService.js +40 -0
- package/dist/services/StatsService.js.map +1 -0
- package/dist/services/StorageService.d.ts +20 -0
- package/dist/services/StorageService.d.ts.map +1 -0
- package/dist/services/StorageService.js +164 -0
- package/dist/services/StorageService.js.map +1 -0
- package/dist/services/TasksService.d.ts +74 -0
- package/dist/services/TasksService.d.ts.map +1 -0
- package/dist/services/TasksService.js +404 -0
- package/dist/services/TasksService.js.map +1 -0
- package/dist/services/WorkflowService.d.ts +305 -0
- package/dist/services/WorkflowService.d.ts.map +1 -0
- package/dist/services/WorkflowService.js +1811 -0
- package/dist/services/WorkflowService.js.map +1 -0
- package/dist/templates/logo/logo.png +0 -0
- package/dist/templates/mails/default.liquid +23 -0
- package/dist/types/aggregation.d.ts +40 -0
- package/dist/types/aggregation.d.ts.map +1 -0
- package/dist/types/aggregation.js +6 -0
- package/dist/types/aggregation.js.map +1 -0
- package/dist/types/assets.d.ts +32 -0
- package/dist/types/assets.d.ts.map +1 -0
- package/dist/types/assets.js +6 -0
- package/dist/types/assets.js.map +1 -0
- package/dist/types/auth.d.ts +50 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +6 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/cache.d.ts +47 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/cache.js +6 -0
- package/dist/types/cache.js.map +1 -0
- package/dist/types/database.d.ts +16 -0
- package/dist/types/database.d.ts.map +1 -0
- package/dist/types/database.js +6 -0
- package/dist/types/database.js.map +1 -0
- package/dist/types/fields.d.ts +71 -0
- package/dist/types/fields.d.ts.map +1 -0
- package/dist/types/fields.js +6 -0
- package/dist/types/fields.js.map +1 -0
- package/dist/types/files.d.ts +33 -0
- package/dist/types/files.d.ts.map +1 -0
- package/dist/types/files.js +6 -0
- package/dist/types/files.js.map +1 -0
- package/dist/types/hooks.d.ts +29 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/hooks.js +6 -0
- package/dist/types/hooks.js.map +1 -0
- package/dist/types/import-export.d.ts +62 -0
- package/dist/types/import-export.d.ts.map +1 -0
- package/dist/types/import-export.js +6 -0
- package/dist/types/import-export.js.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +58 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mail.d.ts +34 -0
- package/dist/types/mail.d.ts.map +1 -0
- package/dist/types/mail.js +6 -0
- package/dist/types/mail.js.map +1 -0
- package/dist/types/notifications.d.ts +16 -0
- package/dist/types/notifications.d.ts.map +1 -0
- package/dist/types/notifications.js +6 -0
- package/dist/types/notifications.js.map +1 -0
- package/dist/types/plugin.d.ts +351 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +8 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/query.d.ts +71 -0
- package/dist/types/query.d.ts.map +1 -0
- package/dist/types/query.js +6 -0
- package/dist/types/query.js.map +1 -0
- package/dist/types/relations.d.ts +111 -0
- package/dist/types/relations.d.ts.map +1 -0
- package/dist/types/relations.js +6 -0
- package/dist/types/relations.js.map +1 -0
- package/dist/types/reports.d.ts +17 -0
- package/dist/types/reports.d.ts.map +1 -0
- package/dist/types/reports.js +6 -0
- package/dist/types/reports.js.map +1 -0
- package/dist/types/schema.d.ts +26 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +6 -0
- package/dist/types/schema.js.map +1 -0
- package/dist/types/seed.d.ts +27 -0
- package/dist/types/seed.d.ts.map +1 -0
- package/dist/types/seed.js +6 -0
- package/dist/types/seed.js.map +1 -0
- package/dist/types/services.d.ts +68 -0
- package/dist/types/services.d.ts.map +1 -0
- package/dist/types/services.js +6 -0
- package/dist/types/services.js.map +1 -0
- package/dist/types/settings.d.ts +36 -0
- package/dist/types/settings.d.ts.map +1 -0
- package/dist/types/settings.js +6 -0
- package/dist/types/settings.js.map +1 -0
- package/dist/types/sockets.d.ts +26 -0
- package/dist/types/sockets.d.ts.map +1 -0
- package/dist/types/sockets.js +6 -0
- package/dist/types/sockets.js.map +1 -0
- package/dist/types/sort.d.ts +25 -0
- package/dist/types/sort.d.ts.map +1 -0
- package/dist/types/sort.js +6 -0
- package/dist/types/sort.js.map +1 -0
- package/dist/types/spatial.d.ts +19 -0
- package/dist/types/spatial.d.ts.map +1 -0
- package/dist/types/spatial.js +6 -0
- package/dist/types/spatial.js.map +1 -0
- package/dist/types/stats.d.ts +21 -0
- package/dist/types/stats.d.ts.map +1 -0
- package/dist/types/stats.js +6 -0
- package/dist/types/stats.js.map +1 -0
- package/dist/types/storage.d.ts +19 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +6 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/types/tasks.d.ts +14 -0
- package/dist/types/tasks.d.ts.map +1 -0
- package/dist/types/tasks.js +6 -0
- package/dist/types/tasks.js.map +1 -0
- package/dist/types/utils.d.ts +54 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +6 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/types/workflow.d.ts +17 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +6 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/utils/aggregationUtils.d.ts +192 -0
- package/dist/utils/aggregationUtils.d.ts.map +1 -0
- package/dist/utils/aggregationUtils.js +450 -0
- package/dist/utils/aggregationUtils.js.map +1 -0
- package/dist/utils/auth.d.ts +93 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +557 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/cache.d.ts +64 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +464 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/common.d.ts +53 -0
- package/dist/utils/common.d.ts.map +1 -0
- package/dist/utils/common.js +162 -0
- package/dist/utils/common.js.map +1 -0
- package/dist/utils/db.d.ts +101 -0
- package/dist/utils/db.d.ts.map +1 -0
- package/dist/utils/db.js +413 -0
- package/dist/utils/db.js.map +1 -0
- package/dist/utils/dirname.d.ts +30 -0
- package/dist/utils/dirname.d.ts.map +1 -0
- package/dist/utils/dirname.js +95 -0
- package/dist/utils/dirname.js.map +1 -0
- package/dist/utils/dynamicVariableResolver.d.ts +17 -0
- package/dist/utils/dynamicVariableResolver.d.ts.map +1 -0
- package/dist/utils/dynamicVariableResolver.js +262 -0
- package/dist/utils/dynamicVariableResolver.js.map +1 -0
- package/dist/utils/env.d.ts +38 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +80 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +14 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +79 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/fieldExpansion.d.ts +30 -0
- package/dist/utils/fieldExpansion.d.ts.map +1 -0
- package/dist/utils/fieldExpansion.js +145 -0
- package/dist/utils/fieldExpansion.js.map +1 -0
- package/dist/utils/fieldUtils.d.ts +179 -0
- package/dist/utils/fieldUtils.d.ts.map +1 -0
- package/dist/utils/fieldUtils.js +424 -0
- package/dist/utils/fieldUtils.js.map +1 -0
- package/dist/utils/filterOperators.d.ts +472 -0
- package/dist/utils/filterOperators.d.ts.map +1 -0
- package/dist/utils/filterOperators.js +1229 -0
- package/dist/utils/filterOperators.js.map +1 -0
- package/dist/utils/importUtils.d.ts +127 -0
- package/dist/utils/importUtils.d.ts.map +1 -0
- package/dist/utils/importUtils.js +437 -0
- package/dist/utils/importUtils.js.map +1 -0
- package/dist/utils/index.d.ts +75 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +101 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +41 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +217 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/orderUtils.d.ts +117 -0
- package/dist/utils/orderUtils.d.ts.map +1 -0
- package/dist/utils/orderUtils.js +249 -0
- package/dist/utils/orderUtils.js.map +1 -0
- package/dist/utils/queryBuilder.d.ts +118 -0
- package/dist/utils/queryBuilder.d.ts.map +1 -0
- package/dist/utils/queryBuilder.js +489 -0
- package/dist/utils/queryBuilder.js.map +1 -0
- package/dist/utils/relationLoader.d.ts +65 -0
- package/dist/utils/relationLoader.d.ts.map +1 -0
- package/dist/utils/relationLoader.js +1081 -0
- package/dist/utils/relationLoader.js.map +1 -0
- package/dist/utils/relationPathResolver.d.ts +30 -0
- package/dist/utils/relationPathResolver.d.ts.map +1 -0
- package/dist/utils/relationPathResolver.js +173 -0
- package/dist/utils/relationPathResolver.js.map +1 -0
- package/dist/utils/relationUtils.d.ts +139 -0
- package/dist/utils/relationUtils.d.ts.map +1 -0
- package/dist/utils/relationUtils.js +711 -0
- package/dist/utils/relationUtils.js.map +1 -0
- package/dist/utils/router.d.ts +6 -0
- package/dist/utils/router.d.ts.map +1 -0
- package/dist/utils/router.js +95 -0
- package/dist/utils/router.js.map +1 -0
- package/dist/utils/schema.d.ts +88 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +24 -0
- package/dist/utils/schema.js.map +1 -0
- package/dist/utils/schemaManager.d.ts +238 -0
- package/dist/utils/schemaManager.d.ts.map +1 -0
- package/dist/utils/schemaManager.js +1992 -0
- package/dist/utils/schemaManager.js.map +1 -0
- package/dist/utils/schemaValidator.d.ts +83 -0
- package/dist/utils/schemaValidator.d.ts.map +1 -0
- package/dist/utils/schemaValidator.js +491 -0
- package/dist/utils/schemaValidator.js.map +1 -0
- package/dist/utils/seed.d.ts +45 -0
- package/dist/utils/seed.d.ts.map +1 -0
- package/dist/utils/seed.js +248 -0
- package/dist/utils/seed.js.map +1 -0
- package/dist/utils/sessionCleanup.d.ts +10 -0
- package/dist/utils/sessionCleanup.d.ts.map +1 -0
- package/dist/utils/sessionCleanup.js +49 -0
- package/dist/utils/sessionCleanup.js.map +1 -0
- package/dist/utils/sortUtils.d.ts +117 -0
- package/dist/utils/sortUtils.d.ts.map +1 -0
- package/dist/utils/sortUtils.js +232 -0
- package/dist/utils/sortUtils.js.map +1 -0
- package/dist/utils/spatialUtils.d.ts +244 -0
- package/dist/utils/spatialUtils.d.ts.map +1 -0
- package/dist/utils/spatialUtils.js +359 -0
- package/dist/utils/spatialUtils.js.map +1 -0
- package/dist/utils/systemschema.d.ts +11040 -0
- package/dist/utils/systemschema.d.ts.map +1 -0
- package/dist/utils/systemschema.js +1777 -0
- package/dist/utils/systemschema.js.map +1 -0
- package/dist/utils/tenantUtils.d.ts +34 -0
- package/dist/utils/tenantUtils.d.ts.map +1 -0
- package/dist/utils/tenantUtils.js +124 -0
- package/dist/utils/tenantUtils.js.map +1 -0
- package/dist/utils/typeMapper.d.ts +25 -0
- package/dist/utils/typeMapper.d.ts.map +1 -0
- package/dist/utils/typeMapper.js +282 -0
- package/dist/utils/typeMapper.js.map +1 -0
- package/dist/utils/valueValidator.d.ts +60 -0
- package/dist/utils/valueValidator.d.ts.map +1 -0
- package/dist/utils/valueValidator.js +303 -0
- package/dist/utils/valueValidator.js.map +1 -0
- package/dist/utils/workflow.d.ts +87 -0
- package/dist/utils/workflow.d.ts.map +1 -0
- package/dist/utils/workflow.js +205 -0
- package/dist/utils/workflow.js.map +1 -0
- package/package.json +115 -0
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query Builder Module for Drizzle ORM
|
|
3
|
+
*
|
|
4
|
+
* This module provides query building utilities that convert Sequelize-style
|
|
5
|
+
* filter/where objects into Drizzle ORM where conditions.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Convert filter objects to Drizzle where conditions
|
|
9
|
+
* - Support AND/OR logical operators
|
|
10
|
+
* - Handle nested conditions and relations
|
|
11
|
+
* - Column qualification for joins
|
|
12
|
+
* - Type casting support
|
|
13
|
+
* - Pagination helpers
|
|
14
|
+
*
|
|
15
|
+
* RELATION PATH FILTERING:
|
|
16
|
+
* - Relation path filters (e.g., "userRoles.role.name") ARE NOW SUPPORTED
|
|
17
|
+
* 1. Parses relation paths into segments
|
|
18
|
+
* 2. Recursively resolves each segment by looking up relation metadata
|
|
19
|
+
* 3. Builds LEFT JOIN clauses dynamically
|
|
20
|
+
* 4. Returns the final column reference for the WHERE clause
|
|
21
|
+
*
|
|
22
|
+
* Example usage:
|
|
23
|
+
* conditions: {
|
|
24
|
+
* "userRoles.role.name": { in: ["admin", "user"] },
|
|
25
|
+
* "author.company.name": { eq: "ACME" }
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* The query builder will automatically generate the necessary JOINs:
|
|
29
|
+
* LEFT JOIN userRoles_... ON ...
|
|
30
|
+
* LEFT JOIN roles_... ON ...
|
|
31
|
+
* LEFT JOIN companies_... ON ...
|
|
32
|
+
*
|
|
33
|
+
* Joins are accumulated in ctx.joins array and must be applied by the caller.
|
|
34
|
+
*
|
|
35
|
+
* NOTES:
|
|
36
|
+
* - Currently supports BelongsTo, HasMany, and HasOne relations
|
|
37
|
+
* - BelongsToMany (many-to-many) uses simplified join (needs junction table support)
|
|
38
|
+
* - Coordination with the two-query approach for HasMany sorting is handled by the caller
|
|
39
|
+
*/
|
|
40
|
+
import { and, or, sql } from 'drizzle-orm';
|
|
41
|
+
import { applyOperator, OPERATOR_MAP } from './filterOperators.js';
|
|
42
|
+
import { resolveRelationPath, isRelationPath } from './relationPathResolver.js';
|
|
43
|
+
/**
|
|
44
|
+
* Check if a key represents a column name
|
|
45
|
+
* Supports both $column$ format and plain column format
|
|
46
|
+
*/
|
|
47
|
+
function isColumnKey(key) {
|
|
48
|
+
// Check for $column$ format
|
|
49
|
+
if (key.startsWith('$') && key.endsWith('$')) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
// Check if it's not a logical operator or special key
|
|
53
|
+
const reservedKeys = ['AND', 'OR', 'cast'];
|
|
54
|
+
if (reservedKeys.includes(key)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
// Check if key is an operator name
|
|
58
|
+
if (key in OPERATOR_MAP) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Extract column name from key (with or without $ delimiters)
|
|
65
|
+
*/
|
|
66
|
+
function extractColumnName(key) {
|
|
67
|
+
if (key.startsWith('$') && key.endsWith('$')) {
|
|
68
|
+
return key.slice(1, -1); // Remove $ from start and end
|
|
69
|
+
}
|
|
70
|
+
return key;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get qualified field name for SQL
|
|
74
|
+
* Handles both direct fields and relational paths
|
|
75
|
+
*/
|
|
76
|
+
function getQualifiedField(field, ctx) {
|
|
77
|
+
const rawField = extractColumnName(field);
|
|
78
|
+
if (ctx.tableName && !rawField.includes('.')) {
|
|
79
|
+
// Special handling for ID field
|
|
80
|
+
if (rawField === 'id') {
|
|
81
|
+
return `${ctx.tableName}.id`;
|
|
82
|
+
}
|
|
83
|
+
return `${ctx.tableName}.${rawField}`;
|
|
84
|
+
}
|
|
85
|
+
return rawField;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Get column from schema
|
|
89
|
+
*
|
|
90
|
+
* NOTE: This function only works for direct columns on the main table.
|
|
91
|
+
* For relation paths like "userRoles.role.name", it will return null
|
|
92
|
+
* because the field doesn't exist in the main table's schema.
|
|
93
|
+
* See KNOWN LIMITATIONS in the module header for details.
|
|
94
|
+
*/
|
|
95
|
+
function getColumn(fieldName, ctx) {
|
|
96
|
+
if (!ctx.schema)
|
|
97
|
+
return null;
|
|
98
|
+
const cleanField = extractColumnName(fieldName);
|
|
99
|
+
const column = ctx.schema[cleanField];
|
|
100
|
+
return column || null;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Process a single condition (field with operators)
|
|
104
|
+
*/
|
|
105
|
+
function processFieldCondition(fieldName, value, ctx) {
|
|
106
|
+
const cleanFieldName = extractColumnName(fieldName);
|
|
107
|
+
// Check if this is a relation path (contains dots)
|
|
108
|
+
if (isRelationPath(cleanFieldName) && ctx.table && ctx.tableName) {
|
|
109
|
+
// Resolve the relation path to get joins and final column
|
|
110
|
+
const resolved = resolveRelationPath(cleanFieldName, ctx.table, ctx.tableName, undefined, ctx.forPermissionCheck);
|
|
111
|
+
// Add the joins to the context
|
|
112
|
+
if (ctx.joins && resolved.joins.length > 0) {
|
|
113
|
+
ctx.joins.push(...resolved.joins);
|
|
114
|
+
}
|
|
115
|
+
// If we couldn't resolve the column, skip this condition
|
|
116
|
+
if (!resolved.column && !resolved.columnPath) {
|
|
117
|
+
console.warn(`[queryBuilder] Could not resolve relation path: ${cleanFieldName}`);
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
// Use the resolved column from aliased table
|
|
121
|
+
// use Drizzle column reference, not raw SQL
|
|
122
|
+
// Simple equality if value is primitive
|
|
123
|
+
if (typeof value !== 'object' || value === null || value instanceof Date || Array.isArray(value)) {
|
|
124
|
+
return applyOperator('eq', {
|
|
125
|
+
column: resolved.column,
|
|
126
|
+
fieldName: resolved.columnPath,
|
|
127
|
+
// Pass a dummy tableName to trigger raw SQL path for relation filters
|
|
128
|
+
// This is needed to bypass Drizzle's type mappers for date values
|
|
129
|
+
tableName: 'relation',
|
|
130
|
+
schemaTable: resolved.finalTable
|
|
131
|
+
}, value);
|
|
132
|
+
}
|
|
133
|
+
// Extract cast type if present
|
|
134
|
+
const castType = value.cast;
|
|
135
|
+
// Process each operator in the value object
|
|
136
|
+
const conditions = [];
|
|
137
|
+
for (const [operatorName, operatorValue] of Object.entries(value)) {
|
|
138
|
+
if (operatorName === 'cast')
|
|
139
|
+
continue; // Skip cast property
|
|
140
|
+
const condition = applyOperator(operatorName, {
|
|
141
|
+
column: resolved.column,
|
|
142
|
+
fieldName: resolved.columnPath,
|
|
143
|
+
// Pass a dummy tableName to trigger raw SQL path for relation filters
|
|
144
|
+
// This is needed to bypass Drizzle's type mappers for date values
|
|
145
|
+
tableName: 'relation',
|
|
146
|
+
schemaTable: resolved.finalTable
|
|
147
|
+
}, operatorValue, castType);
|
|
148
|
+
if (condition) {
|
|
149
|
+
conditions.push(condition);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// Combine multiple operators on same field with AND
|
|
153
|
+
if (conditions.length === 0)
|
|
154
|
+
return null;
|
|
155
|
+
if (conditions.length === 1)
|
|
156
|
+
return conditions[0];
|
|
157
|
+
return and(...conditions) || null;
|
|
158
|
+
}
|
|
159
|
+
// Not a relation path - handle as direct column
|
|
160
|
+
const qualifiedField = getQualifiedField(fieldName, ctx);
|
|
161
|
+
const column = getColumn(fieldName, ctx);
|
|
162
|
+
if (!column) {
|
|
163
|
+
// Only warn if we have a schema to check against
|
|
164
|
+
if (ctx.schema) {
|
|
165
|
+
const availableColumns = Object.keys(ctx.schema).filter(k => !k.startsWith('_'));
|
|
166
|
+
console.warn(`Column not found for field: ${fieldName}. Available columns: ${availableColumns.slice(0, 10).join(', ')}${availableColumns.length > 10 ? '...' : ''}`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
console.warn(`Column not found for field: ${fieldName} (no schema provided)`);
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
// Simple equality if value is primitive
|
|
174
|
+
if (typeof value !== 'object' || value === null || value instanceof Date || Array.isArray(value)) {
|
|
175
|
+
// Direct value - use equality
|
|
176
|
+
const operatorCtx = {
|
|
177
|
+
column,
|
|
178
|
+
fieldName: qualifiedField,
|
|
179
|
+
tableName: ctx.tableName,
|
|
180
|
+
schemaTable: ctx.table
|
|
181
|
+
};
|
|
182
|
+
return applyOperator('eq', operatorCtx, value);
|
|
183
|
+
}
|
|
184
|
+
// Extract cast type if present
|
|
185
|
+
const castType = value.cast;
|
|
186
|
+
// Process each operator in the value object
|
|
187
|
+
const conditions = [];
|
|
188
|
+
for (const [operatorName, operatorValue] of Object.entries(value)) {
|
|
189
|
+
if (operatorName === 'cast')
|
|
190
|
+
continue; // Skip cast property
|
|
191
|
+
const operatorCtx = {
|
|
192
|
+
column,
|
|
193
|
+
fieldName: qualifiedField,
|
|
194
|
+
tableName: ctx.tableName,
|
|
195
|
+
schemaTable: ctx.table
|
|
196
|
+
};
|
|
197
|
+
// Get element type for array operators if available
|
|
198
|
+
let elementType;
|
|
199
|
+
if ((operatorName === 'arraycontains' || operatorName === 'arraycontained') && ctx.schemaDefinition) {
|
|
200
|
+
// Try to extract array element type from schema definition
|
|
201
|
+
const fieldDef = ctx.schemaDefinition?.fields?.[fieldName];
|
|
202
|
+
if (fieldDef?.elementType) {
|
|
203
|
+
elementType = fieldDef.elementType;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
const condition = applyOperator(operatorName, operatorCtx, operatorValue, castType, elementType);
|
|
207
|
+
if (condition) {
|
|
208
|
+
conditions.push(condition);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Combine multiple operators on same field with AND
|
|
212
|
+
if (conditions.length === 0)
|
|
213
|
+
return null;
|
|
214
|
+
if (conditions.length === 1)
|
|
215
|
+
return conditions[0];
|
|
216
|
+
return and(...conditions) || null;
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Process a single condition object recursively
|
|
220
|
+
*/
|
|
221
|
+
function processCondition(condition, ctx) {
|
|
222
|
+
// Handle AND operator
|
|
223
|
+
if (condition.AND) {
|
|
224
|
+
const subConditions = condition.AND
|
|
225
|
+
.map(c => processCondition(c, ctx))
|
|
226
|
+
.filter((c) => c !== null);
|
|
227
|
+
if (subConditions.length === 0)
|
|
228
|
+
return null;
|
|
229
|
+
if (subConditions.length === 1)
|
|
230
|
+
return subConditions[0];
|
|
231
|
+
return and(...subConditions) || null;
|
|
232
|
+
}
|
|
233
|
+
// Handle OR operator
|
|
234
|
+
if (condition.OR) {
|
|
235
|
+
const subConditions = condition.OR
|
|
236
|
+
.map(c => processCondition(c, ctx))
|
|
237
|
+
.filter((c) => c !== null);
|
|
238
|
+
if (subConditions.length === 0)
|
|
239
|
+
return null;
|
|
240
|
+
if (subConditions.length === 1)
|
|
241
|
+
return subConditions[0];
|
|
242
|
+
return or(...subConditions) || null;
|
|
243
|
+
}
|
|
244
|
+
// Process field conditions
|
|
245
|
+
const fieldConditions = [];
|
|
246
|
+
for (const [key, value] of Object.entries(condition)) {
|
|
247
|
+
if (isColumnKey(key)) {
|
|
248
|
+
// It's a field condition
|
|
249
|
+
const fieldCondition = processFieldCondition(key, value, ctx);
|
|
250
|
+
if (fieldCondition) {
|
|
251
|
+
fieldConditions.push(fieldCondition);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else if (key === 'AND' || key === 'OR') {
|
|
255
|
+
// Already handled above
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
// Unknown key, log warning
|
|
260
|
+
console.warn(`Unknown filter key: ${key}`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Combine all field conditions with AND
|
|
264
|
+
if (fieldConditions.length === 0)
|
|
265
|
+
return null;
|
|
266
|
+
if (fieldConditions.length === 1)
|
|
267
|
+
return fieldConditions[0];
|
|
268
|
+
return and(...fieldConditions) || null;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Main function: Convert Sequelize-style filter to Drizzle where condition
|
|
272
|
+
*
|
|
273
|
+
* @param filter - Filter object (Sequelize-style)
|
|
274
|
+
* @param ctx - Query context with table schema information
|
|
275
|
+
* @returns Drizzle SQL where condition
|
|
276
|
+
*
|
|
277
|
+
* @example
|
|
278
|
+
* ```typescript
|
|
279
|
+
* const filter = {
|
|
280
|
+
* age: { gt: 18 },
|
|
281
|
+
* status: { in: ['active', 'pending'] }
|
|
282
|
+
* };
|
|
283
|
+
*
|
|
284
|
+
* const where = drizzleWhere(filter, {
|
|
285
|
+
* table: usersTable,
|
|
286
|
+
* tableName: 'users',
|
|
287
|
+
* schema: usersTable
|
|
288
|
+
* });
|
|
289
|
+
*
|
|
290
|
+
* // Use in query:
|
|
291
|
+
* const results = await db.select().from(usersTable).where(where);
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
294
|
+
export function drizzleWhere(filter, ctx) {
|
|
295
|
+
if (!filter || Object.keys(filter).length === 0) {
|
|
296
|
+
return undefined;
|
|
297
|
+
}
|
|
298
|
+
const condition = processCondition(filter, ctx);
|
|
299
|
+
return condition || undefined;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Extract field paths from relational conditions
|
|
303
|
+
* Used to determine which relations need to be included/joined
|
|
304
|
+
*/
|
|
305
|
+
export function extractFieldPathsFromRelConditions(relConditions) {
|
|
306
|
+
const fieldPaths = new Set();
|
|
307
|
+
const joinPaths = new Set();
|
|
308
|
+
function processRecursive(conditions, prefix = '') {
|
|
309
|
+
if (!conditions || typeof conditions !== 'object')
|
|
310
|
+
return;
|
|
311
|
+
for (const [key, value] of Object.entries(conditions)) {
|
|
312
|
+
if (isColumnKey(key)) {
|
|
313
|
+
// It's a field condition
|
|
314
|
+
const fieldName = extractColumnName(key);
|
|
315
|
+
const fieldPath = prefix ? `${prefix}.${fieldName}` : fieldName;
|
|
316
|
+
fieldPaths.add(fieldPath);
|
|
317
|
+
// Add parent path for joins
|
|
318
|
+
if (prefix) {
|
|
319
|
+
joinPaths.add(prefix);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
else if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
|
323
|
+
// It's a nested relation or object with operators
|
|
324
|
+
const nestedPrefix = prefix ? `${prefix}.${key}` : key;
|
|
325
|
+
// Add this path to join paths
|
|
326
|
+
if (nestedPrefix) {
|
|
327
|
+
joinPaths.add(nestedPrefix);
|
|
328
|
+
}
|
|
329
|
+
// Check if this level contains field conditions
|
|
330
|
+
const hasFieldConditions = Object.keys(value).some((k) => isColumnKey(k));
|
|
331
|
+
if (hasFieldConditions) {
|
|
332
|
+
for (const [innerKey] of Object.entries(value)) {
|
|
333
|
+
if (isColumnKey(innerKey)) {
|
|
334
|
+
const fieldName = extractColumnName(innerKey);
|
|
335
|
+
const fieldPath = nestedPrefix ? `${nestedPrefix}.${fieldName}` : fieldName;
|
|
336
|
+
fieldPaths.add(fieldPath);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
// Continue processing nested relations
|
|
341
|
+
processRecursive(value, nestedPrefix);
|
|
342
|
+
}
|
|
343
|
+
else if (Array.isArray(value)) {
|
|
344
|
+
// Handle arrays of conditions (e.g., AND, OR)
|
|
345
|
+
value.forEach((item) => processRecursive(item, prefix));
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
processRecursive(relConditions);
|
|
350
|
+
return Array.from(fieldPaths);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Combine multiple filters with AND logic
|
|
354
|
+
* Returns empty object instead of undefined for better type safety
|
|
355
|
+
*/
|
|
356
|
+
export function combineFilters(...filters) {
|
|
357
|
+
const validFilters = filters.filter((f) => f !== null && f !== undefined && Object.keys(f).length > 0);
|
|
358
|
+
if (validFilters.length === 0)
|
|
359
|
+
return {};
|
|
360
|
+
if (validFilters.length === 1)
|
|
361
|
+
return validFilters[0];
|
|
362
|
+
return { AND: validFilters };
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Apply pagination to query
|
|
366
|
+
* Supports both limit/offset and page/pageSize styles
|
|
367
|
+
* When page is provided with limit, uses limit as pageSize and calculates offset
|
|
368
|
+
*/
|
|
369
|
+
export function applyPagination(options) {
|
|
370
|
+
// If page is provided, calculate offset based on page number
|
|
371
|
+
// Use limit or pageSize as the page size
|
|
372
|
+
if (options.page !== undefined) {
|
|
373
|
+
const page = Math.max(1, options.page);
|
|
374
|
+
const pageSize = options.limit ?? options.pageSize ?? 10;
|
|
375
|
+
return {
|
|
376
|
+
limit: pageSize,
|
|
377
|
+
offset: (page - 1) * pageSize
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
// Direct limit/offset style (no page number)
|
|
381
|
+
if (options.limit !== undefined || options.offset !== undefined) {
|
|
382
|
+
return {
|
|
383
|
+
limit: options.limit,
|
|
384
|
+
offset: options.offset || 0
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
return {};
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Calculate pagination metadata
|
|
391
|
+
*/
|
|
392
|
+
export function calculatePaginationMetadata(total, options) {
|
|
393
|
+
const page = options.page || 1;
|
|
394
|
+
const pageSize = options.pageSize || options.limit || 10;
|
|
395
|
+
const pageCount = Math.ceil(total / pageSize);
|
|
396
|
+
return {
|
|
397
|
+
total,
|
|
398
|
+
page,
|
|
399
|
+
pageSize,
|
|
400
|
+
pageCount,
|
|
401
|
+
hasNextPage: page < pageCount,
|
|
402
|
+
hasPreviousPage: page > 1
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Helper to build WHERE clause from multiple filter sources
|
|
407
|
+
* Useful for combining base filters, user filters, tenant filters, etc.
|
|
408
|
+
*/
|
|
409
|
+
export function buildWhereClause(ctx, ...filters) {
|
|
410
|
+
const combined = combineFilters(...filters);
|
|
411
|
+
return drizzleWhere(combined, ctx);
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Extract all field names from a filter object
|
|
415
|
+
* Useful for permission validation
|
|
416
|
+
*/
|
|
417
|
+
export function extractFieldNamesFromFilter(filter) {
|
|
418
|
+
const fields = new Set();
|
|
419
|
+
function extract(obj) {
|
|
420
|
+
if (!obj || typeof obj !== 'object')
|
|
421
|
+
return;
|
|
422
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
423
|
+
if (isColumnKey(key)) {
|
|
424
|
+
fields.add(extractColumnName(key));
|
|
425
|
+
}
|
|
426
|
+
else if (key === 'AND' || key === 'OR') {
|
|
427
|
+
if (Array.isArray(value)) {
|
|
428
|
+
value.forEach(extract);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
else if (typeof value === 'object') {
|
|
432
|
+
extract(value);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
extract(filter);
|
|
437
|
+
return Array.from(fields);
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* Apply PostgreSQL full-text search to a query
|
|
441
|
+
* Matches Sequelize implementation for compatibility
|
|
442
|
+
*
|
|
443
|
+
* @param tableName - Name of the table being searched
|
|
444
|
+
* @param tableColumns - Column definitions from the table schema
|
|
445
|
+
* @param searchQuery - The search string
|
|
446
|
+
* @param searchFields - Fields to search in (optional, defaults to string fields)
|
|
447
|
+
* @param sortByRelevance - Whether to sort by relevance score
|
|
448
|
+
* @returns SQL condition for full-text search and optional order clause
|
|
449
|
+
*/
|
|
450
|
+
export function applyFullTextSearch(tableName, tableColumns, searchQuery, searchFields, sortByRelevance = false) {
|
|
451
|
+
let searchableFields = searchFields;
|
|
452
|
+
if (!searchableFields || searchableFields.length === 0) {
|
|
453
|
+
// If searchFields not provided, use string fields
|
|
454
|
+
// This matches Sequelize behavior which uses STRING and UUID fields
|
|
455
|
+
searchableFields = Object.keys(tableColumns).filter((field) => {
|
|
456
|
+
const column = tableColumns[field];
|
|
457
|
+
// Check if it's a text/string type column
|
|
458
|
+
// In Drizzle, we can check the dataType or columnType
|
|
459
|
+
const columnType = column.dataType || column.columnType || '';
|
|
460
|
+
return (columnType.includes('varchar') ||
|
|
461
|
+
columnType.includes('text') ||
|
|
462
|
+
columnType.includes('char') ||
|
|
463
|
+
columnType.includes('uuid'));
|
|
464
|
+
});
|
|
465
|
+
// If no string fields found, default to all fields
|
|
466
|
+
if (searchableFields.length === 0) {
|
|
467
|
+
searchableFields = Object.keys(tableColumns);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
// Create concatenated string of all searchable fields with proper table qualification
|
|
471
|
+
// Use sql template instead of sql.raw for COALESCE expressions
|
|
472
|
+
const concatParts = searchableFields.map((field) => sql `COALESCE(${sql.raw(`"${tableName}"."${field}"`)}::text, '')`);
|
|
473
|
+
// Build the concatenation using sql.join()
|
|
474
|
+
const concatExpr = sql.join(concatParts, sql ` || ' ' || `);
|
|
475
|
+
// Prepare the full-text search query with proper escaping
|
|
476
|
+
// Replace spaces with :* & to match partial words
|
|
477
|
+
const tsQuery = searchQuery.trim().replace(/\s+/g, ':* & ') + ':*';
|
|
478
|
+
// Escape single quotes to prevent SQL injection
|
|
479
|
+
const escapedTsQuery = tsQuery.replace(/'/g, "''");
|
|
480
|
+
// Build the full-text search condition using parameterized values
|
|
481
|
+
const searchCondition = sql `to_tsvector('english', ${concatExpr}) @@ to_tsquery('english', ${escapedTsQuery})`;
|
|
482
|
+
let orderClause;
|
|
483
|
+
// Apply sorting by relevance using ts_rank if sortByRelevance is true
|
|
484
|
+
if (sortByRelevance) {
|
|
485
|
+
orderClause = sql `ts_rank(to_tsvector('english', ${concatExpr}), to_tsquery('english', ${escapedTsQuery})) DESC`;
|
|
486
|
+
}
|
|
487
|
+
return { searchCondition, orderClause };
|
|
488
|
+
}
|
|
489
|
+
//# sourceMappingURL=queryBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryBuilder.js","sourceRoot":"","sources":["../../baasix/utils/queryBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAO,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,EACL,aAAa,EAGb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,mBAAmB,EACnB,cAAc,EAEf,MAAM,2BAA2B,CAAC;AAQnC;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAW;IAC9B,4BAA4B;IAC5B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sDAAsD;IACtD,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,mCAAmC;IACnC,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAW;IACpC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B;IACzD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,KAAa,EAAE,GAAiB;IACzD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,gCAAgC;QAChC,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,GAAG,GAAG,CAAC,SAAS,KAAK,CAAC;QAC/B,CAAC;QAED,OAAO,GAAG,GAAG,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC;IACxC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,SAAS,CAAC,SAAiB,EAAE,GAAiB;IACrD,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAEtC,OAAO,MAAM,IAAI,IAAI,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAC5B,SAAiB,EACjB,KAAU,EACV,GAAiB;IAEjB,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAEpD,mDAAmD;IACnD,IAAI,cAAc,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;QACjE,0DAA0D;QAC1D,MAAM,QAAQ,GAAG,mBAAmB,CAClC,cAAc,EACd,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,SAAS,EACb,SAAS,EACT,GAAG,CAAC,kBAAkB,CACvB,CAAC;QAEF,+BAA+B;QAC/B,IAAI,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,yDAAyD;QACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,mDAAmD,cAAc,EAAE,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,6CAA6C;QAC7C,4CAA4C;QAE5C,wCAAwC;QACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjG,OAAO,aAAa,CAAC,IAAI,EAAE;gBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,SAAS,EAAE,QAAQ,CAAC,UAAU;gBAC9B,sEAAsE;gBACtE,kEAAkE;gBAClE,SAAS,EAAE,UAAU;gBACrB,WAAW,EAAE,QAAQ,CAAC,UAAU;aACjC,EAAE,KAAK,CAAC,CAAC;QACZ,CAAC;QAED,+BAA+B;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;QAE5B,4CAA4C;QAC5C,MAAM,UAAU,GAAU,EAAE,CAAC;QAE7B,KAAK,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClE,IAAI,YAAY,KAAK,MAAM;gBAAE,SAAS,CAAC,qBAAqB;YAE5D,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE;gBAC5C,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,SAAS,EAAE,QAAQ,CAAC,UAAU;gBAC9B,sEAAsE;gBACtE,kEAAkE;gBAClE,SAAS,EAAE,UAAU;gBACrB,WAAW,EAAE,QAAQ,CAAC,UAAU;aACjC,EAAE,aAA4B,EAAE,QAAQ,CAAC,CAAC;YAE3C,IAAI,SAAS,EAAE,CAAC;gBACd,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAElD,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,gDAAgD;IAChD,MAAM,cAAc,GAAG,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAEzC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,iDAAiD;QACjD,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,+BAA+B,SAAS,wBAAwB,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvK,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,+BAA+B,SAAS,uBAAuB,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wCAAwC;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjG,8BAA8B;QAC9B,MAAM,WAAW,GAAoB;YACnC,MAAM;YACN,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,WAAW,EAAE,GAAG,CAAC,KAAK;SACvB,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC;IAE5B,4CAA4C;IAC5C,MAAM,UAAU,GAAU,EAAE,CAAC;IAE7B,KAAK,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClE,IAAI,YAAY,KAAK,MAAM;YAAE,SAAS,CAAC,qBAAqB;QAE5D,MAAM,WAAW,GAAoB;YACnC,MAAM;YACN,SAAS,EAAE,cAAc;YACzB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,WAAW,EAAE,GAAG,CAAC,KAAK;SACvB,CAAC;QAEF,oDAAoD;QACpD,IAAI,WAA+B,CAAC;QACpC,IAAI,CAAC,YAAY,KAAK,eAAe,IAAI,YAAY,KAAK,gBAAgB,CAAC,IAAI,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACpG,2DAA2D;YAC3D,MAAM,QAAQ,GAAG,GAAG,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;YAC3D,IAAI,QAAQ,EAAE,WAAW,EAAE,CAAC;gBAC1B,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;YACrC,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,aAAa,CAAC,YAAY,EAAE,WAAW,EAAE,aAA4B,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAEhH,IAAI,SAAS,EAAE,CAAC;YACd,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAElD,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,SAAuB,EAAE,GAAiB;IAClE,sBAAsB;IACtB,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;QAClB,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAY,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAEvC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;QAExD,OAAO,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,qBAAqB;IACrB,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,aAAa,GAAG,SAAS,CAAC,EAAE;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aAClC,MAAM,CAAC,CAAC,CAAC,EAAY,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;QAEvC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC;QAExD,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,2BAA2B;IAC3B,MAAM,eAAe,GAAU,EAAE,CAAC;IAElC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,yBAAyB;YACzB,MAAM,cAAc,GAAG,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAC9D,IAAI,cAAc,EAAE,CAAC;gBACnB,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACzC,wBAAwB;YACxB,SAAS;QACX,CAAC;aAAM,CAAC;YACN,2BAA2B;YAC3B,OAAO,CAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;IAE5D,OAAO,GAAG,CAAC,GAAG,eAAe,CAAC,IAAI,IAAI,CAAC;AACzC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,UAAU,YAAY,CAAC,MAAuC,EAAE,GAAiB;IACrF,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,OAAO,SAAS,IAAI,SAAS,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kCAAkC,CAAC,aAAkB;IACnE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,SAAS,gBAAgB,CAAC,UAAe,EAAE,SAAiB,EAAE;QAC5D,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ;YAAE,OAAO;QAE1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,yBAAyB;gBACzB,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBACzC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAChE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAE1B,4BAA4B;gBAC5B,IAAI,MAAM,EAAE,CAAC;oBACX,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChF,kDAAkD;gBAClD,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAEvD,8BAA8B;gBAC9B,IAAI,YAAY,EAAE,CAAC;oBACjB,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBAC9B,CAAC;gBAED,gDAAgD;gBAChD,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE1E,IAAI,kBAAkB,EAAE,CAAC;oBACvB,KAAK,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC/C,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC1B,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;4BAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;4BAC5E,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBAC5B,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,uCAAuC;gBACvC,gBAAgB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACxC,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,8CAA8C;gBAC9C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAEhC,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAG,OAA4C;IAC5E,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqB,EAAE,CAC3D,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAC3D,CAAC;IAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACzC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IAEtD,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAA0B;IACxD,6DAA6D;IAC7D,yCAAyC;IACzC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QAEzD,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,MAAM,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ;SAC9B,CAAC;IACJ,CAAC;IAED,6CAA6C;IAC7C,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO;YACL,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC;SAC5B,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAa,EACb,OAA0B;IAE1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC;IAE9C,OAAO;QACL,KAAK;QACL,IAAI;QACJ,QAAQ;QACR,SAAS;QACT,WAAW,EAAE,IAAI,GAAG,SAAS;QAC7B,eAAe,EAAE,IAAI,GAAG,CAAC;KAC1B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAiB,EACjB,GAAG,OAA4C;IAE/C,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,OAAO,CAAC,CAAC;IAC5C,OAAO,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAoB;IAC9D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,SAAS,OAAO,CAAC,GAAQ;QACvB,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO;QAE5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC;YACrC,CAAC;iBAAM,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACzC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,YAAiC,EACjC,WAAmB,EACnB,YAAuB,EACvB,kBAA2B,KAAK;IAEhC,IAAI,gBAAgB,GAAG,YAAY,CAAC;IAEpC,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvD,kDAAkD;QAClD,oEAAoE;QACpE,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;YACnC,0CAA0C;YAC1C,sDAAsD;YACtD,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YAC9D,OAAO,CACL,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAC9B,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3B,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3B,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC5B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,mDAAmD;QACnD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,+DAA+D;IAC/D,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACjD,GAAG,CAAA,YAAY,GAAG,CAAC,GAAG,CAAC,IAAI,SAAS,MAAM,KAAK,GAAG,CAAC,aAAa,CACjE,CAAC;IAEF,4CAA4C;IAC5C,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAA,aAAa,CAAC,CAAC;IAE3D,0DAA0D;IAC1D,kDAAkD;IAClD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEnE,gDAAgD;IAChD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEnD,kEAAkE;IAClE,MAAM,eAAe,GAAG,GAAG,CAAA,0BAA0B,UAAU,8BAA8B,cAAc,GAAG,CAAC;IAE/G,IAAI,WAA4B,CAAC;IAEjC,sEAAsE;IACtE,IAAI,eAAe,EAAE,CAAC;QACpB,WAAW,GAAG,GAAG,CAAA,kCAAkC,UAAU,4BAA4B,cAAc,SAAS,CAAC;IACnH,CAAC;IAED,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relation Loader Module for Drizzle ORM
|
|
3
|
+
*
|
|
4
|
+
* This module provides utilities for building joins and loading related data
|
|
5
|
+
* in Drizzle ORM, matching Sequelize's include/association behavior.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - BelongsTo join building
|
|
9
|
+
* - HasOne join building
|
|
10
|
+
* - HasMany separate query loading
|
|
11
|
+
* - BelongsToMany (M2M) through junction tables
|
|
12
|
+
* - M2A polymorphic relations
|
|
13
|
+
* - Nested relation loading (include.include)
|
|
14
|
+
* - Relation filtering and ordering
|
|
15
|
+
*/
|
|
16
|
+
import { SQL } from 'drizzle-orm';
|
|
17
|
+
import { PgTable } from 'drizzle-orm/pg-core';
|
|
18
|
+
import type { ProcessedInclude, ExpandedFieldsResult } from '../types/index.js';
|
|
19
|
+
export declare function expandFieldsWithIncludes(fields: string[], tableName: string): ExpandedFieldsResult;
|
|
20
|
+
/**
|
|
21
|
+
* Build LEFT JOIN clause for includes
|
|
22
|
+
* Only for BelongsTo and HasOne relations
|
|
23
|
+
* HasMany will use separate queries
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildJoinsForIncludes(includes: ProcessedInclude[]): SQL[];
|
|
26
|
+
/**
|
|
27
|
+
* Load HasMany relations with separate queries
|
|
28
|
+
* This is more efficient than joining for one-to-many relations
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadHasManyRelations(db: any, mainRecords: any[], includes: ProcessedInclude[], sourceTableName: string): Promise<any[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Load M2A (polymorphic) relations with junction table
|
|
33
|
+
*/
|
|
34
|
+
export declare function loadM2ARelations(db: any, mainRecords: any[], includes: ProcessedInclude[], sourceTableName: string): Promise<any[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Load BelongsToMany (M2M) relations with junction table
|
|
37
|
+
*/
|
|
38
|
+
export declare function loadBelongsToManyRelations(db: any, mainRecords: any[], includes: ProcessedInclude[], sourceTableName: string): Promise<any[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Load all separate-query relations (HasMany, BelongsToMany)
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* Nest flattened BelongsTo/HasOne relation data from JOINs
|
|
44
|
+
* Converts { "category.name": "Electronics", "category.id": "123" }
|
|
45
|
+
* to { category: { name: "Electronics", id: "123" } }
|
|
46
|
+
*/
|
|
47
|
+
export declare function nestJoinedRelations(records: any[], includes: ProcessedInclude[], parentPath?: string): any[];
|
|
48
|
+
export declare function loadSeparateRelations(db: any, mainRecords: any[], includes: ProcessedInclude[], sourceTableName: string): Promise<any[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Build complete select with joins
|
|
51
|
+
* Returns SELECT columns and JOIN clauses
|
|
52
|
+
*/
|
|
53
|
+
export declare function buildSelectWithJoins(mainTable: PgTable, directFields: string[], includes: ProcessedInclude[]): {
|
|
54
|
+
selectColumns: Record<string, any>;
|
|
55
|
+
joins: SQL[];
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Utility: Check if any include requires separate query
|
|
59
|
+
*/
|
|
60
|
+
export declare function hasSeparateQueries(includes: ProcessedInclude[]): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Utility: Get all relation names from includes (flat list)
|
|
63
|
+
*/
|
|
64
|
+
export declare function getRelationNames(includes: ProcessedInclude[]): string[];
|
|
65
|
+
//# sourceMappingURL=relationLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationLoader.d.ts","sourceRoot":"","sources":["../../baasix/utils/relationLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,GAAG,EAAwB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,OAAO,EAAmB,MAAM,qBAAqB,CAAC;AAK/D,OAAO,KAAK,EAGV,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AA4F3B,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,MAAM,GAChB,oBAAoB,CA4GtB;AAuND;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,GAAG,EAAE,CAgCzE;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,GAAG,EACP,WAAW,EAAE,GAAG,EAAE,EAClB,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,GAAG,EAAE,CAAC,CAwLhB;AAiJD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,GAAG,EACP,WAAW,EAAE,GAAG,EAAE,EAClB,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,GAAG,EAAE,CAAC,CA8JhB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,EAAE,EAAE,GAAG,EACP,WAAW,EAAE,GAAG,EAAE,EAClB,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,GAAG,EAAE,CAAC,CAiHhB;AAED;;GAEG;AACH;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,GAAG,EAAE,EACd,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,UAAU,GAAE,MAAW,GACtB,GAAG,EAAE,CAoDP;AAED,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,GAAG,EACP,WAAW,EAAE,GAAG,EAAE,EAClB,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,GAAG,EAAE,CAAC,CAchB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,OAAO,EAClB,YAAY,EAAE,MAAM,EAAE,EACtB,QAAQ,EAAE,gBAAgB,EAAE,GAC3B;IACD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,KAAK,EAAE,GAAG,EAAE,CAAC;CACd,CAgDA;AAkCD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAQxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,EAAE,CAYvE"}
|