Fetch data ( supabase)
One script reply has been approved by the moderators Verified

Created by adam186 63 days ago Viewed 535 times 0 Points

No comments yet

Login to be able to comment
Points: 0
deno
One script reply has been approved by the moderators
Ap­pro­ved
import { Resource } from "https://deno.land/x/windmill@v1.70.1/mod.ts";
import { createClient } from "https://esm.sh/@supabase/supabase-js@2";

/**
 * @param count Count algorithm to use to count rows in the table or view.
 * `"exact"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the hood.
 * `"planned"`: Approximated but fast count algorithm. Uses the Postgres statistics under the hood.
 * `"estimated"`: Uses exact count for low numbers and planned count for high numbers.
 *
 * @param head When set to `true`, `data` will not be returned.
 * Useful if you only need the count.
 * 
 * @param filter Learn more at https://supabase.com/docs/reference/javascript/filter
 * 
 * @param order Learn more at https://supabase.com/docs/reference/javascript/order
 * 
 * @param limit Learn more at https://supabase.com/docs/reference/javascript/limit
 */
export async function main(
  auth: Resource<"supabase">,
  table: string,
  columns?: string,
  count?: "exact" | "planned" | "estimated",
  head?: boolean,
  filter?: {
    column: string;
    operator: string;
    value: any;
  },
  order?: {
    column: string;
    foreignTable: string;
    ascending?: boolean;
    nullsFirst?: boolean;
  },
  limit?: {
    count: number;
    foreignTable?: string;
  },
) {
  const client = createClient(auth.url, auth.key);
  const options = (head || count) ? { head, count } : undefined;
  let query = client.from(table).select(columns || undefined, options);
  if (filter?.column) {
    query = query.filter(filter.column, filter.operator, filter.value);
  }
  if (order?.column) {
    const { column, ...options } = order;
    query = query.order(column, options);
  }
  if (limit?.count) {
    const { count, foreignTable } = limit;
    query = query.limit(count, foreignTable ? { foreignTable } : undefined);
  }

  return await query;
}

Submitted by adam186 63 days ago

Edited 13 days ago

No comments yet

Login to be able to comment