aboutsummaryrefslogtreecommitdiff
path: root/src/lib/stores/supabase.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/stores/supabase.ts')
-rw-r--r--src/lib/stores/supabase.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/stores/supabase.ts b/src/lib/stores/supabase.ts
new file mode 100644
index 0000000..804141f
--- /dev/null
+++ b/src/lib/stores/supabase.ts
@@ -0,0 +1,38 @@
+import { readable } from 'svelte/store';
+import { initialResponse, errorResponse, response } from './response_builder';
+
+import type { Readable } from 'svelte/store';
+import type { PostgrestFilterBuilder } from '@supabase/postgrest-js';
+import type { StoreState } from './response_builder';
+
+export function collection<T> (query: PostgrestFilterBuilder<T>, initialValue: T[]): Readable<StoreState<T[]>> {
+
+ return readable(initialResponse<T[]>(initialValue), (set) => {
+
+ (async function() {
+ const { data, error } = await query;
+
+ if (error) {
+ return set(errorResponse<T[]>(error));
+ }
+
+ set(response<T[]>(data));
+ })()
+ });
+}
+
+export function single<T> (query: PostgrestFilterBuilder<T>, initialValue: T): Readable<StoreState<T>> {
+
+ return readable(initialResponse<T>(initialValue), (set) => {
+
+ (async function() {
+ const { data, error } = await query.single();
+
+ if (error) {
+ return set(errorResponse<T>(error));
+ }
+
+ set(response<T>(data));
+ })()
+ });
+}