@pankod/refine-supabase
Version:
refine Supabase data provider. refine is a React-based framework for building internal tools, rapidly. It ships with Ant Design System, an enterprise-level UI toolkit.
2 lines • 4.69 kB
JavaScript
import{createClient as N,REALTIME_POSTGRES_CHANGES_LISTEN_EVENT as p}from"@supabase/supabase-js";var f={INSERT:"created",UPDATE:"updated",DELETE:"deleted","*":"*"},L={created:p.INSERT,updated:p.UPDATE,deleted:p.DELETE,"*":p.ALL},y=r=>{switch(r){case"ne":return"neq";case"nin":return"not.in";case"contains":return"ilike";case"ncontains":return"not.ilike";case"containss":return"like";case"ncontainss":return"not.like";case"null":return"is";case"nnull":return"not.is";case"between":case"nbetween":throw Error(`Operator ${r} is not supported`);default:return r}},R=(r,n)=>{switch(r.operator){case"eq":return n.eq(r.field,r.value);case"ne":return n.neq(r.field,r.value);case"in":return n.in(r.field,r.value);case"gt":return n.gt(r.field,r.value);case"gte":return n.gte(r.field,r.value);case"lt":return n.lt(r.field,r.value);case"lte":return n.lte(r.field,r.value);case"contains":return n.ilike(r.field,`%${r.value}%`);case"containss":return n.like(r.field,`%${r.value}%`);case"null":return n.is(r.field,null);case"startswith":return n.ilike(r.field,`${r.value}%`);case"endswith":return n.ilike(r.field,`%${r.value}`);case"or":let o=r.value.map(e=>{if(e.operator!=="or"&&e.operator!=="and"&&"field"in e)return`${e.field}.${y(e.operator)}.${e.value}`}).join(",");return n.or(o);case"and":throw Error("Operator 'and' is not supported");default:return n.filter(r.field,y(r.operator),r.value)}},l=r=>{let n={...r,message:r.message,statusCode:parseInt(r.code)};return Promise.reject(n)},I=r=>({getList:async({resource:n,hasPagination:o=!0,pagination:e={current:1,pageSize:10},filters:s,sort:i,metaData:c})=>{var h;let{current:u=1,pageSize:E=10}=e!=null?e:{},d=r.from(n).select((h=c==null?void 0:c.select)!=null?h:"*",{count:"exact"});o&&d.range((u-1)*E,u*E-1),i==null||i.map(v=>{var S;let[g,w]=v.field.split(/\.(.*)/);g&&w?d.select((S=c==null?void 0:c.select)!=null?S:`*, ${g}(${w})`).order(w,{ascending:v.order==="asc",foreignTable:g}):d.order(v.field,{ascending:v.order==="asc"})}),s==null||s.map(v=>{R(v,d)});let{data:t,count:P,error:T}=await d;return T?l(T):{data:t||[],total:P||0}},getMany:async({resource:n,ids:o,metaData:e})=>{var c,u;let{data:s,error:i}=await r.from(n).select((c=e==null?void 0:e.select)!=null?c:"*").in((u=e==null?void 0:e.id)!=null?u:"id",o);return i?l(i):{data:s||[]}},create:async({resource:n,variables:o})=>{let{data:e,error:s}=await r.from(n).insert(o);return s?l(s):{data:(e||[])[0]}},createMany:async({resource:n,variables:o})=>{let{data:e,error:s}=await r.from(n).insert(o);return s?l(s):{data:e}},update:async({resource:n,id:o,variables:e,metaData:s})=>{let i=r.from(n).update(e);s!=null&&s.id?i.eq(s==null?void 0:s.id,o):i.match({id:o});let{data:c,error:u}=await i;return u?l(u):{data:(c||[])[0]}},updateMany:async({resource:n,ids:o,variables:e,metaData:s})=>({data:await Promise.all(o.map(async c=>{let u=r.from(n).update(e);s!=null&&s.id?u.eq(s==null?void 0:s.id,c):u.match({id:c});let{data:E,error:d}=await u;return d?l(d):(E||[])[0]}))}),getOne:async({resource:n,id:o,metaData:e})=>{var u;let s=r.from(n).select((u=e==null?void 0:e.select)!=null?u:"*");e!=null&&e.id?s.eq(e==null?void 0:e.id,o):s.match({id:o});let{data:i,error:c}=await s;return c?l(c):{data:(i||[])[0]}},deleteOne:async({resource:n,id:o,metaData:e})=>{let s=r.from(n).delete();e!=null&&e.id?s.eq(e==null?void 0:e.id,o):s.match({id:o});let{data:i,error:c}=await s;return c?l(c):{data:(i||[])[0]}},deleteMany:async({resource:n,ids:o,metaData:e})=>({data:await Promise.all(o.map(async i=>{let c=r.from(n).delete();e!=null&&e.id?c.eq(e==null?void 0:e.id,i):c.match({id:i});let{data:u,error:E}=await c;return E?l(E):(u||[])[0]}))}),getApiUrl:()=>{throw Error("Not implemented on refine-supabase data provider.")},custom:()=>{throw Error("Not implemented on refine-supabase data provider.")}}),b=r=>({subscribe:({channel:n,types:o,params:e,callback:s})=>{let i=n.replace("resources/",""),c=d=>{var t;(o.includes("*")||o.includes(f[d.eventType]))&&(f[d.eventType]!=="created"&&(e==null?void 0:e.ids)!==void 0&&((t=d.new)==null?void 0:t.id)!==void 0?e.ids.map(String).includes(d.new.id.toString())&&s({channel:n,type:f[d.eventType],date:new Date(d.commit_timestamp),payload:d.new}):s({channel:n,type:f[d.eventType],date:new Date(d.commit_timestamp),payload:d.new}))},u=d=>{if(!(!d||(d==null?void 0:d.length)===0))return d.map(t=>{if("field"in t)return`${t.field}=${y(t.operator)}.${t.value}`}).filter(Boolean).join(",")};return r.channel("any").on("postgres_changes",{event:L[o[0]],schema:"public",table:i,filter:u(e==null?void 0:e.filters)},c).subscribe()},unsubscribe:async n=>{r.removeChannel(n)}});export{N as createClient,I as dataProvider,b as liveProvider};
//# sourceMappingURL=index.js.map