houdini-adapter-auto
Version:
An adapter for deploying your Houdini application according to the build environment
3 lines (2 loc) • 2.26 kB
JavaScript
import{resolve as p}from"import-meta-resolve";import{execSync as l}from"child_process";import s from"fs/promises";import n from"path";import{pathToFileURL as m}from"url";var u=[{name:"CloudFlare Pages",test:()=>!!process.env.CF_PAGES||!!process.env.CLOUDFLARE_PAGES,module:"houdini-adapter-cloudflare"},{name:"HoudiniCloud",test:()=>!!process.env.HOUDINI_CLOUD,module:"houdini-cloud-adapter"},{name:"Node",test:()=>!0,module:"houdini-adapter-node"}],f=async e=>{let t;for(let o of u)if(o.test()){t=o;break}if(!t)throw new Error("Could not identify environment");return console.log(`\u{1F3A9} Identified environment: ${t.name}`),(await y(t))(e)};async function y({module:e}){try{return await d(e)}catch(o){let i=o;if(i.code!=="ERR_MODULE_NOT_FOUND"||!i.message.startsWith(`Cannot find package '${e}'`))throw o}let{package_manager:t}=await g(),a={yarn:"add -D",npm:"install -D",pnpm:"add -D"};try{return l(`${t} ${a[t]} ${e}`,{stdio:"inherit",env:{...process.env,NODE_ENV:void 0}}),console.log(`Successfully installed ${e}!`),console.warn(`If you plan on staying in this environment, consider adding ${e} to your project so you don't have to install it every time you build your application.`),await d(e)}catch(o){throw new Error(`Could not install package ${e}. Please install it manually or maybe consider replacing houdini-adapter-auto with ${e}.
${o.message}`)}}async function d(e){let t=m(process.cwd()).href;return(await import(p(e,`${t}/x.js`))).default}async function g(e=process.cwd()){let t=!1;try{await s.stat(n.join(e,"tsconfig.json")),t=!0}catch{}let a="npm",o=e;do{try{await s.access(n.join(o,"pnpm-lock.yaml")),a="pnpm";break}catch{}try{await s.access(n.join(o,"yarn.lock")),a="yarn";break}catch{}}while(o!==(o=n.dirname(o)));return{typescript:t,package_manager:a,...await w(e)}}async function w(e){let t;try{let r=await s.readFile(n.join(e,"package.json"),"utf-8");if(r)t=JSON.parse(r);else throw new Error("not found")}catch{throw new Error("\u274C houdini init must target an existing node project (with a package.json)")}let{devDependencies:a,dependencies:o}=t,i=r=>!!(a?.[r]||o?.[r]),c={framework:"svelte"};return i("@sveltejs/kit")&&(c={framework:"kit"}),{frameworkInfo:c,module:t.type==="module"?"esm":"commonjs"}}var j=f;export{j as default};