fix: supabase & nhost formdata

This commit is contained in:
tglide
2023-07-18 19:40:48 +01:00
parent 597ae77148
commit cfd815d284
5 changed files with 83 additions and 35 deletions
+5
View File
@@ -83,3 +83,8 @@ export function excludeArray<T, E extends T>(
): Exclude<T, E>[] {
return array.filter((item) => !exclude.includes(item as E)) as Exclude<T, E>[];
}
// Function that, given an array, checks if it includes all the elements of another array
export function includesAll<T>(arr1: T[], arr2: T[]): boolean {
return arr2.every((elem) => arr1.includes(elem));
}
+12 -4
View File
@@ -37,15 +37,23 @@ export function deepEqual<T>(obj1: T, obj2: T): boolean {
return true;
}
export function deepMap<T extends object, U extends object = T>(
obj: T,
fn: (value: unknown, key: unknown, obj: T) => unknown
export type DeepObj<T> = {
[K in keyof T]: T[K] extends object ? DeepObj<T[K]> : T[K];
};
export function deepMap<T, U>(
obj: DeepObj<T>,
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;
+61 -24
View File
@@ -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,
@@ -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;
@@ -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(