From 9f5786e3f016e4745aaa9198185149fd66cc879b Mon Sep 17 00:00:00 2001 From: Prem Palanisamy Date: Tue, 24 Feb 2026 13:13:57 +0000 Subject: [PATCH] feat: use provider-specific migration resource enums from SDK --- src/lib/stores/migration.ts | 119 +++++++++--------- .../(migration-wizard)/resource-form.svelte | 23 ++-- 2 files changed, 74 insertions(+), 68 deletions(-) diff --git a/src/lib/stores/migration.ts b/src/lib/stores/migration.ts index d27fc5fe6..ba110b2e0 100644 --- a/src/lib/stores/migration.ts +++ b/src/lib/stores/migration.ts @@ -1,7 +1,18 @@ 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'; +type MigrationResource = + | AppwriteMigrationResource + | FirebaseMigrationResource + | NHostMigrationResource + | SupabaseMigrationResource; + const initialFormData = { users: { root: false, @@ -59,76 +70,53 @@ export const ResourcesFriendly = { 'site-variable': { singular: 'Site Variable', plural: 'Site Variables' } }; -// Site resources are not yet in the SDK's Resources enum; cast as Resources -const siteResources = ['site', 'site-deployment', 'site-variable'] as Resources[]; - -// @todo: @itznotabug - check if other resources are correct and work fine! -export const providerResources: Record = { - appwrite: [...Object.values(Resources), ...siteResources], - 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 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(AppwriteMigrationResource.User); } if (formData.databases.root) { - addResource(Resources.Database); - addResource(Resources.Table); - addResource(Resources.Column); - addResource(Resources.Index); + addResource(AppwriteMigrationResource.Database); + addResource(AppwriteMigrationResource.Table); + addResource(AppwriteMigrationResource.Column); + addResource(AppwriteMigrationResource.Index); } if (formData.databases.rows) { - addResource(Resources.Row); + addResource(AppwriteMigrationResource.Row); } if (formData.storage.root) { - addResource(Resources.Bucket); - addResource(Resources.File); + addResource(AppwriteMigrationResource.Bucket); + addResource(AppwriteMigrationResource.File); + } + if (formData.functions.root) { + addResource(AppwriteMigrationResource.Function); + addResource(AppwriteMigrationResource.Environmentvariable); + } + if (formData.functions.inactive) { + addResource(AppwriteMigrationResource.Deployment); } if (formData.sites.root) { - addResource('site' as Resources); - addResource('site-variable' as Resources); + addResource(AppwriteMigrationResource.Site); + addResource(AppwriteMigrationResource.Sitevariable); } if (formData.sites.inactive) { - addResource('site-deployment' as Resources); + addResource(AppwriteMigrationResource.Sitedeployment); } return resources; @@ -155,24 +143,41 @@ 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(AppwriteMigrationResource.User)) { formData.users.root = true; } - if (resources.includes(Resources.Database)) { + if (resources.includes(AppwriteMigrationResource.Database)) { formData.databases.root = true; } - if (includesAll(resources, [Resources.Table, Resources.Column, Resources.Row] as Resources[])) { + if ( + includesAll(resources, [ + AppwriteMigrationResource.Table, + AppwriteMigrationResource.Column, + AppwriteMigrationResource.Row + ] as MigrationResource[]) + ) { formData.databases.rows = true; } - if (includesAll(resources, [Resources.Bucket, Resources.File] as Resources[])) { + if ( + includesAll(resources, [ + AppwriteMigrationResource.Bucket, + AppwriteMigrationResource.File + ] as MigrationResource[]) + ) { formData.storage.root = true; } - if (resources.includes('site' as Resources)) { + if (resources.includes(AppwriteMigrationResource.Function)) { + formData.functions.root = true; + } + if (resources.includes(AppwriteMigrationResource.Deployment)) { + formData.functions.inactive = true; + } + if (resources.includes(AppwriteMigrationResource.Site)) { formData.sites.root = true; } - if (resources.includes('site-deployment' as Resources)) { + if (resources.includes(AppwriteMigrationResource.Sitedeployment)) { formData.sites.inactive = true; } diff --git a/src/routes/(console)/(migration-wizard)/resource-form.svelte b/src/routes/(console)/(migration-wizard)/resource-form.svelte index f65129d3f..b3ced4594 100644 --- a/src/routes/(console)/(migration-wizard)/resource-form.svelte +++ b/src/routes/(console)/(migration-wizard)/resource-form.svelte @@ -11,7 +11,7 @@ } 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 { AppwriteMigrationResource, type Models } from '@appwrite.io/console'; import type { sdk } from '$lib/stores/sdk'; import ImportReport from '$routes/(console)/project-[region]-[project]/settings/migrations/(import)/importReport.svelte'; @@ -94,23 +94,24 @@ $: resources = providerResources[$provider.provider]; const shouldRenderGroup = (groupKey: string): boolean => { - if (groupKey === 'functions') { - // Functions not in SDK Resources enum, skip - return false; + if (groupKey === 'storage') { + return ( + resources.includes(AppwriteMigrationResource.Bucket) && + resources.includes(AppwriteMigrationResource.File) + ); } - if (groupKey === 'storage') { - return resources.includes(Resources.Bucket) && resources.includes(Resources.File); + if (groupKey === 'functions') { + return resources.includes(AppwriteMigrationResource.Function); } if (groupKey === 'sites') { - return (resources as string[]).includes('site'); + return resources.includes(AppwriteMigrationResource.Site); } - // Map groupKey to Resources enum - const groupToResource: Record = { - users: Resources.User, - databases: Resources.Database + const groupToResource: Record = { + users: AppwriteMigrationResource.User, + databases: AppwriteMigrationResource.Database }; const resource = groupToResource[groupKey]; return resource ? resources.includes(resource) : false;