@supabase/lite 0.9.0 → 0.9.1-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/FEATURES.md +176 -0
  2. package/LIMITATIONS.md +9 -6
  3. package/PATTERNS.md +66 -6
  4. package/README.md +16 -8
  5. package/STATUS.md +33 -20
  6. package/dist/{Connection-ZWTDByQ5.d.ts → Connection-f_d5HhQ0.d.ts} +301 -293
  7. package/dist/cli/index.js +127 -124
  8. package/dist/cli/lib.d.ts +1 -12
  9. package/dist/cli/lib.js +44 -39
  10. package/dist/db/fallback.d.ts +1 -1
  11. package/dist/db/postgres/PostgresConnection.js +18 -18
  12. package/dist/db/postgres/pglite/PgliteConnection.js +17 -17
  13. package/dist/index.d.ts +116 -40
  14. package/dist/index.js +181 -73
  15. package/dist/static/.vite/manifest.json +34 -2
  16. package/dist/static/assets/InterVariable-Dx4kXJAl.woff2 +0 -0
  17. package/dist/static/assets/InterVariable-Italic-DpCbqKDY.woff2 +0 -0
  18. package/dist/static/assets/SourceCodePro-Variable-BP8Zz55n.woff2 +0 -0
  19. package/dist/static/assets/SourceCodePro-Variable-Italic-eALmlzX7.woff2 +0 -0
  20. package/dist/static/assets/main-BY4iigay.css +1 -0
  21. package/dist/static/assets/main-BnQ-v4V9.js +199 -0
  22. package/dist/static/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2 +0 -0
  23. package/dist/static/assets/manrope-latin-wght-normal-DHIcAJRg.woff2 +0 -0
  24. package/dist/vite/index.d.ts +627 -31
  25. package/dist/vite/index.js +2 -2
  26. package/docs/auth/email.mdx +214 -0
  27. package/docs/auth/not-supported.mdx +57 -0
  28. package/docs/auth/overview.mdx +52 -0
  29. package/docs/auth/supported-flows.mdx +120 -0
  30. package/docs/cli/overview.mdx +112 -0
  31. package/docs/cli/telemetry.mdx +34 -0
  32. package/docs/compatibility.mdx +115 -0
  33. package/docs/database/backends.mdx +118 -0
  34. package/docs/database/data-api.mdx +90 -0
  35. package/docs/database/functions-triggers.mdx +93 -0
  36. package/docs/database/migrations.mdx +95 -0
  37. package/docs/database/overview.mdx +66 -0
  38. package/docs/database/postgres-sqlite-translation.mdx +130 -0
  39. package/docs/database/rls.mdx +161 -0
  40. package/docs/database/schemas.mdx +58 -0
  41. package/docs/index.mdx +49 -0
  42. package/docs/integrations/embedded.mdx +100 -0
  43. package/docs/integrations/frameworks.mdx +83 -0
  44. package/docs/integrations/vite.mdx +87 -0
  45. package/docs/llms.txt +52 -0
  46. package/docs/other/edge-functions.mdx +34 -0
  47. package/docs/other/realtime.mdx +22 -0
  48. package/docs/quickstart.mdx +150 -0
  49. package/docs/running.mdx +127 -0
  50. package/docs/storage/adapters.mdx +75 -0
  51. package/docs/storage/limitations.mdx +21 -0
  52. package/docs/storage/overview.mdx +88 -0
  53. package/docs/upgrade.mdx +108 -0
  54. package/package.json +5 -1
  55. package/skills/supalite/SKILL.md +6 -4
  56. package/dist/static/assets/main-1bwWb_1q.js +0 -40996
  57. package/dist/static/assets/main-BDsRycsc.css +0 -4045
  58. package/dist/static/fonts/CustomFont-Black.woff2 +0 -0
  59. package/dist/static/fonts/CustomFont-BlackItalic.woff2 +0 -0
  60. package/dist/static/fonts/CustomFont-Bold.woff2 +0 -0
  61. package/dist/static/fonts/CustomFont-BoldItalic.woff2 +0 -0
  62. package/dist/static/fonts/CustomFont-Book.woff2 +0 -0
  63. package/dist/static/fonts/CustomFont-BookItalic.woff2 +0 -0
  64. package/dist/static/fonts/CustomFont-Medium.woff2 +0 -0
@@ -1,4 +1,4 @@
1
- import { I as IConnectionConfig, C as Connection } from '../Connection-ZWTDByQ5.js';
1
+ import { I as IConnectionConfig, C as Connection } from '../Connection-f_d5HhQ0.js';
2
2
  import 'kysely';
3
3
 
4
4
  declare function createConnection<E extends IConnectionConfig = IConnectionConfig>(_config?: E): Promise<Connection>;
