bunny-move
Version:
Move files to and from your storage zones with bunny.net in a single cli command 🐰
3 lines (2 loc) • 3.88 kB
JavaScript
import { createRequire } from 'module';const require = createRequire(import.meta.url);
import{useSuspenseQuery as re}from"@tanstack/react-query";import ie from"fs-extra";import{argument as j}from"pastel";import{z as _}from"zod";import{option as I}from"pastel";import{z as S}from"zod";var l=S.string().trim().uuid(),z=S.preprocess(e=>process.env.BUNNY_ACCESS_KEY&&!e?process.env.BUNNY_ACCESS_KEY.split(","):e,l.or(l.array()).optional().transform(e=>typeof e=="string"?[e]:e)),ce=z.describe(I({alias:"k",description:"Bunny API Access Key",valueDescription:"uuid"}));import{option as D}from"pastel";import{z as P}from"zod";var m=P.string().trim().min(1),L=P.preprocess(e=>process.env.BUNNY_PROFILE&&!e?process.env.BUNNY_PROFILE.split(","):e,m.or(m.array()).optional().transform(e=>typeof e=="string"?[e]:e)),de=L.describe(D({alias:"p",description:"Bunny user profile name",valueDescription:"string"}));import q from"node:path";import{option as G}from"pastel";import $ from"untildify";import{z as E}from"zod";import Y from"node:path";import U from"untildify";import{z as a}from"zod";var y="~/.bunny/credentials",f=Y.resolve(U(y)),B=a.object({accessKey:a.string(),email:a.string(),id:a.string(),name:a.string().optional(),profile:a.string()});var H=y,M=E.preprocess(e=>{if(process.env.BUNNY_SHARED_CREDENTIALS_FILE&&!e){let t=process.env.BUNNY_SHARED_CREDENTIALS_FILE.trim();return q.resolve($(t))}return e},E.string().trim().optional().default(f)),w=M.describe(G({alias:"c",defaultValueDescription:H,description:"Bunny shared credentials file path",valueDescription:"file-path"}));import{createBunnyApiClient as Q}from"bunny-sdk";import V from"is-obj";function N({firstName:e,lastName:t}){if(e&&t)return`${e} ${t}`;if(t)return t;if(e)return e}async function p({accessKey:e,profile:t=e}){let r=await Q({accessKey:e}).user.get().catch(n=>{throw V(n)&&"responseStatusCode"in n&&n.responseStatusCode===401?new Error(`Cannot find user with accessKey "${e}"`):n});if(!r)throw new Error(`Cannot find user with accessKey "${e}"`);let i=N({firstName:r.firstName,lastName:r.lastName});return{accessKey:e,email:r.email,id:r.id,...i&&{name:i},profile:t}}import{stringify as W}from"smol-toml";function O(e,t){return e.reduce((o,r)=>{let{[t]:i,...n}=r;return(typeof i=="string"||typeof i=="number"||typeof i=="symbol")&&(o[i]=n),o},{})}function d(e){return W(O(e.map(t=>({...t,profile:t.profile??t.accessKey})),"profile"))}import X from"camelcase-keys";import Z from"fast-deep-equal/es6/index.js";import h from"fs-extra";import ee from"is-obj";import F from"p-map";import{parse as te}from"smol-toml";import J from"node:os";var C=J.cpus().length;function A(e,t){return e.filter((o,r)=>r===e.findIndex(i=>i[t]===o[t]))}async function R({accessKey:e=[],credentialsPath:t=f,profile:o=[]}={}){let r=typeof e=="string"?[e]:e,i=typeof o=="string"?[o]:o,n=await h.pathExists(t),u=[];if(n){let s=await h.readFile(t,"utf8"),v=te(s),x=!1;if(u=await F(Object.entries(v),async([c,T])=>{let b=B.parse({...ee(T)?X({...T,profile:c}):{}}),K=await p({accessKey:b.accessKey,profile:c});return Z(b,K)||(x=!0),K},{concurrency:C}),x){let c=d(u);await h.outputFile(t,c)}}let k=await F(r,async s=>p({accessKey:s,profile:s}),{concurrency:C}),g=A([...u,...k],"profile");return i.length>0?g.filter(s=>i.includes(s.profile??"")):g}var oe=_.object({sharedCredentialsFile:w}),ne=_.tuple([m.describe(j({description:"Bunny user profile name to save to the credentials file",name:"profile"})),l.describe(j({description:"Bunny API Access Key to save to the credentials file",name:"accessKey"}))]);function se({args:e,options:t}){return re({async queryFn(){let o=t.sharedCredentialsFile,[r,i]=await Promise.all([R({credentialsPath:o}),p({accessKey:e[1],profile:e[0]})]);r.push(i);let n=d(r);return await ie.outputFile(o,n),e[0]},queryKey:["login",e[0],e[1],t.sharedCredentialsFile]}),null}export{ne as args,se as default,oe as options};