UNPKG

azion

Version:

Azion Packages for Edge Computing.

2 lines (1 loc) 9.12 kB
var A=(t,e)=>t?.length>e?t.slice(0,e):t;async function m(t,e,n,r=!0){let s=await fetch(t,e);if(!s.ok){let o=`HTTP error! Status: ${s.status} - ${s.statusText}`;throw n&&console.log(`Error in fetch: ${o}`),new Error(o)}if(r){let o=s.headers.get("content-type");if(!o||!o.includes("application/json")){let u=`Expected JSON response, but got: ${await s.text()}`;throw n&&console.log(`Error in fetch: ${u}`),new Error(u)}return await s.json()}else return await s.text()}var S=t=>t.map(e=>e?.error?{message:e.error}:null).find(e=>e!==null);var f=(t="production")=>({production:"https://api.azion.com/v4/edge_sql/databases",development:"/v4/edge_sql/databases",staging:"https://stage-api.azion.com/v4/edge_sql/databases"})[t],z=(t,e={})=>{let n={Accept:"application/json",...e};return t?{...n,Authorization:`Token ${t}`}:n},R=(t,e,n)=>{let r={method:t,headers:e,credentials:"include"};return n&&(r.body=n),r},E=(t,e,n)=>{let r={message:"Error unknown",operation:n};return t.forEach(s=>{e[s]&&(r={message:Array.isArray(e[s])?e[s].join(", "):e[s],operation:n})}),r},v=async(t,e,n,r="production")=>{try{let s=f(r),o=z(t,{"Content-Type":"application/json"}),i=R("POST",o,JSON.stringify({name:e})),a=await m(s,i,n);return a.state?(n&&console.log("Response Post Database",JSON.stringify(a)),{state:a.state,data:{clientId:a.data.client_id,createdAt:a.data.created_at,deletedAt:a.data.deleted_at,id:a.data.id,isActive:a.data.is_active,name:a.data.name,status:a.data.status,updatedAt:a.data.updated_at}}):(a.error=E(["detail"],a,"post database"),{error:a.error??JSON.stringify(a)})}catch(s){return n&&console.error("Error creating EdgeDB:",s),{error:{message:s.toString(),operation:"post database"}}}},q=async(t,e,n,r="production")=>{try{let s=f(r),o=z(t),i=R("DELETE",o),a=await m(`${s}/${e}`,i,n);return a.state?{state:a.state,data:{id:e}}:(a.error=E(["detail"],a,"delete database"),{error:a.error??JSON.stringify(a)})}catch(s){return n&&console.error("Error deleting EdgeDB:",s),{error:{message:s.toString(),operation:"delete database"}}}},N=async(t,e,n,r,s="production")=>{try{let o=f(s),i=z(t,{"Content-Type":"application/json"}),a=R("POST",i,JSON.stringify({statements:n})),u=await m(`${o}/${e}/query`,a,r);if(!u.data||!Array.isArray(u.data))return u.error=E(["detail"],u,"post query"),{error:u.error??JSON.stringify(u)};let l=S(u.data);if(l)return{error:{message:l?.message,operation:"post query"},state:u.state,data:u.data.filter(p=>p?.results)};if(r){let p={...u,data:u?.data?.map(g=>({...g,results:{...g.results,rows:A(g.results.rows,10)}}))};console.log("Response Query:",JSON.stringify(p))}return{state:u.state,data:u.data}}catch(o){return r&&console.error("Error querying EdgeDB:",o),{error:{message:o.toString(),operation:"post query"}}}},y=async(t,e,n,r="production")=>{try{let s=f(r),o=new URL(s);e&&Object.entries(e).forEach(([l,p])=>{p!==void 0&&o.searchParams.append(l,p.toString())});let i=z(t),a=R("GET",i),u=await m(o.toString(),a,n);if(!u.results)return u.error=E(["detail"],u,"get databases"),{error:u.error??JSON.stringify(u)};if(n){let l={...u,results:A(u.results,10)};console.log("Response Databases:",JSON.stringify(l))}return{links:u?.links,count:u.count,results:u.results.map(l=>({clientId:l.client_id,createdAt:l.created_at,deletedAt:l.deleted_at,id:l.id,isActive:l.is_active,name:l.name,status:l.status,updatedAt:l.updated_at}))}}catch(s){return n&&console.error("Error getting all EdgeDBs:",s),{error:{message:s.toString(),operation:"get databases"}}}};var C=({results:t})=>{let e=[];if(t instanceof Array){if(t.length===0)return{results:[]};let n=null;e=t?.map(r=>(r?.rows&&(n=r.rows.map(s=>{let o={};return r?.columns&&r.columns.forEach((i,a)=>{o[i]=s[a]}),o})),{statement:r.statement,rows:n}))}return{results:e}};var w=()=>globalThis.Azion?.Sql||null,h=class{database=null;constructor(){this.database=w()?.Database||null}mapperQuery=async e=>{let n=[];for(let r of e){let s=r.result.columnCount();if(s===0)continue;let o=[];for(let u=0;u<s;u++)o.push(r.result.columnName(u));let i=await r.result.next(),a=[];for(;i;){let u=[];for(let l=0;l<s;l++)u.push(i.getValue(l));a.push(u),i=await r.result.next()}n.push({statement:r?.statement?.split(" ")[0],columns:o,rows:a})}return Promise.resolve(n)};query=async(e,n,r)=>{if(this.database?.open){let s=await this.database?.open(e),o=n.map(async i=>{let a=await s?.query(i);return{statement:i,result:a}});try{let i=await Promise.all(o);if(i.every(a=>a.result?.columnCount()>0))return i}catch(i){throw r?.debug&&console.error("Error querying:",i?.message),i}}return[]}};var x=async(t,e,n,r)=>{let s=await y(t,{search:e},r?.debug);if(s?.error)return{error:s?.error};let o=s?.results;if(!o||o.length===0)return{error:{message:`Database ${e} not found`,operation:"apiQuery"}};let i=o[0];if(!i?.id)return{error:{message:`Database ${e} not found`,operation:"apiQuery"}};let{state:a,data:u,error:l}=await N(t,i.id,n,r?.debug),p={state:"executed",results:void 0,toObject:()=>null},g=u&&u.length>0;return g&&(p={state:a,results:u.map((b,U)=>({statement:n[U]?.split(" ")[0],columns:b?.results?.columns&&b?.results?.columns.length>0?b?.results?.columns:void 0,rows:b?.results?.rows&&b?.results?.rows.length>0?b?.results?.rows:void 0})),toObject:()=>C(p)}),{data:g?p:void 0,error:l}},P=async(t,e,n,r)=>{try{let s=new h,o=await s.query(e,n,r),i={results:[],toObject:()=>null},a=await s.mapperQuery(o);if(a&&a.length>0&&(i.state="executed-runtime",i.results=a),r?.debug){let u={...i,results:i.results.map(l=>({...l,rows:A(l?.rows||[],10)}))};console.log("Response Query:",JSON.stringify(u))}return{data:{...i,toObject:()=>C(i)}}}catch(s){return{error:{message:s?.message||"Error executing query",operation:"executing query"}}}};var T=()=>typeof window<"u"&&typeof window.document<"u",J=!T()&&process?.env.AZION_DEBUG==="true",c=t=>T()?t??"":t??process?.env.AZION_TOKEN??"",$=t=>t??!!J,I=t=>T()?t??"production":t??process?.env.AZION_ENV??"production",d=t=>({...t,debug:$(t?.debug),env:I(t?.env)}),_=async(t,e,n)=>{let r=d(n),s=await v(c(t),e,r.debug,r.env);return s.data?{data:{state:s.state,...s.data,query:o=>D(c(t),e,o,r),execute:o=>O(c(t),e,o,r),getTables:o=>Q(e,{...o,debug:r.debug})}}:{error:s.error}},M=async(t,e,n)=>{let r=d(n),s=await q(c(t),e,r.debug,r.env);return s?.data?{data:{state:s.state??"executed",id:s.data.id}}:{error:s.error}},j=async(t,e,n)=>{let r=d(n);if(!e||e==="")return{error:{message:"Database name is required",operation:"get database"}};let s=await y(c(t),{search:e},r.debug,r.env);if(!s?.results||s?.results?.length===0)return{error:{message:`Database with name '${e}' not found`,operation:"get database"}};let o=s?.results[0];return!o||o.id===void 0||o.name!==e?{error:{message:`Database with name '${e}' not found`,operation:"get database"}}:{data:{...o,query:i=>D(c(t),o.name,i,r),execute:i=>O(c(t),o.name,i,r),getTables:i=>Q(o.name,{...i,debug:r.debug})}}},L=async(t,e,n)=>{let r=d(n),s=await y(c(t),e,r.debug,r.env);if(s?.results&&s.results.length>0){let o=s.results.map(i=>({...i,query:a=>D(c(t),i.name,a,r),execute:a=>O(c(t),i.name,a,r),getTables:a=>Q(i.name,{...a,debug:r.debug})}));return{data:{count:s.count,databases:o}}}return{error:s.error}},D=async(t,e,n,r)=>{let s=d(r);if(!e||e==="")return{error:{message:"Database name is required",operation:"query database"}};if(s.debug&&console.log(`Executing statements on database ${e}: ${n}`),!Array.isArray(n)||n.length===0)return{error:{message:'No statements to execute. Please provide at least one statement. e.g ["SELECT * FROM users"]',operation:"query database"}};if(!n.some(i=>["SELECT","PRAGMA"].some(a=>i.trim().toUpperCase().startsWith(a))))throw new Error("Only read statements are allowed");return s.external||!w()?x(t,e,n,s):P(t,e,n,s)},O=async(t,e,n,r)=>{let s=d(r);if(s.debug&&console.log(`Executing statements on database ${e}: ${n}`),!e||e==="")return{error:{message:"Database name is required",operation:"execute database"}};if(!Array.isArray(n)||n.length===0)return{error:{message:`No statements to execute. Please provide at least one statement. e.g ["INSERT INTO users (name) VALUES ('John')"]`,operation:"execute database"}};let o=n.some(a=>["INSERT","UPDATE","DELETE"].some(u=>a.trim().toUpperCase().startsWith(u))),i=n.some(a=>a.toUpperCase().match(/^(CREATE|DROP|ALTER|ATTACH|VACUUM|PRAGMA)/));return!i&&!o?{error:{message:"Only write statements are allowed",operation:"execute database"}}:i&&s.force===!1?{error:{message:"To admin statements, you need to set the force option to true",operation:"execute database"}}:s.external||!w()?x(t,e,n,s):P(t,e,n,s)},ie=async(t,e)=>_(c(),t,e),ue=(t,e)=>M(c(),t,e),le=async(t,e)=>j(c(),t,e),ce=(t,e)=>L(c(),t,e),Q=async(t,e)=>{let n=d(e);return D(c(),t,["PRAGMA table_list"],n)},pe=(t,e,n)=>D(c(),t,e,n),de=async(t,e,n)=>O(c(),t,e,n),W=t=>{let e=c(t?.token),n=$(t?.options?.debug);return{createDatabase:s=>_(e,s,{...t,debug:n}),deleteDatabase:s=>M(e,s,{...t,debug:n}),getDatabase:s=>j(e,s,{...t,debug:n}),getDatabases:s=>L(e,s,{...t,debug:n})}};var ge=W;export{W as createClient,ie as createDatabase,ge as default,ue as deleteDatabase,le as getDatabase,ce as getDatabases,Q as getTables,de as useExecute,pe as useQuery};