From cfd815d28458bd27837c718643c94371fab83ec2 Mon Sep 17 00:00:00 2001 From: tglide <26071571+TGlide@users.noreply.github.com> Date: Tue, 18 Jul 2023 19:40:48 +0100 Subject: [PATCH] fix: supabase & nhost formdata --- src/lib/helpers/array.ts | 5 ++ src/lib/helpers/object.ts | 16 +++- src/lib/stores/migration.ts | 85 +++++++++++++------ .../(migration-wizard)/resource-form.svelte | 10 +-- .../migrations/(import)/wizard.svelte | 2 + 5 files changed, 83 insertions(+), 35 deletions(-) diff --git a/src/lib/helpers/array.ts b/src/lib/helpers/array.ts index 903cb40ab..a325e33f5 100644 --- a/src/lib/helpers/array.ts +++ b/src/lib/helpers/array.ts @@ -83,3 +83,8 @@ export function excludeArray( ): Exclude[] { return array.filter((item) => !exclude.includes(item as E)) as Exclude[]; } + +// Function that, given an array, checks if it includes all the elements of another array +export function includesAll(arr1: T[], arr2: T[]): boolean { + return arr2.every((elem) => arr1.includes(elem)); +} diff --git a/src/lib/helpers/object.ts b/src/lib/helpers/object.ts index 923053bfc..e5c76ebcc 100644 --- a/src/lib/helpers/object.ts +++ b/src/lib/helpers/object.ts @@ -37,15 +37,23 @@ export function deepEqual(obj1: T, obj2: T): boolean { return true; } -export function deepMap( - obj: T, - fn: (value: unknown, key: unknown, obj: T) => unknown +export type DeepObj = { + [K in keyof T]: T[K] extends object ? DeepObj : T[K]; +}; +export function deepMap( + obj: DeepObj, + fn: (value: T, key: string, parentKey?: string) => unknown, + parentKey?: string ): U { const entries = objectEntries(obj); const result = {} as U; for (const [key, value] of entries) { - result[key] = typeof value === 'object' ? deepMap(value, fn) : fn(value, key, obj); + if (typeof value === 'object' && value !== null) { + result[key as any] = deepMap(value as any, fn, key as string) as any; + } else { + result[key as any] = fn(value as any, key as any, parentKey); + } } return result; diff --git a/src/lib/stores/migration.ts b/src/lib/stores/migration.ts index 753811556..4eb19a8cd 100644 --- a/src/lib/stores/migration.ts +++ b/src/lib/stores/migration.ts @@ -1,5 +1,24 @@ import { writable } from 'svelte/store'; +import { + PUBLIC_MOCK_APIKEY, + PUBLIC_MOCK_ENDPOINT, + PUBLIC_MOCK_PROJECTID, + PUBLIC_NHOST_TEST_DATABASE, + PUBLIC_NHOST_TEST_PASSWORD, + PUBLIC_NHOST_TEST_REGION, + PUBLIC_NHOST_TEST_SECRET, + PUBLIC_NHOST_TEST_SUBDOMAIN, + PUBLIC_NHOST_TEST_USERNAME, + PUBLIC_SUPABASE_TEST_ENDPOINT, + PUBLIC_SUPABASE_TEST_HOST, + PUBLIC_SUPABASE_TEST_KEY, + PUBLIC_SUPABASE_TEST_PASSWORD, + PUBLIC_SUPABASE_TEST_PORT, + PUBLIC_SUPABASE_TEST_USERNAME +} from '$env/static/public'; +import { includesAll } from '$lib/helpers/array'; + const initialFormData = { users: { root: false, @@ -101,17 +120,35 @@ export const migrationFormToResources = (formData: MigrationFormData): Resource[ return resources; }; -import { - PUBLIC_MOCK_APIKEY, - PUBLIC_MOCK_ENDPOINT, - PUBLIC_MOCK_PROJECTID, - PUBLIC_NHOST_TEST_DATABASE, - PUBLIC_NHOST_TEST_PASSWORD, - PUBLIC_NHOST_TEST_REGION, - PUBLIC_NHOST_TEST_SECRET, - PUBLIC_NHOST_TEST_SUBDOMAIN, - PUBLIC_NHOST_TEST_USERNAME -} from '$env/static/public'; +export const resourcesToMigrationForm = (resources: Resource[]): MigrationFormData => { + const formData = { ...initialFormData }; + if (resources.includes('user')) { + formData.users.root = true; + } + if (includesAll(resources, ['team', 'membership'])) { + formData.users.teams = true; + } + if (resources.includes('database')) { + formData.databases.root = true; + } + if (includesAll(resources, ['collection', 'attribute', 'index', 'document'])) { + formData.databases.documents = true; + } + if (resources.includes('function')) { + formData.functions.root = true; + } + if (resources.includes('envVar')) { + formData.functions.env = true; + } + if (resources.includes('deployment')) { + formData.functions.inactive = true; + } + if (includesAll(resources, ['bucket', 'file'])) { + formData.storage.root = true; + } + + return formData; +}; type AppwriteInput = { provider: 'appwrite'; @@ -148,21 +185,21 @@ type NhostInput = { export type ProviderInput = AppwriteInput | NhostInput | SupabaseInput | FirebaseInput; export type Provider = ProviderInput['provider']; -const mockProvider: ProviderInput = { - provider: 'appwrite', - endpoint: PUBLIC_MOCK_ENDPOINT, - apiKey: PUBLIC_MOCK_APIKEY, - projectID: PUBLIC_MOCK_PROJECTID -}; // const mockProvider: ProviderInput = { -// provider: 'supabase', -// endpoint: PUBLIC_SUPABASE_TEST_ENDPOINT, -// apiKey: PUBLIC_SUPABASE_TEST_KEY, -// host: PUBLIC_SUPABASE_TEST_HOST, -// port: Number(PUBLIC_SUPABASE_TEST_PORT), -// username: PUBLIC_SUPABASE_TEST_USERNAME, -// password: PUBLIC_SUPABASE_TEST_PASSWORD +// provider: 'appwrite', +// endpoint: PUBLIC_MOCK_ENDPOINT, +// apiKey: PUBLIC_MOCK_APIKEY, +// projectID: PUBLIC_MOCK_PROJECTID // }; +const mockProvider: ProviderInput = { + provider: 'supabase', + endpoint: PUBLIC_SUPABASE_TEST_ENDPOINT, + apiKey: PUBLIC_SUPABASE_TEST_KEY, + host: PUBLIC_SUPABASE_TEST_HOST, + port: Number(PUBLIC_SUPABASE_TEST_PORT), + username: PUBLIC_SUPABASE_TEST_USERNAME, + password: PUBLIC_SUPABASE_TEST_PASSWORD +}; // const mockProvider: ProviderInput = { // provider: 'nhost', // subdomain: PUBLIC_NHOST_TEST_SUBDOMAIN, diff --git a/src/routes/console/(migration-wizard)/resource-form.svelte b/src/routes/console/(migration-wizard)/resource-form.svelte index b7aa3e13e..eb4adaccc 100644 --- a/src/routes/console/(migration-wizard)/resource-form.svelte +++ b/src/routes/console/(migration-wizard)/resource-form.svelte @@ -10,7 +10,8 @@ import { createMigrationFormStore, createMigrationProviderStore, - providerResources + providerResources, + resourcesToMigrationForm } from '$lib/stores/migration'; import { wizard } from '$lib/stores/wizard'; @@ -61,12 +62,7 @@ } function selectAll() { - $formData = deepMap($formData, (v) => { - if (typeof v === 'boolean') { - return true; - } - return v; - }); + $formData = resourcesToMigrationForm(resources); } let report: any; diff --git a/src/routes/console/project-[project]/settings/migrations/(import)/wizard.svelte b/src/routes/console/project-[project]/settings/migrations/(import)/wizard.svelte index 804a17e0c..7aa0cb858 100644 --- a/src/routes/console/project-[project]/settings/migrations/(import)/wizard.svelte +++ b/src/routes/console/project-[project]/settings/migrations/(import)/wizard.svelte @@ -19,6 +19,8 @@ const onFinish = async () => { const resources = migrationFormToResources($formData); + console.log('resources', resources); + return; switch ($provider.provider) { case 'appwrite': { const res = await sdk.forProject.migrations.migrateAppwrite(