@@ -13,7 +13,7 @@ var Y=["anon","authenticated","service_role"];function V(a){return a==="service_
13
13
  CREATE ROLE ${s} ${V(s)};
14
14
  END IF;`).join("")}
15
15
  END $$;
16
- `}var k=Q(new Set(Y));function T(a){let e=a.trim();return e.startsWith('"')&&e.endsWith('"')||e.startsWith("`")&&e.endsWith("`")||e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function Z(a){let e=[],s="",i=0,n=null;for(let o=0;o<a.length;o++){let c=a[o];if(n){s+=c,c===n&&(n=null);continue}if(c==='"'||c==="`"||c==="'"){n=c,s+=c;continue}if(c==="("?i++:c===")"&&i>0&&i--,c===","&&i===0){e.push(s.trim()),s="";continue}s+=c;}return s.trim()&&e.push(s.trim()),e}function X(a){let e=a.match(/^(.*?)\s+as\s+(.+)$/i),s=e?e[1].trim():a.trim(),i=e?e[2].trim():void 0;if(!i){let c=a.match(/^(.+?)\s+((?:"[^"]+"|`[^`]+`|\[[^\]]+\]|\w+))$/);c&&!/[()]/.test(c[1])&&(s=c[1].trim(),i=c[2].trim());}let n=s.split(".").map(T);if(n.length>2)return null;let o=n.at(-1);return !o||!/^[A-Za-z_][\w$]*$/.test(o)?null:{baseColumn:o,viewColumn:i?T(i):o}}function x(a){return !!(a&&/[A-Za-z0-9_$]/.test(a))}function ee(a){let e=/\bselect\b/i.exec(a);if(!e)return null;let s=0,i=null;for(let n=e.index+e[0].length;n<a.length;n++){let o=a[n];if(i){o===i&&(i=null);continue}if(o==='"'||o==="`"||o==="'"){i=o;continue}if(o==="("){s++;continue}if(o===")"&&s>0){s--;continue}if(s===0&&a.slice(n,n+4).toLowerCase()==="from"&&!x(a[n-1])&&!x(a[n+4]))return {selectList:a.slice(e.index+e[0].length,n).trim(),fromRest:a.slice(n+4).trim()}}return null}function te(a){let e=0,s=[];for(;e<a.length;){for(;/\s/.test(a[e]??"");)e++;let i=a[e],n="";if(i==='"'||i==="`"){let r=a.indexOf(i,e+1);if(r===-1)return null;n=a.slice(e,r+1),e=r+1;}else if(i==="["){let r=a.indexOf("]",e+1);if(r===-1)return null;n=a.slice(e,r+1),e=r+1;}else {let r=/^[A-Za-z_][\w$]*/.exec(a.slice(e));if(!r)return null;n=r[0],e+=n.length;}s.push(n);let o=a.slice(e),c=/^\s*\./.exec(o);if(!c)break;e+=c[0].length;}return s.length===0?null:{raw:s.join("."),rest:a.slice(e).trim()}}function v(a,e,s){let i=a.get(e)??[];i.includes(s)||i.push(s),a.set(e,i);}function ne(a,e){if(!a)return null;let s=ee(a);if(!s)return null;let i=te(s.fromRest);if(!i)return null;let{raw:n,rest:o}=i;if(/\b(join|union|intersect|except)\b/i.test(o))return null;let c=n.split(".").map(T).at(-1);if(!c)return null;let r=new Map,l=e.get(c)??new Set;for(let p of Z(s.selectList)){let m=p.trim();if(m==="*"||m.endsWith(".*")){for(let d of l)v(r,d,d);continue}let g=X(p);g&&v(r,g.baseColumn,g.viewColumn);}return r.size===0?null:{baseTable:c,columns:r}}function se(a,e){let s=new Map;for(let[i,n]of e){let o=[];for(let c of n){let r=a.get(c);if(r)for(let l of r)o.includes(l)||o.push(l);}o.length>0&&s.set(i,o);}return s}function ae(a){let e=new Map,s=new Map;for(let r of a.columns??[]){let l=s.get(r.table)??new Set;l.add(r.name),s.set(r.table,l);}let i=(r,l)=>{let p=e.get(r)??[];p.some(m=>m.name===l.name&&m.schema===l.schema)||p.push(l),e.set(r,p);};for(let r of a.tables??[]){if(r.type!=="table")continue;let l=s.get(r.name);l&&i(r.name,{name:r.name,schema:r.schema,columnByBaseColumn:new Map([...l].map(p=>[p,[p]]))});}let n=new Map;for(let r of a.views??[]){let l=ne(r.sql,s);if(!l)continue;let p=s.get(r.name);if(!p)continue;let m=new Map;for(let[d,_]of l.columns){let f=_.filter(h=>p.has(h));f.length>0&&m.set(d,f);}if(m.size===0)continue;let g={name:r.name,schema:r.schema,columnByBaseColumn:m,fromRelation:l.baseTable};n.set(r.name,g);}let o=16;function c(r,l,p){if(l>o)return null;let m=r.fromRelation;if(e.has(m))return {physicalBase:m,columnByBaseColumn:r.columnByBaseColumn};let g=n.get(m);if(!g||p.has(m))return null;p.add(m);let d=c(g,l+1,p);if(p.delete(m),!d)return null;let _=se(r.columnByBaseColumn,d.columnByBaseColumn);return _.size===0?null:{physicalBase:d.physicalBase,columnByBaseColumn:_}}for(let r of n.values()){let l=c(r,0,new Set([r.name]));l&&i(l.physicalBase,{name:r.name,schema:r.schema,columnByBaseColumn:l.columnByBaseColumn});}return e}function B(a){return `${a.foreign_key_group??""}:${a.table}.${a.column}->${a.ref_table}.${a.ref_column}`}function oe(a){let e=new Map;for(let s of a){let i=`${s.schema}.${s.table}.${s.foreign_key_name}.${s.ref_schema??""}.${s.ref_table}`,n=e.get(i);n?n.push(s):e.set(i,[s]);}return [...e.values()]}function ie(a){let e=[[]];for(let s of a){let i=[];for(let n of e)for(let o of s)i.push([...n,o]);e=i;}return e}function re(a,e,s,i){let n=i.map(c=>c.childColumn).join(","),o=i.map(c=>c.parentColumn).join(",");return `${s}:${a.name}(${n})->${e.name}(${o})`}function $(a){if(!a.foreign_keys?.length||!a.views?.length)return a;let e=ae(a),s=new Set(a.foreign_keys.map(B)),i=[];for(let n of oe(a.foreign_keys)){let o=n[0],c=e.get(o.table)??[],r=e.get(o.ref_table)??[];for(let l of c)for(let p of r){if(l.schema!==p.schema)continue;let m=[];for(let g of n){let d=l.columnByBaseColumn.get(g.column)??[],_=p.columnByBaseColumn.get(g.ref_column)??[],f=d.flatMap(h=>_.map(y=>({fk:g,childColumn:h,parentColumn:y})));if(f.length===0){m.length=0;break}m.push(f);}for(let g of ie(m)){let _=l.name===o.table&&p.name===o.ref_table&&g.every(f=>f.childColumn===f.fk.column&&f.parentColumn===f.fk.ref_column)?void 0:re(l,p,o.foreign_key_name,g);for(let f of g){let h={...f.fk,table:l.name,column:f.childColumn,schema:l.schema,ref_table:p.name,ref_column:f.parentColumn,ref_schema:p.schema,foreign_key_group:_},y=B(h);s.has(y)||(s.add(y),i.push(h));}}}}return i.length?{...a,foreign_keys:[...a.foreign_keys,...i]}:a}var A="anon, authenticated, service_role",ue=new Set(["anon","authenticated","service_role"]);function F(a){return `"${a.replace(/"/g,'""')}"`}var S=class extends Error{constructor(s){super("Force rollback");this.result=s;}},O=class extends Connection{dialect="postgres";harnessHoldingOuterTx=false;constructor(e){super({...e,baseSchema:`
16
+ `}var k=Q(new Set(Y));function T(a){let e=a.trim();return e.startsWith('"')&&e.endsWith('"')||e.startsWith("`")&&e.endsWith("`")||e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function Z(a){let e=[],s="",i=0,t=null;for(let o=0;o<a.length;o++){let l=a[o];if(t){s+=l,l===t&&(t=null);continue}if(l==='"'||l==="`"||l==="'"){t=l,s+=l;continue}if(l==="("?i++:l===")"&&i>0&&i--,l===","&&i===0){e.push(s.trim()),s="";continue}s+=l;}return s.trim()&&e.push(s.trim()),e}function X(a){let e=a.match(/^(.*?)\s+as\s+(.+)$/i),s=e?e[1].trim():a.trim(),i=e?e[2].trim():void 0;if(!i){let l=a.match(/^(.+?)\s+((?:"[^"]+"|`[^`]+`|\[[^\]]+\]|\w+))$/);l&&!/[()]/.test(l[1])&&(s=l[1].trim(),i=l[2].trim());}let t=s.split(".").map(T);if(t.length>2)return null;let o=t.at(-1);return !o||!/^[A-Za-z_][\w$]*$/.test(o)?null:{baseColumn:o,viewColumn:i?T(i):o}}function x(a){return !!(a&&/[A-Za-z0-9_$]/.test(a))}function ee(a){let e=/\bselect\b/i.exec(a);if(!e)return null;let s=0,i=null;for(let t=e.index+e[0].length;t<a.length;t++){let o=a[t];if(i){o===i&&(i=null);continue}if(o==='"'||o==="`"||o==="'"){i=o;continue}if(o==="("){s++;continue}if(o===")"&&s>0){s--;continue}if(s===0&&a.slice(t,t+4).toLowerCase()==="from"&&!x(a[t-1])&&!x(a[t+4]))return {selectList:a.slice(e.index+e[0].length,t).trim(),fromRest:a.slice(t+4).trim()}}return null}function te(a){let e=0,s=[];for(;e<a.length;){for(;/\s/.test(a[e]??"");)e++;let i=a[e],t="";if(i==='"'||i==="`"){let r=a.indexOf(i,e+1);if(r===-1)return null;t=a.slice(e,r+1),e=r+1;}else if(i==="["){let r=a.indexOf("]",e+1);if(r===-1)return null;t=a.slice(e,r+1),e=r+1;}else {let r=/^[A-Za-z_][\w$]*/.exec(a.slice(e));if(!r)return null;t=r[0],e+=t.length;}s.push(t);let o=a.slice(e),l=/^\s*\./.exec(o);if(!l)break;e+=l[0].length;}return s.length===0?null:{raw:s.join("."),rest:a.slice(e).trim()}}function v(a,e,s){let i=a.get(e)??[];i.includes(s)||i.push(s),a.set(e,i);}function ne(a,e){if(!a)return null;let s=ee(a);if(!s)return null;let i=te(s.fromRest);if(!i)return null;let{raw:t,rest:o}=i;if(/\b(join|union|intersect|except)\b/i.test(o))return null;let l=t.split(".").map(T).at(-1);if(!l)return null;let r=new Map,c=e.get(l)??new Set;for(let p of Z(s.selectList)){let m=p.trim();if(m==="*"||m.endsWith(".*")){for(let d of c)v(r,d,d);continue}let g=X(p);g&&v(r,g.baseColumn,g.viewColumn);}return r.size===0?null:{baseTable:l,columns:r}}function se(a,e){let s=new Map;for(let[i,t]of e){let o=[];for(let l of t){let r=a.get(l);if(r)for(let c of r)o.includes(c)||o.push(c);}o.length>0&&s.set(i,o);}return s}function ae(a){let e=new Map,s=new Map;for(let r of a.columns??[]){let c=s.get(r.table)??new Set;c.add(r.name),s.set(r.table,c);}let i=(r,c)=>{let p=e.get(r)??[];p.some(m=>m.name===c.name&&m.schema===c.schema)||p.push(c),e.set(r,p);};for(let r of a.tables??[]){if(r.type!=="table")continue;let c=s.get(r.name);c&&i(r.name,{name:r.name,schema:r.schema,columnByBaseColumn:new Map([...c].map(p=>[p,[p]]))});}let t=new Map;for(let r of a.views??[]){let c=ne(r.sql,s);if(!c)continue;let p=s.get(r.name);if(!p)continue;let m=new Map;for(let[d,_]of c.columns){let f=_.filter(h=>p.has(h));f.length>0&&m.set(d,f);}if(m.size===0)continue;let g={name:r.name,schema:r.schema,columnByBaseColumn:m,fromRelation:c.baseTable};t.set(r.name,g);}let o=16;function l(r,c,p){if(c>o)return null;let m=r.fromRelation;if(e.has(m))return {physicalBase:m,columnByBaseColumn:r.columnByBaseColumn};let g=t.get(m);if(!g||p.has(m))return null;p.add(m);let d=l(g,c+1,p);if(p.delete(m),!d)return null;let _=se(r.columnByBaseColumn,d.columnByBaseColumn);return _.size===0?null:{physicalBase:d.physicalBase,columnByBaseColumn:_}}for(let r of t.values()){let c=l(r,0,new Set([r.name]));c&&i(c.physicalBase,{name:r.name,schema:r.schema,columnByBaseColumn:c.columnByBaseColumn});}return e}function B(a){return `${a.foreign_key_group??""}:${a.table}.${a.column}->${a.ref_table}.${a.ref_column}`}function oe(a){let e=new Map;for(let s of a){let i=`${s.schema}.${s.table}.${s.foreign_key_name}.${s.ref_schema??""}.${s.ref_table}`,t=e.get(i);t?t.push(s):e.set(i,[s]);}return [...e.values()]}function ie(a){let e=[[]];for(let s of a){let i=[];for(let t of e)for(let o of s)i.push([...t,o]);e=i;}return e}function re(a,e,s,i){let t=i.map(l=>l.childColumn).join(","),o=i.map(l=>l.parentColumn).join(",");return `${s}:${a.name}(${t})->${e.name}(${o})`}function $(a){if(!a.foreign_keys?.length||!a.views?.length)return a;let e=ae(a),s=new Set(a.foreign_keys.map(B)),i=[];for(let t of oe(a.foreign_keys)){let o=t[0],l=e.get(o.table)??[],r=e.get(o.ref_table)??[];for(let c of l)for(let p of r){if(c.schema!==p.schema)continue;let m=[];for(let g of t){let d=c.columnByBaseColumn.get(g.column)??[],_=p.columnByBaseColumn.get(g.ref_column)??[],f=d.flatMap(h=>_.map(y=>({fk:g,childColumn:h,parentColumn:y})));if(f.length===0){m.length=0;break}m.push(f);}for(let g of ie(m)){let _=c.name===o.table&&p.name===o.ref_table&&g.every(f=>f.childColumn===f.fk.column&&f.parentColumn===f.fk.ref_column)?void 0:re(c,p,o.foreign_key_name,g);for(let f of g){let h={...f.fk,table:c.name,column:f.childColumn,schema:c.schema,ref_table:p.name,ref_column:f.parentColumn,ref_schema:p.schema,foreign_key_group:_},y=B(h);s.has(y)||(s.add(y),i.push(h));}}}}return i.length?{...a,foreign_keys:[...a.foreign_keys,...i]}:a}var A="anon, authenticated, service_role",ue=new Set(["anon","authenticated","service_role"]);function F(a){return `"${a.replace(/"/g,'""')}"`}var S=class extends Error{constructor(s){super("Force rollback");this.result=s;}},O=class extends Connection{dialect="postgres";harnessHoldingOuterTx=false;constructor(e){super({...e,baseSchema:`
17
17
  ${e.baseSchema??""}
18
18
 
19
19
  CREATE SCHEMA IF NOT EXISTS auth;
@@ -40,7 +40,7 @@ END $$;
40
40
  '{}'
41
41
  )::jsonb;
42
42
  $$ LANGUAGE SQL STABLE;
43
- `});}async introspect(e){invariant(typeof e=="object"||e===void 0,"options must be an object");let s=e?.useCache??false,i=await this.readCachedIntrospection({useCache:s});if(i)return i;try{let n=await sql`
43
+ `});}async introspect(e){invariant(typeof e=="object"||e===void 0,"options must be an object");let s=e?.useCache??false,i=await this.readCachedIntrospection({useCache:s});if(i)return i;try{let t=await sql`
44
44
  SELECT
45
45
  tbls.table_name AS "name",
46
46
  tbls.table_schema AS "schema",
@@ -72,7 +72,7 @@ END $$;
72
72
  FROM pg_catalog.pg_matviews mv
73
73
  WHERE mv.schemaname NOT IN ('information_schema', 'pg_catalog')
74
74
  ORDER BY mv.schemaname, mv.matviewname
75
- `.execute(this.kysely),c=await sql`
75
+ `.execute(this.kysely),l=await sql`
76
76
  SELECT
77
77
  n.nspname AS "schema",
78
78
  c.relname AS "table",
@@ -92,7 +92,7 @@ END $$;
92
92
  AND a.attnum > 0
93
93
  AND NOT a.attisdropped
94
94
  ORDER BY n.nspname, c.relname, a.attnum
95
- `.execute(this.kysely),r=n.rows.map(t=>({name:t.name,schema:t.schema,type:"table",rows:Number(t.rows),sql:"",engine:"",collation:""}));for(let t of o.rows)r.push({name:t.name,schema:t.schema,type:"table",rows:0,sql:"",engine:"",collation:""});let p=(await sql`
95
+ `.execute(this.kysely),r=t.rows.map(n=>({name:n.name,schema:n.schema,type:"table",rows:Number(n.rows),sql:"",engine:"",collation:""}));for(let n of o.rows)r.push({name:n.name,schema:n.schema,type:"table",rows:0,sql:"",engine:"",collation:""});let p=(await sql`
96
96
  SELECT
97
97
  cols.table_name AS "table",
98
98
  cols.table_schema AS "schema",
@@ -146,7 +146,7 @@ END $$;
146
146
  LEFT JOIN pg_catalog.pg_type pt ON pt.oid = attr.atttypid
147
147
  WHERE cols.table_schema NOT IN ('information_schema', 'pg_catalog')
148
148
  ORDER BY cols.table_schema, cols.table_name, cols.ordinal_position
149
- `.execute(this.kysely)).rows.map(t=>({table:t.table,schema:t.schema,name:t.name,type:t.type,nullable:t.nullable,default_value:t.default_value,is_primary_key:!1,ordinal_position:Number(t.ordinal_position),character_maximum_length:t.character_maximum_length??null,precision:t.precision??null,is_identity:t.is_identity,collation:t.collation,pg_type:t.domain_type??t.udt_name??void 0,udt_schema:t.udt_schema??void 0,is_generated:t.is_generated??!1}));for(let t of c.rows)p.push({table:t.table,schema:t.schema,name:t.name,type:t.type??"",nullable:t.nullable??!0,default_value:t.default_value??null,is_primary_key:!1,ordinal_position:Number(t.ordinal_position),character_maximum_length:null,precision:null,is_identity:!1,collation:"",pg_type:void 0,udt_schema:void 0,is_generated:!1});let g=(await sql`
149
+ `.execute(this.kysely)).rows.map(n=>({table:n.table,schema:n.schema,name:n.name,type:n.type,nullable:n.nullable,default_value:n.default_value,is_primary_key:!1,ordinal_position:Number(n.ordinal_position),character_maximum_length:n.character_maximum_length??null,precision:n.precision??null,is_identity:n.is_identity,collation:n.collation,pg_type:n.domain_type??n.udt_name??void 0,udt_schema:n.udt_schema??void 0,is_generated:n.is_generated??!1}));for(let n of l.rows)p.push({table:n.table,schema:n.schema,name:n.name,type:n.type??"",nullable:n.nullable??!0,default_value:n.default_value??null,is_primary_key:!1,ordinal_position:Number(n.ordinal_position),character_maximum_length:null,precision:null,is_identity:!1,collation:"",pg_type:void 0,udt_schema:void 0,is_generated:!1});let g=(await sql`
150
150
  SELECT
151
151
  ns.nspname AS "schema",
152
152
  cl.relname AS "table",
@@ -176,7 +176,7 @@ END $$;
176
176
  AND NOT cl.relispartition
177
177
  AND NOT ref_cl.relispartition
178
178
  ORDER BY ns.nspname, cl.relname, con.conname, cols.ord
179
- `.execute(this.kysely)).rows.map(t=>({table:t.table,column:t.column,schema:t.schema,ref_table:t.ref_table,ref_column:t.ref_column,foreign_key_name:t.foreign_key_name,fk_def:t.fk_def,on_update:"",on_delete:""})),_=(await sql`
179
+ `.execute(this.kysely)).rows.map(n=>({table:n.table,column:n.column,schema:n.schema,ref_table:n.ref_table,ref_column:n.ref_column,foreign_key_name:n.foreign_key_name,fk_def:n.fk_def,on_update:"",on_delete:""})),_=(await sql`
180
180
  SELECT
181
181
  ns.nspname AS "schema",
182
182
  cl.relname AS "table",
@@ -193,7 +193,7 @@ END $$;
193
193
  'information_schema'
194
194
  , 'pg_catalog')
195
195
  GROUP BY ns.nspname, cl.relname, con.oid
196
- `.execute(this.kysely)).rows.map(t=>({table:t.table,columns:t.columns,schema:t.schema,field_count:t.columns.length})),f=new Set(_.flatMap(t=>t.columns.map(N=>`${t.schema}.${t.table}.${N}`)));for(let t of p)t.is_primary_key=f.has(`${t.schema}.${t.table}.${t.name}`);let y=(await sql`
196
+ `.execute(this.kysely)).rows.map(n=>({table:n.table,columns:n.columns,schema:n.schema,field_count:n.columns.length})),f=new Set(_.flatMap(n=>n.columns.map(N=>`${n.schema}.${n.table}.${N}`)));for(let n of p)n.is_primary_key=f.has(`${n.schema}.${n.table}.${n.name}`);let y=(await sql`
197
197
  SELECT
198
198
  tnsp.nspname AS "schema",
199
199
  cl.relname AS "table",
@@ -214,7 +214,7 @@ END $$;
214
214
  'information_schema'
215
215
  , 'pg_catalog')
216
216
  GROUP BY tnsp.nspname, cl.relname, ic.relname, idx.indisunique
217
- `.execute(this.kysely)).rows.map(t=>({table:t.table,name:t.name,unique:t.unique,columns:t.columns,schema:t.schema})),C=(await sql`
217
+ `.execute(this.kysely)).rows.map(n=>({table:n.table,name:n.name,unique:n.unique,columns:n.columns,schema:n.schema})),C=(await sql`
218
218
  SELECT
219
219
  views.schemaname AS "schema",
220
220
  views.viewname AS "name",
@@ -222,7 +222,7 @@ END $$;
222
222
  FROM pg_views views
223
223
  WHERE views.schemaname NOT IN ('information_schema', 'pg_catalog')
224
224
  ORDER BY views.schemaname, views.viewname
225
- `.execute(this.kysely)).rows.map(t=>({name:t.name,schema:t.schema,sql:t.sql??""}));for(let t of o.rows)C.push({name:t.name,schema:t.schema,sql:t.sql??""});let D=(await sql`
225
+ `.execute(this.kysely)).rows.map(n=>({name:n.name,schema:n.schema,sql:n.sql??""}));for(let n of o.rows)C.push({name:n.name,schema:n.schema,sql:n.sql??""});let D=(await sql`
226
226
  SELECT
227
227
  n.nspname AS "schema",
228
228
  cl.relname AS "table",
@@ -234,7 +234,7 @@ END $$;
234
234
  c.contype = 'c'
235
235
  AND n.nspname NOT IN ('information_schema', 'pg_catalog')
236
236
  ORDER BY n.nspname, cl.relname
237
- `.execute(this.kysely)).rows.map(t=>({schema:t.schema,table:t.table,expression:t.expression??""})),H=(await sql`
237
+ `.execute(this.kysely)).rows.map(n=>({schema:n.schema,table:n.table,expression:n.expression??""})),H=(await sql`
238
238
  SELECT
239
239
  n.nspname AS "schema",
240
240
  cl.relname AS "table",
@@ -249,7 +249,7 @@ END $$;
249
249
  c.contype = 'u'
250
250
  AND n.nspname NOT IN ('information_schema', 'pg_catalog')
251
251
  GROUP BY n.nspname, cl.relname, c.conname, c.oid
252
- `.execute(this.kysely)).rows.map(t=>({schema:t.schema,table:t.table,name:t.name,columns:t.columns})),J=(await sql`
252
+ `.execute(this.kysely)).rows.map(n=>({schema:n.schema,table:n.table,name:n.name,columns:n.columns})),J=(await sql`
253
253
  SELECT
254
254
  n.nspname AS "schema",
255
255
  cl.relname AS "table",
@@ -264,7 +264,7 @@ END $$;
264
264
  n.nspname NOT IN ('information_schema', 'pg_catalog')
265
265
  AND cl.relkind IN ('r', 'v', 'm', 'f', 'p')
266
266
  AND d.description IS NOT NULL
267
- `.execute(this.kysely)).rows.map(t=>({schema:t.schema,table:t.table,column:t.column??void 0,text:t.text})),M=await sql`
267
+ `.execute(this.kysely)).rows.map(n=>({schema:n.schema,table:n.table,column:n.column??void 0,text:n.text})),M=await sql`
268
268
  SELECT
269
269
  n.nspname AS "schema",
270
270
  t.typname AS "type",
@@ -297,7 +297,7 @@ END $$;
297
297
  AND NOT a.attisdropped
298
298
  AND n.nspname NOT IN ('pg_catalog', 'information_schema')
299
299
  GROUP BY n.nspname, t.typname
300
- `.execute(this.kysely),P=[...M.rows.map(t=>({schema:t.schema,type:t.type,kind:"enum",values:t.values})),...U.rows.map(t=>({schema:t.schema,type:t.type,kind:"composite",fields:t.fields}))],W=(await sql`
300
+ `.execute(this.kysely),P=[...M.rows.map(n=>({schema:n.schema,type:n.type,kind:"enum",values:n.values})),...U.rows.map(n=>({schema:n.schema,type:n.type,kind:"composite",fields:n.fields}))],W=(await sql`
301
301
  SELECT
302
302
  n.nspname AS "schema",
303
303
  p.proname AS "name",
@@ -320,7 +320,7 @@ END $$;
320
320
  WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
321
321
  AND p.prokind = 'f'
322
322
  ORDER BY n.nspname, p.proname
323
- `.execute(this.kysely)).rows.map(t=>{let N=t.arg_names_raw??[],E=t.arg_modes_raw??null,q=E&&E.length===N.length?N.filter((R,w)=>E[w]==="i"||E[w]==="b"||E[w]==="v"):N,z=!!E?.some(R=>R==="o"||R==="b"||R==="t");return {schema:t.schema,name:t.name,arg_names:q,arg_types:t.arg_types_raw??[],arg_defaults:Number(t.arg_defaults??0),has_variadic:t.has_variadic===!0,volatility:t.volatility??"v",return_type:t.return_type??"",return_is_setof:t.return_is_setof===!0,return_rows:Number(t.return_rows??0),return_typtype:t.return_typtype??"",return_base_type:t.return_base_type??void 0,has_out_args:z}}),G=(await sql`
323
+ `.execute(this.kysely)).rows.map(n=>{let N=n.arg_names_raw??[],E=n.arg_modes_raw??null,q=E&&E.length===N.length?N.filter((R,w)=>E[w]==="i"||E[w]==="b"||E[w]==="v"):N,z=!!E?.some(R=>R==="o"||R==="b"||R==="t");return {schema:n.schema,name:n.name,arg_names:q,arg_types:n.arg_types_raw??[],arg_defaults:Number(n.arg_defaults??0),has_variadic:n.has_variadic===!0,volatility:n.volatility??"v",return_type:n.return_type??"",return_is_setof:n.return_is_setof===!0,return_rows:Number(n.return_rows??0),return_typtype:n.return_typtype??"",return_base_type:n.return_base_type??void 0,has_out_args:z}}),G=(await sql`
324
324
  SELECT
325
325
  c.relname AS "name",
326
326
  n.nspname AS "schema",
@@ -330,18 +330,18 @@ END $$;
330
330
  JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
331
331
  JOIN pg_catalog.pg_class p ON p.oid = i.inhparent
332
332
  WHERE n.nspname NOT IN ('information_schema', 'pg_catalog')
333
- `.execute(this.kysely)).rows.map(t=>({name:t.name,schema:t.schema,parent:t.parent})),j=(await sql`SELECT name FROM pg_catalog.pg_timezone_names`.execute(this.kysely)).rows.map(t=>t.name),K=(await sql`SELECT current_database() AS "name"`.execute(this.kysely)).rows[0]?.name??"postgres",I=$({tables:r,columns:p,indexes:y,foreign_keys:g,primary_keys:_,views:C,triggers:[],functions:W,check_constraints:D,unique_constraints:H,comments:J,custom_types:P,partitions:G,database_name:K,version:"",default_schema:this.config?.translation?.schemas?.defaultSchema??"public",timezones:j});return await this.writeCachedIntrospection(I,{useDriver:s}),I}catch(n){return console.error("Introspection failed:",n),{tables:[],columns:[],indexes:[],foreign_keys:[],primary_keys:[],views:[],triggers:[],check_constraints:[],unique_constraints:[],comments:[],custom_types:[],database_name:"postgres",version:""}}}rlsState="unknown";async ensureRlsContext(){if(this.rlsState!=="unknown")return this.rlsState==="active";let e=await sql`
333
+ `.execute(this.kysely)).rows.map(n=>({name:n.name,schema:n.schema,parent:n.parent})),j=(await sql`SELECT name FROM pg_catalog.pg_timezone_names`.execute(this.kysely)).rows.map(n=>n.name),K=(await sql`SELECT current_database() AS "name"`.execute(this.kysely)).rows[0]?.name??"postgres",I=$({tables:r,columns:p,indexes:y,foreign_keys:g,primary_keys:_,views:C,triggers:[],functions:W,check_constraints:D,unique_constraints:H,comments:J,custom_types:P,partitions:G,database_name:K,version:"",default_schema:this.config?.translation?.schemas?.defaultSchema??"public",timezones:j});return await this.writeCachedIntrospection(I,{useDriver:s}),I}catch(t){return console.error("Introspection failed:",t),{tables:[],columns:[],indexes:[],foreign_keys:[],primary_keys:[],views:[],triggers:[],check_constraints:[],unique_constraints:[],comments:[],custom_types:[],database_name:"postgres",version:""}}}rlsState="unknown";async ensureRlsContext(){if(this.rlsState!=="unknown")return this.rlsState==="active";let e=await sql`
334
334
  SELECT count(*) ::text as count FROM pg_class WHERE relrowsecurity = true
335
335
  `.execute(this.kysely);if(!(Number(e.rows[0]?.count??0)>0))return this.rlsState="inactive",false;this.rlsState="active",await sql.raw(k).execute(this.kysely);let i=await sql`
336
336
  SELECT DISTINCT n.nspname FROM pg_class c
337
337
  JOIN pg_namespace n ON n.oid = c.relnamespace
338
338
  WHERE c.relrowsecurity = true
339
- `.execute(this.kysely);for(let{nspname:n}of i.rows){let o=F(n);await sql.raw(`GRANT USAGE ON SCHEMA ${o} TO ${A}`).execute(this.kysely),await sql.raw(`GRANT ALL ON ALL TABLES IN SCHEMA ${o} TO ${A}`).execute(this.kysely),await sql.raw(`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${o} TO ${A}`).execute(this.kysely),await sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA ${o} GRANT ALL ON TABLES TO ${A}`).execute(this.kysely),await sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA ${o} GRANT ALL ON SEQUENCES TO ${A}`).execute(this.kysely);}return true}async postgresTransactionActive(e){try{return await sql`SAVEPOINT __supalite_outer_tx_check`.execute(e),await sql`RELEASE SAVEPOINT __supalite_outer_tx_check`.execute(e),!0}catch{return false}}async applyJwtSessionContext(e,s,i){let n=s.auth,o=n?.role||"anon",c=String(n?.uid??""),r=n?.jwt;await sql`SELECT set_config('role', ${o}, true)`.execute(e),await sql`SELECT set_config('request.jwt.claim.sub', ${c}, true)`.execute(e),await sql`SELECT set_config('request.jwt.claim.role', ${o}, true)`.execute(e),i&&await sql.raw(`SET LOCAL ROLE ${F(o)}`).execute(e),r&&typeof r=="object"&&await sql`SELECT set_config('request.jwt.claims', ${JSON.stringify(r)}, true)`.execute(e);}async applyRpcRequestGucs(e,s){await sql`SELECT set_config('response.status', '', true)`.execute(e),await sql`SELECT set_config('response.headers', '', true)`.execute(e),await sql`SELECT set_config('request.method', ${s.method}, true)`.execute(e),await sql`SELECT set_config('request.path', ${s.path}, true)`.execute(e),await sql`SELECT set_config('request.headers', ${JSON.stringify(s.requestHeaders??{})}, true)`.execute(e);}async withContext(e,s,i){let n=i?.forceRollback===true;if(!n&&!e)return s(this.kysely);let o=e?await this.ensureRlsContext():false,r=e?.auth?.role||"anon",l=typeof r=="string"&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&!ue.has(r),p=i?.rpc;if(p){let m=async g=>{e&&(o||l)&&await this.applyJwtSessionContext(g,e,l),await this.applyRpcRequestGucs(g,p),p.readOnly&&await sql`SET LOCAL transaction_read_only = on`.execute(g);};if(this.harnessHoldingOuterTx)return invariant(await this.postgresTransactionActive(this.kysely),"harnessHoldingOuterTx is set but the connection has no open PostgreSQL transaction; wrap REST requests in BEGIN/ROLLBACK in the spec harness"),await m(this.kysely),s(this.kysely);try{return await this.kysely.transaction().execute(async g=>{await m(g);let d=await s(g);if(n)throw new S(d);return d})}catch(g){if(g instanceof S)return g.result;throw g}}if(!n&&!o&&!l)return s(this.kysely);if(!n&&l)return this.harnessHoldingOuterTx?(invariant(await this.postgresTransactionActive(this.kysely),"harnessHoldingOuterTx is set but the connection has no open PostgreSQL transaction; wrap REST requests in BEGIN/ROLLBACK in the spec harness"),await this.applyJwtSessionContext(this.kysely,e,true),s(this.kysely)):this.kysely.transaction().execute(async m=>(await this.applyJwtSessionContext(m,e,true),s(m)));if(!n&&o&&!l)return this.kysely.transaction().execute(async m=>(await this.applyJwtSessionContext(m,e,true),s(m)));try{return await this.kysely.transaction().execute(async m=>{e&&(o||l)&&await this.applyJwtSessionContext(m,e,l);let g=await s(m);if(n)throw new S(g);return g})}catch(m){if(m instanceof S)return m.result;throw m}}async onPostgrestAST(e){if(!e.from)return e;let s=e.schema??"public",i=e.from,n=await this.introspect({useCache:true});if(!n.tables.some(o=>o.name===i&&o.schema===s)&&!n.views.some(o=>o.name===i&&o.schema===s))throw new RelationNotFoundError(s,i);return e}async transaction(e,s){await this.exec("BEGIN");try{for(let i of e)await this.exec(i);await this.exec("COMMIT");}catch(i){throw await this.exec("ROLLBACK"),i}finally{s?.intent==="migration"&&await this.clearSchemaCache();}}get supportsRpc(){return true}async viewOptionsMetadata(e,s){let{rows:i}=await sql`
339
+ `.execute(this.kysely);for(let{nspname:t}of i.rows){let o=F(t);await sql.raw(`GRANT USAGE ON SCHEMA ${o} TO ${A}`).execute(this.kysely),await sql.raw(`GRANT ALL ON ALL TABLES IN SCHEMA ${o} TO ${A}`).execute(this.kysely),await sql.raw(`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${o} TO ${A}`).execute(this.kysely),await sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA ${o} GRANT ALL ON TABLES TO ${A}`).execute(this.kysely),await sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA ${o} GRANT ALL ON SEQUENCES TO ${A}`).execute(this.kysely);}return true}async postgresTransactionActive(e){try{return await sql`SAVEPOINT __supalite_outer_tx_check`.execute(e),await sql`RELEASE SAVEPOINT __supalite_outer_tx_check`.execute(e),!0}catch{return false}}async applyJwtSessionContext(e,s,i){let t=s.auth,o=t?.role||"anon",l=String(t?.uid??""),r=t?.jwt,c=s.storage?.operation;await sql`SELECT set_config('role', ${o}, true)`.execute(e),await sql`SELECT set_config('request.jwt.claim.sub', ${l}, true)`.execute(e),await sql`SELECT set_config('request.jwt.claim.role', ${o}, true)`.execute(e),await sql`SELECT set_config('storage.operation', ${String(c??"")}, true)`.execute(e),i&&await sql.raw(`SET LOCAL ROLE ${F(o)}`).execute(e),r&&typeof r=="object"&&await sql`SELECT set_config('request.jwt.claims', ${JSON.stringify(r)}, true)`.execute(e);}async applyRpcRequestGucs(e,s){await sql`SELECT set_config('response.status', '', true)`.execute(e),await sql`SELECT set_config('response.headers', '', true)`.execute(e),await sql`SELECT set_config('request.method', ${s.method}, true)`.execute(e),await sql`SELECT set_config('request.path', ${s.path}, true)`.execute(e),await sql`SELECT set_config('request.headers', ${JSON.stringify(s.requestHeaders??{})}, true)`.execute(e);}async withContext(e,s,i){let t=i?.forceRollback===true;if(!t&&!e)return s(this.kysely);let o=e?await this.ensureRlsContext():false,r=e?.auth?.role||"anon",c=typeof r=="string"&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&!ue.has(r);if(i?.transaction){if(t)throw new Error("Cannot force rollback an existing transaction");return e&&(o||c)&&await this.applyJwtSessionContext(i.transaction,e,c),s(i.transaction)}let p=i?.rpc;if(p){let m=async g=>{e&&(o||c)&&await this.applyJwtSessionContext(g,e,c),await this.applyRpcRequestGucs(g,p),p.readOnly&&await sql`SET LOCAL transaction_read_only = on`.execute(g);};if(this.harnessHoldingOuterTx)return invariant(await this.postgresTransactionActive(this.kysely),"harnessHoldingOuterTx is set but the connection has no open PostgreSQL transaction; wrap REST requests in BEGIN/ROLLBACK in the spec harness"),await m(this.kysely),s(this.kysely);try{return await this.kysely.transaction().execute(async g=>{await m(g);let d=await s(g);if(t)throw new S(d);return d})}catch(g){if(g instanceof S)return g.result;throw g}}if(!t&&!o&&!c)return s(this.kysely);if(!t&&c)return this.harnessHoldingOuterTx?(invariant(await this.postgresTransactionActive(this.kysely),"harnessHoldingOuterTx is set but the connection has no open PostgreSQL transaction; wrap REST requests in BEGIN/ROLLBACK in the spec harness"),await this.applyJwtSessionContext(this.kysely,e,true),s(this.kysely)):this.kysely.transaction().execute(async m=>(await this.applyJwtSessionContext(m,e,true),s(m)));if(!t&&o&&!c)return this.kysely.transaction().execute(async m=>(await this.applyJwtSessionContext(m,e,true),s(m)));try{return await this.kysely.transaction().execute(async m=>{e&&(o||c)&&await this.applyJwtSessionContext(m,e,c);let g=await s(m);if(t)throw new S(g);return g})}catch(m){if(m instanceof S)return m.result;throw m}}async onPostgrestAST(e){if(!e.from)return e;let s=e.schema??"public",i=e.from,t=await this.introspect({useCache:true});if(!t.tables.some(o=>o.name===i&&o.schema===s)&&!t.views.some(o=>o.name===i&&o.schema===s))throw new RelationNotFoundError(s,i);return e}async transaction(e,s){await this.exec("BEGIN");try{for(let i of e)await this.exec(i);await this.exec("COMMIT");}catch(i){throw await this.exec("ROLLBACK"),i}finally{s?.intent==="migration"&&await this.clearSchemaCache();}}get supportsRpc(){return true}async viewOptionsMetadata(e,s){let{rows:i}=await sql`
340
340
  select is_insertable_into, is_updatable,
341
341
  is_trigger_insertable_into, is_trigger_updatable, is_trigger_deletable
342
342
  from information_schema.views
343
343
  where table_schema = ${s} and table_name = ${e}
344
- `.execute(this.kysely),n=i[0],o=r=>r==="YES",{rows:c}=await sql`
344
+ `.execute(this.kysely),t=i[0],o=r=>r==="YES",{rows:l}=await sql`
345
345
  select table_schema, table_name from information_schema.view_table_usage
346
346
  where view_schema = ${s} and view_name = ${e}
347
- `.execute(this.kysely);return {canInsert:o(n?.is_insertable_into)||o(n?.is_trigger_insertable_into),canUpdate:o(n?.is_updatable)||o(n?.is_trigger_updatable),canDelete:o(n?.is_updatable)||o(n?.is_trigger_deletable),baseTables:c.map(r=>({schema:r.table_schema,name:r.table_name}))}}};var L=class extends O{driver;dialect="postgres";constructor(e){super(e);let{postgresOptions:s}=e;this.driver=me(e.url??"",{...s,connection:{TimeZone:"UTC",...s?.connection},types:{bigint:{to:20,from:[20],serialize:n=>n.toString(),parse:n=>{let o=Number(n);return Number.isSafeInteger(o)?o:BigInt(n)}},json:{to:114,from:[114],serialize:n=>JSON.stringify(n),parse:n=>JSON.parse(n)},jsonb:{to:3802,from:[3802],serialize:n=>JSON.stringify(n),parse:n=>JSON.parse(n)},numeric:{to:1700,from:[1700],serialize:n=>String(n),parse:n=>{let o=Number(n);return Number.isFinite(o)&&String(o)===n?o:n}},date:{to:1082,from:[1082],serialize:n=>n,parse:n=>n},time:{to:1083,from:[1083],serialize:n=>n,parse:n=>n},timestamp:{to:1114,from:[1114],serialize:n=>n,parse:n=>n},timestamptz:{to:1184,from:[1184],serialize:n=>n,parse:n=>n},timetz:{to:1266,from:[1266],serialize:n=>n,parse:n=>n},...s?.types}});let i=new PostgresJSDialect({postgres:this.driver});this.kysely=new Kysely({dialect:i});}async close(){await this.driver.end();}};function ve(a){return new L(a)}export{L as PostgresConnection,ve as createPostgresConnection};
347
+ `.execute(this.kysely);return {canInsert:o(t?.is_insertable_into)||o(t?.is_trigger_insertable_into),canUpdate:o(t?.is_updatable)||o(t?.is_trigger_updatable),canDelete:o(t?.is_updatable)||o(t?.is_trigger_deletable),baseTables:l.map(r=>({schema:r.table_schema,name:r.table_name}))}}};var L=class extends O{driver;dialect="postgres";constructor(e){super(e);let{postgresOptions:s}=e;this.driver=me(e.url??"",{...s,connection:{TimeZone:"UTC",...s?.connection},types:{bigint:{to:20,from:[20],serialize:t=>t.toString(),parse:t=>{let o=Number(t);return Number.isSafeInteger(o)?o:BigInt(t)}},json:{to:114,from:[114],serialize:t=>JSON.stringify(t),parse:t=>JSON.parse(t)},jsonb:{to:3802,from:[3802],serialize:t=>JSON.stringify(t),parse:t=>JSON.parse(t)},numeric:{to:1700,from:[1700],serialize:t=>String(t),parse:t=>{let o=Number(t);return Number.isFinite(o)&&String(o)===t?o:t}},date:{to:1082,from:[1082],serialize:t=>t,parse:t=>t},time:{to:1083,from:[1083],serialize:t=>t,parse:t=>t},timestamp:{to:1114,from:[1114],serialize:t=>t,parse:t=>t},timestamptz:{to:1184,from:[1184],serialize:t=>t,parse:t=>t},timetz:{to:1266,from:[1266],serialize:t=>t,parse:t=>t},...s?.types}});let i=new PostgresJSDialect({postgres:this.driver});this.kysely=new Kysely({dialect:i});}async close(){await this.driver.end();}};function ve(a){return new L(a)}export{L as PostgresConnection,ve as createPostgresConnection};
@@ -1,4 +1,4 @@
1
- import {PGlite}from'@electric-sql/pglite';export{PGlite}from'@electric-sql/pglite';import me from'node:fs';import {Kysely,sql,PostgresQueryCompiler,PostgresIntrospector,PostgresAdapter,CompiledQuery}from'kysely';import {Connection,invariant,RelationNotFoundError,DataLossError}from'@supabase/lite';import {isn}from'@electric-sql/pglite/contrib/isn';import {ltree}from'@electric-sql/pglite/contrib/ltree';import {file_fdw}from'@electric-sql/pglite/contrib/file_fdw';import {pgcrypto}from'@electric-sql/pglite/contrib/pgcrypto';try {
1
+ import {PGlite}from'@electric-sql/pglite';export{PGlite}from'@electric-sql/pglite';import {Kysely,sql,PostgresQueryCompiler,PostgresIntrospector,PostgresAdapter,CompiledQuery}from'kysely';import {Connection,invariant,RelationNotFoundError,DataLossError}from'@supabase/lite';import {isn}from'@electric-sql/pglite/contrib/isn';import {ltree}from'@electric-sql/pglite/contrib/ltree';import {file_fdw}from'@electric-sql/pglite/contrib/file_fdw';import {pgcrypto}from'@electric-sql/pglite/contrib/pgcrypto';try {
2
2
  /**
3
3
  * Adding this to avoid warnings from node:sqlite being experimental
4
4
  */
@@ -8,13 +8,13 @@ import {PGlite}from'@electric-sql/pglite';export{PGlite}from'@electric-sql/pglit
8
8
  return emitWarning(warning, ...args);
9
9
  };
10
10
  } catch {}
