From d35c4bbeea5ebd9dc674fde26bae6be4c49ea3d1 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Sat, 27 Sep 2025 20:56:31 +0000 Subject: [PATCH] Provide chainable mock for supabase.from when not configured to avoid loading hangs cgen-515a21feaa744d9990d68533b41ebbe8 --- client/lib/supabase.ts | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/client/lib/supabase.ts b/client/lib/supabase.ts index 5b06d849..a439fc42 100644 --- a/client/lib/supabase.ts +++ b/client/lib/supabase.ts @@ -132,12 +132,34 @@ export const supabase = new Proxy(supabaseClient || {}, { if (isSupabaseConfigured && target && typeof target.from === 'function') { return target.from.bind(target); } - return (table: string) => ({ - select: () => ({ error: null, data: [] }), - insert: () => ({ error: null, data: [] }), - update: () => ({ error: null, data: [] }), - delete: () => ({ error: null, data: [] }) + + // Chainable mock query builder to prevent runtime errors when Supabase is unavailable + const createMockBuilder = (initialData: any[] | any = []) => { + let rows = Array.isArray(initialData) ? initialData : [initialData]; + const builder: any = { + select: () => builder, + insert: () => builder, + update: () => builder, + delete: () => builder, + eq: () => builder, + order: () => builder, + limit: () => builder, + single: async () => ({ data: rows[0] ?? null, error: null }), + then: undefined, // prevent accidental Promise behavior + }; + return builder; + }; + + const createMockTable = (table: string) => ({ + select: (_cols?: any, _opts?: any) => createMockBuilder([]), + insert: (payload?: any) => createMockBuilder( + Array.isArray(payload) ? payload : payload ? [payload] : [], + ), + update: (payload?: any) => createMockBuilder(payload || {}), + delete: () => createMockBuilder([]), }); + + return (table: string) => createMockTable(table); } return target[prop];