From 205cbe7d26d330dc8972b30d0dc855f0086baad2 Mon Sep 17 00:00:00 2001 From: Charis <26616127+charislam@users.noreply.github.com> Date: Tue, 7 Apr 2026 20:34:10 -0400 Subject: [PATCH] chore(studio}: enforce import order, remove bare import specifiers (#44585) --- .../grid/hooks/useOperationQueueShortcuts.ts | 2 +- .../Preferences/DashboardSettingsToggles.tsx | 4 +- .../Preferences/useDashboardSettings.ts | 3 +- .../App/UpdateBillingAddressModal.tsx | 29 ++--- .../Auth/RedirectUrls/AddNewURLModal.test.tsx | 4 +- .../Billing/Payment/Payment.utils.ts | 3 +- .../Extensions/EnableExtensionModal.tsx | 2 +- .../fields/ComputeSizeField.tsx | 20 ++-- .../ErrorHandling/ErrorMatcher.test.tsx | 8 +- .../EdgeFunctionInvocationsSection.tsx | 4 +- .../EdgeFunctionOverview.tsx | 18 +-- .../EdgeFunctionOverview.utils.ts | 3 +- .../EdgeFunctionRecentErrors.tsx | 8 +- .../EdgeFunctionRecentErrors.utils.ts | 16 +-- .../IntegrationOverviewTab.test.tsx | 6 +- .../InstallIntegrationSheet.test.tsx | 4 +- .../AdvancedSettings.tsx | 10 +- .../InstallIntegrationSheet.tsx | 4 +- .../InstallationOverview.tsx | 6 +- .../MarkdownContent.tsx | 2 +- .../Integration/MarkdownContent.tsx | 2 +- .../Landing/Integrations.constants.tsx | 10 +- .../StripeSyncEngine/useStripeSyncStatus.ts | 2 +- .../interfaces/LocalDropdown.test.tsx | 4 +- .../components/interfaces/LocalDropdown.tsx | 2 +- .../LogDrainDestinationSheetForm.test.tsx | 6 +- .../BillingCustomerData.tsx | 40 +++---- .../useBillingCustomerDataForm.ts | 2 +- .../DeleteOrganizationButton.ListAck.tsx | 5 +- .../PlatformWebhooksEndpointDetails.test.tsx | 4 +- .../ProjectHome/HighAvailabilityBadge.tsx | 2 +- .../interfaces/ProjectHome/TopSection.tsx | 24 ++-- .../Storage/PublicBucketWarning.tsx | 4 +- .../FileExplorerHeader.test.tsx | 10 +- .../__tests__/SupportFormPage.test.tsx | 2 +- .../SidePanelEditor.utils.createTable.test.ts | 12 +- .../AccountLayout.selfhosted.test.tsx | 14 +-- .../LayoutSidebar/index.test.tsx | 12 +- .../layouts/ProjectLayout/index.test.tsx | 2 +- .../layouts/ProjectLayout/index.tsx | 2 +- .../SettingsMenu.selfhosted.test.tsx | 4 +- .../SettingsMenu.utils.test.tsx | 4 +- .../layouts/editors/EditorBaseLayout.test.tsx | 2 +- apps/studio/components/ui/AIEditor/index.tsx | 4 +- .../Banners/BannerFreeMicroUpgrade.tsx | 6 +- .../components/ui/ComputeBadgeWrapper.tsx | 19 +-- .../analytics/org-daily-stats-query.test.ts | 8 +- ...ge-functions-last-hour-stats-query.test.ts | 2 +- apps/studio/data/handleError.test.ts | 4 +- apps/studio/data/lint/lint-query.ts | 2 +- apps/studio/data/sso/sso-config-query.ts | 2 +- ...blic-buckets-with-select-policies-query.ts | 8 +- apps/studio/data/tables/table-names-query.ts | 2 +- .../studio/data/usage/org-usage-query.test.ts | 10 +- apps/studio/evals/assistant.eval.ts | 8 +- apps/studio/evals/output.ts | 1 + apps/studio/evals/scorer-wasm.ts | 2 +- apps/studio/evals/scorer.ts | 3 +- apps/studio/instrumentation-client.ts | 5 +- apps/studio/lib/ai/ai-details.test.ts | 32 ++--- apps/studio/lib/ai/ai-details.ts | 16 +-- apps/studio/lib/ai/bedrock.ts | 5 +- .../lib/ai/generate-assistant-response.ts | 13 ++- apps/studio/lib/ai/model.test.ts | 1 + apps/studio/lib/ai/supabase-mcp.ts | 4 +- apps/studio/lib/ai/tool-filter.test.ts | 4 +- apps/studio/lib/ai/tool-filter.ts | 3 +- apps/studio/lib/ai/tools/fallback-tools.ts | 9 +- apps/studio/lib/ai/tools/incident-tools.ts | 4 +- apps/studio/lib/ai/tools/index.ts | 7 +- apps/studio/lib/ai/tools/mcp-tools.ts | 3 +- apps/studio/lib/ai/tools/mock-tools.ts | 9 +- apps/studio/lib/ai/tools/schema-tools.ts | 3 +- apps/studio/lib/ai/tools/studio-tools.ts | 7 +- .../lib/ai/tools/tool-sanitizer.test.ts | 1 + apps/studio/lib/ai/tools/tool-sanitizer.ts | 3 +- apps/studio/lib/ai/util.test.ts | 3 +- apps/studio/lib/api/apiAuthenticate.test.ts | 3 +- apps/studio/lib/api/apiAuthenticate.ts | 5 +- apps/studio/lib/api/apiHelpers.test.ts | 3 +- apps/studio/lib/api/apiHelpers.ts | 5 +- apps/studio/lib/api/apiWrapper.ts | 2 +- apps/studio/lib/api/apiWrappers.test.ts | 11 +- apps/studio/lib/api/generate-v4.test.ts | 14 +-- apps/studio/lib/api/incident-banner.ts | 4 +- apps/studio/lib/api/incident-status.ts | 3 +- apps/studio/lib/api/rate.test.ts | 6 +- .../lib/api/self-hosted/functions/index.ts | 2 +- .../api/self-hosted/generate-types.test.ts | 6 +- .../lib/api/self-hosted/generate-types.ts | 6 +- apps/studio/lib/api/self-hosted/lints.ts | 2 +- apps/studio/lib/api/self-hosted/logs.ts | 7 +- apps/studio/lib/api/self-hosted/mcp.ts | 3 +- apps/studio/lib/api/self-hosted/migrations.ts | 3 +- apps/studio/lib/api/self-hosted/query.ts | 5 +- .../lib/api/self-hosted/settings.test.ts | 2 +- apps/studio/lib/api/self-hosted/settings.ts | 3 +- apps/studio/lib/api/self-hosted/util.test.ts | 6 +- apps/studio/lib/api/self-hosted/util.ts | 5 +- apps/studio/lib/api/snippets.browser.test.ts | 1 + apps/studio/lib/api/snippets.utils.test.ts | 1 + apps/studio/lib/api/snippets.utils.ts | 2 +- apps/studio/lib/auth.tsx | 8 +- apps/studio/lib/cloudprovider-utils.test.ts | 4 +- apps/studio/lib/constants/infrastructure.ts | 4 +- apps/studio/lib/data-api-types.ts | 3 +- apps/studio/lib/error-reporting.test.ts | 2 +- apps/studio/lib/error-reporting.ts | 3 +- apps/studio/lib/formatSql.test.ts | 1 + apps/studio/lib/github.test.ts | 5 +- apps/studio/lib/github.ts | 1 + apps/studio/lib/gotrue.test.ts | 5 +- apps/studio/lib/http-status-codes.test.ts | 1 + apps/studio/lib/integration-utils.test.ts | 19 +-- apps/studio/lib/integration-utils.ts | 6 +- apps/studio/lib/isNonNullable.test.ts | 3 +- apps/studio/lib/migration-utils.test.ts | 5 +- apps/studio/lib/mime.test.ts | 3 +- apps/studio/lib/navigation.ts | 5 +- apps/studio/lib/password-strength.test.ts | 3 +- apps/studio/lib/password-strength.ts | 2 +- apps/studio/lib/pg-format.test.ts | 3 +- apps/studio/lib/pingPostgrest.test.ts | 3 +- apps/studio/lib/pingPostgrest.ts | 2 +- apps/studio/lib/posthog.test.ts | 7 +- apps/studio/lib/posthog.ts | 3 +- apps/studio/lib/profile.tsx | 18 +-- .../lib/project-supabase-client.test.ts | 4 +- apps/studio/lib/project-supabase-client.ts | 3 +- apps/studio/lib/role-impersonation.test.ts | 1 + apps/studio/lib/role-impersonation.ts | 4 +- apps/studio/lib/semver.test.ts | 1 + apps/studio/lib/sql-event-parser.test.ts | 1 + .../studio/lib/sql-identifier-quoting.test.ts | 1 + apps/studio/lib/sql-identifier-quoting.ts | 2 +- apps/studio/lib/sql-parameters.test.ts | 3 +- apps/studio/lib/telemetry.tsx | 8 +- apps/studio/lib/telemetry/track.ts | 7 +- apps/studio/lib/toast-errors.tsx | 3 +- apps/studio/lib/upload.test.ts | 4 +- apps/studio/pages/404.tsx | 5 +- apps/studio/pages/500.tsx | 10 +- apps/studio/pages/_app.tsx | 30 ++--- apps/studio/pages/_document.tsx | 3 +- apps/studio/pages/account/audit.tsx | 11 +- apps/studio/pages/account/me.tsx | 33 +++--- apps/studio/pages/account/security.tsx | 17 +-- apps/studio/pages/account/tokens.tsx | 18 +-- apps/studio/pages/account/tokens/scoped.tsx | 16 +-- apps/studio/pages/api/ai/code/complete.ts | 23 ++-- apps/studio/pages/api/ai/docs.ts | 2 +- apps/studio/pages/api/ai/feedback/classify.ts | 7 +- apps/studio/pages/api/ai/feedback/rate.ts | 17 +-- apps/studio/pages/api/ai/onboarding/design.ts | 6 +- apps/studio/pages/api/ai/sql/check-api-key.ts | 3 +- apps/studio/pages/api/ai/sql/cron-v2.ts | 7 +- apps/studio/pages/api/ai/sql/filter-v1.ts | 11 +- apps/studio/pages/api/ai/sql/generate-v4.ts | 27 ++--- apps/studio/pages/api/ai/sql/policy.ts | 15 +-- apps/studio/pages/api/ai/sql/title-v2.ts | 7 +- apps/studio/pages/api/check-cname.ts | 3 +- apps/studio/pages/api/edge-functions/test.ts | 3 +- .../pages/api/generate-attachment-url.ts | 6 +- apps/studio/pages/api/mcp/index.ts | 15 ++- .../pages/api/platform/auth/[ref]/invite.ts | 6 +- .../api/platform/auth/[ref]/magiclink.ts | 6 +- .../pages/api/platform/auth/[ref]/otp.ts | 6 +- .../pages/api/platform/auth/[ref]/recover.ts | 6 +- .../platform/auth/[ref]/users/[id]/factors.ts | 3 +- .../platform/auth/[ref]/users/[id]/index.ts | 2 +- .../api/platform/auth/[ref]/users/index.ts | 2 +- .../api/platform/database/[ref]/pooling.ts | 3 +- .../pages/api/platform/integrations/[slug].ts | 4 +- .../integrations/github/authorization.ts | 4 +- .../integrations/github/connections.ts | 4 +- .../integrations/github/repositories.ts | 4 +- .../[slug]/billing/subscription.ts | 4 +- .../pages/api/platform/organizations/index.ts | 2 +- .../pg-meta/[ref]/column-privileges.ts | 6 +- .../api/platform/pg-meta/[ref]/extensions.ts | 8 +- .../platform/pg-meta/[ref]/foreign-tables.ts | 6 +- .../pg-meta/[ref]/materialized-views.ts | 6 +- .../api/platform/pg-meta/[ref]/policies.ts | 8 +- .../platform/pg-meta/[ref]/publications.ts | 8 +- .../api/platform/pg-meta/[ref]/query/index.ts | 9 +- .../api/platform/pg-meta/[ref]/tables.ts | 8 +- .../api/platform/pg-meta/[ref]/triggers.ts | 8 +- .../pages/api/platform/pg-meta/[ref]/types.ts | 8 +- .../pages/api/platform/pg-meta/[ref]/views.ts | 6 +- .../pages/api/platform/profile/index.ts | 4 +- .../[ref]/analytics/endpoints/[name].ts | 7 +- .../projects/[ref]/analytics/log-drains.ts | 5 +- .../[ref]/analytics/log-drains/[uuid].ts | 5 +- .../projects/[ref]/api-keys/temporary.ts | 4 +- .../platform/projects/[ref]/api/graphql.ts | 3 +- .../api/platform/projects/[ref]/api/rest.ts | 3 +- .../platform/projects/[ref]/billing/addons.ts | 4 +- .../platform/projects/[ref]/config/index.ts | 3 +- .../projects/[ref]/config/postgrest.ts | 3 +- .../platform/projects/[ref]/content/count.ts | 4 +- .../projects/[ref]/content/folders/[id].ts | 4 +- .../projects/[ref]/content/folders/index.ts | 4 +- .../platform/projects/[ref]/content/index.ts | 4 +- .../projects/[ref]/content/item/[id].ts | 4 +- .../api/platform/projects/[ref]/databases.ts | 6 +- .../api/platform/projects/[ref]/index.ts | 4 +- .../projects/[ref]/infra-monitoring.ts | 3 +- .../api/platform/projects/[ref]/run-lints.ts | 8 +- .../api/platform/projects/[ref]/settings.ts | 6 +- .../pages/api/platform/projects/index.ts | 4 +- .../pages/api/platform/props/org/[slug].tsx | 3 +- .../api/platform/props/project/[ref]/api.ts | 4 +- .../api/platform/props/project/[ref]/index.ts | 4 +- .../storage/[ref]/buckets/[id]/empty.ts | 3 +- .../storage/[ref]/buckets/[id]/index.ts | 3 +- .../[ref]/buckets/[id]/objects/download.ts | 3 +- .../[ref]/buckets/[id]/objects/index.ts | 3 +- .../[ref]/buckets/[id]/objects/list.ts | 3 +- .../[ref]/buckets/[id]/objects/move.ts | 3 +- .../[ref]/buckets/[id]/objects/public-url.ts | 3 +- .../[ref]/buckets/[id]/objects/sign-multi.ts | 3 +- .../[ref]/buckets/[id]/objects/sign.ts | 3 +- .../platform/storage/[ref]/buckets/index.ts | 3 +- .../pages/api/platform/telemetry/event.ts | 3 +- .../pages/api/v1/projects/[ref]/api-keys.ts | 4 +- .../v1/projects/[ref]/database/migrations.ts | 8 +- .../projects/[ref]/functions/[slug]/index.ts | 8 +- .../api/v1/projects/[ref]/functions/index.ts | 8 +- .../api/v1/projects/[ref]/types/typescript.ts | 8 +- .../pages/aws-marketplace-onboarding.tsx | 6 +- apps/studio/pages/claim-project.tsx | 24 ++-- apps/studio/pages/forgot-password-mfa.tsx | 12 +- apps/studio/pages/forgot-password.tsx | 6 +- .../pages/integrations/github/authorize.tsx | 4 +- .../[slug]/deploy-button/new-project.tsx | 39 ++++--- .../[slug]/marketplace/choose-project.tsx | 32 ++--- .../pages/integrations/vercel/install.tsx | 22 ++-- apps/studio/pages/join.tsx | 10 +- apps/studio/pages/logout.tsx | 6 +- apps/studio/pages/maintenance.tsx | 8 +- apps/studio/pages/new/[slug].tsx | 110 +++++++++--------- apps/studio/pages/new/index.tsx | 17 +-- apps/studio/pages/org/[slug]/apps.tsx | 11 +- apps/studio/pages/org/[slug]/audit.tsx | 15 +-- apps/studio/pages/org/[slug]/billing.tsx | 15 +-- apps/studio/pages/org/[slug]/documents.tsx | 17 +-- apps/studio/pages/org/[slug]/general.tsx | 15 +-- apps/studio/pages/org/[slug]/index.tsx | 17 +-- apps/studio/pages/org/[slug]/integrations.tsx | 8 +- .../pages/org/[slug]/private-apps/index.tsx | 23 ++-- apps/studio/pages/org/[slug]/security.tsx | 15 +-- apps/studio/pages/org/[slug]/sso.tsx | 15 +-- apps/studio/pages/org/[slug]/team.tsx | 13 ++- apps/studio/pages/org/[slug]/usage.tsx | 8 +- .../org/[slug]/webhooks/[endpointId].tsx | 11 +- .../pages/org/[slug]/webhooks/index.tsx | 10 +- apps/studio/pages/org/_/[[...routeSlug]].tsx | 24 ++-- apps/studio/pages/org/index.tsx | 13 ++- apps/studio/pages/organizations.tsx | 29 ++--- .../project/[ref]/advisors/performance.tsx | 27 ++--- .../[ref]/advisors/rules/performance.tsx | 6 +- .../project/[ref]/advisors/rules/security.tsx | 6 +- .../pages/project/[ref]/advisors/security.tsx | 27 ++--- .../pages/project/[ref]/auth/audit-logs.tsx | 17 +-- .../studio/pages/project/[ref]/auth/hooks.tsx | 17 +-- apps/studio/pages/project/[ref]/auth/mfa.tsx | 17 +-- .../pages/project/[ref]/auth/oauth-apps.tsx | 13 ++- .../pages/project/[ref]/auth/oauth-server.tsx | 13 ++- .../pages/project/[ref]/auth/overview.tsx | 17 +-- .../pages/project/[ref]/auth/performance.tsx | 17 +-- .../pages/project/[ref]/auth/policies.tsx | 53 ++++----- .../pages/project/[ref]/auth/protection.tsx | 17 +-- .../pages/project/[ref]/auth/rate-limits.tsx | 21 ++-- .../pages/project/[ref]/auth/sessions.tsx | 13 ++- apps/studio/pages/project/[ref]/auth/smtp.tsx | 14 +-- .../[ref]/auth/templates/[templateId].tsx | 25 ++-- .../project/[ref]/auth/templates/index.tsx | 14 +-- .../pages/project/[ref]/auth/third-party.tsx | 19 +-- .../project/[ref]/auth/url-configuration.tsx | 15 +-- .../studio/pages/project/[ref]/auth/users.tsx | 8 +- .../pages/project/[ref]/branches/index.tsx | 44 +++---- .../project/[ref]/branches/merge-requests.tsx | 50 ++++---- .../project/[ref]/database/backups/pitr.tsx | 30 ++--- .../backups/restore-to-new-project.tsx | 15 +-- .../[ref]/database/backups/scheduled.tsx | 27 ++--- .../[ref]/database/column-privileges.tsx | 53 ++++----- .../project/[ref]/database/extensions.tsx | 17 +-- .../project/[ref]/database/functions.tsx | 17 +-- .../pages/project/[ref]/database/indexes.tsx | 14 +-- .../project/[ref]/database/migrations.tsx | 13 ++- .../[ref]/database/publications/[id].tsx | 17 +-- .../[ref]/database/publications/index.tsx | 13 ++- .../database/replication/[pipelineId].tsx | 17 +-- .../[ref]/database/replication/index.tsx | 16 +-- .../replication/replica/[replicaId].tsx | 6 +- .../pages/project/[ref]/database/roles.tsx | 13 ++- .../pages/project/[ref]/database/schemas.tsx | 9 +- .../pages/project/[ref]/database/settings.tsx | 24 ++-- .../project/[ref]/database/tables/[id].tsx | 25 ++-- .../project/[ref]/database/tables/index.tsx | 21 ++-- .../project/[ref]/database/triggers/data.tsx | 9 +- .../project/[ref]/database/triggers/event.tsx | 9 +- .../project/[ref]/database/triggers/index.tsx | 4 +- .../pages/project/[ref]/database/types.tsx | 9 +- .../pages/project/[ref]/editor/[id].tsx | 20 ++-- .../pages/project/[ref]/editor/index.tsx | 24 ++-- .../studio/pages/project/[ref]/editor/new.tsx | 16 +-- .../[ref]/functions/[functionSlug]/code.tsx | 26 ++--- .../functions/[functionSlug]/details.tsx | 8 +- .../[ref]/functions/[functionSlug]/index.tsx | 33 +++--- .../functions/[functionSlug]/invocations.tsx | 11 +- .../[ref]/functions/[functionSlug]/logs.tsx | 11 +- .../pages/project/[ref]/functions/index.tsx | 45 +++---- .../pages/project/[ref]/functions/new.tsx | 28 ++--- .../pages/project/[ref]/functions/secrets.tsx | 13 ++- apps/studio/pages/project/[ref]/index.tsx | 11 +- .../[id]/[pageId]/[childId]/index.tsx | 8 +- .../integrations/[id]/[pageId]/index.tsx | 14 +-- .../project/[ref]/integrations/[id]/index.tsx | 4 +- .../project/[ref]/integrations/index.tsx | 22 ++-- .../pages/project/[ref]/logs/auth-logs.tsx | 14 +-- .../pages/project/[ref]/logs/cron-logs.tsx | 10 +- .../[ref]/logs/dedicated-pooler-logs.tsx | 13 ++- .../[ref]/logs/edge-functions-logs.tsx | 11 +- .../pages/project/[ref]/logs/edge-logs.tsx | 11 +- .../project/[ref]/logs/explorer/index.tsx | 66 +++++------ .../project/[ref]/logs/explorer/recent.tsx | 18 +-- .../project/[ref]/logs/explorer/saved.tsx | 16 +-- .../project/[ref]/logs/explorer/templates.tsx | 20 ++-- .../studio/pages/project/[ref]/logs/index.tsx | 11 +- .../project/[ref]/logs/pg-upgrade-logs.tsx | 9 +- .../pages/project/[ref]/logs/pgcron-logs.tsx | 10 +- .../pages/project/[ref]/logs/pooler-logs.tsx | 16 +-- .../project/[ref]/logs/postgres-logs.tsx | 12 +- .../project/[ref]/logs/postgrest-logs.tsx | 14 +-- .../project/[ref]/logs/realtime-logs.tsx | 8 +- .../project/[ref]/logs/replication-logs.tsx | 11 +- .../pages/project/[ref]/logs/storage-logs.tsx | 8 +- apps/studio/pages/project/[ref]/merge.tsx | 52 ++++----- .../project/[ref]/observability/[id].tsx | 10 +- .../[ref]/observability/api-overview.tsx | 35 +++--- .../project/[ref]/observability/auth.tsx | 51 ++++---- .../project/[ref]/observability/database.tsx | 77 ++++++------ .../[ref]/observability/edge-functions.tsx | 51 ++++---- .../project/[ref]/observability/index.tsx | 19 +-- .../project/[ref]/observability/postgrest.tsx | 33 +++--- .../[ref]/observability/query-insights.tsx | 19 +-- .../[ref]/observability/query-performance.tsx | 33 +++--- .../project/[ref]/observability/realtime.tsx | 37 +++--- .../project/[ref]/observability/storage.tsx | 36 +++--- .../project/[ref]/realtime/inspector.tsx | 9 +- .../pages/project/[ref]/realtime/policies.tsx | 13 ++- .../pages/project/[ref]/realtime/settings.tsx | 13 ++- .../pages/project/[ref]/settings/addons.tsx | 9 +- .../project/[ref]/settings/api-keys/index.tsx | 25 ++-- .../[ref]/settings/api-keys/legacy.tsx | 14 +-- .../pages/project/[ref]/settings/api.tsx | 2 +- .../project/[ref]/settings/billing/usage.tsx | 10 +- .../[ref]/settings/compute-and-disk.tsx | 10 +- .../project/[ref]/settings/dashboard.tsx | 8 +- .../pages/project/[ref]/settings/general.tsx | 26 ++--- .../project/[ref]/settings/infrastructure.tsx | 12 +- .../project/[ref]/settings/integrations.tsx | 10 +- .../project/[ref]/settings/jwt/index.tsx | 15 +-- .../project/[ref]/settings/jwt/legacy.tsx | 21 ++-- .../project/[ref]/settings/log-drains.tsx | 40 ++++--- .../[ref]/settings/webhooks/[endpointId].tsx | 9 +- .../project/[ref]/settings/webhooks/index.tsx | 8 +- apps/studio/pages/project/[ref]/sql/[id].tsx | 32 ++--- apps/studio/pages/project/[ref]/sql/index.tsx | 16 +-- .../pages/project/[ref]/sql/quickstarts.tsx | 14 +-- .../pages/project/[ref]/sql/templates.tsx | 14 +-- .../storage/analytics/buckets/[bucketId].tsx | 22 ++-- .../project/[ref]/storage/analytics/index.tsx | 15 +-- .../storage/files/buckets/[bucketId].tsx | 2 +- .../project/[ref]/storage/files/index.tsx | 10 +- .../project/[ref]/storage/files/policies.tsx | 10 +- .../project/[ref]/storage/files/settings.tsx | 10 +- .../studio/pages/project/[ref]/storage/s3.tsx | 10 +- .../storage/vectors/buckets/[bucketId].tsx | 17 +-- .../project/[ref]/storage/vectors/index.tsx | 14 +-- .../pages/project/_/[[...routeSlug]].tsx | 25 ++-- apps/studio/pages/reset-password.tsx | 8 +- apps/studio/pages/sign-in-mfa.tsx | 18 +-- apps/studio/pages/sign-in-partner.tsx | 7 +- apps/studio/pages/sign-in-sso.tsx | 10 +- apps/studio/pages/sign-in.tsx | 22 ++-- apps/studio/pages/sign-up.tsx | 12 +- apps/studio/pages/support/link.tsx | 13 ++- apps/studio/pages/support/new.tsx | 10 +- apps/studio/proxy.ts | 3 +- .../__tests__/ratchet-eslint-rules.test.ts | 1 + apps/studio/state/sql-editor-v2.ts | 2 +- .../table-editor-operation-queue.types.ts | 3 +- apps/studio/state/table-editor.tsx | 2 +- .../components/Auth/Auth.constants.test.ts | 5 +- .../components/Billing/TaxID.utils.test.ts | 7 +- .../UpdateBillingAddressModal.test.tsx | 23 ++-- .../useBillingCustomerDataForm.test.tsx | 6 +- .../tests/components/CopyButton.test.tsx | 8 +- .../ReadReplicaEligibilityWarnings.test.tsx | 10 +- .../RemoveJSONTrailingComma.utils.test.ts | 5 +- .../Editor/SpreadsheetImport.utils.test.ts | 5 +- .../tests/components/Grid/Grid.utils.test.ts | 5 +- .../tests/components/ProjectDropdown.test.ts | 3 +- .../components/Reports/ReportWidget.test.tsx | 3 +- .../components/SQLEditor/Results.test.tsx | 5 +- .../SQLEditor/Results.utils.test.ts | 5 +- .../Storage/StorageSettings.utils.test.ts | 7 +- .../components/ui/Charts/Charts.utils.test.ts | 5 +- .../ui/QueryBlock/QueryBlock.utils.test.ts | 5 +- apps/studio/tests/config/msw.test.ts | 5 +- apps/studio/tests/config/router.test.tsx | 3 +- .../ExplainVisualizer.parser.test.ts | 7 +- .../ExplainVisualizer.utils.test.ts | 9 +- .../tests/features/logs/LogTable.test.tsx | 5 +- .../features/logs/Logs.Datepickers.test.tsx | 19 +-- .../tests/features/logs/Logs.utils.test.ts | 9 +- .../features/logs/LogsFilterPopover.test.tsx | 7 +- .../features/logs/LogsPreviewer.test.tsx | 20 ++-- .../features/logs/LogsQueryPanel.test.tsx | 4 +- .../tests/features/logs/logs-query.test.tsx | 11 +- .../tests/features/reports/geo-utils.test.ts | 8 +- .../features/reports/storage-report.test.tsx | 4 +- apps/studio/tests/fixtures.ts | 2 +- apps/studio/tests/helpers.tsx | 8 +- apps/studio/tests/lib/custom-render.tsx | 7 +- apps/studio/tests/lib/msw-global-api-mocks.ts | 5 +- apps/studio/tests/lib/msw.ts | 7 +- apps/studio/tests/lib/profile-helpers.tsx | 4 +- apps/studio/tests/lib/route-mock.ts | 2 +- apps/studio/tests/pages/account/me.test.tsx | 34 +++--- apps/studio/tests/pages/api/mcp/index.test.ts | 5 +- .../tests/pages/org/routeSlug.utils.test.ts | 3 +- .../tests/pages/project/[ref]/index.test.tsx | 17 +-- .../project/[ref]/settings/dashboard.test.tsx | 11 +- .../tests/unit/get-return-to-path.test.ts | 5 +- .../tests/unit/lints/mcp-advisors.test.ts | 16 +-- .../tests/unit/logs/logsDateRange.test.ts | 4 +- apps/studio/tests/vitestSetup.ts | 12 +- apps/studio/tsconfig.json | 30 +---- apps/studio/types/base.ts | 7 +- apps/studio/types/ui.ts | 3 +- apps/studio/types/userContent.ts | 2 +- prettier.config.mjs | 2 +- 445 files changed, 2503 insertions(+), 2320 deletions(-) diff --git a/apps/studio/components/grid/hooks/useOperationQueueShortcuts.ts b/apps/studio/components/grid/hooks/useOperationQueueShortcuts.ts index d93c41823f..0ea7a3384d 100644 --- a/apps/studio/components/grid/hooks/useOperationQueueShortcuts.ts +++ b/apps/studio/components/grid/hooks/useOperationQueueShortcuts.ts @@ -1,7 +1,7 @@ import { useQueryClient } from '@tanstack/react-query' -import { useIsQueueOperationsEnabled } from 'components/interfaces/Account/Preferences/useDashboardSettings' import { useOperationQueueActions } from './useOperationQueueActions' +import { useIsQueueOperationsEnabled } from '@/components/interfaces/Account/Preferences/useDashboardSettings' import { tableRowKeys } from '@/data/table-rows/keys' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { useHotKey } from '@/hooks/ui/useHotKey' diff --git a/apps/studio/components/interfaces/Account/Preferences/DashboardSettingsToggles.tsx b/apps/studio/components/interfaces/Account/Preferences/DashboardSettingsToggles.tsx index 24433a93c0..e13c4f853e 100644 --- a/apps/studio/components/interfaces/Account/Preferences/DashboardSettingsToggles.tsx +++ b/apps/studio/components/interfaces/Account/Preferences/DashboardSettingsToggles.tsx @@ -1,6 +1,4 @@ import { zodResolver } from '@hookform/resolvers/zod' -import { useSendEventMutation } from 'data/telemetry/send-event-mutation' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import { useForm } from 'react-hook-form' import { toast } from 'sonner' import { Card, Form_Shadcn_ } from 'ui' @@ -8,6 +6,8 @@ import * as z from 'zod' import { DashboardToggle } from './DashboardToggle' import { useIsInlineEditorSetting, useIsQueueOperationsSetting } from './useDashboardSettings' +import { useSendEventMutation } from '@/data/telemetry/send-event-mutation' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' const DashboardSettingsSchema = z.object({ inlineEditorEnabled: z.boolean(), diff --git a/apps/studio/components/interfaces/Account/Preferences/useDashboardSettings.ts b/apps/studio/components/interfaces/Account/Preferences/useDashboardSettings.ts index 36b37c83c1..117bef445d 100644 --- a/apps/studio/components/interfaces/Account/Preferences/useDashboardSettings.ts +++ b/apps/studio/components/interfaces/Account/Preferences/useDashboardSettings.ts @@ -1,5 +1,6 @@ import { LOCAL_STORAGE_KEYS } from 'common' -import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' + +import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' export const useIsInlineEditorSetting = () => { const [inlineEditorEnabled, setInlineEditorEnabled] = useLocalStorageQuery( diff --git a/apps/studio/components/interfaces/App/UpdateBillingAddressModal.tsx b/apps/studio/components/interfaces/App/UpdateBillingAddressModal.tsx index bf55a3a253..2c49d389b6 100644 --- a/apps/studio/components/interfaces/App/UpdateBillingAddressModal.tsx +++ b/apps/studio/components/interfaces/App/UpdateBillingAddressModal.tsx @@ -3,20 +3,6 @@ import { loadStripe, StripeAddressElement, StripeElementsOptions } from '@stripe import { PermissionAction } from '@supabase/shared-types/out/constants' import { useQueryClient } from '@tanstack/react-query' import { useFlag } from 'common' -import { - getAddressElementAppearanceOptions, - STRIPE_ELEMENT_FONTS, -} from 'components/interfaces/Billing/Payment/Payment.utils' -import { BillingCustomerDataForm } from 'components/interfaces/Organization/BillingSettings/BillingCustomerData/BillingCustomerDataForm' -import { useBillingCustomerDataForm } from 'components/interfaces/Organization/BillingSettings/BillingCustomerData/useBillingCustomerDataForm' -import { useOrganizationCustomerProfileQuery } from 'data/organizations/organization-customer-profile-query' -import { useOrganizationCustomerProfileUpdateMutation } from 'data/organizations/organization-customer-profile-update-mutation' -import { useOrganizationTaxIdQuery } from 'data/organizations/organization-tax-id-query' -import { useOrganizationTaxIdUpdateMutation } from 'data/organizations/organization-tax-id-update-mutation' -import { invalidateOrganizationsQuery } from 'data/organizations/organizations-query' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { IS_PLATFORM, STRIPE_PUBLIC_KEY } from 'lib/constants' import { useTheme } from 'next-themes' import { useEffect, useMemo, useRef, useState } from 'react' import { toast } from 'sonner' @@ -33,6 +19,21 @@ import { } from 'ui' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' +import { + getAddressElementAppearanceOptions, + STRIPE_ELEMENT_FONTS, +} from '@/components/interfaces/Billing/Payment/Payment.utils' +import { BillingCustomerDataForm } from '@/components/interfaces/Organization/BillingSettings/BillingCustomerData/BillingCustomerDataForm' +import { useBillingCustomerDataForm } from '@/components/interfaces/Organization/BillingSettings/BillingCustomerData/useBillingCustomerDataForm' +import { useOrganizationCustomerProfileQuery } from '@/data/organizations/organization-customer-profile-query' +import { useOrganizationCustomerProfileUpdateMutation } from '@/data/organizations/organization-customer-profile-update-mutation' +import { useOrganizationTaxIdQuery } from '@/data/organizations/organization-tax-id-query' +import { useOrganizationTaxIdUpdateMutation } from '@/data/organizations/organization-tax-id-update-mutation' +import { invalidateOrganizationsQuery } from '@/data/organizations/organizations-query' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { IS_PLATFORM, STRIPE_PUBLIC_KEY } from '@/lib/constants' + const stripePromise = loadStripe(STRIPE_PUBLIC_KEY) export function UpdateBillingAddressModal() { diff --git a/apps/studio/components/interfaces/Auth/RedirectUrls/AddNewURLModal.test.tsx b/apps/studio/components/interfaces/Auth/RedirectUrls/AddNewURLModal.test.tsx index 8271972dd1..dc89c65f59 100644 --- a/apps/studio/components/interfaces/Auth/RedirectUrls/AddNewURLModal.test.tsx +++ b/apps/studio/components/interfaces/Auth/RedirectUrls/AddNewURLModal.test.tsx @@ -1,10 +1,10 @@ import { fireEvent, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { toast } from 'sonner' -import { render } from 'tests/helpers' import { beforeEach, describe, expect, it, vi } from 'vitest' import { AddNewURLModal } from './AddNewURLModal' +import { render } from '@/tests/helpers' const { mutateMock, useAuthConfigUpdateMutationMock } = vi.hoisted(() => ({ mutateMock: vi.fn(), @@ -20,7 +20,7 @@ vi.mock(import('common'), async (importOriginal) => { } }) -vi.mock('data/auth/auth-config-update-mutation', () => ({ +vi.mock('@/data/auth/auth-config-update-mutation', () => ({ useAuthConfigUpdateMutation: useAuthConfigUpdateMutationMock, })) diff --git a/apps/studio/components/interfaces/Billing/Payment/Payment.utils.ts b/apps/studio/components/interfaces/Billing/Payment/Payment.utils.ts index 82a66aa0d1..77100be490 100644 --- a/apps/studio/components/interfaces/Billing/Payment/Payment.utils.ts +++ b/apps/studio/components/interfaces/Billing/Payment/Payment.utils.ts @@ -1,5 +1,6 @@ import type { Appearance, CustomFontSource } from '@stripe/stripe-js' -import { CUSTOM_FONT_BOOK_DATA_URL } from 'fonts/stripe-fonts' + +import { CUSTOM_FONT_BOOK_DATA_URL } from '@/fonts/stripe-fonts' /** * Custom font for Stripe Elements iframes. diff --git a/apps/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx b/apps/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx index f7c4c269c5..19984597c9 100644 --- a/apps/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx +++ b/apps/studio/components/interfaces/Database/Extensions/EnableExtensionModal.tsx @@ -1,5 +1,4 @@ import { zodResolver } from '@hookform/resolvers/zod' -import { type DatabaseExtension } from 'data/database-extensions/database-extensions-query' import { useForm } from 'react-hook-form' import { toast } from 'sonner' import { @@ -31,6 +30,7 @@ import * as z from 'zod' import { extensionsWithRecommendedSchemas } from './Extensions.constants' import { DocsButton } from '@/components/ui/DocsButton' import { useDatabaseExtensionEnableMutation } from '@/data/database-extensions/database-extension-enable-mutation' +import { type DatabaseExtension } from '@/data/database-extensions/database-extensions-query' import { useSchemasQuery } from '@/data/database/schemas-query' import { useIsOrioleDb, useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { useProtectedSchemas } from '@/hooks/useProtectedSchemas' diff --git a/apps/studio/components/interfaces/DiskManagement/fields/ComputeSizeField.tsx b/apps/studio/components/interfaces/DiskManagement/fields/ComputeSizeField.tsx index e758e52d73..dba34126fa 100644 --- a/apps/studio/components/interfaces/DiskManagement/fields/ComputeSizeField.tsx +++ b/apps/studio/components/interfaces/DiskManagement/fields/ComputeSizeField.tsx @@ -1,15 +1,5 @@ import { SupportCategories } from '@supabase/shared-types/out/constants' import { useParams } from 'common' -import { SupportLink } from 'components/interfaces/Support/SupportLink' -import { DocsButton } from 'components/ui/DocsButton' -import { InlineLink } from 'components/ui/InlineLink' -import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query' -import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { getCloudProviderArchitecture } from 'lib/cloudprovider-utils' -import { DOCS_URL } from 'lib/constants' import { ChevronRight, CpuIcon, Lock, Microchip } from 'lucide-react' import { useEffect, useMemo, useState } from 'react' import { UseFormReturn } from 'react-hook-form' @@ -37,6 +27,16 @@ import { import { BillingChangeBadge } from '../ui/BillingChangeBadge' import FormMessage from '../ui/FormMessage' import { NoticeBar } from '../ui/NoticeBar' +import { SupportLink } from '@/components/interfaces/Support/SupportLink' +import { DocsButton } from '@/components/ui/DocsButton' +import { InlineLink } from '@/components/ui/InlineLink' +import { useProjectAddonsQuery } from '@/data/subscriptions/project-addons-query' +import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { getCloudProviderArchitecture } from '@/lib/cloudprovider-utils' +import { DOCS_URL } from '@/lib/constants' const INITIALLY_VISIBLE_COUNT = 6 diff --git a/apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx b/apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx index a8c30c5ae9..01e58b2798 100644 --- a/apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx +++ b/apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx @@ -5,14 +5,14 @@ import { ErrorMatcher } from './ErrorMatcher' import { ConnectionTimeoutError } from '@/types/api-errors' import { ResponseError } from '@/types/base' -vi.mock('lib/telemetry/track', () => ({ useTrack: () => vi.fn() })) -vi.mock('state/ai-assistant-state', () => ({ +vi.mock('@/lib/telemetry/track', () => ({ useTrack: () => vi.fn() })) +vi.mock('@/state/ai-assistant-state', () => ({ useAiAssistantStateSnapshot: () => ({ newChat: vi.fn() }), })) -vi.mock('state/sidebar-manager-state', () => ({ +vi.mock('@/state/sidebar-manager-state', () => ({ useSidebarManagerSnapshot: () => ({ openSidebar: vi.fn() }), })) -vi.mock('components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider', () => ({ +vi.mock('@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider', () => ({ SIDEBAR_KEYS: { AI_ASSISTANT: 'ai-assistant' }, })) vi.mock('./RestartProjectDialog', () => ({ diff --git a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionInvocationsSection.tsx b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionInvocationsSection.tsx index d85fa8ecf0..9d1ccb6669 100644 --- a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionInvocationsSection.tsx +++ b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionInvocationsSection.tsx @@ -1,7 +1,5 @@ -import AlertError from 'components/ui/AlertError' import type { ComponentProps } from 'react' import { useMemo } from 'react' -import type { ChartIntervals } from 'types' import { Button } from 'ui' import { Chart, ChartActions, ChartLoadingState, ChartMetric } from 'ui-patterns/Chart' import { PageContainer } from 'ui-patterns/PageContainer' @@ -24,6 +22,8 @@ import { } from './EdgeFunctionOverview.utils' import type { InvocationChartDatum, InvocationUpdateAnnotation } from './EdgeFunctionOverview.utils' import { toAlertError } from './EdgeFunctionRecentErrors.utils' +import AlertError from '@/components/ui/AlertError' +import type { ChartIntervals } from '@/types' interface EdgeFunctionInvocationsSectionProps { interval: string diff --git a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview.tsx b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview.tsx index 3cd9d54e4a..4662337a84 100644 --- a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview.tsx +++ b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview.tsx @@ -1,14 +1,5 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { IS_PLATFORM, useParams } from 'common' -import { useUnifiedLogsPreview } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' -import NoPermission from 'components/ui/NoPermission' -import { - FunctionsCombinedStatsVariables, - useFunctionsCombinedStatsQuery, -} from 'data/analytics/functions-combined-stats-query' -import { useEdgeFunctionQuery } from 'data/edge-functions/edge-function-query' -import { useFillTimeseriesSorted } from 'hooks/analytics/useFillTimeseriesSorted' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' import { ExternalLink } from 'lucide-react' import { useRouter } from 'next/router' import { useEffect, useMemo, useState } from 'react' @@ -29,6 +20,15 @@ import type { EdgeFunctionChartRawDatum } from './EdgeFunctionOverview.utils' import { EdgeFunctionPerformanceSection } from './EdgeFunctionPerformanceSection' import { EdgeFunctionRecentErrors } from './EdgeFunctionRecentErrors' import { EdgeFunctionUsageSection } from './EdgeFunctionUsageSection' +import { useUnifiedLogsPreview } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' +import NoPermission from '@/components/ui/NoPermission' +import { + FunctionsCombinedStatsVariables, + useFunctionsCombinedStatsQuery, +} from '@/data/analytics/functions-combined-stats-query' +import { useEdgeFunctionQuery } from '@/data/edge-functions/edge-function-query' +import { useFillTimeseriesSorted } from '@/hooks/analytics/useFillTimeseriesSorted' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' export const EdgeFunctionOverview = () => { const router = useRouter() diff --git a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview.utils.ts b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview.utils.ts index 0bbc99017f..c773c09811 100644 --- a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview.utils.ts +++ b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview.utils.ts @@ -2,9 +2,10 @@ import dayjs from 'dayjs' import maxBy from 'lodash/maxBy' import meanBy from 'lodash/meanBy' import sumBy from 'lodash/sumBy' -import type { ChartIntervals } from 'types' import type { ChartConfig } from 'ui' +import type { ChartIntervals } from '@/types' + export type EdgeFunctionChartRawDatum = { timestamp: string | number success_count?: string | number diff --git a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionRecentErrors.tsx b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionRecentErrors.tsx index 8f1d64fc66..9484191323 100644 --- a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionRecentErrors.tsx +++ b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionRecentErrors.tsx @@ -1,7 +1,3 @@ -import { SIDEBAR_KEYS } from 'components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' -import { AiAssistantDropdown } from 'components/ui/AiAssistantDropdown' -import AlertError from 'components/ui/AlertError' -import useLogsQuery from 'hooks/analytics/useLogsQuery' import { ExternalLink } from 'lucide-react' import { useRouter } from 'next/router' import { Fragment, useMemo } from 'react' @@ -41,6 +37,10 @@ import { toAlertError, type RecentErrorGroup, } from './EdgeFunctionRecentErrors.utils' +import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' +import { AiAssistantDropdown } from '@/components/ui/AiAssistantDropdown' +import AlertError from '@/components/ui/AlertError' +import useLogsQuery from '@/hooks/analytics/useLogsQuery' import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state' diff --git a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionRecentErrors.utils.ts b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionRecentErrors.utils.ts index f12c924573..ee800709e0 100644 --- a/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionRecentErrors.utils.ts +++ b/apps/studio/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionRecentErrors.utils.ts @@ -1,15 +1,15 @@ -import { LOGS_TABLES } from 'components/interfaces/Settings/Logs/Logs.constants' -import type { LogData } from 'components/interfaces/Settings/Logs/Logs.types' -import { - genDefaultQuery, - isUnixMicro, - unixMicroToIsoTimestamp, -} from 'components/interfaces/Settings/Logs/Logs.utils' -import type { AlertErrorProps } from 'components/ui/AlertError' import dayjs from 'dayjs' import relativeTime from 'dayjs/plugin/relativeTime' import { parseEdgeFunctionEventMessage } from '../EdgeFunctionRecentInvocations.utils' +import { LOGS_TABLES } from '@/components/interfaces/Settings/Logs/Logs.constants' +import type { LogData } from '@/components/interfaces/Settings/Logs/Logs.types' +import { + genDefaultQuery, + isUnixMicro, + unixMicroToIsoTimestamp, +} from '@/components/interfaces/Settings/Logs/Logs.utils' +import type { AlertErrorProps } from '@/components/ui/AlertError' dayjs.extend(relativeTime) diff --git a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTab.test.tsx b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTab.test.tsx index 7ec19bcf92..734b228121 100644 --- a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTab.test.tsx +++ b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTab.test.tsx @@ -1,10 +1,10 @@ import { screen } from '@testing-library/dom' import { mockAnimationsApi } from 'jsdom-testing-mocks' -import { customRender } from 'tests/lib/custom-render' -import { routerMock } from 'tests/lib/route-mock' import { beforeEach, describe, expect, it, vi } from 'vitest' import { IntegrationOverviewTab } from './IntegrationOverviewTab' +import { customRender } from '@/tests/lib/custom-render' +import { routerMock } from '@/tests/lib/route-mock' mockAnimationsApi() @@ -31,7 +31,7 @@ vi.mock('framer-motion', async (importOriginal) => { const mockExtensions = vi.fn() -vi.mock('data/database-extensions/database-extensions-query', () => ({ +vi.mock('@/data/database-extensions/database-extensions-query', () => ({ useDatabaseExtensionsQuery: () => ({ data: mockExtensions() }), })) diff --git a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet.test.tsx b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet.test.tsx index ec29b871a7..32c7079106 100644 --- a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet.test.tsx +++ b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet.test.tsx @@ -1,12 +1,12 @@ import { fireEvent, screen, waitFor } from '@testing-library/dom' import userEvent from '@testing-library/user-event' import { mockAnimationsApi } from 'jsdom-testing-mocks' -import { customRender } from 'tests/lib/custom-render' -import { routerMock } from 'tests/lib/route-mock' import { beforeEach, describe, expect, it, vi } from 'vitest' import { IntegrationDefinition } from '../../Landing/Integrations.constants' import { InstallIntegrationSheet } from './InstallIntegrationSheet/InstallIntegrationSheet' +import { customRender } from '@/tests/lib/custom-render' +import { routerMock } from '@/tests/lib/route-mock' mockAnimationsApi() diff --git a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/AdvancedSettings.tsx b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/AdvancedSettings.tsx index 75a227d7be..f2a137e409 100644 --- a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/AdvancedSettings.tsx +++ b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/AdvancedSettings.tsx @@ -1,8 +1,3 @@ -import { extensionsWithRecommendedSchemas } from 'components/interfaces/Database/Extensions/Extensions.constants' -import { useDatabaseExtensionsQuery } from 'data/database-extensions/database-extensions-query' -import { useSchemasQuery } from 'data/database/schemas-query' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { useProtectedSchemas } from 'hooks/useProtectedSchemas' import { type Dispatch, type SetStateAction } from 'react' import { Accordion_Shadcn_, @@ -23,6 +18,11 @@ import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { getExtensionDefaultSchema } from '../IntegrationOverviewTabV2.utils' import { type ExtensionsSchema, type InstallIntegrationSheetProps } from './InstallIntegrationSheet' +import { extensionsWithRecommendedSchemas } from '@/components/interfaces/Database/Extensions/Extensions.constants' +import { useDatabaseExtensionsQuery } from '@/data/database-extensions/database-extensions-query' +import { useSchemasQuery } from '@/data/database/schemas-query' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { useProtectedSchemas } from '@/hooks/useProtectedSchemas' type AdvancedSettingsProps = InstallIntegrationSheetProps & { extensionsSchema: ExtensionsSchema diff --git a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/InstallIntegrationSheet.tsx b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/InstallIntegrationSheet.tsx index 387a34e741..24e1bef8e7 100644 --- a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/InstallIntegrationSheet.tsx +++ b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/InstallIntegrationSheet.tsx @@ -1,6 +1,4 @@ import { zodResolver } from '@hookform/resolvers/zod' -import { type IntegrationDefinition } from 'components/interfaces/Integrations/Landing/Integrations.constants' -import { useTrack } from 'lib/telemetry/track' import { useEffect, useMemo, useState } from 'react' import { SubmitHandler, useForm } from 'react-hook-form' import { toast } from 'sonner' @@ -23,12 +21,14 @@ import { getExtensionDefaultSchema } from '../IntegrationOverviewTabV2.utils' import { AdvancedSettings } from './AdvancedSettings' import { InstallationOverview } from './InstallationOverview' import { InstallationSettings } from './InstallationSettings' +import { type IntegrationDefinition } from '@/components/interfaces/Integrations/Landing/Integrations.constants' import { useDatabaseExtensionEnableMutation } from '@/data/database-extensions/database-extension-enable-mutation' import { DatabaseExtension, useDatabaseExtensionsQuery, } from '@/data/database-extensions/database-extensions-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { useTrack } from '@/lib/telemetry/track' import { ResponseError } from '@/types' export interface InstallIntegrationSheetProps { diff --git a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/InstallationOverview.tsx b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/InstallationOverview.tsx index 85ee813bb9..b46b190a6d 100644 --- a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/InstallationOverview.tsx +++ b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/InstallationOverview.tsx @@ -1,6 +1,3 @@ -import { Markdown } from 'components/interfaces/Markdown' -import { useDatabaseExtensionsQuery } from 'data/database-extensions/database-extensions-query' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { Badge, Card, @@ -16,6 +13,9 @@ import { CodeBlock } from 'ui-patterns/CodeBlock' import { getEnableExtensionsSQL } from '../IntegrationOverviewTabV2.utils' import { type ExtensionsSchema, type InstallIntegrationSheetProps } from './InstallIntegrationSheet' +import { Markdown } from '@/components/interfaces/Markdown' +import { useDatabaseExtensionsQuery } from '@/data/database-extensions/database-extensions-query' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' export const InstallationOverview = ({ integration, diff --git a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/MarkdownContent.tsx b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/MarkdownContent.tsx index 69080081b5..56fa52eb53 100644 --- a/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/MarkdownContent.tsx +++ b/apps/studio/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/MarkdownContent.tsx @@ -17,7 +17,7 @@ export const MarkdownContent = ({ useEffect(() => { if (!!integrationId && !content) { - import(`static-data/integrations/${integrationId}/overview.md`) + import(`@/static-data/integrations/${integrationId}/overview.md`) .then((module) => setLocalContent(String(module.default))) .catch((error) => console.error('Error loading markdown:', error)) } diff --git a/apps/studio/components/interfaces/Integrations/Integration/MarkdownContent.tsx b/apps/studio/components/interfaces/Integrations/Integration/MarkdownContent.tsx index e93a997604..aed520f5cb 100644 --- a/apps/studio/components/interfaces/Integrations/Integration/MarkdownContent.tsx +++ b/apps/studio/components/interfaces/Integrations/Integration/MarkdownContent.tsx @@ -17,7 +17,7 @@ export const MarkdownContent = ({ const [isExpanded, setIsExpanded] = useState(initiallyExpanded ?? false) useEffect(() => { - import(`static-data/integrations/${integrationId}/overview.md`) + import(`@/static-data/integrations/${integrationId}/overview.md`) .then((module) => setContent(String(module.default))) .catch((error) => console.error('Error loading markdown:', error)) }, [integrationId]) diff --git a/apps/studio/components/interfaces/Integrations/Landing/Integrations.constants.tsx b/apps/studio/components/interfaces/Integrations/Landing/Integrations.constants.tsx index 4754962cd6..3e1a8d1d99 100644 --- a/apps/studio/components/interfaces/Integrations/Landing/Integrations.constants.tsx +++ b/apps/studio/components/interfaces/Integrations/Landing/Integrations.constants.tsx @@ -1,8 +1,4 @@ import { getEnableWebhooksSQL } from '@supabase/pg-meta' -import { stripeSyncKeys } from 'data/database-integrations/stripe/keys' -import { installStripeSync } from 'data/database-integrations/stripe/stripe-sync-install-mutation' -import { databaseKeys } from 'data/database/keys' -import { useTrack } from 'lib/telemetry/track' import { Clock5, Code2, Layers, Timer, Vault, Webhook } from 'lucide-react' import dynamic from 'next/dynamic' import Image from 'next/image' @@ -14,10 +10,14 @@ import { UpgradeDatabaseAlert } from '../Queues/UpgradeDatabaseAlert' import { getStripeSyncSchemaComment } from '../templates/StripeSyncEngine/useStripeSyncStatus' import { WRAPPERS } from '../Wrappers/Wrappers.constants' import { WrapperMeta } from '../Wrappers/Wrappers.types' +import { stripeSyncKeys } from '@/data/database-integrations/stripe/keys' +import { installStripeSync } from '@/data/database-integrations/stripe/stripe-sync-install-mutation' import { enableDatabaseWebhooks } from '@/data/database/hooks-enable-mutation' +import { databaseKeys } from '@/data/database/keys' import { getSchemas, invalidateSchemasQuery } from '@/data/database/schemas-query' import { getQueryClient } from '@/data/query-client' import { BASE_PATH, DOCS_URL } from '@/lib/constants' +import { useTrack } from '@/lib/telemetry/track' export type Navigation = { route: string @@ -528,7 +528,7 @@ const TEMPLATE_INTEGRATIONS: Array = [ case 'overview': return dynamic( () => - import('components/interfaces/Integrations/templates/StripeSyncEngine/OverviewTab').then( + import('@/components/interfaces/Integrations/templates/StripeSyncEngine/OverviewTab').then( (mod) => mod.StripeSyncEngineOverviewTab ), { loading: Loading } diff --git a/apps/studio/components/interfaces/Integrations/templates/StripeSyncEngine/useStripeSyncStatus.ts b/apps/studio/components/interfaces/Integrations/templates/StripeSyncEngine/useStripeSyncStatus.ts index 641c510fb9..afcffdc502 100644 --- a/apps/studio/components/interfaces/Integrations/templates/StripeSyncEngine/useStripeSyncStatus.ts +++ b/apps/studio/components/interfaces/Integrations/templates/StripeSyncEngine/useStripeSyncStatus.ts @@ -1,4 +1,3 @@ -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { useEffect } from 'react' import { getCurrentVersion, parseSchemaComment } from 'stripe-experiment-sync/supabase' @@ -10,6 +9,7 @@ import { } from '@/components/interfaces/Integrations/templates/StripeSyncEngine/stripe-sync-status' import { useStripeSyncingState } from '@/data/database-integrations/stripe/sync-state-query' import { Schema, useSchemasQuery } from '@/data/database/schemas-query' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' // Maximum time allowed for installation or uninstallation operations before the UI times out const OPERATION_TIME_OUT_MS: number = 5 * 60 * 1000 // 5 minutes diff --git a/apps/studio/components/interfaces/LocalDropdown.test.tsx b/apps/studio/components/interfaces/LocalDropdown.test.tsx index 3754319262..db89a51e9d 100644 --- a/apps/studio/components/interfaces/LocalDropdown.test.tsx +++ b/apps/studio/components/interfaces/LocalDropdown.test.tsx @@ -44,13 +44,13 @@ vi.mock('next-themes', () => ({ }), })) -vi.mock('state/app-state', () => ({ +vi.mock('@/state/app-state', () => ({ useAppStateSnapshot: () => ({ setLastRouteBeforeVisitingAccountPage: mockSetLastRoute, }), })) -vi.mock('components/ui/ProfileImage', () => ({ +vi.mock('@/components/ui/ProfileImage', () => ({ ProfileImage: () =>
Avatar
, })) diff --git a/apps/studio/components/interfaces/LocalDropdown.tsx b/apps/studio/components/interfaces/LocalDropdown.tsx index f37144893c..48e73e7bdf 100644 --- a/apps/studio/components/interfaces/LocalDropdown.tsx +++ b/apps/studio/components/interfaces/LocalDropdown.tsx @@ -2,7 +2,6 @@ import { FlaskConical, Settings } from 'lucide-react' import { useTheme } from 'next-themes' import Link from 'next/link' import { useRouter } from 'next/router' -import { useAppStateSnapshot } from 'state/app-state' import { Button, cn, @@ -22,6 +21,7 @@ import { import { ButtonTooltip } from '../ui/ButtonTooltip' import { useFeaturePreviewModal } from './App/FeaturePreview/FeaturePreviewContext' import { ProfileImage } from '@/components/ui/ProfileImage' +import { useAppStateSnapshot } from '@/state/app-state' export const LocalDropdown = ({ triggerClassName, diff --git a/apps/studio/components/interfaces/LogDrains/LogDrainDestinationSheetForm.test.tsx b/apps/studio/components/interfaces/LogDrains/LogDrainDestinationSheetForm.test.tsx index be418c6467..4956d4a9bc 100644 --- a/apps/studio/components/interfaces/LogDrains/LogDrainDestinationSheetForm.test.tsx +++ b/apps/studio/components/interfaces/LogDrains/LogDrainDestinationSheetForm.test.tsx @@ -1,10 +1,10 @@ import { fireEvent, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' import type { ComponentProps } from 'react' -import { render } from 'tests/helpers' import { beforeEach, describe, expect, it, vi } from 'vitest' import { LogDrainDestinationSheetForm } from './LogDrainDestinationSheetForm' +import { render } from '@/tests/helpers' const { trackMock, useFlagMock, useLogDrainsQueryMock, useParamsMock, useTrackMock } = vi.hoisted( () => ({ @@ -27,7 +27,7 @@ vi.mock(import('common'), async (importOriginal) => { } }) -vi.mock(import('data/log-drains/log-drains-query'), async (importOriginal) => { +vi.mock(import('@/data/log-drains/log-drains-query'), async (importOriginal) => { const actual = await importOriginal() return { @@ -36,7 +36,7 @@ vi.mock(import('data/log-drains/log-drains-query'), async (importOriginal) => { } }) -vi.mock('lib/telemetry/track', () => ({ +vi.mock('@/lib/telemetry/track', () => ({ useTrack: useTrackMock, })) diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/BillingCustomerData/BillingCustomerData.tsx b/apps/studio/components/interfaces/Organization/BillingSettings/BillingCustomerData/BillingCustomerData.tsx index 8e24207066..36b1f50c7b 100644 --- a/apps/studio/components/interfaces/Organization/BillingSettings/BillingCustomerData/BillingCustomerData.tsx +++ b/apps/studio/components/interfaces/Organization/BillingSettings/BillingCustomerData/BillingCustomerData.tsx @@ -3,26 +3,6 @@ import { loadStripe, StripeAddressElement, StripeElementsOptions } from '@stripe import { PermissionAction } from '@supabase/shared-types/out/constants' import { useQueryClient } from '@tanstack/react-query' import { useParams } from 'common' -import { - getAddressElementAppearanceOptions, - STRIPE_ELEMENT_FONTS, -} from 'components/interfaces/Billing/Payment/Payment.utils' -import { - ScaffoldSection, - ScaffoldSectionContent, - ScaffoldSectionDetail, -} from 'components/layouts/Scaffold' -import AlertError from 'components/ui/AlertError' -import NoPermission from 'components/ui/NoPermission' -import PartnerManagedResource from 'components/ui/PartnerManagedResource' -import { organizationKeys } from 'data/organizations/keys' -import { useOrganizationCustomerProfileQuery } from 'data/organizations/organization-customer-profile-query' -import { useOrganizationCustomerProfileUpdateMutation } from 'data/organizations/organization-customer-profile-update-mutation' -import { useOrganizationTaxIdQuery } from 'data/organizations/organization-tax-id-query' -import { useOrganizationTaxIdUpdateMutation } from 'data/organizations/organization-tax-id-update-mutation' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { STRIPE_PUBLIC_KEY } from 'lib/constants' import { useTheme } from 'next-themes' import { useEffect, useMemo, useRef, useState } from 'react' import { toast } from 'sonner' @@ -31,6 +11,26 @@ import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' import { BillingCustomerDataForm } from './BillingCustomerDataForm' import { useBillingCustomerDataForm } from './useBillingCustomerDataForm' +import { + getAddressElementAppearanceOptions, + STRIPE_ELEMENT_FONTS, +} from '@/components/interfaces/Billing/Payment/Payment.utils' +import { + ScaffoldSection, + ScaffoldSectionContent, + ScaffoldSectionDetail, +} from '@/components/layouts/Scaffold' +import AlertError from '@/components/ui/AlertError' +import NoPermission from '@/components/ui/NoPermission' +import PartnerManagedResource from '@/components/ui/PartnerManagedResource' +import { organizationKeys } from '@/data/organizations/keys' +import { useOrganizationCustomerProfileQuery } from '@/data/organizations/organization-customer-profile-query' +import { useOrganizationCustomerProfileUpdateMutation } from '@/data/organizations/organization-customer-profile-update-mutation' +import { useOrganizationTaxIdQuery } from '@/data/organizations/organization-tax-id-query' +import { useOrganizationTaxIdUpdateMutation } from '@/data/organizations/organization-tax-id-update-mutation' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { STRIPE_PUBLIC_KEY } from '@/lib/constants' const stripePromise = loadStripe(STRIPE_PUBLIC_KEY) diff --git a/apps/studio/components/interfaces/Organization/BillingSettings/BillingCustomerData/useBillingCustomerDataForm.ts b/apps/studio/components/interfaces/Organization/BillingSettings/BillingCustomerData/useBillingCustomerDataForm.ts index 70eafdacba..17ea604c87 100644 --- a/apps/studio/components/interfaces/Organization/BillingSettings/BillingCustomerData/useBillingCustomerDataForm.ts +++ b/apps/studio/components/interfaces/Organization/BillingSettings/BillingCustomerData/useBillingCustomerDataForm.ts @@ -4,13 +4,13 @@ import type { StripeAddressElementChangeEvent, StripeAddressElementOptions, } from '@stripe/stripe-js' -import type { CustomerAddress, CustomerTaxId } from 'data/organizations/types' import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useForm } from 'react-hook-form' import { TaxIdFormValues, TaxIdSchema } from './BillingCustomerDataForm' import { TAX_IDS } from './TaxID.constants' import { getEffectiveTaxCountry, resolveStoredTaxId, sanitizeTaxIdValue } from './TaxID.utils' +import type { CustomerAddress, CustomerTaxId } from '@/data/organizations/types' type StripeAddressValue = StripeAddressElementChangeEvent['value'] type StripeAddressValidationState = 'unknown' | 'complete' | 'incomplete' diff --git a/apps/studio/components/interfaces/Organization/GeneralSettings/DeleteOrganizationButton.ListAck.tsx b/apps/studio/components/interfaces/Organization/GeneralSettings/DeleteOrganizationButton.ListAck.tsx index b280333156..ccfd0ad494 100644 --- a/apps/studio/components/interfaces/Organization/GeneralSettings/DeleteOrganizationButton.ListAck.tsx +++ b/apps/studio/components/interfaces/Organization/GeneralSettings/DeleteOrganizationButton.ListAck.tsx @@ -1,7 +1,8 @@ -import { getComputeSize } from 'data/projects/org-projects-infinite-query' -import type { OrgProject } from 'data/projects/org-projects-infinite-query' import { Checkbox_Shadcn_ } from 'ui' +import { getComputeSize } from '@/data/projects/org-projects-infinite-query' +import type { OrgProject } from '@/data/projects/org-projects-infinite-query' + type Props = { projects: OrgProject[] checkedProjects: Record diff --git a/apps/studio/components/interfaces/Platform/Webhooks/PlatformWebhooksEndpointDetails.test.tsx b/apps/studio/components/interfaces/Platform/Webhooks/PlatformWebhooksEndpointDetails.test.tsx index b226e92b59..af10e11cd4 100644 --- a/apps/studio/components/interfaces/Platform/Webhooks/PlatformWebhooksEndpointDetails.test.tsx +++ b/apps/studio/components/interfaces/Platform/Webhooks/PlatformWebhooksEndpointDetails.test.tsx @@ -6,11 +6,11 @@ import { describe, expect, it, vi } from 'vitest' import { PLATFORM_WEBHOOKS_MOCK_DATA } from './PlatformWebhooks.mock' import { PlatformWebhooksEndpointDetails } from './PlatformWebhooksEndpointDetails' -vi.mock('components/ui/DataTable/DataTableColumn/DataTableColumnStatusCode', () => ({ +vi.mock('@/components/ui/DataTable/DataTableColumn/DataTableColumnStatusCode', () => ({ DataTableColumnStatusCode: ({ value }: { value: number }) => {value}, })) -vi.mock('components/ui/ButtonTooltip', () => ({ +vi.mock('@/components/ui/ButtonTooltip', () => ({ ButtonTooltip: ({ icon, children, diff --git a/apps/studio/components/interfaces/ProjectHome/HighAvailabilityBadge.tsx b/apps/studio/components/interfaces/ProjectHome/HighAvailabilityBadge.tsx index ab637850c6..913a7ac349 100644 --- a/apps/studio/components/interfaces/ProjectHome/HighAvailabilityBadge.tsx +++ b/apps/studio/components/interfaces/ProjectHome/HighAvailabilityBadge.tsx @@ -1,9 +1,9 @@ -import { DOCS_URL } from 'lib/constants' import { ArrowRight } from 'lucide-react' import Link from 'next/link' import { cn, HoverCard, HoverCardContent, HoverCardTrigger, Separator } from 'ui' import { ServerLightGrid } from './ServerLightGrid' +import { DOCS_URL } from '@/lib/constants' interface HighAvailabilityBadgeProps { size?: 'default' | 'small' diff --git a/apps/studio/components/interfaces/ProjectHome/TopSection.tsx b/apps/studio/components/interfaces/ProjectHome/TopSection.tsx index 85eafe9f61..842e2a4c8d 100644 --- a/apps/studio/components/interfaces/ProjectHome/TopSection.tsx +++ b/apps/studio/components/interfaces/ProjectHome/TopSection.tsx @@ -1,21 +1,21 @@ import { ReactFlowProvider } from '@xyflow/react' -import { ActivityStats } from 'components/interfaces/ProjectHome/ActivityStats' -import { ProjectConnectionPopover } from 'components/interfaces/ProjectHome/ProjectConnectionPopover' -import { ProjectPausedState } from 'components/layouts/ProjectLayout/PausedState/ProjectPausedState' -import { ComputeBadgeWrapper } from 'components/ui/ComputeBadgeWrapper' -import { InlineLink } from 'components/ui/InlineLink' -import { ProjectUpgradeFailedBanner } from 'components/ui/ProjectUpgradeFailedBanner' -import { useBranchesQuery } from 'data/branches/branches-query' -import { useProjectDetailQuery } from 'data/projects/project-detail-query' -import { useResourceWarningsQuery } from 'data/usage/resource-warnings-query' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useIsOrioleDb, useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { DOCS_URL, PROJECT_STATUS } from 'lib/constants' import Link from 'next/link' import { Badge, cn, Tooltip, TooltipContent, TooltipTrigger } from 'ui' import { InstanceConfiguration } from '../Settings/Infrastructure/InfrastructureConfiguration/InstanceConfiguration' import { HighAvailabilityBadge } from './HighAvailabilityBadge' +import { ActivityStats } from '@/components/interfaces/ProjectHome/ActivityStats' +import { ProjectConnectionPopover } from '@/components/interfaces/ProjectHome/ProjectConnectionPopover' +import { ProjectPausedState } from '@/components/layouts/ProjectLayout/PausedState/ProjectPausedState' +import { ComputeBadgeWrapper } from '@/components/ui/ComputeBadgeWrapper' +import { InlineLink } from '@/components/ui/InlineLink' +import { ProjectUpgradeFailedBanner } from '@/components/ui/ProjectUpgradeFailedBanner' +import { useBranchesQuery } from '@/data/branches/branches-query' +import { useProjectDetailQuery } from '@/data/projects/project-detail-query' +import { useResourceWarningsQuery } from '@/data/usage/resource-warnings-query' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useIsOrioleDb, useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { DOCS_URL, PROJECT_STATUS } from '@/lib/constants' export const TopSection = () => { const isOrioleDb = useIsOrioleDb() diff --git a/apps/studio/components/interfaces/Storage/PublicBucketWarning.tsx b/apps/studio/components/interfaces/Storage/PublicBucketWarning.tsx index efd0c307c5..872f6366c8 100644 --- a/apps/studio/components/interfaces/Storage/PublicBucketWarning.tsx +++ b/apps/studio/components/interfaces/Storage/PublicBucketWarning.tsx @@ -1,7 +1,5 @@ import { ident } from '@supabase/pg-meta/src/pg-format' import { useMutation, useQueryClient } from '@tanstack/react-query' -import { databasePoliciesKeys } from 'data/database-policies/keys' -import { storageKeys } from 'data/storage/keys' import { useState, type ReactNode } from 'react' import { toast } from 'sonner' import { Button } from 'ui' @@ -9,7 +7,9 @@ import { Admonition } from 'ui-patterns/admonition' import { CodeBlock } from 'ui-patterns/CodeBlock' import { ConfirmationModal } from 'ui-patterns/Dialogs/ConfirmationModal' +import { databasePoliciesKeys } from '@/data/database-policies/keys' import { executeSql } from '@/data/sql/execute-sql-query' +import { storageKeys } from '@/data/storage/keys' import { usePublicBucketsWithSelectPoliciesQuery } from '@/data/storage/public-buckets-with-select-policies-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' diff --git a/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerHeader.test.tsx b/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerHeader.test.tsx index 67d9b2bb90..c0b4623d00 100644 --- a/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerHeader.test.tsx +++ b/apps/studio/components/interfaces/Storage/StorageExplorer/FileExplorerHeader.test.tsx @@ -20,17 +20,17 @@ const { mockUseStoragePreference: vi.fn(), })) -vi.mock('lib/telemetry/track', () => ({ useTrack: () => mockTrack })) -vi.mock('state/storage-explorer', () => ({ +vi.mock('@/lib/telemetry/track', () => ({ useTrack: () => mockTrack })) +vi.mock('@/state/storage-explorer', () => ({ useStorageExplorerStateSnapshot: () => mockUseStorageExplorerStateSnapshot(), })) -vi.mock('hooks/misc/useCheckPermissions', () => ({ +vi.mock('@/hooks/misc/useCheckPermissions', () => ({ useAsyncCheckPermissions: () => mockUseAsyncCheckPermissions(), })) -vi.mock('components/interfaces/App/FeaturePreview/FeaturePreviewContext', () => ({ +vi.mock('@/components/interfaces/App/FeaturePreview/FeaturePreviewContext', () => ({ useIsAPIDocsSidePanelEnabled: () => mockIsAPIDocsSidePanelEnabled(), })) -vi.mock('components/ui/APIDocsButton', () => ({ +vi.mock('@/components/ui/APIDocsButton', () => ({ APIDocsButton: () => null, })) vi.mock('./useStoragePreference', () => ({ diff --git a/apps/studio/components/interfaces/Support/__tests__/SupportFormPage.test.tsx b/apps/studio/components/interfaces/Support/__tests__/SupportFormPage.test.tsx index bdbab028ab..3c506a3c78 100644 --- a/apps/studio/components/interfaces/Support/__tests__/SupportFormPage.test.tsx +++ b/apps/studio/components/interfaces/Support/__tests__/SupportFormPage.test.tsx @@ -118,7 +118,7 @@ vi.mock('sonner', () => ({ }, })) -vi.mock('data/utils/deployment-commit-query', () => ({ +vi.mock('@/data/utils/deployment-commit-query', () => ({ useDeploymentCommitQuery: mockUseDeploymentCommitQuery, })) diff --git a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.createTable.test.ts b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.createTable.test.ts index 7cb3ff8032..2c12f1eea7 100644 --- a/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.createTable.test.ts +++ b/apps/studio/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor.utils.createTable.test.ts @@ -16,26 +16,26 @@ const mockToastError = vi.fn() const mockFetchQuery = vi.fn() // Setup mocks before imports -vi.mock('data/query-client', () => ({ +vi.mock('@/data/query-client', () => ({ getQueryClient: () => ({ fetchQuery: mockFetchQuery, }), })) -vi.mock('data/sql/execute-sql-query', () => ({ +vi.mock('@/data/sql/execute-sql-query', () => ({ executeSql: (...args: unknown[]) => mockExecuteSql(...args), })) -vi.mock('data/tables/table-retrieve-query', () => ({ +vi.mock('@/data/tables/table-retrieve-query', () => ({ getTable: (...args: unknown[]) => mockGetTable(...args), getTableQuery: (...args: unknown[]) => mockGetTable(...args), })) -vi.mock('data/telemetry/send-event-mutation', () => ({ +vi.mock('@/data/telemetry/send-event-mutation', () => ({ sendEvent: (...args: unknown[]) => mockSendEvent(...args), })) -vi.mock('data/prefetchers/project.$ref.editor.$id', () => ({ +vi.mock('@/data/prefetchers/project.$ref.editor.$id', () => ({ prefetchEditorTablePage: (...args: unknown[]) => mockPrefetchEditorTablePage(...args), })) @@ -48,7 +48,7 @@ vi.mock('sonner', () => ({ })) // Mock SparkBar component used in toast -vi.mock('components/ui/SparkBar', () => ({ +vi.mock('@/components/ui/SparkBar', () => ({ default: () => null, })) diff --git a/apps/studio/components/layouts/AccountLayout/AccountLayout.selfhosted.test.tsx b/apps/studio/components/layouts/AccountLayout/AccountLayout.selfhosted.test.tsx index 3f00bde562..b01a3e66c6 100644 --- a/apps/studio/components/layouts/AccountLayout/AccountLayout.selfhosted.test.tsx +++ b/apps/studio/components/layouts/AccountLayout/AccountLayout.selfhosted.test.tsx @@ -13,8 +13,8 @@ const { mockRouter, mockRegisterOpenMenu, mockSetMobileSheetContent } = vi.hoist mockSetMobileSheetContent: vi.fn(), })) -vi.mock('lib/constants', async () => { - const actual = await vi.importActual>('lib/constants') +vi.mock('@/lib/constants', async () => { + const actual = await vi.importActual>('@/lib/constants') return { ...actual, IS_PLATFORM: false, @@ -46,23 +46,23 @@ vi.mock('next/head', async () => { return { default: Head } }) -vi.mock('hooks/custom-content/useCustomContent', () => ({ +vi.mock('@/hooks/custom-content/useCustomContent', () => ({ useCustomContent: () => ({ appTitle: 'Supabase' }), })) -vi.mock('hooks/misc/useIsFeatureEnabled', () => ({ +vi.mock('@/hooks/misc/useIsFeatureEnabled', () => ({ useIsFeatureEnabled: () => false, })) -vi.mock('hooks/misc/useLocalStorage', () => ({ +vi.mock('@/hooks/misc/useLocalStorage', () => ({ useLocalStorageQuery: () => [''], })) -vi.mock('hooks/misc/withAuth', () => ({ +vi.mock('@/hooks/misc/withAuth', () => ({ withAuth: (Component: T) => Component, })) -vi.mock('state/app-state', () => ({ +vi.mock('@/state/app-state', () => ({ useAppStateSnapshot: () => ({ lastRouteBeforeVisitingAccountPage: '', }), diff --git a/apps/studio/components/layouts/ProjectLayout/LayoutSidebar/index.test.tsx b/apps/studio/components/layouts/ProjectLayout/LayoutSidebar/index.test.tsx index 0bf4b9597b..5f8c10f613 100644 --- a/apps/studio/components/layouts/ProjectLayout/LayoutSidebar/index.test.tsx +++ b/apps/studio/components/layouts/ProjectLayout/LayoutSidebar/index.test.tsx @@ -9,15 +9,15 @@ import { sidebarManagerState } from '@/state/sidebar-manager-state' import { render } from '@/tests/helpers' import { routerMock } from '@/tests/lib/route-mock' -vi.mock('components/ui/AIAssistantPanel/AIAssistant', () => ({ +vi.mock('@/components/ui/AIAssistantPanel/AIAssistant', () => ({ AIAssistant: () =>
AI Assistant
, })) -vi.mock('components/ui/EditorPanel/EditorPanel', () => ({ +vi.mock('@/components/ui/EditorPanel/EditorPanel', () => ({ EditorPanel: () =>
Editor Panel
, })) -vi.mock('components/ui/AdvisorPanel/AdvisorPanel', () => ({ +vi.mock('@/components/ui/AdvisorPanel/AdvisorPanel', () => ({ AdvisorPanel: () =>
Advisor Panel
, })) @@ -47,7 +47,7 @@ const mockProject = { let mockProjectData: typeof mockProject | undefined = mockProject -vi.mock('hooks/misc/useSelectedProject', () => ({ +vi.mock('@/hooks/misc/useSelectedProject', () => ({ useSelectedProjectQuery: () => { // Access the variable at runtime when the function is called return { @@ -56,7 +56,7 @@ vi.mock('hooks/misc/useSelectedProject', () => ({ }, })) -vi.mock('hooks/misc/useSelectedOrganization', () => ({ +vi.mock('@/hooks/misc/useSelectedOrganization', () => ({ useSelectedOrganizationQuery: () => ({ data: { id: 1, @@ -79,7 +79,7 @@ vi.mock('hooks/misc/useSelectedOrganization', () => ({ }), })) -vi.mock('data/telemetry/send-event-mutation', () => ({ +vi.mock('@/data/telemetry/send-event-mutation', () => ({ useSendEventMutation: () => ({ mutate: vi.fn(), }), diff --git a/apps/studio/components/layouts/ProjectLayout/index.test.tsx b/apps/studio/components/layouts/ProjectLayout/index.test.tsx index 76125dc25a..d65edfe1d7 100644 --- a/apps/studio/components/layouts/ProjectLayout/index.test.tsx +++ b/apps/studio/components/layouts/ProjectLayout/index.test.tsx @@ -166,7 +166,7 @@ vi.mock('@/components/ui/BannerStack/Banners/BannerFreeMicroUpgrade', () => ({ BannerFreeMicroUpgrade: () => null, })) -vi.mock('data/usage/resource-warnings-query', () => ({ +vi.mock('@/data/usage/resource-warnings-query', () => ({ useResourceWarningsQuery: () => ({ data: mockResourceWarningsState.current }), })) diff --git a/apps/studio/components/layouts/ProjectLayout/index.tsx b/apps/studio/components/layouts/ProjectLayout/index.tsx index 535bbcc173..67cb820ec9 100644 --- a/apps/studio/components/layouts/ProjectLayout/index.tsx +++ b/apps/studio/components/layouts/ProjectLayout/index.tsx @@ -1,5 +1,4 @@ import { LOCAL_STORAGE_KEYS, mergeRefs, useParams } from 'common' -import { useResourceWarningsQuery } from 'data/usage/resource-warnings-query' import { AnimatePresence, motion } from 'framer-motion' import Head from 'next/head' import { useRouter } from 'next/router' @@ -42,6 +41,7 @@ import { ProjectAPIDocs } from '@/components/interfaces/ProjectAPIDocs/ProjectAP import { BannerFreeMicroUpgrade } from '@/components/ui/BannerStack/Banners/BannerFreeMicroUpgrade' import { BANNER_ID, useBannerStack } from '@/components/ui/BannerStack/BannerStackProvider' import { ResourceExhaustionWarningBanner } from '@/components/ui/ResourceExhaustionWarningBanner/ResourceExhaustionWarningBanner' +import { useResourceWarningsQuery } from '@/data/usage/resource-warnings-query' import { useCustomContent } from '@/hooks/custom-content/useCustomContent' import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' diff --git a/apps/studio/components/layouts/ProjectSettingsLayout/SettingsMenu.selfhosted.test.tsx b/apps/studio/components/layouts/ProjectSettingsLayout/SettingsMenu.selfhosted.test.tsx index ff16183f52..da0d4a6ae0 100644 --- a/apps/studio/components/layouts/ProjectSettingsLayout/SettingsMenu.selfhosted.test.tsx +++ b/apps/studio/components/layouts/ProjectSettingsLayout/SettingsMenu.selfhosted.test.tsx @@ -3,8 +3,8 @@ import { describe, expect, it, vi } from 'vitest' import { useGenerateSettingsMenu } from './SettingsMenu.utils' -vi.mock('lib/constants', async () => { - const actual = await vi.importActual>('lib/constants') +vi.mock('@/lib/constants', async () => { + const actual = await vi.importActual>('@/lib/constants') return { ...actual, IS_PLATFORM: false, diff --git a/apps/studio/components/layouts/ProjectSettingsLayout/SettingsMenu.utils.test.tsx b/apps/studio/components/layouts/ProjectSettingsLayout/SettingsMenu.utils.test.tsx index 6d711333cb..5c6b9590a8 100644 --- a/apps/studio/components/layouts/ProjectSettingsLayout/SettingsMenu.utils.test.tsx +++ b/apps/studio/components/layouts/ProjectSettingsLayout/SettingsMenu.utils.test.tsx @@ -5,8 +5,8 @@ import { describe, expect, it, vi } from 'vitest' import { useGenerateSettingsMenu } from './SettingsMenu.utils' import { useIsPlatformWebhooksEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' -vi.mock('lib/constants', async () => { - const actual = await vi.importActual>('lib/constants') +vi.mock('@/lib/constants', async () => { + const actual = await vi.importActual>('@/lib/constants') return { ...actual, IS_PLATFORM: true, diff --git a/apps/studio/components/layouts/editors/EditorBaseLayout.test.tsx b/apps/studio/components/layouts/editors/EditorBaseLayout.test.tsx index 30fb150181..78a6291d4c 100644 --- a/apps/studio/components/layouts/editors/EditorBaseLayout.test.tsx +++ b/apps/studio/components/layouts/editors/EditorBaseLayout.test.tsx @@ -32,7 +32,7 @@ vi.mock('next/navigation', () => ({ usePathname: () => '/project/default/editor/1', })) -vi.mock('state/tabs', () => ({ +vi.mock('@/state/tabs', () => ({ useTabsStateSnapshot: () => mockTabsState, })) diff --git a/apps/studio/components/ui/AIEditor/index.tsx b/apps/studio/components/ui/AIEditor/index.tsx index f04d8c2636..8c7fcfad7b 100644 --- a/apps/studio/components/ui/AIEditor/index.tsx +++ b/apps/studio/components/ui/AIEditor/index.tsx @@ -207,14 +207,14 @@ export const AIEditor = ({ if (language === 'javascript' || language === 'typescript') { // The Deno libs are loaded as a raw text via raw-loader in next.config.js. They're passed as raw text to the // Monaco editor. - import('public/deno/edge-runtime.d.ts' as string) + import('@/public/deno/edge-runtime.d.ts' as string) .then((module) => { monaco.languages.typescript.typescriptDefaults.addExtraLib(module.default) }) .catch((error) => { console.error('Failed to load Deno edge-runtime typings:', error) }) - import('public/deno/lib.deno.d.ts' as string) + import('@/public/deno/lib.deno.d.ts' as string) .then((module) => { monaco.languages.typescript.typescriptDefaults.addExtraLib(module.default) }) diff --git a/apps/studio/components/ui/BannerStack/Banners/BannerFreeMicroUpgrade.tsx b/apps/studio/components/ui/BannerStack/Banners/BannerFreeMicroUpgrade.tsx index 2c804072c5..cda80b0c32 100644 --- a/apps/studio/components/ui/BannerStack/Banners/BannerFreeMicroUpgrade.tsx +++ b/apps/studio/components/ui/BannerStack/Banners/BannerFreeMicroUpgrade.tsx @@ -1,14 +1,14 @@ import { LOCAL_STORAGE_KEYS } from 'common' import { useParams } from 'common/hooks' -import { ChevronsUpAnimated } from 'components/ui/ComputeBadgeWrapper' -import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' -import { useTrack } from 'lib/telemetry/track' import Link from 'next/link' import { Button } from 'ui' import { ComputeBadge } from 'ui-patterns/ComputeBadge' import { BannerCard } from '../BannerCard' import { BANNER_ID, useBannerStack } from '../BannerStackProvider' +import { ChevronsUpAnimated } from '@/components/ui/ComputeBadgeWrapper' +import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' +import { useTrack } from '@/lib/telemetry/track' export const BannerFreeMicroUpgrade = () => { const { ref } = useParams() diff --git a/apps/studio/components/ui/ComputeBadgeWrapper.tsx b/apps/studio/components/ui/ComputeBadgeWrapper.tsx index 1c3c69ef1c..b999890eea 100644 --- a/apps/studio/components/ui/ComputeBadgeWrapper.tsx +++ b/apps/studio/components/ui/ComputeBadgeWrapper.tsx @@ -1,18 +1,19 @@ -import { getAddons } from 'components/interfaces/Billing/Subscription/Subscription.utils' -import { ProjectDetail } from 'data/projects/project-detail-query' -import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' -import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query' -import { ProjectAddonVariantMeta } from 'data/subscriptions/types' -import { ResourceWarning } from 'data/usage/resource-warnings-query' -import { getCloudProviderArchitecture } from 'lib/cloudprovider-utils' -import { INSTANCE_MICRO_SPECS } from 'lib/constants' -import { useTrack } from 'lib/telemetry/track' import Link from 'next/link' import { useState } from 'react' import { Button, cn, HoverCard, HoverCardContent, HoverCardTrigger, Separator } from 'ui' import { ComputeBadge } from 'ui-patterns/ComputeBadge' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' +import { getAddons } from '@/components/interfaces/Billing/Subscription/Subscription.utils' +import { ProjectDetail } from '@/data/projects/project-detail-query' +import { useOrgSubscriptionQuery } from '@/data/subscriptions/org-subscription-query' +import { useProjectAddonsQuery } from '@/data/subscriptions/project-addons-query' +import { ProjectAddonVariantMeta } from '@/data/subscriptions/types' +import { ResourceWarning } from '@/data/usage/resource-warnings-query' +import { getCloudProviderArchitecture } from '@/lib/cloudprovider-utils' +import { INSTANCE_MICRO_SPECS } from '@/lib/constants' +import { useTrack } from '@/lib/telemetry/track' + export const ChevronsUpAnimated = () => ( ({ +vi.mock('@/data/fetchers', () => ({ get: vi.fn(), handleError: vi.fn((error) => { throw error @@ -46,7 +46,7 @@ describe('org-daily-stats-query', () => { }) it('calls API with correct parameters including project_ref', async () => { - const { get } = await import('data/fetchers') + const { get } = await import('@/data/fetchers') const mockGet = get as unknown as ReturnType const mockResponse = { usages: [] } @@ -76,7 +76,7 @@ describe('org-daily-stats-query', () => { }) it('calls API without project_ref when not provided', async () => { - const { get } = await import('data/fetchers') + const { get } = await import('@/data/fetchers') const mockGet = get as unknown as ReturnType const mockResponse = { usages: [] } @@ -104,7 +104,7 @@ describe('org-daily-stats-query', () => { }) it('handles API errors correctly', async () => { - const { get, handleError } = await import('data/fetchers') + const { get, handleError } = await import('@/data/fetchers') const mockGet = get as unknown as ReturnType const mockHandleError = handleError as unknown as ReturnType diff --git a/apps/studio/data/edge-functions/edge-functions-last-hour-stats-query.test.ts b/apps/studio/data/edge-functions/edge-functions-last-hour-stats-query.test.ts index 7cc8be86b1..9ab03297e9 100644 --- a/apps/studio/data/edge-functions/edge-functions-last-hour-stats-query.test.ts +++ b/apps/studio/data/edge-functions/edge-functions-last-hour-stats-query.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { getEdgeFunctionsLastHourStats } from './edge-functions-last-hour-stats-query' import { post } from '@/data/fetchers' -vi.mock('data/fetchers', () => ({ +vi.mock('@/data/fetchers', () => ({ post: vi.fn(), handleError: vi.fn(), })) diff --git a/apps/studio/data/handleError.test.ts b/apps/studio/data/handleError.test.ts index 4eb1fe0cb4..7bed59443d 100644 --- a/apps/studio/data/handleError.test.ts +++ b/apps/studio/data/handleError.test.ts @@ -5,8 +5,8 @@ import { ResponseError } from '@/types/base' vi.mock('@sentry/nextjs', () => ({ captureException: vi.fn() })) vi.mock('common', () => ({ IS_PLATFORM: false, getAccessToken: vi.fn() })) -vi.mock('lib/constants', () => ({ API_URL: 'http://localhost' })) -vi.mock('lib/helpers', () => ({ uuidv4: () => 'test-uuid' })) +vi.mock('@/lib/constants', () => ({ API_URL: 'http://localhost' })) +vi.mock('@/lib/helpers', () => ({ uuidv4: () => 'test-uuid' })) // Import after mocks are set up const { handleError } = await import('./fetchers') diff --git a/apps/studio/data/lint/lint-query.ts b/apps/studio/data/lint/lint-query.ts index caabf030d5..06280a2307 100644 --- a/apps/studio/data/lint/lint-query.ts +++ b/apps/studio/data/lint/lint-query.ts @@ -1,9 +1,9 @@ import { useQuery } from '@tanstack/react-query' import { components } from 'api-types' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { lintKeys } from './keys' import { get, handleError } from '@/data/fetchers' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' import { PROJECT_STATUS } from '@/lib/constants' import type { ResponseError, UseCustomQueryOptions } from '@/types' diff --git a/apps/studio/data/sso/sso-config-query.ts b/apps/studio/data/sso/sso-config-query.ts index 421eec5143..070d99f54d 100644 --- a/apps/studio/data/sso/sso-config-query.ts +++ b/apps/studio/data/sso/sso-config-query.ts @@ -1,8 +1,8 @@ import { useQuery } from '@tanstack/react-query' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import { orgSSOKeys } from './keys' import { get, handleError } from '@/data/fetchers' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' import { IS_PLATFORM } from '@/lib/constants' import type { ResponseError, UseCustomQueryOptions } from '@/types' diff --git a/apps/studio/data/storage/public-buckets-with-select-policies-query.ts b/apps/studio/data/storage/public-buckets-with-select-policies-query.ts index 2fd5a74dfe..b661ab5052 100644 --- a/apps/studio/data/storage/public-buckets-with-select-policies-query.ts +++ b/apps/studio/data/storage/public-buckets-with-select-policies-query.ts @@ -1,11 +1,11 @@ import { literal } from '@supabase/pg-meta/src/pg-format' import { useQuery } from '@tanstack/react-query' -import { executeSql } from 'data/sql/execute-sql-query' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { PROJECT_STATUS } from 'lib/constants' -import type { ResponseError, UseCustomQueryOptions } from 'types' import { storageKeys } from './keys' +import { executeSql } from '@/data/sql/execute-sql-query' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { PROJECT_STATUS } from '@/lib/constants' +import type { ResponseError, UseCustomQueryOptions } from '@/types' export type PublicBucketsWithSelectPoliciesVariables = { projectRef?: string diff --git a/apps/studio/data/tables/table-names-query.ts b/apps/studio/data/tables/table-names-query.ts index 6142ff3bcb..a55053bf4e 100644 --- a/apps/studio/data/tables/table-names-query.ts +++ b/apps/studio/data/tables/table-names-query.ts @@ -1,8 +1,8 @@ import { useQuery } from '@tanstack/react-query' -import type { UseCustomQueryOptions } from 'types' import { executeSql, ExecuteSqlError } from '../sql/execute-sql-query' import { tableKeys } from './keys' +import type { UseCustomQueryOptions } from '@/types' export type TableName = { id: number diff --git a/apps/studio/data/usage/org-usage-query.test.ts b/apps/studio/data/usage/org-usage-query.test.ts index 2583a102df..80efdaff7f 100644 --- a/apps/studio/data/usage/org-usage-query.test.ts +++ b/apps/studio/data/usage/org-usage-query.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { getOrgUsage } from './org-usage-query' -vi.mock('data/fetchers', () => ({ +vi.mock('@/data/fetchers', () => ({ get: vi.fn(), handleError: vi.fn((error) => { throw error @@ -20,7 +20,7 @@ describe('org-usage-query', () => { }) it('calls API with correct parameters including project_ref', async () => { - const { get } = await import('data/fetchers') + const { get } = await import('@/data/fetchers') const mockGet = get as unknown as ReturnType const mockResponse = { usages: [] } @@ -53,7 +53,7 @@ describe('org-usage-query', () => { }) it('calls API without project_ref when projectRef is null', async () => { - const { get } = await import('data/fetchers') + const { get } = await import('@/data/fetchers') const mockGet = get as unknown as ReturnType const mockResponse = { usages: [] } @@ -80,7 +80,7 @@ describe('org-usage-query', () => { }) it('calls API without date params when start and end are undefined', async () => { - const { get } = await import('data/fetchers') + const { get } = await import('@/data/fetchers') const mockGet = get as unknown as ReturnType const mockResponse = { usages: [] } @@ -106,7 +106,7 @@ describe('org-usage-query', () => { }) it('handles API errors correctly', async () => { - const { get, handleError } = await import('data/fetchers') + const { get, handleError } = await import('@/data/fetchers') const mockGet = get as unknown as ReturnType const mockHandleError = handleError as unknown as ReturnType diff --git a/apps/studio/evals/assistant.eval.ts b/apps/studio/evals/assistant.eval.ts index 9e4babf6e1..ecfbeb52a5 100644 --- a/apps/studio/evals/assistant.eval.ts +++ b/apps/studio/evals/assistant.eval.ts @@ -1,9 +1,5 @@ import assert from 'node:assert' import { Eval } from 'braintrust' -import { getModel } from 'lib/ai/model' -import { DEFAULT_ASSISTANT_BASE_MODEL_ID, getAssistantModelEntry } from 'lib/ai/model.utils' -import { generateAssistantResponse } from 'lib/ai/generate-assistant-response' -import { getMockTools } from 'lib/ai/tools/mock-tools' import { dataset } from './dataset' import { buildAssistantEvalOutput } from './output' @@ -18,6 +14,10 @@ import { urlValidityScorer, } from './scorer' import { sqlIdentifierQuotingScorer, sqlSyntaxScorer } from './scorer-wasm' +import { generateAssistantResponse } from '@/lib/ai/generate-assistant-response' +import { getModel } from '@/lib/ai/model' +import { DEFAULT_ASSISTANT_BASE_MODEL_ID, getAssistantModelEntry } from '@/lib/ai/model.utils' +import { getMockTools } from '@/lib/ai/tools/mock-tools' assert(process.env.BRAINTRUST_PROJECT_ID, 'BRAINTRUST_PROJECT_ID is not set') assert(process.env.OPENAI_API_KEY, 'OPENAI_API_KEY is not set') diff --git a/apps/studio/evals/output.ts b/apps/studio/evals/output.ts index 6c2518b83d..6078a1996c 100644 --- a/apps/studio/evals/output.ts +++ b/apps/studio/evals/output.ts @@ -1,4 +1,5 @@ import { type ToolSet, type TypedToolCall, type TypedToolResult } from 'ai' + import { type AssistantEvalOutput } from './scorer' type Step = { diff --git a/apps/studio/evals/scorer-wasm.ts b/apps/studio/evals/scorer-wasm.ts index 76686b9125..c7ead5cffd 100644 --- a/apps/studio/evals/scorer-wasm.ts +++ b/apps/studio/evals/scorer-wasm.ts @@ -1,8 +1,8 @@ import { EvalScorer } from 'braintrust' -import { extractIdentifiers, isQuotedInSql, needsQuoting } from 'lib/sql-identifier-quoting' import { parse } from 'libpg-query' import { AssistantEvalInput, AssistantEvalOutput, Expected } from './scorer' +import { extractIdentifiers, isQuotedInSql, needsQuoting } from '@/lib/sql-identifier-quoting' export const sqlSyntaxScorer: EvalScorer< AssistantEvalInput, diff --git a/apps/studio/evals/scorer.ts b/apps/studio/evals/scorer.ts index 7f4d8d30e5..b989199e28 100644 --- a/apps/studio/evals/scorer.ts +++ b/apps/studio/evals/scorer.ts @@ -2,7 +2,8 @@ import { FinishReason } from 'ai' import { LLMClassifierFromTemplate } from 'autoevals' import { EvalCase, EvalScorer } from 'braintrust' import { stripIndent } from 'common-tags' -import { extractUrls } from 'lib/helpers' + +import { extractUrls } from '@/lib/helpers' const LLM_AS_A_JUDGE_MODEL = 'gpt-5.2' // NOTE: `gpt-5.2-2025-12-11` snapshot not yet working with online scorers diff --git a/apps/studio/instrumentation-client.ts b/apps/studio/instrumentation-client.ts index 61de60dd54..300a361c85 100644 --- a/apps/studio/instrumentation-client.ts +++ b/apps/studio/instrumentation-client.ts @@ -5,8 +5,9 @@ import * as Sentry from '@sentry/nextjs' import { hasConsented } from 'common' import { IS_PLATFORM } from 'common/constants/environment' -import { MIRRORED_BREADCRUMBS } from 'lib/breadcrumbs' -import { sanitizeArrayOfObjects, sanitizeUrlHashParams } from 'lib/sanitize' + +import { MIRRORED_BREADCRUMBS } from '@/lib/breadcrumbs' +import { sanitizeArrayOfObjects, sanitizeUrlHashParams } from '@/lib/sanitize' const DEFAULT_ERROR_SAMPLE_RATE = 1.0 const LOW_PRIORITY_ERROR_SAMPLE_RATE = 0.01 diff --git a/apps/studio/lib/ai/ai-details.test.ts b/apps/studio/lib/ai/ai-details.test.ts index b1a2b8f037..a3236a99b6 100644 --- a/apps/studio/lib/ai/ai-details.test.ts +++ b/apps/studio/lib/ai/ai-details.test.ts @@ -2,35 +2,35 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { getOrgAIDetails, getProjectAIDetails } from './ai-details' -vi.mock('data/organizations/organizations-query', () => ({ +vi.mock('@/data/organizations/organizations-query', () => ({ getOrganizations: vi.fn(), })) -vi.mock('data/projects/project-detail-query', () => ({ +vi.mock('@/data/projects/project-detail-query', () => ({ getProjectDetail: vi.fn(), })) -vi.mock('data/subscriptions/org-subscription-query', () => ({ +vi.mock('@/data/subscriptions/org-subscription-query', () => ({ getOrgSubscription: vi.fn(), })) -vi.mock('data/config/project-settings-v2-query', () => ({ +vi.mock('@/data/config/project-settings-v2-query', () => ({ getProjectSettings: vi.fn(), })) -vi.mock('hooks/misc/useOrgOptedIntoAi', () => ({ +vi.mock('@/hooks/misc/useOrgOptedIntoAi', () => ({ getAiOptInLevel: vi.fn(), })) -vi.mock('components/interfaces/Billing/Subscription/Subscription.utils', () => ({ +vi.mock('@/components/interfaces/Billing/Subscription/Subscription.utils', () => ({ subscriptionHasHipaaAddon: vi.fn(), })) -vi.mock('data/entitlements/entitlements-query', () => ({ +vi.mock('@/data/entitlements/entitlements-query', () => ({ checkEntitlement: vi.fn(), })) -vi.mock('data/fetchers', () => ({ +vi.mock('@/data/fetchers', () => ({ get: vi.fn(), })) @@ -48,13 +48,13 @@ describe('getOrgAIDetails', () => { beforeEach(async () => { vi.clearAllMocks() - const orgsQuery = await import('data/organizations/organizations-query') - const subscriptionQuery = await import('data/subscriptions/org-subscription-query') - const aiHook = await import('hooks/misc/useOrgOptedIntoAi') + const orgsQuery = await import('@/data/organizations/organizations-query') + const subscriptionQuery = await import('@/data/subscriptions/org-subscription-query') + const aiHook = await import('@/hooks/misc/useOrgOptedIntoAi') const subscriptionUtils = - await import('components/interfaces/Billing/Subscription/Subscription.utils') - const entitlementsQuery = await import('data/entitlements/entitlements-query') - const fetchers = await import('data/fetchers') + await import('@/components/interfaces/Billing/Subscription/Subscription.utils') + const entitlementsQuery = await import('@/data/entitlements/entitlements-query') + const fetchers = await import('@/data/fetchers') mockGetOrganizations = vi.mocked(orgsQuery.getOrganizations) mockGetOrgSubscription = vi.mocked(subscriptionQuery.getOrgSubscription) @@ -180,8 +180,8 @@ describe('getProjectAIDetails', () => { beforeEach(async () => { vi.clearAllMocks() - const projectQuery = await import('data/projects/project-detail-query') - const settingsQuery = await import('data/config/project-settings-v2-query') + const projectQuery = await import('@/data/projects/project-detail-query') + const settingsQuery = await import('@/data/config/project-settings-v2-query') mockGetProjectDetail = vi.mocked(projectQuery.getProjectDetail) mockGetProjectSettings = vi.mocked(settingsQuery.getProjectSettings) diff --git a/apps/studio/lib/ai/ai-details.ts b/apps/studio/lib/ai/ai-details.ts index e467ef07d5..4b236d2526 100644 --- a/apps/studio/lib/ai/ai-details.ts +++ b/apps/studio/lib/ai/ai-details.ts @@ -1,11 +1,11 @@ -import { subscriptionHasHipaaAddon } from 'components/interfaces/Billing/Subscription/Subscription.utils' -import { getProjectSettings } from 'data/config/project-settings-v2-query' -import { checkEntitlement } from 'data/entitlements/entitlements-query' -import { get } from 'data/fetchers' -import { getOrganizations } from 'data/organizations/organizations-query' -import { getProjectDetail } from 'data/projects/project-detail-query' -import { getOrgSubscription } from 'data/subscriptions/org-subscription-query' -import { getAiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' +import { subscriptionHasHipaaAddon } from '@/components/interfaces/Billing/Subscription/Subscription.utils' +import { getProjectSettings } from '@/data/config/project-settings-v2-query' +import { checkEntitlement } from '@/data/entitlements/entitlements-query' +import { get } from '@/data/fetchers' +import { getOrganizations } from '@/data/organizations/organizations-query' +import { getProjectDetail } from '@/data/projects/project-detail-query' +import { getOrgSubscription } from '@/data/subscriptions/org-subscription-query' +import { getAiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' export const getOrgAIDetails = async ({ orgSlug, diff --git a/apps/studio/lib/ai/bedrock.ts b/apps/studio/lib/ai/bedrock.ts index e080768621..ee6ce174df 100644 --- a/apps/studio/lib/ai/bedrock.ts +++ b/apps/studio/lib/ai/bedrock.ts @@ -1,10 +1,11 @@ import { createAmazonBedrock } from '@ai-sdk/amazon-bedrock' -import { LanguageModel } from 'ai' import { createCredentialChain, fromNodeProviderChain } from '@aws-sdk/credential-providers' import { CredentialsProviderError } from '@smithy/property-provider' import { awsCredentialsProvider } from '@vercel/functions/oidc' -import { selectWeightedKey } from './util' +import { LanguageModel } from 'ai' + import { BedrockModel } from './model.utils' +import { selectWeightedKey } from './util' const credentialProvider = createCredentialChain( // Vercel OIDC provider will be used for staging/production diff --git a/apps/studio/lib/ai/generate-assistant-response.ts b/apps/studio/lib/ai/generate-assistant-response.ts index 558f67ac5b..d9a8d4c556 100644 --- a/apps/studio/lib/ai/generate-assistant-response.ts +++ b/apps/studio/lib/ai/generate-assistant-response.ts @@ -10,12 +10,13 @@ import { } from 'ai' import { startSpan, traced, withCurrent, wrapAISDK, type Span } from 'braintrust' import { source } from 'common-tags' -import { buildAssistantEvalOutput } from 'evals/output' -import type { AssistantEvalInput, AssistantEvalOutput } from 'evals/scorer' -import type { AiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' -import { IS_TRACING_ENABLED } from 'lib/ai/braintrust-logger' -import { CHAT_PROMPT, GENERAL_PROMPT, LIMITATIONS_PROMPT, SECURITY_PROMPT } from 'lib/ai/prompts' -import { sanitizeMessagePart } from 'lib/ai/tools/tool-sanitizer' + +import { buildAssistantEvalOutput } from '@/evals/output' +import type { AssistantEvalInput, AssistantEvalOutput } from '@/evals/scorer' +import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' +import { IS_TRACING_ENABLED } from '@/lib/ai/braintrust-logger' +import { CHAT_PROMPT, GENERAL_PROMPT, LIMITATIONS_PROMPT, SECURITY_PROMPT } from '@/lib/ai/prompts' +import { sanitizeMessagePart } from '@/lib/ai/tools/tool-sanitizer' const { streamText: tracedStreamText } = wrapAISDK(ai) diff --git a/apps/studio/lib/ai/model.test.ts b/apps/studio/lib/ai/model.test.ts index 64f76f95e7..ffa5bb4976 100644 --- a/apps/studio/lib/ai/model.test.ts +++ b/apps/studio/lib/ai/model.test.ts @@ -1,5 +1,6 @@ import { openai } from '@ai-sdk/openai' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + import * as bedrockModule from './bedrock' import { getModel } from './model' import { DEFAULT_COMPLETION_MODEL, openaiModelEntry } from './model.utils' diff --git a/apps/studio/lib/ai/supabase-mcp.ts b/apps/studio/lib/ai/supabase-mcp.ts index 4c22a24681..f9f4d56a33 100644 --- a/apps/studio/lib/ai/supabase-mcp.ts +++ b/apps/studio/lib/ai/supabase-mcp.ts @@ -1,9 +1,9 @@ +import { createMCPClient } from '@ai-sdk/mcp' import { createSupabaseMcpServer } from '@supabase/mcp-server-supabase' import { createSupabaseApiPlatform } from '@supabase/mcp-server-supabase/platform/api' import { StreamTransport } from '@supabase/mcp-utils' -import { createMCPClient } from '@ai-sdk/mcp' -import { API_URL } from 'lib/constants' +import { API_URL } from '@/lib/constants' export async function createSupabaseMCPClient({ accessToken, diff --git a/apps/studio/lib/ai/tool-filter.test.ts b/apps/studio/lib/ai/tool-filter.test.ts index fbfbe60519..47e93de82e 100644 --- a/apps/studio/lib/ai/tool-filter.test.ts +++ b/apps/studio/lib/ai/tool-filter.test.ts @@ -3,10 +3,10 @@ import { describe, expect, it, vitest } from 'vitest' import { z } from 'zod' import { + createPrivacyMessageTool, + filterToolsByOptInLevel, TOOL_CATEGORIES, TOOL_CATEGORY_MAP, - filterToolsByOptInLevel, - createPrivacyMessageTool, toolSetValidationSchema, } from './tool-filter' diff --git a/apps/studio/lib/ai/tool-filter.ts b/apps/studio/lib/ai/tool-filter.ts index bcef7b6d75..d5f0d1b58a 100644 --- a/apps/studio/lib/ai/tool-filter.ts +++ b/apps/studio/lib/ai/tool-filter.ts @@ -1,8 +1,7 @@ import type { Tool, ToolSet } from 'ai' import { z } from 'zod' -// End of third-party imports -import type { AiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' +import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' // Add the DatabaseExtension type import export type DatabaseExtension = { diff --git a/apps/studio/lib/ai/tools/fallback-tools.ts b/apps/studio/lib/ai/tools/fallback-tools.ts index 1c90cdfffb..6e02bdbe5e 100644 --- a/apps/studio/lib/ai/tools/fallback-tools.ts +++ b/apps/studio/lib/ai/tools/fallback-tools.ts @@ -3,12 +3,13 @@ import { tool } from 'ai' // import { processSql, renderSupabaseJs } from '@supabase/sql-to-rest' import { IS_PLATFORM } from 'common' import { stripIndent } from 'common-tags' -import { getDatabaseFunctions } from 'data/database-functions/database-functions-query' -import { getDatabasePolicies } from 'data/database-policies/database-policies-query' -import { executeSql } from 'data/sql/execute-sql-query' -import { executeQuery } from 'lib/api/self-hosted/query' import { z } from 'zod' +import { getDatabaseFunctions } from '@/data/database-functions/database-functions-query' +import { getDatabasePolicies } from '@/data/database-policies/database-policies-query' +import { executeSql } from '@/data/sql/execute-sql-query' +import { executeQuery } from '@/lib/api/self-hosted/query' + export const getFallbackTools = ({ projectRef, connectionString, diff --git a/apps/studio/lib/ai/tools/incident-tools.ts b/apps/studio/lib/ai/tools/incident-tools.ts index 19ab94ab77..2275b8ef5a 100644 --- a/apps/studio/lib/ai/tools/incident-tools.ts +++ b/apps/studio/lib/ai/tools/incident-tools.ts @@ -1,8 +1,8 @@ import { tool } from 'ai' +import { IS_PLATFORM } from 'common' import { z } from 'zod' -import { IS_PLATFORM } from 'common' -import type { IncidentInfo } from 'lib/api/incident-status' +import type { IncidentInfo } from '@/lib/api/incident-status' /** * Creates incident-related tools for the AI assistant. diff --git a/apps/studio/lib/ai/tools/index.ts b/apps/studio/lib/ai/tools/index.ts index 2a8d305994..f84abf8c1a 100644 --- a/apps/studio/lib/ai/tools/index.ts +++ b/apps/studio/lib/ai/tools/index.ts @@ -1,12 +1,13 @@ -import { AiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' -import { filterToolsByOptInLevel } from '../tool-filter' -import { getFallbackTools } from './fallback-tools' import { ToolSet } from 'ai' import { IS_PLATFORM } from 'common' + +import { filterToolsByOptInLevel } from '../tool-filter' +import { getFallbackTools } from './fallback-tools' import { getIncidentTools } from './incident-tools' import { getMcpTools } from './mcp-tools' import { getSchemaTools } from './schema-tools' import { getStudioTools } from './studio-tools' +import { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' export const getTools = async ({ projectRef, diff --git a/apps/studio/lib/ai/tools/mcp-tools.ts b/apps/studio/lib/ai/tools/mcp-tools.ts index 4579d906d2..3ccfcc9c99 100644 --- a/apps/studio/lib/ai/tools/mcp-tools.ts +++ b/apps/studio/lib/ai/tools/mcp-tools.ts @@ -1,9 +1,8 @@ import type { ToolSet } from 'ai' -// End of third-party imports -import type { AiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' import { createSupabaseMCPClient } from '../supabase-mcp' import { filterToolsByOptInLevel, toolSetValidationSchema } from '../tool-filter' +import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' const UI_EXECUTED_TOOLS = ['execute_sql', 'deploy_edge_function'] diff --git a/apps/studio/lib/ai/tools/mock-tools.ts b/apps/studio/lib/ai/tools/mock-tools.ts index c819577798..ce45086323 100644 --- a/apps/studio/lib/ai/tools/mock-tools.ts +++ b/apps/studio/lib/ai/tools/mock-tools.ts @@ -1,8 +1,9 @@ -import { tool, type ToolSet } from 'ai' -import { getStudioTools } from '../tools/studio-tools' -import { z } from 'zod' -import { getMcpTools } from 'lib/ai/tools/mcp-tools' import assert from 'node:assert' +import { tool, type ToolSet } from 'ai' +import { z } from 'zod' + +import { getStudioTools } from '../tools/studio-tools' +import { getMcpTools } from '@/lib/ai/tools/mcp-tools' const listTablesInputSchema = z.object({ schemas: z.array(z.string()).describe('The schema names to list.'), diff --git a/apps/studio/lib/ai/tools/schema-tools.ts b/apps/studio/lib/ai/tools/schema-tools.ts index 267dcc73b8..6de53ab782 100644 --- a/apps/studio/lib/ai/tools/schema-tools.ts +++ b/apps/studio/lib/ai/tools/schema-tools.ts @@ -1,7 +1,8 @@ import { tool } from 'ai' -import { getDatabasePolicies } from 'data/database-policies/database-policies-query' import { z } from 'zod' +import { getDatabasePolicies } from '@/data/database-policies/database-policies-query' + export const getSchemaTools = ({ projectRef, connectionString, diff --git a/apps/studio/lib/ai/tools/studio-tools.ts b/apps/studio/lib/ai/tools/studio-tools.ts index ce97d01130..8034025fad 100644 --- a/apps/studio/lib/ai/tools/studio-tools.ts +++ b/apps/studio/lib/ai/tools/studio-tools.ts @@ -1,12 +1,13 @@ import { tool } from 'ai' +import { z } from 'zod' + import { EDGE_FUNCTION_PROMPT, PG_BEST_PRACTICES, REALTIME_PROMPT, RLS_PROMPT, -} from 'lib/ai/prompts' -import { fixSqlBackslashEscapes } from 'lib/ai/util' -import { z } from 'zod' +} from '@/lib/ai/prompts' +import { fixSqlBackslashEscapes } from '@/lib/ai/util' const KNOWLEDGE = { pg_best_practices: PG_BEST_PRACTICES, diff --git a/apps/studio/lib/ai/tools/tool-sanitizer.test.ts b/apps/studio/lib/ai/tools/tool-sanitizer.test.ts index c8c7600b7a..43ecfcc78f 100644 --- a/apps/studio/lib/ai/tools/tool-sanitizer.test.ts +++ b/apps/studio/lib/ai/tools/tool-sanitizer.test.ts @@ -1,5 +1,6 @@ import type { ToolUIPart } from 'ai' import { describe, expect, test } from 'vitest' + // End of third-party imports import { prepareMessagesForAPI } from '../message-utils' diff --git a/apps/studio/lib/ai/tools/tool-sanitizer.ts b/apps/studio/lib/ai/tools/tool-sanitizer.ts index 9ea3d5c255..1f277dc49a 100644 --- a/apps/studio/lib/ai/tools/tool-sanitizer.ts +++ b/apps/studio/lib/ai/tools/tool-sanitizer.ts @@ -1,8 +1,7 @@ import type { ToolUIPart, UIMessage } from 'ai' -// End of third-party imports -import type { AiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' import type { ToolName } from '../tool-filter' +import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' interface ToolSanitizer { toolName: ToolName diff --git a/apps/studio/lib/ai/util.test.ts b/apps/studio/lib/ai/util.test.ts index a879ea4251..219cc576e2 100644 --- a/apps/studio/lib/ai/util.test.ts +++ b/apps/studio/lib/ai/util.test.ts @@ -1,4 +1,5 @@ -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + import { fixSqlBackslashEscapes, selectWeightedKey } from './util' describe('fixSqlBackslashEscapes', () => { diff --git a/apps/studio/lib/api/apiAuthenticate.test.ts b/apps/studio/lib/api/apiAuthenticate.test.ts index 5ca4667664..83fa5ecfd4 100644 --- a/apps/studio/lib/api/apiAuthenticate.test.ts +++ b/apps/studio/lib/api/apiAuthenticate.test.ts @@ -1,4 +1,5 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' + import { apiAuthenticate } from './apiAuthenticate' const mocks = vi.hoisted(() => { @@ -13,7 +14,7 @@ const mocks = vi.hoisted(() => { } }) -vi.mock('lib/gotrue', () => ({ +vi.mock('@/lib/gotrue', () => ({ getUserClaims: mocks.getUserClaims, })) diff --git a/apps/studio/lib/api/apiAuthenticate.ts b/apps/studio/lib/api/apiAuthenticate.ts index 4b34341a37..bb32fb0337 100644 --- a/apps/studio/lib/api/apiAuthenticate.ts +++ b/apps/studio/lib/api/apiAuthenticate.ts @@ -1,7 +1,8 @@ import type { JwtPayload } from '@supabase/supabase-js' -import { getUserClaims } from 'lib/gotrue' import type { NextApiRequest, NextApiResponse } from 'next' -import type { ResponseError } from 'types' + +import { getUserClaims } from '@/lib/gotrue' +import type { ResponseError } from '@/types' /** * Use this method on api routes to check if user is authenticated and having required permissions. diff --git a/apps/studio/lib/api/apiHelpers.test.ts b/apps/studio/lib/api/apiHelpers.test.ts index 2caf0fdf38..65587d9339 100644 --- a/apps/studio/lib/api/apiHelpers.test.ts +++ b/apps/studio/lib/api/apiHelpers.test.ts @@ -1,5 +1,6 @@ import type { IncomingHttpHeaders } from 'node:http' import { beforeEach, describe, expect, it, vi } from 'vitest' + import { commaSeparatedStringIntoArray, constructHeaders, @@ -8,7 +9,7 @@ import { zBooleanString, } from './apiHelpers' -vi.mock('lib/constants', () => ({ +vi.mock('@/lib/constants', () => ({ IS_PLATFORM: false, })) diff --git a/apps/studio/lib/api/apiHelpers.ts b/apps/studio/lib/api/apiHelpers.ts index b8c6fd6e54..df4f0a73a8 100644 --- a/apps/studio/lib/api/apiHelpers.ts +++ b/apps/studio/lib/api/apiHelpers.ts @@ -1,8 +1,9 @@ -import { IS_PLATFORM } from 'lib/constants' -import { snakeCase } from 'lodash' import type { IncomingHttpHeaders } from 'node:http' +import { snakeCase } from 'lodash' import z from 'zod' +import { IS_PLATFORM } from '@/lib/constants' + /** * Construct headers for api request. * For platform, it will include apiKey into the provided headers. diff --git a/apps/studio/lib/api/apiWrapper.ts b/apps/studio/lib/api/apiWrapper.ts index 343e64b55c..b12d397cc0 100644 --- a/apps/studio/lib/api/apiWrapper.ts +++ b/apps/studio/lib/api/apiWrapper.ts @@ -1,9 +1,9 @@ import type { JwtPayload } from '@supabase/supabase-js' import type { NextApiRequest, NextApiResponse } from 'next' -import { ResponseError, ResponseFailure } from 'types' import { IS_PLATFORM } from '../constants' import { apiAuthenticate } from './apiAuthenticate' +import { ResponseError, ResponseFailure } from '@/types' export function isResponseOk(response: T | ResponseFailure | undefined): response is T { if (response === undefined || response === null) { diff --git a/apps/studio/lib/api/apiWrappers.test.ts b/apps/studio/lib/api/apiWrappers.test.ts index eeb96e7b40..fafb8bd753 100644 --- a/apps/studio/lib/api/apiWrappers.test.ts +++ b/apps/studio/lib/api/apiWrappers.test.ts @@ -1,11 +1,12 @@ import type { JwtPayload } from '@supabase/supabase-js' import type { NextApiRequest, NextApiResponse } from 'next' -import { describe, it, expect, vi, beforeEach } from 'vitest' -import { ResponseError } from 'types' -import apiWrapper from './apiWrapper' -import { apiAuthenticate } from './apiAuthenticate' +import { beforeEach, describe, expect, it, vi } from 'vitest' -vi.mock('lib/constants', () => ({ +import { apiAuthenticate } from './apiAuthenticate' +import apiWrapper from './apiWrapper' +import { ResponseError } from '@/types' + +vi.mock('@/lib/constants', () => ({ IS_PLATFORM: true, API_URL: 'https://api.example.com', })) diff --git a/apps/studio/lib/api/generate-v4.test.ts b/apps/studio/lib/api/generate-v4.test.ts index 1fb2aaacd7..490458dd92 100644 --- a/apps/studio/lib/api/generate-v4.test.ts +++ b/apps/studio/lib/api/generate-v4.test.ts @@ -1,12 +1,10 @@ import { UIMessage } from 'ai' -import { sanitizeMessagePart } from 'lib/ai/tools/tool-sanitizer' import { expect, test, vi } from 'vitest' -// End of third-party imports - import generateV4 from '../../pages/api/ai/sql/generate-v4' +import { sanitizeMessagePart } from '@/lib/ai/tools/tool-sanitizer' -vi.mock('lib/ai/tools/tool-sanitizer', () => ({ +vi.mock('@/lib/ai/tools/tool-sanitizer', () => ({ sanitizeMessagePart: vi.fn((part) => part), })) @@ -45,7 +43,7 @@ test('generateV4 calls the tool sanitizer', async () => { setHeader: vi.fn(() => mockRes), } - vi.mock('lib/ai/ai-details', () => ({ + vi.mock('@/lib/ai/ai-details', () => ({ getOrgAIDetails: vi.fn().mockResolvedValue({ aiOptInLevel: 'schema_and_log_and_data', hasAccessToAdvanceModel: true, @@ -57,18 +55,18 @@ test('generateV4 calls the tool sanitizer', async () => { }), })) - vi.mock('lib/ai/model', () => ({ + vi.mock('@/lib/ai/model', () => ({ getModel: vi.fn().mockResolvedValue({ modelParams: { model: {} }, promptProviderOptions: {}, }), })) - vi.mock('data/sql/execute-sql-query', () => ({ + vi.mock('@/data/sql/execute-sql-query', () => ({ executeSql: vi.fn().mockResolvedValue({ result: [] }), })) - vi.mock('lib/ai/tools', () => ({ + vi.mock('@/lib/ai/tools', () => ({ getTools: vi.fn().mockResolvedValue({}), })) diff --git a/apps/studio/lib/api/incident-banner.ts b/apps/studio/lib/api/incident-banner.ts index cfcfa58ff0..5191cc1b78 100644 --- a/apps/studio/lib/api/incident-banner.ts +++ b/apps/studio/lib/api/incident-banner.ts @@ -1,8 +1,8 @@ -import { IS_PROD } from 'common' import { createHash } from 'crypto' +import { IS_PROD } from 'common' import z from 'zod' -import { InternalServerError } from 'lib/api/apiHelpers' +import { InternalServerError } from '@/lib/api/apiHelpers' const INCIDENT_IO_BASE_URL = 'https://api.incident.io/v2' diff --git a/apps/studio/lib/api/incident-status.ts b/apps/studio/lib/api/incident-status.ts index 670aa261a0..9bc6aab77b 100644 --- a/apps/studio/lib/api/incident-status.ts +++ b/apps/studio/lib/api/incident-status.ts @@ -1,7 +1,8 @@ import { IS_PLATFORM } from 'common' -import { InternalServerError } from 'lib/api/apiHelpers' import z from 'zod' +import { InternalServerError } from '@/lib/api/apiHelpers' + export type IncidentCache = { affected_regions: Array | null affects_project_creation: boolean diff --git a/apps/studio/lib/api/rate.test.ts b/apps/studio/lib/api/rate.test.ts index 197da0c7b4..cb6b55b13d 100644 --- a/apps/studio/lib/api/rate.test.ts +++ b/apps/studio/lib/api/rate.test.ts @@ -43,7 +43,7 @@ test('rate calls the tool sanitizer', async () => { setHeader: vi.fn(() => mockRes), } - vi.mock('lib/ai/ai-details', () => ({ + vi.mock('@/lib/ai/ai-details', () => ({ getOrgAIDetails: vi.fn().mockResolvedValue({ aiOptInLevel: 'schema_and_log_and_data', hasAccessToAdvanceModel: true, @@ -55,7 +55,7 @@ test('rate calls the tool sanitizer', async () => { }), })) - vi.mock('lib/ai/model', () => ({ + vi.mock('@/lib/ai/model', () => ({ getModel: vi.fn().mockResolvedValue({ modelParams: { model: {} }, }), @@ -70,7 +70,7 @@ test('rate calls the tool sanitizer', async () => { Output: { object: vi.fn() }, })) - vi.mock('components/ui/AIAssistantPanel/Message.utils', () => ({ + vi.mock('@/components/ui/AIAssistantPanel/Message.utils', () => ({ rateMessageResponseSchema: {}, })) diff --git a/apps/studio/lib/api/self-hosted/functions/index.ts b/apps/studio/lib/api/self-hosted/functions/index.ts index 9b4ec62cdd..34d8847c39 100644 --- a/apps/studio/lib/api/self-hosted/functions/index.ts +++ b/apps/studio/lib/api/self-hosted/functions/index.ts @@ -1,7 +1,7 @@ import assert from 'node:assert' -import { FileSystemFunctionsArtifactStore } from './fileSystemStore' import { assertSelfHosted } from '../util' +import { FileSystemFunctionsArtifactStore } from './fileSystemStore' export function getFunctionsArtifactStore() { assertSelfHosted() diff --git a/apps/studio/lib/api/self-hosted/generate-types.test.ts b/apps/studio/lib/api/self-hosted/generate-types.test.ts index e67f567451..69cc822137 100644 --- a/apps/studio/lib/api/self-hosted/generate-types.test.ts +++ b/apps/studio/lib/api/self-hosted/generate-types.test.ts @@ -2,11 +2,11 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { generateTypescriptTypes } from './generate-types' -vi.mock('data/fetchers', () => ({ +vi.mock('@/data/fetchers', () => ({ fetchGet: vi.fn(), })) -vi.mock('lib/constants', () => ({ +vi.mock('@/lib/constants', () => ({ PG_META_URL: 'http://localhost:8080', })) @@ -21,7 +21,7 @@ describe('api/self-hosted/generate-types', () => { beforeEach(async () => { vi.clearAllMocks() - const fetchers = await import('data/fetchers') + const fetchers = await import('@/data/fetchers') const util = await import('./util') mockFetchGet = vi.mocked(fetchers.fetchGet) diff --git a/apps/studio/lib/api/self-hosted/generate-types.ts b/apps/studio/lib/api/self-hosted/generate-types.ts index 2ea9af14ea..76e8068200 100644 --- a/apps/studio/lib/api/self-hosted/generate-types.ts +++ b/apps/studio/lib/api/self-hosted/generate-types.ts @@ -1,7 +1,7 @@ -import { fetchGet } from 'data/fetchers' -import { PG_META_URL } from 'lib/constants' -import type { ResponseError } from 'types' import { assertSelfHosted } from './util' +import { fetchGet } from '@/data/fetchers' +import { PG_META_URL } from '@/lib/constants' +import type { ResponseError } from '@/types' export type GenerateTypescriptTypesOptions = { headers?: HeadersInit diff --git a/apps/studio/lib/api/self-hosted/lints.ts b/apps/studio/lib/api/self-hosted/lints.ts index ccf3e5ba1a..cd3bf2ce35 100644 --- a/apps/studio/lib/api/self-hosted/lints.ts +++ b/apps/studio/lib/api/self-hosted/lints.ts @@ -1,8 +1,8 @@ import { enrichLintsQuery, getLintsSQL } from '@supabase/pg-meta' import { paths } from 'api-types' -import { DOCS_URL } from 'lib/constants' import { executeQuery } from './query' +import { DOCS_URL } from '@/lib/constants' interface GetLintsOptions { headers?: HeadersInit diff --git a/apps/studio/lib/api/self-hosted/logs.ts b/apps/studio/lib/api/self-hosted/logs.ts index 1619481a2c..f80e115ba3 100644 --- a/apps/studio/lib/api/self-hosted/logs.ts +++ b/apps/studio/lib/api/self-hosted/logs.ts @@ -1,10 +1,11 @@ -import { PROJECT_ANALYTICS_URL } from 'lib/constants/api' -import { WrappedResult } from './types' -import { assertSelfHosted } from './util' import assert from 'node:assert' import { LogsService } from '@supabase/mcp-server-supabase/platform' import { stripIndent } from 'common-tags' +import { WrappedResult } from './types' +import { assertSelfHosted } from './util' +import { PROJECT_ANALYTICS_URL } from '@/lib/constants/api' + export type RetrieveAnalyticsDataOptions = { name: string projectRef: string diff --git a/apps/studio/lib/api/self-hosted/mcp.ts b/apps/studio/lib/api/self-hosted/mcp.ts index 6828abc6fb..4b7146b84e 100644 --- a/apps/studio/lib/api/self-hosted/mcp.ts +++ b/apps/studio/lib/api/self-hosted/mcp.ts @@ -8,7 +8,7 @@ import { ExecuteSqlOptions, GetLogsOptions, } from '@supabase/mcp-server-supabase/platform' -import { ResponseError } from 'types' + import { DEFAULT_EXPOSED_SCHEMAS } from './constants' import { generateTypescriptTypes } from './generate-types' import { getLints } from './lints' @@ -16,6 +16,7 @@ import { getLogQuery, retrieveAnalyticsData } from './logs' import { applyAndTrackMigrations, listMigrationVersions } from './migrations' import { executeQuery } from './query' import { getProjectSettings } from './settings' +import { ResponseError } from '@/types' export type GetDatabaseOperationsOptions = { headers?: HeadersInit diff --git a/apps/studio/lib/api/self-hosted/migrations.ts b/apps/studio/lib/api/self-hosted/migrations.ts index 56d484d5f8..da4d26e27b 100644 --- a/apps/studio/lib/api/self-hosted/migrations.ts +++ b/apps/studio/lib/api/self-hosted/migrations.ts @@ -1,8 +1,9 @@ import { source } from 'common-tags' -import { makeRandomString } from 'lib/helpers' + import { executeQuery } from './query' import { PgMetaDatabaseError, WrappedResult } from './types' import { assertSelfHosted } from './util' +import { makeRandomString } from '@/lib/helpers' export type ListMigrationsResult = { version: string diff --git a/apps/studio/lib/api/self-hosted/query.ts b/apps/studio/lib/api/self-hosted/query.ts index 59a061fae8..9d5a2f18ed 100644 --- a/apps/studio/lib/api/self-hosted/query.ts +++ b/apps/studio/lib/api/self-hosted/query.ts @@ -1,8 +1,9 @@ import * as Sentry from '@sentry/nextjs' -import { PG_META_URL } from 'lib/constants/index' + import { constructHeaders } from '../apiHelpers' -import { PgMetaDatabaseError, databaseErrorSchema, WrappedResult } from './types' +import { databaseErrorSchema, PgMetaDatabaseError, WrappedResult } from './types' import { assertSelfHosted, encryptString, getConnectionString } from './util' +import { PG_META_URL } from '@/lib/constants/index' export type QueryOptions = { query: string diff --git a/apps/studio/lib/api/self-hosted/settings.test.ts b/apps/studio/lib/api/self-hosted/settings.test.ts index 1c388f820e..c584e6b4ae 100644 --- a/apps/studio/lib/api/self-hosted/settings.test.ts +++ b/apps/studio/lib/api/self-hosted/settings.test.ts @@ -6,7 +6,7 @@ vi.mock('./util', () => ({ assertSelfHosted: vi.fn(), })) -vi.mock('lib/constants/api', () => ({ +vi.mock('@/lib/constants/api', () => ({ PROJECT_ENDPOINT: 'localhost:8000', PROJECT_ENDPOINT_PROTOCOL: 'http', })) diff --git a/apps/studio/lib/api/self-hosted/settings.ts b/apps/studio/lib/api/self-hosted/settings.ts index 8cff8486de..071ea6e1c4 100644 --- a/apps/studio/lib/api/self-hosted/settings.ts +++ b/apps/studio/lib/api/self-hosted/settings.ts @@ -1,6 +1,7 @@ import { components } from 'api-types' -import { PROJECT_ENDPOINT, PROJECT_ENDPOINT_PROTOCOL } from 'lib/constants/api' + import { assertSelfHosted } from './util' +import { PROJECT_ENDPOINT, PROJECT_ENDPOINT_PROTOCOL } from '@/lib/constants/api' type ProjectAppConfig = components['schemas']['ProjectSettingsResponse']['app_config'] & { protocol?: string diff --git a/apps/studio/lib/api/self-hosted/util.test.ts b/apps/studio/lib/api/self-hosted/util.test.ts index 5477080cf5..97f80040eb 100644 --- a/apps/studio/lib/api/self-hosted/util.test.ts +++ b/apps/studio/lib/api/self-hosted/util.test.ts @@ -2,7 +2,7 @@ import { beforeEach, describe, expect, it, vi } from 'vitest' import { assertSelfHosted, encryptString, getConnectionString } from './util' -vi.mock('lib/constants', () => ({ +vi.mock('@/lib/constants', () => ({ IS_PLATFORM: false, })) @@ -27,14 +27,14 @@ describe('api/self-hosted/util', () => { describe('assertSelfHosted', () => { it('should not throw when IS_PLATFORM is false', async () => { - const constants = await import('lib/constants') + const constants = await import('@/lib/constants') vi.spyOn(constants, 'IS_PLATFORM', 'get').mockReturnValue(false) expect(() => assertSelfHosted()).not.toThrow() }) it('should throw error when IS_PLATFORM is true', async () => { - const constants = await import('lib/constants') + const constants = await import('@/lib/constants') vi.spyOn(constants, 'IS_PLATFORM', 'get').mockReturnValue(true) expect(() => assertSelfHosted()).toThrow( diff --git a/apps/studio/lib/api/self-hosted/util.ts b/apps/studio/lib/api/self-hosted/util.ts index 54fd5f6d6b..968db78005 100644 --- a/apps/studio/lib/api/self-hosted/util.ts +++ b/apps/studio/lib/api/self-hosted/util.ts @@ -1,14 +1,15 @@ import crypto from 'crypto-js' -import { IS_PLATFORM } from 'lib/constants' + import { ENCRYPTION_KEY, POSTGRES_DATABASE, POSTGRES_HOST, POSTGRES_PASSWORD, POSTGRES_PORT, - POSTGRES_USER_READ_WRITE, POSTGRES_USER_READ_ONLY, + POSTGRES_USER_READ_WRITE, } from './constants' +import { IS_PLATFORM } from '@/lib/constants' /** * Asserts that the current environment is self-hosted. diff --git a/apps/studio/lib/api/snippets.browser.test.ts b/apps/studio/lib/api/snippets.browser.test.ts index 8b0ff31e52..f8223e256c 100644 --- a/apps/studio/lib/api/snippets.browser.test.ts +++ b/apps/studio/lib/api/snippets.browser.test.ts @@ -1,4 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + import { generateDeterministicUuid } from './snippets.browser' describe('snippets.utils', () => { diff --git a/apps/studio/lib/api/snippets.utils.test.ts b/apps/studio/lib/api/snippets.utils.test.ts index 624c8b6673..7bb83ed62a 100644 --- a/apps/studio/lib/api/snippets.utils.test.ts +++ b/apps/studio/lib/api/snippets.utils.test.ts @@ -1,6 +1,7 @@ import fs from 'fs/promises' import path from 'path' import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + import { generateDeterministicUuid } from './snippets.browser' import { createFolder, diff --git a/apps/studio/lib/api/snippets.utils.ts b/apps/studio/lib/api/snippets.utils.ts index cf11f6d4d9..6d20ff8582 100644 --- a/apps/studio/lib/api/snippets.utils.ts +++ b/apps/studio/lib/api/snippets.utils.ts @@ -1,6 +1,6 @@ import fs from 'fs/promises' -import { compact, sortBy } from 'lodash' import path from 'path' +import { compact, sortBy } from 'lodash' import { v4 as uuidv4 } from 'uuid' import { z } from 'zod' diff --git a/apps/studio/lib/auth.tsx b/apps/studio/lib/auth.tsx index 7ac8442b23..d26c247dc3 100644 --- a/apps/studio/lib/auth.tsx +++ b/apps/studio/lib/auth.tsx @@ -1,7 +1,4 @@ import { useQueryClient } from '@tanstack/react-query' -import { PropsWithChildren, useCallback, useEffect } from 'react' -import { toast } from 'sonner' - import { AuthProvider as AuthProviderInternal, clearLocalStorage, @@ -9,8 +6,11 @@ import { posthogClient, useAuthError, } from 'common' -import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state' +import { PropsWithChildren, useCallback, useEffect } from 'react' +import { toast } from 'sonner' + import { GOTRUE_ERRORS, IS_PLATFORM } from './constants' +import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' const AuthErrorToaster = ({ children }: PropsWithChildren) => { const error = useAuthError() diff --git a/apps/studio/lib/cloudprovider-utils.test.ts b/apps/studio/lib/cloudprovider-utils.test.ts index 4230dc4ad9..faa36c52b7 100644 --- a/apps/studio/lib/cloudprovider-utils.test.ts +++ b/apps/studio/lib/cloudprovider-utils.test.ts @@ -1,6 +1,8 @@ -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + import { getCloudProviderArchitecture } from './cloudprovider-utils' import { PROVIDERS } from './constants' + describe('getCloudProviderArchitecture', () => { it('should return the correct architecture', () => { const result = getCloudProviderArchitecture(PROVIDERS.AWS.id) diff --git a/apps/studio/lib/constants/infrastructure.ts b/apps/studio/lib/constants/infrastructure.ts index 8c939c3ff6..0f6c03fa9b 100644 --- a/apps/studio/lib/constants/infrastructure.ts +++ b/apps/studio/lib/constants/infrastructure.ts @@ -1,8 +1,8 @@ import type { CloudProvider } from 'shared-data' import { AWS_REGIONS, FLY_REGIONS } from 'shared-data' -import type { components } from 'data/api' -import { useCustomContent } from 'hooks/custom-content/useCustomContent' +import type { components } from '@/data/api' +import { useCustomContent } from '@/hooks/custom-content/useCustomContent' export const AWS_REGIONS_DEFAULT = process.env.NEXT_PUBLIC_ENVIRONMENT !== 'prod' diff --git a/apps/studio/lib/data-api-types.ts b/apps/studio/lib/data-api-types.ts index d9124a790f..88b77cf657 100644 --- a/apps/studio/lib/data-api-types.ts +++ b/apps/studio/lib/data-api-types.ts @@ -1,6 +1,5 @@ -import type { TablePrivilegesGrant } from 'data/privileges/table-privileges-grant-mutation' - import type { DeepReadonly } from './type-helpers' +import type { TablePrivilegesGrant } from '@/data/privileges/table-privileges-grant-mutation' export const API_ACCESS_ROLES = ['anon', 'authenticated', 'service_role'] as const export type ApiAccessRole = (typeof API_ACCESS_ROLES)[number] diff --git a/apps/studio/lib/error-reporting.test.ts b/apps/studio/lib/error-reporting.test.ts index 2a533c5132..b7e0f7751c 100644 --- a/apps/studio/lib/error-reporting.test.ts +++ b/apps/studio/lib/error-reporting.test.ts @@ -1,8 +1,8 @@ import * as Sentry from '@sentry/nextjs' -import { ResponseError } from 'types' import { beforeEach, describe, expect, it, vi } from 'vitest' import { captureCriticalError } from './error-reporting' +import { ResponseError } from '@/types' vi.mock('@sentry/nextjs', () => ({ captureException: vi.fn(), diff --git a/apps/studio/lib/error-reporting.ts b/apps/studio/lib/error-reporting.ts index ec0b23788c..4bbcfcdf1c 100644 --- a/apps/studio/lib/error-reporting.ts +++ b/apps/studio/lib/error-reporting.ts @@ -1,5 +1,6 @@ import * as Sentry from '@sentry/nextjs' -import { ResponseError } from 'types' + +import { ResponseError } from '@/types' type CaptureMessageOptions = { context: string diff --git a/apps/studio/lib/formatSql.test.ts b/apps/studio/lib/formatSql.test.ts index 0412dd2d8e..67f5662072 100644 --- a/apps/studio/lib/formatSql.test.ts +++ b/apps/studio/lib/formatSql.test.ts @@ -1,4 +1,5 @@ import { describe, expect, it } from 'vitest' + import { formatSql } from './formatSql' describe('formatSql', () => { diff --git a/apps/studio/lib/github.test.ts b/apps/studio/lib/github.test.ts index f4657fff54..4d0e9a4c4e 100644 --- a/apps/studio/lib/github.test.ts +++ b/apps/studio/lib/github.test.ts @@ -1,5 +1,6 @@ -import { describe, it, expect, vi } from 'vitest' -import { openInstallGitHubIntegrationWindow, getGitHubProfileImgUrl } from './github' +import { describe, expect, it, vi } from 'vitest' + +import { getGitHubProfileImgUrl, openInstallGitHubIntegrationWindow } from './github' // mock window.open vi.stubGlobal('open', vi.fn()) diff --git a/apps/studio/lib/github.ts b/apps/studio/lib/github.ts index e0d6ebd559..ddbb462cf5 100644 --- a/apps/studio/lib/github.ts +++ b/apps/studio/lib/github.ts @@ -1,4 +1,5 @@ import { LOCAL_STORAGE_KEYS } from 'common' + import { makeRandomString } from './helpers' const GITHUB_INTEGRATION_APP_NAME = diff --git a/apps/studio/lib/gotrue.test.ts b/apps/studio/lib/gotrue.test.ts index 143983e9d9..01b0a3ea82 100644 --- a/apps/studio/lib/gotrue.test.ts +++ b/apps/studio/lib/gotrue.test.ts @@ -1,5 +1,6 @@ -import { validateReturnTo, DEFAULT_FALLBACK_PATH } from './gotrue' -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + +import { DEFAULT_FALLBACK_PATH, validateReturnTo } from './gotrue' describe('validateReturnTo', () => { const fallback = DEFAULT_FALLBACK_PATH diff --git a/apps/studio/lib/http-status-codes.test.ts b/apps/studio/lib/http-status-codes.test.ts index 171f4950fe..59fa331184 100644 --- a/apps/studio/lib/http-status-codes.test.ts +++ b/apps/studio/lib/http-status-codes.test.ts @@ -1,4 +1,5 @@ import { describe, expect, it } from 'vitest' + import { getHttpStatusCodeInfo } from './http-status-codes' describe('getHttpStatusCodeInfo', () => { diff --git a/apps/studio/lib/integration-utils.test.ts b/apps/studio/lib/integration-utils.test.ts index 03f82051f3..9f921716e9 100644 --- a/apps/studio/lib/integration-utils.test.ts +++ b/apps/studio/lib/integration-utils.test.ts @@ -1,16 +1,17 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest' + +import { + getInitialMigrationSQLFromGitHubRepo, + getIntegrationConfigurationUrl, +} from './integration-utils' import type { GitHubAccount, Integration, VercelAccount, VercelTeamAccount, -} from 'data/integrations/integrations.types' -import { beforeEach, describe, expect, it, vi } from 'vitest' -import { - getInitialMigrationSQLFromGitHubRepo, - getIntegrationConfigurationUrl, -} from './integration-utils' +} from '@/data/integrations/integrations.types' -vi.mock('data/fetchers', () => ({ +vi.mock('@/data/fetchers', () => ({ fetchHandler: vi.fn(), })) @@ -38,7 +39,7 @@ describe('integration-utils', () => { const mockSeedContent = 'INSERT INTO users (id) VALUES (1);' // Mock the fetch responses - const { fetchHandler } = await import('data/fetchers') + const { fetchHandler } = await import('@/data/fetchers') const mockFetchHandler = fetchHandler as unknown as ReturnType mockFetchHandler .mockResolvedValueOnce( @@ -89,7 +90,7 @@ describe('integration-utils', () => { it('should handle GitHub API errors gracefully', async () => { const mockGitHubUrl = 'https://github.com/org/repo/tree/main/examples/with-supabase' - const { fetchHandler } = await import('data/fetchers') + const { fetchHandler } = await import('@/data/fetchers') const mockFetchHandler = fetchHandler as unknown as ReturnType mockFetchHandler diff --git a/apps/studio/lib/integration-utils.ts b/apps/studio/lib/integration-utils.ts index f113d79865..3a17c74658 100644 --- a/apps/studio/lib/integration-utils.ts +++ b/apps/studio/lib/integration-utils.ts @@ -1,9 +1,9 @@ import { getCreateMigrationsTableSQL, getInsertMigrationSQL } from '@supabase/pg-meta' -import { fetchHandler } from 'data/fetchers' -import type { Integration } from 'data/integrations/integrations.types' -import { ResponseError, type SupaResponse } from 'types' import { isResponseOk } from './api/apiWrapper' +import { fetchHandler } from '@/data/fetchers' +import type { Integration } from '@/data/integrations/integrations.types' +import { ResponseError, type SupaResponse } from '@/types' async function fetchGitHub(url: string, responseJson = true): Promise> { const response = await fetchHandler(url) diff --git a/apps/studio/lib/isNonNullable.test.ts b/apps/studio/lib/isNonNullable.test.ts index 6c26736d19..77a61dae56 100644 --- a/apps/studio/lib/isNonNullable.test.ts +++ b/apps/studio/lib/isNonNullable.test.ts @@ -1,4 +1,5 @@ -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + import { isNonNullable } from './isNonNullable.js' describe(`isNonNullable`, () => { diff --git a/apps/studio/lib/migration-utils.test.ts b/apps/studio/lib/migration-utils.test.ts index 607d14da09..77a4dcaa78 100644 --- a/apps/studio/lib/migration-utils.test.ts +++ b/apps/studio/lib/migration-utils.test.ts @@ -1,6 +1,7 @@ -import { describe, expect, it } from 'vitest' -import { parseMigrationVersion } from './migration-utils' import dayjs from 'dayjs' +import { describe, expect, it } from 'vitest' + +import { parseMigrationVersion } from './migration-utils' describe('parseMigrationVersion', () => { it('should parse valid migration version in YYYYMMDDHHmmss format', () => { diff --git a/apps/studio/lib/mime.test.ts b/apps/studio/lib/mime.test.ts index 56ec6a560d..9892bee9a6 100644 --- a/apps/studio/lib/mime.test.ts +++ b/apps/studio/lib/mime.test.ts @@ -1,4 +1,5 @@ -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + import { lookupMime } from './mime' describe('lookupMime', () => { diff --git a/apps/studio/lib/navigation.ts b/apps/studio/lib/navigation.ts index f02abe537f..b00cb2cecf 100644 --- a/apps/studio/lib/navigation.ts +++ b/apps/studio/lib/navigation.ts @@ -1,6 +1,7 @@ -import type { NextRouter } from 'next/router' -import { BASE_PATH } from './constants' import { useRouter } from 'next/navigation' +import type { NextRouter } from 'next/router' + +import { BASE_PATH } from './constants' type Router = NextRouter | ReturnType diff --git a/apps/studio/lib/password-strength.test.ts b/apps/studio/lib/password-strength.test.ts index 9699204014..6400938630 100644 --- a/apps/studio/lib/password-strength.test.ts +++ b/apps/studio/lib/password-strength.test.ts @@ -1,4 +1,5 @@ -import { describe, it, expect, beforeEach, vi } from 'vitest' +import { beforeEach, describe, expect, it, vi } from 'vitest' + import { passwordStrength } from './password-strength' describe('passwordStrength', () => { diff --git a/apps/studio/lib/password-strength.ts b/apps/studio/lib/password-strength.ts index 39a34cc44a..7bc72f622a 100644 --- a/apps/studio/lib/password-strength.ts +++ b/apps/studio/lib/password-strength.ts @@ -1,4 +1,4 @@ -import { DEFAULT_MINIMUM_PASSWORD_STRENGTH, PASSWORD_STRENGTH } from 'lib/constants' +import { DEFAULT_MINIMUM_PASSWORD_STRENGTH, PASSWORD_STRENGTH } from '@/lib/constants' // This is the same as the ZXCVBNScore type from zxcvbn // but we need to define it here because we don't to import zxcvbn everywhere diff --git a/apps/studio/lib/pg-format.test.ts b/apps/studio/lib/pg-format.test.ts index 02cf406a35..f61dc8d21e 100644 --- a/apps/studio/lib/pg-format.test.ts +++ b/apps/studio/lib/pg-format.test.ts @@ -1,4 +1,5 @@ -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + import { quoteLiteral } from './pg-format' describe('quoteLiteral', () => { diff --git a/apps/studio/lib/pingPostgrest.test.ts b/apps/studio/lib/pingPostgrest.test.ts index fce1127c5c..88c899b189 100644 --- a/apps/studio/lib/pingPostgrest.test.ts +++ b/apps/studio/lib/pingPostgrest.test.ts @@ -1,6 +1,7 @@ -import * as fetchModule from 'data/fetchers' import { beforeEach, describe, expect, it, vi } from 'vitest' + import pingPostgrest from './pingPostgrest' +import * as fetchModule from '@/data/fetchers' vi.mock('./constants', () => ({ API_URL: 'https://api.example.com' })) diff --git a/apps/studio/lib/pingPostgrest.ts b/apps/studio/lib/pingPostgrest.ts index 208be243a1..3b3d40b027 100644 --- a/apps/studio/lib/pingPostgrest.ts +++ b/apps/studio/lib/pingPostgrest.ts @@ -1,5 +1,5 @@ -import { fetchHeadWithTimeout } from 'data/fetchers' import { API_URL } from './constants' +import { fetchHeadWithTimeout } from '@/data/fetchers' const DEFAULT_TIMEOUT_MILLISECONDS = 2000 diff --git a/apps/studio/lib/posthog.test.ts b/apps/studio/lib/posthog.test.ts index 04ec27b7d5..157ec98450 100644 --- a/apps/studio/lib/posthog.test.ts +++ b/apps/studio/lib/posthog.test.ts @@ -1,10 +1,11 @@ -import { describe, it, expect, vi, beforeEach } from 'vitest' -import * as fetchers from 'data/fetchers' import * as common from 'common' +import { beforeEach, describe, expect, it, vi } from 'vitest' + import * as constants from './constants' import { trackFeatureFlag } from './posthog' +import * as fetchers from '@/data/fetchers' -vi.mock('data/fetchers', () => ({ +vi.mock('@/data/fetchers', () => ({ post: vi.fn(), handleError: vi.fn(), })) diff --git a/apps/studio/lib/posthog.ts b/apps/studio/lib/posthog.ts index 058abf79e0..eeba49ed72 100644 --- a/apps/studio/lib/posthog.ts +++ b/apps/studio/lib/posthog.ts @@ -1,7 +1,8 @@ import { components } from 'api-types' import { hasConsented } from 'common' -import { handleError, post } from 'data/fetchers' + import { IS_PLATFORM } from './constants' +import { handleError, post } from '@/data/fetchers' type TrackFeatureFlagVariables = components['schemas']['TelemetryFeatureFlagBody'] diff --git a/apps/studio/lib/profile.tsx b/apps/studio/lib/profile.tsx index 3b747d9560..a8a88768c6 100644 --- a/apps/studio/lib/profile.tsx +++ b/apps/studio/lib/profile.tsx @@ -1,18 +1,18 @@ import * as Sentry from '@sentry/nextjs' +import { useIsLoggedIn, useUser } from 'common' import { useRouter } from 'next/router' -import { PropsWithChildren, createContext, useContext, useEffect, useMemo } from 'react' +import { createContext, PropsWithChildren, useContext, useEffect, useMemo } from 'react' import { toast } from 'sonner' -import { useIsLoggedIn, useUser } from 'common' -import { usePermissionsQuery } from 'data/permissions/permissions-query' -import { useProfileCreateMutation } from 'data/profile/profile-create-mutation' -import { useProfileIdentitiesQuery } from 'data/profile/profile-identities-query' -import { useProfileQuery } from 'data/profile/profile-query' -import type { Profile } from 'data/profile/types' -import { useSendEventMutation } from 'data/telemetry/send-event-mutation' -import type { ResponseError } from 'types' import { useSignOut } from './auth' import { getGitHubProfileImgUrl } from './github' +import { usePermissionsQuery } from '@/data/permissions/permissions-query' +import { useProfileCreateMutation } from '@/data/profile/profile-create-mutation' +import { useProfileIdentitiesQuery } from '@/data/profile/profile-identities-query' +import { useProfileQuery } from '@/data/profile/profile-query' +import type { Profile } from '@/data/profile/types' +import { useSendEventMutation } from '@/data/telemetry/send-event-mutation' +import type { ResponseError } from '@/types' export type ProfileContextType = { profile: Profile | undefined diff --git a/apps/studio/lib/project-supabase-client.test.ts b/apps/studio/lib/project-supabase-client.test.ts index 5de43721ee..62f4a1a47f 100644 --- a/apps/studio/lib/project-supabase-client.test.ts +++ b/apps/studio/lib/project-supabase-client.test.ts @@ -1,14 +1,14 @@ import * as supabaseJs from '@supabase/supabase-js' -import * as apiKeysUtils from 'data/api-keys/temp-api-keys-utils' import { beforeEach, describe, expect, it, vi } from 'vitest' import { createProjectSupabaseClient } from './project-supabase-client' +import * as apiKeysUtils from '@/data/api-keys/temp-api-keys-utils' vi.mock('@supabase/supabase-js', () => ({ createClient: vi.fn(), })) -vi.mock('data/api-keys/temp-api-keys-utils', () => ({ +vi.mock('@/data/api-keys/temp-api-keys-utils', () => ({ getOrRefreshTemporaryApiKey: vi.fn(), })) diff --git a/apps/studio/lib/project-supabase-client.ts b/apps/studio/lib/project-supabase-client.ts index 7031cb4c6f..55168a5ae5 100644 --- a/apps/studio/lib/project-supabase-client.ts +++ b/apps/studio/lib/project-supabase-client.ts @@ -1,5 +1,6 @@ import { createClient } from '@supabase/supabase-js' -import { getOrRefreshTemporaryApiKey } from 'data/api-keys/temp-api-keys-utils' + +import { getOrRefreshTemporaryApiKey } from '@/data/api-keys/temp-api-keys-utils' /** * Creates a Supabase client bound to a specific project. It uses temporary API key. diff --git a/apps/studio/lib/role-impersonation.test.ts b/apps/studio/lib/role-impersonation.test.ts index 7b19032a55..13ea606c9d 100644 --- a/apps/studio/lib/role-impersonation.test.ts +++ b/apps/studio/lib/role-impersonation.test.ts @@ -1,4 +1,5 @@ import { describe, expect, it } from 'vitest' + import type { RoleImpersonationState } from './role-impersonation' import { getExp1HourFromNow, diff --git a/apps/studio/lib/role-impersonation.ts b/apps/studio/lib/role-impersonation.ts index ed84de53f0..3750ded31c 100644 --- a/apps/studio/lib/role-impersonation.ts +++ b/apps/studio/lib/role-impersonation.ts @@ -1,8 +1,8 @@ import { getImpersonationSQL } from '@supabase/pg-meta' -import type { User } from 'data/auth/users-infinite-query' -import { RoleImpersonationState as ValtioRoleImpersonationState } from 'state/role-impersonation-state' import { uuidv4 } from './helpers' +import type { User } from '@/data/auth/users-infinite-query' +import { RoleImpersonationState as ValtioRoleImpersonationState } from '@/state/role-impersonation-state' type PostgrestImpersonationRole = | { diff --git a/apps/studio/lib/semver.test.ts b/apps/studio/lib/semver.test.ts index 73dbde89e4..026c603298 100644 --- a/apps/studio/lib/semver.test.ts +++ b/apps/studio/lib/semver.test.ts @@ -1,4 +1,5 @@ import { describe, expect, it } from 'vitest' + import { compareSemver, isEqual, diff --git a/apps/studio/lib/sql-event-parser.test.ts b/apps/studio/lib/sql-event-parser.test.ts index dafaa37712..44ddcd662a 100644 --- a/apps/studio/lib/sql-event-parser.test.ts +++ b/apps/studio/lib/sql-event-parser.test.ts @@ -1,5 +1,6 @@ import { TABLE_EVENT_ACTIONS } from 'common/telemetry-constants' import { describe, expect, it } from 'vitest' + import { sqlEventParser } from './sql-event-parser' describe('SQL Event Parser', () => { diff --git a/apps/studio/lib/sql-identifier-quoting.test.ts b/apps/studio/lib/sql-identifier-quoting.test.ts index 3caa6d68c7..cf267644da 100644 --- a/apps/studio/lib/sql-identifier-quoting.test.ts +++ b/apps/studio/lib/sql-identifier-quoting.test.ts @@ -1,5 +1,6 @@ import { parse } from 'libpg-query' import { describe, expect, it } from 'vitest' + import { extractIdentifiers, isQuotedInSql, needsQuoting } from './sql-identifier-quoting' describe('needsQuoting', () => { diff --git a/apps/studio/lib/sql-identifier-quoting.ts b/apps/studio/lib/sql-identifier-quoting.ts index 311b48a10f..da86da057d 100644 --- a/apps/studio/lib/sql-identifier-quoting.ts +++ b/apps/studio/lib/sql-identifier-quoting.ts @@ -1,5 +1,5 @@ -import type { ColumnDef, ColumnRef, Node, RangeVar, ResTarget } from 'libpg-query' import { POSTGRESQL_RESERVED_WORDS } from '@supabase/pg-meta/src/pg-format/reserved' +import type { ColumnDef, ColumnRef, Node, RangeVar, ResTarget } from 'libpg-query' /** * Recursively traverse a libpg-query AST to extract all identifiers. diff --git a/apps/studio/lib/sql-parameters.test.ts b/apps/studio/lib/sql-parameters.test.ts index 5cc66469a5..938fba0978 100644 --- a/apps/studio/lib/sql-parameters.test.ts +++ b/apps/studio/lib/sql-parameters.test.ts @@ -1,4 +1,5 @@ -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + import { parseParameters, processParameterizedSql } from './sql-parameters' describe('parseParameters', () => { diff --git a/apps/studio/lib/telemetry.tsx b/apps/studio/lib/telemetry.tsx index 4e17c8cf78..3b90b4049b 100644 --- a/apps/studio/lib/telemetry.tsx +++ b/apps/studio/lib/telemetry.tsx @@ -1,11 +1,11 @@ import * as Sentry from '@sentry/nextjs' -import { useEffect } from 'react' - import { LOCAL_STORAGE_KEYS, PageTelemetry, useUser } from 'common' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { API_URL, IS_PLATFORM } from 'lib/constants' +import { useEffect } from 'react' import { useConsentToast } from 'ui-patterns/consent' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { API_URL, IS_PLATFORM } from '@/lib/constants' + const getAnonId = async (id: string) => { const encoder = new TextEncoder() const data = encoder.encode(id) diff --git a/apps/studio/lib/telemetry/track.ts b/apps/studio/lib/telemetry/track.ts index ec1755bc9a..ae76d33bd4 100644 --- a/apps/studio/lib/telemetry/track.ts +++ b/apps/studio/lib/telemetry/track.ts @@ -1,11 +1,12 @@ import { sendTelemetryEvent } from 'common' import { TelemetryEvent, TelemetryGroups } from 'common/telemetry-constants' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { API_URL } from 'lib/constants' import { useRouter } from 'next/router' import { useCallback } from 'react' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { API_URL } from '@/lib/constants' + type EventMap = { [E in TelemetryEvent as E['action']]: E } diff --git a/apps/studio/lib/toast-errors.tsx b/apps/studio/lib/toast-errors.tsx index 3fe7ddadf3..8dd031588f 100644 --- a/apps/studio/lib/toast-errors.tsx +++ b/apps/studio/lib/toast-errors.tsx @@ -1,6 +1,7 @@ import { useEffect, useRef } from 'react' import { useSonner } from 'sonner' -import { useTrack } from 'lib/telemetry/track' + +import { useTrack } from '@/lib/telemetry/track' export const ToastErrorTracker = () => { const track = useTrack() diff --git a/apps/studio/lib/upload.test.ts b/apps/studio/lib/upload.test.ts index 0862770c55..72c4140c4f 100644 --- a/apps/studio/lib/upload.test.ts +++ b/apps/studio/lib/upload.test.ts @@ -1,6 +1,6 @@ -import { describe, it, expect, vi, beforeEach } from 'vitest' - import { createClient } from '@supabase/supabase-js' +import { beforeEach, describe, expect, it, vi } from 'vitest' + import { uploadAttachment } from './upload' vi.mock('@supabase/supabase-js', () => ({ diff --git a/apps/studio/pages/404.tsx b/apps/studio/pages/404.tsx index 7a06b07a19..1800dcb551 100644 --- a/apps/studio/pages/404.tsx +++ b/apps/studio/pages/404.tsx @@ -1,10 +1,11 @@ import { NextPage } from 'next' +import { useTheme } from 'next-themes' import Image from 'next/legacy/image' import Link from 'next/link' import { useEffect, useState } from 'react' import { Button } from 'ui' -import { useTheme } from 'next-themes' -import { BASE_PATH } from 'lib/constants' + +import { BASE_PATH } from '@/lib/constants' const Error404: NextPage = ({}) => { const { resolvedTheme } = useTheme() diff --git a/apps/studio/pages/500.tsx b/apps/studio/pages/500.tsx index e37f834dd8..5957f2b7fb 100644 --- a/apps/studio/pages/500.tsx +++ b/apps/studio/pages/500.tsx @@ -1,15 +1,15 @@ +import { LOCAL_STORAGE_KEYS } from 'common' import { NextPage } from 'next' import { useTheme } from 'next-themes' import Image from 'next/legacy/image' import Link from 'next/link' import { useRouter } from 'next/router' - -import { LOCAL_STORAGE_KEYS } from 'common' -import { SupportLink } from 'components/interfaces/Support/SupportLink' -import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' -import { useSignOut } from 'lib/auth' import { Button } from 'ui' +import { SupportLink } from '@/components/interfaces/Support/SupportLink' +import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' +import { useSignOut } from '@/lib/auth' + const Error500: NextPage = () => { const router = useRouter() const signOut = useSignOut() diff --git a/apps/studio/pages/_app.tsx b/apps/studio/pages/_app.tsx index cda1453cad..f5524da0dd 100644 --- a/apps/studio/pages/_app.tsx +++ b/apps/studio/pages/_app.tsx @@ -1,19 +1,19 @@ import 'react-data-grid/lib/styles.css' -import 'styles/code.scss' -import 'styles/editor.scss' -import 'styles/focus.scss' -import 'styles/graphiql-base.scss' -import 'styles/grid.scss' -import 'styles/main.scss' -import 'styles/markdown-preview.scss' -import 'styles/monaco.scss' -import 'styles/react-data-grid-logs.scss' -import 'styles/reactflow.scss' -import 'styles/storage.scss' -import 'styles/stripe.scss' -import 'styles/toast.scss' -import 'styles/typography.scss' -import 'styles/ui.scss' +import '@/styles/code.scss' +import '@/styles/editor.scss' +import '@/styles/focus.scss' +import '@/styles/graphiql-base.scss' +import '@/styles/grid.scss' +import '@/styles/main.scss' +import '@/styles/markdown-preview.scss' +import '@/styles/monaco.scss' +import '@/styles/react-data-grid-logs.scss' +import '@/styles/reactflow.scss' +import '@/styles/storage.scss' +import '@/styles/stripe.scss' +import '@/styles/toast.scss' +import '@/styles/typography.scss' +import '@/styles/ui.scss' import 'ui-patterns/ShimmeringLoader/index.css' import 'ui/build/css/themes/dark.css' import 'ui/build/css/themes/light.css' diff --git a/apps/studio/pages/_document.tsx b/apps/studio/pages/_document.tsx index e91481eb0f..4ed23910d2 100644 --- a/apps/studio/pages/_document.tsx +++ b/apps/studio/pages/_document.tsx @@ -1,6 +1,7 @@ -import { BASE_PATH, IS_PLATFORM } from 'lib/constants' import Document, { DocumentContext, Head, Html, Main, NextScript } from 'next/document' +import { BASE_PATH, IS_PLATFORM } from '@/lib/constants' + class MyDocument extends Document { static async getInitialProps(ctx: DocumentContext) { const initialProps = await Document.getInitialProps(ctx) diff --git a/apps/studio/pages/account/audit.tsx b/apps/studio/pages/account/audit.tsx index 8c19dc38ea..71d8d8e0a1 100644 --- a/apps/studio/pages/account/audit.tsx +++ b/apps/studio/pages/account/audit.tsx @@ -1,8 +1,3 @@ -import { AuditLogs } from 'components/interfaces/Account/AuditLogs' -import AccountLayout from 'components/layouts/AccountLayout/AccountLayout' -import { AppLayout } from 'components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -12,6 +7,12 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { AuditLogs } from '@/components/interfaces/Account/AuditLogs' +import AccountLayout from '@/components/layouts/AccountLayout/AccountLayout' +import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import type { NextPageWithLayout } from '@/types' + const Audit: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/account/me.tsx b/apps/studio/pages/account/me.tsx index 674c44182e..878ee83039 100644 --- a/apps/studio/pages/account/me.tsx +++ b/apps/studio/pages/account/me.tsx @@ -1,19 +1,3 @@ -import { AccountConnections } from 'components/interfaces/Account/Preferences/AccountConnections' -import { AccountDeletion } from 'components/interfaces/Account/Preferences/AccountDeletion' -import { AccountIdentities } from 'components/interfaces/Account/Preferences/AccountIdentities' -import { AnalyticsSettings } from 'components/interfaces/Account/Preferences/AnalyticsSettings' -import { DashboardSettings } from 'components/interfaces/Account/Preferences/DashboardSettings' -import { HotkeySettings } from 'components/interfaces/Account/Preferences/HotkeySettings' -import { ProfileInformation } from 'components/interfaces/Account/Preferences/ProfileInformation' -import { ThemeSettings } from 'components/interfaces/Account/Preferences/ThemeSettings' -import AccountLayout from 'components/layouts/AccountLayout/AccountLayout' -import { AppLayout } from 'components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { AlertError } from 'components/ui/AlertError' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { IS_PLATFORM } from 'lib/constants' -import { useProfile } from 'lib/profile' -import type { NextPageWithLayout } from 'types' import { Card, CardContent } from 'ui' import { PageContainer } from 'ui-patterns/PageContainer' import { @@ -25,6 +9,23 @@ import { } from 'ui-patterns/PageHeader' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { AccountConnections } from '@/components/interfaces/Account/Preferences/AccountConnections' +import { AccountDeletion } from '@/components/interfaces/Account/Preferences/AccountDeletion' +import { AccountIdentities } from '@/components/interfaces/Account/Preferences/AccountIdentities' +import { AnalyticsSettings } from '@/components/interfaces/Account/Preferences/AnalyticsSettings' +import { DashboardSettings } from '@/components/interfaces/Account/Preferences/DashboardSettings' +import { HotkeySettings } from '@/components/interfaces/Account/Preferences/HotkeySettings' +import { ProfileInformation } from '@/components/interfaces/Account/Preferences/ProfileInformation' +import { ThemeSettings } from '@/components/interfaces/Account/Preferences/ThemeSettings' +import AccountLayout from '@/components/layouts/AccountLayout/AccountLayout' +import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { AlertError } from '@/components/ui/AlertError' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { IS_PLATFORM } from '@/lib/constants' +import { useProfile } from '@/lib/profile' +import type { NextPageWithLayout } from '@/types' + const User: NextPageWithLayout = () => { return IS_PLATFORM ? : } diff --git a/apps/studio/pages/account/security.tsx b/apps/studio/pages/account/security.tsx index d04a7c163e..002b751e2b 100644 --- a/apps/studio/pages/account/security.tsx +++ b/apps/studio/pages/account/security.tsx @@ -1,12 +1,4 @@ -import { TOTPFactors } from 'components/interfaces/Account/TOTPFactors' -import AccountLayout from 'components/layouts/AccountLayout/AccountLayout' -import { AppLayout } from 'components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useMfaListFactorsQuery } from 'data/profile/mfa-list-factors-query' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' import { Smartphone } from 'lucide-react' -import type { NextPageWithLayout } from 'types' import { Badge, cn, @@ -23,6 +15,15 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { TOTPFactors } from '@/components/interfaces/Account/TOTPFactors' +import AccountLayout from '@/components/layouts/AccountLayout/AccountLayout' +import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useMfaListFactorsQuery } from '@/data/profile/mfa-list-factors-query' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const collapsibleClasses = [ 'bg-surface-100', 'hover:bg-surface-200', diff --git a/apps/studio/pages/account/tokens.tsx b/apps/studio/pages/account/tokens.tsx index 7ce87e8310..894bba7319 100644 --- a/apps/studio/pages/account/tokens.tsx +++ b/apps/studio/pages/account/tokens.tsx @@ -1,18 +1,18 @@ -import { AccessTokenList } from 'components/interfaces/Account/AccessTokens/AccessTokenList' -import { NewTokenButton } from 'components/interfaces/Account/AccessTokens/Classic/NewTokenButton' -import { AccessTokensLayout } from 'components/layouts/AccessTokens/AccessTokensLayout' -import AccountLayout from 'components/layouts/AccountLayout/AccountLayout' -import { AppLayout } from 'components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { NewAccessToken } from 'data/access-tokens/access-tokens-create-mutation' -import { DOCS_URL } from 'lib/constants' import { ExternalLink, Search } from 'lucide-react' import { useState } from 'react' -import type { NextPageWithLayout } from 'types' import { Button } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' +import { AccessTokenList } from '@/components/interfaces/Account/AccessTokens/AccessTokenList' import { AccessTokenNewBanner } from '@/components/interfaces/Account/AccessTokens/AccessTokenNewBanner/AccessTokenNewBanner' +import { NewTokenButton } from '@/components/interfaces/Account/AccessTokens/Classic/NewTokenButton' +import { AccessTokensLayout } from '@/components/layouts/AccessTokens/AccessTokensLayout' +import AccountLayout from '@/components/layouts/AccountLayout/AccountLayout' +import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { NewAccessToken } from '@/data/access-tokens/access-tokens-create-mutation' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' const UserAccessTokens: NextPageWithLayout = () => { const [newToken, setNewToken] = useState() diff --git a/apps/studio/pages/account/tokens/scoped.tsx b/apps/studio/pages/account/tokens/scoped.tsx index f8130c1f66..7d4cc2c3f9 100644 --- a/apps/studio/pages/account/tokens/scoped.tsx +++ b/apps/studio/pages/account/tokens/scoped.tsx @@ -1,17 +1,17 @@ -import { NewScopedTokenButton } from 'components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenButton' -import { ScopedTokenList } from 'components/interfaces/Account/AccessTokens/Scoped/ScopedTokenList' -import { AccessTokensLayout } from 'components/layouts/AccessTokens/AccessTokensLayout' -import AccountLayout from 'components/layouts/AccountLayout/AccountLayout' -import { AppLayout } from 'components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { NewScopedAccessToken } from 'data/scoped-access-tokens/scoped-access-token-create-mutation' import { ExternalLink, Search } from 'lucide-react' import { useState } from 'react' -import type { NextPageWithLayout } from 'types' import { Button } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' import { AccessTokenNewBanner } from '@/components/interfaces/Account/AccessTokens/AccessTokenNewBanner/AccessTokenNewBanner' +import { NewScopedTokenButton } from '@/components/interfaces/Account/AccessTokens/Scoped/NewScopedTokenButton' +import { ScopedTokenList } from '@/components/interfaces/Account/AccessTokens/Scoped/ScopedTokenList' +import { AccessTokensLayout } from '@/components/layouts/AccessTokens/AccessTokensLayout' +import AccountLayout from '@/components/layouts/AccountLayout/AccountLayout' +import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { NewScopedAccessToken } from '@/data/scoped-access-tokens/scoped-access-token-create-mutation' +import type { NextPageWithLayout } from '@/types' const ScopedTokens: NextPageWithLayout = () => { const [searchString, setSearchString] = useState('') diff --git a/apps/studio/pages/api/ai/code/complete.ts b/apps/studio/pages/api/ai/code/complete.ts index b8611bcf0c..bb88f35824 100644 --- a/apps/studio/pages/api/ai/code/complete.ts +++ b/apps/studio/pages/api/ai/code/complete.ts @@ -2,11 +2,14 @@ import pgMeta from '@supabase/pg-meta' import { generateText, ModelMessage, stepCountIs } from 'ai' import { IS_PLATFORM } from 'common' import { source } from 'common-tags' -import { executeSql } from 'data/sql/execute-sql-query' -import { AiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' -import { getOrgAIDetails } from 'lib/ai/ai-details' -import { getModel } from 'lib/ai/model' -import { DEFAULT_COMPLETION_MODEL } from 'lib/ai/model.utils' +import { NextApiRequest, NextApiResponse } from 'next' +import z from 'zod' + +import { executeSql } from '@/data/sql/execute-sql-query' +import { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' +import { getOrgAIDetails } from '@/lib/ai/ai-details' +import { getModel } from '@/lib/ai/model' +import { DEFAULT_COMPLETION_MODEL } from '@/lib/ai/model.utils' import { EDGE_FUNCTION_PROMPT, GENERAL_PROMPT, @@ -14,12 +17,10 @@ import { PG_BEST_PRACTICES, RLS_PROMPT, SECURITY_PROMPT, -} from 'lib/ai/prompts' -import { getTools } from 'lib/ai/tools' -import apiWrapper from 'lib/api/apiWrapper' -import { executeQuery } from 'lib/api/self-hosted/query' -import { NextApiRequest, NextApiResponse } from 'next' -import z from 'zod' +} from '@/lib/ai/prompts' +import { getTools } from '@/lib/ai/tools' +import apiWrapper from '@/lib/api/apiWrapper' +import { executeQuery } from '@/lib/api/self-hosted/query' export const maxDuration = 60 diff --git a/apps/studio/pages/api/ai/docs.ts b/apps/studio/pages/api/ai/docs.ts index 892be7f1eb..b59d395c8f 100644 --- a/apps/studio/pages/api/ai/docs.ts +++ b/apps/studio/pages/api/ai/docs.ts @@ -1,5 +1,5 @@ import { SupabaseClient } from '@supabase/supabase-js' -import { ApplicationError, UserError, clippy } from 'ai-commands/edge' +import { ApplicationError, clippy, UserError } from 'ai-commands/edge' import { NextRequest } from 'next/server' import OpenAI from 'openai' diff --git a/apps/studio/pages/api/ai/feedback/classify.ts b/apps/studio/pages/api/ai/feedback/classify.ts index 843d81da10..9703fa0b52 100644 --- a/apps/studio/pages/api/ai/feedback/classify.ts +++ b/apps/studio/pages/api/ai/feedback/classify.ts @@ -1,10 +1,11 @@ import { generateText, Output } from 'ai' -import { getModel } from 'lib/ai/model' -import { DEFAULT_COMPLETION_MODEL } from 'lib/ai/model.utils' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' import { z } from 'zod' +import { getModel } from '@/lib/ai/model' +import { DEFAULT_COMPLETION_MODEL } from '@/lib/ai/model.utils' +import apiWrapper from '@/lib/api/apiWrapper' + async function handler(req: NextApiRequest, res: NextApiResponse) { const { method } = req diff --git a/apps/studio/pages/api/ai/feedback/rate.ts b/apps/studio/pages/api/ai/feedback/rate.ts index e05fcb8920..1dd3dfc347 100644 --- a/apps/studio/pages/api/ai/feedback/rate.ts +++ b/apps/studio/pages/api/ai/feedback/rate.ts @@ -1,17 +1,18 @@ import { generateText, Output } from 'ai' import { currentLogger } from 'braintrust' import { IS_PLATFORM } from 'common' -import { rateMessageResponseSchema } from 'components/ui/AIAssistantPanel/Message.utils' -import type { AiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' -import { getOrgAIDetails, getProjectAIDetails } from 'lib/ai/ai-details' -import { IS_TRACING_ENABLED, isTracingAllowed } from 'lib/ai/braintrust-logger' -import { getModel } from 'lib/ai/model' -import { DEFAULT_COMPLETION_MODEL } from 'lib/ai/model.utils' -import { sanitizeMessagePart } from 'lib/ai/tools/tool-sanitizer' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' import { z } from 'zod' +import { rateMessageResponseSchema } from '@/components/ui/AIAssistantPanel/Message.utils' +import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' +import { getOrgAIDetails, getProjectAIDetails } from '@/lib/ai/ai-details' +import { IS_TRACING_ENABLED, isTracingAllowed } from '@/lib/ai/braintrust-logger' +import { getModel } from '@/lib/ai/model' +import { DEFAULT_COMPLETION_MODEL } from '@/lib/ai/model.utils' +import { sanitizeMessagePart } from '@/lib/ai/tools/tool-sanitizer' +import apiWrapper from '@/lib/api/apiWrapper' + export const maxDuration = 30 async function handler(req: NextApiRequest, res: NextApiResponse) { diff --git a/apps/studio/pages/api/ai/onboarding/design.ts b/apps/studio/pages/api/ai/onboarding/design.ts index b2bfab74e0..d568932cf5 100644 --- a/apps/studio/pages/api/ai/onboarding/design.ts +++ b/apps/studio/pages/api/ai/onboarding/design.ts @@ -3,9 +3,9 @@ import { source } from 'common-tags' import { NextApiRequest, NextApiResponse } from 'next' import { z } from 'zod' -import { getModel } from 'lib/ai/model' -import { DEFAULT_COMPLETION_MODEL } from 'lib/ai/model.utils' -import apiWrapper from 'lib/api/apiWrapper' +import { getModel } from '@/lib/ai/model' +import { DEFAULT_COMPLETION_MODEL } from '@/lib/ai/model.utils' +import apiWrapper from '@/lib/api/apiWrapper' export const maxDuration = 60 diff --git a/apps/studio/pages/api/ai/sql/check-api-key.ts b/apps/studio/pages/api/ai/sql/check-api-key.ts index b13df3e6dc..aedf98eaad 100644 --- a/apps/studio/pages/api/ai/sql/check-api-key.ts +++ b/apps/studio/pages/api/ai/sql/check-api-key.ts @@ -1,6 +1,7 @@ -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const wrapper = (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/ai/sql/cron-v2.ts b/apps/studio/pages/api/ai/sql/cron-v2.ts index 4b0bf65b8a..21acb114ec 100644 --- a/apps/studio/pages/api/ai/sql/cron-v2.ts +++ b/apps/studio/pages/api/ai/sql/cron-v2.ts @@ -1,11 +1,12 @@ import { generateText, Output } from 'ai' import { source } from 'common-tags' -import { getModel } from 'lib/ai/model' -import { DEFAULT_COMPLETION_MODEL } from 'lib/ai/model.utils' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' import { z } from 'zod' +import { getModel } from '@/lib/ai/model' +import { DEFAULT_COMPLETION_MODEL } from '@/lib/ai/model.utils' +import apiWrapper from '@/lib/api/apiWrapper' + const cronSchema = z.object({ cron_expression: z.string().describe('The generated cron expression.'), }) diff --git a/apps/studio/pages/api/ai/sql/filter-v1.ts b/apps/studio/pages/api/ai/sql/filter-v1.ts index a477bff502..af85f0021e 100644 --- a/apps/studio/pages/api/ai/sql/filter-v1.ts +++ b/apps/studio/pages/api/ai/sql/filter-v1.ts @@ -1,16 +1,17 @@ import { generateText, Output } from 'ai' import { source } from 'common-tags' -import { getModel } from 'lib/ai/model' -import { DEFAULT_COMPLETION_MODEL } from 'lib/ai/model.utils' -import apiWrapper from 'lib/api/apiWrapper' +import { NextApiRequest, NextApiResponse } from 'next' + +import { getModel } from '@/lib/ai/model' +import { DEFAULT_COMPLETION_MODEL } from '@/lib/ai/model.utils' +import apiWrapper from '@/lib/api/apiWrapper' import { filterGroupSchemaForAI, requestSchema, serializeOperators, serializeOptions, validateFilterGroup, -} from 'lib/api/filterHelpers' -import { NextApiRequest, NextApiResponse } from 'next' +} from '@/lib/api/filterHelpers' async function handler(req: NextApiRequest, res: NextApiResponse) { const { method } = req diff --git a/apps/studio/pages/api/ai/sql/generate-v4.ts b/apps/studio/pages/api/ai/sql/generate-v4.ts index 01ca53503c..372658953a 100644 --- a/apps/studio/pages/api/ai/sql/generate-v4.ts +++ b/apps/studio/pages/api/ai/sql/generate-v4.ts @@ -2,12 +2,15 @@ import pgMeta from '@supabase/pg-meta' import type { JwtPayload } from '@supabase/supabase-js' import { safeValidateUIMessages } from 'ai' import { IS_PLATFORM } from 'common' -import { executeSql } from 'data/sql/execute-sql-query' -import type { AiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' -import { getOrgAIDetails, getProjectAIDetails } from 'lib/ai/ai-details' -import { isTracingAllowed } from 'lib/ai/braintrust-logger' -import { generateAssistantResponse } from 'lib/ai/generate-assistant-response' -import { getModel } from 'lib/ai/model' +import type { NextApiRequest, NextApiResponse } from 'next' +import z from 'zod' + +import { executeSql } from '@/data/sql/execute-sql-query' +import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' +import { getOrgAIDetails, getProjectAIDetails } from '@/lib/ai/ai-details' +import { isTracingAllowed } from '@/lib/ai/braintrust-logger' +import { generateAssistantResponse } from '@/lib/ai/generate-assistant-response' +import { getModel } from '@/lib/ai/model' import { DEFAULT_ASSISTANT_ADVANCE_MODEL_ID, DEFAULT_ASSISTANT_BASE_MODEL_ID, @@ -15,13 +18,11 @@ import { isAssistantBaseModelId, isKnownAssistantModelId, type AssistantModelId, -} from 'lib/ai/model.utils' -import { getTools } from 'lib/ai/tools' -import apiWrapper from 'lib/api/apiWrapper' -import { executeQuery } from 'lib/api/self-hosted/query' -import { getURL } from 'lib/helpers' -import type { NextApiRequest, NextApiResponse } from 'next' -import z from 'zod' +} from '@/lib/ai/model.utils' +import { getTools } from '@/lib/ai/tools' +import apiWrapper from '@/lib/api/apiWrapper' +import { executeQuery } from '@/lib/api/self-hosted/query' +import { getURL } from '@/lib/helpers' export const maxDuration = 120 diff --git a/apps/studio/pages/api/ai/sql/policy.ts b/apps/studio/pages/api/ai/sql/policy.ts index b99e8776d3..a6c30ebd76 100644 --- a/apps/studio/pages/api/ai/sql/policy.ts +++ b/apps/studio/pages/api/ai/sql/policy.ts @@ -1,16 +1,17 @@ import { generateText, Output, stepCountIs } from 'ai' import { IS_PLATFORM } from 'common' import { source } from 'common-tags' -import type { AiOptInLevel } from 'hooks/misc/useOrgOptedIntoAi' -import { getOrgAIDetails } from 'lib/ai/ai-details' -import { getModel } from 'lib/ai/model' -import { DEFAULT_COMPLETION_MODEL } from 'lib/ai/model.utils' -import { RLS_PROMPT } from 'lib/ai/prompts' -import { getTools } from 'lib/ai/tools' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' import { z } from 'zod' +import type { AiOptInLevel } from '@/hooks/misc/useOrgOptedIntoAi' +import { getOrgAIDetails } from '@/lib/ai/ai-details' +import { getModel } from '@/lib/ai/model' +import { DEFAULT_COMPLETION_MODEL } from '@/lib/ai/model.utils' +import { RLS_PROMPT } from '@/lib/ai/prompts' +import { getTools } from '@/lib/ai/tools' +import apiWrapper from '@/lib/api/apiWrapper' + const policySchema = z.object({ sql: z.string().describe('The generated Postgres CREATE POLICY statement.'), name: z.string().describe('The name of the policy.'), diff --git a/apps/studio/pages/api/ai/sql/title-v2.ts b/apps/studio/pages/api/ai/sql/title-v2.ts index b391251bf4..e40420e406 100644 --- a/apps/studio/pages/api/ai/sql/title-v2.ts +++ b/apps/studio/pages/api/ai/sql/title-v2.ts @@ -1,11 +1,12 @@ import { generateText, Output } from 'ai' import { source } from 'common-tags' -import { getModel } from 'lib/ai/model' -import { DEFAULT_COMPLETION_MODEL } from 'lib/ai/model.utils' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' import { z } from 'zod' +import { getModel } from '@/lib/ai/model' +import { DEFAULT_COMPLETION_MODEL } from '@/lib/ai/model.utils' +import apiWrapper from '@/lib/api/apiWrapper' + const titleSchema = z.object({ title: z .string() diff --git a/apps/studio/pages/api/check-cname.ts b/apps/studio/pages/api/check-cname.ts index aad6be583b..2965e44225 100644 --- a/apps/studio/pages/api/check-cname.ts +++ b/apps/studio/pages/api/check-cname.ts @@ -1,6 +1,7 @@ -import { CheckCNAMERecordResponse } from 'data/custom-domains/check-cname-mutation' import { NextApiRequest, NextApiResponse } from 'next' +import { CheckCNAMERecordResponse } from '@/data/custom-domains/check-cname-mutation' + const handler = async (req: NextApiRequest, res: NextApiResponse) => { const { domain } = req.query diff --git a/apps/studio/pages/api/edge-functions/test.ts b/apps/studio/pages/api/edge-functions/test.ts index 442d4f1be4..bc356e7912 100644 --- a/apps/studio/pages/api/edge-functions/test.ts +++ b/apps/studio/pages/api/edge-functions/test.ts @@ -1,7 +1,8 @@ import { IS_PLATFORM } from 'common' -import { isValidEdgeFunctionURL } from 'lib/api/edgeFunctions' import { NextApiRequest, NextApiResponse } from 'next' +import { isValidEdgeFunctionURL } from '@/lib/api/edgeFunctions' + export default async function handler(req: NextApiRequest, res: NextApiResponse) { const { method } = req diff --git a/apps/studio/pages/api/generate-attachment-url.ts b/apps/studio/pages/api/generate-attachment-url.ts index 1bb8fcbff4..6110a36891 100644 --- a/apps/studio/pages/api/generate-attachment-url.ts +++ b/apps/studio/pages/api/generate-attachment-url.ts @@ -2,9 +2,9 @@ import { createClient } from '@supabase/supabase-js' import type { NextApiRequest, NextApiResponse } from 'next' import z from 'zod' -import { DASHBOARD_LOG_BUCKET } from 'components/interfaces/Support/dashboard-logs' -import apiWrapper from 'lib/api/apiWrapper' -import { getUserClaims } from 'lib/gotrue' +import { DASHBOARD_LOG_BUCKET } from '@/components/interfaces/Support/dashboard-logs' +import apiWrapper from '@/lib/api/apiWrapper' +import { getUserClaims } from '@/lib/gotrue' export const maxDuration = 120 diff --git a/apps/studio/pages/api/mcp/index.ts b/apps/studio/pages/api/mcp/index.ts index cf8a2b1be0..509d5f589e 100644 --- a/apps/studio/pages/api/mcp/index.ts +++ b/apps/studio/pages/api/mcp/index.ts @@ -1,15 +1,20 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js' import { createSupabaseMcpServer, SupabasePlatform } from '@supabase/mcp-server-supabase' import { stripIndent } from 'common-tags' -import { commaSeparatedStringIntoArray, fromNodeHeaders, zBooleanString } from 'lib/api/apiHelpers' +import { NextApiRequest, NextApiResponse } from 'next' +import { z } from 'zod' + +import { + commaSeparatedStringIntoArray, + fromNodeHeaders, + zBooleanString, +} from '@/lib/api/apiHelpers' import { getDatabaseOperations, getDebuggingOperations, getDevelopmentOperations, -} from 'lib/api/self-hosted/mcp' -import { DEFAULT_PROJECT } from 'lib/constants/api' -import { NextApiRequest, NextApiResponse } from 'next' -import { z } from 'zod' +} from '@/lib/api/self-hosted/mcp' +import { DEFAULT_PROJECT } from '@/lib/constants/api' const supportedFeatureGroupSchema = z.enum(['docs', 'database', 'development', 'debugging']) diff --git a/apps/studio/pages/api/platform/auth/[ref]/invite.ts b/apps/studio/pages/api/platform/auth/[ref]/invite.ts index c72ac84d29..ae8a119dfa 100644 --- a/apps/studio/pages/api/platform/auth/[ref]/invite.ts +++ b/apps/studio/pages/api/platform/auth/[ref]/invite.ts @@ -1,8 +1,8 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchPost } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' +import { fetchPost } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/auth/[ref]/magiclink.ts b/apps/studio/pages/api/platform/auth/[ref]/magiclink.ts index 2063d47447..249858996a 100644 --- a/apps/studio/pages/api/platform/auth/[ref]/magiclink.ts +++ b/apps/studio/pages/api/platform/auth/[ref]/magiclink.ts @@ -1,8 +1,8 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchPost } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' +import { fetchPost } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/auth/[ref]/otp.ts b/apps/studio/pages/api/platform/auth/[ref]/otp.ts index ca70cd0298..f4b6e0bc9a 100644 --- a/apps/studio/pages/api/platform/auth/[ref]/otp.ts +++ b/apps/studio/pages/api/platform/auth/[ref]/otp.ts @@ -1,8 +1,8 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchPost } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' +import { fetchPost } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/auth/[ref]/recover.ts b/apps/studio/pages/api/platform/auth/[ref]/recover.ts index 50e4c4afa2..e4edcd7959 100644 --- a/apps/studio/pages/api/platform/auth/[ref]/recover.ts +++ b/apps/studio/pages/api/platform/auth/[ref]/recover.ts @@ -1,8 +1,8 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchPost } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' +import { fetchPost } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/auth/[ref]/users/[id]/factors.ts b/apps/studio/pages/api/platform/auth/[ref]/users/[id]/factors.ts index 71fc86b0fb..de399d7143 100644 --- a/apps/studio/pages/api/platform/auth/[ref]/users/[id]/factors.ts +++ b/apps/studio/pages/api/platform/auth/[ref]/users/[id]/factors.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/auth/[ref]/users/[id]/index.ts b/apps/studio/pages/api/platform/auth/[ref]/users/[id]/index.ts index 17cca3b002..fd1b9ab1b0 100644 --- a/apps/studio/pages/api/platform/auth/[ref]/users/[id]/index.ts +++ b/apps/studio/pages/api/platform/auth/[ref]/users/[id]/index.ts @@ -1,7 +1,7 @@ import { createClient } from '@supabase/supabase-js' import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) diff --git a/apps/studio/pages/api/platform/auth/[ref]/users/index.ts b/apps/studio/pages/api/platform/auth/[ref]/users/index.ts index a4c2239d38..a048ff84e2 100644 --- a/apps/studio/pages/api/platform/auth/[ref]/users/index.ts +++ b/apps/studio/pages/api/platform/auth/[ref]/users/index.ts @@ -1,7 +1,7 @@ import { createClient } from '@supabase/supabase-js' import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) diff --git a/apps/studio/pages/api/platform/database/[ref]/pooling.ts b/apps/studio/pages/api/platform/database/[ref]/pooling.ts index 836198f8d5..adaa69d4e2 100644 --- a/apps/studio/pages/api/platform/database/[ref]/pooling.ts +++ b/apps/studio/pages/api/platform/database/[ref]/pooling.ts @@ -1,5 +1,6 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' + +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/integrations/[slug].ts b/apps/studio/pages/api/platform/integrations/[slug].ts index 5679a522b3..fb331c9f57 100644 --- a/apps/studio/pages/api/platform/integrations/[slug].ts +++ b/apps/studio/pages/api/platform/integrations/[slug].ts @@ -1,7 +1,7 @@ +import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { paths } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/integrations/github/authorization.ts b/apps/studio/pages/api/platform/integrations/github/authorization.ts index a196cd5aa7..92b57b3dbb 100644 --- a/apps/studio/pages/api/platform/integrations/github/authorization.ts +++ b/apps/studio/pages/api/platform/integrations/github/authorization.ts @@ -1,7 +1,7 @@ +import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { paths } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/integrations/github/connections.ts b/apps/studio/pages/api/platform/integrations/github/connections.ts index b1ec5e081e..460463946f 100644 --- a/apps/studio/pages/api/platform/integrations/github/connections.ts +++ b/apps/studio/pages/api/platform/integrations/github/connections.ts @@ -1,7 +1,7 @@ +import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { paths } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/integrations/github/repositories.ts b/apps/studio/pages/api/platform/integrations/github/repositories.ts index a48e50a781..ca10723244 100644 --- a/apps/studio/pages/api/platform/integrations/github/repositories.ts +++ b/apps/studio/pages/api/platform/integrations/github/repositories.ts @@ -1,7 +1,7 @@ +import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { paths } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/organizations/[slug]/billing/subscription.ts b/apps/studio/pages/api/platform/organizations/[slug]/billing/subscription.ts index dfc1d78632..7095dbfcb8 100644 --- a/apps/studio/pages/api/platform/organizations/[slug]/billing/subscription.ts +++ b/apps/studio/pages/api/platform/organizations/[slug]/billing/subscription.ts @@ -1,7 +1,7 @@ +import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { paths } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/organizations/index.ts b/apps/studio/pages/api/platform/organizations/index.ts index 715dabb9b1..2730a0b648 100644 --- a/apps/studio/pages/api/platform/organizations/index.ts +++ b/apps/studio/pages/api/platform/organizations/index.ts @@ -1,6 +1,6 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/column-privileges.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/column-privileges.ts index e8b288d021..67871cce29 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/column-privileges.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/column-privileges.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' import { getPgMetaRedirectUrl } from './tables' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/extensions.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/extensions.ts index 51862a2e97..785f1bc84d 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/extensions.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/extensions.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { PG_META_URL } from 'lib/constants' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { PG_META_URL } from '@/lib/constants' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/foreign-tables.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/foreign-tables.ts index a919ca0950..41bf785c93 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/foreign-tables.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/foreign-tables.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' import { getPgMetaRedirectUrl } from './tables' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/materialized-views.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/materialized-views.ts index 72a35c9622..edf2a26996 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/materialized-views.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/materialized-views.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' import { getPgMetaRedirectUrl } from './tables' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/policies.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/policies.ts index 775b7cf36e..80f6cd54b5 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/policies.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/policies.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { PG_META_URL } from 'lib/constants' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { PG_META_URL } from '@/lib/constants' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/publications.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/publications.ts index fdb191442f..0a527b6752 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/publications.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/publications.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { PG_META_URL } from 'lib/constants' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { PG_META_URL } from '@/lib/constants' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/query/index.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/query/index.ts index 7eb8838e0e..1a4df85bbd 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/query/index.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/query/index.ts @@ -1,9 +1,10 @@ -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { executeQuery } from 'lib/api/self-hosted/query' -import { PgMetaDatabaseError } from 'lib/api/self-hosted/types' import { NextApiRequest, NextApiResponse } from 'next' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { executeQuery } from '@/lib/api/self-hosted/query' +import { PgMetaDatabaseError } from '@/lib/api/self-hosted/types' + export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/tables.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/tables.ts index 2c9ecbd1bd..f985726d16 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/tables.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/tables.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { PG_META_URL } from 'lib/constants' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { PG_META_URL } from '@/lib/constants' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/triggers.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/triggers.ts index fe4c1308a2..db34495f12 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/triggers.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/triggers.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { PG_META_URL } from 'lib/constants' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { PG_META_URL } from '@/lib/constants' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/types.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/types.ts index 8293590f62..5fe6f44613 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/types.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/types.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { PG_META_URL } from 'lib/constants' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { PG_META_URL } from '@/lib/constants' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/pg-meta/[ref]/views.ts b/apps/studio/pages/api/platform/pg-meta/[ref]/views.ts index 755ff6cf42..7295c1a243 100644 --- a/apps/studio/pages/api/platform/pg-meta/[ref]/views.ts +++ b/apps/studio/pages/api/platform/pg-meta/[ref]/views.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { fetchGet } from 'data/fetchers' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' import { getPgMetaRedirectUrl } from './tables' +import { fetchGet } from '@/data/fetchers' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/platform/profile/index.ts b/apps/studio/pages/api/platform/profile/index.ts index 4344069167..1703b7f20d 100644 --- a/apps/studio/pages/api/platform/profile/index.ts +++ b/apps/studio/pages/api/platform/profile/index.ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' -import { DEFAULT_PROJECT } from 'lib/constants/api' +import apiWrapper from '@/lib/api/apiWrapper' +import { DEFAULT_PROJECT } from '@/lib/constants/api' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/analytics/endpoints/[name].ts b/apps/studio/pages/api/platform/projects/[ref]/analytics/endpoints/[name].ts index 054f83b65b..8adc8b3359 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/analytics/endpoints/[name].ts +++ b/apps/studio/pages/api/platform/projects/[ref]/analytics/endpoints/[name].ts @@ -1,7 +1,8 @@ -import apiWrapper from 'lib/api/apiWrapper' -import { retrieveAnalyticsData } from 'lib/api/self-hosted/logs' -import { NextApiRequest, NextApiResponse } from 'next' import assert from 'node:assert' +import { NextApiRequest, NextApiResponse } from 'next' + +import apiWrapper from '@/lib/api/apiWrapper' +import { retrieveAnalyticsData } from '@/lib/api/self-hosted/logs' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/analytics/log-drains.ts b/apps/studio/pages/api/platform/projects/[ref]/analytics/log-drains.ts index 79469aad33..970191817f 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/analytics/log-drains.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/analytics/log-drains.ts @@ -1,7 +1,8 @@ -import apiWrapper from 'lib/api/apiWrapper' -import { PROJECT_ANALYTICS_URL } from 'lib/constants/api' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' +import { PROJECT_ANALYTICS_URL } from '@/lib/constants/api' + export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) async function handler(req: NextApiRequest, res: NextApiResponse) { diff --git a/apps/studio/pages/api/platform/projects/[ref]/analytics/log-drains/[uuid].ts b/apps/studio/pages/api/platform/projects/[ref]/analytics/log-drains/[uuid].ts index 2e66774baa..e2c8a7424a 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/analytics/log-drains/[uuid].ts +++ b/apps/studio/pages/api/platform/projects/[ref]/analytics/log-drains/[uuid].ts @@ -1,6 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' -import { PROJECT_ANALYTICS_URL } from 'lib/constants/api' + +import apiWrapper from '@/lib/api/apiWrapper' +import { PROJECT_ANALYTICS_URL } from '@/lib/constants/api' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/api-keys/temporary.ts b/apps/studio/pages/api/platform/projects/[ref]/api-keys/temporary.ts index d8a098039b..799f36e8b4 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/api-keys/temporary.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/api-keys/temporary.ts @@ -1,7 +1,7 @@ +import { components } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { components } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' type ProjectAppConfig = components['schemas']['ProjectSettingsResponse']['app_config'] & { protocol?: string diff --git a/apps/studio/pages/api/platform/projects/[ref]/api/graphql.ts b/apps/studio/pages/api/platform/projects/[ref]/api/graphql.ts index 73f206a218..bf333896e5 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/api/graphql.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/api/graphql.ts @@ -1,5 +1,6 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' + +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/api/rest.ts b/apps/studio/pages/api/platform/projects/[ref]/api/rest.ts index d4c2a519ac..e5be4f2a78 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/api/rest.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/api/rest.ts @@ -1,5 +1,6 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' + +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/billing/addons.ts b/apps/studio/pages/api/platform/projects/[ref]/billing/addons.ts index 550029e48c..7d305169f3 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/billing/addons.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/billing/addons.ts @@ -1,7 +1,7 @@ +import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { paths } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/config/index.ts b/apps/studio/pages/api/platform/projects/[ref]/config/index.ts index 3984fefc5b..44496ee2e0 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/config/index.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/config/index.ts @@ -1,5 +1,6 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' + +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/config/postgrest.ts b/apps/studio/pages/api/platform/projects/[ref]/config/postgrest.ts index c0411c96e8..0a977c55e8 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/config/postgrest.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/config/postgrest.ts @@ -1,7 +1,8 @@ import { components } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) async function handler(req: NextApiRequest, res: NextApiResponse) { diff --git a/apps/studio/pages/api/platform/projects/[ref]/content/count.ts b/apps/studio/pages/api/platform/projects/[ref]/content/count.ts index de5fcaee2f..0edde385c5 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/content/count.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/content/count.ts @@ -1,8 +1,8 @@ import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' -import { getSnippets } from 'lib/api/snippets.utils' +import apiWrapper from '@/lib/api/apiWrapper' +import { getSnippets } from '@/lib/api/snippets.utils' const wrappedHandler = (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/content/folders/[id].ts b/apps/studio/pages/api/platform/projects/[ref]/content/folders/[id].ts index 1cf59d106d..8a2d23aac6 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/content/folders/[id].ts +++ b/apps/studio/pages/api/platform/projects/[ref]/content/folders/[id].ts @@ -1,8 +1,8 @@ import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' -import { getFolders, getSnippets } from 'lib/api/snippets.utils' +import apiWrapper from '@/lib/api/apiWrapper' +import { getFolders, getSnippets } from '@/lib/api/snippets.utils' const wrappedHandler = (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/content/folders/index.ts b/apps/studio/pages/api/platform/projects/[ref]/content/folders/index.ts index e9c0143eda..1861df8c9f 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/content/folders/index.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/content/folders/index.ts @@ -1,8 +1,8 @@ import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' -import { createFolder, deleteFolder, getFolders, getSnippets } from 'lib/api/snippets.utils' +import apiWrapper from '@/lib/api/apiWrapper' +import { createFolder, deleteFolder, getFolders, getSnippets } from '@/lib/api/snippets.utils' const wrappedHandler = (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/content/index.ts b/apps/studio/pages/api/platform/projects/[ref]/content/index.ts index ac768824f2..d15046d6cc 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/content/index.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/content/index.ts @@ -3,14 +3,14 @@ import { compact } from 'lodash' import { NextApiRequest, NextApiResponse } from 'next' import { z } from 'zod' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' import { deleteSnippet, getSnippets, saveSnippet, SnippetSchema, updateSnippet, -} from 'lib/api/snippets.utils' +} from '@/lib/api/snippets.utils' const wrappedHandler = (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/content/item/[id].ts b/apps/studio/pages/api/platform/projects/[ref]/content/item/[id].ts index 42065cacfe..388a957866 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/content/item/[id].ts +++ b/apps/studio/pages/api/platform/projects/[ref]/content/item/[id].ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' -import { getSnippet } from 'lib/api/snippets.utils' +import apiWrapper from '@/lib/api/apiWrapper' +import { getSnippet } from '@/lib/api/snippets.utils' const wrappedHandler = (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/databases.ts b/apps/studio/pages/api/platform/projects/[ref]/databases.ts index 0db3311396..42197c41e4 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/databases.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/databases.ts @@ -1,8 +1,8 @@ +import { paths } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { paths } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' -import { PROJECT_REST_URL } from 'lib/constants/api' +import apiWrapper from '@/lib/api/apiWrapper' +import { PROJECT_REST_URL } from '@/lib/constants/api' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/index.ts b/apps/studio/pages/api/platform/projects/[ref]/index.ts index c0ecb82de4..0a85969ded 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/index.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/index.ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' -import { DEFAULT_PROJECT, PROJECT_REST_URL } from 'lib/constants/api' +import apiWrapper from '@/lib/api/apiWrapper' +import { DEFAULT_PROJECT, PROJECT_REST_URL } from '@/lib/constants/api' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/infra-monitoring.ts b/apps/studio/pages/api/platform/projects/[ref]/infra-monitoring.ts index 4a954d9683..5b645eadab 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/infra-monitoring.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/infra-monitoring.ts @@ -1,5 +1,6 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' + +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/run-lints.ts b/apps/studio/pages/api/platform/projects/[ref]/run-lints.ts index 08f5b6dab4..1ced5a4545 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/run-lints.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/run-lints.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { DEFAULT_EXPOSED_SCHEMAS } from 'lib/api/self-hosted/constants' -import { getLints } from 'lib/api/self-hosted/lints' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { DEFAULT_EXPOSED_SCHEMAS } from '@/lib/api/self-hosted/constants' +import { getLints } from '@/lib/api/self-hosted/lints' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/projects/[ref]/settings.ts b/apps/studio/pages/api/platform/projects/[ref]/settings.ts index ba8b4746ca..e63ffcdb1a 100644 --- a/apps/studio/pages/api/platform/projects/[ref]/settings.ts +++ b/apps/studio/pages/api/platform/projects/[ref]/settings.ts @@ -1,8 +1,8 @@ +import { components } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { components } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' -import { getProjectSettings } from 'lib/api/self-hosted/settings' +import apiWrapper from '@/lib/api/apiWrapper' +import { getProjectSettings } from '@/lib/api/self-hosted/settings' type ProjectAppConfig = components['schemas']['ProjectSettingsResponse']['app_config'] & { protocol?: string diff --git a/apps/studio/pages/api/platform/projects/index.ts b/apps/studio/pages/api/platform/projects/index.ts index e70e1cf817..8ebcac8c90 100644 --- a/apps/studio/pages/api/platform/projects/index.ts +++ b/apps/studio/pages/api/platform/projects/index.ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' -import { DEFAULT_PROJECT } from 'lib/constants/api' +import apiWrapper from '@/lib/api/apiWrapper' +import { DEFAULT_PROJECT } from '@/lib/constants/api' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/props/org/[slug].tsx b/apps/studio/pages/api/platform/props/org/[slug].tsx index f0b13bf1b6..4210ac5cfc 100644 --- a/apps/studio/pages/api/platform/props/org/[slug].tsx +++ b/apps/studio/pages/api/platform/props/org/[slug].tsx @@ -1,5 +1,6 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' + +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/props/project/[ref]/api.ts b/apps/studio/pages/api/platform/props/project/[ref]/api.ts index 463e9c8f25..fcc878b575 100644 --- a/apps/studio/pages/api/platform/props/project/[ref]/api.ts +++ b/apps/studio/pages/api/platform/props/project/[ref]/api.ts @@ -1,12 +1,12 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' import { DEFAULT_PROJECT, PROJECT_ENDPOINT, PROJECT_ENDPOINT_PROTOCOL, PROJECT_REST_URL, -} from 'lib/constants/api' +} from '@/lib/constants/api' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/props/project/[ref]/index.ts b/apps/studio/pages/api/platform/props/project/[ref]/index.ts index c04f3bc80f..871f119e27 100644 --- a/apps/studio/pages/api/platform/props/project/[ref]/index.ts +++ b/apps/studio/pages/api/platform/props/project/[ref]/index.ts @@ -1,7 +1,7 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' -import { DEFAULT_PROJECT } from 'lib/constants/api' +import apiWrapper from '@/lib/api/apiWrapper' +import { DEFAULT_PROJECT } from '@/lib/constants/api' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/empty.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/empty.ts index 9b162f6a63..e452568d99 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/empty.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/empty.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/index.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/index.ts index 64f8bb3a32..0610098487 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/index.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/index.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/download.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/download.ts index fa51a404ed..1544687520 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/download.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/download.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/index.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/index.ts index d80425dd17..c8ff756779 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/index.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/index.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/list.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/list.ts index 26fa43271f..845cc22dea 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/list.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/list.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/move.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/move.ts index d4c8b5485f..8598f42a62 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/move.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/move.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/public-url.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/public-url.ts index d6b1bd5614..c0b01c6a87 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/public-url.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/public-url.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/sign-multi.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/sign-multi.ts index 327c7d1dd9..c670f17732 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/sign-multi.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/sign-multi.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) const wrappedHandler = (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/sign.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/sign.ts index a518d171fd..26bf7c88d6 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/sign.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/[id]/objects/sign.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/storage/[ref]/buckets/index.ts b/apps/studio/pages/api/platform/storage/[ref]/buckets/index.ts index 1240edb7d6..010e7b723e 100644 --- a/apps/studio/pages/api/platform/storage/[ref]/buckets/index.ts +++ b/apps/studio/pages/api/platform/storage/[ref]/buckets/index.ts @@ -1,7 +1,8 @@ import { createClient } from '@supabase/supabase-js' -import apiWrapper from 'lib/api/apiWrapper' import { NextApiRequest, NextApiResponse } from 'next' +import apiWrapper from '@/lib/api/apiWrapper' + const supabase = createClient(process.env.SUPABASE_URL!, process.env.SUPABASE_SERVICE_KEY!) export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/platform/telemetry/event.ts b/apps/studio/pages/api/platform/telemetry/event.ts index 4a8522d13a..fdf9ac6c1f 100644 --- a/apps/studio/pages/api/platform/telemetry/event.ts +++ b/apps/studio/pages/api/platform/telemetry/event.ts @@ -1,5 +1,6 @@ import { NextApiRequest, NextApiResponse } from 'next' -import apiWrapper from 'lib/api/apiWrapper' + +import apiWrapper from '@/lib/api/apiWrapper' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler) diff --git a/apps/studio/pages/api/v1/projects/[ref]/api-keys.ts b/apps/studio/pages/api/v1/projects/[ref]/api-keys.ts index 8a11aa695d..391ce30f39 100644 --- a/apps/studio/pages/api/v1/projects/[ref]/api-keys.ts +++ b/apps/studio/pages/api/v1/projects/[ref]/api-keys.ts @@ -1,7 +1,7 @@ +import { components } from 'api-types' import { NextApiRequest, NextApiResponse } from 'next' -import { components } from 'api-types' -import apiWrapper from 'lib/api/apiWrapper' +import apiWrapper from '@/lib/api/apiWrapper' type ProjectAppConfig = components['schemas']['ProjectSettingsResponse']['app_config'] & { protocol?: string diff --git a/apps/studio/pages/api/v1/projects/[ref]/database/migrations.ts b/apps/studio/pages/api/v1/projects/[ref]/database/migrations.ts index 34efca89f7..b35eb39c16 100644 --- a/apps/studio/pages/api/v1/projects/[ref]/database/migrations.ts +++ b/apps/studio/pages/api/v1/projects/[ref]/database/migrations.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { applyAndTrackMigrations, listMigrationVersions } from 'lib/api/self-hosted/migrations' -import { PgMetaDatabaseError } from 'lib/api/self-hosted/types' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { applyAndTrackMigrations, listMigrationVersions } from '@/lib/api/self-hosted/migrations' +import { PgMetaDatabaseError } from '@/lib/api/self-hosted/types' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/v1/projects/[ref]/functions/[slug]/index.ts b/apps/studio/pages/api/v1/projects/[ref]/functions/[slug]/index.ts index 05a4a8016b..82466601ae 100644 --- a/apps/studio/pages/api/v1/projects/[ref]/functions/[slug]/index.ts +++ b/apps/studio/pages/api/v1/projects/[ref]/functions/[slug]/index.ts @@ -1,9 +1,9 @@ +import type { components } from 'api-types' import { type NextApiRequest, type NextApiResponse } from 'next' -import type { components } from 'api-types' -import { uuidv4 } from 'lib/helpers' -import apiWrapper from 'lib/api/apiWrapper' -import { getFunctionsArtifactStore } from 'lib/api/self-hosted/functions' +import apiWrapper from '@/lib/api/apiWrapper' +import { getFunctionsArtifactStore } from '@/lib/api/self-hosted/functions' +import { uuidv4 } from '@/lib/helpers' export default function handlerWithErrorCatching(req: NextApiRequest, res: NextApiResponse) { return apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/v1/projects/[ref]/functions/index.ts b/apps/studio/pages/api/v1/projects/[ref]/functions/index.ts index 2c38ebe4f2..db0b14c006 100644 --- a/apps/studio/pages/api/v1/projects/[ref]/functions/index.ts +++ b/apps/studio/pages/api/v1/projects/[ref]/functions/index.ts @@ -1,9 +1,9 @@ +import type { components } from 'api-types' import { type NextApiRequest, type NextApiResponse } from 'next' -import type { components } from 'api-types' -import { uuidv4 } from 'lib/helpers' -import apiWrapper from 'lib/api/apiWrapper' -import { getFunctionsArtifactStore } from 'lib/api/self-hosted/functions' +import apiWrapper from '@/lib/api/apiWrapper' +import { getFunctionsArtifactStore } from '@/lib/api/self-hosted/functions' +import { uuidv4 } from '@/lib/helpers' export default function handlerWithErrorCatching(req: NextApiRequest, res: NextApiResponse) { return apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/api/v1/projects/[ref]/types/typescript.ts b/apps/studio/pages/api/v1/projects/[ref]/types/typescript.ts index fc0120fc98..c0f684f4ef 100644 --- a/apps/studio/pages/api/v1/projects/[ref]/types/typescript.ts +++ b/apps/studio/pages/api/v1/projects/[ref]/types/typescript.ts @@ -1,9 +1,9 @@ import { NextApiRequest, NextApiResponse } from 'next' -import { constructHeaders } from 'lib/api/apiHelpers' -import apiWrapper from 'lib/api/apiWrapper' -import { generateTypescriptTypes } from 'lib/api/self-hosted/generate-types' -import { ResponseError } from 'types' +import { constructHeaders } from '@/lib/api/apiHelpers' +import apiWrapper from '@/lib/api/apiWrapper' +import { generateTypescriptTypes } from '@/lib/api/self-hosted/generate-types' +import { ResponseError } from '@/types' export default (req: NextApiRequest, res: NextApiResponse) => apiWrapper(req, res, handler, { withAuth: true }) diff --git a/apps/studio/pages/aws-marketplace-onboarding.tsx b/apps/studio/pages/aws-marketplace-onboarding.tsx index bf8615420e..64e00cb50b 100644 --- a/apps/studio/pages/aws-marketplace-onboarding.tsx +++ b/apps/studio/pages/aws-marketplace-onboarding.tsx @@ -1,9 +1,10 @@ import { useRouter } from 'next/router' -import type { NextPageWithLayout } from 'types' +import AwsMarketplaceContractNotLinkable from '../components/interfaces/Organization/CloudMarketplace/AwsMarketplaceContractNotLinkable' import AwsMarketplaceCreateNewOrg from '../components/interfaces/Organization/CloudMarketplace/AwsMarketplaceCreateNewOrg' import { AwsMarketplaceLinkExistingOrg } from '../components/interfaces/Organization/CloudMarketplace/AwsMarketplaceLinkExistingOrg' import AwsMarketplaceOnboardingPlaceholder from '../components/interfaces/Organization/CloudMarketplace/AwsMarketplaceOnboardingPlaceholder' +import { useCloudMarketplaceContractLinkingEligibilityQuery } from '../components/interfaces/Organization/CloudMarketplace/cloud-marketplace-query' import LinkAwsMarketplaceLayout from '../components/layouts/LinkAwsMarketplaceLayout' import { ScaffoldContainer, @@ -12,8 +13,7 @@ import { ScaffoldTitle, } from '../components/layouts/Scaffold' import { useOrganizationsQuery } from '../data/organizations/organizations-query' -import { useCloudMarketplaceContractLinkingEligibilityQuery } from '../components/interfaces/Organization/CloudMarketplace/cloud-marketplace-query' -import AwsMarketplaceContractNotLinkable from '../components/interfaces/Organization/CloudMarketplace/AwsMarketplaceContractNotLinkable' +import type { NextPageWithLayout } from '@/types' const AwsMarketplaceOnboarding: NextPageWithLayout = () => { const { diff --git a/apps/studio/pages/claim-project.tsx b/apps/studio/pages/claim-project.tsx index 481f9b7578..25cc7aa8e7 100644 --- a/apps/studio/pages/claim-project.tsx +++ b/apps/studio/pages/claim-project.tsx @@ -1,20 +1,20 @@ +import { useParams } from 'common' import Head from 'next/head' import { PropsWithChildren, useMemo, useState } from 'react' - -import { useParams } from 'common' -import { ProjectClaimBenefits } from 'components/interfaces/Organization/ProjectClaim/benefits' -import { ProjectClaimChooseOrg } from 'components/interfaces/Organization/ProjectClaim/choose-org' -import { ProjectClaimConfirm } from 'components/interfaces/Organization/ProjectClaim/confirm' -import { ProjectClaimLayout } from 'components/interfaces/Organization/ProjectClaim/layout' -import { useApiAuthorizationQuery } from 'data/api-authorization/api-authorization-query' -import { useOrganizationProjectClaimQuery } from 'data/organizations/organization-project-claim-query' -import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { useCustomContent } from 'hooks/custom-content/useCustomContent' -import { withAuth } from 'hooks/misc/withAuth' -import type { NextPageWithLayout } from 'types' import { Admonition } from 'ui-patterns/admonition' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' +import { ProjectClaimBenefits } from '@/components/interfaces/Organization/ProjectClaim/benefits' +import { ProjectClaimChooseOrg } from '@/components/interfaces/Organization/ProjectClaim/choose-org' +import { ProjectClaimConfirm } from '@/components/interfaces/Organization/ProjectClaim/confirm' +import { ProjectClaimLayout } from '@/components/interfaces/Organization/ProjectClaim/layout' +import { useApiAuthorizationQuery } from '@/data/api-authorization/api-authorization-query' +import { useOrganizationProjectClaimQuery } from '@/data/organizations/organization-project-claim-query' +import { useOrganizationsQuery } from '@/data/organizations/organizations-query' +import { useCustomContent } from '@/hooks/custom-content/useCustomContent' +import { withAuth } from '@/hooks/misc/withAuth' +import type { NextPageWithLayout } from '@/types' + const ClaimProjectPageLayout = ({ children }: PropsWithChildren) => { const { appTitle } = useCustomContent(['app:title']) diff --git a/apps/studio/pages/forgot-password-mfa.tsx b/apps/studio/pages/forgot-password-mfa.tsx index 801d950732..0141f41ddf 100644 --- a/apps/studio/pages/forgot-password-mfa.tsx +++ b/apps/studio/pages/forgot-password-mfa.tsx @@ -1,16 +1,16 @@ import * as Sentry from '@sentry/nextjs' import { useQueryClient } from '@tanstack/react-query' +import { getAccessToken } from 'common' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' import { toast } from 'sonner' - -import { getAccessToken } from 'common' -import { SignInMfaForm } from 'components/interfaces/SignIn/SignInMfaForm' -import ForgotPasswordLayout from 'components/layouts/SignInLayout/ForgotPasswordLayout' -import { auth, buildPathWithParams, getReturnToPath } from 'lib/gotrue' -import type { NextPageWithLayout } from 'types' import { LogoLoader } from 'ui' +import { SignInMfaForm } from '@/components/interfaces/SignIn/SignInMfaForm' +import ForgotPasswordLayout from '@/components/layouts/SignInLayout/ForgotPasswordLayout' +import { auth, buildPathWithParams, getReturnToPath } from '@/lib/gotrue' +import type { NextPageWithLayout } from '@/types' + const ForgotPasswordMfa: NextPageWithLayout = () => { const router = useRouter() const queryClient = useQueryClient() diff --git a/apps/studio/pages/forgot-password.tsx b/apps/studio/pages/forgot-password.tsx index 8952cd12cc..3e91d0ecae 100644 --- a/apps/studio/pages/forgot-password.tsx +++ b/apps/studio/pages/forgot-password.tsx @@ -1,8 +1,8 @@ import Link from 'next/link' -import { ForgotPasswordWizard } from 'components/interfaces/SignIn/ForgotPasswordWizard' -import ForgotPasswordLayout from 'components/layouts/SignInLayout/ForgotPasswordLayout' -import type { NextPageWithLayout } from 'types' +import { ForgotPasswordWizard } from '@/components/interfaces/SignIn/ForgotPasswordWizard' +import ForgotPasswordLayout from '@/components/layouts/SignInLayout/ForgotPasswordLayout' +import type { NextPageWithLayout } from '@/types' const ForgotPasswordPage: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/integrations/github/authorize.tsx b/apps/studio/pages/integrations/github/authorize.tsx index 07a3ec3b03..3a7510e611 100644 --- a/apps/studio/pages/integrations/github/authorize.tsx +++ b/apps/studio/pages/integrations/github/authorize.tsx @@ -1,7 +1,7 @@ +import { useParams } from 'common' import { useEffect } from 'react' -import { useParams } from 'common' -import { useGitHubAuthorizationCreateMutation } from 'data/integrations/github-authorization-create-mutation' +import { useGitHubAuthorizationCreateMutation } from '@/data/integrations/github-authorization-create-mutation' const GitHubIntegrationAuthorize = () => { const { code, state, setup_action } = useParams() diff --git a/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx b/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx index 8f5a4e3b1a..ff9df23a16 100644 --- a/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx +++ b/apps/studio/pages/integrations/vercel/[slug]/deploy-button/new-project.tsx @@ -1,29 +1,30 @@ import { buildDefaultPrivilegesSql } from '@supabase/pg-meta' import { useParams } from 'common' -import { isVercelUrl } from 'components/interfaces/Integrations/Vercel/VercelIntegration.utils' -import { Markdown } from 'components/interfaces/Markdown' -import VercelIntegrationWindowLayout from 'components/layouts/IntegrationsLayout/VercelIntegrationWindowLayout' -import { ScaffoldColumn, ScaffoldContainer } from 'components/layouts/Scaffold' -import { PasswordStrengthBar } from 'components/ui/PasswordStrengthBar' -import { useProjectSettingsV2Query } from 'data/config/project-settings-v2-query' -import { useIntegrationsQuery } from 'data/integrations/integrations-query' -import { useIntegrationVercelConnectionsCreateMutation } from 'data/integrations/integrations-vercel-connections-create-mutation' -import { useVercelProjectsQuery } from 'data/integrations/integrations-vercel-projects-query' -import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { useProjectCreateMutation } from 'data/projects/project-create-mutation' -import { useDataApiGrantTogglesEnabled } from 'hooks/misc/useDataApiGrantTogglesEnabled' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { BASE_PATH, PROVIDERS } from 'lib/constants' -import { getInitialMigrationSQLFromGitHubRepo } from 'lib/integration-utils' -import { passwordStrength, PasswordStrengthScore } from 'lib/password-strength' -import { generateStrongPassword } from 'lib/project' import { ChangeEvent, useEffect, useState } from 'react' import { AWS_REGIONS } from 'shared-data' import { toast } from 'sonner' -import { useIntegrationInstallationSnapshot } from 'state/integration-installation' -import type { NextPageWithLayout } from 'types' import { Alert, Button, Checkbox, Input, Listbox } from 'ui' +import { isVercelUrl } from '@/components/interfaces/Integrations/Vercel/VercelIntegration.utils' +import { Markdown } from '@/components/interfaces/Markdown' +import VercelIntegrationWindowLayout from '@/components/layouts/IntegrationsLayout/VercelIntegrationWindowLayout' +import { ScaffoldColumn, ScaffoldContainer } from '@/components/layouts/Scaffold' +import { PasswordStrengthBar } from '@/components/ui/PasswordStrengthBar' +import { useProjectSettingsV2Query } from '@/data/config/project-settings-v2-query' +import { useIntegrationsQuery } from '@/data/integrations/integrations-query' +import { useIntegrationVercelConnectionsCreateMutation } from '@/data/integrations/integrations-vercel-connections-create-mutation' +import { useVercelProjectsQuery } from '@/data/integrations/integrations-vercel-projects-query' +import { useOrganizationsQuery } from '@/data/organizations/organizations-query' +import { useProjectCreateMutation } from '@/data/projects/project-create-mutation' +import { useDataApiGrantTogglesEnabled } from '@/hooks/misc/useDataApiGrantTogglesEnabled' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { BASE_PATH, PROVIDERS } from '@/lib/constants' +import { getInitialMigrationSQLFromGitHubRepo } from '@/lib/integration-utils' +import { passwordStrength, PasswordStrengthScore } from '@/lib/password-strength' +import { generateStrongPassword } from '@/lib/project' +import { useIntegrationInstallationSnapshot } from '@/state/integration-installation' +import type { NextPageWithLayout } from '@/types' + const VercelIntegration: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/integrations/vercel/[slug]/marketplace/choose-project.tsx b/apps/studio/pages/integrations/vercel/[slug]/marketplace/choose-project.tsx index 475c7abb0f..73f30bcf58 100644 --- a/apps/studio/pages/integrations/vercel/[slug]/marketplace/choose-project.tsx +++ b/apps/studio/pages/integrations/vercel/[slug]/marketplace/choose-project.tsx @@ -1,25 +1,25 @@ +import { useParams } from 'common' import { keyBy } from 'lodash' import { useCallback, useMemo } from 'react' import { toast } from 'sonner' -import { useParams } from 'common' -import { ENV_VAR_RAW_KEYS } from 'components/interfaces/Integrations/Vercel/Integrations-Vercel.constants' -import { isVercelUrl } from 'components/interfaces/Integrations/Vercel/VercelIntegration.utils' +import { ENV_VAR_RAW_KEYS } from '@/components/interfaces/Integrations/Vercel/Integrations-Vercel.constants' +import { isVercelUrl } from '@/components/interfaces/Integrations/Vercel/VercelIntegration.utils' import ProjectLinker, { ForeignProject, -} from 'components/interfaces/Integrations/VercelGithub/ProjectLinker' -import { Markdown } from 'components/interfaces/Markdown' -import VercelIntegrationWindowLayout from 'components/layouts/IntegrationsLayout/VercelIntegrationWindowLayout' -import { ScaffoldColumn, ScaffoldContainer } from 'components/layouts/Scaffold' -import { vercelIcon } from 'components/to-be-cleaned/ListIcons' -import { useOrgIntegrationsQuery } from 'data/integrations/integrations-query-org-only' -import { useIntegrationVercelConnectionsCreateMutation } from 'data/integrations/integrations-vercel-connections-create-mutation' -import { useVercelProjectsQuery } from 'data/integrations/integrations-vercel-projects-query' -import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { BASE_PATH } from 'lib/constants' -import { EMPTY_ARR } from 'lib/void' -import { useIntegrationInstallationSnapshot } from 'state/integration-installation' -import type { NextPageWithLayout, Organization } from 'types' +} from '@/components/interfaces/Integrations/VercelGithub/ProjectLinker' +import { Markdown } from '@/components/interfaces/Markdown' +import VercelIntegrationWindowLayout from '@/components/layouts/IntegrationsLayout/VercelIntegrationWindowLayout' +import { ScaffoldColumn, ScaffoldContainer } from '@/components/layouts/Scaffold' +import { vercelIcon } from '@/components/to-be-cleaned/ListIcons' +import { useOrgIntegrationsQuery } from '@/data/integrations/integrations-query-org-only' +import { useIntegrationVercelConnectionsCreateMutation } from '@/data/integrations/integrations-vercel-connections-create-mutation' +import { useVercelProjectsQuery } from '@/data/integrations/integrations-vercel-projects-query' +import { useOrganizationsQuery } from '@/data/organizations/organizations-query' +import { BASE_PATH } from '@/lib/constants' +import { EMPTY_ARR } from '@/lib/void' +import { useIntegrationInstallationSnapshot } from '@/state/integration-installation' +import type { NextPageWithLayout, Organization } from '@/types' const VERCEL_ICON = ( Vercel Icon diff --git a/apps/studio/pages/integrations/vercel/install.tsx b/apps/studio/pages/integrations/vercel/install.tsx index 90fbae5ead..de499810e1 100644 --- a/apps/studio/pages/integrations/vercel/install.tsx +++ b/apps/studio/pages/integrations/vercel/install.tsx @@ -4,18 +4,18 @@ import Link from 'next/link' import { useRouter } from 'next/router' import { useEffect, useMemo, useState } from 'react' import { toast } from 'sonner' -import { AlertDescription_Shadcn_, AlertTitle_Shadcn_, Alert_Shadcn_, Button } from 'ui' +import { Alert_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_, Button } from 'ui' -import OrganizationPicker from 'components/interfaces/Integrations/Vercel/OrganizationPicker' -import { Markdown } from 'components/interfaces/Markdown' -import { getHasInstalledObject } from 'components/layouts/IntegrationsLayout/Integrations.utils' -import VercelIntegrationWindowLayout from 'components/layouts/IntegrationsLayout/VercelIntegrationWindowLayout' -import { ScaffoldColumn, ScaffoldContainer } from 'components/layouts/Scaffold' -import { useIntegrationsQuery } from 'data/integrations/integrations-query' -import { useVercelIntegrationCreateMutation } from 'data/integrations/vercel-integration-create-mutation' -import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { useIntegrationInstallationSnapshot } from 'state/integration-installation' -import type { NextPageWithLayout, Organization } from 'types' +import OrganizationPicker from '@/components/interfaces/Integrations/Vercel/OrganizationPicker' +import { Markdown } from '@/components/interfaces/Markdown' +import { getHasInstalledObject } from '@/components/layouts/IntegrationsLayout/Integrations.utils' +import VercelIntegrationWindowLayout from '@/components/layouts/IntegrationsLayout/VercelIntegrationWindowLayout' +import { ScaffoldColumn, ScaffoldContainer } from '@/components/layouts/Scaffold' +import { useIntegrationsQuery } from '@/data/integrations/integrations-query' +import { useVercelIntegrationCreateMutation } from '@/data/integrations/vercel-integration-create-mutation' +import { useOrganizationsQuery } from '@/data/organizations/organizations-query' +import { useIntegrationInstallationSnapshot } from '@/state/integration-installation' +import type { NextPageWithLayout, Organization } from '@/types' /** * Variations of the Vercel integration flow. diff --git a/apps/studio/pages/join.tsx b/apps/studio/pages/join.tsx index b7ea40b6ca..a723ff3e8f 100644 --- a/apps/studio/pages/join.tsx +++ b/apps/studio/pages/join.tsx @@ -1,12 +1,12 @@ -import Link from 'next/link' - -import { OrganizationInvite } from 'components/interfaces/OrganizationInvite/OrganizationInvite' -import { BASE_PATH } from 'lib/constants' import { useTheme } from 'next-themes' +import Link from 'next/link' import { useEffect, useMemo, useState } from 'react' -import type { NextPageWithLayout } from 'types' import { cn } from 'ui' +import { OrganizationInvite } from '@/components/interfaces/OrganizationInvite/OrganizationInvite' +import { BASE_PATH } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const JoinOrganizationPage: NextPageWithLayout = () => { const { resolvedTheme } = useTheme() const isDarkMode = resolvedTheme?.includes('dark') diff --git a/apps/studio/pages/logout.tsx b/apps/studio/pages/logout.tsx index 8be367a62d..298407f8cf 100644 --- a/apps/studio/pages/logout.tsx +++ b/apps/studio/pages/logout.tsx @@ -1,11 +1,11 @@ import { useRouter } from 'next/router' import { useEffect } from 'react' import { toast } from 'sonner' - -import { useSignOut } from 'lib/auth' -import type { NextPageWithLayout } from 'types' import { LogoLoader } from 'ui' +import { useSignOut } from '@/lib/auth' +import type { NextPageWithLayout } from '@/types' + const LogoutPage: NextPageWithLayout = () => { const router = useRouter() const signOut = useSignOut() diff --git a/apps/studio/pages/maintenance.tsx b/apps/studio/pages/maintenance.tsx index 74ac6c1fff..49e2174ce3 100644 --- a/apps/studio/pages/maintenance.tsx +++ b/apps/studio/pages/maintenance.tsx @@ -1,11 +1,11 @@ import { RefreshCw } from 'lucide-react' import { useTheme } from 'next-themes' import Head from 'next/head' - -import { BASE_PATH } from 'lib/constants' -import type { NextPageWithLayout } from 'types' -import { Button, cn } from 'ui' import { useMemo } from 'react' +import { Button, cn } from 'ui' + +import { BASE_PATH } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' const MaintenancePage: NextPageWithLayout = () => { const { resolvedTheme } = useTheme() diff --git a/apps/studio/pages/new/[slug].tsx b/apps/studio/pages/new/[slug].tsx index 928a372fb7..104fe0fd39 100644 --- a/apps/studio/pages/new/[slug].tsx +++ b/apps/studio/pages/new/[slug].tsx @@ -2,58 +2,6 @@ import { zodResolver } from '@hookform/resolvers/zod' import { buildDefaultPrivilegesSql } from '@supabase/pg-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { LOCAL_STORAGE_KEYS, useFlag, useParams } from 'common' -import { AUTO_ENABLE_RLS_EVENT_TRIGGER_SQL } from 'components/interfaces/Database/Triggers/EventTriggersList/EventTriggers.constants' -import { AdvancedConfiguration } from 'components/interfaces/ProjectCreation/AdvancedConfiguration' -import { CloudProviderSelector } from 'components/interfaces/ProjectCreation/CloudProviderSelector' -import { ComputeSizeSelector } from 'components/interfaces/ProjectCreation/ComputeSizeSelector' -import { CustomPostgresVersionInput } from 'components/interfaces/ProjectCreation/CustomPostgresVersionInput' -import { DatabasePasswordInput } from 'components/interfaces/ProjectCreation/DatabasePasswordInput' -import { DisabledWarningDueToIncident } from 'components/interfaces/ProjectCreation/DisabledWarningDueToIncident' -import { FreeProjectLimitWarning } from 'components/interfaces/ProjectCreation/FreeProjectLimitWarning' -import { HighAvailabilityInput } from 'components/interfaces/ProjectCreation/HighAvailabilityInput' -import { OrganizationSelector } from 'components/interfaces/ProjectCreation/OrganizationSelector' -import { - extractPostgresVersionDetails, - PostgresVersionSelector, -} from 'components/interfaces/ProjectCreation/PostgresVersionSelector' -import { sizes } from 'components/interfaces/ProjectCreation/ProjectCreation.constants' -import { FormSchema } from 'components/interfaces/ProjectCreation/ProjectCreation.schema' -import { - instanceLabel, - smartRegionToExactRegion, -} from 'components/interfaces/ProjectCreation/ProjectCreation.utils' -import { ProjectCreationFooter } from 'components/interfaces/ProjectCreation/ProjectCreationFooter' -import { ProjectNameInput } from 'components/interfaces/ProjectCreation/ProjectNameInput' -import { RegionSelector } from 'components/interfaces/ProjectCreation/RegionSelector' -import { SecurityOptions } from 'components/interfaces/ProjectCreation/SecurityOptions' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { WizardLayoutWithoutAuth } from 'components/layouts/WizardLayout' -import Panel from 'components/ui/Panel' -import { useAvailableOrioleImageVersion } from 'data/config/project-creation-postgres-versions-query' -import { useOverdueInvoicesQuery } from 'data/invoices/invoices-overdue-query' -import { useDefaultRegionQuery } from 'data/misc/get-default-region-query' -import { useAuthorizedAppsQuery } from 'data/oauth/authorized-apps-query' -import { useFreeProjectLimitCheckQuery } from 'data/organizations/free-project-limit-check-query' -import { useOrganizationAvailableRegionsQuery } from 'data/organizations/organization-available-regions-query' -import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { DesiredInstanceSize, instanceSizeSpecs } from 'data/projects/new-project.constants' -import { OrgProject, useOrgProjectsInfiniteQuery } from 'data/projects/org-projects-infinite-query' -import { - ProjectCreateVariables, - useProjectCreateMutation, -} from 'data/projects/project-create-mutation' -import { useCustomContent } from 'hooks/custom-content/useCustomContent' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useDataApiGrantTogglesEnabled } from 'hooks/misc/useDataApiGrantTogglesEnabled' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { withAuth } from 'hooks/misc/withAuth' -import { usePHFlag } from 'hooks/ui/useFlag' -import { DOCS_URL, PROJECT_STATUS, PROVIDERS, useDefaultProvider } from 'lib/constants' -import { buildStudioPageTitle } from 'lib/page-title' -import { useProfile } from 'lib/profile' -import { useTrack } from 'lib/telemetry/track' import Head from 'next/head' import Link from 'next/link' import { useRouter } from 'next/router' @@ -61,12 +9,68 @@ import { PropsWithChildren, useEffect, useMemo, useState } from 'react' import { useForm } from 'react-hook-form' import { AWS_REGIONS, type CloudProvider } from 'shared-data' import { toast } from 'sonner' -import type { NextPageWithLayout } from 'types' import { Button, Form_Shadcn_, FormField_Shadcn_, useWatch_Shadcn_ } from 'ui' import { Admonition } from 'ui-patterns/admonition' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' import { z } from 'zod' +import { AUTO_ENABLE_RLS_EVENT_TRIGGER_SQL } from '@/components/interfaces/Database/Triggers/EventTriggersList/EventTriggers.constants' +import { AdvancedConfiguration } from '@/components/interfaces/ProjectCreation/AdvancedConfiguration' +import { CloudProviderSelector } from '@/components/interfaces/ProjectCreation/CloudProviderSelector' +import { ComputeSizeSelector } from '@/components/interfaces/ProjectCreation/ComputeSizeSelector' +import { CustomPostgresVersionInput } from '@/components/interfaces/ProjectCreation/CustomPostgresVersionInput' +import { DatabasePasswordInput } from '@/components/interfaces/ProjectCreation/DatabasePasswordInput' +import { DisabledWarningDueToIncident } from '@/components/interfaces/ProjectCreation/DisabledWarningDueToIncident' +import { FreeProjectLimitWarning } from '@/components/interfaces/ProjectCreation/FreeProjectLimitWarning' +import { HighAvailabilityInput } from '@/components/interfaces/ProjectCreation/HighAvailabilityInput' +import { OrganizationSelector } from '@/components/interfaces/ProjectCreation/OrganizationSelector' +import { + extractPostgresVersionDetails, + PostgresVersionSelector, +} from '@/components/interfaces/ProjectCreation/PostgresVersionSelector' +import { sizes } from '@/components/interfaces/ProjectCreation/ProjectCreation.constants' +import { FormSchema } from '@/components/interfaces/ProjectCreation/ProjectCreation.schema' +import { + instanceLabel, + smartRegionToExactRegion, +} from '@/components/interfaces/ProjectCreation/ProjectCreation.utils' +import { ProjectCreationFooter } from '@/components/interfaces/ProjectCreation/ProjectCreationFooter' +import { ProjectNameInput } from '@/components/interfaces/ProjectCreation/ProjectNameInput' +import { RegionSelector } from '@/components/interfaces/ProjectCreation/RegionSelector' +import { SecurityOptions } from '@/components/interfaces/ProjectCreation/SecurityOptions' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { WizardLayoutWithoutAuth } from '@/components/layouts/WizardLayout' +import Panel from '@/components/ui/Panel' +import { useAvailableOrioleImageVersion } from '@/data/config/project-creation-postgres-versions-query' +import { useOverdueInvoicesQuery } from '@/data/invoices/invoices-overdue-query' +import { useDefaultRegionQuery } from '@/data/misc/get-default-region-query' +import { useAuthorizedAppsQuery } from '@/data/oauth/authorized-apps-query' +import { useFreeProjectLimitCheckQuery } from '@/data/organizations/free-project-limit-check-query' +import { useOrganizationAvailableRegionsQuery } from '@/data/organizations/organization-available-regions-query' +import { useOrganizationsQuery } from '@/data/organizations/organizations-query' +import { DesiredInstanceSize, instanceSizeSpecs } from '@/data/projects/new-project.constants' +import { + OrgProject, + useOrgProjectsInfiniteQuery, +} from '@/data/projects/org-projects-infinite-query' +import { + ProjectCreateVariables, + useProjectCreateMutation, +} from '@/data/projects/project-create-mutation' +import { useCustomContent } from '@/hooks/custom-content/useCustomContent' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useDataApiGrantTogglesEnabled } from '@/hooks/misc/useDataApiGrantTogglesEnabled' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { withAuth } from '@/hooks/misc/withAuth' +import { usePHFlag } from '@/hooks/ui/useFlag' +import { DOCS_URL, PROJECT_STATUS, PROVIDERS, useDefaultProvider } from '@/lib/constants' +import { buildStudioPageTitle } from '@/lib/page-title' +import { useProfile } from '@/lib/profile' +import { useTrack } from '@/lib/telemetry/track' +import type { NextPageWithLayout } from '@/types' + const sizesWithNoCostConfirmationRequired: DesiredInstanceSize[] = ['micro', 'small'] const Wizard: NextPageWithLayout = () => { diff --git a/apps/studio/pages/new/index.tsx b/apps/studio/pages/new/index.tsx index db880de3bd..a7294969f8 100644 --- a/apps/studio/pages/new/index.tsx +++ b/apps/studio/pages/new/index.tsx @@ -1,14 +1,15 @@ import HCaptcha from '@hcaptcha/react-hcaptcha' import Head from 'next/head' import { useCallback, useEffect, useState } from 'react' -import { NewOrgForm } from 'components/interfaces/Organization/NewOrg/NewOrgForm' -import { AppLayout } from 'components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import WizardLayout from 'components/layouts/WizardLayout' -import { SetupIntentResponse, useSetupIntent } from 'data/stripe/setup-intent-mutation' -import { useCustomContent } from 'hooks/custom-content/useCustomContent' -import { buildStudioPageTitle } from 'lib/page-title' -import type { NextPageWithLayout } from 'types' + +import { NewOrgForm } from '@/components/interfaces/Organization/NewOrg/NewOrgForm' +import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import WizardLayout from '@/components/layouts/WizardLayout' +import { SetupIntentResponse, useSetupIntent } from '@/data/stripe/setup-intent-mutation' +import { useCustomContent } from '@/hooks/custom-content/useCustomContent' +import { buildStudioPageTitle } from '@/lib/page-title' +import type { NextPageWithLayout } from '@/types' /** * No org selected yet, create a new one diff --git a/apps/studio/pages/org/[slug]/apps.tsx b/apps/studio/pages/org/[slug]/apps.tsx index 896f262846..baa5d9d880 100644 --- a/apps/studio/pages/org/[slug]/apps.tsx +++ b/apps/studio/pages/org/[slug]/apps.tsx @@ -1,8 +1,3 @@ -import { OAuthApps } from 'components/interfaces/Organization/OAuthApps/OAuthApps' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import { OrganizationSettingsLayout } from 'components/layouts/ProjectLayout/OrganizationSettingsLayout' -import type { NextPageWithLayout } from 'types' import { PageHeader, PageHeaderDescription, @@ -11,6 +6,12 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { OAuthApps } from '@/components/interfaces/Organization/OAuthApps/OAuthApps' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import { OrganizationSettingsLayout } from '@/components/layouts/ProjectLayout/OrganizationSettingsLayout' +import type { NextPageWithLayout } from '@/types' + const OrgOAuthApps: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/org/[slug]/audit.tsx b/apps/studio/pages/org/[slug]/audit.tsx index 1b875f5158..72b19a1afc 100644 --- a/apps/studio/pages/org/[slug]/audit.tsx +++ b/apps/studio/pages/org/[slug]/audit.tsx @@ -1,10 +1,3 @@ -import { AuditLogs } from 'components/interfaces/Organization/AuditLogs/AuditLogs' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import { OrganizationSettingsLayout } from 'components/layouts/ProjectLayout/OrganizationSettingsLayout' -import { usePermissionsQuery } from 'data/permissions/permissions-query' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import type { NextPageWithLayout } from 'types' import { LogoLoader } from 'ui' import { PageHeader, @@ -14,6 +7,14 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { AuditLogs } from '@/components/interfaces/Organization/AuditLogs/AuditLogs' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import { OrganizationSettingsLayout } from '@/components/layouts/ProjectLayout/OrganizationSettingsLayout' +import { usePermissionsQuery } from '@/data/permissions/permissions-query' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import type { NextPageWithLayout } from '@/types' + const OrgAuditLogs: NextPageWithLayout = () => { const { isPending: isLoadingPermissions } = usePermissionsQuery() const { data: selectedOrganization } = useSelectedOrganizationQuery() diff --git a/apps/studio/pages/org/[slug]/billing.tsx b/apps/studio/pages/org/[slug]/billing.tsx index 8da8f7aa55..e661ab21a4 100644 --- a/apps/studio/pages/org/[slug]/billing.tsx +++ b/apps/studio/pages/org/[slug]/billing.tsx @@ -1,15 +1,16 @@ import { useParams } from 'common' -import { BillingSettings } from 'components/interfaces/Organization/BillingSettings/BillingSettings' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' import { useEffect } from 'react' + +import { BillingSettings } from '@/components/interfaces/Organization/BillingSettings/BillingSettings' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' import { ORG_SETTINGS_PANEL_KEYS, useOrgSettingsPageStateSnapshot, -} from 'state/organization-settings' -import type { NextPageWithLayout } from 'types' +} from '@/state/organization-settings' +import type { NextPageWithLayout } from '@/types' const OrgBillingSettings: NextPageWithLayout = () => { const { panel, slug } = useParams() diff --git a/apps/studio/pages/org/[slug]/documents.tsx b/apps/studio/pages/org/[slug]/documents.tsx index 7b077e826b..7cee99b18c 100644 --- a/apps/studio/pages/org/[slug]/documents.tsx +++ b/apps/studio/pages/org/[slug]/documents.tsx @@ -1,12 +1,4 @@ import { useParams } from 'common' -import { Documents } from 'components/interfaces/Organization/Documents/Documents' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import { OrganizationSettingsLayout } from 'components/layouts/ProjectLayout/OrganizationSettingsLayout' -import { ScaffoldDivider } from 'components/layouts/Scaffold' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' import { PageHeader, PageHeaderDescription, @@ -15,6 +7,15 @@ import { PageHeaderTitle, } from 'ui-patterns' +import { Documents } from '@/components/interfaces/Organization/Documents/Documents' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import { OrganizationSettingsLayout } from '@/components/layouts/ProjectLayout/OrganizationSettingsLayout' +import { ScaffoldDivider } from '@/components/layouts/Scaffold' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const OrgDocuments: NextPageWithLayout = () => { const { slug } = useParams() diff --git a/apps/studio/pages/org/[slug]/general.tsx b/apps/studio/pages/org/[slug]/general.tsx index 4266d3ad0c..79c107e758 100644 --- a/apps/studio/pages/org/[slug]/general.tsx +++ b/apps/studio/pages/org/[slug]/general.tsx @@ -1,10 +1,3 @@ -import { GeneralSettings } from 'components/interfaces/Organization/GeneralSettings/GeneralSettings' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import OrganizationSettingsLayout from 'components/layouts/ProjectLayout/OrganizationSettingsLayout' -import { usePermissionsQuery } from 'data/permissions/permissions-query' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import type { NextPageWithLayout } from 'types' import { LogoLoader } from 'ui' import { PageContainer } from 'ui-patterns/PageContainer' import { @@ -15,6 +8,14 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { GeneralSettings } from '@/components/interfaces/Organization/GeneralSettings/GeneralSettings' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import OrganizationSettingsLayout from '@/components/layouts/ProjectLayout/OrganizationSettingsLayout' +import { usePermissionsQuery } from '@/data/permissions/permissions-query' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import type { NextPageWithLayout } from '@/types' + const OrgGeneralSettings: NextPageWithLayout = () => { const { isPending: isLoadingPermissions } = usePermissionsQuery() const { data: selectedOrganization } = useSelectedOrganizationQuery() diff --git a/apps/studio/pages/org/[slug]/index.tsx b/apps/studio/pages/org/[slug]/index.tsx index e0c5945526..1715b63124 100644 --- a/apps/studio/pages/org/[slug]/index.tsx +++ b/apps/studio/pages/org/[slug]/index.tsx @@ -1,16 +1,17 @@ import { useIsMFAEnabled } from 'common' -import { ProjectList } from 'components/interfaces/Home/ProjectList/ProjectList' -import { HomePageActions } from 'components/interfaces/HomePageActions' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import Link from 'next/link' -import type { NextPageWithLayout } from 'types' import { Button } from 'ui' import { Admonition } from 'ui-patterns' +import { ProjectList } from '@/components/interfaces/Home/ProjectList/ProjectList' +import { HomePageActions } from '@/components/interfaces/HomePageActions' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import type { NextPageWithLayout } from '@/types' + const ProjectsPage: NextPageWithLayout = () => { const isUserMFAEnabled = useIsMFAEnabled() const { data: org } = useSelectedOrganizationQuery() diff --git a/apps/studio/pages/org/[slug]/integrations.tsx b/apps/studio/pages/org/[slug]/integrations.tsx index b244e3b4b3..98500af439 100644 --- a/apps/studio/pages/org/[slug]/integrations.tsx +++ b/apps/studio/pages/org/[slug]/integrations.tsx @@ -1,7 +1,7 @@ -import { IntegrationSettings } from 'components/interfaces/Organization/IntegrationSettings/IntegrationSettings' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import type { NextPageWithLayout } from 'types' +import { IntegrationSettings } from '@/components/interfaces/Organization/IntegrationSettings/IntegrationSettings' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import type { NextPageWithLayout } from '@/types' const OrgIntegrationSettings: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/org/[slug]/private-apps/index.tsx b/apps/studio/pages/org/[slug]/private-apps/index.tsx index b1a82ca589..b39a8994f5 100644 --- a/apps/studio/pages/org/[slug]/private-apps/index.tsx +++ b/apps/studio/pages/org/[slug]/private-apps/index.tsx @@ -1,17 +1,7 @@ -import { useState } from 'react' import { Plus } from 'lucide-react' +import { useState } from 'react' import { Button } from 'ui' -import { AppsList } from 'components/interfaces/Organization/PrivateApps/Apps/AppsList/AppsList' -import { CreateAppSheet } from 'components/interfaces/Organization/PrivateApps/Apps/CreateAppSheet/CreateAppSheet' -import { - PrivateAppsProvider, - usePrivateApps, -} from 'components/interfaces/Organization/PrivateApps/PrivateAppsContext' import { PageContainer } from 'ui-patterns/PageContainer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import OrganizationSettingsLayout from 'components/layouts/ProjectLayout/OrganizationSettingsLayout' -import type { NextPageWithLayout } from 'types' import { PageHeader, PageHeaderDescription, @@ -29,6 +19,17 @@ import { PageSectionTitle, } from 'ui-patterns/PageSection' +import { AppsList } from '@/components/interfaces/Organization/PrivateApps/Apps/AppsList/AppsList' +import { CreateAppSheet } from '@/components/interfaces/Organization/PrivateApps/Apps/CreateAppSheet/CreateAppSheet' +import { + PrivateAppsProvider, + usePrivateApps, +} from '@/components/interfaces/Organization/PrivateApps/PrivateAppsContext' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import OrganizationSettingsLayout from '@/components/layouts/ProjectLayout/OrganizationSettingsLayout' +import type { NextPageWithLayout } from '@/types' + function PrivateAppsContent() { const { apps, isLoading } = usePrivateApps() const [showCreate, setShowCreate] = useState(false) diff --git a/apps/studio/pages/org/[slug]/security.tsx b/apps/studio/pages/org/[slug]/security.tsx index 62d001406f..18988da695 100644 --- a/apps/studio/pages/org/[slug]/security.tsx +++ b/apps/studio/pages/org/[slug]/security.tsx @@ -1,11 +1,4 @@ import { useParams } from 'common' -import { SecuritySettings } from 'components/interfaces/Organization/SecuritySettings' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import OrganizationSettingsLayout from 'components/layouts/ProjectLayout/OrganizationSettingsLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' import { PageHeader, PageHeaderDescription, @@ -14,6 +7,14 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { SecuritySettings } from '@/components/interfaces/Organization/SecuritySettings' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import OrganizationSettingsLayout from '@/components/layouts/ProjectLayout/OrganizationSettingsLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const OrgSecuritySettings: NextPageWithLayout = () => { const { slug } = useParams() const showSecuritySettings = useIsFeatureEnabled('organization:show_security_settings') diff --git a/apps/studio/pages/org/[slug]/sso.tsx b/apps/studio/pages/org/[slug]/sso.tsx index 9ca6a5ef2c..4bccfcddb7 100644 --- a/apps/studio/pages/org/[slug]/sso.tsx +++ b/apps/studio/pages/org/[slug]/sso.tsx @@ -1,11 +1,4 @@ import { useParams } from 'common' -import { SSOConfig } from 'components/interfaces/Organization/SSO/SSOConfig' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import OrganizationSettingsLayout from 'components/layouts/ProjectLayout/OrganizationSettingsLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' import { PageHeader, PageHeaderDescription, @@ -14,6 +7,14 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { SSOConfig } from '@/components/interfaces/Organization/SSO/SSOConfig' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import OrganizationSettingsLayout from '@/components/layouts/ProjectLayout/OrganizationSettingsLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const OrgSSO: NextPageWithLayout = () => { const { slug } = useParams() const showSsoSettings = useIsFeatureEnabled('organization:show_sso_settings') diff --git a/apps/studio/pages/org/[slug]/team.tsx b/apps/studio/pages/org/[slug]/team.tsx index 68869dd3f7..7b4372fb74 100644 --- a/apps/studio/pages/org/[slug]/team.tsx +++ b/apps/studio/pages/org/[slug]/team.tsx @@ -1,11 +1,12 @@ -import { TeamSettings } from 'components/interfaces/Organization/TeamSettings/TeamSettings' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import { usePermissionsQuery } from 'data/permissions/permissions-query' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import type { NextPageWithLayout } from 'types' import { LogoLoader } from 'ui' +import { TeamSettings } from '@/components/interfaces/Organization/TeamSettings/TeamSettings' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import { usePermissionsQuery } from '@/data/permissions/permissions-query' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import type { NextPageWithLayout } from '@/types' + const OrgTeamSettings: NextPageWithLayout = () => { const { isPending: isLoadingPermissions } = usePermissionsQuery() const { data: selectedOrganization } = useSelectedOrganizationQuery() diff --git a/apps/studio/pages/org/[slug]/usage.tsx b/apps/studio/pages/org/[slug]/usage.tsx index 2ac9bb16ee..1276d6cb7c 100644 --- a/apps/studio/pages/org/[slug]/usage.tsx +++ b/apps/studio/pages/org/[slug]/usage.tsx @@ -1,7 +1,7 @@ -import { Usage } from 'components/interfaces/Organization/Usage/Usage' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import type { NextPageWithLayout } from 'types' +import { Usage } from '@/components/interfaces/Organization/Usage/Usage' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import type { NextPageWithLayout } from '@/types' const OrgUsage: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/org/[slug]/webhooks/[endpointId].tsx b/apps/studio/pages/org/[slug]/webhooks/[endpointId].tsx index 3089898874..a26985f774 100644 --- a/apps/studio/pages/org/[slug]/webhooks/[endpointId].tsx +++ b/apps/studio/pages/org/[slug]/webhooks/[endpointId].tsx @@ -1,9 +1,10 @@ -import { PlatformWebhooksPage } from 'components/interfaces/Platform/Webhooks' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import OrganizationSettingsLayout from 'components/layouts/ProjectLayout/OrganizationSettingsLayout' import { useRouter } from 'next/router' -import type { NextPageWithLayout } from 'types' + +import { PlatformWebhooksPage } from '@/components/interfaces/Platform/Webhooks' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import OrganizationSettingsLayout from '@/components/layouts/ProjectLayout/OrganizationSettingsLayout' +import type { NextPageWithLayout } from '@/types' const OrgWebhookEndpointSettings: NextPageWithLayout = () => { const { query } = useRouter() diff --git a/apps/studio/pages/org/[slug]/webhooks/index.tsx b/apps/studio/pages/org/[slug]/webhooks/index.tsx index 9296c54007..3c2eee60a1 100644 --- a/apps/studio/pages/org/[slug]/webhooks/index.tsx +++ b/apps/studio/pages/org/[slug]/webhooks/index.tsx @@ -1,8 +1,8 @@ -import { PlatformWebhooksPage } from 'components/interfaces/Platform/Webhooks' -import DefaultLayout from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import OrganizationSettingsLayout from 'components/layouts/ProjectLayout/OrganizationSettingsLayout' -import type { NextPageWithLayout } from 'types' +import { PlatformWebhooksPage } from '@/components/interfaces/Platform/Webhooks' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import OrganizationSettingsLayout from '@/components/layouts/ProjectLayout/OrganizationSettingsLayout' +import type { NextPageWithLayout } from '@/types' const OrgWebhooksSettings: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/org/_/[[...routeSlug]].tsx b/apps/studio/pages/org/_/[[...routeSlug]].tsx index 40744bcbd3..d838177686 100644 --- a/apps/studio/pages/org/_/[[...routeSlug]].tsx +++ b/apps/studio/pages/org/_/[[...routeSlug]].tsx @@ -1,21 +1,21 @@ -import { - Header, - LoadingCardView, - NoOrganizationsState, -} from 'components/interfaces/Home/ProjectList/EmptyStates' -import { buildOrgUrl } from 'components/interfaces/Organization/Organization.utils' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { useCustomContent } from 'hooks/custom-content/useCustomContent' -import { withAuth } from 'hooks/misc/withAuth' -import { buildStudioPageTitle } from 'lib/page-title' import { NextPage } from 'next' import Head from 'next/head' import { useRouter } from 'next/router' import { cn } from 'ui' +import { + Header, + LoadingCardView, + NoOrganizationsState, +} from '@/components/interfaces/Home/ProjectList/EmptyStates' +import { buildOrgUrl } from '@/components/interfaces/Organization/Organization.utils' import { OrganizationCard } from '@/components/interfaces/Organization/OrganizationCard' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import { useOrganizationsQuery } from '@/data/organizations/organizations-query' +import { useCustomContent } from '@/hooks/custom-content/useCustomContent' +import { withAuth } from '@/hooks/misc/withAuth' +import { buildStudioPageTitle } from '@/lib/page-title' const GenericOrganizationPage: NextPage = () => { const router = useRouter() diff --git a/apps/studio/pages/org/index.tsx b/apps/studio/pages/org/index.tsx index d75d8623d6..a9755ce8b2 100644 --- a/apps/studio/pages/org/index.tsx +++ b/apps/studio/pages/org/index.tsx @@ -1,12 +1,13 @@ import { LOCAL_STORAGE_KEYS } from 'common' -import { ShimmeringCard } from 'components/interfaces/Home/ProjectList/ShimmeringCard' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import OrganizationLayout from 'components/layouts/OrganizationLayout' -import { ScaffoldContainerLegacy } from 'components/layouts/Scaffold' -import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' import { useRouter } from 'next/router' import { useEffect } from 'react' -import type { NextPageWithLayout } from 'types' + +import { ShimmeringCard } from '@/components/interfaces/Home/ProjectList/ShimmeringCard' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import OrganizationLayout from '@/components/layouts/OrganizationLayout' +import { ScaffoldContainerLegacy } from '@/components/layouts/Scaffold' +import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' +import type { NextPageWithLayout } from '@/types' const OrgIndexPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/organizations.tsx b/apps/studio/pages/organizations.tsx index 828adb33f7..25526ce8b3 100644 --- a/apps/studio/pages/organizations.tsx +++ b/apps/studio/pages/organizations.tsx @@ -1,27 +1,28 @@ import { useParams } from 'common' -import { NoOrganizationsState } from 'components/interfaces/Home/ProjectList/EmptyStates' -import { OrganizationCard } from 'components/interfaces/Organization/OrganizationCard' -import { AppLayout } from 'components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import { AlertError } from 'components/ui/AlertError' -import { NoSearchResults } from 'components/ui/NoSearchResults' -import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { useCustomContent } from 'hooks/custom-content/useCustomContent' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { withAuth } from 'hooks/misc/withAuth' -import { buildStudioPageTitle } from 'lib/page-title' import { Plus, Search } from 'lucide-react' import Head from 'next/head' import Link from 'next/link' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' -import type { NextPageWithLayout } from 'types' import { Button, Skeleton } from 'ui' import { Admonition } from 'ui-patterns/admonition' import { Input } from 'ui-patterns/DataInputs/Input' +import { NoOrganizationsState } from '@/components/interfaces/Home/ProjectList/EmptyStates' +import { OrganizationCard } from '@/components/interfaces/Organization/OrganizationCard' +import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import { AlertError } from '@/components/ui/AlertError' +import { NoSearchResults } from '@/components/ui/NoSearchResults' +import { useOrganizationsQuery } from '@/data/organizations/organizations-query' +import { useCustomContent } from '@/hooks/custom-content/useCustomContent' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { withAuth } from '@/hooks/misc/withAuth' +import { buildStudioPageTitle } from '@/lib/page-title' +import type { NextPageWithLayout } from '@/types' + const OrganizationsPage: NextPageWithLayout = () => { const router = useRouter() const { appTitle } = useCustomContent(['app:title']) diff --git a/apps/studio/pages/project/[ref]/advisors/performance.tsx b/apps/studio/pages/project/[ref]/advisors/performance.tsx index 491a852ceb..c93c826d64 100644 --- a/apps/studio/pages/project/[ref]/advisors/performance.tsx +++ b/apps/studio/pages/project/[ref]/advisors/performance.tsx @@ -1,20 +1,21 @@ import { useParams } from 'common' -import { LINTER_LEVELS } from 'components/interfaces/Linter/Linter.constants' -import { lintInfoMap } from 'components/interfaces/Linter/Linter.utils' -import LinterDataGrid from 'components/interfaces/Linter/LinterDataGrid' -import LinterFilters from 'components/interfaces/Linter/LinterFilters' -import { LinterPageFooter } from 'components/interfaces/Linter/LinterPageFooter' -import LintPageTabs from 'components/interfaces/Linter/LintPageTabs' -import AdvisorsLayout from 'components/layouts/AdvisorsLayout/AdvisorsLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { FormHeader } from 'components/ui/Forms/FormHeader' -import { Lint, useProjectLintsQuery } from 'data/lint/lint-query' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { DOCS_URL } from 'lib/constants' import { useMemo, useState } from 'react' -import type { NextPageWithLayout } from 'types' import { LoadingLine } from 'ui' +import { LINTER_LEVELS } from '@/components/interfaces/Linter/Linter.constants' +import { lintInfoMap } from '@/components/interfaces/Linter/Linter.utils' +import LinterDataGrid from '@/components/interfaces/Linter/LinterDataGrid' +import LinterFilters from '@/components/interfaces/Linter/LinterFilters' +import { LinterPageFooter } from '@/components/interfaces/Linter/LinterPageFooter' +import LintPageTabs from '@/components/interfaces/Linter/LintPageTabs' +import AdvisorsLayout from '@/components/layouts/AdvisorsLayout/AdvisorsLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { FormHeader } from '@/components/ui/Forms/FormHeader' +import { Lint, useProjectLintsQuery } from '@/data/lint/lint-query' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const ProjectLints: NextPageWithLayout = () => { const { preset, id } = useParams() const { data: project } = useSelectedProjectQuery() diff --git a/apps/studio/pages/project/[ref]/advisors/rules/performance.tsx b/apps/studio/pages/project/[ref]/advisors/rules/performance.tsx index 9cf9a0fc03..c4d35c87bc 100644 --- a/apps/studio/pages/project/[ref]/advisors/rules/performance.tsx +++ b/apps/studio/pages/project/[ref]/advisors/rules/performance.tsx @@ -1,6 +1,6 @@ -import { AdvisorRules } from 'components/interfaces/Advisors/AdvisorRules' -import { AdvisorRulesLayout } from 'components/layouts/AdvisorsLayout/AdvisorRulesLayout' -import type { NextPageWithLayout } from 'types' +import { AdvisorRules } from '@/components/interfaces/Advisors/AdvisorRules' +import { AdvisorRulesLayout } from '@/components/layouts/AdvisorsLayout/AdvisorRulesLayout' +import type { NextPageWithLayout } from '@/types' const AdvisorPerformanceRulesPage: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/project/[ref]/advisors/rules/security.tsx b/apps/studio/pages/project/[ref]/advisors/rules/security.tsx index 80778f9dc2..75d4dd7779 100644 --- a/apps/studio/pages/project/[ref]/advisors/rules/security.tsx +++ b/apps/studio/pages/project/[ref]/advisors/rules/security.tsx @@ -1,6 +1,6 @@ -import { AdvisorRules } from 'components/interfaces/Advisors/AdvisorRules' -import { AdvisorRulesLayout } from 'components/layouts/AdvisorsLayout/AdvisorRulesLayout' -import type { NextPageWithLayout } from 'types' +import { AdvisorRules } from '@/components/interfaces/Advisors/AdvisorRules' +import { AdvisorRulesLayout } from '@/components/layouts/AdvisorsLayout/AdvisorRulesLayout' +import type { NextPageWithLayout } from '@/types' const AdvisorSecurityRulesPage: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/project/[ref]/advisors/security.tsx b/apps/studio/pages/project/[ref]/advisors/security.tsx index f58aa695d3..3d9b9f6087 100644 --- a/apps/studio/pages/project/[ref]/advisors/security.tsx +++ b/apps/studio/pages/project/[ref]/advisors/security.tsx @@ -1,20 +1,21 @@ import { useParams } from 'common' -import { LINTER_LEVELS } from 'components/interfaces/Linter/Linter.constants' -import { lintInfoMap } from 'components/interfaces/Linter/Linter.utils' -import LinterDataGrid from 'components/interfaces/Linter/LinterDataGrid' -import LinterFilters from 'components/interfaces/Linter/LinterFilters' -import { LinterPageFooter } from 'components/interfaces/Linter/LinterPageFooter' -import LintPageTabs from 'components/interfaces/Linter/LintPageTabs' -import AdvisorsLayout from 'components/layouts/AdvisorsLayout/AdvisorsLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { FormHeader } from 'components/ui/Forms/FormHeader' -import { Lint, useProjectLintsQuery } from 'data/lint/lint-query' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { DOCS_URL } from 'lib/constants' import { useMemo, useState } from 'react' -import type { NextPageWithLayout } from 'types' import { LoadingLine } from 'ui' +import { LINTER_LEVELS } from '@/components/interfaces/Linter/Linter.constants' +import { lintInfoMap } from '@/components/interfaces/Linter/Linter.utils' +import LinterDataGrid from '@/components/interfaces/Linter/LinterDataGrid' +import LinterFilters from '@/components/interfaces/Linter/LinterFilters' +import { LinterPageFooter } from '@/components/interfaces/Linter/LinterPageFooter' +import LintPageTabs from '@/components/interfaces/Linter/LintPageTabs' +import AdvisorsLayout from '@/components/layouts/AdvisorsLayout/AdvisorsLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { FormHeader } from '@/components/ui/Forms/FormHeader' +import { Lint, useProjectLintsQuery } from '@/data/lint/lint-query' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const ProjectLints: NextPageWithLayout = () => { const { preset, id } = useParams() const { data: project } = useSelectedProjectQuery() diff --git a/apps/studio/pages/project/[ref]/auth/audit-logs.tsx b/apps/studio/pages/project/[ref]/auth/audit-logs.tsx index 00f1987dc9..5c953f5384 100644 --- a/apps/studio/pages/project/[ref]/auth/audit-logs.tsx +++ b/apps/studio/pages/project/[ref]/auth/audit-logs.tsx @@ -1,12 +1,4 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { AuditLogsForm } from 'components/interfaces/Auth/AuditLogsForm' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -19,6 +11,15 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { AuditLogsForm } from '@/components/interfaces/Auth/AuditLogsForm' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const AuditLogsPage: NextPageWithLayout = () => { const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.READ, diff --git a/apps/studio/pages/project/[ref]/auth/hooks.tsx b/apps/studio/pages/project/[ref]/auth/hooks.tsx index 6a2056593f..e86b3668d6 100644 --- a/apps/studio/pages/project/[ref]/auth/hooks.tsx +++ b/apps/studio/pages/project/[ref]/auth/hooks.tsx @@ -1,12 +1,4 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { HooksListing } from 'components/interfaces/Auth/Hooks/HooksListing' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { GenericSkeletonLoader } from 'ui-patterns' import { PageContainer } from 'ui-patterns/PageContainer' import { @@ -19,6 +11,15 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { HooksListing } from '@/components/interfaces/Auth/Hooks/HooksListing' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const Hooks: NextPageWithLayout = () => { const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.READ, diff --git a/apps/studio/pages/project/[ref]/auth/mfa.tsx b/apps/studio/pages/project/[ref]/auth/mfa.tsx index 4c6170b502..93e6ca1405 100644 --- a/apps/studio/pages/project/[ref]/auth/mfa.tsx +++ b/apps/studio/pages/project/[ref]/auth/mfa.tsx @@ -1,13 +1,5 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' -import { MfaAuthSettingsForm } from 'components/interfaces/Auth/MfaAuthSettingsForm/MfaAuthSettingsForm' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import NoPermission from 'components/ui/NoPermission' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -19,6 +11,15 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { MfaAuthSettingsForm } from '@/components/interfaces/Auth/MfaAuthSettingsForm/MfaAuthSettingsForm' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import NoPermission from '@/components/ui/NoPermission' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const MfaPage: NextPageWithLayout = () => { const { ref } = useParams() const showMFA = useIsFeatureEnabled('authentication:multi_factor') diff --git a/apps/studio/pages/project/[ref]/auth/oauth-apps.tsx b/apps/studio/pages/project/[ref]/auth/oauth-apps.tsx index b3a16cfbc8..30bd843041 100644 --- a/apps/studio/pages/project/[ref]/auth/oauth-apps.tsx +++ b/apps/studio/pages/project/[ref]/auth/oauth-apps.tsx @@ -1,9 +1,3 @@ -import { OAuthAppsList } from 'components/interfaces/Auth/OAuthApps/OAuthAppsList' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageSection, PageSectionContent } from 'ui-patterns' import { PageContainer } from 'ui-patterns/PageContainer' import { @@ -14,6 +8,13 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { OAuthAppsList } from '@/components/interfaces/Auth/OAuthApps/OAuthAppsList' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const OAuthApps: NextPageWithLayout = () => ( <> diff --git a/apps/studio/pages/project/[ref]/auth/oauth-server.tsx b/apps/studio/pages/project/[ref]/auth/oauth-server.tsx index 340c771b1a..b304244d6f 100644 --- a/apps/studio/pages/project/[ref]/auth/oauth-server.tsx +++ b/apps/studio/pages/project/[ref]/auth/oauth-server.tsx @@ -1,9 +1,3 @@ -import { OAuthServerSettingsForm } from 'components/interfaces/Auth/OAuthApps/OAuthServerSettingsForm' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -15,6 +9,13 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { OAuthServerSettingsForm } from '@/components/interfaces/Auth/OAuthApps/OAuthServerSettingsForm' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const ProvidersPage: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/project/[ref]/auth/overview.tsx b/apps/studio/pages/project/[ref]/auth/overview.tsx index 0855d7a60f..3216c32d1e 100644 --- a/apps/studio/pages/project/[ref]/auth/overview.tsx +++ b/apps/studio/pages/project/[ref]/auth/overview.tsx @@ -1,14 +1,6 @@ import { FeatureFlagContext, useFlag, useParams } from 'common' -import { OverviewLearnMore } from 'components/interfaces/Auth/Overview/OverviewLearnMore' -import { OverviewMetrics } from 'components/interfaces/Auth/Overview/OverviewMetrics' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import { useAuthOverviewQuery } from 'data/auth/auth-overview-query' -import { DOCS_URL } from 'lib/constants' import { useRouter } from 'next/router' import { useContext, useEffect } from 'react' -import { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -18,6 +10,15 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { OverviewLearnMore } from '@/components/interfaces/Auth/Overview/OverviewLearnMore' +import { OverviewMetrics } from '@/components/interfaces/Auth/Overview/OverviewMetrics' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import { useAuthOverviewQuery } from '@/data/auth/auth-overview-query' +import { DOCS_URL } from '@/lib/constants' +import { NextPageWithLayout } from '@/types' + const AuthOverview: NextPageWithLayout = () => { const router = useRouter() const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/auth/performance.tsx b/apps/studio/pages/project/[ref]/auth/performance.tsx index 04967ab9d9..01d69fb7f8 100644 --- a/apps/studio/pages/project/[ref]/auth/performance.tsx +++ b/apps/studio/pages/project/[ref]/auth/performance.tsx @@ -1,13 +1,5 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' -import { PerformanceSettingsForm } from 'components/interfaces/Auth/PerformanceSettingsForm' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import NoPermission from 'components/ui/NoPermission' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -19,6 +11,15 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { PerformanceSettingsForm } from '@/components/interfaces/Auth/PerformanceSettingsForm' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import NoPermission from '@/components/ui/NoPermission' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const PerformancePage: NextPageWithLayout = () => { const { ref } = useParams() const showPerformance = useIsFeatureEnabled('authentication:performance') diff --git a/apps/studio/pages/project/[ref]/auth/policies.tsx b/apps/studio/pages/project/[ref]/auth/policies.tsx index 722ac00956..6f3924926a 100644 --- a/apps/studio/pages/project/[ref]/auth/policies.tsx +++ b/apps/studio/pages/project/[ref]/auth/policies.tsx @@ -1,36 +1,10 @@ import type { PostgresPolicy, PostgresTable } from '@supabase/postgres-meta' import { PermissionAction } from '@supabase/shared-types/out/constants' import { LOCAL_STORAGE_KEYS, useParams } from 'common' -import { useIsInlineEditorEnabled } from 'components/interfaces/Account/Preferences/useDashboardSettings' -import { Policies } from 'components/interfaces/Auth/Policies/Policies' -import { PoliciesDataProvider } from 'components/interfaces/Auth/Policies/PoliciesDataContext' -import { getGeneralPolicyTemplates } from 'components/interfaces/Auth/Policies/PolicyEditorModal/PolicyEditorModal.constants' -import { PolicyEditorPanel } from 'components/interfaces/Auth/Policies/PolicyEditorPanel' -import { generatePolicyUpdateSQL } from 'components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRow.utils' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { SIDEBAR_KEYS } from 'components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' -import AlertError from 'components/ui/AlertError' -import { BannerRlsEventTrigger } from 'components/ui/BannerStack/Banners/BannerRlsEventTrigger' -import { useBannerStack } from 'components/ui/BannerStack/BannerStackProvider' -import { DocsButton } from 'components/ui/DocsButton' -import NoPermission from 'components/ui/NoPermission' -import { SchemaSelector } from 'components/ui/SchemaSelector' -import { useProjectPostgrestConfigQuery } from 'data/config/project-postgrest-config-query' -import { useDatabasePoliciesQuery } from 'data/database-policies/database-policies-query' -import { useTablesQuery } from 'data/tables/tables-query' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { useIsProtectedSchema } from 'hooks/useProtectedSchemas' -import { DOCS_URL } from 'lib/constants' import { Search, X } from 'lucide-react' import { parseAsBoolean, parseAsString, useQueryState } from 'nuqs' import { useCallback, useDeferredValue, useEffect, useMemo, useState } from 'react' import { toast } from 'sonner' -import { useEditorPanelStateSnapshot } from 'state/editor-panel-state' -import { useSidebarManagerSnapshot } from 'state/sidebar-manager-state' -import type { NextPageWithLayout } from 'types' import { Button } from 'ui' import { Input } from 'ui-patterns/DataInputs/Input' import { PageContainer } from 'ui-patterns/PageContainer' @@ -45,6 +19,33 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { useIsInlineEditorEnabled } from '@/components/interfaces/Account/Preferences/useDashboardSettings' +import { Policies } from '@/components/interfaces/Auth/Policies/Policies' +import { PoliciesDataProvider } from '@/components/interfaces/Auth/Policies/PoliciesDataContext' +import { getGeneralPolicyTemplates } from '@/components/interfaces/Auth/Policies/PolicyEditorModal/PolicyEditorModal.constants' +import { PolicyEditorPanel } from '@/components/interfaces/Auth/Policies/PolicyEditorPanel' +import { generatePolicyUpdateSQL } from '@/components/interfaces/Auth/Policies/PolicyTableRow/PolicyTableRow.utils' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' +import AlertError from '@/components/ui/AlertError' +import { BannerRlsEventTrigger } from '@/components/ui/BannerStack/Banners/BannerRlsEventTrigger' +import { useBannerStack } from '@/components/ui/BannerStack/BannerStackProvider' +import { DocsButton } from '@/components/ui/DocsButton' +import NoPermission from '@/components/ui/NoPermission' +import { SchemaSelector } from '@/components/ui/SchemaSelector' +import { useProjectPostgrestConfigQuery } from '@/data/config/project-postgrest-config-query' +import { useDatabasePoliciesQuery } from '@/data/database-policies/database-policies-query' +import { useTablesQuery } from '@/data/tables/tables-query' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { useIsProtectedSchema } from '@/hooks/useProtectedSchemas' +import { DOCS_URL } from '@/lib/constants' +import { useEditorPanelStateSnapshot } from '@/state/editor-panel-state' +import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state' +import type { NextPageWithLayout } from '@/types' + /** * Filter tables by table name and policy name * diff --git a/apps/studio/pages/project/[ref]/auth/protection.tsx b/apps/studio/pages/project/[ref]/auth/protection.tsx index ffff8d7a77..fc0924248e 100644 --- a/apps/studio/pages/project/[ref]/auth/protection.tsx +++ b/apps/studio/pages/project/[ref]/auth/protection.tsx @@ -1,13 +1,5 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' -import { ProtectionAuthSettingsForm } from 'components/interfaces/Auth/ProtectionAuthSettingsForm/ProtectionAuthSettingsForm' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import NoPermission from 'components/ui/NoPermission' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -19,6 +11,15 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { ProtectionAuthSettingsForm } from '@/components/interfaces/Auth/ProtectionAuthSettingsForm/ProtectionAuthSettingsForm' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import NoPermission from '@/components/ui/NoPermission' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const ProtectionPage: NextPageWithLayout = () => { const { ref } = useParams() const showAttackProtection = useIsFeatureEnabled('authentication:attack_protection') diff --git a/apps/studio/pages/project/[ref]/auth/rate-limits.tsx b/apps/studio/pages/project/[ref]/auth/rate-limits.tsx index 25a4ce7bc9..dcdac29b59 100644 --- a/apps/studio/pages/project/[ref]/auth/rate-limits.tsx +++ b/apps/studio/pages/project/[ref]/auth/rate-limits.tsx @@ -1,15 +1,5 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' -import { RateLimits } from 'components/interfaces/Auth/RateLimits/RateLimits' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import NoPermission from 'components/ui/NoPermission' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -22,6 +12,17 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { RateLimits } from '@/components/interfaces/Auth/RateLimits/RateLimits' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import NoPermission from '@/components/ui/NoPermission' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const RateLimitsPage: NextPageWithLayout = () => { const { ref } = useParams() const showRateLimits = useIsFeatureEnabled('authentication:rate_limits') diff --git a/apps/studio/pages/project/[ref]/auth/sessions.tsx b/apps/studio/pages/project/[ref]/auth/sessions.tsx index 96cf40900b..9b4f96b3e6 100644 --- a/apps/studio/pages/project/[ref]/auth/sessions.tsx +++ b/apps/studio/pages/project/[ref]/auth/sessions.tsx @@ -1,10 +1,4 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { SessionsAuthSettingsForm } from 'components/interfaces/Auth/SessionsAuthSettingsForm/SessionsAuthSettingsForm' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -16,6 +10,13 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { SessionsAuthSettingsForm } from '@/components/interfaces/Auth/SessionsAuthSettingsForm/SessionsAuthSettingsForm' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import type { NextPageWithLayout } from '@/types' + const SessionsPage: NextPageWithLayout = () => { const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.READ, diff --git a/apps/studio/pages/project/[ref]/auth/smtp.tsx b/apps/studio/pages/project/[ref]/auth/smtp.tsx index 7bc3cf592a..1c512bebeb 100644 --- a/apps/studio/pages/project/[ref]/auth/smtp.tsx +++ b/apps/studio/pages/project/[ref]/auth/smtp.tsx @@ -1,15 +1,15 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' - -import { SmtpForm } from 'components/interfaces/Auth/SmtpForm/SmtpForm' -import { AuthEmailsLayout } from 'components/layouts/AuthLayout/AuthEmailsLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import type { NextPageWithLayout } from 'types' import { GenericSkeletonLoader } from 'ui-patterns' import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { SmtpForm } from '@/components/interfaces/Auth/SmtpForm/SmtpForm' +import { AuthEmailsLayout } from '@/components/layouts/AuthLayout/AuthEmailsLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import type { NextPageWithLayout } from '@/types' + const SmtpPage: NextPageWithLayout = () => { const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.READ, diff --git a/apps/studio/pages/project/[ref]/auth/templates/[templateId].tsx b/apps/studio/pages/project/[ref]/auth/templates/[templateId].tsx index f9dfc1323e..53d8864751 100644 --- a/apps/studio/pages/project/[ref]/auth/templates/[templateId].tsx +++ b/apps/studio/pages/project/[ref]/auth/templates/[templateId].tsx @@ -1,23 +1,11 @@ import { zodResolver } from '@hookform/resolvers/zod' import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' -import { TEMPLATES_SCHEMAS } from 'components/interfaces/Auth/AuthTemplatesValidation' -import { slugifyTitle } from 'components/interfaces/Auth/EmailTemplates/EmailTemplates.utils' -import { TemplateEditor } from 'components/interfaces/Auth/EmailTemplates/TemplateEditor' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import NoPermission from 'components/ui/NoPermission' -import { useAuthConfigQuery } from 'data/auth/auth-config-query' -import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { DOCS_URL } from 'lib/constants' import Link from 'next/link' import { useRouter } from 'next/router' import { useEffect } from 'react' import { useForm } from 'react-hook-form' import { toast } from 'sonner' -import type { NextPageWithLayout } from 'types' import { Button, Card, @@ -56,6 +44,19 @@ import { } from 'ui/src/components/shadcn/ui/breadcrumb' import { z } from 'zod' +import { TEMPLATES_SCHEMAS } from '@/components/interfaces/Auth/AuthTemplatesValidation' +import { slugifyTitle } from '@/components/interfaces/Auth/EmailTemplates/EmailTemplates.utils' +import { TemplateEditor } from '@/components/interfaces/Auth/EmailTemplates/TemplateEditor' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import NoPermission from '@/components/ui/NoPermission' +import { useAuthConfigQuery } from '@/data/auth/auth-config-query' +import { useAuthConfigUpdateMutation } from '@/data/auth/auth-config-update-mutation' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const TemplatePage: NextPageWithLayout = () => { return } diff --git a/apps/studio/pages/project/[ref]/auth/templates/index.tsx b/apps/studio/pages/project/[ref]/auth/templates/index.tsx index 77e7eebe71..5bb1b874d1 100644 --- a/apps/studio/pages/project/[ref]/auth/templates/index.tsx +++ b/apps/studio/pages/project/[ref]/auth/templates/index.tsx @@ -1,15 +1,15 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' - -import { EmailTemplates } from 'components/interfaces/Auth/EmailTemplates/EmailTemplates' -import { AuthEmailsLayout } from 'components/layouts/AuthLayout/AuthEmailsLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import type { NextPageWithLayout } from 'types' import { GenericSkeletonLoader } from 'ui-patterns' import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { EmailTemplates } from '@/components/interfaces/Auth/EmailTemplates/EmailTemplates' +import { AuthEmailsLayout } from '@/components/layouts/AuthLayout/AuthEmailsLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import type { NextPageWithLayout } from '@/types' + const TemplatesPage: NextPageWithLayout = () => { const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.READ, diff --git a/apps/studio/pages/project/[ref]/auth/third-party.tsx b/apps/studio/pages/project/[ref]/auth/third-party.tsx index e2621ec837..216f852dba 100644 --- a/apps/studio/pages/project/[ref]/auth/third-party.tsx +++ b/apps/studio/pages/project/[ref]/auth/third-party.tsx @@ -1,16 +1,17 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' -import { ThirdPartyAuthForm } from 'components/interfaces/Auth/ThirdPartyAuthForm' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import { AuthProvidersLayout } from 'components/layouts/AuthLayout/AuthProvidersLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import NoPermission from 'components/ui/NoPermission' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' +import { ThirdPartyAuthForm } from '@/components/interfaces/Auth/ThirdPartyAuthForm' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import { AuthProvidersLayout } from '@/components/layouts/AuthLayout/AuthProvidersLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import NoPermission from '@/components/ui/NoPermission' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const ThirdPartyPage: NextPageWithLayout = () => { const { ref } = useParams() const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( diff --git a/apps/studio/pages/project/[ref]/auth/url-configuration.tsx b/apps/studio/pages/project/[ref]/auth/url-configuration.tsx index 0fee7d3fbb..414ea18c80 100644 --- a/apps/studio/pages/project/[ref]/auth/url-configuration.tsx +++ b/apps/studio/pages/project/[ref]/auth/url-configuration.tsx @@ -1,11 +1,4 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { RedirectUrls } from 'components/interfaces/Auth/RedirectUrls/RedirectUrls' -import SiteUrl from 'components/interfaces/Auth/SiteUrl/SiteUrl' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -17,6 +10,14 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { RedirectUrls } from '@/components/interfaces/Auth/RedirectUrls/RedirectUrls' +import SiteUrl from '@/components/interfaces/Auth/SiteUrl/SiteUrl' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import type { NextPageWithLayout } from '@/types' + const URLConfiguration: NextPageWithLayout = () => { const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.READ, diff --git a/apps/studio/pages/project/[ref]/auth/users.tsx b/apps/studio/pages/project/[ref]/auth/users.tsx index 35ee67c1d7..8f40389363 100644 --- a/apps/studio/pages/project/[ref]/auth/users.tsx +++ b/apps/studio/pages/project/[ref]/auth/users.tsx @@ -1,7 +1,7 @@ -import { UsersV2 } from 'components/interfaces/Auth/Users/UsersV2' -import AuthLayout from 'components/layouts/AuthLayout/AuthLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import type { NextPageWithLayout } from 'types' +import { UsersV2 } from '@/components/interfaces/Auth/Users/UsersV2' +import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import type { NextPageWithLayout } from '@/types' const UsersPage: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/project/[ref]/branches/index.tsx b/apps/studio/pages/project/[ref]/branches/index.tsx index 7924646283..e0994a0faf 100644 --- a/apps/studio/pages/project/[ref]/branches/index.tsx +++ b/apps/studio/pages/project/[ref]/branches/index.tsx @@ -1,33 +1,33 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useParams } from 'common' import { partition } from 'lodash' import { MessageCircle } from 'lucide-react' import { useRouter } from 'next/router' import { useState } from 'react' import { toast } from 'sonner' - -import { useParams } from 'common' -import { Overview } from 'components/interfaces/BranchManagement/Overview' -import BranchLayout from 'components/layouts/BranchLayout/BranchLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import { AlertError } from 'components/ui/AlertError' -import { ButtonTooltip } from 'components/ui/ButtonTooltip' -import { DocsButton } from 'components/ui/DocsButton' -import { NoPermission } from 'components/ui/NoPermission' -import { TextConfirmModal } from 'components/ui/TextConfirmModalWrapper' -import { useBranchDeleteMutation } from 'data/branches/branch-delete-mutation' -import { Branch, useBranchesQuery } from 'data/branches/branches-query' -import { useGitHubConnectionsQuery } from 'data/integrations/github-connections-query' -import { useSendEventMutation } from 'data/telemetry/send-event-mutation' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { DOCS_URL } from 'lib/constants' -import { useAppStateSnapshot } from 'state/app-state' -import type { NextPageWithLayout } from 'types' import { Button } from 'ui' +import { Overview } from '@/components/interfaces/BranchManagement/Overview' +import BranchLayout from '@/components/layouts/BranchLayout/BranchLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import { AlertError } from '@/components/ui/AlertError' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import { DocsButton } from '@/components/ui/DocsButton' +import { NoPermission } from '@/components/ui/NoPermission' +import { TextConfirmModal } from '@/components/ui/TextConfirmModalWrapper' +import { useBranchDeleteMutation } from '@/data/branches/branch-delete-mutation' +import { Branch, useBranchesQuery } from '@/data/branches/branches-query' +import { useGitHubConnectionsQuery } from '@/data/integrations/github-connections-query' +import { useSendEventMutation } from '@/data/telemetry/send-event-mutation' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { DOCS_URL } from '@/lib/constants' +import { useAppStateSnapshot } from '@/state/app-state' +import type { NextPageWithLayout } from '@/types' + const BranchesPage: NextPageWithLayout = () => { const router = useRouter() const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/branches/merge-requests.tsx b/apps/studio/pages/project/[ref]/branches/merge-requests.tsx index 73facef98f..7d22ca5ef1 100644 --- a/apps/studio/pages/project/[ref]/branches/merge-requests.tsx +++ b/apps/studio/pages/project/[ref]/branches/merge-requests.tsx @@ -1,34 +1,10 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' +import { useParams } from 'common' import { partition } from 'lodash' import { ArrowRight, GitMerge, MessageCircle, MoreVertical, Shield, X } from 'lucide-react' import { useRouter } from 'next/router' import { PropsWithChildren } from 'react' import { toast } from 'sonner' - -import { useParams } from 'common' -import { useIsBranching2Enabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' -import { - BranchManagementSection, - BranchRow, -} from 'components/interfaces/BranchManagement/BranchPanels' -import { BranchSelector } from 'components/interfaces/BranchManagement/BranchSelector' -import { PullRequestsEmptyState } from 'components/interfaces/BranchManagement/EmptyStates' -import BranchLayout from 'components/layouts/BranchLayout/BranchLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import AlertError from 'components/ui/AlertError' -import { DocsButton } from 'components/ui/DocsButton' -import NoPermission from 'components/ui/NoPermission' -import { useBranchUpdateMutation } from 'data/branches/branch-update-mutation' -import { Branch, useBranchesQuery } from 'data/branches/branches-query' -import { useGitHubConnectionsQuery } from 'data/integrations/github-connections-query' -import { useSendEventMutation } from 'data/telemetry/send-event-mutation' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { Button, DropdownMenu, @@ -39,6 +15,30 @@ import { } from 'ui' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { useIsBranching2Enabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' +import { + BranchManagementSection, + BranchRow, +} from '@/components/interfaces/BranchManagement/BranchPanels' +import { BranchSelector } from '@/components/interfaces/BranchManagement/BranchSelector' +import { PullRequestsEmptyState } from '@/components/interfaces/BranchManagement/EmptyStates' +import BranchLayout from '@/components/layouts/BranchLayout/BranchLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import AlertError from '@/components/ui/AlertError' +import { DocsButton } from '@/components/ui/DocsButton' +import NoPermission from '@/components/ui/NoPermission' +import { useBranchUpdateMutation } from '@/data/branches/branch-update-mutation' +import { Branch, useBranchesQuery } from '@/data/branches/branches-query' +import { useGitHubConnectionsQuery } from '@/data/integrations/github-connections-query' +import { useSendEventMutation } from '@/data/telemetry/send-event-mutation' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const MergeRequestsPage: NextPageWithLayout = () => { const router = useRouter() const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/database/backups/pitr.tsx b/apps/studio/pages/project/[ref]/database/backups/pitr.tsx index da113de653..1da676c7f7 100644 --- a/apps/studio/pages/project/[ref]/database/backups/pitr.tsx +++ b/apps/studio/pages/project/[ref]/database/backups/pitr.tsx @@ -1,21 +1,6 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' -import DatabaseBackupsNav from 'components/interfaces/Database/Backups/DatabaseBackupsNav' -import { PITRNotice } from 'components/interfaces/Database/Backups/PITR/PITRNotice' -import { PITRSelection } from 'components/interfaces/Database/Backups/PITR/PITRSelection' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import AlertError from 'components/ui/AlertError' -import { DocsButton } from 'components/ui/DocsButton' -import NoPermission from 'components/ui/NoPermission' -import { UpgradeToPro } from 'components/ui/UpgradeToPro' -import { useBackupsQuery } from 'data/database/backups-query' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useIsOrioleDbInAws, useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { DOCS_URL, PROJECT_STATUS } from 'lib/constants' import { AlertCircle } from 'lucide-react' -import type { NextPageWithLayout } from 'types' import { Alert_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_ } from 'ui' import { Admonition } from 'ui-patterns' import { PageContainer } from 'ui-patterns/PageContainer' @@ -29,7 +14,22 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import DatabaseBackupsNav from '@/components/interfaces/Database/Backups/DatabaseBackupsNav' +import { PITRNotice } from '@/components/interfaces/Database/Backups/PITR/PITRNotice' +import { PITRSelection } from '@/components/interfaces/Database/Backups/PITR/PITRSelection' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import AlertError from '@/components/ui/AlertError' +import { DocsButton } from '@/components/ui/DocsButton' +import NoPermission from '@/components/ui/NoPermission' +import { UpgradeToPro } from '@/components/ui/UpgradeToPro' +import { useBackupsQuery } from '@/data/database/backups-query' import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useIsOrioleDbInAws, useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { DOCS_URL, PROJECT_STATUS } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' const DatabasePhysicalBackups: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx b/apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx index 4f12048869..ed6bfbf717 100644 --- a/apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx +++ b/apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx @@ -1,11 +1,4 @@ import { useParams } from 'common' -import DatabaseBackupsNav from 'components/interfaces/Database/Backups/DatabaseBackupsNav' -import { RestoreToNewProject } from 'components/interfaces/Database/RestoreToNewProject/RestoreToNewProject' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -16,6 +9,14 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import DatabaseBackupsNav from '@/components/interfaces/Database/Backups/DatabaseBackupsNav' +import { RestoreToNewProject } from '@/components/interfaces/Database/RestoreToNewProject/RestoreToNewProject' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const RestoreToNewProjectPage: NextPageWithLayout = () => { const { ref } = useParams() const { databaseRestoreToNewProject } = useIsFeatureEnabled(['database:restore_to_new_project']) diff --git a/apps/studio/pages/project/[ref]/database/backups/scheduled.tsx b/apps/studio/pages/project/[ref]/database/backups/scheduled.tsx index d79d687d34..e04b620bdc 100644 --- a/apps/studio/pages/project/[ref]/database/backups/scheduled.tsx +++ b/apps/studio/pages/project/[ref]/database/backups/scheduled.tsx @@ -1,19 +1,6 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' -import { BackupsList } from 'components/interfaces/Database/Backups/BackupsList' -import DatabaseBackupsNav from 'components/interfaces/Database/Backups/DatabaseBackupsNav' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import AlertError from 'components/ui/AlertError' -import { DocsButton } from 'components/ui/DocsButton' -import InformationBox from 'components/ui/InformationBox' -import NoPermission from 'components/ui/NoPermission' -import { useBackupsQuery } from 'data/database/backups-query' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useIsOrioleDbInAws } from 'hooks/misc/useSelectedProject' -import { DOCS_URL } from 'lib/constants' import { Info } from 'lucide-react' -import type { NextPageWithLayout } from 'types' import { Admonition } from 'ui-patterns' import { PageContainer } from 'ui-patterns/PageContainer' import { @@ -26,6 +13,20 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { BackupsList } from '@/components/interfaces/Database/Backups/BackupsList' +import DatabaseBackupsNav from '@/components/interfaces/Database/Backups/DatabaseBackupsNav' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import AlertError from '@/components/ui/AlertError' +import { DocsButton } from '@/components/ui/DocsButton' +import InformationBox from '@/components/ui/InformationBox' +import NoPermission from '@/components/ui/NoPermission' +import { useBackupsQuery } from '@/data/database/backups-query' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useIsOrioleDbInAws } from '@/hooks/misc/useSelectedProject' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const DatabaseScheduledBackups: NextPageWithLayout = () => { const { ref: projectRef } = useParams() diff --git a/apps/studio/pages/project/[ref]/database/column-privileges.tsx b/apps/studio/pages/project/[ref]/database/column-privileges.tsx index ef1a7c32d0..457670bff7 100644 --- a/apps/studio/pages/project/[ref]/database/column-privileges.tsx +++ b/apps/studio/pages/project/[ref]/database/column-privileges.tsx @@ -1,38 +1,39 @@ import { LOCAL_STORAGE_KEYS, useParams } from 'common' +import { AlertCircle, XIcon } from 'lucide-react' +import Link from 'next/link' +import { useCallback, useEffect, useMemo, useState } from 'react' +import { toast } from 'sonner' +import { Alert_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_, Button } from 'ui' +import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' + import { useFeaturePreviewModal, useIsColumnLevelPrivilegesEnabled, -} from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' +} from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { getDefaultColumnCheckedStates, getDefaultTableCheckedStates, useApplyPrivilegeOperations, usePrivilegesState, -} from 'components/interfaces/Database/Privileges/Privileges.utils' -import PrivilegesHead from 'components/interfaces/Database/Privileges/PrivilegesHead' -import PrivilegesTable from 'components/interfaces/Database/Privileges/PrivilegesTable' -import { ProtectedSchemaWarning } from 'components/interfaces/Database/ProtectedSchemaWarning' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import AlertError from 'components/ui/AlertError' -import { DocsButton } from 'components/ui/DocsButton' -import { PgRole, useDatabaseRolesQuery } from 'data/database-roles/database-roles-query' -import { useColumnPrivilegesQuery } from 'data/privileges/column-privileges-query' -import { useTablePrivilegesQuery } from 'data/privileges/table-privileges-query' -import { useTablesQuery } from 'data/tables/tables-query' -import { useLocalStorage } from 'hooks/misc/useLocalStorage' -import { useQuerySchemaState } from 'hooks/misc/useSchemaQueryState' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { useIsProtectedSchema } from 'hooks/useProtectedSchemas' -import { DOCS_URL } from 'lib/constants' -import { AlertCircle, XIcon } from 'lucide-react' -import Link from 'next/link' -import { useCallback, useEffect, useMemo, useState } from 'react' -import { toast } from 'sonner' -import type { NextPageWithLayout } from 'types' -import { Alert_Shadcn_, AlertDescription_Shadcn_, AlertTitle_Shadcn_, Button } from 'ui' -import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +} from '@/components/interfaces/Database/Privileges/Privileges.utils' +import PrivilegesHead from '@/components/interfaces/Database/Privileges/PrivilegesHead' +import PrivilegesTable from '@/components/interfaces/Database/Privileges/PrivilegesTable' +import { ProtectedSchemaWarning } from '@/components/interfaces/Database/ProtectedSchemaWarning' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import AlertError from '@/components/ui/AlertError' +import { DocsButton } from '@/components/ui/DocsButton' +import { PgRole, useDatabaseRolesQuery } from '@/data/database-roles/database-roles-query' +import { useColumnPrivilegesQuery } from '@/data/privileges/column-privileges-query' +import { useTablePrivilegesQuery } from '@/data/privileges/table-privileges-query' +import { useTablesQuery } from '@/data/tables/tables-query' +import { useLocalStorage } from '@/hooks/misc/useLocalStorage' +import { useQuerySchemaState } from '@/hooks/misc/useSchemaQueryState' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { useIsProtectedSchema } from '@/hooks/useProtectedSchemas' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' const EDITABLE_ROLES = ['authenticated', 'anon', 'service_role'] diff --git a/apps/studio/pages/project/[ref]/database/extensions.tsx b/apps/studio/pages/project/[ref]/database/extensions.tsx index 628c21b13e..5c56361d6c 100644 --- a/apps/studio/pages/project/[ref]/database/extensions.tsx +++ b/apps/studio/pages/project/[ref]/database/extensions.tsx @@ -1,12 +1,4 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { Extensions } from 'components/interfaces/Database/Extensions/Extensions' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -18,6 +10,15 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { Extensions } from '@/components/interfaces/Database/Extensions/Extensions' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const DatabaseExtensions: NextPageWithLayout = () => { const { can: canReadExtensions, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_READ, diff --git a/apps/studio/pages/project/[ref]/database/functions.tsx b/apps/studio/pages/project/[ref]/database/functions.tsx index 61b37d0363..3c2f32bd08 100644 --- a/apps/studio/pages/project/[ref]/database/functions.tsx +++ b/apps/studio/pages/project/[ref]/database/functions.tsx @@ -1,12 +1,4 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { FunctionsList } from 'components/interfaces/Database/Functions/FunctionsList/FunctionsList' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -17,6 +9,15 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { FunctionsList } from '@/components/interfaces/Database/Functions/FunctionsList/FunctionsList' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const DatabaseFunctionsPage: NextPageWithLayout = () => { const { can: canReadFunctions, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_READ, diff --git a/apps/studio/pages/project/[ref]/database/indexes.tsx b/apps/studio/pages/project/[ref]/database/indexes.tsx index e812100da0..858b99dfcd 100644 --- a/apps/studio/pages/project/[ref]/database/indexes.tsx +++ b/apps/studio/pages/project/[ref]/database/indexes.tsx @@ -1,11 +1,4 @@ import { ExternalLink } from 'lucide-react' - -import Indexes from 'components/interfaces/Database/Indexes/Indexes' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { Button } from 'ui' import { PageContainer } from 'ui-patterns/PageContainer' import { @@ -18,6 +11,13 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import Indexes from '@/components/interfaces/Database/Indexes/Indexes' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const IndexesPage: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/project/[ref]/database/migrations.tsx b/apps/studio/pages/project/[ref]/database/migrations.tsx index 7bd4c94750..df018c9c8c 100644 --- a/apps/studio/pages/project/[ref]/database/migrations.tsx +++ b/apps/studio/pages/project/[ref]/database/migrations.tsx @@ -1,9 +1,3 @@ -import Migrations from 'components/interfaces/Database/Migrations/Migrations' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { DocsButton } from 'components/ui/DocsButton' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -15,6 +9,13 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import Migrations from '@/components/interfaces/Database/Migrations/Migrations' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const MigrationsPage: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/project/[ref]/database/publications/[id].tsx b/apps/studio/pages/project/[ref]/database/publications/[id].tsx index 1d82acf59e..de740317c8 100644 --- a/apps/studio/pages/project/[ref]/database/publications/[id].tsx +++ b/apps/studio/pages/project/[ref]/database/publications/[id].tsx @@ -1,12 +1,13 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { PublicationsTables } from 'components/interfaces/Database/Publications/PublicationsTables' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import type { NextPageWithLayout } from 'types' + +import { PublicationsTables } from '@/components/interfaces/Database/Publications/PublicationsTables' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import type { NextPageWithLayout } from '@/types' const DatabasePublications: NextPageWithLayout = () => { const { can: canViewPublications, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( diff --git a/apps/studio/pages/project/[ref]/database/publications/index.tsx b/apps/studio/pages/project/[ref]/database/publications/index.tsx index 9a241e4ced..5fc74efecc 100644 --- a/apps/studio/pages/project/[ref]/database/publications/index.tsx +++ b/apps/studio/pages/project/[ref]/database/publications/index.tsx @@ -1,10 +1,4 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { PublicationsList } from 'components/interfaces/Database/Publications/PublicationsList' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -14,6 +8,13 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { PublicationsList } from '@/components/interfaces/Database/Publications/PublicationsList' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import type { NextPageWithLayout } from '@/types' + const DatabasePublications: NextPageWithLayout = () => { const { can: canViewPublications, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.TENANT_SQL_ADMIN_READ, diff --git a/apps/studio/pages/project/[ref]/database/replication/[pipelineId].tsx b/apps/studio/pages/project/[ref]/database/replication/[pipelineId].tsx index 255c0efca4..b9b2d9b120 100644 --- a/apps/studio/pages/project/[ref]/database/replication/[pipelineId].tsx +++ b/apps/studio/pages/project/[ref]/database/replication/[pipelineId].tsx @@ -1,14 +1,15 @@ import { FeatureFlagContext, useParams } from 'common' -import { ReplicationPipelineStatus } from 'components/interfaces/Database/Replication/ReplicationPipelineStatus/ReplicationPipelineStatus' -import { useIsETLPrivateAlpha } from 'components/interfaces/Database/Replication/useIsETLPrivateAlpha' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import { FormHeader } from 'components/ui/Forms/FormHeader' import { useRouter } from 'next/router' import { useContext, useEffect } from 'react' -import { PipelineRequestStatusProvider } from 'state/replication-pipeline-request-status' -import type { NextPageWithLayout } from 'types' + +import { ReplicationPipelineStatus } from '@/components/interfaces/Database/Replication/ReplicationPipelineStatus/ReplicationPipelineStatus' +import { useIsETLPrivateAlpha } from '@/components/interfaces/Database/Replication/useIsETLPrivateAlpha' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import { FormHeader } from '@/components/ui/Forms/FormHeader' +import { PipelineRequestStatusProvider } from '@/state/replication-pipeline-request-status' +import type { NextPageWithLayout } from '@/types' const DatabaseReplicationPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/database/replication/index.tsx b/apps/studio/pages/project/[ref]/database/replication/index.tsx index b11a66035a..5d1ef8fd87 100644 --- a/apps/studio/pages/project/[ref]/database/replication/index.tsx +++ b/apps/studio/pages/project/[ref]/database/replication/index.tsx @@ -1,14 +1,14 @@ import { useParams } from 'common' -import { Destinations } from 'components/interfaces/Database/Replication/Destinations' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { PipelineRequestStatusProvider } from 'state/replication-pipeline-request-status' -import type { NextPageWithLayout } from 'types' +import { Destinations } from '@/components/interfaces/Database/Replication/Destinations' import { ReplicationDiagram } from '@/components/interfaces/Database/Replication/ReplicationDiagram' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { PipelineRequestStatusProvider } from '@/state/replication-pipeline-request-status' +import type { NextPageWithLayout } from '@/types' const DatabaseReplicationPage: NextPageWithLayout = () => { const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/database/replication/replica/[replicaId].tsx b/apps/studio/pages/project/[ref]/database/replication/replica/[replicaId].tsx index 3d7730e40d..5ecc268e23 100644 --- a/apps/studio/pages/project/[ref]/database/replication/replica/[replicaId].tsx +++ b/apps/studio/pages/project/[ref]/database/replication/replica/[replicaId].tsx @@ -1,13 +1,10 @@ import { useParams } from 'common' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' import { Database } from 'icons' import { Loader2, Trash } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { useEffect, useMemo, useState } from 'react' import { AWS_REGIONS } from 'shared-data' -import type { NextPageWithLayout } from 'types' import { Badge, Button } from 'ui' import { ShimmeringLoader } from 'ui-patterns' @@ -19,6 +16,8 @@ import { import { DropReplicaConfirmationModal } from '@/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/DropReplicaConfirmationModal' import { REPLICA_STATUS } from '@/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/InstanceConfiguration.constants' import { RestartReplicaConfirmationModal } from '@/components/interfaces/Settings/Infrastructure/InfrastructureConfiguration/RestartReplicaConfirmationModal' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' import { ScaffoldDescription, ScaffoldTitle } from '@/components/layouts/Scaffold' import { ButtonTooltip } from '@/components/ui/ButtonTooltip' @@ -28,6 +27,7 @@ import { ReplicaInitializationStatus, useReadReplicasStatusesQuery, } from '@/data/read-replicas/replicas-status-query' +import type { NextPageWithLayout } from '@/types' const DatabaseReadReplicaPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/database/roles.tsx b/apps/studio/pages/project/[ref]/database/roles.tsx index bde0ff8163..7285806433 100644 --- a/apps/studio/pages/project/[ref]/database/roles.tsx +++ b/apps/studio/pages/project/[ref]/database/roles.tsx @@ -1,10 +1,4 @@ import { useParams } from 'common' -import { RolesList } from 'components/interfaces/Database/Roles/RolesList' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -15,6 +9,13 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { RolesList } from '@/components/interfaces/Database/Roles/RolesList' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' + const DatabaseRoles: NextPageWithLayout = () => { const { ref } = useParams() const showRoles = useIsFeatureEnabled('database:roles') diff --git a/apps/studio/pages/project/[ref]/database/schemas.tsx b/apps/studio/pages/project/[ref]/database/schemas.tsx index 1e5bb7db24..b959932639 100644 --- a/apps/studio/pages/project/[ref]/database/schemas.tsx +++ b/apps/studio/pages/project/[ref]/database/schemas.tsx @@ -1,8 +1,9 @@ -import { SchemaGraph } from 'components/interfaces/Database/Schemas/SchemaGraph' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' import { ReactFlowProvider } from '@xyflow/react' -import type { NextPageWithLayout } from 'types' + +import { SchemaGraph } from '@/components/interfaces/Database/Schemas/SchemaGraph' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import type { NextPageWithLayout } from '@/types' const SchemasPage: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/database/settings.tsx b/apps/studio/pages/project/[ref]/database/settings.tsx index 46743d8b92..64fada053f 100644 --- a/apps/studio/pages/project/[ref]/database/settings.tsx +++ b/apps/studio/pages/project/[ref]/database/settings.tsx @@ -1,15 +1,3 @@ -import { useIsJitDbAccessEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' -import { ConnectionPooling } from 'components/interfaces/Settings/Database/ConnectionPooling/ConnectionPooling' -import { DatabaseReadOnlyAlert } from 'components/interfaces/Settings/Database/DatabaseReadOnlyAlert' -import ResetDbPassword from 'components/interfaces/Settings/Database/DatabaseSettings/ResetDbPassword' -import { PoolingModesModal } from 'components/interfaces/Settings/Database/PoolingModesModal' -import { SettingsDatabaseEmptyStateLocal } from 'components/interfaces/Settings/Database/SettingsDatabaseEmptyStateLocal' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { useIsAwsCloudProvider, useIsAwsK8sCloudProvider } from 'hooks/misc/useSelectedProject' -import { IS_PLATFORM } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -20,12 +8,24 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { useIsJitDbAccessEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { DiskManagementPanelForm } from '@/components/interfaces/DiskManagement/DiskManagementPanelForm' import { BannedIPs } from '@/components/interfaces/Settings/Database/BannedIPs' +import { ConnectionPooling } from '@/components/interfaces/Settings/Database/ConnectionPooling/ConnectionPooling' +import { DatabaseReadOnlyAlert } from '@/components/interfaces/Settings/Database/DatabaseReadOnlyAlert' +import ResetDbPassword from '@/components/interfaces/Settings/Database/DatabaseSettings/ResetDbPassword' import { DiskSizeConfiguration } from '@/components/interfaces/Settings/Database/DiskSizeConfiguration' import { JitDbAccessConfiguration } from '@/components/interfaces/Settings/Database/JitDatabaseAccess/JitDbAccessConfiguration' import { NetworkRestrictions } from '@/components/interfaces/Settings/Database/NetworkRestrictions/NetworkRestrictions' +import { PoolingModesModal } from '@/components/interfaces/Settings/Database/PoolingModesModal' +import { SettingsDatabaseEmptyStateLocal } from '@/components/interfaces/Settings/Database/SettingsDatabaseEmptyStateLocal' import { SSLConfiguration } from '@/components/interfaces/Settings/Database/SSLConfiguration' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { useIsAwsCloudProvider, useIsAwsK8sCloudProvider } from '@/hooks/misc/useSelectedProject' +import { IS_PLATFORM } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' const DatabaseSettings: NextPageWithLayout = () => { const isAws = useIsAwsCloudProvider() diff --git a/apps/studio/pages/project/[ref]/database/tables/[id].tsx b/apps/studio/pages/project/[ref]/database/tables/[id].tsx index e64808aa78..f3c71b629c 100644 --- a/apps/studio/pages/project/[ref]/database/tables/[id].tsx +++ b/apps/studio/pages/project/[ref]/database/tables/[id].tsx @@ -1,20 +1,21 @@ import { useParams } from 'common' -import { ColumnList } from 'components/interfaces/Database/Tables/ColumnList' -import DeleteConfirmationDialogs from 'components/interfaces/TableGridEditor/DeleteConfirmationDialogs' -import { SidePanelEditor } from 'components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { useTableEditorQuery } from 'data/table-editor/table-editor-query' -import { isTableLike } from 'data/table-editor/table-editor-types' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { useTableEditorStateSnapshot } from 'state/table-editor' -import { TableEditorTableStateContextProvider } from 'state/table-editor-table' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { ShimmeringLoader } from 'ui-patterns/ShimmeringLoader' +import { ColumnList } from '@/components/interfaces/Database/Tables/ColumnList' +import DeleteConfirmationDialogs from '@/components/interfaces/TableGridEditor/DeleteConfirmationDialogs' +import { SidePanelEditor } from '@/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { useTableEditorQuery } from '@/data/table-editor/table-editor-query' +import { isTableLike } from '@/data/table-editor/table-editor-types' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { useTableEditorStateSnapshot } from '@/state/table-editor' +import { TableEditorTableStateContextProvider } from '@/state/table-editor-table' +import type { NextPageWithLayout } from '@/types' + const DatabaseTables: NextPageWithLayout = () => { const snap = useTableEditorStateSnapshot() diff --git a/apps/studio/pages/project/[ref]/database/tables/index.tsx b/apps/studio/pages/project/[ref]/database/tables/index.tsx index 6b34b91fc3..725217f5d8 100644 --- a/apps/studio/pages/project/[ref]/database/tables/index.tsx +++ b/apps/studio/pages/project/[ref]/database/tables/index.tsx @@ -1,19 +1,20 @@ import { PostgresTable } from '@supabase/postgres-meta' import { useParams } from 'common' -import { TableList } from 'components/interfaces/Database/Tables/TableList' -import DeleteConfirmationDialogs from 'components/interfaces/TableGridEditor/DeleteConfirmationDialogs' -import { SidePanelEditor } from 'components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { Entity, isTableLike, postgresTableToEntity } from 'data/table-editor/table-editor-types' import { useState } from 'react' -import { useTableEditorStateSnapshot } from 'state/table-editor' -import { TableEditorTableStateContextProvider } from 'state/table-editor-table' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { TableList } from '@/components/interfaces/Database/Tables/TableList' +import DeleteConfirmationDialogs from '@/components/interfaces/TableGridEditor/DeleteConfirmationDialogs' +import { SidePanelEditor } from '@/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { Entity, isTableLike, postgresTableToEntity } from '@/data/table-editor/table-editor-types' +import { useTableEditorStateSnapshot } from '@/state/table-editor' +import { TableEditorTableStateContextProvider } from '@/state/table-editor-table' +import type { NextPageWithLayout } from '@/types' + const DatabaseTables: NextPageWithLayout = () => { const { ref: projectRef } = useParams() const snap = useTableEditorStateSnapshot() diff --git a/apps/studio/pages/project/[ref]/database/triggers/data.tsx b/apps/studio/pages/project/[ref]/database/triggers/data.tsx index 2d947170ab..d7336f96b7 100644 --- a/apps/studio/pages/project/[ref]/database/triggers/data.tsx +++ b/apps/studio/pages/project/[ref]/database/triggers/data.tsx @@ -1,10 +1,11 @@ -import { TriggersList } from 'components/interfaces/Database/Triggers/TriggersList/TriggersList' -import { DatabaseTriggersLayout } from 'components/layouts/DatabaseLayout/DatabaseTriggersLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { TriggersList } from '@/components/interfaces/Database/Triggers/TriggersList/TriggersList' +import { DatabaseTriggersLayout } from '@/components/layouts/DatabaseLayout/DatabaseTriggersLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import type { NextPageWithLayout } from '@/types' + export const TriggersDataPage: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/database/triggers/event.tsx b/apps/studio/pages/project/[ref]/database/triggers/event.tsx index 0bb86a88cb..178e32c16c 100644 --- a/apps/studio/pages/project/[ref]/database/triggers/event.tsx +++ b/apps/studio/pages/project/[ref]/database/triggers/event.tsx @@ -1,10 +1,11 @@ -import { EventTriggersList } from 'components/interfaces/Database/Triggers/EventTriggersList/EventTriggersList' -import { DatabaseTriggersLayout } from 'components/layouts/DatabaseLayout/DatabaseTriggersLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { EventTriggersList } from '@/components/interfaces/Database/Triggers/EventTriggersList/EventTriggersList' +import { DatabaseTriggersLayout } from '@/components/layouts/DatabaseLayout/DatabaseTriggersLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import type { NextPageWithLayout } from '@/types' + export const TriggersSchemaPage: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/database/triggers/index.tsx b/apps/studio/pages/project/[ref]/database/triggers/index.tsx index b100fbffe4..76a7a60bea 100644 --- a/apps/studio/pages/project/[ref]/database/triggers/index.tsx +++ b/apps/studio/pages/project/[ref]/database/triggers/index.tsx @@ -1,8 +1,8 @@ +import { useParams } from 'common' import { useRouter } from 'next/router' import { useEffect } from 'react' -import { useParams } from 'common' -import type { NextPageWithLayout } from 'types' +import type { NextPageWithLayout } from '@/types' const DatabaseTriggersIndexPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/database/types.tsx b/apps/studio/pages/project/[ref]/database/types.tsx index ddee121bc4..1950b0ddc6 100644 --- a/apps/studio/pages/project/[ref]/database/types.tsx +++ b/apps/studio/pages/project/[ref]/database/types.tsx @@ -1,7 +1,3 @@ -import { EnumeratedTypes } from 'components/interfaces/Database/EnumeratedTypes/EnumeratedTypes' -import DatabaseLayout from 'components/layouts/DatabaseLayout/DatabaseLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -12,6 +8,11 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { EnumeratedTypes } from '@/components/interfaces/Database/EnumeratedTypes/EnumeratedTypes' +import DatabaseLayout from '@/components/layouts/DatabaseLayout/DatabaseLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import type { NextPageWithLayout } from '@/types' + const DatabaseEnumeratedTypes: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/project/[ref]/editor/[id].tsx b/apps/studio/pages/project/[ref]/editor/[id].tsx index 6c7fc6fc21..f07fa50215 100644 --- a/apps/studio/pages/project/[ref]/editor/[id].tsx +++ b/apps/studio/pages/project/[ref]/editor/[id].tsx @@ -1,15 +1,15 @@ +import { useParams } from 'common' import { useEffect } from 'react' -import { useParams } from 'common' -import { TableGridEditor } from 'components/interfaces/TableGridEditor/TableGridEditor' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { EditorBaseLayout } from 'components/layouts/editors/EditorBaseLayout' -import { TableEditorLayout } from 'components/layouts/TableEditorLayout/TableEditorLayout' -import { TableEditorMenu } from 'components/layouts/TableEditorLayout/TableEditorMenu' -import { useTableEditorQuery } from 'data/table-editor/table-editor-query' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { createTabId, useTabsStateSnapshot } from 'state/tabs' -import type { NextPageWithLayout } from 'types' +import { TableGridEditor } from '@/components/interfaces/TableGridEditor/TableGridEditor' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout' +import { TableEditorLayout } from '@/components/layouts/TableEditorLayout/TableEditorLayout' +import { TableEditorMenu } from '@/components/layouts/TableEditorLayout/TableEditorMenu' +import { useTableEditorQuery } from '@/data/table-editor/table-editor-query' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { createTabId, useTabsStateSnapshot } from '@/state/tabs' +import type { NextPageWithLayout } from '@/types' const TableEditorPage: NextPageWithLayout = () => { const { id: _id, ref: projectRef } = useParams() diff --git a/apps/studio/pages/project/[ref]/editor/index.tsx b/apps/studio/pages/project/[ref]/editor/index.tsx index d3484ceae4..73c3c1993c 100644 --- a/apps/studio/pages/project/[ref]/editor/index.tsx +++ b/apps/studio/pages/project/[ref]/editor/index.tsx @@ -1,18 +1,18 @@ +import { useParams } from 'common' import { useRouter } from 'next/router' import { useEffect } from 'react' -import { useParams } from 'common' -import { buildTableEditorUrl } from 'components/grid/SupabaseGrid.utils' -import { SidePanelEditor } from 'components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { EditorBaseLayout } from 'components/layouts/editors/EditorBaseLayout' -import { TableEditorLayout } from 'components/layouts/TableEditorLayout/TableEditorLayout' -import { TableEditorMenu } from 'components/layouts/TableEditorLayout/TableEditorMenu' -import { NewTab } from 'components/layouts/Tabs/NewTab' -import { useDashboardHistory } from 'hooks/misc/useDashboardHistory' -import { useQuerySchemaState } from 'hooks/misc/useSchemaQueryState' -import { editorEntityTypes, useTabsStateSnapshot } from 'state/tabs' -import type { NextPageWithLayout } from 'types' +import { buildTableEditorUrl } from '@/components/grid/SupabaseGrid.utils' +import { SidePanelEditor } from '@/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout' +import { TableEditorLayout } from '@/components/layouts/TableEditorLayout/TableEditorLayout' +import { TableEditorMenu } from '@/components/layouts/TableEditorLayout/TableEditorMenu' +import { NewTab } from '@/components/layouts/Tabs/NewTab' +import { useDashboardHistory } from '@/hooks/misc/useDashboardHistory' +import { useQuerySchemaState } from '@/hooks/misc/useSchemaQueryState' +import { editorEntityTypes, useTabsStateSnapshot } from '@/state/tabs' +import type { NextPageWithLayout } from '@/types' const TableEditorPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/editor/new.tsx b/apps/studio/pages/project/[ref]/editor/new.tsx index e1cbfe5228..3158ebddb7 100644 --- a/apps/studio/pages/project/[ref]/editor/new.tsx +++ b/apps/studio/pages/project/[ref]/editor/new.tsx @@ -1,13 +1,13 @@ +import { useParams } from 'common' import { useRouter } from 'next/router' -import { useParams } from 'common' -import { SidePanelEditor } from 'components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { EditorBaseLayout } from 'components/layouts/editors/EditorBaseLayout' -import { TableEditorLayout } from 'components/layouts/TableEditorLayout/TableEditorLayout' -import { TableEditorMenu } from 'components/layouts/TableEditorLayout/TableEditorMenu' -import { NewTab } from 'components/layouts/Tabs/NewTab' -import type { NextPageWithLayout } from 'types' +import { SidePanelEditor } from '@/components/interfaces/TableGridEditor/SidePanelEditor/SidePanelEditor' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout' +import { TableEditorLayout } from '@/components/layouts/TableEditorLayout/TableEditorLayout' +import { TableEditorMenu } from '@/components/layouts/TableEditorLayout/TableEditorMenu' +import { NewTab } from '@/components/layouts/Tabs/NewTab' +import type { NextPageWithLayout } from '@/types' const EditorNewPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/functions/[functionSlug]/code.tsx b/apps/studio/pages/project/[ref]/functions/[functionSlug]/code.tsx index 1947ece5ee..d730efb3b9 100644 --- a/apps/studio/pages/project/[ref]/functions/[functionSlug]/code.tsx +++ b/apps/studio/pages/project/[ref]/functions/[functionSlug]/code.tsx @@ -1,27 +1,27 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { IS_PLATFORM, useParams } from 'common' -import { DeployEdgeFunctionWarningModal } from 'components/interfaces/EdgeFunctions/DeployEdgeFunctionWarningModal' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import EdgeFunctionDetailsLayout from 'components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' -import { ButtonTooltip } from 'components/ui/ButtonTooltip' -import { FileExplorerAndEditor } from 'components/ui/FileExplorerAndEditor' -import { useEdgeFunctionBodyQuery } from 'data/edge-functions/edge-function-body-query' -import { useEdgeFunctionQuery } from 'data/edge-functions/edge-function-query' -import { useEdgeFunctionDeployMutation } from 'data/edge-functions/edge-functions-deploy-mutation' -import { useSendEventMutation } from 'data/telemetry/send-event-mutation' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { BASE_PATH } from 'lib/constants' import { isEqual } from 'lodash' import { AlertCircle, CornerDownLeft, Loader2 } from 'lucide-react' import { useEffect, useMemo, useState } from 'react' import { toast } from 'sonner' import { LogoLoader } from 'ui' +import { DeployEdgeFunctionWarningModal } from '@/components/interfaces/EdgeFunctions/DeployEdgeFunctionWarningModal' import { formatFunctionBodyToFiles } from '@/components/interfaces/EdgeFunctions/EdgeFunctions.utils' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import EdgeFunctionDetailsLayout from '@/components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' import { PreventNavigationOnUnsavedChanges } from '@/components/ui-patterns/Dialogs/PreventNavigationOnUnsavedChanges' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import { FileExplorerAndEditor } from '@/components/ui/FileExplorerAndEditor' import { FileData } from '@/components/ui/FileExplorerAndEditor/FileExplorerAndEditor.types' +import { useEdgeFunctionBodyQuery } from '@/data/edge-functions/edge-function-body-query' +import { useEdgeFunctionQuery } from '@/data/edge-functions/edge-function-query' +import { useEdgeFunctionDeployMutation } from '@/data/edge-functions/edge-functions-deploy-mutation' +import { useSendEventMutation } from '@/data/telemetry/send-event-mutation' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { BASE_PATH } from '@/lib/constants' const CodePage = () => { const { ref, functionSlug } = useParams() diff --git a/apps/studio/pages/project/[ref]/functions/[functionSlug]/details.tsx b/apps/studio/pages/project/[ref]/functions/[functionSlug]/details.tsx index 0328bb721c..5dd7dbee8d 100644 --- a/apps/studio/pages/project/[ref]/functions/[functionSlug]/details.tsx +++ b/apps/studio/pages/project/[ref]/functions/[functionSlug]/details.tsx @@ -1,7 +1,7 @@ -import { EdgeFunctionDetails } from 'components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails' -import DefaultLayout from 'components/layouts/DefaultLayout' -import EdgeFunctionDetailsLayout from 'components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' -import type { NextPageWithLayout } from 'types' +import { EdgeFunctionDetails } from '@/components/interfaces/Functions/EdgeFunctionDetails/EdgeFunctionDetails' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import EdgeFunctionDetailsLayout from '@/components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' +import type { NextPageWithLayout } from '@/types' const PageLayout: NextPageWithLayout = () => diff --git a/apps/studio/pages/project/[ref]/functions/[functionSlug]/index.tsx b/apps/studio/pages/project/[ref]/functions/[functionSlug]/index.tsx index 29dad4538e..e6d93001bb 100644 --- a/apps/studio/pages/project/[ref]/functions/[functionSlug]/index.tsx +++ b/apps/studio/pages/project/[ref]/functions/[functionSlug]/index.tsx @@ -1,27 +1,11 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { IS_PLATFORM, useFeatureFlags, useFlag, useParams } from 'common' -import { EdgeFunctionOverview } from 'components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview' -import { EdgeFunctionRecentInvocations } from 'components/interfaces/Functions/EdgeFunctionRecentInvocations' -import ReportWidget from 'components/interfaces/Reports/ReportWidget' -import DefaultLayout from 'components/layouts/DefaultLayout' -import EdgeFunctionDetailsLayout from 'components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' -import AreaChart from 'components/ui/Charts/AreaChart' -import StackedBarChart from 'components/ui/Charts/StackedBarChart' -import NoPermission from 'components/ui/NoPermission' -import { - FunctionsCombinedStatsVariables, - useFunctionsCombinedStatsQuery, -} from 'data/analytics/functions-combined-stats-query' -import { useEdgeFunctionQuery } from 'data/edge-functions/edge-function-query' import dayjs, { Dayjs } from 'dayjs' -import { useFillTimeseriesSorted } from 'hooks/analytics/useFillTimeseriesSorted' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' import maxBy from 'lodash/maxBy' import meanBy from 'lodash/meanBy' import sumBy from 'lodash/sumBy' import { useRouter } from 'next/router' import { useMemo, useState } from 'react' -import type { ChartIntervals, NextPageWithLayout } from 'types' import { Alert_Shadcn_, AlertDescription_Shadcn_, @@ -33,6 +17,23 @@ import { import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { EdgeFunctionOverview } from '@/components/interfaces/Functions/EdgeFunctionOverview/EdgeFunctionOverview' +import { EdgeFunctionRecentInvocations } from '@/components/interfaces/Functions/EdgeFunctionRecentInvocations' +import ReportWidget from '@/components/interfaces/Reports/ReportWidget' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import EdgeFunctionDetailsLayout from '@/components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' +import AreaChart from '@/components/ui/Charts/AreaChart' +import StackedBarChart from '@/components/ui/Charts/StackedBarChart' +import NoPermission from '@/components/ui/NoPermission' +import { + FunctionsCombinedStatsVariables, + useFunctionsCombinedStatsQuery, +} from '@/data/analytics/functions-combined-stats-query' +import { useEdgeFunctionQuery } from '@/data/edge-functions/edge-function-query' +import { useFillTimeseriesSorted } from '@/hooks/analytics/useFillTimeseriesSorted' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import type { ChartIntervals, NextPageWithLayout } from '@/types' + const CHART_INTERVALS: ChartIntervals[] = [ { key: '15min', diff --git a/apps/studio/pages/project/[ref]/functions/[functionSlug]/invocations.tsx b/apps/studio/pages/project/[ref]/functions/[functionSlug]/invocations.tsx index d1aebb10ac..8f8ed161d6 100644 --- a/apps/studio/pages/project/[ref]/functions/[functionSlug]/invocations.tsx +++ b/apps/studio/pages/project/[ref]/functions/[functionSlug]/invocations.tsx @@ -1,9 +1,10 @@ import { useParams } from 'common' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import EdgeFunctionDetailsLayout from 'components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' -import { useEdgeFunctionQuery } from 'data/edge-functions/edge-function-query' -import type { NextPageWithLayout } from 'types' + +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import EdgeFunctionDetailsLayout from '@/components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' +import { useEdgeFunctionQuery } from '@/data/edge-functions/edge-function-query' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const { ref, functionSlug } = useParams() diff --git a/apps/studio/pages/project/[ref]/functions/[functionSlug]/logs.tsx b/apps/studio/pages/project/[ref]/functions/[functionSlug]/logs.tsx index 6f96e61192..3052a78b1c 100644 --- a/apps/studio/pages/project/[ref]/functions/[functionSlug]/logs.tsx +++ b/apps/studio/pages/project/[ref]/functions/[functionSlug]/logs.tsx @@ -1,9 +1,10 @@ import { useParams } from 'common' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import EdgeFunctionDetailsLayout from 'components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' -import { useEdgeFunctionQuery } from 'data/edge-functions/edge-function-query' -import type { NextPageWithLayout } from 'types' + +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import EdgeFunctionDetailsLayout from '@/components/layouts/EdgeFunctionsLayout/EdgeFunctionDetailsLayout' +import { useEdgeFunctionQuery } from '@/data/edge-functions/edge-function-query' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const { ref, functionSlug } = useParams() diff --git a/apps/studio/pages/project/[ref]/functions/index.tsx b/apps/studio/pages/project/[ref]/functions/index.tsx index e1e4a9f0fb..c4a92fad05 100644 --- a/apps/studio/pages/project/[ref]/functions/index.tsx +++ b/apps/studio/pages/project/[ref]/functions/index.tsx @@ -1,29 +1,7 @@ import { useParams } from 'common' -import { DeployEdgeFunctionButton } from 'components/interfaces/EdgeFunctions/DeployEdgeFunctionButton' -import { - EDGE_FUNCTIONS_SORT_VALUES, - EdgeFunctionsSort, - EdgeFunctionsSortColumn, - EdgeFunctionsSortDropdown, - EdgeFunctionsSortOrder, -} from 'components/interfaces/EdgeFunctions/EdgeFunctionsSortDropdown' -import { EdgeFunctionsListItem } from 'components/interfaces/Functions/EdgeFunctionsListItem' -import { - FunctionsEmptyState, - FunctionsInstructionsLocal, -} from 'components/interfaces/Functions/FunctionsEmptyState' -import { TerminalInstructionsDialog } from 'components/interfaces/Functions/TerminalInstructionsDialog' -import DefaultLayout from 'components/layouts/DefaultLayout' -import EdgeFunctionsLayout from 'components/layouts/EdgeFunctionsLayout/EdgeFunctionsLayout' -import AlertError from 'components/ui/AlertError' -import { DocsButton } from 'components/ui/DocsButton' -import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query' -import { usePHFlag } from 'hooks/ui/useFlag' -import { DOCS_URL, IS_PLATFORM } from 'lib/constants' import { ExternalLink, Search, X } from 'lucide-react' import { parseAsString, parseAsStringLiteral, useQueryState } from 'nuqs' import React, { useMemo } from 'react' -import type { NextPageWithLayout } from 'types' import { Button, Card, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from 'ui' import { Admonition } from 'ui-patterns' import { Input } from 'ui-patterns/DataInputs/Input' @@ -39,6 +17,29 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { DeployEdgeFunctionButton } from '@/components/interfaces/EdgeFunctions/DeployEdgeFunctionButton' +import { + EDGE_FUNCTIONS_SORT_VALUES, + EdgeFunctionsSort, + EdgeFunctionsSortColumn, + EdgeFunctionsSortDropdown, + EdgeFunctionsSortOrder, +} from '@/components/interfaces/EdgeFunctions/EdgeFunctionsSortDropdown' +import { EdgeFunctionsListItem } from '@/components/interfaces/Functions/EdgeFunctionsListItem' +import { + FunctionsEmptyState, + FunctionsInstructionsLocal, +} from '@/components/interfaces/Functions/FunctionsEmptyState' +import { TerminalInstructionsDialog } from '@/components/interfaces/Functions/TerminalInstructionsDialog' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import EdgeFunctionsLayout from '@/components/layouts/EdgeFunctionsLayout/EdgeFunctionsLayout' +import AlertError from '@/components/ui/AlertError' +import { DocsButton } from '@/components/ui/DocsButton' +import { useEdgeFunctionsQuery } from '@/data/edge-functions/edge-functions-query' +import { usePHFlag } from '@/hooks/ui/useFlag' +import { DOCS_URL, IS_PLATFORM } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const EdgeFunctionsPage: NextPageWithLayout = () => { const { ref } = useParams() const showEdgeFunctionsRequestMetrics = usePHFlag('edgeFunctionsRequestMetrics') === true diff --git a/apps/studio/pages/project/[ref]/functions/new.tsx b/apps/studio/pages/project/[ref]/functions/new.tsx index 0897ffd42a..4cccfcd7d4 100644 --- a/apps/studio/pages/project/[ref]/functions/new.tsx +++ b/apps/studio/pages/project/[ref]/functions/new.tsx @@ -1,25 +1,11 @@ import { zodResolver } from '@hookform/resolvers/zod' import { useParams } from 'common' -import { EDGE_FUNCTION_TEMPLATES } from 'components/interfaces/Functions/Functions.templates' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import EdgeFunctionsLayout from 'components/layouts/EdgeFunctionsLayout/EdgeFunctionsLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { SIDEBAR_KEYS } from 'components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' -import { FileExplorerAndEditor } from 'components/ui/FileExplorerAndEditor' -import { useEdgeFunctionDeployMutation } from 'data/edge-functions/edge-functions-deploy-mutation' -import { useSendEventMutation } from 'data/telemetry/send-event-mutation' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { BASE_PATH } from 'lib/constants' import { isEqual } from 'lodash' import { AlertCircle, Book, Check } from 'lucide-react' import { useRouter } from 'next/router' import { useEffect, useId, useMemo, useState } from 'react' import { useForm } from 'react-hook-form' import { toast } from 'sonner' -import { useAiAssistantStateSnapshot } from 'state/ai-assistant-state' -import { useSidebarManagerSnapshot } from 'state/sidebar-manager-state' import { AiIconAnimation, Button, @@ -45,9 +31,23 @@ import { } from 'ui' import * as z from 'zod' +import { EDGE_FUNCTION_TEMPLATES } from '@/components/interfaces/Functions/Functions.templates' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import EdgeFunctionsLayout from '@/components/layouts/EdgeFunctionsLayout/EdgeFunctionsLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { SIDEBAR_KEYS } from '@/components/layouts/ProjectLayout/LayoutSidebar/LayoutSidebarProvider' import { PreventNavigationOnUnsavedChanges } from '@/components/ui-patterns/Dialogs/PreventNavigationOnUnsavedChanges' +import { FileExplorerAndEditor } from '@/components/ui/FileExplorerAndEditor' import { FileData } from '@/components/ui/FileExplorerAndEditor/FileExplorerAndEditor.types' +import { useEdgeFunctionDeployMutation } from '@/data/edge-functions/edge-functions-deploy-mutation' +import { useSendEventMutation } from '@/data/telemetry/send-event-mutation' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' import { useLatest } from '@/hooks/misc/useLatest' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { BASE_PATH } from '@/lib/constants' +import { useAiAssistantStateSnapshot } from '@/state/ai-assistant-state' +import { useSidebarManagerSnapshot } from '@/state/sidebar-manager-state' // Array of adjectives and nouns for random function name generation const ADJECTIVES = [ diff --git a/apps/studio/pages/project/[ref]/functions/secrets.tsx b/apps/studio/pages/project/[ref]/functions/secrets.tsx index 8794a94ea0..fa2e1682ed 100644 --- a/apps/studio/pages/project/[ref]/functions/secrets.tsx +++ b/apps/studio/pages/project/[ref]/functions/secrets.tsx @@ -1,9 +1,3 @@ -import { EdgeFunctionSecrets } from 'components/interfaces/Functions/EdgeFunctionSecrets/EdgeFunctionSecrets' -import { FunctionsSecretsEmptyStateLocal } from 'components/interfaces/Functions/FunctionsEmptyState' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import EdgeFunctionsLayout from 'components/layouts/EdgeFunctionsLayout/EdgeFunctionsLayout' -import { IS_PLATFORM } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -14,6 +8,13 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { EdgeFunctionSecrets } from '@/components/interfaces/Functions/EdgeFunctionSecrets/EdgeFunctionSecrets' +import { FunctionsSecretsEmptyStateLocal } from '@/components/interfaces/Functions/FunctionsEmptyState' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import EdgeFunctionsLayout from '@/components/layouts/EdgeFunctionsLayout/EdgeFunctionsLayout' +import { IS_PLATFORM } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const SecretsPage: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/index.tsx b/apps/studio/pages/project/[ref]/index.tsx index fbf95f2013..8e1b42dd29 100644 --- a/apps/studio/pages/project/[ref]/index.tsx +++ b/apps/studio/pages/project/[ref]/index.tsx @@ -1,9 +1,10 @@ import { IS_PLATFORM } from 'common' -import { Home } from 'components/interfaces/Home/Home' -import { ProjectHome } from 'components/interfaces/ProjectHome/Home' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { ProjectLayoutWithAuth } from 'components/layouts/ProjectLayout' -import type { NextPageWithLayout } from 'types' + +import { Home } from '@/components/interfaces/Home/Home' +import { ProjectHome } from '@/components/interfaces/ProjectHome/Home' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { ProjectLayoutWithAuth } from '@/components/layouts/ProjectLayout' +import type { NextPageWithLayout } from '@/types' const HomePage: NextPageWithLayout = () => { return IS_PLATFORM ? : diff --git a/apps/studio/pages/project/[ref]/integrations/[id]/[pageId]/[childId]/index.tsx b/apps/studio/pages/project/[ref]/integrations/[id]/[pageId]/[childId]/index.tsx index bf95284e40..347e62738a 100644 --- a/apps/studio/pages/project/[ref]/integrations/[id]/[pageId]/[childId]/index.tsx +++ b/apps/studio/pages/project/[ref]/integrations/[id]/[pageId]/[childId]/index.tsx @@ -1,10 +1,6 @@ import { useParams } from 'common' -import { INTEGRATIONS } from 'components/interfaces/Integrations/Landing/Integrations.constants' -import { useInstalledIntegrations } from 'components/interfaces/Integrations/Landing/useInstalledIntegrations' -import { DefaultLayout } from 'components/layouts/DefaultLayout' import { useRouter } from 'next/router' import { useEffect, useMemo } from 'react' -import type { NextPageWithLayout } from 'types' import { Admonition } from 'ui-patterns' import { PageContainer } from 'ui-patterns/PageContainer' import { @@ -17,8 +13,12 @@ import { import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { INTEGRATIONS } from '@/components/interfaces/Integrations/Landing/Integrations.constants' import { useAvailableIntegrations } from '@/components/interfaces/Integrations/Landing/useAvailableIntegrations' +import { useInstalledIntegrations } from '@/components/interfaces/Integrations/Landing/useInstalledIntegrations' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' import { ProjectIntegrationsLayout } from '@/components/layouts/ProjectIntegrationsLayout' +import type { NextPageWithLayout } from '@/types' const IntegrationPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/integrations/[id]/[pageId]/index.tsx b/apps/studio/pages/project/[ref]/integrations/[id]/[pageId]/index.tsx index 1721ca2677..eb49a03adc 100644 --- a/apps/studio/pages/project/[ref]/integrations/[id]/[pageId]/index.tsx +++ b/apps/studio/pages/project/[ref]/integrations/[id]/[pageId]/index.tsx @@ -1,14 +1,7 @@ import { useFlag, useParams } from 'common' -import { useInstalledIntegrations } from 'components/interfaces/Integrations/Landing/useInstalledIntegrations' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useDatabaseExtensionsQuery } from 'data/database-extensions/database-extensions-query' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import Link from 'next/link' import { useRouter } from 'next/router' import { useEffect, useMemo } from 'react' -import type { NextPageWithLayout } from 'types' import { BreadcrumbItem_Shadcn_ as BreadcrumbItem, BreadcrumbLink_Shadcn_ as BreadcrumbLink, @@ -37,7 +30,14 @@ import ShimmeringLoader, { GenericSkeletonLoader } from 'ui-patterns/ShimmeringL import { InstallIntegrationSheet } from '@/components/interfaces/Integrations/Integration/IntegrationOverviewTabV2/InstallIntegrationSheet/InstallIntegrationSheet' import { useAvailableIntegrations } from '@/components/interfaces/Integrations/Landing/useAvailableIntegrations' +import { useInstalledIntegrations } from '@/components/interfaces/Integrations/Landing/useInstalledIntegrations' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' import { ProjectIntegrationsLayout } from '@/components/layouts/ProjectIntegrationsLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useDatabaseExtensionsQuery } from '@/data/database-extensions/database-extensions-query' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import type { NextPageWithLayout } from '@/types' type NavigationItem = { label: string; href: string; active?: boolean } diff --git a/apps/studio/pages/project/[ref]/integrations/[id]/index.tsx b/apps/studio/pages/project/[ref]/integrations/[id]/index.tsx index dbde514bf0..6b86102e03 100644 --- a/apps/studio/pages/project/[ref]/integrations/[id]/index.tsx +++ b/apps/studio/pages/project/[ref]/integrations/[id]/index.tsx @@ -1,13 +1,13 @@ import { useParams } from 'common' -import { DefaultLayout } from 'components/layouts/DefaultLayout' import { useRouter } from 'next/router' import { useEffect } from 'react' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' import { ProjectIntegrationsLayout } from '@/components/layouts/ProjectIntegrationsLayout' +import type { NextPageWithLayout } from '@/types' const IntegrationPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/integrations/index.tsx b/apps/studio/pages/project/[ref]/integrations/index.tsx index 6dfe42bcef..904569fad8 100644 --- a/apps/studio/pages/project/[ref]/integrations/index.tsx +++ b/apps/studio/pages/project/[ref]/integrations/index.tsx @@ -1,17 +1,6 @@ -import { - IntegrationCard, - IntegrationLoadingCard, -} from 'components/interfaces/Integrations/Landing/IntegrationCard' -import { useInstalledIntegrations } from 'components/interfaces/Integrations/Landing/useInstalledIntegrations' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { AlertError } from 'components/ui/AlertError' -import { DocsButton } from 'components/ui/DocsButton' -import { NoSearchResults } from 'components/ui/NoSearchResults' -import { DOCS_URL } from 'lib/constants' import { Search } from 'lucide-react' import { parseAsString, useQueryState } from 'nuqs' import { useMemo } from 'react' -import type { NextPageWithLayout } from 'types' import { Input } from 'ui-patterns/DataInputs/Input' import { PageContainer } from 'ui-patterns/PageContainer' import { @@ -24,8 +13,19 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent, PageSectionMeta } from 'ui-patterns/PageSection' +import { + IntegrationCard, + IntegrationLoadingCard, +} from '@/components/interfaces/Integrations/Landing/IntegrationCard' import { useAvailableIntegrations } from '@/components/interfaces/Integrations/Landing/useAvailableIntegrations' +import { useInstalledIntegrations } from '@/components/interfaces/Integrations/Landing/useInstalledIntegrations' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' import { ProjectIntegrationsLayout } from '@/components/layouts/ProjectIntegrationsLayout' +import { AlertError } from '@/components/ui/AlertError' +import { DocsButton } from '@/components/ui/DocsButton' +import { NoSearchResults } from '@/components/ui/NoSearchResults' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' const FEATURED_INTEGRATIONS = ['cron', 'queues', 'stripe_sync_engine'] diff --git a/apps/studio/pages/project/[ref]/logs/auth-logs.tsx b/apps/studio/pages/project/[ref]/logs/auth-logs.tsx index 6503270a7c..c5110601a9 100644 --- a/apps/studio/pages/project/[ref]/logs/auth-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/auth-logs.tsx @@ -1,12 +1,12 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import type { NextPageWithLayout } from 'types' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import type { NextPageWithLayout } from '@/types' const LogsPage: NextPageWithLayout = () => { const { data: project } = useSelectedProjectQuery() diff --git a/apps/studio/pages/project/[ref]/logs/cron-logs.tsx b/apps/studio/pages/project/[ref]/logs/cron-logs.tsx index fe9f47e39f..8b071de599 100644 --- a/apps/studio/pages/project/[ref]/logs/cron-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/cron-logs.tsx @@ -2,11 +2,11 @@ import { useRouter } from 'next/router' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import type { NextPageWithLayout } from 'types' +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/logs/dedicated-pooler-logs.tsx b/apps/studio/pages/project/[ref]/logs/dedicated-pooler-logs.tsx index fc763b90ed..5f69d2b365 100644 --- a/apps/studio/pages/project/[ref]/logs/dedicated-pooler-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/dedicated-pooler-logs.tsx @@ -1,14 +1,15 @@ import { useParams } from 'common' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements' import { useRouter } from 'next/router' import { useEffect } from 'react' -import type { NextPageWithLayout } from 'types' import { LogoLoader } from 'ui' +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' +import type { NextPageWithLayout } from '@/types' + export const LogPage: NextPageWithLayout = () => { const router = useRouter() const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/logs/edge-functions-logs.tsx b/apps/studio/pages/project/[ref]/logs/edge-functions-logs.tsx index fc9d0249c9..f124efca96 100644 --- a/apps/studio/pages/project/[ref]/logs/edge-functions-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/edge-functions-logs.tsx @@ -1,10 +1,11 @@ import { useRouter } from 'next/router' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import type { NextPageWithLayout } from 'types' +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' + export const LogPage: NextPageWithLayout = () => { const router = useRouter() const { ref } = router.query diff --git a/apps/studio/pages/project/[ref]/logs/edge-logs.tsx b/apps/studio/pages/project/[ref]/logs/edge-logs.tsx index 155e0b27d0..30647d57c2 100644 --- a/apps/studio/pages/project/[ref]/logs/edge-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/edge-logs.tsx @@ -1,10 +1,11 @@ import { useParams } from 'common' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' import { parseAsString, useQueryState } from 'nuqs' -import type { NextPageWithLayout } from 'types' + +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/logs/explorer/index.tsx b/apps/studio/pages/project/[ref]/logs/explorer/index.tsx index a74e3d3c12..8e5b57e72d 100644 --- a/apps/studio/pages/project/[ref]/logs/explorer/index.tsx +++ b/apps/studio/pages/project/[ref]/logs/explorer/index.tsx @@ -1,53 +1,53 @@ import { useMonaco } from '@monaco-editor/react' import { useLocalStorage } from '@uidotdev/usehooks' import { IS_PLATFORM, LOCAL_STORAGE_KEYS, useParams } from 'common' +import dayjs from 'dayjs' +import type { editor } from 'monaco-editor' +import { useRouter } from 'next/router' +import { useEffect, useMemo, useRef, useState } from 'react' +import { toast } from 'sonner' +import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from 'ui' + import { EXPLORER_DATEPICKER_HELPERS, getDefaultHelper, LOGS_LARGE_DATE_RANGE_DAYS_THRESHOLD, TEMPLATES, -} from 'components/interfaces/Settings/Logs/Logs.constants' -import { DatePickerValue } from 'components/interfaces/Settings/Logs/Logs.DatePickers' -import { LogData, LogsWarning, LogTemplate } from 'components/interfaces/Settings/Logs/Logs.types' +} from '@/components/interfaces/Settings/Logs/Logs.constants' +import { DatePickerValue } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' +import { LogData, LogsWarning, LogTemplate } from '@/components/interfaces/Settings/Logs/Logs.types' +import { UpdateSavedQueryModal } from '@/components/interfaces/Settings/Logs/Logs.UpdateSavedQueryModal' import { maybeShowUpgradePromptIfNotEntitled, useEditorHints, -} from 'components/interfaces/Settings/Logs/Logs.utils' +} from '@/components/interfaces/Settings/Logs/Logs.utils' import { buildLogQueryParams, resolveLogDateRange, -} from 'components/interfaces/Settings/Logs/logsDateRange' -import LogsQueryPanel from 'components/interfaces/Settings/Logs/LogsQueryPanel' -import { LogTable } from 'components/interfaces/Settings/Logs/LogTable' -import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import CodeEditor from 'components/ui/CodeEditor/CodeEditor' -import LoadingOpacity from 'components/ui/LoadingOpacity' -import ShimmerLine from 'components/ui/ShimmerLine' -import { useContentQuery } from 'data/content/content-query' +} from '@/components/interfaces/Settings/Logs/logsDateRange' +import LogsQueryPanel from '@/components/interfaces/Settings/Logs/LogsQueryPanel' +import { LogTable } from '@/components/interfaces/Settings/Logs/LogTable' +import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import CodeEditor from '@/components/ui/CodeEditor/CodeEditor' +import LoadingOpacity from '@/components/ui/LoadingOpacity' +import ShimmerLine from '@/components/ui/ShimmerLine' +import { useContentQuery } from '@/data/content/content-query' import { UpsertContentPayload, useContentUpsertMutation, -} from 'data/content/content-upsert-mutation' -import dayjs from 'dayjs' -import useLogsQuery from 'hooks/analytics/useLogsQuery' -import { useLogsUrlState } from 'hooks/analytics/useLogsUrlState' -import { useCustomContent } from 'hooks/custom-content/useCustomContent' -import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { useUpgradePrompt } from 'hooks/misc/useUpgradePrompt' -import { uuidv4 } from 'lib/helpers' -import { useProfile } from 'lib/profile' -import { useTrack } from 'lib/telemetry/track' -import type { editor } from 'monaco-editor' -import { useRouter } from 'next/router' -import { useEffect, useMemo, useRef, useState } from 'react' -import { toast } from 'sonner' -import type { LogSqlSnippets, NextPageWithLayout } from 'types' -import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from 'ui' - -import { UpdateSavedQueryModal } from '@/components/interfaces/Settings/Logs/Logs.UpdateSavedQueryModal' +} from '@/data/content/content-upsert-mutation' +import useLogsQuery from '@/hooks/analytics/useLogsQuery' +import { useLogsUrlState } from '@/hooks/analytics/useLogsUrlState' +import { useCustomContent } from '@/hooks/custom-content/useCustomContent' +import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { useUpgradePrompt } from '@/hooks/misc/useUpgradePrompt' +import { uuidv4 } from '@/lib/helpers' +import { useProfile } from '@/lib/profile' +import { useTrack } from '@/lib/telemetry/track' +import type { LogSqlSnippets, NextPageWithLayout } from '@/types' const LOCAL_PLACEHOLDER_QUERY = 'select\n timestamp, event_message, metadata\n from edge_logs limit 5' diff --git a/apps/studio/pages/project/[ref]/logs/explorer/recent.tsx b/apps/studio/pages/project/[ref]/logs/explorer/recent.tsx index 2c0903d9f4..528dfb1cec 100644 --- a/apps/studio/pages/project/[ref]/logs/explorer/recent.tsx +++ b/apps/studio/pages/project/[ref]/logs/explorer/recent.tsx @@ -1,16 +1,16 @@ +import { useParams } from 'common' import { Clock } from 'lucide-react' import Link from 'next/link' - -import { useParams } from 'common' -import RecentQueriesItem from 'components/interfaces/Settings/Logs/RecentQueriesItem' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import Table from 'components/to-be-cleaned/Table' -import LogsExplorerHeader from 'components/ui/Logs/LogsExplorerHeader' -import { useLocalStorage } from 'hooks/misc/useLocalStorage' -import type { LogSqlSnippets, NextPageWithLayout } from 'types' import { Button } from 'ui' +import RecentQueriesItem from '@/components/interfaces/Settings/Logs/RecentQueriesItem' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import Table from '@/components/to-be-cleaned/Table' +import LogsExplorerHeader from '@/components/ui/Logs/LogsExplorerHeader' +import { useLocalStorage } from '@/hooks/misc/useLocalStorage' +import type { LogSqlSnippets, NextPageWithLayout } from '@/types' + export const LogsSavedPage: NextPageWithLayout = () => { const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/logs/explorer/saved.tsx b/apps/studio/pages/project/[ref]/logs/explorer/saved.tsx index 50f94af56e..2af2c9c17f 100644 --- a/apps/studio/pages/project/[ref]/logs/explorer/saved.tsx +++ b/apps/studio/pages/project/[ref]/logs/explorer/saved.tsx @@ -1,16 +1,16 @@ import { useParams } from 'common' import { Save } from 'lucide-react' import Link from 'next/link' - -import LogsSavedQueriesItem from 'components/interfaces/Settings/Logs/Logs.SavedQueriesItem' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import Table from 'components/to-be-cleaned/Table' -import LogsExplorerHeader from 'components/ui/Logs/LogsExplorerHeader' -import { useContentQuery } from 'data/content/content-query' -import type { NextPageWithLayout } from 'types' import { Loading } from 'ui' +import LogsSavedQueriesItem from '@/components/interfaces/Settings/Logs/Logs.SavedQueriesItem' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import Table from '@/components/to-be-cleaned/Table' +import LogsExplorerHeader from '@/components/ui/Logs/LogsExplorerHeader' +import { useContentQuery } from '@/data/content/content-query' +import type { NextPageWithLayout } from '@/types' + // [Joshen] This page looks like its not longer in use from a UI POV - double checking and deprecate + add redirects export const LogsSavedPage: NextPageWithLayout = () => { const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/logs/explorer/templates.tsx b/apps/studio/pages/project/[ref]/logs/explorer/templates.tsx index 174fb2bf1e..7b98f0b360 100644 --- a/apps/studio/pages/project/[ref]/logs/explorer/templates.tsx +++ b/apps/studio/pages/project/[ref]/logs/explorer/templates.tsx @@ -1,17 +1,17 @@ import { useParams } from 'common' import { CodeIcon } from 'lucide-react' import { useState } from 'react' +import { Button, cn, Popover } from 'ui' -import { TEMPLATES } from 'components/interfaces/Settings/Logs/Logs.constants' -import type { LogTemplate } from 'components/interfaces/Settings/Logs/Logs.types' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import CardButton from 'components/ui/CardButton' -import LogsExplorerHeader from 'components/ui/Logs/LogsExplorerHeader' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' -import { Button, Popover, cn } from 'ui' +import { TEMPLATES } from '@/components/interfaces/Settings/Logs/Logs.constants' +import type { LogTemplate } from '@/components/interfaces/Settings/Logs/Logs.types' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import CardButton from '@/components/ui/CardButton' +import LogsExplorerHeader from '@/components/ui/Logs/LogsExplorerHeader' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' export const LogsTemplatesPage: NextPageWithLayout = () => { const { ref: projectRef } = useParams() diff --git a/apps/studio/pages/project/[ref]/logs/index.tsx b/apps/studio/pages/project/[ref]/logs/index.tsx index 30afc93931..de5ab04705 100644 --- a/apps/studio/pages/project/[ref]/logs/index.tsx +++ b/apps/studio/pages/project/[ref]/logs/index.tsx @@ -1,11 +1,12 @@ import { useParams } from 'common' -import { useUnifiedLogsPreview } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' -import { UnifiedLogs } from 'components/interfaces/UnifiedLogs/UnifiedLogs' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { ProjectLayout } from 'components/layouts/ProjectLayout' import { useRouter } from 'next/router' import { useEffect } from 'react' -import type { NextPageWithLayout } from 'types' + +import { useUnifiedLogsPreview } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' +import { UnifiedLogs } from '@/components/interfaces/UnifiedLogs/UnifiedLogs' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { ProjectLayout } from '@/components/layouts/ProjectLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/logs/pg-upgrade-logs.tsx b/apps/studio/pages/project/[ref]/logs/pg-upgrade-logs.tsx index 97672dbfd6..32140a369e 100644 --- a/apps/studio/pages/project/[ref]/logs/pg-upgrade-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/pg-upgrade-logs.tsx @@ -1,8 +1,9 @@ import { useParams } from 'common' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import type { NextPageWithLayout } from 'types' + +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/logs/pgcron-logs.tsx b/apps/studio/pages/project/[ref]/logs/pgcron-logs.tsx index 22bb9d979c..14a9f06e38 100644 --- a/apps/studio/pages/project/[ref]/logs/pgcron-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/pgcron-logs.tsx @@ -1,10 +1,10 @@ import { useRouter } from 'next/router' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import type { NextPageWithLayout } from 'types' +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/logs/pooler-logs.tsx b/apps/studio/pages/project/[ref]/logs/pooler-logs.tsx index a6300e3ae3..f10b0e34cb 100644 --- a/apps/studio/pages/project/[ref]/logs/pooler-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/pooler-logs.tsx @@ -1,14 +1,14 @@ -import { parseAsString, useQueryState } from 'nuqs' - import { useParams } from 'common' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import { useSupavisorConfigurationQuery } from 'data/database/supavisor-configuration-query' -import type { NextPageWithLayout } from 'types' +import { parseAsString, useQueryState } from 'nuqs' import { LogoLoader } from 'ui' +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import { useSupavisorConfigurationQuery } from '@/data/database/supavisor-configuration-query' +import type { NextPageWithLayout } from '@/types' + export const LogPage: NextPageWithLayout = () => { const { ref } = useParams() const [identifier] = useQueryState('db', parseAsString) diff --git a/apps/studio/pages/project/[ref]/logs/postgres-logs.tsx b/apps/studio/pages/project/[ref]/logs/postgres-logs.tsx index 6cf3c10f3a..0061c355c7 100644 --- a/apps/studio/pages/project/[ref]/logs/postgres-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/postgres-logs.tsx @@ -1,11 +1,11 @@ +import { useParams } from 'common' import { parseAsString, useQueryState } from 'nuqs' -import { useParams } from 'common' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import type { NextPageWithLayout } from 'types' +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/logs/postgrest-logs.tsx b/apps/studio/pages/project/[ref]/logs/postgrest-logs.tsx index 94001f79f7..d6cb92f6a4 100644 --- a/apps/studio/pages/project/[ref]/logs/postgrest-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/postgrest-logs.tsx @@ -1,12 +1,12 @@ +import { useParams } from 'common' import { parseAsString, useQueryState } from 'nuqs' -import { useParams } from 'common' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import { LogsTableEmptyState } from 'components/interfaces/Settings/Logs/LogsTableEmptyState' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import type { NextPageWithLayout } from 'types' +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import { LogsTableEmptyState } from '@/components/interfaces/Settings/Logs/LogsTableEmptyState' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/logs/realtime-logs.tsx b/apps/studio/pages/project/[ref]/logs/realtime-logs.tsx index ccd69081bd..5a3be9480f 100644 --- a/apps/studio/pages/project/[ref]/logs/realtime-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/realtime-logs.tsx @@ -1,9 +1,9 @@ import { useRouter } from 'next/router' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import type { NextPageWithLayout } from 'types' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/logs/replication-logs.tsx b/apps/studio/pages/project/[ref]/logs/replication-logs.tsx index fe7c45179a..211f35547f 100644 --- a/apps/studio/pages/project/[ref]/logs/replication-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/replication-logs.tsx @@ -1,9 +1,10 @@ import { useParams } from 'common' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import type { NextPageWithLayout } from 'types' + +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/logs/storage-logs.tsx b/apps/studio/pages/project/[ref]/logs/storage-logs.tsx index 3131dac9ad..c659b12307 100644 --- a/apps/studio/pages/project/[ref]/logs/storage-logs.tsx +++ b/apps/studio/pages/project/[ref]/logs/storage-logs.tsx @@ -1,9 +1,9 @@ import { useRouter } from 'next/router' -import { LogsPreviewer } from 'components/interfaces/Settings/Logs/LogsPreviewer' -import DefaultLayout from 'components/layouts/DefaultLayout' -import LogsLayout from 'components/layouts/LogsLayout/LogsLayout' -import type { NextPageWithLayout } from 'types' +import { LogsPreviewer } from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import LogsLayout from '@/components/layouts/LogsLayout/LogsLayout' +import type { NextPageWithLayout } from '@/types' export const LogPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/merge.tsx b/apps/studio/pages/project/[ref]/merge.tsx index 6cf6338395..32bb3805ab 100644 --- a/apps/studio/pages/project/[ref]/merge.tsx +++ b/apps/studio/pages/project/[ref]/merge.tsx @@ -1,34 +1,10 @@ +import { useParams } from 'common' import dayjs from 'dayjs' import { AlertTriangle, GitBranchIcon, GitMerge, MoreVertical, Shield, X } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { useCallback, useEffect, useMemo, useState } from 'react' import { toast } from 'sonner' - -import { useParams } from 'common' -import { DatabaseDiffPanel } from 'components/interfaces/BranchManagement/DatabaseDiffPanel' -import { EdgeFunctionsDiffPanel } from 'components/interfaces/BranchManagement/EdgeFunctionsDiffPanel' -import { OutOfDateNotice } from 'components/interfaces/BranchManagement/OutOfDateNotice' -import { ReviewWithAI } from 'components/interfaces/BranchManagement/ReviewWithAI' -import { WorkflowLogsCard } from 'components/interfaces/BranchManagement/WorkflowLogsCard' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { ProjectLayoutWithAuth } from 'components/layouts/ProjectLayout' -import { ScaffoldContainer } from 'components/layouts/Scaffold' -import ProductEmptyState from 'components/to-be-cleaned/ProductEmptyState' -import { ButtonTooltip } from 'components/ui/ButtonTooltip' -import { useBranchDeleteMutation } from 'data/branches/branch-delete-mutation' -import { useBranchMergeMutation } from 'data/branches/branch-merge-mutation' -import { useBranchPushMutation } from 'data/branches/branch-push-mutation' -import { useBranchUpdateMutation } from 'data/branches/branch-update-mutation' -import { useBranchesQuery } from 'data/branches/branches-query' -import { useProjectDetailQuery } from 'data/projects/project-detail-query' -import { useSendEventMutation } from 'data/telemetry/send-event-mutation' -import { useBranchMergeDiff } from 'hooks/branches/useBranchMergeDiff' -import { useWorkflowManagement } from 'hooks/branches/useWorkflowManagement' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import type { NextPageWithLayout } from 'types' import { Badge, Button, @@ -40,9 +16,33 @@ import { NavMenu, NavMenuItem, } from 'ui' -import { useIsPgDeltaDiffEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { ConfirmationModal } from 'ui-patterns/Dialogs/ConfirmationModal' +import { useIsPgDeltaDiffEnabled } from '@/components/interfaces/App/FeaturePreview/FeaturePreviewContext' +import { DatabaseDiffPanel } from '@/components/interfaces/BranchManagement/DatabaseDiffPanel' +import { EdgeFunctionsDiffPanel } from '@/components/interfaces/BranchManagement/EdgeFunctionsDiffPanel' +import { OutOfDateNotice } from '@/components/interfaces/BranchManagement/OutOfDateNotice' +import { ReviewWithAI } from '@/components/interfaces/BranchManagement/ReviewWithAI' +import { WorkflowLogsCard } from '@/components/interfaces/BranchManagement/WorkflowLogsCard' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { ProjectLayoutWithAuth } from '@/components/layouts/ProjectLayout' +import { ScaffoldContainer } from '@/components/layouts/Scaffold' +import ProductEmptyState from '@/components/to-be-cleaned/ProductEmptyState' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import { useBranchDeleteMutation } from '@/data/branches/branch-delete-mutation' +import { useBranchMergeMutation } from '@/data/branches/branch-merge-mutation' +import { useBranchPushMutation } from '@/data/branches/branch-push-mutation' +import { useBranchUpdateMutation } from '@/data/branches/branch-update-mutation' +import { useBranchesQuery } from '@/data/branches/branches-query' +import { useProjectDetailQuery } from '@/data/projects/project-detail-query' +import { useSendEventMutation } from '@/data/telemetry/send-event-mutation' +import { useBranchMergeDiff } from '@/hooks/branches/useBranchMergeDiff' +import { useWorkflowManagement } from '@/hooks/branches/useWorkflowManagement' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import type { NextPageWithLayout } from '@/types' + const MergePage: NextPageWithLayout = () => { const router = useRouter() const { ref, workflow_run_id: currentWorkflowRunId } = useParams() diff --git a/apps/studio/pages/project/[ref]/observability/[id].tsx b/apps/studio/pages/project/[ref]/observability/[id].tsx index 62143a5088..96baff8ae9 100644 --- a/apps/studio/pages/project/[ref]/observability/[id].tsx +++ b/apps/studio/pages/project/[ref]/observability/[id].tsx @@ -1,8 +1,8 @@ -import ReportPadding from 'components/interfaces/Reports/ReportPadding' -import Reports from 'components/interfaces/Reports/Reports' -import DefaultLayout from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import type { NextPageWithLayout } from 'types' +import ReportPadding from '@/components/interfaces/Reports/ReportPadding' +import Reports from '@/components/interfaces/Reports/Reports' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import type { NextPageWithLayout } from '@/types' const PageLayout: NextPageWithLayout = () => (
diff --git a/apps/studio/pages/project/[ref]/observability/api-overview.tsx b/apps/studio/pages/project/[ref]/observability/api-overview.tsx index 2cbe512b9c..f50b4394f1 100644 --- a/apps/studio/pages/project/[ref]/observability/api-overview.tsx +++ b/apps/studio/pages/project/[ref]/observability/api-overview.tsx @@ -1,26 +1,27 @@ -import ReportFilterBar from 'components/interfaces/Reports/ReportFilterBar' -import ReportHeader from 'components/interfaces/Reports/ReportHeader' -import ReportPadding from 'components/interfaces/Reports/ReportPadding' -import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav' -import ReportWidget from 'components/interfaces/Reports/ReportWidget' -import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' +import { useCallback } from 'react' + import { ErrorCountsChartRenderer, NetworkTrafficRenderer, + RequestsByCountryMapRenderer, ResponseSpeedChartRenderer, TopApiRoutesRenderer, - RequestsByCountryMapRenderer, TotalRequestsChartRenderer, -} from 'components/interfaces/Reports/renderers/ApiRenderers' -import { DatePickerValue } from 'components/interfaces/Settings/Logs/Logs.DatePickers' -import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' -import DefaultLayout from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import { useApiReport } from 'data/reports/api-report-query' -import { useReportDateRange } from 'hooks/misc/useReportDateRange' -import { useCallback } from 'react' -import type { NextPageWithLayout } from 'types' -import { ObservabilityLink } from 'components/ui/ObservabilityLink' +} from '@/components/interfaces/Reports/renderers/ApiRenderers' +import ReportFilterBar from '@/components/interfaces/Reports/ReportFilterBar' +import ReportHeader from '@/components/interfaces/Reports/ReportHeader' +import ReportPadding from '@/components/interfaces/Reports/ReportPadding' +import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' +import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' +import ReportWidget from '@/components/interfaces/Reports/ReportWidget' +import { DatePickerValue } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' +import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import { ObservabilityLink } from '@/components/ui/ObservabilityLink' +import { useApiReport } from '@/data/reports/api-report-query' +import { useReportDateRange } from '@/hooks/misc/useReportDateRange' +import type { NextPageWithLayout } from '@/types' export const ApiReport: NextPageWithLayout = () => { const report = useApiReport() diff --git a/apps/studio/pages/project/[ref]/observability/auth.tsx b/apps/studio/pages/project/[ref]/observability/auth.tsx index 798aa92c80..a739e03b07 100644 --- a/apps/studio/pages/project/[ref]/observability/auth.tsx +++ b/apps/studio/pages/project/[ref]/observability/auth.tsx @@ -2,43 +2,42 @@ import { useQueryClient } from '@tanstack/react-query' import { useParams } from 'common' import dayjs from 'dayjs' import { ArrowRight, LogsIcon, RefreshCw } from 'lucide-react' +import { useRouter } from 'next/router' +import { parseAsJson, useQueryState } from 'nuqs' import { useState } from 'react' -import ReportHeader from 'components/interfaces/Reports/ReportHeader' -import ReportPadding from 'components/interfaces/Reports/ReportPadding' -import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav' -import { ReportChartV2 } from 'components/interfaces/Reports/v2/ReportChartV2' -import { ReportSectionHeader } from 'components/interfaces/Reports/v2/ReportSectionHeader' -import { LogsDatePicker } from 'components/interfaces/Settings/Logs/Logs.DatePickers' -import DefaultLayout from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import { ButtonTooltip } from 'components/ui/ButtonTooltip' - -import ReportFilterBar from 'components/interfaces/Reports/ReportFilterBar' -import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' -import { SharedAPIReport } from 'components/interfaces/Reports/SharedAPIReport/SharedAPIReport' -import { useSharedAPIReport } from 'components/interfaces/Reports/SharedAPIReport/SharedAPIReport.constants' +import ReportFilterBar from '@/components/interfaces/Reports/ReportFilterBar' +import ReportHeader from '@/components/interfaces/Reports/ReportHeader' +import ReportPadding from '@/components/interfaces/Reports/ReportPadding' +import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' +import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' +import { SharedAPIReport } from '@/components/interfaces/Reports/SharedAPIReport/SharedAPIReport' +import { useSharedAPIReport } from '@/components/interfaces/Reports/SharedAPIReport/SharedAPIReport.constants' +import { ReportChartV2 } from '@/components/interfaces/Reports/v2/ReportChartV2' +import { ReportSectionHeader } from '@/components/interfaces/Reports/v2/ReportSectionHeader' import { - ReportsNumericFilter, numericFilterSchema, -} from 'components/interfaces/Reports/v2/ReportsNumericFilter' + ReportsNumericFilter, +} from '@/components/interfaces/Reports/v2/ReportsNumericFilter' import { ReportsSelectFilter, selectFilterSchema, -} from 'components/interfaces/Reports/v2/ReportsSelectFilter' -import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' -import type { ChartHighlightAction } from 'components/ui/Charts/ChartHighlightActions' -import { ReportSettings } from 'components/ui/Charts/ReportSettings' +} from '@/components/interfaces/Reports/v2/ReportsSelectFilter' +import { LogsDatePicker } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' +import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import type { ChartHighlightAction } from '@/components/ui/Charts/ChartHighlightActions' +import { ReportSettings } from '@/components/ui/Charts/ReportSettings' +import { ObservabilityLink } from '@/components/ui/ObservabilityLink' import { createErrorsReportConfig, createLatencyReportConfig, createUsageReportConfig, -} from 'data/reports/v2/auth.config' -import { useReportDateRange, useRefreshHandler } from 'hooks/misc/useReportDateRange' -import { useRouter } from 'next/router' -import { parseAsJson, useQueryState } from 'nuqs' -import type { NextPageWithLayout } from 'types' -import { ObservabilityLink } from 'components/ui/ObservabilityLink' +} from '@/data/reports/v2/auth.config' +import { useRefreshHandler, useReportDateRange } from '@/hooks/misc/useReportDateRange' +import type { NextPageWithLayout } from '@/types' const AuthReport: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/observability/database.tsx b/apps/studio/pages/project/[ref]/observability/database.tsx index cf515da20c..beb017e32e 100644 --- a/apps/studio/pages/project/[ref]/observability/database.tsx +++ b/apps/studio/pages/project/[ref]/observability/database.tsx @@ -1,51 +1,52 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useQueryClient } from '@tanstack/react-query' import { useParams } from 'common' -import ReportHeader from 'components/interfaces/Reports/ReportHeader' -import ReportPadding from 'components/interfaces/Reports/ReportPadding' -import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' -import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav' -import ReportWidget from 'components/interfaces/Reports/ReportWidget' -import { ReportChartUpsell } from 'components/interfaces/Reports/v2/ReportChartUpsell' -import { POOLING_OPTIMIZATIONS } from 'components/interfaces/Settings/Database/ConnectionPooling/ConnectionPooling.constants' -import DiskSizeConfigurationModal from 'components/interfaces/Settings/Database/DiskSizeConfigurationModal' -import { LogsDatePicker } from 'components/interfaces/Settings/Logs/Logs.DatePickers' -import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' -import DefaultLayout from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import Table from 'components/to-be-cleaned/Table' -import { ButtonTooltip } from 'components/ui/ButtonTooltip' -import ChartHandler from 'components/ui/Charts/ChartHandler' -import type { MultiAttribute } from 'components/ui/Charts/ComposedChart.utils' -import { LazyComposedChartHandler } from 'components/ui/Charts/ComposedChartHandler' -import { ReportSettings } from 'components/ui/Charts/ReportSettings' -import { ObservabilityLink } from 'components/ui/ObservabilityLink' -import Panel from 'components/ui/Panel' -import { analyticsKeys } from 'data/analytics/keys' -import { useDiskAttributesQuery } from 'data/config/disk-attributes-query' -import { useProjectDiskResizeMutation } from 'data/config/project-disk-resize-mutation' -import { useDatabaseSizeQuery } from 'data/database/database-size-query' -import { useMaxConnectionsQuery } from 'data/database/max-connections-query' -import { usePgbouncerConfigQuery } from 'data/database/pgbouncer-config-query' -import { getReportAttributesV2 } from 'data/reports/database-charts' -import { useDatabaseReport } from 'data/reports/database-report-query' -import { useProjectAddonsQuery } from 'data/subscriptions/project-addons-query' import dayjs from 'dayjs' -import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useRefreshHandler, useReportDateRange } from 'hooks/misc/useReportDateRange' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { DOCS_URL } from 'lib/constants' -import { formatBytes } from 'lib/helpers' import { ArrowRight, ExternalLink, RefreshCw } from 'lucide-react' import Link from 'next/link' import { useEffect, useRef, useState } from 'react' import { toast } from 'sonner' -import { useDatabaseSelectorStateSnapshot } from 'state/database-selector' -import type { NextPageWithLayout } from 'types' import { Alert_Shadcn_, AlertDescription_Shadcn_, Button } from 'ui' +import ReportHeader from '@/components/interfaces/Reports/ReportHeader' +import ReportPadding from '@/components/interfaces/Reports/ReportPadding' +import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' +import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' +import ReportWidget from '@/components/interfaces/Reports/ReportWidget' +import { ReportChartUpsell } from '@/components/interfaces/Reports/v2/ReportChartUpsell' +import { POOLING_OPTIMIZATIONS } from '@/components/interfaces/Settings/Database/ConnectionPooling/ConnectionPooling.constants' +import DiskSizeConfigurationModal from '@/components/interfaces/Settings/Database/DiskSizeConfigurationModal' +import { LogsDatePicker } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' +import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import Table from '@/components/to-be-cleaned/Table' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import ChartHandler from '@/components/ui/Charts/ChartHandler' +import type { MultiAttribute } from '@/components/ui/Charts/ComposedChart.utils' +import { LazyComposedChartHandler } from '@/components/ui/Charts/ComposedChartHandler' +import { ReportSettings } from '@/components/ui/Charts/ReportSettings' +import { ObservabilityLink } from '@/components/ui/ObservabilityLink' +import Panel from '@/components/ui/Panel' +import { analyticsKeys } from '@/data/analytics/keys' +import { useDiskAttributesQuery } from '@/data/config/disk-attributes-query' +import { useProjectDiskResizeMutation } from '@/data/config/project-disk-resize-mutation' +import { useDatabaseSizeQuery } from '@/data/database/database-size-query' +import { useMaxConnectionsQuery } from '@/data/database/max-connections-query' +import { usePgbouncerConfigQuery } from '@/data/database/pgbouncer-config-query' +import { getReportAttributesV2 } from '@/data/reports/database-charts' +import { useDatabaseReport } from '@/data/reports/database-report-query' +import { useProjectAddonsQuery } from '@/data/subscriptions/project-addons-query' +import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useRefreshHandler, useReportDateRange } from '@/hooks/misc/useReportDateRange' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { DOCS_URL } from '@/lib/constants' +import { formatBytes } from '@/lib/helpers' +import { useDatabaseSelectorStateSnapshot } from '@/state/database-selector' +import type { NextPageWithLayout } from '@/types' + const DatabaseReport: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/observability/edge-functions.tsx b/apps/studio/pages/project/[ref]/observability/edge-functions.tsx index b38f8fadf5..199253e96f 100644 --- a/apps/studio/pages/project/[ref]/observability/edge-functions.tsx +++ b/apps/studio/pages/project/[ref]/observability/edge-functions.tsx @@ -2,39 +2,38 @@ import { useQueryClient } from '@tanstack/react-query' import { useParams } from 'common' import dayjs from 'dayjs' import { ArrowRight, RefreshCw } from 'lucide-react' +import { parseAsJson, useQueryState } from 'nuqs' import { useMemo, useState } from 'react' -import ReportHeader from 'components/interfaces/Reports/ReportHeader' -import ReportPadding from 'components/interfaces/Reports/ReportPadding' -import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav' -import { ReportChartV2 } from 'components/interfaces/Reports/v2/ReportChartV2' +import ReportHeader from '@/components/interfaces/Reports/ReportHeader' +import ReportPadding from '@/components/interfaces/Reports/ReportPadding' +import { + EDGE_FUNCTION_REGIONS, + REPORT_DATERANGE_HELPER_LABELS, +} from '@/components/interfaces/Reports/Reports.constants' +import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' +import { ReportChartV2 } from '@/components/interfaces/Reports/v2/ReportChartV2' import { - ReportsNumericFilter, numericFilterSchema, -} from 'components/interfaces/Reports/v2/ReportsNumericFilter' + ReportsNumericFilter, +} from '@/components/interfaces/Reports/v2/ReportsNumericFilter' import { ReportsSelectFilter, selectFilterSchema, -} from 'components/interfaces/Reports/v2/ReportsSelectFilter' -import { LogsDatePicker } from 'components/interfaces/Settings/Logs/Logs.DatePickers' -import DefaultLayout from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import { ButtonTooltip } from 'components/ui/ButtonTooltip' -import { useChartHoverState } from 'components/ui/Charts/useChartHoverState' - -import { useEdgeFunctionsQuery } from 'data/edge-functions/edge-functions-query' -import { edgeFunctionReports } from 'data/reports/v2/edge-functions.config' - -import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' -import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' -import { useReportDateRange, useRefreshHandler } from 'hooks/misc/useReportDateRange' - -import { EDGE_FUNCTION_REGIONS } from 'components/interfaces/Reports/Reports.constants' -import { ReportSettings } from 'components/ui/Charts/ReportSettings' -import { BASE_PATH } from 'lib/constants' -import { parseAsJson, useQueryState } from 'nuqs' -import type { NextPageWithLayout } from 'types' -import { ObservabilityLink } from 'components/ui/ObservabilityLink' +} from '@/components/interfaces/Reports/v2/ReportsSelectFilter' +import { LogsDatePicker } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' +import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import { ReportSettings } from '@/components/ui/Charts/ReportSettings' +import { useChartHoverState } from '@/components/ui/Charts/useChartHoverState' +import { ObservabilityLink } from '@/components/ui/ObservabilityLink' +import { useEdgeFunctionsQuery } from '@/data/edge-functions/edge-functions-query' +import { edgeFunctionReports } from '@/data/reports/v2/edge-functions.config' +import { useRefreshHandler, useReportDateRange } from '@/hooks/misc/useReportDateRange' +import { BASE_PATH } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' const EdgeFunctionsReportV2: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/observability/index.tsx b/apps/studio/pages/project/[ref]/observability/index.tsx index dca508d838..403b40d927 100644 --- a/apps/studio/pages/project/[ref]/observability/index.tsx +++ b/apps/studio/pages/project/[ref]/observability/index.tsx @@ -1,19 +1,20 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useFeatureFlags, useFlag, useParams } from 'common' -import { ObservabilityOverview } from 'components/interfaces/Observability/ObservabilityOverview' -import { CreateReportModal } from 'components/interfaces/Reports/CreateReportModal' -import DefaultLayout from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import ProductEmptyState from 'components/to-be-cleaned/ProductEmptyState' -import { useContentQuery } from 'data/content/content-query' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useProfile } from 'lib/profile' import { useRouter } from 'next/router' import { parseAsBoolean, useQueryState } from 'nuqs' import { useEffect, useState } from 'react' -import type { NextPageWithLayout } from 'types' import { LogoLoader } from 'ui' +import { ObservabilityOverview } from '@/components/interfaces/Observability/ObservabilityOverview' +import { CreateReportModal } from '@/components/interfaces/Reports/CreateReportModal' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import ProductEmptyState from '@/components/to-be-cleaned/ProductEmptyState' +import { useContentQuery } from '@/data/content/content-query' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { useProfile } from '@/lib/profile' +import type { NextPageWithLayout } from '@/types' + export const UserReportPage: NextPageWithLayout = () => { const router = useRouter() const { ref } = useParams() diff --git a/apps/studio/pages/project/[ref]/observability/postgrest.tsx b/apps/studio/pages/project/[ref]/observability/postgrest.tsx index cfa9fcf678..d79ca05143 100644 --- a/apps/studio/pages/project/[ref]/observability/postgrest.tsx +++ b/apps/studio/pages/project/[ref]/observability/postgrest.tsx @@ -3,26 +3,25 @@ import dayjs from 'dayjs' import { ArrowRight, RefreshCw } from 'lucide-react' import { useEffect, useRef } from 'react' -import ReportHeader from 'components/interfaces/Reports/ReportHeader' -import ReportPadding from 'components/interfaces/Reports/ReportPadding' -import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' -import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav' +import ReportFilterBar from '@/components/interfaces/Reports/ReportFilterBar' +import ReportHeader from '@/components/interfaces/Reports/ReportHeader' +import ReportPadding from '@/components/interfaces/Reports/ReportPadding' +import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' +import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' +import { SharedAPIReport } from '@/components/interfaces/Reports/SharedAPIReport/SharedAPIReport' +import { useSharedAPIReport } from '@/components/interfaces/Reports/SharedAPIReport/SharedAPIReport.constants' import { DatePickerValue, LogsDatePicker, -} from 'components/interfaces/Settings/Logs/Logs.DatePickers' -import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' -import DefaultLayout from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import { ButtonTooltip } from 'components/ui/ButtonTooltip' -import { useReportDateRange, useRefreshHandler } from 'hooks/misc/useReportDateRange' -import { useDatabaseSelectorStateSnapshot } from 'state/database-selector' - -import ReportFilterBar from 'components/interfaces/Reports/ReportFilterBar' -import { SharedAPIReport } from 'components/interfaces/Reports/SharedAPIReport/SharedAPIReport' -import { useSharedAPIReport } from 'components/interfaces/Reports/SharedAPIReport/SharedAPIReport.constants' -import type { NextPageWithLayout } from 'types' -import { ObservabilityLink } from 'components/ui/ObservabilityLink' +} from '@/components/interfaces/Settings/Logs/Logs.DatePickers' +import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import { ObservabilityLink } from '@/components/ui/ObservabilityLink' +import { useRefreshHandler, useReportDateRange } from '@/hooks/misc/useReportDateRange' +import { useDatabaseSelectorStateSnapshot } from '@/state/database-selector' +import type { NextPageWithLayout } from '@/types' const PostgRESTReport: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/observability/query-insights.tsx b/apps/studio/pages/project/[ref]/observability/query-insights.tsx index f64cfcea6b..bf22ec0a84 100644 --- a/apps/studio/pages/project/[ref]/observability/query-insights.tsx +++ b/apps/studio/pages/project/[ref]/observability/query-insights.tsx @@ -1,12 +1,3 @@ -import { QueryInsights } from 'components/interfaces/QueryInsights/QueryInsights' -import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import { DatabaseSelector } from 'components/ui/DatabaseSelector' -import { DocsButton } from 'components/ui/DocsButton' -import { useReportDateRange } from 'hooks/misc/useReportDateRange' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { Select_Shadcn_, SelectContent_Shadcn_, @@ -15,6 +6,16 @@ import { SelectValue_Shadcn_, } from 'ui' +import { QueryInsights } from '@/components/interfaces/QueryInsights/QueryInsights' +import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import { DatabaseSelector } from '@/components/ui/DatabaseSelector' +import { DocsButton } from '@/components/ui/DocsButton' +import { useReportDateRange } from '@/hooks/misc/useReportDateRange' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const PRESETS = [ REPORT_DATERANGE_HELPER_LABELS.LAST_60_MINUTES, REPORT_DATERANGE_HELPER_LABELS.LAST_3_HOURS, diff --git a/apps/studio/pages/project/[ref]/observability/query-performance.tsx b/apps/studio/pages/project/[ref]/observability/query-performance.tsx index e50407d27e..4f7ecbb281 100644 --- a/apps/studio/pages/project/[ref]/observability/query-performance.tsx +++ b/apps/studio/pages/project/[ref]/observability/query-performance.tsx @@ -1,23 +1,24 @@ import { useParams } from 'common' -import { useIndexAdvisorStatus } from 'components/interfaces/QueryPerformance/hooks/useIsIndexAdvisorStatus' -import { useQueryPerformanceSort } from 'components/interfaces/QueryPerformance/hooks/useQueryPerformanceSort' -import { QueryPerformance } from 'components/interfaces/QueryPerformance/QueryPerformance' -import { type QuerySource } from 'components/interfaces/QueryPerformance/QueryPerformance.types' -import { useQueryPerformanceInfiniteQuery } from 'components/interfaces/QueryPerformance/useQueryPerformanceQuery' -import { PRESET_CONFIG } from 'components/interfaces/Reports/Reports.constants' -import { Presets } from 'components/interfaces/Reports/Reports.types' -import { queriesFactory } from 'components/interfaces/Reports/Reports.utils' -import { NumericFilter } from 'components/interfaces/Reports/v2/ReportsNumericFilter' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import { DatabaseSelector } from 'components/ui/DatabaseSelector' -import { DocsButton } from 'components/ui/DocsButton' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { DOCS_URL } from 'lib/constants' import { parseAsArrayOf, parseAsInteger, parseAsJson, parseAsString, useQueryStates } from 'nuqs' -import type { NextPageWithLayout } from 'types' import { Admonition } from 'ui-patterns' +import { useIndexAdvisorStatus } from '@/components/interfaces/QueryPerformance/hooks/useIsIndexAdvisorStatus' +import { useQueryPerformanceSort } from '@/components/interfaces/QueryPerformance/hooks/useQueryPerformanceSort' +import { QueryPerformance } from '@/components/interfaces/QueryPerformance/QueryPerformance' +import { type QuerySource } from '@/components/interfaces/QueryPerformance/QueryPerformance.types' +import { useQueryPerformanceInfiniteQuery } from '@/components/interfaces/QueryPerformance/useQueryPerformanceQuery' +import { PRESET_CONFIG } from '@/components/interfaces/Reports/Reports.constants' +import { Presets } from '@/components/interfaces/Reports/Reports.types' +import { queriesFactory } from '@/components/interfaces/Reports/Reports.utils' +import { NumericFilter } from '@/components/interfaces/Reports/v2/ReportsNumericFilter' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import { DatabaseSelector } from '@/components/ui/DatabaseSelector' +import { DocsButton } from '@/components/ui/DocsButton' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const QueryPerformanceReport: NextPageWithLayout = () => { const { ref } = useParams() const { data: project, isLoading: isLoadingProject } = useSelectedProjectQuery() diff --git a/apps/studio/pages/project/[ref]/observability/realtime.tsx b/apps/studio/pages/project/[ref]/observability/realtime.tsx index 390c9d48bd..65938c1dcc 100644 --- a/apps/studio/pages/project/[ref]/observability/realtime.tsx +++ b/apps/studio/pages/project/[ref]/observability/realtime.tsx @@ -1,26 +1,27 @@ import { useQueryClient } from '@tanstack/react-query' import { useFlag, useParams } from 'common' -import ReportFilterBar from 'components/interfaces/Reports/ReportFilterBar' -import ReportHeader from 'components/interfaces/Reports/ReportHeader' -import ReportPadding from 'components/interfaces/Reports/ReportPadding' -import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' -import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav' -import { SharedAPIReport } from 'components/interfaces/Reports/SharedAPIReport/SharedAPIReport' -import { useSharedAPIReport } from 'components/interfaces/Reports/SharedAPIReport/SharedAPIReport.constants' -import { ReportChartV2 } from 'components/interfaces/Reports/v2/ReportChartV2' -import { LogsDatePicker } from 'components/interfaces/Settings/Logs/Logs.DatePickers' -import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' -import DefaultLayout from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import { ButtonTooltip } from 'components/ui/ButtonTooltip' -import { ObservabilityLink } from 'components/ui/ObservabilityLink' -import { realtimeReports } from 'data/reports/v2/realtime.config' import dayjs from 'dayjs' -import { useRefreshHandler, useReportDateRange } from 'hooks/misc/useReportDateRange' import { ArrowRight, RefreshCw } from 'lucide-react' import { useEffect, useMemo, useRef, useState } from 'react' -import { useDatabaseSelectorStateSnapshot } from 'state/database-selector' -import type { NextPageWithLayout } from 'types' + +import ReportFilterBar from '@/components/interfaces/Reports/ReportFilterBar' +import ReportHeader from '@/components/interfaces/Reports/ReportHeader' +import ReportPadding from '@/components/interfaces/Reports/ReportPadding' +import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' +import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' +import { SharedAPIReport } from '@/components/interfaces/Reports/SharedAPIReport/SharedAPIReport' +import { useSharedAPIReport } from '@/components/interfaces/Reports/SharedAPIReport/SharedAPIReport.constants' +import { ReportChartV2 } from '@/components/interfaces/Reports/v2/ReportChartV2' +import { LogsDatePicker } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' +import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import { ObservabilityLink } from '@/components/ui/ObservabilityLink' +import { realtimeReports } from '@/data/reports/v2/realtime.config' +import { useRefreshHandler, useReportDateRange } from '@/hooks/misc/useReportDateRange' +import { useDatabaseSelectorStateSnapshot } from '@/state/database-selector' +import type { NextPageWithLayout } from '@/types' const RealtimeReport: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/observability/storage.tsx b/apps/studio/pages/project/[ref]/observability/storage.tsx index 8d10d6a79f..4e0ea74cbc 100644 --- a/apps/studio/pages/project/[ref]/observability/storage.tsx +++ b/apps/studio/pages/project/[ref]/observability/storage.tsx @@ -7,30 +7,30 @@ import { ResponseSpeedChartRenderer, TopApiRoutesRenderer, TotalRequestsChartRenderer, -} from 'components/interfaces/Reports/renderers/ApiRenderers' +} from '@/components/interfaces/Reports/renderers/ApiRenderers' import { CacheHitRateChartRenderer, TopCacheMissesRenderer, -} from 'components/interfaces/Reports/renderers/StorageRenderers' -import ReportFilterBar from 'components/interfaces/Reports/ReportFilterBar' -import ReportHeader from 'components/interfaces/Reports/ReportHeader' -import ReportPadding from 'components/interfaces/Reports/ReportPadding' -import { REPORT_DATERANGE_HELPER_LABELS } from 'components/interfaces/Reports/Reports.constants' -import ReportStickyNav from 'components/interfaces/Reports/ReportStickyNav' -import ReportWidget from 'components/interfaces/Reports/ReportWidget' +} from '@/components/interfaces/Reports/renderers/StorageRenderers' +import ReportFilterBar from '@/components/interfaces/Reports/ReportFilterBar' +import ReportHeader from '@/components/interfaces/Reports/ReportHeader' +import ReportPadding from '@/components/interfaces/Reports/ReportPadding' +import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' +import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' +import ReportWidget from '@/components/interfaces/Reports/ReportWidget' import { DatePickerValue, LogsDatePicker, -} from 'components/interfaces/Settings/Logs/Logs.DatePickers' -import UpgradePrompt from 'components/interfaces/Settings/Logs/UpgradePrompt' -import DefaultLayout from 'components/layouts/DefaultLayout' -import ObservabilityLayout from 'components/layouts/ObservabilityLayout/ObservabilityLayout' -import { ButtonTooltip } from 'components/ui/ButtonTooltip' -import { useStorageReport } from 'data/reports/storage-report-query' -import { useReportDateRange, useRefreshHandler } from 'hooks/misc/useReportDateRange' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' -import { ObservabilityLink } from 'components/ui/ObservabilityLink' +} from '@/components/interfaces/Settings/Logs/Logs.DatePickers' +import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' +import { ButtonTooltip } from '@/components/ui/ButtonTooltip' +import { ObservabilityLink } from '@/components/ui/ObservabilityLink' +import { useStorageReport } from '@/data/reports/storage-report-query' +import { useRefreshHandler, useReportDateRange } from '@/hooks/misc/useReportDateRange' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' export const StorageReport: NextPageWithLayout = () => { const report = useStorageReport() diff --git a/apps/studio/pages/project/[ref]/realtime/inspector.tsx b/apps/studio/pages/project/[ref]/realtime/inspector.tsx index 5f8b7314cf..a21ef91ebc 100644 --- a/apps/studio/pages/project/[ref]/realtime/inspector.tsx +++ b/apps/studio/pages/project/[ref]/realtime/inspector.tsx @@ -1,8 +1,7 @@ -import type { NextPageWithLayout } from 'types' - -import { RealtimeInspector } from 'components/interfaces/Realtime/Inspector' -import DefaultLayout from 'components/layouts/DefaultLayout' -import RealtimeLayout from 'components/layouts/RealtimeLayout/RealtimeLayout' +import { RealtimeInspector } from '@/components/interfaces/Realtime/Inspector' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import RealtimeLayout from '@/components/layouts/RealtimeLayout/RealtimeLayout' +import type { NextPageWithLayout } from '@/types' export const InspectorPage: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/project/[ref]/realtime/policies.tsx b/apps/studio/pages/project/[ref]/realtime/policies.tsx index 2b0730f73b..fcd4c7555e 100644 --- a/apps/studio/pages/project/[ref]/realtime/policies.tsx +++ b/apps/studio/pages/project/[ref]/realtime/policies.tsx @@ -1,9 +1,3 @@ -import { RealtimePolicies } from 'components/interfaces/Realtime/Policies' -import DefaultLayout from 'components/layouts/DefaultLayout' -import RealtimeLayout from 'components/layouts/RealtimeLayout/RealtimeLayout' -import { DocsButton } from 'components/ui/DocsButton' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -15,6 +9,13 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { RealtimePolicies } from '@/components/interfaces/Realtime/Policies' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import RealtimeLayout from '@/components/layouts/RealtimeLayout/RealtimeLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const RealtimePoliciesPage: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/project/[ref]/realtime/settings.tsx b/apps/studio/pages/project/[ref]/realtime/settings.tsx index 6994c2dd1a..beba67221f 100644 --- a/apps/studio/pages/project/[ref]/realtime/settings.tsx +++ b/apps/studio/pages/project/[ref]/realtime/settings.tsx @@ -1,9 +1,3 @@ -import DefaultLayout from 'components/layouts/DefaultLayout' -import RealtimeLayout from 'components/layouts/RealtimeLayout/RealtimeLayout' -import { DocsButton } from 'components/ui/DocsButton' -import { DOCS_URL } from 'lib/constants' -import type { NextPageWithLayout } from 'types' -import { RealtimeSettings } from 'components/interfaces/Realtime/RealtimeSettings' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -15,6 +9,13 @@ import { } from 'ui-patterns/PageHeader' import { PageSection, PageSectionContent } from 'ui-patterns/PageSection' +import { RealtimeSettings } from '@/components/interfaces/Realtime/RealtimeSettings' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import RealtimeLayout from '@/components/layouts/RealtimeLayout/RealtimeLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const RealtimeSettingsPage: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/project/[ref]/settings/addons.tsx b/apps/studio/pages/project/[ref]/settings/addons.tsx index 4f81a3fd83..8b729ac0b0 100644 --- a/apps/studio/pages/project/[ref]/settings/addons.tsx +++ b/apps/studio/pages/project/[ref]/settings/addons.tsx @@ -1,7 +1,3 @@ -import { Addons } from 'components/interfaces/Settings/Addons/Addons' -import DefaultLayout from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import type { NextPageWithLayout } from 'types' import { PageHeader, PageHeaderDescription, @@ -10,6 +6,11 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { Addons } from '@/components/interfaces/Settings/Addons/Addons' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import type { NextPageWithLayout } from '@/types' + const ProjectAddons: NextPageWithLayout = () => { return ( <> diff --git a/apps/studio/pages/project/[ref]/settings/api-keys/index.tsx b/apps/studio/pages/project/[ref]/settings/api-keys/index.tsx index 1f7799e2e5..cd74477858 100644 --- a/apps/studio/pages/project/[ref]/settings/api-keys/index.tsx +++ b/apps/studio/pages/project/[ref]/settings/api-keys/index.tsx @@ -1,20 +1,21 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { useParams } from 'common' +import { useMemo } from 'react' +import { Separator } from 'ui' + import { ApiKeysCreateCallout, ApiKeysFeedbackBanner, -} from 'components/interfaces/APIKeys/ApiKeysIllustrations' -import { PublishableAPIKeys } from 'components/interfaces/APIKeys/PublishableAPIKeys' -import { SecretAPIKeys } from 'components/interfaces/APIKeys/SecretAPIKeys' -import ApiKeysLayout from 'components/layouts/APIKeys/APIKeysLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import { DisableInteraction } from 'components/ui/DisableInteraction' -import { useAPIKeysQuery } from 'data/api-keys/api-keys-query' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { useMemo } from 'react' -import type { NextPageWithLayout } from 'types' -import { Separator } from 'ui' +} from '@/components/interfaces/APIKeys/ApiKeysIllustrations' +import { PublishableAPIKeys } from '@/components/interfaces/APIKeys/PublishableAPIKeys' +import { SecretAPIKeys } from '@/components/interfaces/APIKeys/SecretAPIKeys' +import ApiKeysLayout from '@/components/layouts/APIKeys/APIKeysLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import { DisableInteraction } from '@/components/ui/DisableInteraction' +import { useAPIKeysQuery } from '@/data/api-keys/api-keys-query' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import type { NextPageWithLayout } from '@/types' const ApiKeysNewPage: NextPageWithLayout = () => { const { ref: projectRef } = useParams() diff --git a/apps/studio/pages/project/[ref]/settings/api-keys/legacy.tsx b/apps/studio/pages/project/[ref]/settings/api-keys/legacy.tsx index 799c927a7e..f120c4ae33 100644 --- a/apps/studio/pages/project/[ref]/settings/api-keys/legacy.tsx +++ b/apps/studio/pages/project/[ref]/settings/api-keys/legacy.tsx @@ -1,10 +1,10 @@ -import ApiKeysLayout from 'components/layouts/APIKeys/APIKeysLayout' -import DefaultLayout from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import { DisplayApiSettings } from 'components/ui/ProjectSettings/DisplayApiSettings' -import { ToggleLegacyApiKeysPanel } from 'components/ui/ProjectSettings/ToggleLegacyApiKeys' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' +import ApiKeysLayout from '@/components/layouts/APIKeys/APIKeysLayout' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import { DisplayApiSettings } from '@/components/ui/ProjectSettings/DisplayApiSettings' +import { ToggleLegacyApiKeysPanel } from '@/components/ui/ProjectSettings/ToggleLegacyApiKeys' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' const ApiKeysLegacyPage: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/settings/api.tsx b/apps/studio/pages/project/[ref]/settings/api.tsx index 7c9cfd0140..aafbed70ed 100644 --- a/apps/studio/pages/project/[ref]/settings/api.tsx +++ b/apps/studio/pages/project/[ref]/settings/api.tsx @@ -1,8 +1,8 @@ import { useParams } from 'common' -import { IS_PLATFORM } from 'lib/constants' import { useRouter } from 'next/router' import { useEffect } from 'react' +import { IS_PLATFORM } from '@/lib/constants' import type { NextPageWithLayout } from '@/types' const ApiSettings: NextPageWithLayout = () => { diff --git a/apps/studio/pages/project/[ref]/settings/billing/usage.tsx b/apps/studio/pages/project/[ref]/settings/billing/usage.tsx index 1cf59bc6a0..b0714b5737 100644 --- a/apps/studio/pages/project/[ref]/settings/billing/usage.tsx +++ b/apps/studio/pages/project/[ref]/settings/billing/usage.tsx @@ -1,11 +1,11 @@ +import { useParams } from 'common' import { useRouter } from 'next/router' import { useEffect } from 'react' -import { useParams } from 'common' -import DefaultLayout from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import type { NextPageWithLayout } from 'types' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import type { NextPageWithLayout } from '@/types' const ProjectBillingUsage: NextPageWithLayout = () => { // This component is only used for redirects, as nextjs cant redirect based on hash diff --git a/apps/studio/pages/project/[ref]/settings/compute-and-disk.tsx b/apps/studio/pages/project/[ref]/settings/compute-and-disk.tsx index 44dc0d628e..bc32551347 100644 --- a/apps/studio/pages/project/[ref]/settings/compute-and-disk.tsx +++ b/apps/studio/pages/project/[ref]/settings/compute-and-disk.tsx @@ -1,13 +1,13 @@ -import { DiskManagementForm } from 'components/interfaces/DiskManagement/DiskManagementForm' -import DefaultLayout from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' +import { DiskManagementForm } from '@/components/interfaces/DiskManagement/DiskManagementForm' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' import { ScaffoldContainer, ScaffoldDescription, ScaffoldHeader, ScaffoldTitle, -} from 'components/layouts/Scaffold' -import type { NextPageWithLayout } from 'types' +} from '@/components/layouts/Scaffold' +import type { NextPageWithLayout } from '@/types' const AuthSettings: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/settings/dashboard.tsx b/apps/studio/pages/project/[ref]/settings/dashboard.tsx index 374751f5aa..3903451996 100644 --- a/apps/studio/pages/project/[ref]/settings/dashboard.tsx +++ b/apps/studio/pages/project/[ref]/settings/dashboard.tsx @@ -1,10 +1,6 @@ import { useFlag } from 'common' -import DefaultLayout from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import { IS_PLATFORM } from 'lib/constants' import { useRouter } from 'next/router' import { useEffect } from 'react' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -15,6 +11,10 @@ import { } from 'ui-patterns/PageHeader' import { DashboardPreferences } from '@/components/interfaces/Settings/General/DashboardPreferences' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import { IS_PLATFORM } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' const Preferences: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/settings/general.tsx b/apps/studio/pages/project/[ref]/settings/general.tsx index 31306bbe40..a61ef128e5 100644 --- a/apps/studio/pages/project/[ref]/settings/general.tsx +++ b/apps/studio/pages/project/[ref]/settings/general.tsx @@ -1,19 +1,6 @@ import { IS_PLATFORM } from 'common' -import { subscriptionHasHipaaAddon } from 'components/interfaces/Billing/Subscription/Subscription.utils' -import { ComplianceConfig } from 'components/interfaces/Settings/General/ComplianceConfig/ProjectComplianceMode' -import { CustomDomainConfig } from 'components/interfaces/Settings/General/CustomDomainConfig/CustomDomainConfig' -import { DeleteProjectPanel } from 'components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectPanel' -import { General } from 'components/interfaces/Settings/General/General' -import { TransferProjectPanel } from 'components/interfaces/Settings/General/TransferProjectPanel/TransferProjectPanel' -import DefaultLayout from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' import { useRouter } from 'next/router' import { useEffect } from 'react' -import type { NextPageWithLayout } from 'types' import { PageContainer } from 'ui-patterns/PageContainer' import { PageHeader, @@ -23,7 +10,20 @@ import { PageHeaderTitle, } from 'ui-patterns/PageHeader' +import { subscriptionHasHipaaAddon } from '@/components/interfaces/Billing/Subscription/Subscription.utils' +import { ComplianceConfig } from '@/components/interfaces/Settings/General/ComplianceConfig/ProjectComplianceMode' +import { CustomDomainConfig } from '@/components/interfaces/Settings/General/CustomDomainConfig/CustomDomainConfig' +import { DeleteProjectPanel } from '@/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectPanel' +import { General } from '@/components/interfaces/Settings/General/General' import { Project } from '@/components/interfaces/Settings/General/Project' +import { TransferProjectPanel } from '@/components/interfaces/Settings/General/TransferProjectPanel/TransferProjectPanel' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import { useOrgSubscriptionQuery } from '@/data/subscriptions/org-subscription-query' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { useSelectedOrganizationQuery } from '@/hooks/misc/useSelectedOrganization' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import type { NextPageWithLayout } from '@/types' const ProjectSettings: NextPageWithLayout = () => { const { data: project } = useSelectedProjectQuery() diff --git a/apps/studio/pages/project/[ref]/settings/infrastructure.tsx b/apps/studio/pages/project/[ref]/settings/infrastructure.tsx index aa9693585a..775a02425b 100644 --- a/apps/studio/pages/project/[ref]/settings/infrastructure.tsx +++ b/apps/studio/pages/project/[ref]/settings/infrastructure.tsx @@ -1,15 +1,15 @@ -import { InfrastructureActivity } from 'components/interfaces/Settings/Infrastructure/InfrastructureActivity' -import { InfrastructureInfo } from 'components/interfaces/Settings/Infrastructure/InfrastructureInfo' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' +import { InfrastructureActivity } from '@/components/interfaces/Settings/Infrastructure/InfrastructureActivity' +import { InfrastructureInfo } from '@/components/interfaces/Settings/Infrastructure/InfrastructureInfo' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' import { ScaffoldContainer, ScaffoldDescription, ScaffoldDivider, ScaffoldHeader, ScaffoldTitle, -} from 'components/layouts/Scaffold' -import type { NextPageWithLayout } from 'types' +} from '@/components/layouts/Scaffold' +import type { NextPageWithLayout } from '@/types' const ProjectInfrastructure: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/settings/integrations.tsx b/apps/studio/pages/project/[ref]/settings/integrations.tsx index 06e7f8eea8..85fbb8abef 100644 --- a/apps/studio/pages/project/[ref]/settings/integrations.tsx +++ b/apps/studio/pages/project/[ref]/settings/integrations.tsx @@ -1,13 +1,13 @@ -import IntegrationSettings from 'components/interfaces/Settings/Integrations/IntegrationsSettings' -import DefaultLayout from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' +import IntegrationSettings from '@/components/interfaces/Settings/Integrations/IntegrationsSettings' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' import { ScaffoldContainer, ScaffoldDivider, ScaffoldHeader, ScaffoldTitle, -} from 'components/layouts/Scaffold' -import type { NextPageWithLayout } from 'types' +} from '@/components/layouts/Scaffold' +import type { NextPageWithLayout } from '@/types' const ProjectSettingsIntegrations: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/project/[ref]/settings/jwt/index.tsx b/apps/studio/pages/project/[ref]/settings/jwt/index.tsx index 4e9631dba0..724f921766 100644 --- a/apps/studio/pages/project/[ref]/settings/jwt/index.tsx +++ b/apps/studio/pages/project/[ref]/settings/jwt/index.tsx @@ -1,13 +1,14 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' -import { JWTSecretKeysTable } from 'components/interfaces/JwtSecrets/jwt-secret-keys-table' -import DefaultLayout from 'components/layouts/DefaultLayout' -import JWTKeysLayout from 'components/layouts/JWTKeys/JWTKeysLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import NoPermission from 'components/ui/NoPermission' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import type { NextPageWithLayout } from 'types' import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader' +import { JWTSecretKeysTable } from '@/components/interfaces/JwtSecrets/jwt-secret-keys-table' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import JWTKeysLayout from '@/components/layouts/JWTKeys/JWTKeysLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import NoPermission from '@/components/ui/NoPermission' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import type { NextPageWithLayout } from '@/types' + const JWTSigningKeysPage: NextPageWithLayout = () => { const { can: canReadAPIKeys, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions( PermissionAction.READ, diff --git a/apps/studio/pages/project/[ref]/settings/jwt/legacy.tsx b/apps/studio/pages/project/[ref]/settings/jwt/legacy.tsx index 631b84132a..d2b341f3d4 100644 --- a/apps/studio/pages/project/[ref]/settings/jwt/legacy.tsx +++ b/apps/studio/pages/project/[ref]/settings/jwt/legacy.tsx @@ -1,18 +1,19 @@ import { JwtSecretUpdateError, JwtSecretUpdateStatus } from '@supabase/shared-types/out/events' import { useQueryClient } from '@tanstack/react-query' import { useParams } from 'common' -import JWTSettings from 'components/interfaces/JwtSecrets/jwt-settings' -import { JWT_SECRET_UPDATE_ERROR_MESSAGES } from 'components/interfaces/JwtSecrets/jwt.constants' -import DefaultLayout from 'components/layouts/DefaultLayout' -import JWTKeysLayout from 'components/layouts/JWTKeys/JWTKeysLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useJwtSecretUpdatingStatusQuery } from 'data/config/jwt-secret-updating-status-query' -import { configKeys } from 'data/config/keys' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' import { useEffect, useRef } from 'react' import { toast } from 'sonner' -import type { NextPageWithLayout } from 'types' + +import JWTSettings from '@/components/interfaces/JwtSecrets/jwt-settings' +import { JWT_SECRET_UPDATE_ERROR_MESSAGES } from '@/components/interfaces/JwtSecrets/jwt.constants' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import JWTKeysLayout from '@/components/layouts/JWTKeys/JWTKeysLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useJwtSecretUpdatingStatusQuery } from '@/data/config/jwt-secret-updating-status-query' +import { configKeys } from '@/data/config/keys' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' const JWTKeysLegacyPage: NextPageWithLayout = () => { const client = useQueryClient() diff --git a/apps/studio/pages/project/[ref]/settings/log-drains.tsx b/apps/studio/pages/project/[ref]/settings/log-drains.tsx index c23317b482..bf2b65062c 100644 --- a/apps/studio/pages/project/[ref]/settings/log-drains.tsx +++ b/apps/studio/pages/project/[ref]/settings/log-drains.tsx @@ -1,26 +1,8 @@ import { PermissionAction } from '@supabase/shared-types/out/constants' import { IS_PLATFORM, useFlag, useParams } from 'common' -import { LogDrainDestinationSheetForm } from 'components/interfaces/LogDrains/LogDrainDestinationSheetForm' -import { LogDrains } from 'components/interfaces/LogDrains/LogDrains' -import { LOG_DRAIN_TYPES, LogDrainType } from 'components/interfaces/LogDrains/LogDrains.constants' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import { DocsButton } from 'components/ui/DocsButton' -import { - LogDrainCreateVariables, - useCreateLogDrainMutation, -} from 'data/log-drains/create-log-drain-mutation' -import { LogDrainData, useLogDrainsQuery } from 'data/log-drains/log-drains-query' -import { useUpdateLogDrainMutation } from 'data/log-drains/update-log-drain-mutation' -import { useCheckEntitlements } from 'hooks/misc/useCheckEntitlements' -import { useAsyncCheckPermissions } from 'hooks/misc/useCheckPermissions' -import { DOCS_URL } from 'lib/constants' import { ChevronDown } from 'lucide-react' import { cloneElement, useState } from 'react' import { toast } from 'sonner' -import type { NextPageWithLayout } from 'types' import { Alert_Shadcn_, Button, @@ -32,6 +14,28 @@ import { import { GenericSkeletonLoader } from 'ui-patterns' import ConfirmationModal from 'ui-patterns/Dialogs/ConfirmationModal' +import { LogDrainDestinationSheetForm } from '@/components/interfaces/LogDrains/LogDrainDestinationSheetForm' +import { LogDrains } from '@/components/interfaces/LogDrains/LogDrains' +import { + LOG_DRAIN_TYPES, + LogDrainType, +} from '@/components/interfaces/LogDrains/LogDrains.constants' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import { DocsButton } from '@/components/ui/DocsButton' +import { + LogDrainCreateVariables, + useCreateLogDrainMutation, +} from '@/data/log-drains/create-log-drain-mutation' +import { LogDrainData, useLogDrainsQuery } from '@/data/log-drains/log-drains-query' +import { useUpdateLogDrainMutation } from '@/data/log-drains/update-log-drain-mutation' +import { useCheckEntitlements } from '@/hooks/misc/useCheckEntitlements' +import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions' +import { DOCS_URL } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const LogDrainsSettings: NextPageWithLayout = () => { const { can: canManageLogDrains, isLoading: isLoadingPermissions } = useAsyncCheckPermissions( PermissionAction.ANALYTICS_ADMIN_WRITE, diff --git a/apps/studio/pages/project/[ref]/settings/webhooks/[endpointId].tsx b/apps/studio/pages/project/[ref]/settings/webhooks/[endpointId].tsx index 9c9a26e0f7..84f1d9aafb 100644 --- a/apps/studio/pages/project/[ref]/settings/webhooks/[endpointId].tsx +++ b/apps/studio/pages/project/[ref]/settings/webhooks/[endpointId].tsx @@ -1,8 +1,9 @@ -import { PlatformWebhooksPage } from 'components/interfaces/Platform/Webhooks' -import DefaultLayout from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' import { useRouter } from 'next/router' -import type { NextPageWithLayout } from 'types' + +import { PlatformWebhooksPage } from '@/components/interfaces/Platform/Webhooks' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import type { NextPageWithLayout } from '@/types' const ProjectWebhookEndpointSettings: NextPageWithLayout = () => { const { query } = useRouter() diff --git a/apps/studio/pages/project/[ref]/settings/webhooks/index.tsx b/apps/studio/pages/project/[ref]/settings/webhooks/index.tsx index ffadea2f6f..182a884689 100644 --- a/apps/studio/pages/project/[ref]/settings/webhooks/index.tsx +++ b/apps/studio/pages/project/[ref]/settings/webhooks/index.tsx @@ -1,7 +1,7 @@ -import { PlatformWebhooksPage } from 'components/interfaces/Platform/Webhooks' -import DefaultLayout from 'components/layouts/DefaultLayout' -import SettingsLayout from 'components/layouts/ProjectSettingsLayout/SettingsLayout' -import type { NextPageWithLayout } from 'types' +import { PlatformWebhooksPage } from '@/components/interfaces/Platform/Webhooks' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import SettingsLayout from '@/components/layouts/ProjectSettingsLayout/SettingsLayout' +import type { NextPageWithLayout } from '@/types' const ProjectWebhooksSettings: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/project/[ref]/sql/[id].tsx b/apps/studio/pages/project/[ref]/sql/[id].tsx index ca5388da5d..75ac58d35e 100644 --- a/apps/studio/pages/project/[ref]/sql/[id].tsx +++ b/apps/studio/pages/project/[ref]/sql/[id].tsx @@ -1,25 +1,25 @@ import { usePrevious } from '@uidotdev/usehooks' +import { useParams } from 'common/hooks/useParams' import Link from 'next/link' import { useRouter } from 'next/router' import { useEffect } from 'react' - -import { useParams } from 'common/hooks/useParams' -import { SQLEditor } from 'components/interfaces/SQLEditor/SQLEditor' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { EditorBaseLayout } from 'components/layouts/editors/EditorBaseLayout' -import { useEditorType } from 'components/layouts/editors/EditorsLayout.hooks' -import SQLEditorLayout from 'components/layouts/SQLEditorLayout/SQLEditorLayout' -import { SQLEditorMenu } from 'components/layouts/SQLEditorLayout/SQLEditorMenu' -import { useContentIdQuery } from 'data/content/content-id-query' -import { useDashboardHistory } from 'hooks/misc/useDashboardHistory' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { IS_PLATFORM } from 'lib/constants' -import { SnippetWithContent, useSnippets, useSqlEditorV2StateSnapshot } from 'state/sql-editor-v2' -import { createTabId, useTabsStateSnapshot } from 'state/tabs' -import type { NextPageWithLayout } from 'types' import { Button } from 'ui' import { Admonition } from 'ui-patterns' -import { generateSnippetTitle } from 'components/interfaces/SQLEditor/SQLEditor.constants' + +import { SQLEditor } from '@/components/interfaces/SQLEditor/SQLEditor' +import { generateSnippetTitle } from '@/components/interfaces/SQLEditor/SQLEditor.constants' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout' +import { useEditorType } from '@/components/layouts/editors/EditorsLayout.hooks' +import SQLEditorLayout from '@/components/layouts/SQLEditorLayout/SQLEditorLayout' +import { SQLEditorMenu } from '@/components/layouts/SQLEditorLayout/SQLEditorMenu' +import { useContentIdQuery } from '@/data/content/content-id-query' +import { useDashboardHistory } from '@/hooks/misc/useDashboardHistory' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import { IS_PLATFORM } from '@/lib/constants' +import { SnippetWithContent, useSnippets, useSqlEditorV2StateSnapshot } from '@/state/sql-editor-v2' +import { createTabId, useTabsStateSnapshot } from '@/state/tabs' +import type { NextPageWithLayout } from '@/types' const SqlEditor: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/sql/index.tsx b/apps/studio/pages/project/[ref]/sql/index.tsx index 6020e09108..96a547d102 100644 --- a/apps/studio/pages/project/[ref]/sql/index.tsx +++ b/apps/studio/pages/project/[ref]/sql/index.tsx @@ -1,14 +1,14 @@ +import { useParams } from 'common' import { useRouter } from 'next/router' import { useEffect } from 'react' -import { useParams } from 'common' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { EditorBaseLayout } from 'components/layouts/editors/EditorBaseLayout' -import SQLEditorLayout from 'components/layouts/SQLEditorLayout/SQLEditorLayout' -import { SQLEditorMenu } from 'components/layouts/SQLEditorLayout/SQLEditorMenu' -import { useDashboardHistory } from 'hooks/misc/useDashboardHistory' -import { useTabsStateSnapshot } from 'state/tabs' -import type { NextPageWithLayout } from 'types' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout' +import SQLEditorLayout from '@/components/layouts/SQLEditorLayout/SQLEditorLayout' +import { SQLEditorMenu } from '@/components/layouts/SQLEditorLayout/SQLEditorMenu' +import { useDashboardHistory } from '@/hooks/misc/useDashboardHistory' +import { useTabsStateSnapshot } from '@/state/tabs' +import type { NextPageWithLayout } from '@/types' const SQLEditorIndexPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/sql/quickstarts.tsx b/apps/studio/pages/project/[ref]/sql/quickstarts.tsx index ea7b3b34d4..4764448d6d 100644 --- a/apps/studio/pages/project/[ref]/sql/quickstarts.tsx +++ b/apps/studio/pages/project/[ref]/sql/quickstarts.tsx @@ -2,13 +2,13 @@ import { useParams } from 'next/navigation' import { useRouter } from 'next/router' import { useEffect } from 'react' -import SQLQuickstarts from 'components/interfaces/SQLEditor/SQLTemplates/SQLQuickstarts' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { EditorBaseLayout } from 'components/layouts/editors/EditorBaseLayout' -import SQLEditorLayout from 'components/layouts/SQLEditorLayout/SQLEditorLayout' -import { SQLEditorMenu } from 'components/layouts/SQLEditorLayout/SQLEditorMenu' -import { createTabId, useTabsStateSnapshot } from 'state/tabs' -import type { NextPageWithLayout } from 'types' +import SQLQuickstarts from '@/components/interfaces/SQLEditor/SQLTemplates/SQLQuickstarts' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout' +import SQLEditorLayout from '@/components/layouts/SQLEditorLayout/SQLEditorLayout' +import { SQLEditorMenu } from '@/components/layouts/SQLEditorLayout/SQLEditorMenu' +import { createTabId, useTabsStateSnapshot } from '@/state/tabs' +import type { NextPageWithLayout } from '@/types' const SqlQuickstarts: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/sql/templates.tsx b/apps/studio/pages/project/[ref]/sql/templates.tsx index c1e2db6399..206ebc16ae 100644 --- a/apps/studio/pages/project/[ref]/sql/templates.tsx +++ b/apps/studio/pages/project/[ref]/sql/templates.tsx @@ -2,13 +2,13 @@ import { useParams } from 'next/navigation' import { useRouter } from 'next/router' import { useEffect } from 'react' -import SQLTemplates from 'components/interfaces/SQLEditor/SQLTemplates/SQLTemplates' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { EditorBaseLayout } from 'components/layouts/editors/EditorBaseLayout' -import SQLEditorLayout from 'components/layouts/SQLEditorLayout/SQLEditorLayout' -import { SQLEditorMenu } from 'components/layouts/SQLEditorLayout/SQLEditorMenu' -import { createTabId, useTabsStateSnapshot } from 'state/tabs' -import type { NextPageWithLayout } from 'types' +import SQLTemplates from '@/components/interfaces/SQLEditor/SQLTemplates/SQLTemplates' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { EditorBaseLayout } from '@/components/layouts/editors/EditorBaseLayout' +import SQLEditorLayout from '@/components/layouts/SQLEditorLayout/SQLEditorLayout' +import { SQLEditorMenu } from '@/components/layouts/SQLEditorLayout/SQLEditorMenu' +import { createTabId, useTabsStateSnapshot } from '@/state/tabs' +import type { NextPageWithLayout } from '@/types' const SqlTemplates: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/storage/analytics/buckets/[bucketId].tsx b/apps/studio/pages/project/[ref]/storage/analytics/buckets/[bucketId].tsx index 605121d1ab..7c78cc182e 100644 --- a/apps/studio/pages/project/[ref]/storage/analytics/buckets/[bucketId].tsx +++ b/apps/studio/pages/project/[ref]/storage/analytics/buckets/[bucketId].tsx @@ -1,18 +1,18 @@ +import { useParams } from 'common' +import { AnalyticsBucket as AnalyticsBucketIcon } from 'icons' import { useRouter } from 'next/router' import { useEffect } from 'react' import { toast } from 'sonner' -import { useParams } from 'common' -import { AnalyticBucketDetails } from 'components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails' -import { useSelectedAnalyticsBucket } from 'components/interfaces/Storage/AnalyticsBuckets/useSelectedAnalyticsBucket' -import { BUCKET_TYPES } from 'components/interfaces/Storage/Storage.constants' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import StorageLayout from 'components/layouts/StorageLayout/StorageLayout' -import { DocsButton } from 'components/ui/DocsButton' -import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' -import { AnalyticsBucket as AnalyticsBucketIcon } from 'icons' -import type { NextPageWithLayout } from 'types' +import { AnalyticBucketDetails } from '@/components/interfaces/Storage/AnalyticsBuckets/AnalyticsBucketDetails' +import { useSelectedAnalyticsBucket } from '@/components/interfaces/Storage/AnalyticsBuckets/useSelectedAnalyticsBucket' +import { BUCKET_TYPES } from '@/components/interfaces/Storage/Storage.constants' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import type { NextPageWithLayout } from '@/types' const AnalyticsBucketPage: NextPageWithLayout = () => { const config = BUCKET_TYPES.analytics diff --git a/apps/studio/pages/project/[ref]/storage/analytics/index.tsx b/apps/studio/pages/project/[ref]/storage/analytics/index.tsx index d096dcbf1b..9507dfe952 100644 --- a/apps/studio/pages/project/[ref]/storage/analytics/index.tsx +++ b/apps/studio/pages/project/[ref]/storage/analytics/index.tsx @@ -1,11 +1,12 @@ import { useParams } from 'common' -import { AnalyticsBuckets } from 'components/interfaces/Storage/AnalyticsBuckets' -import { BucketsUpgradePlan } from 'components/interfaces/Storage/BucketsUpgradePlan' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { StorageBucketsLayout } from 'components/layouts/StorageLayout/StorageBucketsLayout' -import StorageLayout from 'components/layouts/StorageLayout/StorageLayout' -import { useIsAnalyticsBucketsEnabled } from 'data/config/project-storage-config-query' -import type { NextPageWithLayout } from 'types' + +import { AnalyticsBuckets } from '@/components/interfaces/Storage/AnalyticsBuckets' +import { BucketsUpgradePlan } from '@/components/interfaces/Storage/BucketsUpgradePlan' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { StorageBucketsLayout } from '@/components/layouts/StorageLayout/StorageBucketsLayout' +import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' +import { useIsAnalyticsBucketsEnabled } from '@/data/config/project-storage-config-query' +import type { NextPageWithLayout } from '@/types' const StorageAnalyticsPage: NextPageWithLayout = () => { const { ref: projectRef } = useParams() diff --git a/apps/studio/pages/project/[ref]/storage/files/buckets/[bucketId].tsx b/apps/studio/pages/project/[ref]/storage/files/buckets/[bucketId].tsx index 273f566a2e..cca7c8f96b 100644 --- a/apps/studio/pages/project/[ref]/storage/files/buckets/[bucketId].tsx +++ b/apps/studio/pages/project/[ref]/storage/files/buckets/[bucketId].tsx @@ -5,7 +5,6 @@ import { useRouter } from 'next/router' import { parseAsBoolean, useQueryState } from 'nuqs' import { useEffect } from 'react' import { toast } from 'sonner' -import type { NextPageWithLayout } from 'types' import { Badge, Button, @@ -32,6 +31,7 @@ import DefaultLayout from '@/components/layouts/DefaultLayout' import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' import { StorageExplorerStateContextProvider } from '@/state/storage-explorer' +import type { NextPageWithLayout } from '@/types' const BucketPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/storage/files/index.tsx b/apps/studio/pages/project/[ref]/storage/files/index.tsx index edbc5b6d96..d53fc403d6 100644 --- a/apps/studio/pages/project/[ref]/storage/files/index.tsx +++ b/apps/studio/pages/project/[ref]/storage/files/index.tsx @@ -1,8 +1,8 @@ -import { FilesBuckets } from 'components/interfaces/Storage/FilesBuckets' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { StorageBucketsLayout } from 'components/layouts/StorageLayout/StorageBucketsLayout' -import StorageLayout from 'components/layouts/StorageLayout/StorageLayout' -import type { NextPageWithLayout } from 'types' +import { FilesBuckets } from '@/components/interfaces/Storage/FilesBuckets' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { StorageBucketsLayout } from '@/components/layouts/StorageLayout/StorageBucketsLayout' +import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' +import type { NextPageWithLayout } from '@/types' const StorageFilesPage: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/project/[ref]/storage/files/policies.tsx b/apps/studio/pages/project/[ref]/storage/files/policies.tsx index e9b9dcc814..90e73a2a9b 100644 --- a/apps/studio/pages/project/[ref]/storage/files/policies.tsx +++ b/apps/studio/pages/project/[ref]/storage/files/policies.tsx @@ -1,8 +1,8 @@ -import { StoragePolicies } from 'components/interfaces/Storage/StoragePolicies/StoragePolicies' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { StorageBucketsLayout } from 'components/layouts/StorageLayout/StorageBucketsLayout' -import StorageLayout from 'components/layouts/StorageLayout/StorageLayout' -import type { NextPageWithLayout } from 'types' +import { StoragePolicies } from '@/components/interfaces/Storage/StoragePolicies/StoragePolicies' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { StorageBucketsLayout } from '@/components/layouts/StorageLayout/StorageBucketsLayout' +import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' +import type { NextPageWithLayout } from '@/types' const FilesPoliciesPage: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/project/[ref]/storage/files/settings.tsx b/apps/studio/pages/project/[ref]/storage/files/settings.tsx index 2eecf39a2f..e298a78a4e 100644 --- a/apps/studio/pages/project/[ref]/storage/files/settings.tsx +++ b/apps/studio/pages/project/[ref]/storage/files/settings.tsx @@ -1,8 +1,8 @@ -import { StorageSettings } from 'components/interfaces/Storage/StorageSettings/StorageSettings' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { StorageBucketsLayout } from 'components/layouts/StorageLayout/StorageBucketsLayout' -import StorageLayout from 'components/layouts/StorageLayout/StorageLayout' -import type { NextPageWithLayout } from 'types' +import { StorageSettings } from '@/components/interfaces/Storage/StorageSettings/StorageSettings' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { StorageBucketsLayout } from '@/components/layouts/StorageLayout/StorageBucketsLayout' +import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' +import type { NextPageWithLayout } from '@/types' const FilesSettingsPage: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/project/[ref]/storage/s3.tsx b/apps/studio/pages/project/[ref]/storage/s3.tsx index 88e30cd3ab..e57a666a5d 100644 --- a/apps/studio/pages/project/[ref]/storage/s3.tsx +++ b/apps/studio/pages/project/[ref]/storage/s3.tsx @@ -1,8 +1,8 @@ -import { S3Connection } from 'components/interfaces/Storage/StorageSettings/S3Connection' -import DefaultLayout from 'components/layouts/DefaultLayout' -import { StorageBucketsLayout } from 'components/layouts/StorageLayout/StorageBucketsLayout' -import StorageLayout from 'components/layouts/StorageLayout/StorageLayout' -import type { NextPageWithLayout } from 'types' +import { S3Connection } from '@/components/interfaces/Storage/StorageSettings/S3Connection' +import DefaultLayout from '@/components/layouts/DefaultLayout' +import { StorageBucketsLayout } from '@/components/layouts/StorageLayout/StorageBucketsLayout' +import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' +import type { NextPageWithLayout } from '@/types' const S3SettingsPage: NextPageWithLayout = () => { return diff --git a/apps/studio/pages/project/[ref]/storage/vectors/buckets/[bucketId].tsx b/apps/studio/pages/project/[ref]/storage/vectors/buckets/[bucketId].tsx index 4c5f2200cf..0341647155 100644 --- a/apps/studio/pages/project/[ref]/storage/vectors/buckets/[bucketId].tsx +++ b/apps/studio/pages/project/[ref]/storage/vectors/buckets/[bucketId].tsx @@ -1,16 +1,17 @@ import { useParams } from 'common' -import { BUCKET_TYPES } from 'components/interfaces/Storage/Storage.constants' -import { VectorBucketDetails } from 'components/interfaces/Storage/VectorBuckets/VectorBucketDetails' -import { useSelectedVectorBucket } from 'components/interfaces/Storage/VectorBuckets/useSelectedVectorBuckets' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import StorageLayout from 'components/layouts/StorageLayout/StorageLayout' -import { DocsButton } from 'components/ui/DocsButton' import { VectorBucket as VectorBucketIcon } from 'icons' import { useRouter } from 'next/router' import { useEffect } from 'react' import { toast } from 'sonner' -import type { NextPageWithLayout } from 'types' + +import { BUCKET_TYPES } from '@/components/interfaces/Storage/Storage.constants' +import { useSelectedVectorBucket } from '@/components/interfaces/Storage/VectorBuckets/useSelectedVectorBuckets' +import { VectorBucketDetails } from '@/components/interfaces/Storage/VectorBuckets/VectorBucketDetails' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' +import { DocsButton } from '@/components/ui/DocsButton' +import type { NextPageWithLayout } from '@/types' const VectorsBucketPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/project/[ref]/storage/vectors/index.tsx b/apps/studio/pages/project/[ref]/storage/vectors/index.tsx index a880dee659..20665e3497 100644 --- a/apps/studio/pages/project/[ref]/storage/vectors/index.tsx +++ b/apps/studio/pages/project/[ref]/storage/vectors/index.tsx @@ -1,13 +1,6 @@ import { useParams } from 'common' -import { BucketsUpgradePlan } from 'components/interfaces/Storage/BucketsUpgradePlan' -import { VectorsBuckets } from 'components/interfaces/Storage/VectorBuckets' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { StorageBucketsLayout } from 'components/layouts/StorageLayout/StorageBucketsLayout' -import StorageLayout from 'components/layouts/StorageLayout/StorageLayout' -import { useIsVectorBucketsEnabled } from 'data/config/project-storage-config-query' import { VectorBucket } from 'icons' import { AWS_REGIONS } from 'shared-data' -import type { NextPageWithLayout } from 'types' import { Tooltip, TooltipContent, TooltipTrigger } from 'ui' import { EmptyStatePresentational, @@ -16,9 +9,16 @@ import { PageSectionContent, } from 'ui-patterns' +import { BucketsUpgradePlan } from '@/components/interfaces/Storage/BucketsUpgradePlan' +import { VectorsBuckets } from '@/components/interfaces/Storage/VectorBuckets' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { StorageBucketsLayout } from '@/components/layouts/StorageLayout/StorageBucketsLayout' +import StorageLayout from '@/components/layouts/StorageLayout/StorageLayout' import { AlphaNotice } from '@/components/ui/AlphaNotice' import { InlineLinkClassName } from '@/components/ui/InlineLink' +import { useIsVectorBucketsEnabled } from '@/data/config/project-storage-config-query' import { useSelectedProjectQuery } from '@/hooks/misc/useSelectedProject' +import type { NextPageWithLayout } from '@/types' const AVAILABLE_REGIONS = ['us-east-1', 'us-east-2', 'us-west-2', 'eu-central-1', 'ap-southeast-2'] diff --git a/apps/studio/pages/project/_/[[...routeSlug]].tsx b/apps/studio/pages/project/_/[[...routeSlug]].tsx index 8a2e5ee3cb..3134c49845 100644 --- a/apps/studio/pages/project/_/[[...routeSlug]].tsx +++ b/apps/studio/pages/project/_/[[...routeSlug]].tsx @@ -1,16 +1,4 @@ import { IS_PLATFORM, LOCAL_STORAGE_KEYS, useParams } from 'common' -import { - Header, - LoadingCardView, - NoOrganizationsState, -} from 'components/interfaces/Home/ProjectList/EmptyStates' -import { ProjectList } from 'components/interfaces/Home/ProjectList/ProjectList' -import { HomePageActions } from 'components/interfaces/HomePageActions' -import { PageLayout } from 'components/layouts/PageLayout/PageLayout' -import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold' -import { useOrganizationsQuery } from 'data/organizations/organizations-query' -import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' -import { withAuth } from 'hooks/misc/withAuth' import { AlertTriangleIcon } from 'lucide-react' import { NextPage } from 'next' import { useRouter } from 'next/router' @@ -27,6 +15,19 @@ import { } from 'ui' import { ShimmeringLoader } from 'ui-patterns' +import { + Header, + LoadingCardView, + NoOrganizationsState, +} from '@/components/interfaces/Home/ProjectList/EmptyStates' +import { ProjectList } from '@/components/interfaces/Home/ProjectList/ProjectList' +import { HomePageActions } from '@/components/interfaces/HomePageActions' +import { PageLayout } from '@/components/layouts/PageLayout/PageLayout' +import { ScaffoldContainer, ScaffoldSection } from '@/components/layouts/Scaffold' +import { useOrganizationsQuery } from '@/data/organizations/organizations-query' +import { useLocalStorageQuery } from '@/hooks/misc/useLocalStorage' +import { withAuth } from '@/hooks/misc/withAuth' + // [Joshen] I'd say we don't do route validation here, this page will act more // like a proxy to the project specific pages, and we let those pages handle // any route validation logic instead diff --git a/apps/studio/pages/reset-password.tsx b/apps/studio/pages/reset-password.tsx index 8613000a38..3380523428 100644 --- a/apps/studio/pages/reset-password.tsx +++ b/apps/studio/pages/reset-password.tsx @@ -1,7 +1,7 @@ -import { ResetPasswordForm } from 'components/interfaces/SignIn/ResetPasswordForm' -import ForgotPasswordLayout from 'components/layouts/SignInLayout/ForgotPasswordLayout' -import { withAuth } from 'hooks/misc/withAuth' -import type { NextPageWithLayout } from 'types' +import { ResetPasswordForm } from '@/components/interfaces/SignIn/ResetPasswordForm' +import ForgotPasswordLayout from '@/components/layouts/SignInLayout/ForgotPasswordLayout' +import { withAuth } from '@/hooks/misc/withAuth' +import type { NextPageWithLayout } from '@/types' const ResetPasswordPage: NextPageWithLayout = () => { return ( diff --git a/apps/studio/pages/sign-in-mfa.tsx b/apps/studio/pages/sign-in-mfa.tsx index 33a09078d4..b6702fd7bf 100644 --- a/apps/studio/pages/sign-in-mfa.tsx +++ b/apps/studio/pages/sign-in-mfa.tsx @@ -1,19 +1,19 @@ import * as Sentry from '@sentry/nextjs' import { useQueryClient } from '@tanstack/react-query' +import { getAccessToken, useParams } from 'common' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' import { toast } from 'sonner' - -import { getAccessToken, useParams } from 'common' -import { SignInMfaForm } from 'components/interfaces/SignIn/SignInMfaForm' -import SignInLayout from 'components/layouts/SignInLayout/SignInLayout' -import { useAddLoginEvent } from 'data/misc/audit-login-mutation' -import { useSendEventMutation } from 'data/telemetry/send-event-mutation' -import useLatest from 'hooks/misc/useLatest' -import { auth, buildPathWithParams, getReturnToPath } from 'lib/gotrue' -import type { NextPageWithLayout } from 'types' import { LogoLoader } from 'ui' +import { SignInMfaForm } from '@/components/interfaces/SignIn/SignInMfaForm' +import SignInLayout from '@/components/layouts/SignInLayout/SignInLayout' +import { useAddLoginEvent } from '@/data/misc/audit-login-mutation' +import { useSendEventMutation } from '@/data/telemetry/send-event-mutation' +import useLatest from '@/hooks/misc/useLatest' +import { auth, buildPathWithParams, getReturnToPath } from '@/lib/gotrue' +import type { NextPageWithLayout } from '@/types' + const SignInMfaPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/sign-in-partner.tsx b/apps/studio/pages/sign-in-partner.tsx index b51320a2d3..4809fb7b54 100644 --- a/apps/studio/pages/sign-in-partner.tsx +++ b/apps/studio/pages/sign-in-partner.tsx @@ -1,8 +1,9 @@ -import { SignInPartner } from 'components/interfaces/SignIn/SignInPartner' -import ForgotPasswordLayout from 'components/layouts/SignInLayout/ForgotPasswordLayout' -import type { NextPageWithLayout } from 'types' import { cn } from 'ui' +import { SignInPartner } from '@/components/interfaces/SignIn/SignInPartner' +import ForgotPasswordLayout from '@/components/layouts/SignInLayout/ForgotPasswordLayout' +import type { NextPageWithLayout } from '@/types' + const SignInPartnerPage: NextPageWithLayout = () => { return } diff --git a/apps/studio/pages/sign-in-sso.tsx b/apps/studio/pages/sign-in-sso.tsx index 387fd6723c..543a193fd4 100644 --- a/apps/studio/pages/sign-in-sso.tsx +++ b/apps/studio/pages/sign-in-sso.tsx @@ -1,8 +1,8 @@ -import { SignInSSOForm } from 'components/interfaces/SignIn/SignInSSOForm' -import SignInLayout from 'components/layouts/SignInLayout/SignInLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' +import { SignInSSOForm } from '@/components/interfaces/SignIn/SignInSSOForm' +import SignInLayout from '@/components/layouts/SignInLayout/SignInLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' const SignInSSOPage: NextPageWithLayout = () => { const signInWithSSOEnabled = useIsFeatureEnabled('dashboard_auth:sign_in_with_sso') diff --git a/apps/studio/pages/sign-in.tsx b/apps/studio/pages/sign-in.tsx index f55db7b801..af475facea 100644 --- a/apps/studio/pages/sign-in.tsx +++ b/apps/studio/pages/sign-in.tsx @@ -2,19 +2,19 @@ import { Lock } from 'lucide-react' import Link from 'next/link' import { useRouter } from 'next/router' import { useEffect } from 'react' - -import { LastSignInWrapper } from 'components/interfaces/SignIn/LastSignInWrapper' -import { SignInForm } from 'components/interfaces/SignIn/SignInForm' -import { SignInWithCustom } from 'components/interfaces/SignIn/SignInWithCustom' -import { SignInWithGitHub } from 'components/interfaces/SignIn/SignInWithGitHub' -import { AuthenticationLayout } from 'components/layouts/AuthenticationLayout' -import SignInLayout from 'components/layouts/SignInLayout/SignInLayout' -import { useCustomContent } from 'hooks/custom-content/useCustomContent' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import { IS_PLATFORM } from 'lib/constants' -import type { NextPageWithLayout } from 'types' import { Button } from 'ui' +import { LastSignInWrapper } from '@/components/interfaces/SignIn/LastSignInWrapper' +import { SignInForm } from '@/components/interfaces/SignIn/SignInForm' +import { SignInWithCustom } from '@/components/interfaces/SignIn/SignInWithCustom' +import { SignInWithGitHub } from '@/components/interfaces/SignIn/SignInWithGitHub' +import { AuthenticationLayout } from '@/components/layouts/AuthenticationLayout' +import SignInLayout from '@/components/layouts/SignInLayout/SignInLayout' +import { useCustomContent } from '@/hooks/custom-content/useCustomContent' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import { IS_PLATFORM } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' + const SignInPage: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/sign-up.tsx b/apps/studio/pages/sign-up.tsx index 6f93c43761..9aeebcbfa1 100644 --- a/apps/studio/pages/sign-up.tsx +++ b/apps/studio/pages/sign-up.tsx @@ -1,11 +1,11 @@ import Link from 'next/link' -import { SignInWithGitHub } from 'components/interfaces/SignIn/SignInWithGitHub' -import { SignUpForm } from 'components/interfaces/SignIn/SignUpForm' -import SignInLayout from 'components/layouts/SignInLayout/SignInLayout' -import { UnknownInterface } from 'components/ui/UnknownInterface' -import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' -import type { NextPageWithLayout } from 'types' +import { SignInWithGitHub } from '@/components/interfaces/SignIn/SignInWithGitHub' +import { SignUpForm } from '@/components/interfaces/SignIn/SignUpForm' +import SignInLayout from '@/components/layouts/SignInLayout/SignInLayout' +import { UnknownInterface } from '@/components/ui/UnknownInterface' +import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled' +import type { NextPageWithLayout } from '@/types' const SignUpPage: NextPageWithLayout = () => { const { diff --git a/apps/studio/pages/support/link.tsx b/apps/studio/pages/support/link.tsx index b82e4f9452..2bf36d1a59 100644 --- a/apps/studio/pages/support/link.tsx +++ b/apps/studio/pages/support/link.tsx @@ -1,12 +1,13 @@ -import { LinkSupportTicketPage } from 'components/interfaces/Support/LinkSupportTicketPage' -import { AppLayout } from 'components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { withAuth } from 'hooks/misc/withAuth' -import { IS_PLATFORM } from 'lib/constants' import { useRouter } from 'next/router' import type { ReactElement } from 'react' import { useEffect } from 'react' -import type { NextPageWithLayout } from 'types' + +import { LinkSupportTicketPage } from '@/components/interfaces/Support/LinkSupportTicketPage' +import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { withAuth } from '@/hooks/misc/withAuth' +import { IS_PLATFORM } from '@/lib/constants' +import type { NextPageWithLayout } from '@/types' const LinkSupportTicketPageRoute: NextPageWithLayout = () => { const router = useRouter() diff --git a/apps/studio/pages/support/new.tsx b/apps/studio/pages/support/new.tsx index 5badd49f67..6dadb2a506 100644 --- a/apps/studio/pages/support/new.tsx +++ b/apps/studio/pages/support/new.tsx @@ -1,8 +1,8 @@ -import { SupportFormPage } from 'components/interfaces/Support/SupportFormPage' -import { AppLayout } from 'components/layouts/AppLayout/AppLayout' -import { DefaultLayout } from 'components/layouts/DefaultLayout' -import { withAuth } from 'hooks/misc/withAuth' -import type { NextPageWithLayout } from 'types' +import { SupportFormPage } from '@/components/interfaces/Support/SupportFormPage' +import { AppLayout } from '@/components/layouts/AppLayout/AppLayout' +import { DefaultLayout } from '@/components/layouts/DefaultLayout' +import { withAuth } from '@/hooks/misc/withAuth' +import type { NextPageWithLayout } from '@/types' const SupportPage: NextPageWithLayout = () => { return diff --git a/apps/studio/proxy.ts b/apps/studio/proxy.ts index a349ad5679..3ea62613ce 100644 --- a/apps/studio/proxy.ts +++ b/apps/studio/proxy.ts @@ -1,6 +1,7 @@ -import { IS_PLATFORM } from 'lib/constants' import type { NextRequest } from 'next/server' +import { IS_PLATFORM } from '@/lib/constants' + export const config = { matcher: '/api/:function*', } diff --git a/apps/studio/scripts/__tests__/ratchet-eslint-rules.test.ts b/apps/studio/scripts/__tests__/ratchet-eslint-rules.test.ts index b4624fe5ae..247dcd5744 100644 --- a/apps/studio/scripts/__tests__/ratchet-eslint-rules.test.ts +++ b/apps/studio/scripts/__tests__/ratchet-eslint-rules.test.ts @@ -2,6 +2,7 @@ import { mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs' import os from 'node:os' import path from 'node:path' import { afterEach, describe, expect, it, vi } from 'vitest' + import { runRatchet } from '../ratchet-eslint-rules' const studioRoot = path.resolve(__dirname, '../..') diff --git a/apps/studio/state/sql-editor-v2.ts b/apps/studio/state/sql-editor-v2.ts index 9f5893c9d8..ca1fe7655e 100644 --- a/apps/studio/state/sql-editor-v2.ts +++ b/apps/studio/state/sql-editor-v2.ts @@ -1,7 +1,6 @@ import { debounce, memoize } from 'lodash' import { useMemo } from 'react' import { toast } from 'sonner' -import type { SqlSnippets } from 'types' import { proxy, ref, snapshot, subscribe, useSnapshot } from 'valtio' import { devtools, proxyMap } from 'valtio/utils' @@ -13,6 +12,7 @@ import { createSQLSnippetFolder } from '@/data/content/sql-folder-create-mutatio import { updateSQLSnippetFolder } from '@/data/content/sql-folder-update-mutation' import { Snippet, SnippetFolder } from '@/data/content/sql-folders-query' import { getQueryClient } from '@/data/query-client' +import type { SqlSnippets } from '@/types' type StateSnippetFolder = { projectRef: string diff --git a/apps/studio/state/table-editor-operation-queue.types.ts b/apps/studio/state/table-editor-operation-queue.types.ts index 7e9b0562f0..5f29e084bc 100644 --- a/apps/studio/state/table-editor-operation-queue.types.ts +++ b/apps/studio/state/table-editor-operation-queue.types.ts @@ -1,7 +1,6 @@ -import type { Dictionary } from 'types' - import { PendingAddRow, SupaRow } from '@/components/grid/types' import type { Entity } from '@/data/table-editor/table-editor-types' +import type { Dictionary } from '@/types' export enum QueuedOperationType { EDIT_CELL_CONTENT = 'edit_cell_content', diff --git a/apps/studio/state/table-editor.tsx b/apps/studio/state/table-editor.tsx index acbaad246e..181d2e8735 100644 --- a/apps/studio/state/table-editor.tsx +++ b/apps/studio/state/table-editor.tsx @@ -2,7 +2,6 @@ import * as Sentry from '@sentry/nextjs' import type { PostgresColumn } from '@supabase/postgres-meta' import { useConstant } from 'common' import { createContext, PropsWithChildren, useContext } from 'react' -import type { Dictionary } from 'types' import { proxy, useSnapshot } from 'valtio' import { @@ -21,6 +20,7 @@ import { generateTableChangeKey } from '@/components/grid/utils/queueOperationUt import { ForeignKey } from '@/components/interfaces/TableGridEditor/SidePanelEditor/ForeignKeySelector/ForeignKeySelector.types' import type { EditValue } from '@/components/interfaces/TableGridEditor/SidePanelEditor/RowEditor/RowEditor.types' import type { TableField } from '@/components/interfaces/TableGridEditor/SidePanelEditor/TableEditor/TableEditor.types' +import type { Dictionary } from '@/types' export const TABLE_EDITOR_DEFAULT_ROWS_PER_PAGE = 100 diff --git a/apps/studio/tests/components/Auth/Auth.constants.test.ts b/apps/studio/tests/components/Auth/Auth.constants.test.ts index 5f179a4b54..f618b77136 100644 --- a/apps/studio/tests/components/Auth/Auth.constants.test.ts +++ b/apps/studio/tests/components/Auth/Auth.constants.test.ts @@ -1,5 +1,6 @@ -import { urlRegex } from 'components/interfaces/Auth/Auth.constants' -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + +import { urlRegex } from '@/components/interfaces/Auth/Auth.constants' describe('Auth.constants: urlRegex', () => { it('should match valid URLs', () => { diff --git a/apps/studio/tests/components/Billing/TaxID.utils.test.ts b/apps/studio/tests/components/Billing/TaxID.utils.test.ts index bfaaca2fca..8574cebbdb 100644 --- a/apps/studio/tests/components/Billing/TaxID.utils.test.ts +++ b/apps/studio/tests/components/Billing/TaxID.utils.test.ts @@ -1,10 +1,11 @@ -import { TAX_IDS } from 'components/interfaces/Organization/BillingSettings/BillingCustomerData/TaxID.constants' +import { describe, expect, test } from 'vitest' + +import { TAX_IDS } from '@/components/interfaces/Organization/BillingSettings/BillingCustomerData/TaxID.constants' import { getEffectiveTaxCountry, resolveStoredTaxId, sanitizeTaxIdValue, -} from 'components/interfaces/Organization/BillingSettings/BillingCustomerData/TaxID.utils' -import { describe, test, expect } from 'vitest' +} from '@/components/interfaces/Organization/BillingSettings/BillingCustomerData/TaxID.utils' /** * We're sanitizing EU tax ids. Stripe expects a prefixed tax id (ATU12345678), diff --git a/apps/studio/tests/components/Billing/UpdateBillingAddressModal.test.tsx b/apps/studio/tests/components/Billing/UpdateBillingAddressModal.test.tsx index e63132af81..bc18daa018 100644 --- a/apps/studio/tests/components/Billing/UpdateBillingAddressModal.test.tsx +++ b/apps/studio/tests/components/Billing/UpdateBillingAddressModal.test.tsx @@ -6,11 +6,12 @@ import type { import { PermissionAction } from '@supabase/shared-types/out/constants' import { screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' -import { UpdateBillingAddressModal } from 'components/interfaces/App/UpdateBillingAddressModal' import { useEffect, type ReactNode } from 'react' -import { createMockOrganization, render } from 'tests/helpers' import { beforeEach, describe, expect, it, vi } from 'vitest' +import { UpdateBillingAddressModal } from '@/components/interfaces/App/UpdateBillingAddressModal' +import { createMockOrganization, render } from '@/tests/helpers' + type MockAddressElementProps = { onChange?: (event: StripeAddressElementChangeEvent) => void onReady?: (element: StripeAddressElement) => void @@ -155,8 +156,8 @@ vi.mock('@stripe/stripe-js', () => ({ loadStripe: vi.fn(() => Promise.resolve(null)), })) -vi.mock('lib/constants', async (importOriginal) => { - const original = (await importOriginal()) as typeof import('lib/constants') +vi.mock('@/lib/constants', async (importOriginal) => { + const original = (await importOriginal()) as typeof import('@/lib/constants') return { ...original, IS_PLATFORM: true } }) @@ -177,7 +178,7 @@ const mockOrg = vi.fn<() => ReturnType | undefine billing_partner: null, }) ) -vi.mock('hooks/misc/useSelectedOrganization', () => ({ +vi.mock('@/hooks/misc/useSelectedOrganization', () => ({ useSelectedOrganizationQuery: () => ({ data: mockOrg() }), })) @@ -185,7 +186,7 @@ const mockCanRead = vi.fn(() => true) const mockCanWrite = vi.fn(() => true) const mockBillingReadLoaded = vi.fn(() => true) const mockBillingWriteLoaded = vi.fn(() => true) -vi.mock('hooks/misc/useCheckPermissions', () => ({ +vi.mock('@/hooks/misc/useCheckPermissions', () => ({ useAsyncCheckPermissions: (action: PermissionAction) => action === PermissionAction.BILLING_READ ? { @@ -204,7 +205,7 @@ const mockCustomerProfile = vi.fn(() => ({ })) const mockProfileLoaded = vi.fn(() => true) const mockProfileError = vi.fn(() => false) -vi.mock('data/organizations/organization-customer-profile-query', () => ({ +vi.mock('@/data/organizations/organization-customer-profile-query', () => ({ useOrganizationCustomerProfileQuery: () => ({ data: mockCustomerProfile(), isSuccess: mockProfileLoaded(), @@ -215,7 +216,7 @@ vi.mock('data/organizations/organization-customer-profile-query', () => ({ const mockTaxId = vi.fn(() => null) const mockTaxIdLoaded = vi.fn(() => true) const mockTaxIdError = vi.fn(() => false) -vi.mock('data/organizations/organization-tax-id-query', () => ({ +vi.mock('@/data/organizations/organization-tax-id-query', () => ({ useOrganizationTaxIdQuery: () => ({ data: mockTaxId(), isSuccess: mockTaxIdLoaded(), @@ -224,20 +225,20 @@ vi.mock('data/organizations/organization-tax-id-query', () => ({ })) const mockUpdateCustomerProfile = vi.fn(() => Promise.resolve()) -vi.mock('data/organizations/organization-customer-profile-update-mutation', () => ({ +vi.mock('@/data/organizations/organization-customer-profile-update-mutation', () => ({ useOrganizationCustomerProfileUpdateMutation: () => ({ mutateAsync: mockUpdateCustomerProfile, }), })) const mockUpdateTaxId = vi.fn(() => Promise.resolve()) -vi.mock('data/organizations/organization-tax-id-update-mutation', () => ({ +vi.mock('@/data/organizations/organization-tax-id-update-mutation', () => ({ useOrganizationTaxIdUpdateMutation: () => ({ mutateAsync: mockUpdateTaxId, }), })) -vi.mock('data/organizations/organizations-query', () => ({ +vi.mock('@/data/organizations/organizations-query', () => ({ invalidateOrganizationsQuery: vi.fn(() => Promise.resolve()), })) diff --git a/apps/studio/tests/components/Billing/useBillingCustomerDataForm.test.tsx b/apps/studio/tests/components/Billing/useBillingCustomerDataForm.test.tsx index b8678359b4..414b4f8d0b 100644 --- a/apps/studio/tests/components/Billing/useBillingCustomerDataForm.test.tsx +++ b/apps/studio/tests/components/Billing/useBillingCustomerDataForm.test.tsx @@ -1,9 +1,9 @@ -import { act, renderHook, waitFor } from '@testing-library/react' import type { StripeAddressElementChangeEvent } from '@stripe/stripe-js' +import { act, renderHook, waitFor } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' -import { useBillingCustomerDataForm } from 'components/interfaces/Organization/BillingSettings/BillingCustomerData/useBillingCustomerDataForm' -import type { CustomerAddress, CustomerTaxId } from 'data/organizations/types' +import { useBillingCustomerDataForm } from '@/components/interfaces/Organization/BillingSettings/BillingCustomerData/useBillingCustomerDataForm' +import type { CustomerAddress, CustomerTaxId } from '@/data/organizations/types' type BillingProfile = ReturnType type CustomerChangeHandler = Parameters< diff --git a/apps/studio/tests/components/CopyButton.test.tsx b/apps/studio/tests/components/CopyButton.test.tsx index e93385a386..4408ab0761 100644 --- a/apps/studio/tests/components/CopyButton.test.tsx +++ b/apps/studio/tests/components/CopyButton.test.tsx @@ -1,9 +1,9 @@ -import { expect, test, vi } from 'vitest' - import { screen } from '@testing-library/dom' import userEvent from '@testing-library/user-event' -import CopyButton from 'components/ui/CopyButton' -import { render } from 'tests/helpers' +import { expect, test, vi } from 'vitest' + +import CopyButton from '@/components/ui/CopyButton' +import { render } from '@/tests/helpers' test('shows copied text', async () => { const callback = vi.fn() diff --git a/apps/studio/tests/components/Database/Replication/ReadReplicaEligibilityWarnings.test.tsx b/apps/studio/tests/components/Database/Replication/ReadReplicaEligibilityWarnings.test.tsx index 9f1858dd2d..10bce0f7d1 100644 --- a/apps/studio/tests/components/Database/Replication/ReadReplicaEligibilityWarnings.test.tsx +++ b/apps/studio/tests/components/Database/Replication/ReadReplicaEligibilityWarnings.test.tsx @@ -7,18 +7,18 @@ import { READ_REPLICAS_MAX_COUNT } from '@/data/read-replicas/replicas-query' import { customRender } from '@/tests/lib/custom-render' vi.mock( - 'components/interfaces/Database/Replication/DestinationPanel/ReadReplicaForm/useCheckEligibilityDeployReplica' + '@/components/interfaces/Database/Replication/DestinationPanel/ReadReplicaForm/useCheckEligibilityDeployReplica' ) -vi.mock('data/projects/project-detail-query', () => ({ +vi.mock('@/data/projects/project-detail-query', () => ({ useProjectDetailQuery: () => ({ data: undefined, isSuccess: false }), })) -vi.mock('data/database/enable-physical-backups-mutation', () => ({ +vi.mock('@/data/database/enable-physical-backups-mutation', () => ({ useEnablePhysicalBackupsMutation: () => ({ mutate: vi.fn(), isPending: false }), })) -vi.mock('hooks/misc/useSelectedOrganization', () => ({ +vi.mock('@/hooks/misc/useSelectedOrganization', () => ({ useSelectedOrganizationQuery: () => ({ data: { slug: 'test-org' } }), })) -vi.mock('hooks/misc/useSelectedProject', () => ({ +vi.mock('@/hooks/misc/useSelectedProject', () => ({ useSelectedProjectQuery: () => ({ data: { dbVersion: 'supabase-postgres-15.1.0' } }), })) diff --git a/apps/studio/tests/components/Editor/RemoveJSONTrailingComma.utils.test.ts b/apps/studio/tests/components/Editor/RemoveJSONTrailingComma.utils.test.ts index 86b416e4f8..67513d57dc 100644 --- a/apps/studio/tests/components/Editor/RemoveJSONTrailingComma.utils.test.ts +++ b/apps/studio/tests/components/Editor/RemoveJSONTrailingComma.utils.test.ts @@ -1,5 +1,6 @@ -import { removeJSONTrailingComma } from 'lib/helpers' -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + +import { removeJSONTrailingComma } from '@/lib/helpers' describe('removeJSONTrailingComma', () => { it('should handle an empty object', () => { diff --git a/apps/studio/tests/components/Editor/SpreadsheetImport.utils.test.ts b/apps/studio/tests/components/Editor/SpreadsheetImport.utils.test.ts index 25f9d7bd98..5b124150f4 100644 --- a/apps/studio/tests/components/Editor/SpreadsheetImport.utils.test.ts +++ b/apps/studio/tests/components/Editor/SpreadsheetImport.utils.test.ts @@ -1,8 +1,9 @@ +import { describe, expect, test } from 'vitest' + import { inferColumnType, parseSpreadsheetText, -} from 'components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.utils' -import { describe, expect, test } from 'vitest' +} from '@/components/interfaces/TableGridEditor/SidePanelEditor/SpreadsheetImport/SpreadsheetImport.utils' describe('SpreadsheetImport.utils: inferColumnType', () => { test('should default column type to text if no rows to infer from', () => { diff --git a/apps/studio/tests/components/Grid/Grid.utils.test.ts b/apps/studio/tests/components/Grid/Grid.utils.test.ts index b7456b0a8a..cdc6d20305 100644 --- a/apps/studio/tests/components/Grid/Grid.utils.test.ts +++ b/apps/studio/tests/components/Grid/Grid.utils.test.ts @@ -1,5 +1,6 @@ -import { formatFilterURLParams, formatSortURLParams } from 'components/grid/SupabaseGrid.utils' -import { describe, test, expect } from 'vitest' +import { describe, expect, test } from 'vitest' + +import { formatFilterURLParams, formatSortURLParams } from '@/components/grid/SupabaseGrid.utils' // Sort URL syntax: `column:order` describe('SupabaseGrid.utils: formatSortURLParams', () => { diff --git a/apps/studio/tests/components/ProjectDropdown.test.ts b/apps/studio/tests/components/ProjectDropdown.test.ts index 2871400fd5..80b9abc7c9 100644 --- a/apps/studio/tests/components/ProjectDropdown.test.ts +++ b/apps/studio/tests/components/ProjectDropdown.test.ts @@ -1,6 +1,7 @@ -import { sanitizeRoute } from 'components/layouts/AppLayout/ProjectDropdown.utils' import { expect, test } from 'vitest' +import { sanitizeRoute } from '@/components/layouts/AppLayout/ProjectDropdown.utils' + test('Should sanitize project routes correctly when switching projects by removing project specific parameters', () => { expect(sanitizeRoute('/project/[ref]', { ref: 'abc' })).toBe('/project/[ref]') expect(sanitizeRoute('/project/[ref]/editor', { ref: 'abc' })).toBe('/project/[ref]/editor') diff --git a/apps/studio/tests/components/Reports/ReportWidget.test.tsx b/apps/studio/tests/components/Reports/ReportWidget.test.tsx index e65533ae4a..06d3826e8f 100644 --- a/apps/studio/tests/components/Reports/ReportWidget.test.tsx +++ b/apps/studio/tests/components/Reports/ReportWidget.test.tsx @@ -1,7 +1,8 @@ import { screen } from '@testing-library/react' -import ReportWidget from 'components/interfaces/Reports/ReportWidget' import { test } from 'vitest' + import { render } from '../../helpers' +import ReportWidget from '@/components/interfaces/Reports/ReportWidget' test('static elements', async () => { render( diff --git a/apps/studio/tests/components/SQLEditor/Results.test.tsx b/apps/studio/tests/components/SQLEditor/Results.test.tsx index d6a92bb34f..8a180954fd 100644 --- a/apps/studio/tests/components/SQLEditor/Results.test.tsx +++ b/apps/studio/tests/components/SQLEditor/Results.test.tsx @@ -1,8 +1,9 @@ import { screen } from '@testing-library/react' -import Results from 'components/interfaces/SQLEditor/UtilityPanel/Results' -import { customRender as render } from 'tests/lib/custom-render' import { expect, test, vi } from 'vitest' +import Results from '@/components/interfaces/SQLEditor/UtilityPanel/Results' +import { customRender as render } from '@/tests/lib/custom-render' + let contextMenuMountCount = 0 vi.mock('ui', async () => { diff --git a/apps/studio/tests/components/SQLEditor/Results.utils.test.ts b/apps/studio/tests/components/SQLEditor/Results.utils.test.ts index 39622a6195..1b2e0300ed 100644 --- a/apps/studio/tests/components/SQLEditor/Results.utils.test.ts +++ b/apps/studio/tests/components/SQLEditor/Results.utils.test.ts @@ -1,8 +1,9 @@ +import { describe, expect, test } from 'vitest' + import { formatCellValue, formatClipboardValue, -} from 'components/interfaces/SQLEditor/UtilityPanel/Results.utils' -import { describe, expect, test } from 'vitest' +} from '@/components/interfaces/SQLEditor/UtilityPanel/Results.utils' describe('formatClipboardValue', () => { test('returns empty string for null', () => { diff --git a/apps/studio/tests/components/Storage/StorageSettings.utils.test.ts b/apps/studio/tests/components/Storage/StorageSettings.utils.test.ts index 6f0ac3e8f0..c9152d4028 100644 --- a/apps/studio/tests/components/Storage/StorageSettings.utils.test.ts +++ b/apps/studio/tests/components/Storage/StorageSettings.utils.test.ts @@ -1,4 +1,6 @@ -import { StorageSizeUnits } from 'components/interfaces/Storage/StorageSettings/StorageSettings.constants' +import { describe, expect, test } from 'vitest' + +import { StorageSizeUnits } from '@/components/interfaces/Storage/StorageSettings/StorageSettings.constants' import { BUCKET_LIMIT_ERROR_PREFIX, convertFromBytes, @@ -6,8 +8,7 @@ import { decodeBucketLimitErrorMessage, encodeBucketLimitErrorMessage, isBucketLimitErrorMessage, -} from 'components/interfaces/Storage/StorageSettings/StorageSettings.utils' -import { describe, expect, test } from 'vitest' +} from '@/components/interfaces/Storage/StorageSettings/StorageSettings.utils' describe('StorageSettings.utils: convertFromBytes', () => { test('should convert 1024 to 1KB', () => { diff --git a/apps/studio/tests/components/ui/Charts/Charts.utils.test.ts b/apps/studio/tests/components/ui/Charts/Charts.utils.test.ts index f059ba53b2..caa6f1aec7 100644 --- a/apps/studio/tests/components/ui/Charts/Charts.utils.test.ts +++ b/apps/studio/tests/components/ui/Charts/Charts.utils.test.ts @@ -1,4 +1,6 @@ import { renderHook } from '@testing-library/react' +import { describe, expect, it, test } from 'vitest' + import { compactNumberFormatter, formatPercentage, @@ -6,8 +8,7 @@ import { numberFormatter, precisionFormatter, useStacked, -} from 'components/ui/Charts/Charts.utils' -import { describe, expect, it, test } from 'vitest' +} from '@/components/ui/Charts/Charts.utils' test('isFloat', () => { expect(isFloat(123)).toBe(false) diff --git a/apps/studio/tests/components/ui/QueryBlock/QueryBlock.utils.test.ts b/apps/studio/tests/components/ui/QueryBlock/QueryBlock.utils.test.ts index c168cbf9f4..99c9910909 100644 --- a/apps/studio/tests/components/ui/QueryBlock/QueryBlock.utils.test.ts +++ b/apps/studio/tests/components/ui/QueryBlock/QueryBlock.utils.test.ts @@ -1,9 +1,10 @@ +import { describe, expect, it } from 'vitest' + import { checkHasNonPositiveValues, formatLogTick, getCumulativeResults, -} from 'components/ui/QueryBlock/QueryBlock.utils' -import { describe, expect, it } from 'vitest' +} from '@/components/ui/QueryBlock/QueryBlock.utils' describe('checkHasNonPositiveValues', () => { it('returns false for an empty array', () => { diff --git a/apps/studio/tests/config/msw.test.ts b/apps/studio/tests/config/msw.test.ts index e26d06bfde..5cb569e21d 100644 --- a/apps/studio/tests/config/msw.test.ts +++ b/apps/studio/tests/config/msw.test.ts @@ -1,5 +1,6 @@ -import { API_URL } from 'lib/constants' -import { test, expect } from 'vitest' +import { expect, test } from 'vitest' + +import { API_URL } from '@/lib/constants' test('MSW works as expected', async () => { const res = await fetch(`${API_URL}/msw/test`) diff --git a/apps/studio/tests/config/router.test.tsx b/apps/studio/tests/config/router.test.tsx index de55f3f056..a6f0b0872a 100644 --- a/apps/studio/tests/config/router.test.tsx +++ b/apps/studio/tests/config/router.test.tsx @@ -1,6 +1,7 @@ import { render, screen, waitFor } from '@testing-library/react' -import { routerMock } from '../lib/route-mock' import { expect, suite, test } from 'vitest' + +import { routerMock } from '../lib/route-mock' import { RouterComponent } from './router' suite('Router Mock', () => { diff --git a/apps/studio/tests/features/explain-visualizer/ExplainVisualizer.parser.test.ts b/apps/studio/tests/features/explain-visualizer/ExplainVisualizer.parser.test.ts index f42f091336..d2c87e8c84 100644 --- a/apps/studio/tests/features/explain-visualizer/ExplainVisualizer.parser.test.ts +++ b/apps/studio/tests/features/explain-visualizer/ExplainVisualizer.parser.test.ts @@ -1,14 +1,15 @@ +import { describe, expect, test } from 'vitest' + import { calculateMaxCost, calculateSummary, parseExplainOutput, parseNodeDetails, -} from 'components/interfaces/ExplainVisualizer/ExplainVisualizer.parser' +} from '@/components/interfaces/ExplainVisualizer/ExplainVisualizer.parser' import type { ExplainNode, QueryPlanRow, -} from 'components/interfaces/ExplainVisualizer/ExplainVisualizer.types' -import { describe, expect, test } from 'vitest' +} from '@/components/interfaces/ExplainVisualizer/ExplainVisualizer.types' // Helper to create QueryPlanRow array from strings const toQueryPlanRows = (lines: string[]): QueryPlanRow[] => diff --git a/apps/studio/tests/features/explain-visualizer/ExplainVisualizer.utils.test.ts b/apps/studio/tests/features/explain-visualizer/ExplainVisualizer.utils.test.ts index c118e9466e..7914b8ddde 100644 --- a/apps/studio/tests/features/explain-visualizer/ExplainVisualizer.utils.test.ts +++ b/apps/studio/tests/features/explain-visualizer/ExplainVisualizer.utils.test.ts @@ -1,11 +1,12 @@ -import { describe, test, expect } from 'vitest' +import { describe, expect, test } from 'vitest' + import { - splitSqlStatements, + formatNodeDuration, isExplainQuery, isExplainSql, isTextFormatExplain, - formatNodeDuration, -} from 'components/interfaces/ExplainVisualizer/ExplainVisualizer.utils' + splitSqlStatements, +} from '@/components/interfaces/ExplainVisualizer/ExplainVisualizer.utils' describe('isExplainQuery', () => { test('returns true for valid EXPLAIN result rows', () => { diff --git a/apps/studio/tests/features/logs/LogTable.test.tsx b/apps/studio/tests/features/logs/LogTable.test.tsx index 9ce8b87478..d44212c939 100644 --- a/apps/studio/tests/features/logs/LogTable.test.tsx +++ b/apps/studio/tests/features/logs/LogTable.test.tsx @@ -1,14 +1,15 @@ import { screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' -import { LogTable } from 'components/interfaces/Settings/Logs/LogTable' import dayjs from 'dayjs' import customParseFormat from 'dayjs/plugin/customParseFormat' import relativeTime from 'dayjs/plugin/relativeTime' import timezone from 'dayjs/plugin/timezone' import utc from 'dayjs/plugin/utc' -import { customRender as render } from 'tests/lib/custom-render' import { expect, test, vi } from 'vitest' +import { LogTable } from '@/components/interfaces/Settings/Logs/LogTable' +import { customRender as render } from '@/tests/lib/custom-render' + dayjs.extend(customParseFormat) dayjs.extend(utc) dayjs.extend(timezone) diff --git a/apps/studio/tests/features/logs/Logs.Datepickers.test.tsx b/apps/studio/tests/features/logs/Logs.Datepickers.test.tsx index 55320b202b..ede5ee7722 100644 --- a/apps/studio/tests/features/logs/Logs.Datepickers.test.tsx +++ b/apps/studio/tests/features/logs/Logs.Datepickers.test.tsx @@ -1,19 +1,20 @@ import { screen, within } from '@testing-library/react' import userEvent from '@testing-library/user-event' -import { - LogsDatePicker, - parseCustomInput, - generateDynamicHelper, - generateDynamicHelpers, - generateHelpersFromInput, -} from 'components/interfaces/Settings/Logs/Logs.DatePickers' -import { PREVIEWER_DATEPICKER_HELPERS } from 'components/interfaces/Settings/Logs/Logs.constants' -import { DatetimeHelper } from 'components/interfaces/Settings/Logs/Logs.types' import dayjs from 'dayjs' import timezone from 'dayjs/plugin/timezone' import utc from 'dayjs/plugin/utc' import { describe, expect, test, vi } from 'vitest' + import { render } from '../../helpers' +import { PREVIEWER_DATEPICKER_HELPERS } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { + generateDynamicHelper, + generateDynamicHelpers, + generateHelpersFromInput, + LogsDatePicker, + parseCustomInput, +} from '@/components/interfaces/Settings/Logs/Logs.DatePickers' +import { DatetimeHelper } from '@/components/interfaces/Settings/Logs/Logs.types' dayjs.extend(timezone) dayjs.extend(utc) diff --git a/apps/studio/tests/features/logs/Logs.utils.test.ts b/apps/studio/tests/features/logs/Logs.utils.test.ts index ace442b614..53f285d01f 100644 --- a/apps/studio/tests/features/logs/Logs.utils.test.ts +++ b/apps/studio/tests/features/logs/Logs.utils.test.ts @@ -1,13 +1,14 @@ +import dayjs from 'dayjs' +import utc from 'dayjs/plugin/utc' +import { describe, expect, test } from 'vitest' + import { checkForILIKEClause, checkForWildcard, checkForWithClause, fillTimeseries, unixMicroToIsoTimestamp, -} from 'components/interfaces/Settings/Logs/Logs.utils' -import { describe, test, expect } from 'vitest' -import dayjs from 'dayjs' -import utc from 'dayjs/plugin/utc' +} from '@/components/interfaces/Settings/Logs/Logs.utils' dayjs.extend(utc) diff --git a/apps/studio/tests/features/logs/LogsFilterPopover.test.tsx b/apps/studio/tests/features/logs/LogsFilterPopover.test.tsx index 6a04090138..057ec714ab 100644 --- a/apps/studio/tests/features/logs/LogsFilterPopover.test.tsx +++ b/apps/studio/tests/features/logs/LogsFilterPopover.test.tsx @@ -1,6 +1,7 @@ -import { render, screen, fireEvent, waitFor } from '@testing-library/react' -import LogsFilterPopover from 'components/interfaces/Settings/Logs/LogsFilterPopover' -import { describe, it, expect, vi } from 'vitest' +import { fireEvent, render, screen, waitFor } from '@testing-library/react' +import { describe, expect, it, vi } from 'vitest' + +import LogsFilterPopover from '@/components/interfaces/Settings/Logs/LogsFilterPopover' describe('LogsFilterPopover', () => { const mockOptions = { diff --git a/apps/studio/tests/features/logs/LogsPreviewer.test.tsx b/apps/studio/tests/features/logs/LogsPreviewer.test.tsx index 463f2351ab..2abb61d049 100644 --- a/apps/studio/tests/features/logs/LogsPreviewer.test.tsx +++ b/apps/studio/tests/features/logs/LogsPreviewer.test.tsx @@ -1,20 +1,20 @@ import { screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' -import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants' -import { - calculateBarClickTimeRange, - LogsPreviewer, -} from 'components/interfaces/Settings/Logs/LogsPreviewer' import dayjs from 'dayjs' import utc from 'dayjs/plugin/utc' -import useLogsPreview from 'hooks/analytics/useLogsPreview' -import { customRender, customRenderHook } from 'tests/lib/custom-render' -import { addAPIMock } from 'tests/lib/msw' import { beforeEach, describe, expect, test, vi } from 'vitest' import { LOGS_API_MOCKS } from './logs.mocks' +import { LogsTableName } from '@/components/interfaces/Settings/Logs/Logs.constants' +import { + calculateBarClickTimeRange, + LogsPreviewer, +} from '@/components/interfaces/Settings/Logs/LogsPreviewer' +import useLogsPreview from '@/hooks/analytics/useLogsPreview' +import { customRender, customRenderHook } from '@/tests/lib/custom-render' +import { addAPIMock } from '@/tests/lib/msw' -vi.mock('components/interfaces/Settings/Logs/LogTable', () => ({ +vi.mock('@/components/interfaces/Settings/Logs/LogTable', () => ({ LogTable: ({ data }: { data: any[] }) => (
{data.map((row) => ( @@ -39,7 +39,7 @@ vi.mock('common', async (importOriginal) => { } }) -vi.mock('lib/gotrue', async (importOriginal) => ({ +vi.mock('@/lib/gotrue', async (importOriginal) => ({ ...(await importOriginal()), auth: { onAuthStateChange: vi.fn() }, })) diff --git a/apps/studio/tests/features/logs/LogsQueryPanel.test.tsx b/apps/studio/tests/features/logs/LogsQueryPanel.test.tsx index 7fa7c5322d..124257c52c 100644 --- a/apps/studio/tests/features/logs/LogsQueryPanel.test.tsx +++ b/apps/studio/tests/features/logs/LogsQueryPanel.test.tsx @@ -1,8 +1,8 @@ import { screen } from '@testing-library/react' import { expect, test } from 'vitest' -import LogsQueryPanel from 'components/interfaces/Settings/Logs/LogsQueryPanel' -import { render } from 'tests/helpers' +import LogsQueryPanel from '@/components/interfaces/Settings/Logs/LogsQueryPanel' +import { render } from '@/tests/helpers' test('run and clear', async () => { render( diff --git a/apps/studio/tests/features/logs/logs-query.test.tsx b/apps/studio/tests/features/logs/logs-query.test.tsx index 7d6db95321..5be8f1a0a1 100644 --- a/apps/studio/tests/features/logs/logs-query.test.tsx +++ b/apps/studio/tests/features/logs/logs-query.test.tsx @@ -1,12 +1,13 @@ import { fireEvent, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' import dayjs from 'dayjs' -import { LogsExplorerPage } from 'pages/project/[ref]/logs/explorer/index' -import { clickDropdown } from 'tests/helpers' -import { customRender as render } from 'tests/lib/custom-render' -import { routerMock } from 'tests/lib/route-mock' import { beforeAll, describe, expect, test, vi } from 'vitest' +import { LogsExplorerPage } from '@/pages/project/[ref]/logs/explorer/index' +import { clickDropdown } from '@/tests/helpers' +import { customRender as render } from '@/tests/lib/custom-render' +import { routerMock } from '@/tests/lib/route-mock' + const router = routerMock beforeAll(() => { @@ -20,7 +21,7 @@ beforeAll(() => { useParams: vi.fn(() => ({ ref: 'projectRef' })), } }) - vi.mock('lib/gotrue', () => ({ + vi.mock('@/lib/gotrue', () => ({ auth: { onAuthStateChange: vi.fn() }, })) }) diff --git a/apps/studio/tests/features/reports/geo-utils.test.ts b/apps/studio/tests/features/reports/geo-utils.test.ts index 90f17df1a5..5a46841c04 100644 --- a/apps/studio/tests/features/reports/geo-utils.test.ts +++ b/apps/studio/tests/features/reports/geo-utils.test.ts @@ -2,12 +2,12 @@ import { describe, expect, test } from 'vitest' import { buildCountsByIso2, - getFillColor, - isMicroCountry, - isKnownCountryCode, computeMarkerRadius, + getFillColor, + isKnownCountryCode, + isMicroCountry, MAP_CHART_THEME, -} from 'components/interfaces/Reports/utils/geo' +} from '@/components/interfaces/Reports/utils/geo' describe('geo utils', () => { test('buildCountsByIso2 aggregates and normalizes input', () => { diff --git a/apps/studio/tests/features/reports/storage-report.test.tsx b/apps/studio/tests/features/reports/storage-report.test.tsx index 03f87e61f4..ad77ae4fee 100644 --- a/apps/studio/tests/features/reports/storage-report.test.tsx +++ b/apps/studio/tests/features/reports/storage-report.test.tsx @@ -1,8 +1,8 @@ import { screen } from '@testing-library/react' import { test } from 'vitest' -import { StorageReport } from 'pages/project/[ref]/observability/storage' -import { render } from 'tests/helpers' +import { StorageReport } from '@/pages/project/[ref]/observability/storage' +import { render } from '@/tests/helpers' // [Joshen] Mock data for ApiReport is in __mocks__/hooks/useStorageReport // I don't think this is an ideal set up as the mock data is not clear in this file itself diff --git a/apps/studio/tests/fixtures.ts b/apps/studio/tests/fixtures.ts index 11eb60f7e4..4dcf714c07 100644 --- a/apps/studio/tests/fixtures.ts +++ b/apps/studio/tests/fixtures.ts @@ -1,4 +1,4 @@ -import type { LogData } from 'components/interfaces/Settings/Logs/Logs.types' +import type { LogData } from '@/components/interfaces/Settings/Logs/Logs.types' export const logDataFixture = (attrs: Partial): LogData => ({ id: `some-uuid-${new Date().getTime()}`, diff --git a/apps/studio/tests/helpers.tsx b/apps/studio/tests/helpers.tsx index e40d94ae9d..9a071749a9 100644 --- a/apps/studio/tests/helpers.tsx +++ b/apps/studio/tests/helpers.tsx @@ -2,13 +2,11 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { fireEvent, getByText, render as originalRender, screen } from '@testing-library/react' import type React from 'react' import { useState } from 'react' - -// End of third-party imports - -import { ProjectInfoInfinite } from 'data/projects/projects-infinite-query' -import type { Organization } from 'types' import { TooltipProvider } from 'ui' +import { ProjectInfoInfinite } from '@/data/projects/projects-infinite-query' +import type { Organization } from '@/types' + interface SelectorOptions { container?: HTMLElement } diff --git a/apps/studio/tests/lib/custom-render.tsx b/apps/studio/tests/lib/custom-render.tsx index 853744a0a3..e8dd5f5084 100644 --- a/apps/studio/tests/lib/custom-render.tsx +++ b/apps/studio/tests/lib/custom-render.tsx @@ -1,10 +1,11 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query' -import { type RenderOptions, render, renderHook } from '@testing-library/react' +import { render, renderHook, type RenderOptions } from '@testing-library/react' import { NuqsTestingAdapter } from 'nuqs/adapters/testing' +import { TooltipProvider } from 'ui' + // End of third-party imports -import { ProfileContext, type ProfileContextType } from 'lib/profile' -import { TooltipProvider } from 'ui' +import { ProfileContext, type ProfileContextType } from '@/lib/profile' type AdapterProps = Partial[0]> diff --git a/apps/studio/tests/lib/msw-global-api-mocks.ts b/apps/studio/tests/lib/msw-global-api-mocks.ts index 9b46881f3c..086fff9f18 100644 --- a/apps/studio/tests/lib/msw-global-api-mocks.ts +++ b/apps/studio/tests/lib/msw-global-api-mocks.ts @@ -1,5 +1,6 @@ -import { API_URL } from 'lib/constants' -import { HttpResponse, http } from 'msw' +import { http, HttpResponse } from 'msw' + +import { API_URL } from '@/lib/constants' export const GlobalAPIMocks = [ http.get(`${API_URL}/msw/test`, () => { diff --git a/apps/studio/tests/lib/msw.ts b/apps/studio/tests/lib/msw.ts index 070b38ff79..ea73810f52 100644 --- a/apps/studio/tests/lib/msw.ts +++ b/apps/studio/tests/lib/msw.ts @@ -1,8 +1,9 @@ -import { setupServer } from 'msw/node' -import { GlobalAPIMocks } from './msw-global-api-mocks' import { http, HttpResponse, HttpResponseResolver } from 'msw' -import { API_URL } from 'lib/constants' +import { setupServer } from 'msw/node' + import type { paths } from '../../data/api' +import { GlobalAPIMocks } from './msw-global-api-mocks' +import { API_URL } from '@/lib/constants' export const mswServer = setupServer(...GlobalAPIMocks) diff --git a/apps/studio/tests/lib/profile-helpers.tsx b/apps/studio/tests/lib/profile-helpers.tsx index bb69c4da72..1ab2c8a0dc 100644 --- a/apps/studio/tests/lib/profile-helpers.tsx +++ b/apps/studio/tests/lib/profile-helpers.tsx @@ -1,5 +1,5 @@ -import type { Profile } from 'data/profile/types' -import type { ProfileContextType } from 'lib/profile' +import type { Profile } from '@/data/profile/types' +import type { ProfileContextType } from '@/lib/profile' export const createMockProfile = (overrides: Partial = {}): Profile => { const baseProfile: Profile = { diff --git a/apps/studio/tests/lib/route-mock.ts b/apps/studio/tests/lib/route-mock.ts index 4dca8b2149..070cba9b3a 100644 --- a/apps/studio/tests/lib/route-mock.ts +++ b/apps/studio/tests/lib/route-mock.ts @@ -1,7 +1,7 @@ import { glob } from 'fs/promises' +import { join, normalize, posix, sep } from 'path' import _routerMock from 'next-router-mock' import { createDynamicRouteParser } from 'next-router-mock/dynamic-routes' -import { normalize, posix, sep, join } from 'path' export const routerMock = _routerMock diff --git a/apps/studio/tests/pages/account/me.test.tsx b/apps/studio/tests/pages/account/me.test.tsx index 98777029a0..7155febbe1 100644 --- a/apps/studio/tests/pages/account/me.test.tsx +++ b/apps/studio/tests/pages/account/me.test.tsx @@ -2,7 +2,7 @@ import { render, screen } from '@testing-library/react' import type { ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' -import PreferencesPage from 'pages/account/me' +import PreferencesPage from '@/pages/account/me' const { mockIsPlatform, mockUseIsFeatureEnabled, mockUseProfile } = vi.hoisted(() => ({ mockIsPlatform: { value: true }, @@ -10,8 +10,8 @@ const { mockIsPlatform, mockUseIsFeatureEnabled, mockUseProfile } = vi.hoisted(( mockUseProfile: vi.fn(), })) -vi.mock('lib/constants', async () => { - const actual = await vi.importActual>('lib/constants') +vi.mock('@/lib/constants', async () => { + const actual = await vi.importActual>('@/lib/constants') return { ...actual, get IS_PLATFORM() { @@ -20,60 +20,60 @@ vi.mock('lib/constants', async () => { } }) -vi.mock('hooks/misc/useIsFeatureEnabled', () => ({ +vi.mock('@/hooks/misc/useIsFeatureEnabled', () => ({ useIsFeatureEnabled: mockUseIsFeatureEnabled, })) -vi.mock('lib/profile', () => ({ +vi.mock('@/lib/profile', () => ({ useProfile: mockUseProfile, })) -vi.mock('components/layouts/AccountLayout/AccountLayout', () => ({ +vi.mock('@/components/layouts/AccountLayout/AccountLayout', () => ({ __esModule: true, default: ({ children }: { children: ReactNode }) =>
{children}
, })) -vi.mock('components/layouts/AppLayout/AppLayout', () => ({ +vi.mock('@/components/layouts/AppLayout/AppLayout', () => ({ AppLayout: ({ children }: { children: ReactNode }) =>
{children}
, })) -vi.mock('components/layouts/DefaultLayout', () => ({ +vi.mock('@/components/layouts/DefaultLayout', () => ({ DefaultLayout: ({ children }: { children: ReactNode }) =>
{children}
, })) -vi.mock('components/interfaces/Account/Preferences/ProfileInformation', () => ({ +vi.mock('@/components/interfaces/Account/Preferences/ProfileInformation', () => ({ ProfileInformation: () =>
ProfileInformation
, })) -vi.mock('components/interfaces/Account/Preferences/AccountIdentities', () => ({ +vi.mock('@/components/interfaces/Account/Preferences/AccountIdentities', () => ({ AccountIdentities: () =>
AccountIdentities
, })) -vi.mock('components/interfaces/Account/Preferences/AccountConnections', () => ({ +vi.mock('@/components/interfaces/Account/Preferences/AccountConnections', () => ({ AccountConnections: () =>
AccountConnections
, })) -vi.mock('components/interfaces/Account/Preferences/ThemeSettings', () => ({ +vi.mock('@/components/interfaces/Account/Preferences/ThemeSettings', () => ({ ThemeSettings: () =>
ThemeSettings
, })) -vi.mock('components/interfaces/Account/Preferences/HotkeySettings', () => ({ +vi.mock('@/components/interfaces/Account/Preferences/HotkeySettings', () => ({ HotkeySettings: () =>
HotkeySettings
, })) -vi.mock('components/interfaces/Account/Preferences/DashboardSettings', () => ({ +vi.mock('@/components/interfaces/Account/Preferences/DashboardSettings', () => ({ DashboardSettings: () =>
DashboardSettings
, })) -vi.mock('components/interfaces/Account/Preferences/AnalyticsSettings', () => ({ +vi.mock('@/components/interfaces/Account/Preferences/AnalyticsSettings', () => ({ AnalyticsSettings: () =>
AnalyticsSettings
, })) -vi.mock('components/interfaces/Account/Preferences/AccountDeletion', () => ({ +vi.mock('@/components/interfaces/Account/Preferences/AccountDeletion', () => ({ AccountDeletion: () =>
AccountDeletion
, })) -vi.mock('components/ui/AlertError', () => ({ +vi.mock('@/components/ui/AlertError', () => ({ AlertError: () =>
AlertError
, })) diff --git a/apps/studio/tests/pages/api/mcp/index.test.ts b/apps/studio/tests/pages/api/mcp/index.test.ts index e8159af8a7..912070ac62 100644 --- a/apps/studio/tests/pages/api/mcp/index.test.ts +++ b/apps/studio/tests/pages/api/mcp/index.test.ts @@ -1,7 +1,8 @@ -import { describe, it, expect, beforeEach, vi } from 'vitest' import { createMocks } from 'node-mocks-http' -import { mswServer } from 'tests/lib/msw' +import { beforeEach, describe, expect, it, vi } from 'vitest' + import handler from '../../../../pages/api/mcp/index' +import { mswServer } from '@/tests/lib/msw' // Mock the MCP SDK and Supabase MCP server to avoid Hono/node-mocks-http compatibility issues. // diff --git a/apps/studio/tests/pages/org/routeSlug.utils.test.ts b/apps/studio/tests/pages/org/routeSlug.utils.test.ts index 90dc6bbf2c..c94a8261cd 100644 --- a/apps/studio/tests/pages/org/routeSlug.utils.test.ts +++ b/apps/studio/tests/pages/org/routeSlug.utils.test.ts @@ -1,6 +1,7 @@ -import { buildOrgUrl } from 'components/interfaces/Organization/Organization.utils' import { describe, expect, test } from 'vitest' +import { buildOrgUrl } from '@/components/interfaces/Organization/Organization.utils' + describe('buildOrgUrl', () => { describe('when slug is undefined (bare /org/_ route)', () => { test('returns the org project list url', () => { diff --git a/apps/studio/tests/pages/project/[ref]/index.test.tsx b/apps/studio/tests/pages/project/[ref]/index.test.tsx index 83f8a5916a..795489ab77 100644 --- a/apps/studio/tests/pages/project/[ref]/index.test.tsx +++ b/apps/studio/tests/pages/project/[ref]/index.test.tsx @@ -1,24 +1,25 @@ import { screen } from '@testing-library/react' -import { customRender as render } from 'tests/lib/custom-render' import { beforeAll, describe, expect, test, vi } from 'vitest' -vi.mock('components/interfaces/Home/Home', () => ({ +import { customRender as render } from '@/tests/lib/custom-render' + +vi.mock('@/components/interfaces/Home/Home', () => ({ Home: () =>
, })) -vi.mock('components/interfaces/ProjectHome/Home', () => ({ +vi.mock('@/components/interfaces/ProjectHome/Home', () => ({ ProjectHome: () =>
, })) -vi.mock('components/layouts/DefaultLayout', () => ({ +vi.mock('@/components/layouts/DefaultLayout', () => ({ default: ({ children }: { children: React.ReactNode }) => <>{children}, })) -vi.mock('components/layouts/ProjectLayout', () => ({ +vi.mock('@/components/layouts/ProjectLayout', () => ({ ProjectLayoutWithAuth: ({ children }: { children: React.ReactNode }) => <>{children}, })) -vi.mock('lib/gotrue', () => ({ +vi.mock('@/lib/gotrue', () => ({ auth: { onAuthStateChange: vi.fn() }, })) @@ -31,7 +32,7 @@ describe('when IS_PLATFORM is true', () => { }) test('renders ProjectHome', async () => { - const { default: HomePage } = await import('pages/project/[ref]/index') + const { default: HomePage } = await import('@/pages/project/[ref]/index') render() expect(screen.getByTestId('project-home')).toBeInTheDocument() expect(screen.queryByTestId('old-home')).not.toBeInTheDocument() @@ -48,7 +49,7 @@ describe('when IS_PLATFORM is false', () => { }) test('renders Home', async () => { - const { default: HomePage } = await import('pages/project/[ref]/index') + const { default: HomePage } = await import('@/pages/project/[ref]/index') render() expect(screen.getByTestId('old-home')).toBeInTheDocument() expect(screen.queryByTestId('project-home')).not.toBeInTheDocument() diff --git a/apps/studio/tests/pages/project/[ref]/settings/dashboard.test.tsx b/apps/studio/tests/pages/project/[ref]/settings/dashboard.test.tsx index 4ee2c7c8c3..abdcc2a2de 100644 --- a/apps/studio/tests/pages/project/[ref]/settings/dashboard.test.tsx +++ b/apps/studio/tests/pages/project/[ref]/settings/dashboard.test.tsx @@ -1,8 +1,9 @@ import { render, screen, waitFor } from '@testing-library/react' -import DashboardPage from 'pages/project/[ref]/settings/dashboard' import type { ReactNode } from 'react' import { beforeEach, describe, expect, it, vi } from 'vitest' +import DashboardPage from '@/pages/project/[ref]/settings/dashboard' + const { mockIsPlatform, mockRouter, mockUseFlag } = vi.hoisted(() => ({ mockIsPlatform: { value: true }, mockRouter: { @@ -15,8 +16,8 @@ vi.mock('common', () => ({ useFlag: mockUseFlag, })) -vi.mock('lib/constants', async () => { - const actual = await vi.importActual>('lib/constants') +vi.mock('@/lib/constants', async () => { + const actual = await vi.importActual>('@/lib/constants') return { ...actual, get IS_PLATFORM() { @@ -29,12 +30,12 @@ vi.mock('next/router', () => ({ useRouter: () => mockRouter, })) -vi.mock('components/layouts/DefaultLayout', () => ({ +vi.mock('@/components/layouts/DefaultLayout', () => ({ __esModule: true, default: ({ children }: { children: ReactNode }) =>
{children}
, })) -vi.mock('components/layouts/ProjectSettingsLayout/SettingsLayout', () => ({ +vi.mock('@/components/layouts/ProjectSettingsLayout/SettingsLayout', () => ({ __esModule: true, default: ({ children }: { children: ReactNode }) =>
{children}
, })) diff --git a/apps/studio/tests/unit/get-return-to-path.test.ts b/apps/studio/tests/unit/get-return-to-path.test.ts index aebb7aee4d..38f4acb83f 100644 --- a/apps/studio/tests/unit/get-return-to-path.test.ts +++ b/apps/studio/tests/unit/get-return-to-path.test.ts @@ -1,5 +1,6 @@ -import { getReturnToPath, DEFAULT_FALLBACK_PATH } from 'lib/gotrue' -import { describe, it, expect } from 'vitest' +import { describe, expect, it } from 'vitest' + +import { DEFAULT_FALLBACK_PATH, getReturnToPath } from '@/lib/gotrue' describe(`getReturnToPath`, () => { it(`returns to ${DEFAULT_FALLBACK_PATH} when no fallback is provided`, () => { diff --git a/apps/studio/tests/unit/lints/mcp-advisors.test.ts b/apps/studio/tests/unit/lints/mcp-advisors.test.ts index 3e822f7ea3..b8fa25a565 100644 --- a/apps/studio/tests/unit/lints/mcp-advisors.test.ts +++ b/apps/studio/tests/unit/lints/mcp-advisors.test.ts @@ -1,14 +1,17 @@ -import { describe, it, expect, vi, beforeEach } from 'vitest' -import { DEFAULT_EXPOSED_SCHEMAS } from 'lib/api/self-hosted/constants' +import { beforeEach, describe, expect, it, vi } from 'vitest' + +import { DEFAULT_EXPOSED_SCHEMAS } from '@/lib/api/self-hosted/constants' +import { getDebuggingOperations } from '@/lib/api/self-hosted/mcp' + +const mockGetLints = vi.fn() // Mock getLints to capture what arguments the MCP operations pass -const mockGetLints = vi.fn() -vi.mock('lib/api/self-hosted/lints', () => ({ +vi.mock('@/lib/api/self-hosted/lints', () => ({ getLints: (...args: unknown[]) => mockGetLints(...args), })) // Mock getProjectSettings to avoid assertSelfHosted() check -vi.mock('lib/api/self-hosted/settings', () => ({ +vi.mock('@/lib/api/self-hosted/settings', () => ({ getProjectSettings: () => ({ app_config: { db_schema: 'public', @@ -19,9 +22,6 @@ vi.mock('lib/api/self-hosted/settings', () => ({ }), })) -// Must import after mock setup -import { getDebuggingOperations } from 'lib/api/self-hosted/mcp' - describe('MCP advisor operations pass exposedSchemas to getLints', () => { const headers = { Authorization: 'Bearer test' } diff --git a/apps/studio/tests/unit/logs/logsDateRange.test.ts b/apps/studio/tests/unit/logs/logsDateRange.test.ts index ba95737985..21b3f403ba 100644 --- a/apps/studio/tests/unit/logs/logsDateRange.test.ts +++ b/apps/studio/tests/unit/logs/logsDateRange.test.ts @@ -4,11 +4,11 @@ import { describe, expect, it, vi } from 'vitest' import { EXPLORER_DATEPICKER_HELPERS, getDefaultHelper, -} from 'components/interfaces/Settings/Logs/Logs.constants' +} from '@/components/interfaces/Settings/Logs/Logs.constants' import { buildLogQueryParams, resolveLogDateRange, -} from 'components/interfaces/Settings/Logs/logsDateRange' +} from '@/components/interfaces/Settings/Logs/logsDateRange' const lastHourHelper = getDefaultHelper(EXPLORER_DATEPICKER_HELPERS) diff --git a/apps/studio/tests/vitestSetup.ts b/apps/studio/tests/vitestSetup.ts index df9816a4bb..18eb8f9546 100644 --- a/apps/studio/tests/vitestSetup.ts +++ b/apps/studio/tests/vitestSetup.ts @@ -1,13 +1,15 @@ import '@testing-library/jest-dom/vitest' + import { cleanup, configure } from '@testing-library/react' +import dayjs from 'dayjs' +import relativeTime from 'dayjs/plugin/relativeTime' +import timezone from 'dayjs/plugin/timezone' +import utc from 'dayjs/plugin/utc' import { createDynamicRouteParser } from 'next-router-mock/dist/dynamic-routes' import { afterAll, afterEach, beforeAll, vi } from 'vitest' -import { routerMock } from './lib/route-mock' + import { mswServer } from './lib/msw' -import dayjs from 'dayjs' -import utc from 'dayjs/plugin/utc' -import timezone from 'dayjs/plugin/timezone' -import relativeTime from 'dayjs/plugin/relativeTime' +import { routerMock } from './lib/route-mock' dayjs.extend(utc) dayjs.extend(timezone) diff --git a/apps/studio/tsconfig.json b/apps/studio/tsconfig.json index 92d8ecb6b0..f59d7161a6 100644 --- a/apps/studio/tsconfig.json +++ b/apps/studio/tsconfig.json @@ -6,35 +6,7 @@ "lib": ["dom", "dom.iterable", "esnext"], "paths": { "@/*": ["./*"], - "@ui/*": ["./../../packages/ui/src/*"], // handle ui package paths - // @deprecated: use @/ prefix instead - "components/*": ["./components/*"], - // @deprecated: use @/ prefix instead - "data/*": ["./data/*"], - // @deprecated: use @/ prefix instead - "evals/*": ["./evals/*"], - // @deprecated: use @/ prefix instead - "fonts/*": ["./fonts/*"], - // @deprecated: use @/ prefix instead - "hooks/*": ["./hooks/*"], - // @deprecated: use @/ prefix instead - "lib/*": ["./lib/*"], - // @deprecated: use @/ prefix instead - "pages/*": ["./pages/*"], - // @deprecated: use @/ prefix instead - "public/*": ["./public/*"], - // @deprecated: use @/ prefix instead - "state/*": ["./state/*"], - // @deprecated: use @/ prefix instead - "static-data/*": ["./static-data/*"], - // @deprecated: use @/ prefix instead - "styles/*": ["./styles/*"], - // @deprecated: use @/ prefix instead - "tests/*": ["./tests/*"], - // @deprecated: use @/ prefix instead - "types": ["./types"], - // @deprecated: use @/ prefix instead - "types/*": ["./types/*"] + "@ui/*": ["./../../packages/ui/src/*"] // handle ui package paths }, "plugins": [{ "name": "next" }] }, diff --git a/apps/studio/types/base.ts b/apps/studio/types/base.ts index 7d2d5757d4..d198cdccb4 100644 --- a/apps/studio/types/base.ts +++ b/apps/studio/types/base.ts @@ -1,8 +1,9 @@ import type { PermissionAction } from '@supabase/shared-types/out/constants' -import type { OrganizationBase } from 'data/organizations/organizations-query' -import type { PlanId } from 'data/subscriptions/types' import type jsonLogic from 'json-logic-js' -import type { ManagedBy } from 'lib/constants/infrastructure' + +import type { OrganizationBase } from '@/data/organizations/organizations-query' +import type { PlanId } from '@/data/subscriptions/types' +import type { ManagedBy } from '@/lib/constants/infrastructure' export interface Organization extends OrganizationBase { managed_by: ManagedBy diff --git a/apps/studio/types/ui.ts b/apps/studio/types/ui.ts index f642cce1fc..27b21d9a9b 100644 --- a/apps/studio/types/ui.ts +++ b/apps/studio/types/ui.ts @@ -1,5 +1,6 @@ import type { PostgresColumn } from '@supabase/postgres-meta' -import { ProjectLogStatsVariables } from 'data/analytics/project-log-stats-query' + +import { ProjectLogStatsVariables } from '@/data/analytics/project-log-stats-query' export interface Notification { category: 'info' | 'error' | 'success' | 'loading' diff --git a/apps/studio/types/userContent.ts b/apps/studio/types/userContent.ts index 71dfab7b74..79200ca7f7 100644 --- a/apps/studio/types/userContent.ts +++ b/apps/studio/types/userContent.ts @@ -1,4 +1,4 @@ -import { ChartConfig } from 'components/interfaces/SQLEditor/UtilityPanel/ChartConfig' +import { ChartConfig } from '@/components/interfaces/SQLEditor/UtilityPanel/ChartConfig' export interface UserContent< T = Dashboards.Content | SqlSnippets.Content | LogSqlSnippets.Content, diff --git a/prettier.config.mjs b/prettier.config.mjs index 7579c3e4d7..cfebffdb7d 100644 --- a/prettier.config.mjs +++ b/prettier.config.mjs @@ -28,7 +28,7 @@ if (process.env.SORT_IMPORTS !== 'false') { options = { ...options, ...sortImportsOptions } } else { options.overrides.push({ - files: 'apps/studio/{components,data,hooks,state}/**/*.{js,jsx,ts,tsx}', + files: 'apps/studio/**/*.{js,jsx,ts,tsx}', options: sortImportsOptions, }) }