11
- var B=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t;}async acquireConnection(){return new D(this.#e)}async beginTransaction(e,t){await e.executeQuery(CompiledQuery.raw("BEGIN"));}async commitTransaction(e){await e.executeQuery(CompiledQuery.raw("COMMIT"));}async rollbackTransaction(e){await e.executeQuery(CompiledQuery.raw("ROLLBACK"));}async destroy(){this.#t&&await this.#e.close();}async init(){}async releaseConnection(e){}},D=class{#e;constructor(e){this.#e=e;}async executeQuery(e){let t=await this.#e.query(e.sql,[...e.parameters]),s=t.affectedRows;return {rows:t.rows,numAffectedRows:typeof s=="number"?BigInt(s):void 0}}async*streamQuery(){throw new Error("PGlite does not support streaming.")}},T=class{client;#e=true;constructor(e,t){let s={...t};if(typeof e=="object"&&e instanceof PGlite){this.client=e,this.#e=false;return}typeof e=="string"?s={dataDir:e,...s}:s=e??{},this.client=new PGlite(s);}dialect={createAdapter:()=>new PostgresAdapter,createDriver:()=>new B(this.client,this.#e),createIntrospector:e=>new PostgresIntrospector(e),createQueryCompiler:()=>new PostgresQueryCompiler}};var O=["anon","authenticated","service_role"];function Oe(n){return n==="service_role"?"NOLOGIN BYPASSRLS":"NOLOGIN"}function C(n){return n.size===0?"":`DO $$ BEGIN${[...n].map(t=>`
11
+ var B=class{#e;#t;constructor(e,t){this.#e=e,this.#t=t;}async acquireConnection(){return new D(this.#e)}async beginTransaction(e,t){await e.executeQuery(CompiledQuery.raw("BEGIN"));}async commitTransaction(e){await e.executeQuery(CompiledQuery.raw("COMMIT"));}async rollbackTransaction(e){await e.executeQuery(CompiledQuery.raw("ROLLBACK"));}async destroy(){this.#t&&await this.#e.close();}async init(){}async releaseConnection(e){}},D=class{#e;constructor(e){this.#e=e;}async executeQuery(e){let t=await this.#e.query(e.sql,[...e.parameters]),s=t.affectedRows;return {rows:t.rows,numAffectedRows:typeof s=="number"?BigInt(s):void 0}}async*streamQuery(){throw new Error("PGlite does not support streaming.")}},T=class{client;#e=true;constructor(e,t){let s={...t};if(typeof e=="object"&&e instanceof PGlite){this.client=e,this.#e=false;return}typeof e=="string"?s={dataDir:e,...s}:s=e??{},this.client=new PGlite(s);}dialect={createAdapter:()=>new PostgresAdapter,createDriver:()=>new B(this.client,this.#e),createIntrospector:e=>new PostgresIntrospector(e),createQueryCompiler:()=>new PostgresQueryCompiler}};var O=["anon","authenticated","service_role"];function Te(n){return n==="service_role"?"NOLOGIN BYPASSRLS":"NOLOGIN"}function C(n){return n.size===0?"":`DO $$ BEGIN${[...n].map(t=>`
12
12
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${t}') THEN
13
- CREATE ROLE ${t} ${Oe(t)};
13
+ CREATE ROLE ${t} ${Te(t)};
14
14
  END IF;`).join("")}
15
15
  END $$;
16
- `}var Q=C(new Set(O));function Y(n,e){return n?n.quoted?n.value===e:n.value.toLowerCase()===e:false}function h(n){return n?.quoted?n.value:n?.value.toLowerCase()}function Ce(n,e){let t="",s=e+1;for(;s<n.length;){if(n[s]==='"'&&n[s+1]==='"'){t+='"',s+=2;continue}if(n[s]==='"')return {token:{value:t,quoted:true},end:s+1};t+=n[s],s++;}return {token:{value:t,quoted:true},end:s}}function Le(n,e){let t=e+1;for(;t<n.length;){if(n[t]==="'"&&n[t+1]==="'"){t+=2;continue}if(n[t]==="'")return t+1;t++;}return t}function xe(n,e){let t=/^\$[A-Za-z_][A-Za-z0-9_]*\$|^\$\$/.exec(n.slice(e))?.[0];if(!t)return;let s=e+t.length,o=n.indexOf(t,s);return o===-1?n.length:o+t.length}function V(n){let e=[],t=0;for(;t<n.length;){let s=n[t],o=n[t+1];if(/\s/.test(s)){t++;continue}if(s==="-"&&o==="-"){for(t+=2;t<n.length&&n[t]!==`
17
- `;)t++;continue}if(s==="/"&&o==="*"){for(t+=2;t<n.length&&!(n[t]==="*"&&n[t+1]==="/");)t++;t=t<n.length?t+2:t;continue}if(s==="'"){t=Le(n,t);continue}if(s==="$"){let a=xe(n,t);if(a!==void 0){t=a;continue}}if(s==='"'){let{token:a,end:c}=Ce(n,t);e.push(a),t=c;continue}if(s===","||s===";"){e.push({value:s,quoted:false}),t++;continue}if(/[A-Za-z_]/.test(s)){let a=t;for(t++;t<n.length&&/[A-Za-z0-9_$]/.test(n[t]);)t++;e.push({value:n.slice(a,t).toLowerCase(),quoted:false});continue}t++;}return e}function Ie(n,e){let t=h(n[e]),s=h(n[e+1]);if((t==="create"||t==="alter")&&(s==="role"||s==="user"||s==="group"))return n[e+2]}function L(n){let e=new Set,t=V(n);for(let s=0;s<t.length;s++){if(h(t[s])!=="create")continue;let o=Ie(t,s);for(let a of O)Y(o,a)&&e.add(a);}return e}function v(n,e,t){let s=new Set([";","as","by","check","for","granted","in","on","option","using","where","with"]);for(let o=e;o<n.length;o++){let a=h(n[o]);if(!a||s.has(a))return;for(let c of O)Y(n[o],c)&&t.add(c);}}function ke(n){let e=[],t=[];for(let s of n){if(h(s)===";"){t.length>0&&e.push(t),t=[];continue}t.push(s);}return t.length>0&&e.push(t),e}function j(n,e){return n.some(t=>h(t)===e)}function Pe(n){let e=new Set,t=ke(V(n));for(let s of t){let o=h(s[0]);for(let r=0;r<s.length;r++){let l=h(s[r]);l==="to"&&(j(s,"grant")||j(s,"policy")||h(s[r-1])==="owner")&&v(s,r+1,e),l==="from"&&o==="revoke"&&v(s,r+1,e);}let a=s.findIndex(r=>h(r)==="to"),c=s.findIndex(r=>h(r)==="on");o==="grant"&&a>1&&(c===-1||a<c)&&v(s,1,e);}return e}function $(n){let e=L(n);return new Set([...Pe(n)].filter(t=>!e.has(t)))}function z(n){let e=L(n);return new Set(O.filter(t=>!e.has(t)))}function F(n){let e=n.trim();return e.startsWith('"')&&e.endsWith('"')||e.startsWith("`")&&e.endsWith("`")||e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function Be(n){let e=[],t="",s=0,o=null;for(let a=0;a<n.length;a++){let c=n[a];if(o){t+=c,c===o&&(o=null);continue}if(c==='"'||c==="`"||c==="'"){o=c,t+=c;continue}if(c==="("?s++:c===")"&&s>0&&s--,c===","&&s===0){e.push(t.trim()),t="";continue}t+=c;}return t.trim()&&e.push(t.trim()),e}function De(n){let e=n.match(/^(.*?)\s+as\s+(.+)$/i),t=e?e[1].trim():n.trim(),s=e?e[2].trim():void 0;if(!s){let c=n.match(/^(.+?)\s+((?:"[^"]+"|`[^`]+`|\[[^\]]+\]|\w+))$/);c&&!/[()]/.test(c[1])&&(t=c[1].trim(),s=c[2].trim());}let o=t.split(".").map(F);if(o.length>2)return null;let a=o.at(-1);return !a||!/^[A-Za-z_][\w$]*$/.test(a)?null:{baseColumn:a,viewColumn:s?F(s):a}}function X(n){return !!(n&&/[A-Za-z0-9_$]/.test(n))}function ve(n){let e=/\bselect\b/i.exec(n);if(!e)return null;let t=0,s=null;for(let o=e.index+e[0].length;o<n.length;o++){let a=n[o];if(s){a===s&&(s=null);continue}if(a==='"'||a==="`"||a==="'"){s=a;continue}if(a==="("){t++;continue}if(a===")"&&t>0){t--;continue}if(t===0&&n.slice(o,o+4).toLowerCase()==="from"&&!X(n[o-1])&&!X(n[o+4]))return {selectList:n.slice(e.index+e[0].length,o).trim(),fromRest:n.slice(o+4).trim()}}return null}function $e(n){let e=0,t=[];for(;e<n.length;){for(;/\s/.test(n[e]??"");)e++;let s=n[e],o="";if(s==='"'||s==="`"){let r=n.indexOf(s,e+1);if(r===-1)return null;o=n.slice(e,r+1),e=r+1;}else if(s==="["){let r=n.indexOf("]",e+1);if(r===-1)return null;o=n.slice(e,r+1),e=r+1;}else {let r=/^[A-Za-z_][\w$]*/.exec(n.slice(e));if(!r)return null;o=r[0],e+=o.length;}t.push(o);let a=n.slice(e),c=/^\s*\./.exec(a);if(!c)break;e+=c[0].length;}return t.length===0?null:{raw:t.join("."),rest:n.slice(e).trim()}}function Z(n,e,t){let s=n.get(e)??[];s.includes(t)||s.push(t),n.set(e,s);}function Fe(n,e){if(!n)return null;let t=ve(n);if(!t)return null;let s=$e(t.fromRest);if(!s)return null;let{raw:o,rest:a}=s;if(/\b(join|union|intersect|except)\b/i.test(a))return null;let c=o.split(".").map(F).at(-1);if(!c)return null;let r=new Map,l=e.get(c)??new Set;for(let f of Be(t.selectList)){let m=f.trim();if(m==="*"||m.endsWith(".*")){for(let g of l)Z(r,g,g);continue}let p=De(f);p&&Z(r,p.baseColumn,p.viewColumn);}return r.size===0?null:{baseTable:c,columns:r}}function Me(n,e){let t=new Map;for(let[s,o]of e){let a=[];for(let c of o){let r=n.get(c);if(r)for(let l of r)a.includes(l)||a.push(l);}a.length>0&&t.set(s,a);}return t}function He(n){let e=new Map,t=new Map;for(let r of n.columns??[]){let l=t.get(r.table)??new Set;l.add(r.name),t.set(r.table,l);}let s=(r,l)=>{let f=e.get(r)??[];f.some(m=>m.name===l.name&&m.schema===l.schema)||f.push(l),e.set(r,f);};for(let r of n.tables??[]){if(r.type!=="table")continue;let l=t.get(r.name);l&&s(r.name,{name:r.name,schema:r.schema,columnByBaseColumn:new Map([...l].map(f=>[f,[f]]))});}let o=new Map;for(let r of n.views??[]){let l=Fe(r.sql,t);if(!l)continue;let f=t.get(r.name);if(!f)continue;let m=new Map;for(let[g,y]of l.columns){let d=y.filter(_=>f.has(_));d.length>0&&m.set(g,d);}if(m.size===0)continue;let p={name:r.name,schema:r.schema,columnByBaseColumn:m,fromRelation:l.baseTable};o.set(r.name,p);}let a=16;function c(r,l,f){if(l>a)return null;let m=r.fromRelation;if(e.has(m))return {physicalBase:m,columnByBaseColumn:r.columnByBaseColumn};let p=o.get(m);if(!p||f.has(m))return null;f.add(m);let g=c(p,l+1,f);if(f.delete(m),!g)return null;let y=Me(r.columnByBaseColumn,g.columnByBaseColumn);return y.size===0?null:{physicalBase:g.physicalBase,columnByBaseColumn:y}}for(let r of o.values()){let l=c(r,0,new Set([r.name]));l&&s(l.physicalBase,{name:r.name,schema:r.schema,columnByBaseColumn:l.columnByBaseColumn});}return e}function ee(n){return `${n.foreign_key_group??""}:${n.table}.${n.column}->${n.ref_table}.${n.ref_column}`}function Ue(n){let e=new Map;for(let t of n){let s=`${t.schema}.${t.table}.${t.foreign_key_name}.${t.ref_schema??""}.${t.ref_table}`,o=e.get(s);o?o.push(t):e.set(s,[t]);}return [...e.values()]}function We(n){let e=[[]];for(let t of n){let s=[];for(let o of e)for(let a of t)s.push([...o,a]);e=s;}return e}function Je(n,e,t,s){let o=s.map(c=>c.childColumn).join(","),a=s.map(c=>c.parentColumn).join(",");return `${t}:${n.name}(${o})->${e.name}(${a})`}function te(n){if(!n.foreign_keys?.length||!n.views?.length)return n;let e=He(n),t=new Set(n.foreign_keys.map(ee)),s=[];for(let o of Ue(n.foreign_keys)){let a=o[0],c=e.get(a.table)??[],r=e.get(a.ref_table)??[];for(let l of c)for(let f of r){if(l.schema!==f.schema)continue;let m=[];for(let p of o){let g=l.columnByBaseColumn.get(p.column)??[],y=f.columnByBaseColumn.get(p.ref_column)??[],d=g.flatMap(_=>y.map(S=>({fk:p,childColumn:_,parentColumn:S})));if(d.length===0){m.length=0;break}m.push(d);}for(let p of We(m)){let y=l.name===a.table&&f.name===a.ref_table&&p.every(d=>d.childColumn===d.fk.column&&d.parentColumn===d.fk.ref_column)?void 0:Je(l,f,a.foreign_key_name,p);for(let d of p){let _={...d.fk,table:l.name,column:d.childColumn,schema:l.schema,ref_table:f.name,ref_column:d.parentColumn,ref_schema:f.schema,foreign_key_group:y},S=ee(_);t.has(S)||(t.add(S),s.push(_));}}}}return s.length?{...n,foreign_keys:[...n.foreign_keys,...s]}:n}var A="anon, authenticated, service_role",Ke=new Set(["anon","authenticated","service_role"]);function ne(n){return `"${n.replace(/"/g,'""')}"`}var N=class extends Error{constructor(t){super("Force rollback");this.result=t;}},x=class extends Connection{dialect="postgres";harnessHoldingOuterTx=false;constructor(e){super({...e,baseSchema:`
16
+ `}var Q=C(new Set(O));function Y(n,e){return n?n.quoted?n.value===e:n.value.toLowerCase()===e:false}function h(n){return n?.quoted?n.value:n?.value.toLowerCase()}function Oe(n,e){let t="",s=e+1;for(;s<n.length;){if(n[s]==='"'&&n[s+1]==='"'){t+='"',s+=2;continue}if(n[s]==='"')return {token:{value:t,quoted:true},end:s+1};t+=n[s],s++;}return {token:{value:t,quoted:true},end:s}}function Ce(n,e){let t=e+1;for(;t<n.length;){if(n[t]==="'"&&n[t+1]==="'"){t+=2;continue}if(n[t]==="'")return t+1;t++;}return t}function Le(n,e){let t=/^\$[A-Za-z_][A-Za-z0-9_]*\$|^\$\$/.exec(n.slice(e))?.[0];if(!t)return;let s=e+t.length,o=n.indexOf(t,s);return o===-1?n.length:o+t.length}function V(n){let e=[],t=0;for(;t<n.length;){let s=n[t],o=n[t+1];if(/\s/.test(s)){t++;continue}if(s==="-"&&o==="-"){for(t+=2;t<n.length&&n[t]!==`
17
+ `;)t++;continue}if(s==="/"&&o==="*"){for(t+=2;t<n.length&&!(n[t]==="*"&&n[t+1]==="/");)t++;t=t<n.length?t+2:t;continue}if(s==="'"){t=Ce(n,t);continue}if(s==="$"){let a=Le(n,t);if(a!==void 0){t=a;continue}}if(s==='"'){let{token:a,end:c}=Oe(n,t);e.push(a),t=c;continue}if(s===","||s===";"){e.push({value:s,quoted:false}),t++;continue}if(/[A-Za-z_]/.test(s)){let a=t;for(t++;t<n.length&&/[A-Za-z0-9_$]/.test(n[t]);)t++;e.push({value:n.slice(a,t).toLowerCase(),quoted:false});continue}t++;}return e}function xe(n,e){let t=h(n[e]),s=h(n[e+1]);if((t==="create"||t==="alter")&&(s==="role"||s==="user"||s==="group"))return n[e+2]}function L(n){let e=new Set,t=V(n);for(let s=0;s<t.length;s++){if(h(t[s])!=="create")continue;let o=xe(t,s);for(let a of O)Y(o,a)&&e.add(a);}return e}function $(n,e,t){let s=new Set([";","as","by","check","for","granted","in","on","option","using","where","with"]);for(let o=e;o<n.length;o++){let a=h(n[o]);if(!a||s.has(a))return;for(let c of O)Y(n[o],c)&&t.add(c);}}function Ie(n){let e=[],t=[];for(let s of n){if(h(s)===";"){t.length>0&&e.push(t),t=[];continue}t.push(s);}return t.length>0&&e.push(t),e}function j(n,e){return n.some(t=>h(t)===e)}function ke(n){let e=new Set,t=Ie(V(n));for(let s of t){let o=h(s[0]);for(let r=0;r<s.length;r++){let l=h(s[r]);l==="to"&&(j(s,"grant")||j(s,"policy")||h(s[r-1])==="owner")&&$(s,r+1,e),l==="from"&&o==="revoke"&&$(s,r+1,e);}let a=s.findIndex(r=>h(r)==="to"),c=s.findIndex(r=>h(r)==="on");o==="grant"&&a>1&&(c===-1||a<c)&&$(s,1,e);}return e}function v(n){let e=L(n);return new Set([...ke(n)].filter(t=>!e.has(t)))}function z(n){let e=L(n);return new Set(O.filter(t=>!e.has(t)))}function F(n){let e=n.trim();return e.startsWith('"')&&e.endsWith('"')||e.startsWith("`")&&e.endsWith("`")||e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1):e}function Pe(n){let e=[],t="",s=0,o=null;for(let a=0;a<n.length;a++){let c=n[a];if(o){t+=c,c===o&&(o=null);continue}if(c==='"'||c==="`"||c==="'"){o=c,t+=c;continue}if(c==="("?s++:c===")"&&s>0&&s--,c===","&&s===0){e.push(t.trim()),t="";continue}t+=c;}return t.trim()&&e.push(t.trim()),e}function Be(n){let e=n.match(/^(.*?)\s+as\s+(.+)$/i),t=e?e[1].trim():n.trim(),s=e?e[2].trim():void 0;if(!s){let c=n.match(/^(.+?)\s+((?:"[^"]+"|`[^`]+`|\[[^\]]+\]|\w+))$/);c&&!/[()]/.test(c[1])&&(t=c[1].trim(),s=c[2].trim());}let o=t.split(".").map(F);if(o.length>2)return null;let a=o.at(-1);return !a||!/^[A-Za-z_][\w$]*$/.test(a)?null:{baseColumn:a,viewColumn:s?F(s):a}}function X(n){return !!(n&&/[A-Za-z0-9_$]/.test(n))}function De(n){let e=/\bselect\b/i.exec(n);if(!e)return null;let t=0,s=null;for(let o=e.index+e[0].length;o<n.length;o++){let a=n[o];if(s){a===s&&(s=null);continue}if(a==='"'||a==="`"||a==="'"){s=a;continue}if(a==="("){t++;continue}if(a===")"&&t>0){t--;continue}if(t===0&&n.slice(o,o+4).toLowerCase()==="from"&&!X(n[o-1])&&!X(n[o+4]))return {selectList:n.slice(e.index+e[0].length,o).trim(),fromRest:n.slice(o+4).trim()}}return null}function $e(n){let e=0,t=[];for(;e<n.length;){for(;/\s/.test(n[e]??"");)e++;let s=n[e],o="";if(s==='"'||s==="`"){let r=n.indexOf(s,e+1);if(r===-1)return null;o=n.slice(e,r+1),e=r+1;}else if(s==="["){let r=n.indexOf("]",e+1);if(r===-1)return null;o=n.slice(e,r+1),e=r+1;}else {let r=/^[A-Za-z_][\w$]*/.exec(n.slice(e));if(!r)return null;o=r[0],e+=o.length;}t.push(o);let a=n.slice(e),c=/^\s*\./.exec(a);if(!c)break;e+=c[0].length;}return t.length===0?null:{raw:t.join("."),rest:n.slice(e).trim()}}function Z(n,e,t){let s=n.get(e)??[];s.includes(t)||s.push(t),n.set(e,s);}function ve(n,e){if(!n)return null;let t=De(n);if(!t)return null;let s=$e(t.fromRest);if(!s)return null;let{raw:o,rest:a}=s;if(/\b(join|union|intersect|except)\b/i.test(a))return null;let c=o.split(".").map(F).at(-1);if(!c)return null;let r=new Map,l=e.get(c)??new Set;for(let f of Pe(t.selectList)){let m=f.trim();if(m==="*"||m.endsWith(".*")){for(let g of l)Z(r,g,g);continue}let p=Be(f);p&&Z(r,p.baseColumn,p.viewColumn);}return r.size===0?null:{baseTable:c,columns:r}}function Fe(n,e){let t=new Map;for(let[s,o]of e){let a=[];for(let c of o){let r=n.get(c);if(r)for(let l of r)a.includes(l)||a.push(l);}a.length>0&&t.set(s,a);}return t}function Me(n){let e=new Map,t=new Map;for(let r of n.columns??[]){let l=t.get(r.table)??new Set;l.add(r.name),t.set(r.table,l);}let s=(r,l)=>{let f=e.get(r)??[];f.some(m=>m.name===l.name&&m.schema===l.schema)||f.push(l),e.set(r,f);};for(let r of n.tables??[]){if(r.type!=="table")continue;let l=t.get(r.name);l&&s(r.name,{name:r.name,schema:r.schema,columnByBaseColumn:new Map([...l].map(f=>[f,[f]]))});}let o=new Map;for(let r of n.views??[]){let l=ve(r.sql,t);if(!l)continue;let f=t.get(r.name);if(!f)continue;let m=new Map;for(let[g,y]of l.columns){let d=y.filter(_=>f.has(_));d.length>0&&m.set(g,d);}if(m.size===0)continue;let p={name:r.name,schema:r.schema,columnByBaseColumn:m,fromRelation:l.baseTable};o.set(r.name,p);}let a=16;function c(r,l,f){if(l>a)return null;let m=r.fromRelation;if(e.has(m))return {physicalBase:m,columnByBaseColumn:r.columnByBaseColumn};let p=o.get(m);if(!p||f.has(m))return null;f.add(m);let g=c(p,l+1,f);if(f.delete(m),!g)return null;let y=Fe(r.columnByBaseColumn,g.columnByBaseColumn);return y.size===0?null:{physicalBase:g.physicalBase,columnByBaseColumn:y}}for(let r of o.values()){let l=c(r,0,new Set([r.name]));l&&s(l.physicalBase,{name:r.name,schema:r.schema,columnByBaseColumn:l.columnByBaseColumn});}return e}function ee(n){return `${n.foreign_key_group??""}:${n.table}.${n.column}->${n.ref_table}.${n.ref_column}`}function He(n){let e=new Map;for(let t of n){let s=`${t.schema}.${t.table}.${t.foreign_key_name}.${t.ref_schema??""}.${t.ref_table}`,o=e.get(s);o?o.push(t):e.set(s,[t]);}return [...e.values()]}function Ue(n){let e=[[]];for(let t of n){let s=[];for(let o of e)for(let a of t)s.push([...o,a]);e=s;}return e}function We(n,e,t,s){let o=s.map(c=>c.childColumn).join(","),a=s.map(c=>c.parentColumn).join(",");return `${t}:${n.name}(${o})->${e.name}(${a})`}function te(n){if(!n.foreign_keys?.length||!n.views?.length)return n;let e=Me(n),t=new Set(n.foreign_keys.map(ee)),s=[];for(let o of He(n.foreign_keys)){let a=o[0],c=e.get(a.table)??[],r=e.get(a.ref_table)??[];for(let l of c)for(let f of r){if(l.schema!==f.schema)continue;let m=[];for(let p of o){let g=l.columnByBaseColumn.get(p.column)??[],y=f.columnByBaseColumn.get(p.ref_column)??[],d=g.flatMap(_=>y.map(S=>({fk:p,childColumn:_,parentColumn:S})));if(d.length===0){m.length=0;break}m.push(d);}for(let p of Ue(m)){let y=l.name===a.table&&f.name===a.ref_table&&p.every(d=>d.childColumn===d.fk.column&&d.parentColumn===d.fk.ref_column)?void 0:We(l,f,a.foreign_key_name,p);for(let d of p){let _={...d.fk,table:l.name,column:d.childColumn,schema:l.schema,ref_table:f.name,ref_column:d.parentColumn,ref_schema:f.schema,foreign_key_group:y},S=ee(_);t.has(S)||(t.add(S),s.push(_));}}}}return s.length?{...n,foreign_keys:[...n.foreign_keys,...s]}:n}var A="anon, authenticated, service_role",Ge=new Set(["anon","authenticated","service_role"]);function ne(n){return `"${n.replace(/"/g,'""')}"`}var N=class extends Error{constructor(t){super("Force rollback");this.result=t;}},x=class extends Connection{dialect="postgres";harnessHoldingOuterTx=false;constructor(e){super({...e,baseSchema:`
18
18
  ${e.baseSchema??""}
19
19
 
20
20
  CREATE SCHEMA IF NOT EXISTS auth;
@@ -223,7 +223,7 @@ END $$;
223
223
  FROM pg_views views
224
224
  WHERE views.schemaname NOT IN ('information_schema', 'pg_catalog')
225
225
  ORDER BY views.schemaname, views.viewname
226
- `.execute(this.kysely)).rows.map(i=>({name:i.name,schema:i.schema,sql:i.sql??""}));for(let i of a.rows)q.push({name:i.name,schema:i.schema,sql:i.sql??""});let pe=(await sql`
226
+ `.execute(this.kysely)).rows.map(i=>({name:i.name,schema:i.schema,sql:i.sql??""}));for(let i of a.rows)q.push({name:i.name,schema:i.schema,sql:i.sql??""});let me=(await sql`
227
227
  SELECT
228
228
  n.nspname AS "schema",
229
229
  cl.relname AS "table",
@@ -235,7 +235,7 @@ END $$;
235
235
  c.contype = 'c'
236
236
  AND n.nspname NOT IN ('information_schema', 'pg_catalog')
237
237
  ORDER BY n.nspname, cl.relname
238
- `.execute(this.kysely)).rows.map(i=>({schema:i.schema,table:i.table,expression:i.expression??""})),fe=(await sql`
238
+ `.execute(this.kysely)).rows.map(i=>({schema:i.schema,table:i.table,expression:i.expression??""})),pe=(await sql`
239
239
  SELECT
240
240
  n.nspname AS "schema",
241
241
  cl.relname AS "table",
@@ -250,7 +250,7 @@ END $$;
250
250
  c.contype = 'u'
251
251
  AND n.nspname NOT IN ('information_schema', 'pg_catalog')
252
252
  GROUP BY n.nspname, cl.relname, c.conname, c.oid
253
- `.execute(this.kysely)).rows.map(i=>({schema:i.schema,table:i.table,name:i.name,columns:i.columns})),ge=(await sql`
253
+ `.execute(this.kysely)).rows.map(i=>({schema:i.schema,table:i.table,name:i.name,columns:i.columns})),fe=(await sql`
254
254
  SELECT
255
255
  n.nspname AS "schema",
256
256
  cl.relname AS "table",
@@ -265,7 +265,7 @@ END $$;
265
265
  n.nspname NOT IN ('information_schema', 'pg_catalog')
266
266
  AND cl.relkind IN ('r', 'v', 'm', 'f', 'p')
267
267
  AND d.description IS NOT NULL
268
- `.execute(this.kysely)).rows.map(i=>({schema:i.schema,table:i.table,column:i.column??void 0,text:i.text})),de=await sql`
268
+ `.execute(this.kysely)).rows.map(i=>({schema:i.schema,table:i.table,column:i.column??void 0,text:i.text})),ge=await sql`
269
269
  SELECT
270
270
  n.nspname AS "schema",
271
271
  t.typname AS "type",
@@ -276,7 +276,7 @@ END $$;
276
276
  JOIN pg_namespace n ON n.oid = t.typnamespace
277
277
  WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
278
278
  GROUP BY n.nspname, t.typname
279
- `.execute(this.kysely),ye=await sql`
279
+ `.execute(this.kysely),de=await sql`
280
280
  SELECT
281
281
  n.nspname AS "schema",
282
282
  t.typname AS "type",
@@ -298,7 +298,7 @@ END $$;
298
298
  AND NOT a.attisdropped
299
299
  AND n.nspname NOT IN ('pg_catalog', 'information_schema')
300
300
  GROUP BY n.nspname, t.typname
301
- `.execute(this.kysely),he=[...de.rows.map(i=>({schema:i.schema,type:i.type,kind:"enum",values:i.values})),...ye.rows.map(i=>({schema:i.schema,type:i.type,kind:"composite",fields:i.fields}))],_e=(await sql`
301
+ `.execute(this.kysely),ye=[...ge.rows.map(i=>({schema:i.schema,type:i.type,kind:"enum",values:i.values})),...de.rows.map(i=>({schema:i.schema,type:i.type,kind:"composite",fields:i.fields}))],he=(await sql`
302
302
  SELECT
303
303
  n.nspname AS "schema",
304
304
  p.proname AS "name",
@@ -321,7 +321,7 @@ END $$;
321
321
  WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
322
322
  AND p.prokind = 'f'
323
323
  ORDER BY n.nspname, p.proname
324
- `.execute(this.kysely)).rows.map(i=>{let w=i.arg_names_raw??[],E=i.arg_modes_raw??null,we=E&&E.length===w.length?w.filter((R,k)=>E[k]==="i"||E[k]==="b"||E[k]==="v"):w,Ae=!!E?.some(R=>R==="o"||R==="b"||R==="t");return {schema:i.schema,name:i.name,arg_names:we,arg_types:i.arg_types_raw??[],arg_defaults:Number(i.arg_defaults??0),has_variadic:i.has_variadic===!0,volatility:i.volatility??"v",return_type:i.return_type??"",return_is_setof:i.return_is_setof===!0,return_rows:Number(i.return_rows??0),return_typtype:i.return_typtype??"",return_base_type:i.return_base_type??void 0,has_out_args:Ae}}),Se=(await sql`
324
+ `.execute(this.kysely)).rows.map(i=>{let w=i.arg_names_raw??[],E=i.arg_modes_raw??null,Ne=E&&E.length===w.length?w.filter((R,k)=>E[k]==="i"||E[k]==="b"||E[k]==="v"):w,we=!!E?.some(R=>R==="o"||R==="b"||R==="t");return {schema:i.schema,name:i.name,arg_names:Ne,arg_types:i.arg_types_raw??[],arg_defaults:Number(i.arg_defaults??0),has_variadic:i.has_variadic===!0,volatility:i.volatility??"v",return_type:i.return_type??"",return_is_setof:i.return_is_setof===!0,return_rows:Number(i.return_rows??0),return_typtype:i.return_typtype??"",return_base_type:i.return_base_type??void 0,has_out_args:we}}),_e=(await sql`
325
325
  SELECT
326
326
  c.relname AS "name",
327
327
  n.nspname AS "schema",
@@ -331,13 +331,13 @@ END $$;
331
331
  JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
332
332
  JOIN pg_catalog.pg_class p ON p.oid = i.inhparent
333
333
  WHERE n.nspname NOT IN ('information_schema', 'pg_catalog')
334
- `.execute(this.kysely)).rows.map(i=>({name:i.name,schema:i.schema,parent:i.parent})),Ee=(await sql`SELECT name FROM pg_catalog.pg_timezone_names`.execute(this.kysely)).rows.map(i=>i.name),Ne=(await sql`SELECT current_database() AS "name"`.execute(this.kysely)).rows[0]?.name??"postgres",G=te({tables:r,columns:f,indexes:S,foreign_keys:p,primary_keys:y,views:q,triggers:[],functions:_e,check_constraints:pe,unique_constraints:fe,comments:ge,custom_types:he,partitions:Se,database_name:Ne,version:"",default_schema:this.config?.translation?.schemas?.defaultSchema??"public",timezones:Ee});return await this.writeCachedIntrospection(G,{useDriver:t}),G}catch(o){return console.error("Introspection failed:",o),{tables:[],columns:[],indexes:[],foreign_keys:[],primary_keys:[],views:[],triggers:[],check_constraints:[],unique_constraints:[],comments:[],custom_types:[],database_name:"postgres",version:""}}}rlsState="unknown";async ensureRlsContext(){if(this.rlsState!=="unknown")return this.rlsState==="active";let e=await sql`
334
+ `.execute(this.kysely)).rows.map(i=>({name:i.name,schema:i.schema,parent:i.parent})),Se=(await sql`SELECT name FROM pg_catalog.pg_timezone_names`.execute(this.kysely)).rows.map(i=>i.name),Ee=(await sql`SELECT current_database() AS "name"`.execute(this.kysely)).rows[0]?.name??"postgres",G=te({tables:r,columns:f,indexes:S,foreign_keys:p,primary_keys:y,views:q,triggers:[],functions:he,check_constraints:me,unique_constraints:pe,comments:fe,custom_types:ye,partitions:_e,database_name:Ee,version:"",default_schema:this.config?.translation?.schemas?.defaultSchema??"public",timezones:Se});return await this.writeCachedIntrospection(G,{useDriver:t}),G}catch(o){return console.error("Introspection failed:",o),{tables:[],columns:[],indexes:[],foreign_keys:[],primary_keys:[],views:[],triggers:[],check_constraints:[],unique_constraints:[],comments:[],custom_types:[],database_name:"postgres",version:""}}}rlsState="unknown";async ensureRlsContext(){if(this.rlsState!=="unknown")return this.rlsState==="active";let e=await sql`
335
335
  SELECT count(*) ::text as count FROM pg_class WHERE relrowsecurity = true
336
336
  `.execute(this.kysely);if(!(Number(e.rows[0]?.count??0)>0))return this.rlsState="inactive",false;this.rlsState="active",await sql.raw(Q).execute(this.kysely);let s=await sql`
337
337
  SELECT DISTINCT n.nspname FROM pg_class c
338
338
  JOIN pg_namespace n ON n.oid = c.relnamespace
339
339
  WHERE c.relrowsecurity = true
340
- `.execute(this.kysely);for(let{nspname:o}of s.rows){let a=ne(o);await sql.raw(`GRANT USAGE ON SCHEMA ${a} TO ${A}`).execute(this.kysely),await sql.raw(`GRANT ALL ON ALL TABLES IN SCHEMA ${a} TO ${A}`).execute(this.kysely),await sql.raw(`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${a} TO ${A}`).execute(this.kysely),await sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA ${a} GRANT ALL ON TABLES TO ${A}`).execute(this.kysely),await sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA ${a} GRANT ALL ON SEQUENCES TO ${A}`).execute(this.kysely);}return true}async postgresTransactionActive(e){try{return await sql`SAVEPOINT __supalite_outer_tx_check`.execute(e),await sql`RELEASE SAVEPOINT __supalite_outer_tx_check`.execute(e),!0}catch{return false}}async applyJwtSessionContext(e,t,s){let o=t.auth,a=o?.role||"anon",c=String(o?.uid??""),r=o?.jwt;await sql`SELECT set_config('role', ${a}, true)`.execute(e),await sql`SELECT set_config('request.jwt.claim.sub', ${c}, true)`.execute(e),await sql`SELECT set_config('request.jwt.claim.role', ${a}, true)`.execute(e),s&&await sql.raw(`SET LOCAL ROLE ${ne(a)}`).execute(e),r&&typeof r=="object"&&await sql`SELECT set_config('request.jwt.claims', ${JSON.stringify(r)}, true)`.execute(e);}async applyRpcRequestGucs(e,t){await sql`SELECT set_config('response.status', '', true)`.execute(e),await sql`SELECT set_config('response.headers', '', true)`.execute(e),await sql`SELECT set_config('request.method', ${t.method}, true)`.execute(e),await sql`SELECT set_config('request.path', ${t.path}, true)`.execute(e),await sql`SELECT set_config('request.headers', ${JSON.stringify(t.requestHeaders??{})}, true)`.execute(e);}async withContext(e,t,s){let o=s?.forceRollback===true;if(!o&&!e)return t(this.kysely);let a=e?await this.ensureRlsContext():false,r=e?.auth?.role||"anon",l=typeof r=="string"&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&!Ke.has(r),f=s?.rpc;if(f){let m=async p=>{e&&(a||l)&&await this.applyJwtSessionContext(p,e,l),await this.applyRpcRequestGucs(p,f),f.readOnly&&await sql`SET LOCAL transaction_read_only = on`.execute(p);};if(this.harnessHoldingOuterTx)return invariant(await this.postgresTransactionActive(this.kysely),"harnessHoldingOuterTx is set but the connection has no open PostgreSQL transaction; wrap REST requests in BEGIN/ROLLBACK in the spec harness"),await m(this.kysely),t(this.kysely);try{return await this.kysely.transaction().execute(async p=>{await m(p);let g=await t(p);if(o)throw new N(g);return g})}catch(p){if(p instanceof N)return p.result;throw p}}if(!o&&!a&&!l)return t(this.kysely);if(!o&&l)return this.harnessHoldingOuterTx?(invariant(await this.postgresTransactionActive(this.kysely),"harnessHoldingOuterTx is set but the connection has no open PostgreSQL transaction; wrap REST requests in BEGIN/ROLLBACK in the spec harness"),await this.applyJwtSessionContext(this.kysely,e,true),t(this.kysely)):this.kysely.transaction().execute(async m=>(await this.applyJwtSessionContext(m,e,true),t(m)));if(!o&&a&&!l)return this.kysely.transaction().execute(async m=>(await this.applyJwtSessionContext(m,e,true),t(m)));try{return await this.kysely.transaction().execute(async m=>{e&&(a||l)&&await this.applyJwtSessionContext(m,e,l);let p=await t(m);if(o)throw new N(p);return p})}catch(m){if(m instanceof N)return m.result;throw m}}async onPostgrestAST(e){if(!e.from)return e;let t=e.schema??"public",s=e.from,o=await this.introspect({useCache:true});if(!o.tables.some(a=>a.name===s&&a.schema===t)&&!o.views.some(a=>a.name===s&&a.schema===t))throw new RelationNotFoundError(t,s);return e}async transaction(e,t){await this.exec("BEGIN");try{for(let s of e)await this.exec(s);await this.exec("COMMIT");}catch(s){throw await this.exec("ROLLBACK"),s}finally{t?.intent==="migration"&&await this.clearSchemaCache();}}get supportsRpc(){return true}async viewOptionsMetadata(e,t){let{rows:s}=await sql`
340
+ `.execute(this.kysely);for(let{nspname:o}of s.rows){let a=ne(o);await sql.raw(`GRANT USAGE ON SCHEMA ${a} TO ${A}`).execute(this.kysely),await sql.raw(`GRANT ALL ON ALL TABLES IN SCHEMA ${a} TO ${A}`).execute(this.kysely),await sql.raw(`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${a} TO ${A}`).execute(this.kysely),await sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA ${a} GRANT ALL ON TABLES TO ${A}`).execute(this.kysely),await sql.raw(`ALTER DEFAULT PRIVILEGES IN SCHEMA ${a} GRANT ALL ON SEQUENCES TO ${A}`).execute(this.kysely);}return true}async postgresTransactionActive(e){try{return await sql`SAVEPOINT __supalite_outer_tx_check`.execute(e),await sql`RELEASE SAVEPOINT __supalite_outer_tx_check`.execute(e),!0}catch{return false}}async applyJwtSessionContext(e,t,s){let o=t.auth,a=o?.role||"anon",c=String(o?.uid??""),r=o?.jwt,l=t.storage?.operation;await sql`SELECT set_config('role', ${a}, true)`.execute(e),await sql`SELECT set_config('request.jwt.claim.sub', ${c}, true)`.execute(e),await sql`SELECT set_config('request.jwt.claim.role', ${a}, true)`.execute(e),await sql`SELECT set_config('storage.operation', ${String(l??"")}, true)`.execute(e),s&&await sql.raw(`SET LOCAL ROLE ${ne(a)}`).execute(e),r&&typeof r=="object"&&await sql`SELECT set_config('request.jwt.claims', ${JSON.stringify(r)}, true)`.execute(e);}async applyRpcRequestGucs(e,t){await sql`SELECT set_config('response.status', '', true)`.execute(e),await sql`SELECT set_config('response.headers', '', true)`.execute(e),await sql`SELECT set_config('request.method', ${t.method}, true)`.execute(e),await sql`SELECT set_config('request.path', ${t.path}, true)`.execute(e),await sql`SELECT set_config('request.headers', ${JSON.stringify(t.requestHeaders??{})}, true)`.execute(e);}async withContext(e,t,s){let o=s?.forceRollback===true;if(!o&&!e)return t(this.kysely);let a=e?await this.ensureRlsContext():false,r=e?.auth?.role||"anon",l=typeof r=="string"&&/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(r)&&!Ge.has(r);if(s?.transaction){if(o)throw new Error("Cannot force rollback an existing transaction");return e&&(a||l)&&await this.applyJwtSessionContext(s.transaction,e,l),t(s.transaction)}let f=s?.rpc;if(f){let m=async p=>{e&&(a||l)&&await this.applyJwtSessionContext(p,e,l),await this.applyRpcRequestGucs(p,f),f.readOnly&&await sql`SET LOCAL transaction_read_only = on`.execute(p);};if(this.harnessHoldingOuterTx)return invariant(await this.postgresTransactionActive(this.kysely),"harnessHoldingOuterTx is set but the connection has no open PostgreSQL transaction; wrap REST requests in BEGIN/ROLLBACK in the spec harness"),await m(this.kysely),t(this.kysely);try{return await this.kysely.transaction().execute(async p=>{await m(p);let g=await t(p);if(o)throw new N(g);return g})}catch(p){if(p instanceof N)return p.result;throw p}}if(!o&&!a&&!l)return t(this.kysely);if(!o&&l)return this.harnessHoldingOuterTx?(invariant(await this.postgresTransactionActive(this.kysely),"harnessHoldingOuterTx is set but the connection has no open PostgreSQL transaction; wrap REST requests in BEGIN/ROLLBACK in the spec harness"),await this.applyJwtSessionContext(this.kysely,e,true),t(this.kysely)):this.kysely.transaction().execute(async m=>(await this.applyJwtSessionContext(m,e,true),t(m)));if(!o&&a&&!l)return this.kysely.transaction().execute(async m=>(await this.applyJwtSessionContext(m,e,true),t(m)));try{return await this.kysely.transaction().execute(async m=>{e&&(a||l)&&await this.applyJwtSessionContext(m,e,l);let p=await t(m);if(o)throw new N(p);return p})}catch(m){if(m instanceof N)return m.result;throw m}}async onPostgrestAST(e){if(!e.from)return e;let t=e.schema??"public",s=e.from,o=await this.introspect({useCache:true});if(!o.tables.some(a=>a.name===s&&a.schema===t)&&!o.views.some(a=>a.name===s&&a.schema===t))throw new RelationNotFoundError(t,s);return e}async transaction(e,t){await this.exec("BEGIN");try{for(let s of e)await this.exec(s);await this.exec("COMMIT");}catch(s){throw await this.exec("ROLLBACK"),s}finally{t?.intent==="migration"&&await this.clearSchemaCache();}}get supportsRpc(){return true}async viewOptionsMetadata(e,t){let{rows:s}=await sql`
341
341
  select is_insertable_into, is_updatable,
342
342
  is_trigger_insertable_into, is_trigger_updatable, is_trigger_deletable
343
343
  from information_schema.views
@@ -345,9 +345,9 @@ END $$;
345
345
  `.execute(this.kysely),o=s[0],a=r=>r==="YES",{rows:c}=await sql`
346
346
  select table_schema, table_name from information_schema.view_table_usage
347
347
  where view_schema = ${t} and view_name = ${e}
348
- `.execute(this.kysely);return {canInsert:a(o?.is_insertable_into)||a(o?.is_trigger_insertable_into),canUpdate:a(o?.is_updatable)||a(o?.is_trigger_updatable),canDelete:a(o?.is_updatable)||a(o?.is_trigger_deletable),baseTables:c.map(r=>({schema:r.table_schema,name:r.table_name}))}}};var se=(n,e=t=>t)=>{if(!n||n==="{}")return [];let t=n.slice(1,-1);if(t==="")return [];let s=[],o="",a=false,c=0;for(let r=0;r<t.length;r++){let l=t[r];l==='"'&&t[r-1]!=="\\"?(a=!a,o+=l):l==="{"&&!a?(c++,o+=l):l==="}"&&!a?(c--,o+=l):l===","&&!a&&c===0?(s.push(e(o)),o=""):o+=l;}return o!==""&&s.push(e(o)),s},je=n=>n==="NULL"?null:n.startsWith('"')&&n.endsWith('"')?n.slice(1,-1).replace(/\\(.)/g,"$1"):n,Qe=n=>n==="NULL"?null:Number.parseInt(n,10);function Ye(n,e){if(n==null)return n;switch(e){case 20:return typeof n=="bigint"?n:BigInt(n);case 22:return Array.isArray(n)?n:typeof n=="string"?n.split(" ").map(Number).filter(t=>!Number.isNaN(t)):n;case 1002:case 1009:case 1015:return typeof n=="string"?se(n,je):n;case 1005:case 1007:case 1016:return typeof n=="string"?se(n,Qe):n;default:return n}}function H(n){let e=async(t,s)=>{let o=await n.driver.query(t,s?[...s]:[]);return {rows:o.rows.map(c=>Object.fromEntries(o.fields.map(r=>[r.name,Ye(c[r.name],r.dataTypeID)])))}};return {query:e,connect:async()=>({query:e,release:()=>{}}),end:async()=>{}}}async function oe(){try{let[{extract:n},{plan:e},{segmentActions:t}]=await Promise.all([import('@supabase/pg-delta/extract'),import('@supabase/pg-delta/plan'),import('@supabase/pg-delta/apply')]);return {extract:n,plan:e,segmentActions:t}}catch(n){throw new Error("Postgres schema diffing requires pg-delta to be available.",{cause:n})}}function W(n){let e=[...n.assumedRoles??[]],t=[{match:{all:[{kind:"acl"},{idField:{field:"grantee",glob:"postgres"}}]},action:"exclude"},{match:{all:[{verb:["link","unlink"]},{edgeTo:{edgeKind:"owner"}}]},action:"exclude"}];return e.length>0&&t.push({match:{all:[{kind:"role"},{name:e}]},action:"exclude"}),n.only?t.push({match:{not:{any:ae(n.only)}},action:"exclude"}):n.exclude?.length&&t.push({match:{any:ae(n.exclude)},action:"exclude"}),{id:"supabase-lite",filter:t,assumedRoles:["postgres",...e]}}function ae(n){let e=[...n];return [{all:[{kind:"schema"},{name:e}]},{schema:e},{target:{schema:e}}]}function ie(n,e){return n.segmentActions(e.actions).map(t=>({transactional:t.transactional,statements:e.actions.slice(t.start,t.end).map(s=>s.sql)}))}function re(n){let e=[];for(let t of n){let s=!t.nonTransactional,o=e[e.length-1];!o||t.newTransaction||o.transactional!==s?e.push({statements:[t.sql],transactional:s}):o.statements.push(t.sql);}return e}function ce(n){return n.preamble.filter(e=>e.name!=="search_path").map(e=>`SET LOCAL ${e.name} = ${Ve(e.value)}`)}function Ve(n){return `'${n.replace(/'/g,"''")}'`}function le(n){let e=[];for(let t of n.actions)t.dataLoss==="destructive"&&e.push(ze(t));return e}function ze(n){for(let e of n.destroys)if(e.kind==="table")return {table:U(e.schema,e.name),reason:"drop table"};for(let e of n.destroys)if(e.kind==="column")return {table:U(e.schema,e.table),reason:`drop column ${e.name}`};for(let e of n.destroys)if(e.kind==="sequence")return {table:U(e.schema,e.name),reason:"drop sequence"};return {table:"unknown",reason:n.sql}}function U(n,e){return n==="public"?e:`${n}.${e}`}var Xe=new Set(["public","supabase_migrations"]),Ze=/\bCREATE\s+SCHEMA\b(?:\s+IF\s+NOT\s+EXISTS)?\s+"?([\w$]+)"?/gi;function et(n,e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`(?<![\\w$])"?${t}"?\\.`);return n.some(o=>s.test(o))}function ue(n,e){let t=new Set;for(let s of e)for(let o of s.matchAll(Ze))t.add(o[1]);return n.facts().filter(s=>s.id.kind==="schema").map(s=>s.id.name).filter(s=>!Xe.has(s)&&!t.has(s)&&et(e,s)).map(s=>`CREATE SCHEMA IF NOT EXISTS "${s}";`)}var nt=["supabase_migrations"],I=class{constructor(e,t){this.from=e;this.desiredSchema=t;}#e;async#t(e){if(this.#e)return this.#e;let t=new this.from.constructor;try{let s=C($(this.desiredSchema));s&&await t.exec(s),await t.exec(this.desiredSchema);let{factBase:o}=await e.extract(H(t));return this.#e=o,o}finally{await t.close();}}async diff(e){let t=await oe(),s=await this.#t(t),{factBase:o}=await t.extract(H(this.from)),a=z(this.desiredSchema),c=e?.schemas?W({only:e.schemas,assumedRoles:a}):W({exclude:nt,assumedRoles:a}),r=t.plan(o,s,{policy:c});if(r.actions.length===0)return {diff:"",plan:{steps:[],warnings:[],unsafe:false}};let l=ie(t,r),f=ue(s,l.flatMap(g=>g.statements));f.length>0&&l[0]&&(l[0]={...l[0],statements:[...f,...l[0].statements]});let m=ce(r),p=[];for(let[g,y]of l.entries()){let d=y.transactional?[...m,...y.statements]:y.statements;for(let[_,S]of d.entries()){let b={sql:S};g>0&&_===0&&(b.newTransaction=true),y.transactional||(b.nonTransactional=true),p.push(b);}}return {diff:p.map(g=>g.sql).join(`
348
+ `.execute(this.kysely);return {canInsert:a(o?.is_insertable_into)||a(o?.is_trigger_insertable_into),canUpdate:a(o?.is_updatable)||a(o?.is_trigger_updatable),canDelete:a(o?.is_updatable)||a(o?.is_trigger_deletable),baseTables:c.map(r=>({schema:r.table_schema,name:r.table_name}))}}};var se=(n,e=t=>t)=>{if(!n||n==="{}")return [];let t=n.slice(1,-1);if(t==="")return [];let s=[],o="",a=false,c=0;for(let r=0;r<t.length;r++){let l=t[r];l==='"'&&t[r-1]!=="\\"?(a=!a,o+=l):l==="{"&&!a?(c++,o+=l):l==="}"&&!a?(c--,o+=l):l===","&&!a&&c===0?(s.push(e(o)),o=""):o+=l;}return o!==""&&s.push(e(o)),s},Ke=n=>n==="NULL"?null:n.startsWith('"')&&n.endsWith('"')?n.slice(1,-1).replace(/\\(.)/g,"$1"):n,je=n=>n==="NULL"?null:Number.parseInt(n,10);function Qe(n,e){if(n==null)return n;switch(e){case 20:return typeof n=="bigint"?n:BigInt(n);case 22:return Array.isArray(n)?n:typeof n=="string"?n.split(" ").map(Number).filter(t=>!Number.isNaN(t)):n;case 1002:case 1009:case 1015:return typeof n=="string"?se(n,Ke):n;case 1005:case 1007:case 1016:return typeof n=="string"?se(n,je):n;default:return n}}function H(n){let e=async(t,s)=>{let o=await n.driver.query(t,s?[...s]:[]);return {rows:o.rows.map(c=>Object.fromEntries(o.fields.map(r=>[r.name,Qe(c[r.name],r.dataTypeID)])))}};return {query:e,connect:async()=>({query:e,release:()=>{}}),end:async()=>{}}}async function oe(){try{let[{extract:n},{plan:e},{segmentActions:t}]=await Promise.all([import('@supabase/pg-delta/extract'),import('@supabase/pg-delta/plan'),import('@supabase/pg-delta/apply')]);return {extract:n,plan:e,segmentActions:t}}catch(n){throw new Error("Postgres schema diffing requires pg-delta to be available.",{cause:n})}}function W(n){let e=[...n.assumedRoles??[]],t=[{match:{all:[{kind:"acl"},{idField:{field:"grantee",glob:"postgres"}}]},action:"exclude"},{match:{all:[{verb:["link","unlink"]},{edgeTo:{edgeKind:"owner"}}]},action:"exclude"}];return e.length>0&&t.push({match:{all:[{kind:"role"},{name:e}]},action:"exclude"}),n.only?t.push({match:{not:{any:ae(n.only)}},action:"exclude"}):n.exclude?.length&&t.push({match:{any:ae(n.exclude)},action:"exclude"}),{id:"supabase-lite",filter:t,assumedRoles:["postgres",...e]}}function ae(n){let e=[...n];return [{all:[{kind:"schema"},{name:e}]},{schema:e},{target:{schema:e}}]}function ie(n,e){return n.segmentActions(e.actions).map(t=>({transactional:t.transactional,statements:e.actions.slice(t.start,t.end).map(s=>s.sql)}))}function re(n){let e=[];for(let t of n){let s=!t.nonTransactional,o=e[e.length-1];!o||t.newTransaction||o.transactional!==s?e.push({statements:[t.sql],transactional:s}):o.statements.push(t.sql);}return e}function ce(n){return n.preamble.filter(e=>e.name!=="search_path").map(e=>`SET LOCAL ${e.name} = ${Ye(e.value)}`)}function Ye(n){return `'${n.replace(/'/g,"''")}'`}function le(n){let e=[];for(let t of n.actions)t.dataLoss==="destructive"&&e.push(Ve(t));return e}function Ve(n){for(let e of n.destroys)if(e.kind==="table")return {table:U(e.schema,e.name),reason:"drop table"};for(let e of n.destroys)if(e.kind==="column")return {table:U(e.schema,e.table),reason:`drop column ${e.name}`};for(let e of n.destroys)if(e.kind==="sequence")return {table:U(e.schema,e.name),reason:"drop sequence"};return {table:"unknown",reason:n.sql}}function U(n,e){return n==="public"?e:`${n}.${e}`}var ze=new Set(["public","supabase_migrations"]),Xe=/\bCREATE\s+SCHEMA\b(?:\s+IF\s+NOT\s+EXISTS)?\s+"?([\w$]+)"?/gi;function Ze(n,e){let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),s=new RegExp(`(?<![\\w$])"?${t}"?\\.`);return n.some(o=>s.test(o))}function ue(n,e){let t=new Set;for(let s of e)for(let o of s.matchAll(Xe))t.add(o[1]);return n.facts().filter(s=>s.id.kind==="schema").map(s=>s.id.name).filter(s=>!ze.has(s)&&!t.has(s)&&Ze(e,s)).map(s=>`CREATE SCHEMA IF NOT EXISTS "${s}";`)}var tt=["supabase_migrations"],I=class{constructor(e,t){this.from=e;this.desiredSchema=t;}#e;async#t(e){if(this.#e)return this.#e;let t=new this.from.constructor;try{let s=C(v(this.desiredSchema));s&&await t.exec(s),await t.exec(this.desiredSchema);let{factBase:o}=await e.extract(H(t));return this.#e=o,o}finally{await t.close();}}async diff(e){let t=await oe(),s=await this.#t(t),{factBase:o}=await t.extract(H(this.from)),a=z(this.desiredSchema),c=e?.schemas?W({only:e.schemas,assumedRoles:a}):W({exclude:tt,assumedRoles:a}),r=t.plan(o,s,{policy:c});if(r.actions.length===0)return {diff:"",plan:{steps:[],warnings:[],unsafe:false}};let l=ie(t,r),f=ue(s,l.flatMap(g=>g.statements));f.length>0&&l[0]&&(l[0]={...l[0],statements:[...f,...l[0].statements]});let m=ce(r),p=[];for(let[g,y]of l.entries()){let d=y.transactional?[...m,...y.statements]:y.statements;for(let[_,S]of d.entries()){let b={sql:S};g>0&&_===0&&(b.newTransaction=true),y.transactional||(b.nonTransactional=true),p.push(b);}}return {diff:p.map(g=>g.sql).join(`
349
349
 
350
350
  `),plan:{steps:p,warnings:le(r),unsafe:r.safetyReport.destructiveActions>0}}}async migratePlan(e,t){if(e.steps.length===0)return;if(e.unsafe&&!t?.force)throw new DataLossError(e.warnings??[]);let s=e.steps.map(r=>r.sql).join(`
351
- `),o=L(s),a=new Set(e.steps.flatMap(r=>[...$(r.sql)]).filter(r=>!o.has(r))),c=C(a);c&&await this.from.exec(c);for(let r of re(e.steps)){if(r.transactional){await this.from.transaction(r.statements,{intent:"migration"});continue}for(let l of r.statements)await this.from.exec(l);}}async migrate(e){let t=await this.diff({schemas:e?.schemas});return await this.migratePlan(t.plan,e),t}safeSortPlanSteps(e){return e}};var J=class extends x{driver;dialect="postgres";#e=false;constructor(e={}){let t=e.url;t&&!t.includes("://")&&!me.existsSync(t)&&me.mkdirSync(t,{recursive:true});let s=new PGlite({...e.pgliteOptions,dataDir:e.url??void 0,extensions:{...e.pgliteOptions?.extensions,isn:isn,ltree:ltree,file_fdw:file_fdw,pgcrypto:pgcrypto},parsers:{20:a=>{let c=Number(a);return Number.isSafeInteger(c)?c:BigInt(a)},114:a=>JSON.parse(a),3802:a=>JSON.parse(a),1700:a=>{let c=Number(a);return Number.isFinite(c)&&String(c)===a?c:a},1082:a=>a,1083:a=>a,1114:a=>a,1184:a=>a,1266:a=>a,...e.pgliteOptions?.parsers}}),{dialect:o}=new T(s);super(e),this.driver=s,this.kysely=new Kysely({dialect:o});}async exec(e,...t){try{if(t.length>0){let{rows:o}=await sql(e,...t??[]).execute(this.kysely);return {rows:o}}return {rows:(await this.driver.exec(e))[0].rows}}catch(s){throw console.error(s),new Error(`Failed to execute query: ${e}`)}}async close(){this.#e||(this.#e=true,await this.clearSchemaCache(),await this.kysely.destroy(),await this.driver.close());}createMigrator(e){let t=[this.config.baseSchema,e].filter(Boolean).join(`
351
+ `),o=L(s),a=new Set(e.steps.flatMap(r=>[...v(r.sql)]).filter(r=>!o.has(r))),c=C(a);c&&await this.from.exec(c);for(let r of re(e.steps)){if(r.transactional){await this.from.transaction(r.statements,{intent:"migration"});continue}for(let l of r.statements)await this.from.exec(l);}}async migrate(e){let t=await this.diff({schemas:e?.schemas});return await this.migratePlan(t.plan,e),t}safeSortPlanSteps(e){return e}};var J=class extends x{driver;dialect="postgres";#e=false;constructor(e={}){let t=e.url;if(t&&!t.includes("://")){let a=globalThis.process?.getBuiltinModule?.("node:fs");a&&!a.existsSync(t)&&a.mkdirSync(t,{recursive:true});}let s=new PGlite({...e.pgliteOptions,dataDir:e.url??void 0,extensions:{...e.pgliteOptions?.extensions,isn:isn,ltree:ltree,file_fdw:file_fdw,pgcrypto:pgcrypto},parsers:{20:a=>{let c=Number(a);return Number.isSafeInteger(c)?c:BigInt(a)},114:a=>JSON.parse(a),3802:a=>JSON.parse(a),1700:a=>{let c=Number(a);return Number.isFinite(c)&&String(c)===a?c:a},1082:a=>a,1083:a=>a,1114:a=>a,1184:a=>a,1266:a=>a,...e.pgliteOptions?.parsers}}),{dialect:o}=new T(s);super(e),this.driver=s,this.kysely=new Kysely({dialect:o});}async exec(e,...t){try{if(t.length>0){let{rows:o}=await sql(e,...t??[]).execute(this.kysely);return {rows:o}}return {rows:(await this.driver.exec(e))[0].rows}}catch(s){throw console.error(s),new Error(`Failed to execute query: ${e}`)}}async close(){this.#e||(this.#e=true,await this.clearSchemaCache(),await this.kysely.destroy(),await this.driver.close());}createMigrator(e){let t=[this.config.baseSchema,e].filter(Boolean).join(`
352
352
 
353
- `);return new I(this,t)}};async function jt(n={}){return new J(n)}export{J as PgliteConnection,jt as createPgliteConnection};
353
+ `);return new I(this,t)}};async function Gt(n={}){return new J(n)}export{J as PgliteConnection,Gt as createPgliteConnection};