From 6bc49577ca6f8d0280759f86d86de7e83134e073 Mon Sep 17 00:00:00 2001 From: Darshan Date: Thu, 5 Mar 2026 14:45:05 +0530 Subject: [PATCH] fix: migration type issues. --- bun.lock | 4 +- package.json | 2 +- src/lib/stores/migration.ts | 95 +++++++++---------- src/lib/stores/sdk.ts | 2 +- .../(migration-wizard)/resource-form.svelte | 35 ++++--- .../(migration-wizard)/wizard.svelte | 4 +- .../migrations/(import)/wizard.svelte | 27 ++++-- 7 files changed, 95 insertions(+), 74 deletions(-) diff --git a/bun.lock b/bun.lock index 3c46fd60c..b3a79ed60 100644 --- a/bun.lock +++ b/bun.lock @@ -6,7 +6,7 @@ "name": "@appwrite/console", "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@c91a6f3", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@13c8c34", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@df765cc", "@appwrite.io/pink-legacy": "^1.0.3", @@ -122,7 +122,7 @@ "@analytics/type-utils": ["@analytics/type-utils@0.6.4", "", {}, "sha512-Ou1gQxFakOWLcPnbFVsrPb8g1wLLUZYYJXDPjHkG07+5mustGs5yqACx42UAu4A6NszNN6Z5gGxhyH45zPWRxw=="], - "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@c91a6f3", { "dependencies": { "bignumber.js": "9.0.0", "json-bigint": "1.0.0" } }], + "@appwrite.io/console": ["@appwrite.io/console@https://pkg.vc/-/@appwrite/@appwrite.io/console@13c8c34", { "dependencies": { "json-bigint": "1.0.0" } }], "@appwrite.io/pink-icons": ["@appwrite.io/pink-icons@0.25.0", "", {}, "sha512-0O3i2oEuh5mWvjO80i+X6rbzrWLJ1m5wmv2/M3a1p2PyBJsFxN8xQMTEmTn3Wl/D26SsM7SpzbdW6gmfgoVU9Q=="], diff --git a/package.json b/package.json index 432f69cd5..e996bbaf5 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ }, "dependencies": { "@ai-sdk/svelte": "^1.1.24", - "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@c91a6f3", + "@appwrite.io/console": "https://pkg.vc/-/@appwrite/@appwrite.io/console@13c8c34", "@appwrite.io/pink-icons": "0.25.0", "@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@df765cc", "@appwrite.io/pink-legacy": "^1.0.3", diff --git a/src/lib/stores/migration.ts b/src/lib/stores/migration.ts index 534cddc6a..4d1205a72 100644 --- a/src/lib/stores/migration.ts +++ b/src/lib/stores/migration.ts @@ -1,5 +1,10 @@ import { writable } from 'svelte/store'; -import { Resources } from '@appwrite.io/console'; +import { + AppwriteMigrationResource, + FirebaseMigrationResource, + NHostMigrationResource, + SupabaseMigrationResource +} from '@appwrite.io/console'; import { includesAll } from '$lib/helpers/array'; const initialFormData = { @@ -51,66 +56,47 @@ export const ResourcesFriendly = { row: { singular: 'Row', plural: 'Rows' } }; -// @todo: @itznotabug - check if other resources are correct and work fine! -export const providerResources: Record = { - appwrite: Object.values(Resources), - supabase: [ - Resources.User, - Resources.Database, - Resources.Collection, - Resources.Attribute, - Resources.Index, - Resources.Document, - Resources.Bucket, - Resources.File - ], - nhost: [ - Resources.User, - Resources.Database, - Resources.Collection, - Resources.Attribute, - Resources.Index, - Resources.Document, - Resources.Bucket, - Resources.File - ], - firebase: [ - Resources.User, - Resources.Database, - Resources.Collection, - Resources.Attribute, - Resources.Document, - Resources.Bucket, - Resources.File - ] +export const MigrationResources = AppwriteMigrationResource; + +export type MigrationResource = + | AppwriteMigrationResource + | FirebaseMigrationResource + | SupabaseMigrationResource + | NHostMigrationResource; + +export const providerResources: Record = { + appwrite: Object.values(AppwriteMigrationResource), + supabase: Object.values(SupabaseMigrationResource), + nhost: Object.values(NHostMigrationResource), + firebase: Object.values(FirebaseMigrationResource) }; export const migrationFormToResources = ( formData: MigrationFormData, provider: Provider -): Resources[] => { - const resources: Resources[] = []; - const addResource = (resource: Resources) => { +): MigrationResource[] => { + const resources: MigrationResource[] = []; + const addResource = (resource: MigrationResource) => { if (providerResources[provider].includes(resource)) { resources.push(resource); } }; if (formData.users.root) { - addResource(Resources.User); + addResource(MigrationResources.User); } if (formData.databases.root) { - addResource(Resources.Database); - addResource(Resources.Table); - addResource(Resources.Column); - addResource(Resources.Index); + addResource(MigrationResources.Database); + addResource(MigrationResources.Table); + addResource(MigrationResources.Column); + addResource(MigrationResources.Index); } if (formData.databases.rows) { - addResource(Resources.Row); + addResource(MigrationResources.Row); } if (formData.storage.root) { - addResource(Resources.Bucket); - addResource(Resources.File); + addResource(MigrationResources.Bucket); + addResource(MigrationResources.File); } return resources; @@ -137,18 +123,29 @@ export const isVersionAtLeast = (version: string, atLeast: string) => { return compareVersions(version, atLeast) >= 0; }; -export const resourcesToMigrationForm = (resources: Resources[]): MigrationFormData => { +export const resourcesToMigrationForm = (resources: MigrationResource[]): MigrationFormData => { const formData = { ...initialFormData }; - if (resources.includes(Resources.User)) { + if (resources.includes(MigrationResources.User)) { formData.users.root = true; } - if (resources.includes(Resources.Database)) { + if (resources.includes(MigrationResources.Database)) { formData.databases.root = true; } - if (includesAll(resources, [Resources.Table, Resources.Column, Resources.Row] as Resources[])) { + if ( + includesAll(resources, [ + MigrationResources.Table, + MigrationResources.Column, + MigrationResources.Row + ] as MigrationResource[]) + ) { formData.databases.rows = true; } - if (includesAll(resources, [Resources.Bucket, Resources.File] as Resources[])) { + if ( + includesAll(resources, [ + MigrationResources.Bucket, + MigrationResources.File + ] as MigrationResource[]) + ) { formData.storage.root = true; } diff --git a/src/lib/stores/sdk.ts b/src/lib/stores/sdk.ts index de2570b2b..e6c0cdcc6 100644 --- a/src/lib/stores/sdk.ts +++ b/src/lib/stores/sdk.ts @@ -26,7 +26,7 @@ import { DocumentsDB, Realtime, Organizations, - VectorDB, + VectorDB } from '@appwrite.io/console'; import { Sources } from '$lib/sdk/sources'; import { diff --git a/src/routes/(console)/(migration-wizard)/resource-form.svelte b/src/routes/(console)/(migration-wizard)/resource-form.svelte index 54e3f23ba..acc2efcec 100644 --- a/src/routes/(console)/(migration-wizard)/resource-form.svelte +++ b/src/routes/(console)/(migration-wizard)/resource-form.svelte @@ -7,11 +7,18 @@ createMigrationProviderStore, type MigrationFormData, providerResources, - resourcesToMigrationForm + resourcesToMigrationForm, + MigrationResources } from '$lib/stores/migration'; import { Button } from '$lib/elements/forms'; import { wizard } from '$lib/stores/wizard'; - import { Resources, type Models } from '@appwrite.io/console'; + import { + type Models, + AppwriteMigrationResource, + FirebaseMigrationResource, + NHostMigrationResource, + SupabaseMigrationResource + } from '@appwrite.io/console'; import type { sdk } from '$lib/stores/sdk'; import ImportReport from '$routes/(console)/project-[region]-[project]/settings/migrations/(import)/importReport.svelte'; @@ -46,7 +53,7 @@ switch ($provider.provider) { case 'appwrite': report = await projectSdk.migrations.getAppwriteReport({ - resources: providerResources.appwrite, + resources: providerResources.appwrite as AppwriteMigrationResource[], endpoint: $provider.endpoint, projectID: $provider.projectID, key: $provider.apiKey @@ -54,7 +61,7 @@ break; case 'supabase': report = await projectSdk.migrations.getSupabaseReport({ - resources: providerResources.supabase, + resources: providerResources.supabase as SupabaseMigrationResource[], endpoint: $provider.endpoint, apiKey: $provider.apiKey, databaseHost: $provider.host, @@ -65,13 +72,13 @@ break; case 'firebase': report = await projectSdk.migrations.getFirebaseReport({ - resources: providerResources.firebase, + resources: providerResources.firebase as FirebaseMigrationResource[], serviceAccount: $provider.serviceAccount }); break; case 'nhost': report = await projectSdk.migrations.getNHostReport({ - resources: providerResources.nhost, + resources: providerResources.nhost as NHostMigrationResource[], subdomain: $provider.subdomain, region: $provider.region, adminSecret: $provider.adminSecret, @@ -100,13 +107,19 @@ } if (groupKey === 'storage') { - return resources.includes(Resources.Bucket) && resources.includes(Resources.File); + return ( + resources.includes(MigrationResources.Bucket) && + resources.includes(MigrationResources.File) + ); } - // Map groupKey to Resources enum - const groupToResource: Record = { - users: Resources.User, - databases: Resources.Database + // Map groupKey to MigrationResources enum + const groupToResource: Record< + string, + (typeof MigrationResources)[keyof typeof MigrationResources] + > = { + users: MigrationResources.User, + databases: MigrationResources.Database }; const resource = groupToResource[groupKey]; return resource ? resources.includes(resource) : false; diff --git a/src/routes/(console)/(migration-wizard)/wizard.svelte b/src/routes/(console)/(migration-wizard)/wizard.svelte index 1b63e87c6..13430e898 100644 --- a/src/routes/(console)/(migration-wizard)/wizard.svelte +++ b/src/routes/(console)/(migration-wizard)/wizard.svelte @@ -6,7 +6,7 @@ import ResourceForm from './resource-form.svelte'; import { requestedMigration } from '$routes/store'; import { formData, provider, selectedProject, selectedRegion } from '.'; - import { ID, type Models, Query } from '@appwrite.io/console'; + import { ID, type Models, Query, AppwriteMigrationResource } from '@appwrite.io/console'; import { InputSelect, InputText } from '$lib/elements/forms'; import { Button, @@ -114,7 +114,7 @@ try { await projectSdkInstance.migrations.createAppwriteMigration({ - resources, + resources: resources as AppwriteMigrationResource[], endpoint: $provider.endpoint, projectId: $provider.projectID, apiKey: $provider.apiKey diff --git a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte index a5eac4dbc..4dfd64719 100644 --- a/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte +++ b/src/routes/(console)/project-[region]-[project]/settings/migrations/(import)/wizard.svelte @@ -7,6 +7,12 @@ import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import { migrationFormToResources, type Provider } from '$lib/stores/migration'; + import { + AppwriteMigrationResource, + FirebaseMigrationResource, + NHostMigrationResource, + SupabaseMigrationResource + } from '@appwrite.io/console'; import { started } from '../stores'; import { showMigrationBox } from '$lib/components/migrationBox.svelte'; import { addNotification } from '$lib/stores/notifications'; @@ -45,7 +51,7 @@ await sdk .forProject(page.params.region, page.params.project) .migrations.createAppwriteMigration({ - resources, + resources: resources as AppwriteMigrationResource[], endpoint: $provider.endpoint, projectId: $provider.projectID, apiKey: $provider.apiKey @@ -58,7 +64,7 @@ await sdk .forProject(page.params.region, page.params.project) .migrations.createSupabaseMigration({ - resources, + resources: resources as SupabaseMigrationResource[], endpoint: $provider.endpoint, apiKey: $provider.apiKey, databaseHost: $provider.host, @@ -73,7 +79,7 @@ await sdk .forProject(page.params.region, page.params.project) .migrations.createFirebaseMigration({ - resources, + resources: resources as FirebaseMigrationResource[], serviceAccount: $provider.serviceAccount }); await invalidate(Dependencies.MIGRATIONS); @@ -83,7 +89,7 @@ await sdk .forProject(page.params.region, page.params.project) .migrations.createNHostMigration({ - resources, + resources: resources as NHostMigrationResource[], subdomain: $provider.subdomain, region: $provider.region, adminSecret: $provider.adminSecret, @@ -206,7 +212,8 @@ Project settings are not imported + >Project settings are not imported + You will need to set service and project settings manually. @@ -218,7 +225,8 @@ Keep your organization plan's limits in mind + >Keep your organization plan's limits in mind + Make sure to have enough storage in your organization plan when importing files. @@ -256,9 +264,12 @@ variant="secondary" on:click={() => { showExitModal = true; - }}>Cancel + }} + >Cancel + Create + >Create +