UNPKG

create-bunny-launcher

Version:

Configure your static sites with bunny.net in a single cli command 🐰

3 lines (2 loc) 4.37 kB
import { createRequire } from 'module';const require = createRequire(import.meta.url); import{option as X}from"pastel";import{z as m}from"zod";import{resolve4 as q,resolve6 as G}from"node:dns/promises";import{BlockList as H}from"node:net";import{getDomain as K}from"tldts";import h from"is-cidr";import{isIP as g,isIPv4 as k,isIPv6 as y}from"node:net";function P(r,e){if(g(e)){if(k(e)){r.addAddress(e,"ipv4");return}if(y(e)){r.addAddress(e,"ipv6");return}}if(h(e)){if(h.v4(e)){let[o,t]=e.split("/");if(o&&t){r.addSubnet(o,Number(t),"ipv4");return}}if(h.v6(e)){let[o,t]=e.split("/");if(o&&t){r.addSubnet(o,Number(t),"ipv6");return}}}if(e.includes("-")){let[o,t]=e.split("-");if(o&&t&&g(o)&&g(t)){if(k(o)&&k(t)){r.addRange(o,t,"ipv4");return}if(y(o)&&y(t)){r.addRange(o,t,"ipv6");return}}}}import{isIP as _,isIPv4 as j,isIPv6 as Y}from"node:net";function v(r,e){if(_(e)){if(j(e))return r.check(e,"ipv4");if(Y(e))return r.check(e,"ipv6")}}function A(r){return r.status==="fulfilled"}function C(r){if(!r.ok)throw new Error(`${r.status} ${r.statusText}`,{cause:r});return r}async function N(r){let e=K(r),o=new URL(r);if(!e)throw new Error(`Cannot resolve domain for "${o.hostname}"`);try{let[t,n,d]=await Promise.all([Promise.allSettled([q(e),G(e)]),w("https://bunnycdn.com/api/system/edgeserverlist"),w("https://bunnycdn.com/api/system/edgeserverlist/IPv6")]),i=t.filter(A).flatMap(a=>a.value),c=new H,p=[...n,...d];for(let a of p)P(c,a);let T=!0;for(let a of i)if(v(c,a)!==!0){T=!1;break}return{isChecked:T,records:i,type:"aname"}}catch(t){throw new Error(`Cannot resolve ANAME record or CNAME Flattening for "${e}"`,{cause:t})}}async function w(r){return fetch(r,{headers:{"content-type":"json"}}).then(C).then(async e=>e.json())}import{sanitizeUrl as V}from"@braintree/sanitize-url";import{argument as Z,option as rr}from"pastel";import{z as M}from"zod";var Q=/^[a-z]/i;function x(r){if(typeof r=="string"){let e=r.trim();if(e.startsWith("http://"))return`https://${e.slice(7)}`;if(e.startsWith("https://"))return e;if(Q.test(e))return`https://${e}`}return r}var S=M.preprocess(r=>process.env.BUNNY_DOMAIN_NAME&&!r?x(process.env.BUNNY_DOMAIN_NAME):typeof r=="string"?x(r):r,M.string().url().startsWith("https://").transform(V)),br=S.optional().describe(rr({alias:"d",description:"Domain name",valueDescription:"string"})),b=S.describe(Z({name:"domain-name"}));import O from"react";import I from"react";function D(){let[r,e]=I.useState(null);return I.useEffect(()=>{r&&(process.exitCode=1,process.env.CI&&(console.error(r),console.error()))},[r]),[r,e]}function er(r){return typeof r=="object"&&r!==null&&"message"in r&&typeof r.message=="string"}function tr(r){if(er(r))return r;try{return new Error(JSON.stringify(r))}catch{return new Error(String(r))}}function B(r){return tr(r).message}import F from"figures";import{Text as s}from"ink";import{jsx as L,jsxs as f}from"react/jsx-runtime";function W({isChecked:r,type:e}){return r?f(s,{children:[L(s,{color:"green",children:F.tick}),f(s,{color:"white",children:[" ",e," configured correctly"]})]}):f(s,{children:[L(s,{color:"red",children:F.cross}),f(s,{color:"white",children:[" ",e," configured incorrectly"]})]})}import or from"figures";import{Text as R}from"ink";import{jsx as nr,jsxs as z}from"react/jsx-runtime";function J({error:r}){return z(R,{children:[nr(R,{color:"red",children:or.cross}),z(R,{color:"white",children:[" ",r]})]})}import{Newline as sr,Text as l}from"ink";import{jsx as u,jsxs as ir}from"react/jsx-runtime";function $({records:r}){return u(l,{children:r.map((e,o)=>o===0?u(l,{children:e},e):ir(l,{children:[u(sr,{}),u(l,{children:e})]},e))})}import{jsx as E}from"react/jsx-runtime";function U({check:r,shouldCheck:e,type:o,url:t}){let[n,d]=O.useState(),[i,c]=D();return O.useEffect(()=>{r(t).then(p=>{d(p)}).catch(p=>{c(B(p))})},[t,c,r]),i?E(J,{error:i}):n&&!e?E($,{records:n.records}):n&&e?E(W,{isChecked:n.isChecked,type:o}):null}import{jsx as fr}from"react/jsx-runtime";var cr=m.tuple([b]),pr=m.object({check:m.boolean().default(!1).describe(X({alias:"c",description:"Check ANAME record or CNAME Flattening points to bunny.net"})),verify:m.boolean().default(!1).describe(X({description:"Alias of --check"}))});function ar({args:r,options:e}){return fr(U,{check:N,shouldCheck:e.check||e.verify,type:"ANAME record or CNAME Flattening",url:r[0]})}export{cr as args,ar as default,pr as options};