UNPKG

@bishwenduk029/fringe

Version:
2 lines (1 loc) 7.02 kB
import{createRequire as q}from"module";var f=q(import.meta.url);import ie from"http";import X from"node-fetch";import $ from"pino";var J=$(),d=J;import H from"node-dir";var U=async(e,t)=>{try{return(await H.promiseFiles(e)).filter(n=>!t.test(n))}catch(r){d.error(r)}return[]},C=U;var Oe=new RegExp("\\[(\\w+)\\]","g");function Y(e,t){let r=t.map(o=>{let a=o,s=[];return a=a.replace("/","\\/").replace(/^\./,"").replace(/\.(js|jsx|ts|tsx)$/,""),{page:o,pagePath:o.replace(/^\./,"").replace(/\.(js|jsx|ts|tsx)$/,""),parts:s,test:new RegExp("^"+a+"$","")}}),n=r.find(o=>o.pagePath.indexOf(e)>=0);return n||(r.sort(o=>o.page.includes("index")?-1:1),n=r.find(o=>o.test.test(e))),n||(n=r.find(o=>o.test.test(e+"/index"))),n||null}async function D(e,t){try{let r=Y(e,t);if(!r)return null;let n=await import(r.page);return{...r,context:n}}catch(r){d.error(r)}}function P(e){let t,r={};for(let o of e)switch(o.kind){case"OperationDefinition":t=o;break;case"FragmentDefinition":r[o.name.value]=o;break;default:throw new Error("This is not an executable document")}let n={kind:"Field",name:{kind:"Name",value:"data"},selectionSet:{kind:"SelectionSet",selections:t.selectionSet.selections}};return[r,n]}function A(e,t,r,n){let o=[];for(let a of r)switch(a.kind){case"Field":o.push(a);break;case"InlineFragment":{let s=a.typeCondition&&a.typeCondition.name.value,l=e(t);s===l&&o.push(...A(e,t,a.selectionSet.selections,n));break}case"FragmentSpread":{let s=n[a.name.value],l=s.typeCondition&&s.typeCondition.name.value,u=e(t);l===u&&o.push(...A(e,t,s.selectionSet.selections,n));break}default:throw new Error("Unknown selection node field kind: "+a.kind)}return o}function I(e,t){switch(e.kind){case"Variable":return t[e.name.value];case"NullValue":return null;case"ListValue":return e.values.map(n=>I(n,t));case"ObjectValue":let r={};for(let n of e.fields)r[n.name.value]=I(n.value,t);return r;default:return e.value}}function F(e,t){let r={};for(let o of e.arguments)r[o.name.value]=I(o.value,t);let n=JSON.stringify(r);return e.name.value+"("+n+")"}var G=e=>e.id===void 0?void 0:`${e.__typename}:${e.id}`,M=e=>{if(e.__typename===void 0)throw new Error("__typename cannot be undefined.");return e.__typename};function k(e,t={}){let r=!0;for(let n of e){let o=!0;if(n.name.value==="skip"||n.name.value==="include"){if(n.arguments){for(let a of n.arguments)if(a.name.value==="if"){let s;if(a.value.kind==="Variable")s=t&&!!t[a.value.name.value];else if(a.value.kind==="BooleanValue")s=a.value.value;else throw new Error(`The if argument must be of type Boolean!, found '${a.value.kind}'`);let l=n.name.value==="include"?s:!s;o=o&&l}}r=r&&o}}return r}function _(e,t,r,n=G,o=M){let[a,s]=P(e.definitions),l=[],u=Object.create(null);l.push([s,Object.create(null),r,"ROOT_QUERY"]);let j=g=>"ROOT_QUERY",O=!0;for(;l.length>0;){let[g,R,h,S]=l.pop(),b=null;if(!h)b=null;else if(Array.isArray(h)){let c=h;b=[];for(let i=0;i<c.length;i++)l.push([g,b,c[i],S+"."+i.toString()])}else{let c=h,i=j(c);b=i||S;let m=u[b];m||(m=Object.create(null),u[b]=m);let N=A(o,h,g.selectionSet.selections,a);for(let y of N)if(y.directives?k(y.directives,t):!0){let v=c[y.alias&&y.alias.value||y.name.value],x=y.arguments&&y.arguments.length>0?F(y,t):y.name.value;v!==null&&y.selectionSet?l.push([y,m,v,b+"."+x]):m[x]=v}}if(Array.isArray(R))R.unshift(b);else{let c=g.arguments&&g.arguments.length>0?F(g,t):g.name.value,i=R;i[c]=b}O&&(j=n,O=!1)}return u}async function V(e,t,r,n=M){let[o,a]=P(e.definitions),s=[],l={},u={};for(s.push([a,"ROOT_QUERY",l,void 0,"ROOT_QUERY","ROOT_QUERY"]);s.length>0;){let[O,g,R,h,S,b]=s.pop(),c;if(g===null)c=null;else if(Array.isArray(g)){let i=g;c=R[h]||[];for(let m=0;m<i.length;m++){let N=i[m];s.push([O,N,c,m,S,b])}}else{let i=g,m=await r.get(i);if(!m)return{data:void 0,fields:{[S]:new Set([b])}};let N=u[i];N===void 0&&(N=new Set,u[i]=N),Array.isArray(R),c=R[h]||Object.create(null);let y=A(n,m,O.selectionSet.selections,o);for(let p of y)if(p.directives?k(p.directives,t):!0){let x=p.arguments&&p.arguments.length>0?F(p,t):p.name.value;N.add(x);let T=m[x];if(T!==null&&p.selectionSet)s.push([p,T,c,p.alias&&p.alias.value||p.name.value,i,x]);else if(T!==void 0)c[p.alias&&p.alias.value||p.name.value]=T;else return{data:void 0,fields:{[i]:new Set([x])}}}}if(Array.isArray(R)){let i=R;i[h]=c}else{let i=R;i[h||O.alias&&O.alias.value||O.name.value]=c}}return{data:l.data,fields:u}}async function L(e,t){if(e)try{for(let r of Object.keys(t)){let n={};n={...await e.get(r)||{},...t[r]},e.put(r,n)}}catch(r){d.error(r)}}import{createNodeRedisClient as z}from"handy-redis";import{ConnectionString as B}from"connection-string";var w=class{constructor(){let t=new B(process.env.REDIS_HOST||process.env.FLY_REDIS_CACHE_URL);d.info(`Connecting to Redis instance at ${t.host}`),process.env.REDIS_HOST?this.cache=z({}):process.env.FLY_REDIS_CACHE_URL&&(this.cache=z({host:t.hostname,port:t.port,password:t.password}))}async get(t){if(!t)return null;let r=await this.cache.get(t);return JSON.parse(r)}async put(t,r){!t||await this.cache.set(t,JSON.stringify(r))}};var Z=async(e,t,r)=>{try{d.info("Building the page context for all files");let n=await C(e,t),o=async(a,s)=>{let l=await E(n,a,r);if(l){Object.keys(l.headers||[]).forEach(u=>{s.setHeader(u,l.headers[u])}),s.end(l.response);return}s.end(`Page not found: ${a.url}`)};return d.info("Handler is ready now starting the server"),o}catch(n){d.error(JSON.stringify(n))}},Q=async(e,t,r)=>{try{d.info("Building the page context for all files");let n=await C(e,t);return async a=>{let s=await E(n,a,r);return new Response(s.response,{headers:s.headers})}}catch(n){d.error(JSON.stringify(n))}},E=async(e,t,r)=>{let n=re(t.url);if(ne(n))return ee(n,e);if(oe(n))return te(n,e,r)},ee=async(e,t)=>{let r=await D(e,t);return r?{response:await r.context.default(),headers:{"Content-Type":"application/json"}}:null},te=async(e,t,r)=>{let n=await D(e,t);return n?{response:await ae(n.context,{},r),headers:{"Content-Type":"application/json"}}:null};function re(e){return e==="/"||/graphql$/.test(e)?"/index":e}function ne(e){return e.indexOf("/api/")>=0}function oe(e){return e.indexOf("/graphql/")>=0}async function ae({updatedAST:e,cacheFields:t,graphQLString:r},n={},o){try{let a=await se(o,e);if(!a||!a.data){a=await(await X("https://api.spacex.land/graphql",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:r,variables:n})})).json();let l=j=>`${j.__typename}:${t.map(O=>j[O]).join(":")}`,u=_(e,void 0,a.data,l);await L(o,u)}return JSON.stringify(a.data)}catch(a){d.error(a)}}async function se(e,t){let r=await V(t,{},e),n=(o,a)=>a instanceof Set?Array.from(a):a;return JSON.parse(JSON.stringify(r,n))}var W=Z;var K=process.env.PORT||8080,le=new RegExp("/.(js|jsx|ts|tsx|graphql)$/g"),ce=async(e,t,r=le)=>{let n=await W(e,r,t),o=ie.createServer(n);try{o.listen(K,()=>{d.info(`Server started on port ${K}`)})}catch(a){d.error(`Server failed to start ${JSON.stringify(a)}`)}};var de=ce;export{w as RedisCache,Q as buildCloudflareWorkerHandler,de as default};