@supabase/sql-to-rest
Version:
[](https://github.com/supabase-community/sql-to-rest/actions?query=branch%3Amain) [](https://www
14 lines • 29.7 kB
JavaScript
var Ee=Object.defineProperty,Se=Object.defineProperties;var _e=Object.getOwnPropertyDescriptors;var q=Object.getOwnPropertySymbols;var te=Object.prototype.hasOwnProperty,re=Object.prototype.propertyIsEnumerable;var ee=(e,t,r)=>t in e?Ee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,A=(e,t)=>{for(var r in t||(t={}))te.call(t,r)&&ee(e,r,t[r]);if(q)for(var r of q(t))re.call(t,r)&&ee(e,r,t[r]);return e},$=(e,t)=>Se(e,_e(t));var ne=(e,t)=>{var r={};for(var n in e)te.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&q)for(var n of q(e))t.indexOf(n)<0&&re.call(e,n)&&(r[n]=e[n]);return r};var S=(e,t,r)=>new Promise((n,i)=>{var a=s=>{try{l(r.next(s))}catch(f){i(f)}},o=s=>{try{l(r.throw(s))}catch(f){i(f)}},l=s=>s.done?n(s.value):Promise.resolve(s.value).then(a,o);l((r=r.apply(e,t)).next())});var I=class extends Error{constructor(r,n){super(Ce(r));this.hint=n;this.name="ParsingError"}},v=class extends Error{constructor(){super(...arguments);this.name="UnimplementedError"}},u=class extends Error{constructor(r,n){super(r);this.hint=n;this.name="UnsupportedError"}},_=class extends Error{constructor(r,n){super(r);this.renderer=n;this.name="RenderError"}};function Ce(e){return e[0].toUpperCase()+e.slice(1)}function oe(e){switch(e){case'syntax error at or near "from"':return"Did you leave a trailing comma in the select target list?";case'syntax error at or near "where"':return"Do you have an incomplete join in the FROM clause?";default:}}import{parseQuery as Je}from"libpg-query";function C(e,t){if(e.A_Expr.name.length>1)throw new u("Only one operator name supported per expression");let[r]=e.A_Expr.name,n=r.String.sval;if(!["->","->>"].includes(n))throw new u("Invalid JSON operator");let i,a,o;if("A_Const"in e.A_Expr.lexpr){if("fval"in e.A_Expr.lexpr.A_Const)throw new u("Invalid JSON path");a=b(e.A_Expr.lexpr)}else if("A_Expr"in e.A_Expr.lexpr){let{column:l}=C(e.A_Expr.lexpr,t);a=l}else if("ColumnRef"in e.A_Expr.lexpr)a=w(e.A_Expr.lexpr.ColumnRef.fields,t);else throw new u("Invalid JSON path");if("A_Const"in e.A_Expr.rexpr){if("fval"in e.A_Expr.rexpr.A_Const)throw new u("Invalid JSON path");o=b(e.A_Expr.rexpr)}else if("TypeCast"in e.A_Expr.rexpr)if(i=V(e.A_Expr.rexpr.TypeCast.typeName.names),"A_Const"in e.A_Expr.rexpr.TypeCast.arg)if("sval"in e.A_Expr.rexpr.TypeCast.arg.A_Const)o=e.A_Expr.rexpr.TypeCast.arg.A_Const.sval.sval;else throw new u("Invalid JSON path");else throw new u("Invalid JSON path");else throw new u("Invalid JSON path");return{type:"column-target",column:`${a}${n}${o}`,cast:i}}function w(e,t,r="dot"){let n=e.map(l=>{if("String"in l)return l.String.sval;if("A_Star"in l)return"*";{let[s]=Object.keys(l);throw new u(`Unsupported internal type '${s}' for data type names`)}}),[i]=n.slice(-2,-1),[a]=n.slice(-1),o=t.joined.find(l=>{var s;return((s=l.alias)!=null?s:l.relation)===i});if(!i||i===t.primary.reference)return a;if(o){let l=o.flatten?o.relation:i;if(r==="dot")return[l,a].join(".");if(r==="parenthesis")return`${l}(${a})`;throw new Error(`Unknown render syntax '${r}'`)}else{let l=[i,a].join(".");throw new u(`Found foreign column '${l}' without a join to that relation`,"Did you forget to join that relation or alias it to something else?")}}function V(e){let[t,...r]=e;if(t.String.sval==="pg_catalog"&&r.length===1){let[n]=r;switch(n.String.sval){case"int2":return"smallint";case"int4":return"int";case"int8":return"bigint";case"float8":return"float";default:return n.String.sval}}else{if(r.length>0)throw new u("Casts can only reference data types by their unqualified name (not schema-qualified)");return t.String.sval}}function b(e){var t;if("sval"in e.A_Const)return e.A_Const.sval.sval;if("ival"in e.A_Const)return(t=e.A_Const.ival.ival)!=null?t:0;if("fval"in e.A_Const)return parseFloat(e.A_Const.fval.fval);throw new u("Constant values must be a string, integer, or float")}function ae(e){return e.flatMap(t=>{let{type:r}=t;if(r==="column-target"||r==="aggregate-target")return t;if(r==="embedded-target")return[t,...ae(t.targets)];throw new u(`Unknown target type '${r}'`)})}function ie(e,t){let{type:r}=e;if(r==="column")return t(e);if(r==="logical")return e.values.some(n=>ie(n,t));throw new u(`Unknown filter type '${r}'`)}function U(e,t,r){return e.every(n=>{let{type:i}=n;if(i==="column-target"||i==="aggregate-target")return t(n,r);if(i==="embedded-target")return U(n.targets,t,n);throw new u(`Unknown target type '${i}'`)})}function N(e,t,r){return e.some(n=>{let{type:i}=n;if(i==="column-target"||i==="aggregate-target")return t(n,r);if(i==="embedded-target")return N(n.targets,t,n);throw new u(`Unknown target type '${i}'`)})}function se(e,t,r){var i;let n=(i=e.map(a=>w(a.ColumnRef.fields,r)))!=null?i:[];if(!n.every(a=>N(t,(o,l)=>"column"in o?(l?[l.alias&&!l.flatten?l.alias:l.relation,o.column]:[o.column]).join(".")===a:!1)))throw new u("Every group by column must also exist as a select target");if(N(t,a=>a.type==="aggregate-target")&&!U(t,(a,o)=>{if(a.type==="aggregate-target")return!0;let s=(o?[o.alias&&!o.flatten?o.alias:o.relation,a.column]:[a.column]).join(".");return n.some(f=>s===f)}))throw new u("Every non-aggregate select target must also exist in a group by clause");if(n.length>0&&!N(t,a=>a.type==="aggregate-target"))throw new u("There must be at least one aggregate function in the select target list when using group by")}function W(e,t){if("A_Expr"in e){let r;if(e.A_Expr.name.length>1)throw new u("Only one operator name supported per expression");let n=e.A_Expr.kind,[i]=e.A_Expr.name,a=i.String.sval.toLowerCase(),o=ve(n,a);if("A_Expr"in e.A_Expr.lexpr)try{r=C(e.A_Expr.lexpr,t).column}catch(l){throw new u("Left side of WHERE clause must be a column")}else if("ColumnRef"in e.A_Expr.lexpr){let{fields:l}=e.A_Expr.lexpr.ColumnRef;r=w(l,t)}else{if("TypeCast"in e.A_Expr.lexpr)throw new u("Casting is not supported in the WHERE clause");if("FuncCall"in e.A_Expr.lexpr){let l=w(e.A_Expr.lexpr.FuncCall.funcname,t);if(o==="fts")if(l==="to_tsvector"){if(!e.A_Expr.lexpr.FuncCall.args||e.A_Expr.lexpr.FuncCall.args.length!==1)throw new u(`${l} requires 1 column argument`);let[s]=e.A_Expr.lexpr.FuncCall.args;if("A_Expr"in s)try{r=C(s,t).column}catch(f){throw new u(`${l} requires a column argument`)}else if("ColumnRef"in s){let{fields:f}=s.ColumnRef;r=w(f,t)}else throw"TypeCast"in s?new u("Casting is not supported in the WHERE clause"):new u(`${l} requires a column argument`)}else throw new u("Only 'to_tsvector' function allowed on left side of text search operator");else throw new u("Left side of WHERE clause must be a column")}else throw new u("Left side of WHERE clause must be a column")}if(o==="eq"||o==="neq"||o==="gt"||o==="gte"||o==="lt"||o==="lte"){if(!("A_Const"in e.A_Expr.rexpr))throw new u(`Right side of WHERE clause '${a}' expression must be a constant`,"Did you forget to wrap your value in single quotes?");let l=b(e.A_Expr.rexpr);return{type:"column",column:r,operator:o,negate:!1,value:l}}else if(o==="between"||o==="between symmetric"||o==="not between"||o==="not between symmetric"){if(!("List"in e.A_Expr.rexpr)||e.A_Expr.rexpr.List.items.length!==2)throw new u(`Right side of WHERE clause '${a}' expression must contain two constants`);let[l,s]=e.A_Expr.rexpr.List.items.map(h=>b(h));if(o.includes("symmetric")){if(typeof l!="number"||typeof s!="number")throw new u("BETWEEN SYMMETRIC is only supported with number values");if(l>s){let h=s;s=l,l=h}}let f={type:"column",column:r,operator:"gte",negate:!1,value:l},m={type:"column",column:r,operator:"lte",negate:!1,value:s};return{type:"logical",operator:"and",negate:o.includes("not"),values:[f,m]}}else if(o==="like"||o==="ilike"||o==="match"||o==="imatch"){if(!("A_Const"in e.A_Expr.rexpr)||!("sval"in e.A_Expr.rexpr.A_Const))throw new u(`Right side of WHERE clause '${o}' expression must be a string constant`);let l=e.A_Expr.rexpr.A_Const.sval.sval;return{type:"column",column:r,operator:o,negate:!1,value:l}}else if(o==="in"){if(!("List"in e.A_Expr.rexpr)||!e.A_Expr.rexpr.List.items.every(s=>"A_Const"in s))throw new u(`Right side of WHERE clause '${o}' expression must be a list of constants`);let l=e.A_Expr.rexpr.List.items.map(s=>b(s));return{type:"column",column:r,operator:o,negate:!1,value:l}}else if(o==="fts"){let l=["to_tsquery","plainto_tsquery","phraseto_tsquery","websearch_to_tsquery"];if(!("FuncCall"in e.A_Expr.rexpr))throw new u(`Right side of WHERE clause '${a}' expression must be one of these functions: ${l.join(", ")}`);let s=w(e.A_Expr.rexpr.FuncCall.funcname,t);if(!l.includes(s))throw new u(`Right side of WHERE clause '${a}' expression must be one of these functions: ${l.join(", ")}`);if(!e.A_Expr.rexpr.FuncCall.args||e.A_Expr.rexpr.FuncCall.args.length===0||e.A_Expr.rexpr.FuncCall.args.length>2)throw new u(`${s} requires 1 or 2 arguments`);let f=e.A_Expr.rexpr.FuncCall.args.map(R=>{if(!("A_Const"in R)||!("sval"in R.A_Const))throw new u(`${s} only accepts text arguments`);return R.A_Const.sval.sval}),[m]=f.slice(-2,-1),[h]=f.slice(-1),x=Re(s);return{type:"column",column:r,operator:x,config:m,value:h,negate:!1}}else throw new u(`Unsupported operator '${a}'`)}else if("NullTest"in e){let{fields:r}=e.NullTest.arg.ColumnRef,n=w(r,t),i=e.NullTest.nulltesttype==="IS_NOT_NULL";return{type:"column",column:n,operator:"is",negate:i,value:null}}else if("BoolExpr"in e){let r;if(e.BoolExpr.boolop==="AND_EXPR")r="and";else if(e.BoolExpr.boolop==="OR_EXPR")r="or";else if(e.BoolExpr.boolop==="NOT_EXPR")r="not";else throw new u(`Unknown boolop '${e.BoolExpr.boolop}'`);let n=e.BoolExpr.args.map(i=>W(i,t));if(r==="not"){if(n.length>1)throw new u(`NOT expressions must have only 1 child, but received ${n.length} children`);let[i]=n;return i.negate=!0,i}return{type:"logical",operator:r,negate:!1,values:n}}else throw new u("The WHERE clause must contain an expression")}function ve(e,t){switch(e){case"AEXPR_OP":switch(t){case"=":return"eq";case"<>":return"neq";case">":return"gt";case">=":return"gte";case"<":return"lt";case"<=":return"lte";case"~":return"match";case"~*":return"imatch";case"@@":return"fts";default:throw new u(`Unsupported operator '${t}'`)}case"AEXPR_BETWEEN":case"AEXPR_BETWEEN_SYM":case"AEXPR_NOT_BETWEEN":case"AEXPR_NOT_BETWEEN_SYM":switch(t){case"between":return"between";case"between symmetric":return"between symmetric";case"not between":return"not between";case"not between symmetric":return"not between symmetric";default:throw new u(`Unsupported operator '${t}'`)}case"AEXPR_LIKE":switch(t){case"~~":return"like";default:throw new u(`Unsupported operator '${t}'`)}case"AEXPR_ILIKE":switch(t){case"~~*":return"ilike";default:throw new u(`Unsupported operator '${t}'`)}case"AEXPR_IN":switch(t){case"=":return"in";default:throw new u(`Unsupported operator '${t}'`)}}}function Re(e){switch(e){case"to_tsquery":return"fts";case"plainto_tsquery":return"plfts";case"phraseto_tsquery":return"phfts";case"websearch_to_tsquery":return"wfts";default:throw new u(`Function '${e}' not supported for full-text search`)}}function le(e){let t,r;if(e.SelectStmt.limitCount){if(!("ival"in e.SelectStmt.limitCount.A_Const))throw new u("Limit count must be an integer");t=e.SelectStmt.limitCount.A_Const.ival.ival}if(e.SelectStmt.limitOffset){if(!("ival"in e.SelectStmt.limitOffset.A_Const))throw new u("Limit offset must be an integer");r=e.SelectStmt.limitOffset.A_Const.ival.ival}if(!(t===void 0&&r===void 0))return{count:t,offset:r}}function ue(e,t){return e.map(r=>{let n;if("A_Expr"in r.SortBy.node)try{n=C(r.SortBy.node,t).column}catch(o){throw new u("ORDER BY clause must reference a column")}else if("ColumnRef"in r.SortBy.node){let{fields:o}=r.SortBy.node.ColumnRef;n=w(o,t,"parenthesis")}else throw"TypeCast"in r.SortBy.node?new u("Casting is not supported in the ORDER BY clause"):new u("ORDER BY clause must reference a column");let i=Ae(r.SortBy.sortby_dir),a=$e(r.SortBy.sortby_nulls);return{column:n,direction:i,nulls:a}})}function Ae(e){switch(e){case"SORTBY_ASC":return"asc";case"SORTBY_DESC":return"desc";case"SORTBY_DEFAULT":return;default:throw new u(`Unknown sort by direction '${e}'`)}}function $e(e){switch(e){case"SORTBY_NULLS_FIRST":return"first";case"SORTBY_NULLS_LAST":return"last";case"SORTBY_NULLS_DEFAULT":return;default:throw new u(`Unknown sort by nulls '${e}'`)}}var Y=["avg","count","max","min","sum"];function me(e){var s,f;if(!e.SelectStmt.fromClause)throw new u("The query must have a from clause");if(e.SelectStmt.fromClause.length>1)throw new u("Only one FROM source is supported");if(e.SelectStmt.withClause)throw new u("CTEs are not supported");if(e.SelectStmt.distinctClause)throw new u("SELECT DISTINCT is not supported");if(e.SelectStmt.havingClause)throw new u("The HAVING clause is not supported");let[t]=e.SelectStmt.fromClause,r=fe(t),n=r.primary.name,i=be(e.SelectStmt.targetList,r);se((s=e.SelectStmt.groupClause)!=null?s:[],i,r);let a=e.SelectStmt.whereClause?W(e.SelectStmt.whereClause,r):void 0,o=ue((f=e.SelectStmt.sortClause)!=null?f:[],r),l=le(e);return{type:"select",from:n,targets:i,filter:a,sorts:o,limit:l}}function fe(e){var t,r,n;if("RangeVar"in e)return{primary:{name:e.RangeVar.relname,alias:(t=e.RangeVar.alias)==null?void 0:t.aliasname,get reference(){var i;return(i=this.alias)!=null?i:this.name}},joined:[]};if("JoinExpr"in e){let i=Ne(e.JoinExpr.jointype),{primary:a,joined:o}=fe(e.JoinExpr.larg),l=(r=e.JoinExpr.rarg.RangeVar.alias)==null?void 0:r.aliasname,s=l!=null?l:e.JoinExpr.rarg.RangeVar.relname,f=[a.reference,...o.map(y=>{var Z;return(Z=y.alias)!=null?Z:y.relation}),s];if(!("A_Expr"in e.JoinExpr.quals))throw new u("Join qualifier must be an expression comparing columns");let m,h,x=e.JoinExpr.quals.A_Expr;if(!("ColumnRef"in x.lexpr))throw new u("Left side of join qualifier must be a column");if(!x.lexpr.ColumnRef.fields.every(y=>"String"in y))throw new u("Left side column of join qualifier must contain String fields");let R=x.lexpr.ColumnRef.fields.map(y=>y.String.sval),[F]=R.slice(-2,-1),[G]=R.slice(-1);if(!F)m=a.reference;else if(f.includes(F))m=F;else if(F===s)m=s;else throw new u(`Left side of join qualifier references a different relation (${F}) than the join (${f.join(", ")})`);if(!("ColumnRef"in x.rexpr))throw new u("Right side of join qualifier must be a column");if(!x.rexpr.ColumnRef.fields.every(y=>"String"in y))throw new u("Right side column of join qualifier must contain String fields");let z=x.rexpr.ColumnRef.fields.map(y=>y.String.sval),[j]=z.slice(-2,-1),[K]=z.slice(-1);if(!j)h=a.reference;else if(f.includes(j))h=j;else if(j===s)h=s;else throw new u(`Right side of join qualifier references a different relation (${j}) than the join (${f.join(", ")})`);if(h===m)throw new u("Join qualifier cannot compare columns from same relation");if(h!==s&&m!==s)throw new u("Join qualifier must reference a column from the joined table");let[ye]=x.name;if(ye.String.sval!=="=")throw new u("Join qualifier operator must be '='");let B,D;h===s?(B={relation:m,column:G},D={relation:h,column:K}):(D={relation:m,column:G},B={relation:h,column:K});let xe={type:"embedded-target",relation:e.JoinExpr.rarg.RangeVar.relname,alias:(n=e.JoinExpr.rarg.RangeVar.alias)==null?void 0:n.aliasname,joinType:i,targets:[],flatten:!0,joinedColumns:{left:B,right:D}};return{primary:a,joined:[...o,xe]}}else{let[i]=Object.keys(e);throw new u(`Unsupported FROM clause type '${i}'`)}}function be(e,t){let n=e.map(a=>{let o=X(a.ResTarget.val,t);return o.alias=a.ResTarget.name,o}).filter(a=>{if(a.type==="aggregate-target"&&!("column"in a))return!0;let o=a.column.split("."),[l]=o.slice(-2,-1),[s]=o.slice(-1);if(!l)return!0;if(l){let f=t.joined.find(m=>(m.alias&&!m.flatten?m.alias:m.relation)===l);if(!f)throw new u(`Found foreign column '${a.column}' in target list without a join to that relation`,"Did you forget to join that relation or alias it to something else?");return a.column=s,f.targets.push(a),!1}return!0}),i=t.joined.reduce((a,o)=>{if(o.joinedColumns.left.relation===t.primary.reference)return[...a,o];let l=t.joined.find(s=>{var f;return((f=s.alias)!=null?f:s.relation)===o.joinedColumns.left.relation});if(!l)throw new u(`Something went wrong, could not find parent embedded target for nested embedded target '${o.relation}'`);return l.targets.push(o),a},[]);return[...n,...i]}function X(e,t){if("TypeCast"in e)return Le(e,t);if("ColumnRef"in e)return Oe(e,t);if("A_Expr"in e)return Fe(e,t);if("FuncCall"in e)return je(e,t);throw new u("Only columns, JSON fields, and aggregates are supported as query targets")}function Ne(e){switch(e){case"JOIN_INNER":return"inner";case"JOIN_LEFT":return"left";default:throw new u(`Unsupported join type '${e}'`)}}function Le(e,t){let r=V(e.TypeCast.typeName.names);if("A_Const"in e.TypeCast.arg)throw new u("Only columns, JSON fields, and aggregates are supported as query targets");let n=X(e.TypeCast.arg,t),{type:i}=n;if(i==="aggregate-target")return $(A({},n),{outputCast:r});if(i==="column-target")return $(A({},n),{cast:r});throw new u(`Cannot process target with type '${i}'`)}function Oe(e,t){return{type:"column-target",column:w(e.ColumnRef.fields,t)}}function Fe(e,t){try{return C(e,t)}catch(r){let n=r instanceof Error&&r.message==="Invalid JSON path"?"Did you forget to quote a JSON path?":void 0;throw new u("Expressions not supported as targets",n)}}function je(e,t){let r=w(e.FuncCall.funcname,t);if(!Y.includes(r))throw new u(`Only the following aggregate functions are supported: ${JSON.stringify(Y)}`);if(r==="count"&&!e.FuncCall.args&&e.FuncCall.agg_star)return{type:"aggregate-target",functionName:r};if(!e.FuncCall.args)throw new u(`Aggregate function '${r}' requires a column argument`);if(e.FuncCall.args&&e.FuncCall.args.length>1)throw new u("Aggregate functions only accept one argument");let[n]=e.FuncCall.args,i=X(n,t);if(i.type==="aggregate-target")throw new u("Aggregate functions cannot contain another function");let l=i,{cast:a}=l,o=ne(l,["cast"]);return $(A({},o),{type:"aggregate-target",functionName:r,inputCast:a})}function Bt(e){return S(this,null,function*(){try{let t=yield Je(e);if(t.stmts.length===0)throw new u("Expected a statement, but received none");if(t.stmts.length>1)throw new u("Expected a single statement, but received multiple");let[r]=t.stmts.map(n=>qe(n));return r}catch(t){if(t instanceof Error&&"cursorPosition"in t){let r=oe(t.message),n=new I(t.message,r);throw Object.assign(n,t),n}else throw t}})}function qe({stmt:e}){if("SelectStmt"in e)return me(e);if("InsertStmt"in e)throw new v("Insert statements are not yet implemented by the translator");if("UpdateStmt"in e)throw new v("Update statements are not yet implemented by the translator");if("DeleteStmt"in e)throw new v("Delete statements are not yet implemented by the translator");if("ExplainStmt"in e)throw new v("Explain statements are not yet implemented by the translator");{let[t]=Object.keys(e),r=t.replace(/Stmt$/,"");throw new u(`${r} statements are not supported`)}}var Ie=function(){function e(t,r){for(var n=0;n<r.length;n++){var i=r[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}return function(t,r,n){return r&&e(t.prototype,r),n&&e(t,n),t}}(),Ue=Pe(["",""],["",""]);function Pe(e,t){return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function ke(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var He=function(){function e(){for(var t=this,r=arguments.length,n=Array(r),i=0;i<r;i++)n[i]=arguments[i];return ke(this,e),this.tag=function(a){for(var o=arguments.length,l=Array(o>1?o-1:0),s=1;s<o;s++)l[s-1]=arguments[s];return typeof a=="function"?t.interimTag.bind(t,a):typeof a=="string"?t.transformEndResult(a):(a=a.map(t.transformString.bind(t)),t.transformEndResult(a.reduce(t.processSubstitutions.bind(t,l))))},n.length>0&&Array.isArray(n[0])&&(n=n[0]),this.transformers=n.map(function(a){return typeof a=="function"?a():a}),this.tag}return Ie(e,[{key:"interimTag",value:function(r,n){for(var i=arguments.length,a=Array(i>2?i-2:0),o=2;o<i;o++)a[o-2]=arguments[o];return this.tag(Ue,r.apply(void 0,[n].concat(a)))}},{key:"processSubstitutions",value:function(r,n,i){var a=this.transformSubstitution(r.shift(),n);return"".concat(n,a,i)}},{key:"transformString",value:function(r){var n=function(a,o){return o.onString?o.onString(a):a};return this.transformers.reduce(n,r)}},{key:"transformSubstitution",value:function(r,n){var i=function(o,l){return l.onSubstitution?l.onSubstitution(o,n):o};return this.transformers.reduce(i,r)}},{key:"transformEndResult",value:function(r){var n=function(a,o){return o.onEndResult?o.onEndResult(a):a};return this.transformers.reduce(n,r)}}]),e}(),p=He;var Be=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return{onEndResult:function(n){if(t==="")return n.trim();if(t=t.toLowerCase(),t==="start"||t==="left")return n.replace(/^\s*/,"");if(t==="end"||t==="right")return n.replace(/\s*$/,"");throw new Error("Side not supported: "+t)}}},c=Be;function De(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}else return Array.from(e)}var Ve=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"initial";return{onEndResult:function(n){if(t==="initial"){var i=n.match(/^[^\S\n]*(?=\S)/gm),a=i&&Math.min.apply(Math,De(i.map(function(l){return l.length})));if(a){var o=new RegExp("^.{"+a+"}","gm");return n.replace(o,"")}return n}if(t==="all")return n.replace(/^[^\S\n]+/gm,"");throw new Error("Unknown type: "+t)}}},d=Ve;var We=function(t,r){return{onEndResult:function(i){if(t==null||r==null)throw new Error("replaceResultTransformer requires at least 2 arguments.");return i.replace(t,r)}}},T=We;var Ye=function(t,r){return{onSubstitution:function(i,a){if(t==null||r==null)throw new Error("replaceSubstitutionTransformer requires at least 2 arguments.");return i==null?i:i.toString().replace(t,r)}}},E=Ye;var Me={separator:"",conjunction:"",serial:!1},Qe=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Me;return{onSubstitution:function(n,i){if(Array.isArray(n)){var a=n.length,o=t.separator,l=t.conjunction,s=t.serial,f=i.match(/(\n?[^\S\n]+)$/);if(f?n=n.join(o+f[1]):n=n.join(o+" "),l&&a>1){var m=n.lastIndexOf(o);n=n.slice(0,m)+(s?o:"")+" "+l+n.slice(m+1)}}return n}}},g=Qe;var Ge=function(t){return{onSubstitution:function(n,i){if(t!=null&&typeof t=="string")typeof n=="string"&&n.includes(t)&&(n=n.split(t));else throw new Error("You need to specify a string character to split by.");return n}}},L=Ge;var pe=function(t){return t!=null&&!Number.isNaN(t)&&typeof t!="boolean"},ze=function(){return{onSubstitution:function(r){return Array.isArray(r)?r.filter(pe):pe(r)?r:""}}},P=ze;var vr=new p(g({separator:","}),d,c);var Fr=new p(g({separator:",",conjunction:"and"}),d,c);var Hr=new p(g({separator:",",conjunction:"or"}),d,c);var zr=new p(L(`
`),P,g,d,c);var pn=new p(L(`
`),g,d,c,E(/&/g,"&"),E(/</g,"<"),E(/>/g,">"),E(/"/g,"""),E(/'/g,"'"),E(/`/g,"`"));var yn=new p(T(/(?:\n(?:\s*))+/g," "),c);var Rn=new p(T(/(?:\n\s*)/g,""),c);var jn=new p(g({separator:","}),T(/(?:\s+)/g," "),c);var Bn=new p(g({separator:",",conjunction:"or"}),T(/(?:\s+)/g," "),c);var Gn=new p(g({separator:",",conjunction:"and"}),T(/(?:\s+)/g," "),c);var oo=new p(g,d,c);var po=new p(g,T(/(?:\s+)/g," "),c);var ut=new p(d,c),k=ut;var Ro=new p(d("all"),c);function O(e,t){let r=t?" ".repeat(t.initialIndent):"",n=t?`
`:"";return e.map(i=>{if(i.type==="column-target"){let{column:a,alias:o,cast:l}=i,s=a;return o&&o!==a&&(s=`${o}:${s}`),l&&(s=`${s}::${l}`),s=`${r}${s}`,s}else if(i.type==="aggregate-target"&&!("column"in i)){let{functionName:a,alias:o,outputCast:l}=i,s=`${a}()`;return o&&(s=`${o}:${s}`),l&&(s=`${s}::${l}`),s=`${r}${s}`,s}else if(i.type==="aggregate-target"){let{column:a,alias:o,functionName:l,inputCast:s,outputCast:f}=i,m=a;return o&&o!==a&&(m=`${o}:${m}`),s&&(m=`${m}::${s}`),m=`${m}.${l}()`,f&&(m=`${m}::${f}`),m=`${r}${m}`,m}else if(i.type==="embedded-target"){let{relation:a,alias:o,joinType:l,targets:s,flatten:f}=i,m=a;return l==="inner"&&(m=`${m}!inner`),o&&o!==a&&!f&&(m=`${o}:${m}`),f&&(m=`...${m}`),s.length>0?m=`${r}${m}(${n}${O(s,t?$(A({},t),{initialIndent:t.initialIndent+t.indent}):void 0)}${n}${r})`:m=`${r}${m}()`,m}}).join(","+n)}function M(e,t=!0,r=","){let{type:n}=e,i=e.negate?"not.":"";if(n==="column")if(e.operator==="like"||e.operator==="ilike"){let a=t?e.value.replaceAll("%","*"):e.value;return[e.column,`${i}${e.operator}.${a}`]}else if(e.operator==="in"){let a=e.value.map(o=>o.toString().includes(",")?`"${o}"`:o).join(",");return[e.column,`${i}${e.operator}.(${a})`]}else if(e.operator==="fts"||e.operator==="plfts"||e.operator==="phfts"||e.operator==="wfts"){let a=e.config?`(${e.config})`:"";return[e.column,`${i}${e.operator}${a}.${e.value}`]}else return[e.column,`${i}${e.operator}.${e.value}`];else{if(n==="logical")return[`${i}${e.operator}`,`(${e.values.map(a=>H(a,t,r)).join(r)})`];throw new Error(`Unknown filter type '${n}'`)}}function H(e,t=!0,r=","){let[n,i]=M(e,t,r),{type:a}=e;if(a==="column")return`${n}.${i}`;if(a==="logical")return`${n}${i}`;throw new Error(`Unknown filter type '${a}'`)}var ce=["*","(",")",",",":","!",">","-","[","]"];function ge(e,t=ce){return de(e.toString(),t)}function Q(e,t=ce){return de(encodeURIComponent(e),t)}function de(e,t){let r=e;for(let n of t){let i=n.charCodeAt(0).toString(16).toUpperCase();r=r.replaceAll(`%${i}`,n)}return r}function sa(e){return S(this,null,function*(){switch(e.type){case"select":return ft(e);default:throw new _(`Unsupported statement type '${e.type}'`,"http")}})}function ft(e){return S(this,null,function*(){let{from:t,targets:r,filter:n,sorts:i,limit:a}=e,o=new URLSearchParams;if(r.length>0){let[s]=r;(s.type!=="column-target"||s.column!=="*"||r.length!==1)&&o.set("select",O(r))}if(n&&he(o,n),i){let s=[];for(let f of i){let m=f.column;f.direction&&(m+=`.${f.direction}`),f.nulls&&(m+=`.nulls${f.nulls}`),s.push(m)}s.length>0&&o.set("order",s.join(","))}a&&(a.count!==void 0&&o.set("limit",a.count.toString()),a.offset!==void 0&&o.set("offset",a.offset.toString()));let l=`/${t}`;return{method:"GET",path:l,params:o,get fullPath(){return Array.from(o).length>0?`${l}?${ge(o)}`:l}}})}function he(e,t){let{type:r}=t;if(r==="logical"&&t.operator==="and"&&!t.negate)for(let n of t.values)he(e,n);else{let[n,i]=M(t);e.append(n,i)}}function la(e,t){let{method:r,fullPath:n}=t,i=new URL(e);return k`
${r} ${i.pathname}${n} HTTP/1.1
Host: ${i.host}
`}function ua(e,t){let{method:r,path:n,params:i}=t,a=[],o=new URL(e),l=(o.origin+o.pathname).replace(/\/+$/,""),s=i.size>0?"-G ":"";if(r==="GET"){a.push(`curl ${s}${l}${n}`);for(let[f,m]of i)a.push(` -d "${Q(f)}=${Q(m)}"`)}return a.join(` \\
`)}import*as pt from"prettier/plugins/babel";import*as ct from"prettier/plugins/estree";import*as we from"prettier/standalone";function ga(e){return S(this,null,function*(){switch(e.type){case"select":return gt(e);default:throw new _(`Unsupported statement type '${e.type}'`,"supabase-js")}})}function gt(e){return S(this,null,function*(){let{from:t,targets:r,filter:n,sorts:i,limit:a}=e,o=["const { data, error } = await supabase",`.from('${t}')`];if(r.length>0){let[s]=r;s.type==="column-target"&&s.column==="*"&&r.length===1?o.push(".select()"):r.length>1?o.push(`.select(
\`
${O(r,{initialIndent:4,indent:2})}
\`
)`):o.push(`.select(${JSON.stringify(O(r))})`)}if(n&&Te(o,n),i)for(let s of i)if(!s.direction&&!s.nulls)o.push(`.order(${JSON.stringify(s.column)})`);else{let f={ascending:s.direction?s.direction==="asc":void 0,nullsFirst:s.nulls?s.nulls==="first":void 0};o.push(`.order(${JSON.stringify(s.column)}, ${JSON.stringify(f)})`)}if(a)if(a.count!==void 0&&a.offset===void 0)o.push(`.limit(${a.count})`);else{if(a.count===void 0&&a.offset!==void 0)throw new _("supabase-js doesn't support an offset without a limit","supabase-js");a.count!==void 0&&a.offset!==void 0&&o.push(`.range(${a.offset}, ${a.offset+a.count})`)}return{code:(yield we.format(o.join(`
`),{parser:"babel",plugins:[pt,ct],printWidth:40,semi:!1,singleQuote:!0,trailingComma:"all"})).trim()}})}function Te(e,t){let{type:r}=t;if(t.negate){if(t.type==="column")if(t.operator==="fts"||t.operator==="plfts"||t.operator==="phfts"||t.operator==="wfts"){let n=t.config?`(${t.config})`:"";e.push(`.not(${JSON.stringify(t.column)}, ${JSON.stringify(`${t.operator}${n}`)}, ${JSON.stringify(t.value)})`)}else e.push(`.not(${JSON.stringify(t.column)}, ${JSON.stringify(t.operator)}, ${JSON.stringify(t.value)})`);else t.type==="logical"&&e.push(`.or(${JSON.stringify(H(t,!1,", "))})`);return}if(r==="column")if(t.operator==="fts"||t.operator==="plfts"||t.operator==="phfts"||t.operator==="wfts"){let n=t.operator!=="fts"||t.config!==void 0?`, ${JSON.stringify({type:dt(t.operator),config:t.config})}`:"";e.push(`.textSearch(${JSON.stringify(t.column)}, ${JSON.stringify(t.value)}${n})`)}else e.push(`.${t.operator}(${JSON.stringify(t.column)}, ${JSON.stringify(t.value)})`);else if(r==="logical")if(t.operator==="and")for(let n of t.values)Te(e,n);else t.operator==="or"&&e.push(`.or(${JSON.stringify(t.values.map(n=>H(n,!1,", ")).join(", "))})`);else throw new _(`Unknown filter type '${r}'`,"supabase-js")}function dt(e){switch(e){case"plfts":return"plain";case"phfts":return"phrase";case"wfts":return"websearch";default:return}}export{I as ParsingError,_ as RenderError,v as UnimplementedError,u as UnsupportedError,U as everyTarget,ae as flattenTargets,ua as formatCurl,la as formatHttp,oe as getParsingErrorHint,Bt as processSql,sa as renderHttp,ga as renderSupabaseJs,Ce as sentenceCase,ie as someFilter,N as someTarget,Y as supportedAggregateFunctions};
//# sourceMappingURL=index.mjs.map