mirror of
https://github.com/appwrite/console.git
synced 2026-06-06 19:27:48 +00:00
fix: migration type issues.
This commit is contained in:
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
+19
-8
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user