fix: migration type issues.

This commit is contained in:
Darshan
2026-03-05 14:45:05 +05:30
parent b8913a5c73
commit 6bc49577ca
7 changed files with 95 additions and 74 deletions
+2 -2
View File
@@ -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=="],
+1 -1
View File
@@ -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",
+46 -49
View File
@@ -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<Provider, Resources[]> = {
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<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(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;
}
+1 -1
View File
@@ -26,7 +26,7 @@ import {
DocumentsDB,
Realtime,
Organizations,
VectorDB,
VectorDB
} from '@appwrite.io/console';
import { Sources } from '$lib/sdk/sources';
import {
@@ -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<string, Resources> = {
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;
@@ -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
@@ -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 @@
</span>
<Layout.Stack gap="none">
<Typography.Text variant="m-600"
>Project settings are not imported</Typography.Text>
>Project settings are not imported
</Typography.Text>
You will need to set service and project settings manually.
</Layout.Stack>
</Layout.Stack>
@@ -218,7 +225,8 @@
</span>
<Layout.Stack gap="none">
<Typography.Text variant="m-600"
>Keep your organization plan's limits in mind</Typography.Text>
>Keep your organization plan's limits in mind
</Typography.Text>
Make sure to have enough storage in your organization plan when importing files.
</Layout.Stack>
</Layout.Stack>
@@ -256,9 +264,12 @@
variant="secondary"
on:click={() => {
showExitModal = true;
}}>Cancel</Button.Button>
}}
>Cancel
</Button.Button>
<Button.Button variant="primary" disabled={!isFinalsButtonEnabled} on:click={onFinish}
>Create</Button.Button>
>Create
</Button.Button>
</svelte:fragment>
</Wizard>