1.0.0 • Published 10 months ago

@asaidimu/remote-store-supabase v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

@asaidimu/remote-store-supabase

A Supabase adapter for the remote-store library that provides a consistent interface for working with Supabase tables and storage.

Installation

npm install @asaidimu/remote-store-supabase @supabase/supabase-js

Usage

import { createClient } from '@supabase/supabase-js';
import { createSupabaseStore } from '@asaidimu/remote-store-supabase';

// Initialize Supabase client
const supabase = createClient(
  'YOUR_SUPABASE_URL',
  'YOUR_SUPABASE_ANON_KEY'
);

// Define your record type
interface User extends RemoteStoreRecord {
  name: string;
  email: string;
  avatar_url?: string;
}

// Create a store instance
const userStore = createSupabaseStore<User>({
  table: 'users',
  supabase,
  bucketName: 'avatars', // optional, defaults to 'uploads'
});

// Use the store
async function example() {
  // Create a user
  const user = await userStore.create({
    data: {
      name: 'John Doe',
      email: 'john@example.com',
    }
  });

  // Upload an avatar
  const avatarFile = new File([''], 'avatar.png');
  await userStore.upload({
    id: user.id,
    field: 'avatar_url',
    file: avatarFile
  });

  // List users with pagination
  const users = await userStore.list({
    page: 1,
    pageSize: 20,
    filter: 'name=John Doe',
    select: ['name', 'email'],
    include: ['profile']
  });
}

API

createSupabaseStore(options)

Creates a new store instance for interacting with a Supabase table.

Options

  • table: string - The name of the Supabase table
  • supabase: SupabaseClient - An initialized Supabase client instance
  • bucketName?: string - The name of the storage bucket (defaults to 'uploads')

Returns

Returns a BaseStore<T> instance with the following methods:

  • find({ filter, options? }) - Find first record matching the filter
  • read({ id, options? }) - Read a record by ID
  • list({ filter?, page?, pageSize?, ...options }) - List records with pagination
  • create({ data }) - Create a new record
  • update({ id, data }) - Update an existing record
  • delete({ id }) - Delete a record
  • upload({ id, field, file }) - Upload a file to storage and update record with URL

License

MIT