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