@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,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database Seeding Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for seeding the database with initial data.
|
|
5
|
+
* Useful for development, testing, and setting up new environments.
|
|
6
|
+
*/
|
|
7
|
+
import { ItemsService } from '../services/ItemsService.js';
|
|
8
|
+
import { schemaManager } from './schemaManager.js';
|
|
9
|
+
/**
|
|
10
|
+
* Seeding utility class
|
|
11
|
+
*/
|
|
12
|
+
class SeedUtility {
|
|
13
|
+
/**
|
|
14
|
+
* Seed a single collection
|
|
15
|
+
*/
|
|
16
|
+
async seedCollection(options) {
|
|
17
|
+
const { collection, data, clearBefore = false, skipDuplicates = true } = options;
|
|
18
|
+
const result = {
|
|
19
|
+
collection,
|
|
20
|
+
created: 0,
|
|
21
|
+
skipped: 0,
|
|
22
|
+
errors: 0,
|
|
23
|
+
errorDetails: [],
|
|
24
|
+
};
|
|
25
|
+
try {
|
|
26
|
+
const service = new ItemsService(collection);
|
|
27
|
+
// Clear existing data if requested
|
|
28
|
+
if (clearBefore) {
|
|
29
|
+
console.log(`[Seed] Clearing existing data in ${collection}...`);
|
|
30
|
+
const existing = await service.readByQuery({});
|
|
31
|
+
for (const item of existing.data) {
|
|
32
|
+
await service.deleteOne(item.id, { force: true });
|
|
33
|
+
}
|
|
34
|
+
console.log(`[Seed] Cleared ${existing.data.length} items from ${collection}`);
|
|
35
|
+
}
|
|
36
|
+
// Normalize data to array
|
|
37
|
+
const dataArray = Array.isArray(data) ? data : [data];
|
|
38
|
+
// Get unique fields for duplicate checking
|
|
39
|
+
const uniqueFields = skipDuplicates ? this.getUniqueFields(collection) : [];
|
|
40
|
+
// Seed each item
|
|
41
|
+
for (const item of dataArray) {
|
|
42
|
+
try {
|
|
43
|
+
// Check for duplicates
|
|
44
|
+
if (skipDuplicates && uniqueFields.length > 0) {
|
|
45
|
+
const isDuplicate = await this.checkDuplicate(service, item, uniqueFields);
|
|
46
|
+
if (isDuplicate) {
|
|
47
|
+
result.skipped++;
|
|
48
|
+
console.log(`[Seed] Skipped duplicate in ${collection}:`, item);
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
// Create item
|
|
53
|
+
await service.createOne(item);
|
|
54
|
+
result.created++;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
result.errors++;
|
|
58
|
+
result.errorDetails.push({
|
|
59
|
+
item,
|
|
60
|
+
error: error.message,
|
|
61
|
+
});
|
|
62
|
+
console.error(`[Seed] Error creating item in ${collection}:`, error.message);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
console.log(`[Seed] Completed ${collection}: created=${result.created}, skipped=${result.skipped}, errors=${result.errors}`);
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
console.error(`[Seed] Fatal error seeding ${collection}:`, error);
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Seed multiple collections
|
|
75
|
+
*/
|
|
76
|
+
async seedMultiple(seeds) {
|
|
77
|
+
const results = [];
|
|
78
|
+
console.log(`[Seed] Starting to seed ${seeds.length} collections...`);
|
|
79
|
+
for (const seed of seeds) {
|
|
80
|
+
const result = await this.seedCollection(seed);
|
|
81
|
+
results.push(result);
|
|
82
|
+
}
|
|
83
|
+
console.log('[Seed] All collections seeded successfully');
|
|
84
|
+
return results;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get unique fields for a collection
|
|
88
|
+
*/
|
|
89
|
+
getUniqueFields(collection) {
|
|
90
|
+
const schema = schemaManager.getSchema(collection);
|
|
91
|
+
if (!schema) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
const uniqueFields = [];
|
|
95
|
+
for (const [fieldName, fieldDef] of Object.entries(schema.columns)) {
|
|
96
|
+
const fieldDefTyped = fieldDef;
|
|
97
|
+
if (fieldDefTyped.isUnique || fieldDefTyped.primaryKey) {
|
|
98
|
+
uniqueFields.push(fieldName);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return uniqueFields;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check if item already exists based on unique fields
|
|
105
|
+
*/
|
|
106
|
+
async checkDuplicate(service, item, uniqueFields) {
|
|
107
|
+
for (const field of uniqueFields) {
|
|
108
|
+
if (field in item && item[field] != null) {
|
|
109
|
+
try {
|
|
110
|
+
const existing = await service.readByQuery({
|
|
111
|
+
filter: { [field]: item[field] },
|
|
112
|
+
limit: 1,
|
|
113
|
+
});
|
|
114
|
+
if (existing.data.length > 0) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Ignore errors
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Create seed data template for a collection
|
|
127
|
+
*/
|
|
128
|
+
generateTemplate(collection, count = 5) {
|
|
129
|
+
const schema = schemaManager.getSchema(collection);
|
|
130
|
+
if (!schema) {
|
|
131
|
+
console.error(`Schema not found for collection: ${collection}`);
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
const templates = [];
|
|
135
|
+
for (let i = 0; i < count; i++) {
|
|
136
|
+
const template = {};
|
|
137
|
+
for (const [fieldName, fieldDef] of Object.entries(schema.columns)) {
|
|
138
|
+
const fieldDefTyped = fieldDef;
|
|
139
|
+
const dataType = fieldDefTyped.dataType;
|
|
140
|
+
// Skip auto-increment and timestamp fields
|
|
141
|
+
if (fieldDefTyped.primaryKey && fieldDefTyped.generated)
|
|
142
|
+
continue;
|
|
143
|
+
if (['createdAt', 'updatedAt', 'deletedAt'].includes(fieldName))
|
|
144
|
+
continue;
|
|
145
|
+
// Generate sample data based on type
|
|
146
|
+
template[fieldName] = this.generateSampleValue(fieldName, dataType, i);
|
|
147
|
+
}
|
|
148
|
+
templates.push(template);
|
|
149
|
+
}
|
|
150
|
+
return templates;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Generate sample value for a field
|
|
154
|
+
*/
|
|
155
|
+
generateSampleValue(fieldName, dataType, index) {
|
|
156
|
+
const lowerFieldName = fieldName.toLowerCase();
|
|
157
|
+
// Generate based on field name
|
|
158
|
+
if (lowerFieldName.includes('email')) {
|
|
159
|
+
return `user${index + 1}@example.com`;
|
|
160
|
+
}
|
|
161
|
+
if (lowerFieldName.includes('name')) {
|
|
162
|
+
return `Sample Name ${index + 1}`;
|
|
163
|
+
}
|
|
164
|
+
if (lowerFieldName.includes('title')) {
|
|
165
|
+
return `Sample Title ${index + 1}`;
|
|
166
|
+
}
|
|
167
|
+
if (lowerFieldName.includes('description')) {
|
|
168
|
+
return `Sample description for item ${index + 1}`;
|
|
169
|
+
}
|
|
170
|
+
if (lowerFieldName.includes('url')) {
|
|
171
|
+
return `https://example.com/item-${index + 1}`;
|
|
172
|
+
}
|
|
173
|
+
if (lowerFieldName.includes('phone')) {
|
|
174
|
+
return `+1-555-${String(index + 1).padStart(4, '0')}`;
|
|
175
|
+
}
|
|
176
|
+
// Generate based on data type
|
|
177
|
+
switch (dataType) {
|
|
178
|
+
case 'string':
|
|
179
|
+
case 'text':
|
|
180
|
+
return `Sample ${fieldName} ${index + 1}`;
|
|
181
|
+
case 'integer':
|
|
182
|
+
case 'bigInteger':
|
|
183
|
+
return index + 1;
|
|
184
|
+
case 'float':
|
|
185
|
+
case 'decimal':
|
|
186
|
+
return (index + 1) * 1.5;
|
|
187
|
+
case 'boolean':
|
|
188
|
+
return index % 2 === 0;
|
|
189
|
+
case 'date':
|
|
190
|
+
case 'datetime':
|
|
191
|
+
case 'timestamp':
|
|
192
|
+
const date = new Date();
|
|
193
|
+
date.setDate(date.getDate() + index);
|
|
194
|
+
return date;
|
|
195
|
+
case 'json':
|
|
196
|
+
case 'jsonb':
|
|
197
|
+
return { sample: true, index: index + 1 };
|
|
198
|
+
case 'array':
|
|
199
|
+
return [`item${index + 1}`, `value${index + 1}`];
|
|
200
|
+
case 'uuid':
|
|
201
|
+
return null; // Let database generate
|
|
202
|
+
default:
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Print seed summary
|
|
208
|
+
*/
|
|
209
|
+
printSummary(results) {
|
|
210
|
+
console.log('\n' + '='.repeat(60));
|
|
211
|
+
console.log('SEED SUMMARY');
|
|
212
|
+
console.log('='.repeat(60));
|
|
213
|
+
let totalCreated = 0;
|
|
214
|
+
let totalSkipped = 0;
|
|
215
|
+
let totalErrors = 0;
|
|
216
|
+
for (const result of results) {
|
|
217
|
+
console.log(`\n${result.collection}:`);
|
|
218
|
+
console.log(` Created: ${result.created}`);
|
|
219
|
+
console.log(` Skipped: ${result.skipped}`);
|
|
220
|
+
console.log(` Errors: ${result.errors}`);
|
|
221
|
+
if (result.errorDetails.length > 0) {
|
|
222
|
+
console.log(` Error Details:`);
|
|
223
|
+
for (const detail of result.errorDetails.slice(0, 3)) {
|
|
224
|
+
console.log(` - ${detail.error}`);
|
|
225
|
+
}
|
|
226
|
+
if (result.errorDetails.length > 3) {
|
|
227
|
+
console.log(` ... and ${result.errorDetails.length - 3} more`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
totalCreated += result.created;
|
|
231
|
+
totalSkipped += result.skipped;
|
|
232
|
+
totalErrors += result.errors;
|
|
233
|
+
}
|
|
234
|
+
console.log('\n' + '-'.repeat(60));
|
|
235
|
+
console.log(`TOTALS:`);
|
|
236
|
+
console.log(` Collections: ${results.length}`);
|
|
237
|
+
console.log(` Created: ${totalCreated}`);
|
|
238
|
+
console.log(` Skipped: ${totalSkipped}`);
|
|
239
|
+
console.log(` Errors: ${totalErrors}`);
|
|
240
|
+
console.log('='.repeat(60) + '\n');
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
// Export singleton instance
|
|
244
|
+
const seedUtility = new SeedUtility();
|
|
245
|
+
export default seedUtility;
|
|
246
|
+
// Export convenience functions
|
|
247
|
+
export const { seedCollection, seedMultiple, generateTemplate, printSummary, } = seedUtility;
|
|
248
|
+
//# sourceMappingURL=seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed.js","sourceRoot":"","sources":["../../baasix/utils/seed.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clean up expired sessions from the database
|
|
3
|
+
*/
|
|
4
|
+
declare function cleanupSessions(): Promise<number>;
|
|
5
|
+
/**
|
|
6
|
+
* Start periodic cleanup of expired sessions
|
|
7
|
+
*/
|
|
8
|
+
export declare function startSessionCleanup(): void;
|
|
9
|
+
export default cleanupSessions;
|
|
10
|
+
//# sourceMappingURL=sessionCleanup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionCleanup.d.ts","sourceRoot":"","sources":["../../baasix/utils/sessionCleanup.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,iBAAe,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAgChD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAY1C;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { db } from './db.js';
|
|
2
|
+
import { schemaManager } from './schemaManager.js';
|
|
3
|
+
import { lt } from 'drizzle-orm';
|
|
4
|
+
/**
|
|
5
|
+
* Clean up expired sessions from the database
|
|
6
|
+
*/
|
|
7
|
+
async function cleanupSessions() {
|
|
8
|
+
try {
|
|
9
|
+
const sessionsTable = schemaManager.getTable('baasix_Sessions');
|
|
10
|
+
if (!sessionsTable) {
|
|
11
|
+
console.warn('baasix_Sessions table not found, skipping session cleanup');
|
|
12
|
+
return 0;
|
|
13
|
+
}
|
|
14
|
+
// Delete sessions where expiresAt is less than current time
|
|
15
|
+
const expiresAtColumn = sessionsTable['expiresAt'];
|
|
16
|
+
if (!expiresAtColumn) {
|
|
17
|
+
console.warn('expiresAt column not found in baasix_Sessions, skipping cleanup');
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
const result = await db
|
|
21
|
+
.delete(sessionsTable)
|
|
22
|
+
.where(lt(expiresAtColumn, new Date()));
|
|
23
|
+
const deletedCount = result.rowCount || 0;
|
|
24
|
+
if (deletedCount > 0) {
|
|
25
|
+
console.info(`Session cleanup: removed ${deletedCount} expired session(s)`);
|
|
26
|
+
}
|
|
27
|
+
return deletedCount;
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
console.error('Error during session cleanup:', error.message);
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Start periodic cleanup of expired sessions
|
|
36
|
+
*/
|
|
37
|
+
export function startSessionCleanup() {
|
|
38
|
+
console.info('Session cleanup service started');
|
|
39
|
+
// Run initial cleanup after a short delay (to ensure tables are ready)
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
cleanupSessions();
|
|
42
|
+
}, 5000);
|
|
43
|
+
// Clean up every hour
|
|
44
|
+
setInterval(async () => {
|
|
45
|
+
await cleanupSessions();
|
|
46
|
+
}, 3600000); // Every hour
|
|
47
|
+
}
|
|
48
|
+
export default cleanupSessions;
|
|
49
|
+
//# sourceMappingURL=sessionCleanup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionCleanup.js","sourceRoot":"","sources":["../../baasix/utils/sessionCleanup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC;;GAEG;AACH,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAEhE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YAC1E,OAAO,CAAC,CAAC;QACX,CAAC;QAED,4DAA4D;QAC5D,MAAM,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QAEnD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;YAChF,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,EAAE;aACpB,MAAM,CAAC,aAAa,CAAC;aACrB,KAAK,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QAE1C,MAAM,YAAY,GAAI,MAAc,CAAC,QAAQ,IAAI,CAAC,CAAC;QAEnD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,4BAA4B,YAAY,qBAAqB,CAAC,CAAC;QAC9E,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAEhD,uEAAuE;IACvE,UAAU,CAAC,GAAG,EAAE;QACd,eAAe,EAAE,CAAC;IACpB,CAAC,EAAE,IAAI,CAAC,CAAC;IAET,sBAAsB;IACtB,WAAW,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa;AAC5B,CAAC;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sort Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for sorting items within collections.
|
|
5
|
+
* Can be used by routes and extensions.
|
|
6
|
+
*/
|
|
7
|
+
export interface SortOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Collection name
|
|
10
|
+
*/
|
|
11
|
+
collection: string;
|
|
12
|
+
/**
|
|
13
|
+
* ID of the item to move
|
|
14
|
+
*/
|
|
15
|
+
item: string | number;
|
|
16
|
+
/**
|
|
17
|
+
* ID of the target item to move before/after
|
|
18
|
+
*/
|
|
19
|
+
to: string | number;
|
|
20
|
+
/**
|
|
21
|
+
* Position mode: 'before' places item before target, 'after' places item after target
|
|
22
|
+
* @default 'before'
|
|
23
|
+
*/
|
|
24
|
+
mode?: 'before' | 'after';
|
|
25
|
+
/**
|
|
26
|
+
* Accountability object from request (for permission checks)
|
|
27
|
+
* If not provided, bypassPermissions must be true
|
|
28
|
+
*/
|
|
29
|
+
accountability?: {
|
|
30
|
+
user?: any;
|
|
31
|
+
role?: any;
|
|
32
|
+
roles?: string[];
|
|
33
|
+
permissions?: any[];
|
|
34
|
+
tenant?: string | null;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Whether to skip permission checks (for internal use)
|
|
38
|
+
* @default false
|
|
39
|
+
*/
|
|
40
|
+
bypassPermissions?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Database transaction to use
|
|
43
|
+
*/
|
|
44
|
+
transaction?: any;
|
|
45
|
+
}
|
|
46
|
+
export interface SortResult {
|
|
47
|
+
item: string | number;
|
|
48
|
+
collection: string;
|
|
49
|
+
newSort: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Sort an item within a collection by moving it before another item.
|
|
53
|
+
* This updates the sort field of the target item and all items after it.
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* import { sortItems } from '@baasix/utils';
|
|
58
|
+
*
|
|
59
|
+
* // Move item 'abc' before item 'xyz' in the 'tasks' collection
|
|
60
|
+
* const result = await sortItems({
|
|
61
|
+
* collection: 'tasks',
|
|
62
|
+
* item: 'abc',
|
|
63
|
+
* to: 'xyz',
|
|
64
|
+
* accountability: req.accountability, // Pass accountability for permission checks
|
|
65
|
+
* });
|
|
66
|
+
*
|
|
67
|
+
* // Or bypass permissions for internal operations
|
|
68
|
+
* const result = await sortItems({
|
|
69
|
+
* collection: 'tasks',
|
|
70
|
+
* item: 'abc',
|
|
71
|
+
* to: 'xyz',
|
|
72
|
+
* bypassPermissions: true,
|
|
73
|
+
* });
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare function sortItems(options: SortOptions): Promise<SortResult>;
|
|
77
|
+
/**
|
|
78
|
+
* Reorder items in a collection by setting their sort values in order.
|
|
79
|
+
* Useful for bulk reordering operations.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* import { reorderItems } from '@baasix/utils';
|
|
84
|
+
*
|
|
85
|
+
* // Reorder items in the specified order
|
|
86
|
+
* await reorderItems({
|
|
87
|
+
* collection: 'tasks',
|
|
88
|
+
* items: ['id1', 'id2', 'id3'], // Items will be sorted in this order
|
|
89
|
+
* });
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
export declare function reorderItems(options: {
|
|
93
|
+
collection: string;
|
|
94
|
+
items: (string | number)[];
|
|
95
|
+
startSort?: number;
|
|
96
|
+
transaction?: any;
|
|
97
|
+
}): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Get the next available sort value for a collection.
|
|
100
|
+
* Useful when adding new items to the end of a sorted list.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* import { getNextSortValue } from '@baasix/utils';
|
|
105
|
+
*
|
|
106
|
+
* const nextSort = await getNextSortValue('tasks');
|
|
107
|
+
* // Use nextSort when creating a new item
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export declare function getNextSortValue(collection: string, transaction?: any): Promise<number>;
|
|
111
|
+
declare const _default: {
|
|
112
|
+
sortItems: typeof sortItems;
|
|
113
|
+
reorderItems: typeof reorderItems;
|
|
114
|
+
getNextSortValue: typeof getNextSortValue;
|
|
115
|
+
};
|
|
116
|
+
export default _default;
|
|
117
|
+
//# sourceMappingURL=sortUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortUtils.d.ts","sourceRoot":"","sources":["../../baasix/utils/sortUtils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB;;OAEG;IACH,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B;;;OAGG;IACH,cAAc,CAAC,EAAE;QACf,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,CAAC;IACF;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAsIzE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,GAAG,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB7F;;;;;;AAED,wBAIE"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sort Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for sorting items within collections.
|
|
5
|
+
* Can be used by routes and extensions.
|
|
6
|
+
*/
|
|
7
|
+
import { schemaManager } from "./schemaManager.js";
|
|
8
|
+
import { db as dbInstance } from "./db.js";
|
|
9
|
+
import { eq, sql } from "drizzle-orm";
|
|
10
|
+
import { APIError } from "./errorHandler.js";
|
|
11
|
+
import { invalidateCollection } from "../services/CacheService.js";
|
|
12
|
+
import { isAdmin } from "./auth.js";
|
|
13
|
+
import permissionService from "../services/PermissionService.js";
|
|
14
|
+
/**
|
|
15
|
+
* Sort an item within a collection by moving it before another item.
|
|
16
|
+
* This updates the sort field of the target item and all items after it.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* import { sortItems } from '@baasix/utils';
|
|
21
|
+
*
|
|
22
|
+
* // Move item 'abc' before item 'xyz' in the 'tasks' collection
|
|
23
|
+
* const result = await sortItems({
|
|
24
|
+
* collection: 'tasks',
|
|
25
|
+
* item: 'abc',
|
|
26
|
+
* to: 'xyz',
|
|
27
|
+
* accountability: req.accountability, // Pass accountability for permission checks
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* // Or bypass permissions for internal operations
|
|
31
|
+
* const result = await sortItems({
|
|
32
|
+
* collection: 'tasks',
|
|
33
|
+
* item: 'abc',
|
|
34
|
+
* to: 'xyz',
|
|
35
|
+
* bypassPermissions: true,
|
|
36
|
+
* });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export async function sortItems(options) {
|
|
40
|
+
const { collection, item, to, accountability, bypassPermissions = false, transaction, mode = 'before' } = options;
|
|
41
|
+
const db = transaction || dbInstance;
|
|
42
|
+
// Validate inputs
|
|
43
|
+
if (!item) {
|
|
44
|
+
throw new APIError("Missing item ID to sort", 400);
|
|
45
|
+
}
|
|
46
|
+
if (!to) {
|
|
47
|
+
throw new APIError("Missing target ID to sort to", 400);
|
|
48
|
+
}
|
|
49
|
+
// Check if the collection exists
|
|
50
|
+
let schemaInfo;
|
|
51
|
+
try {
|
|
52
|
+
schemaInfo = schemaManager.getSchema(collection);
|
|
53
|
+
if (!schemaInfo) {
|
|
54
|
+
throw new APIError(`Collection '${collection}' does not exist`, 404);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
throw new APIError(`Collection '${collection}' does not exist`, 404);
|
|
59
|
+
}
|
|
60
|
+
// Permission checks (unless bypassed)
|
|
61
|
+
if (!bypassPermissions) {
|
|
62
|
+
if (!accountability) {
|
|
63
|
+
throw new APIError("Accountability is required for permission checks. Use bypassPermissions: true for internal operations.", 400);
|
|
64
|
+
}
|
|
65
|
+
// Check if user is admin
|
|
66
|
+
const userIsAdmin = isAdmin({ accountability });
|
|
67
|
+
if (!userIsAdmin) {
|
|
68
|
+
// Check if user is authenticated (not public role)
|
|
69
|
+
const roleName = typeof accountability.role === 'object'
|
|
70
|
+
? accountability.role?.name
|
|
71
|
+
: accountability.role;
|
|
72
|
+
if (!accountability.user || roleName === 'public') {
|
|
73
|
+
throw new APIError("Authentication required", 401);
|
|
74
|
+
}
|
|
75
|
+
// Check if user has sort permission for this collection
|
|
76
|
+
const role = accountability.role;
|
|
77
|
+
const roleId = typeof role === 'object' ? role.id : role;
|
|
78
|
+
const hasAccess = await permissionService.canAccess(roleId, collection, "update", ["sort"]);
|
|
79
|
+
if (!hasAccess) {
|
|
80
|
+
throw new APIError(`You don't have permission to sort items in '${collection}'`, 403);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Get the table
|
|
85
|
+
const table = schemaManager.getTable(collection);
|
|
86
|
+
const primaryKeyField = schemaManager.getPrimaryKey(collection);
|
|
87
|
+
// Check if the table has a sort field
|
|
88
|
+
if (!table || !table.sort) {
|
|
89
|
+
throw new APIError(`Collection '${collection}' does not have a sort field`, 400);
|
|
90
|
+
}
|
|
91
|
+
// Find the item to move and the target item
|
|
92
|
+
const itemToMove = await db
|
|
93
|
+
.select()
|
|
94
|
+
.from(table)
|
|
95
|
+
.where(eq(table[primaryKeyField], item))
|
|
96
|
+
.limit(1);
|
|
97
|
+
const targetItem = await db
|
|
98
|
+
.select()
|
|
99
|
+
.from(table)
|
|
100
|
+
.where(eq(table[primaryKeyField], to))
|
|
101
|
+
.limit(1);
|
|
102
|
+
if (!itemToMove || itemToMove.length === 0) {
|
|
103
|
+
throw new APIError(`Item with ID ${item} not found`, 404);
|
|
104
|
+
}
|
|
105
|
+
if (!targetItem || targetItem.length === 0) {
|
|
106
|
+
throw new APIError(`Target item with ID ${to} not found`, 404);
|
|
107
|
+
}
|
|
108
|
+
// Get the current sort value of the target item
|
|
109
|
+
const targetSort = targetItem[0].sort || 0;
|
|
110
|
+
// Calculate the new sort value based on mode
|
|
111
|
+
let newSortValue;
|
|
112
|
+
if (mode === 'after') {
|
|
113
|
+
// Place after target: newSort = targetSort + 1, shift items >= newSort
|
|
114
|
+
newSortValue = targetSort + 1;
|
|
115
|
+
// Update all items with sort value >= newSortValue (increment by 1)
|
|
116
|
+
await db.execute(sql `
|
|
117
|
+
UPDATE "${sql.raw(collection)}"
|
|
118
|
+
SET "sort" = "sort" + 1
|
|
119
|
+
WHERE "sort" >= ${newSortValue}
|
|
120
|
+
AND "${sql.raw(primaryKeyField)}" != ${item}
|
|
121
|
+
`);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
// Place before target (default): newSort = targetSort, shift items >= targetSort
|
|
125
|
+
newSortValue = targetSort;
|
|
126
|
+
// Update all items with sort value >= targetSort (increment by 1)
|
|
127
|
+
await db.execute(sql `
|
|
128
|
+
UPDATE "${sql.raw(collection)}"
|
|
129
|
+
SET "sort" = "sort" + 1
|
|
130
|
+
WHERE "sort" >= ${targetSort}
|
|
131
|
+
AND "${sql.raw(primaryKeyField)}" != ${item}
|
|
132
|
+
`);
|
|
133
|
+
}
|
|
134
|
+
// Update the sort value of the item we're moving
|
|
135
|
+
await db.execute(sql `
|
|
136
|
+
UPDATE "${sql.raw(collection)}"
|
|
137
|
+
SET "sort" = ${newSortValue}
|
|
138
|
+
WHERE "${sql.raw(primaryKeyField)}" = ${item}
|
|
139
|
+
`);
|
|
140
|
+
// Invalidate collection cache after sort changes
|
|
141
|
+
await invalidateCollection(collection);
|
|
142
|
+
return {
|
|
143
|
+
item,
|
|
144
|
+
collection,
|
|
145
|
+
newSort: newSortValue,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Reorder items in a collection by setting their sort values in order.
|
|
150
|
+
* Useful for bulk reordering operations.
|
|
151
|
+
*
|
|
152
|
+
* @example
|
|
153
|
+
* ```typescript
|
|
154
|
+
* import { reorderItems } from '@baasix/utils';
|
|
155
|
+
*
|
|
156
|
+
* // Reorder items in the specified order
|
|
157
|
+
* await reorderItems({
|
|
158
|
+
* collection: 'tasks',
|
|
159
|
+
* items: ['id1', 'id2', 'id3'], // Items will be sorted in this order
|
|
160
|
+
* });
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export async function reorderItems(options) {
|
|
164
|
+
const { collection, items, startSort = 1, transaction } = options;
|
|
165
|
+
const db = transaction || dbInstance;
|
|
166
|
+
if (!items || items.length === 0) {
|
|
167
|
+
throw new APIError("Missing items array to reorder", 400);
|
|
168
|
+
}
|
|
169
|
+
// Check if the collection exists
|
|
170
|
+
const schemaInfo = schemaManager.getSchema(collection);
|
|
171
|
+
if (!schemaInfo) {
|
|
172
|
+
throw new APIError(`Collection '${collection}' does not exist`, 404);
|
|
173
|
+
}
|
|
174
|
+
// Get the table
|
|
175
|
+
const table = schemaManager.getTable(collection);
|
|
176
|
+
const primaryKeyField = schemaManager.getPrimaryKey(collection);
|
|
177
|
+
// Check if the table has a sort field
|
|
178
|
+
if (!table || !table.sort) {
|
|
179
|
+
throw new APIError(`Collection '${collection}' does not have a sort field`, 400);
|
|
180
|
+
}
|
|
181
|
+
// Update each item's sort value
|
|
182
|
+
for (let i = 0; i < items.length; i++) {
|
|
183
|
+
const itemId = items[i];
|
|
184
|
+
const sortValue = startSort + i;
|
|
185
|
+
await db.execute(sql `
|
|
186
|
+
UPDATE "${sql.raw(collection)}"
|
|
187
|
+
SET "sort" = ${sortValue}
|
|
188
|
+
WHERE "${sql.raw(primaryKeyField)}" = ${itemId}
|
|
189
|
+
`);
|
|
190
|
+
}
|
|
191
|
+
// Invalidate collection cache after sort changes
|
|
192
|
+
await invalidateCollection(collection);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Get the next available sort value for a collection.
|
|
196
|
+
* Useful when adding new items to the end of a sorted list.
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* import { getNextSortValue } from '@baasix/utils';
|
|
201
|
+
*
|
|
202
|
+
* const nextSort = await getNextSortValue('tasks');
|
|
203
|
+
* // Use nextSort when creating a new item
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
export async function getNextSortValue(collection, transaction) {
|
|
207
|
+
const db = transaction || dbInstance;
|
|
208
|
+
// Check if the collection exists
|
|
209
|
+
const schemaInfo = schemaManager.getSchema(collection);
|
|
210
|
+
if (!schemaInfo) {
|
|
211
|
+
throw new APIError(`Collection '${collection}' does not exist`, 404);
|
|
212
|
+
}
|
|
213
|
+
// Get the table
|
|
214
|
+
const table = schemaManager.getTable(collection);
|
|
215
|
+
// Check if the table has a sort field
|
|
216
|
+
if (!table || !table.sort) {
|
|
217
|
+
throw new APIError(`Collection '${collection}' does not have a sort field`, 400);
|
|
218
|
+
}
|
|
219
|
+
// Get the maximum sort value
|
|
220
|
+
const result = await db.execute(sql `
|
|
221
|
+
SELECT COALESCE(MAX("sort"), 0) + 1 as next_sort
|
|
222
|
+
FROM "${sql.raw(collection)}"
|
|
223
|
+
`);
|
|
224
|
+
const rows = result.rows || result;
|
|
225
|
+
return rows[0]?.next_sort || 1;
|
|
226
|
+
}
|
|
227
|
+
export default {
|
|
228
|
+
sortItems,
|
|
229
|
+
reorderItems,
|
|
230
|
+
getNextSortValue,
|
|
231
|
+
};
|
|
232
|
+
//# sourceMappingURL=sortUtils.js.map
|