feat: use provider-specific migration resource enums from SDK

This commit is contained in:
Prem Palanisamy
2026-02-24 13:13:57 +00:00
parent be46b05539
commit 9f5786e3f0
2 changed files with 74 additions and 68 deletions
+62 -57
View File
@@ -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<Provider, Resources[]> = {
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<Provider, MigrationResource[]> = {
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;
}
@@ -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<string, Resources> = {
users: Resources.User,
databases: Resources.Database
const groupToResource: Record<string, string> = {
users: AppwriteMigrationResource.User,
databases: AppwriteMigrationResource.Database
};
const resource = groupToResource[groupKey];
return resource ? resources.includes(resource) : false;