zeytal
Version:
From Figma to code in only one command line. Zeytal allows designers and developers to sync their work by auto-generating front-end code from their Figma files. Generate variables, styles, and SVGs from Figma.
38 lines (37 loc) • 38.9 kB
JavaScript
;require('dotenv/config');var commander=require('commander'),xe=require('path'),Dt=require('node-fetch'),svgo=require('svgo'),colorette=require('colorette'),util=require('util'),nr=require('ora'),We=require('chalk'),qt=require('strip-ansi'),fs$1=require('fs'),cr=require('trash'),c12=require('c12'),dr=require('is-unicode-supported'),vs=require('semver');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var xe__namespace=/*#__PURE__*/_interopNamespace(xe);var Dt__default=/*#__PURE__*/_interopDefault(Dt);var nr__default=/*#__PURE__*/_interopDefault(nr);var We__default=/*#__PURE__*/_interopDefault(We);var qt__default=/*#__PURE__*/_interopDefault(qt);var cr__default=/*#__PURE__*/_interopDefault(cr);var dr__default=/*#__PURE__*/_interopDefault(dr);var vs__default=/*#__PURE__*/_interopDefault(vs);var G={name:"zeytal",version:"1.4.0"};var B=e=>new Promise(t=>{setTimeout(t,e);});var ve=async e=>{if(!e)return;let t=await Dt__default.default(e),{status:r}=t,s=await t.arrayBuffer();if(!(r!==200||!s))return Buffer.from(s)};var we=(e,t=null)=>e.reduce((r,s)=>(Object.prototype.hasOwnProperty.call(s,"exportSettings")&&s.exportSettings?.length?(t&&(s.name=t.name+", "+s.name),r.push(s)):s.type==="COMPONENT_SET"&&s.children&&s.children.length?r.push(...we(s.children,s)):s.children&&s.children.length&&r.push(...we(s.children)),r),[]),Me=e=>e.reduce((t,r)=>{let{fileId:s,document:a}=r,o=we(a.children);return t.push([s,o]),t},[]);var ze=e=>e.toString("base64");var Le=e=>e.map(([t,r])=>[t,r.reduce((s,{id:a,name:o,exportSettings:l})=>(l.filter(({format:i})=>i.toLowerCase()==="svg").forEach(({suffix:i,format:m,constraint:p})=>{let c=m.toLowerCase(),f=`format=${c}`;p.type==="SCALE"&&(f+=`&scale=${p.value}`),s[f]||(s[f]=[]);let y=i?`-${i}`:"",d=(o.replace(/[^a-zA-Z0-9]+/g,"-")+y).toLowerCase();d=d.startsWith("-")?d.slice(1):d;let g=`${c}/${d}.${c}`;s[f].push({id:a,name:g});}),s),{})]);var Gt=()=>`${Math.random().toString(36).substring(2,10)}-${Date.now().toString(36)}`,je=(e,t,r)=>{let s=e.assets.optimize.svg??{},[a]=t.split("/").filter(y=>y.includes(".svg")),o=a?a.replace(".svg",""):Gt(),{multipass:l,floatPrecision:i,plugins:m}=s,c=m?.filter(y=>typeof y=="string"&&y==="cleanupIds"||typeof y!="string"&&y.name==="cleanupIds"?false:!(typeof y=="string"&&y==="prefixIds"||typeof y!="string"&&y.name==="prefixIds")),{data:f}=svgo.optimize(r.toString("utf-8"),{multipass:l,floatPrecision:i,plugins:[...c??[],{name:"cleanupIds",params:{remove:true,minify:true}},{name:"prefixIds",params:{delim:"-",prefix:o,prefixIds:true,prefixClassNames:false}}]});return Buffer.from(f,"utf-8")};var Ee=(e,t,r)=>{let[s]=t.split("/"),a=r;return s==="svg"&&(a=je(e,t,r)),ze(a)};var W=(e,t)=>{if(!t)return e;let r=e;return r+=e.includes("?")?"&":"?",r+=t,r};async function K(e,t){if(!e||!t)throw new Error('Missing one or more of required arguments: "figmaToken", "figmaUrl" when attempting to get data from Figma API!');try{let s=await(await Dt__default.default(t,{method:"GET",headers:{"X-Figma-Token":e}})).json();if(!s)throw {code:"404"};return s}catch(r){throw r.code==="404"?new Error("Could not retrieve any data."):new Error('Missing one or more of required arguments: "figmaToken", "figmaUrl" when attempting to get data from Figma API!')}}var Ae=async(e,t,r="")=>{let s=`https://api.figma.com/v1/files/${t}`;return K(e,W(s,r))};var De=async(e,t,r="")=>{let s=`https://api.figma.com/v1/images/${t}`;return K(e,W(s,r))};var Oe=async(e,t,r="")=>{let s=`https://api.figma.com/v1/files/${t}/versions`;return K(e,W(s,r))};var Wt=/^components published$/i,Kt=e=>!!e.label,_t=e=>Wt.test(e.label??""),Ht=e=>{let[t]=e.filter(Kt);return !t||!t.id?null:t.id},Ut=e=>{let[t]=e.filter(_t);return !t||!t.id?null:t.id},Ge=async(e,t,r)=>{if(!r||r==="live")return {id:t,version:null};if(r!=="live"&&r!=="saved"&&r!=="published")return {id:t,version:null};let s=await Oe(e,t,"page_size=100"),{versions:a}=s;if(!a.length)return {id:t,version:null};if(r==="saved")return {id:t,version:Ht(a)};if(r==="published")return {id:t,version:Ut(a)}};var D={projectToken:"",assets:{figmaFilesVersion:"live",figmaFilesPagesBatchSize:5,directoryPath:".zeytal/assets",optimize:{svg:{}}},styles:{figmaFilesVersion:"live",figmaFilesPagesBatchSize:5,directoryPath:".zeytal/styles",formats:{targets:[],colors:{format:"hex"},fonts:{usePostscriptFontNames:false,unit:"px",relativeLineHeight:false},effects:{combine:true},grids:{extractColors:false}}},variables:{directoryPath:".zeytal/variables",collectionsIgnorePrefix:"",formats:{targets:[],colors:{format:"hex"},numbers:{format:[]}}},tailwind:{tokensPrefix:"",globalModes:[],globalIgnoreTokenNames:[],globalStripTokenNames:[],globalRewriteTokenNames:{},namespaces:{fontFamily:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},fontSize:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},fontWeight:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},letterSpacing:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},lineHeight:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},color:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},spacing:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},breakpoint:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},container:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},radius:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},shadow:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},insetShadow:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},dropShadow:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},blur:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},perspective:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},aspect:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},ease:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}},animate:{tokensMapping:[],stripTokenNames:[],rewriteTokenNames:{}}}}};var _="X-Zeytal-Project-Token";var Be="https://api.zeytal.com";var Xt=["\u2500","\u256D","\u256E","\u2502","\u2502","\u2570","\u256F"],Jt=["\u2500","","","","","",""],Ke=(e,{borderColor:t,padding:r=1,textAlignment:s="center",terminalColumns:a=process.stdout.columns||80}={})=>{let o=e.split(/\r?\n/).map(x=>[x,qt__default.default(x).length]),l=o.reduce((x,[,S])=>Math.max(x,S),0),i=t&&We__default.default[t]||We__default.default.yellow,m=Math.max(1,r*3),p=l+2+m*2>a,c=p?0:m,f=Math.min(l+c*2,a),[y,h,d,g,F,b,P]=p?Jt:Xt,k=p?`
`.repeat(r):`${i(`${g}${" ".repeat(f)}${F}`)}
`.repeat(r),w=([x,S])=>{let z=0,$=0;return p||(z=c,$=c,s==="center"?(z+=Math.floor((l-S)/2),$+=l-S-z+c):s==="right"?z+=l-S:s==="left"&&($+=l-S)),i(g)+" ".repeat(z)+x+" ".repeat($)+i(F)};return i(`${h}${y?.repeat(f)}${d}`)+`
`+k+o.map(w).join(`
`)+`
`+k+i(`${b}${y?.repeat(f)}${P}`)};var re={error:colorette.red,warn:colorette.yellow,info:colorette.cyan,success:colorette.green};var _e=false,L,He=e=>typeof e=="string"?e:util.inspect(e),n={setDebugModeTo(e){_e=e;},error(...e){console.log(re.error(e.map(t=>He(t)).join(" ")));},warn(...e){console.log(re.warn(e.join(" ")));},info(...e){console.log(re.info(e.join(" ")));},success(...e){console.log(re.success(e.join(" ")));},log(...e){console.log(e.join(" "));},box(...e){console.log(Ke(...e));},resetSpinner(){L=nr__default.default({interval:40,spinner:"dots"});},spinner(){return L||this.resetSpinner(),L},debug(e){if(_e){L||this.resetSpinner();let t=L.text,r=L.isSpinning;r&&(L.stop(),this.log(`${colorette.cyan("\u2834")} ${t}`)),console.log(`${colorette.bold("[debug]")} ${colorette.gray(`[${new Date().toISOString()}]`)} ${He(e)}`),r&&L.start(t);}},break(){console.log("");}};var Fe=0;function ir(e,t){let r=[];for(let s=0;s<e.length;s+=t){let a=e.slice(s,s+t).map(o=>o.id).join(",");r.push(a);}return r}var ie=async(e,t,r,s)=>{let a=[];for(let{fileId:o}of e){if(!o||!t)continue;a.length>0&&await B(Fe);let l=await Ge(t,o,r[s].figmaFilesVersion);l&&a.push(l);}return a},le=async(e,t,r)=>{let s=[];for(let{id:a,version:o}of t){let l=o?`version=${o}`:"",i="depth=1",m=l?`${l}&${i}`:i;n.resetSpinner(),n.spinner().start("Fetching file...");let p=await Ae(r,a,m),{children:c}=p.document;c=c.filter(({name:d})=>d!=="---");let f=ir(c,e),y=f.length,h;for(p.document.children=[],p.styles={},n.spinner().succeed(`${colorette.cyan(p.name)} file fetched.`),h=0;h<y;h++){let d=f[h];if(!d)continue;n.spinner().start(`Getting file pages data \u2014 Batch ${h+1}/${y}`);let g="ids="+d,F=l?`${l}&${g}`:g,{document:b,styles:P}=await Ae(r,a,F),k=b.children.filter(({id:w})=>d.includes(w));k.length<=0||(p.document.children.push(...k),p.styles={...p.styles,...P},await B(Fe),n.spinner().succeed());}s.push({fileId:a,document:p.document,styles:p.styles}),n.spinner().succeed(`${colorette.cyan(p.name)} pages data fetched.`);}return s};function qe(e,t){return e.replace(/{(.*?)}/g,(r,s)=>t[s]===void 0?(console.error(`[fillInDaBlanks] Missing value for: {${s}}`),`{${s}}`):String(t[s]))}var A={zeytalApiError500:()=>`We couldn\u2019t contact our API or it returned a 500 error.
Check your internet connection.
Contact the support if this lasts.`,zeytalApiNoData:()=>`No project data returned by our API.
Ensure you have passed a valid project secret token.
Check zeytal.com/docs for more info about secret project tokens.`,noFigmaApiKey:e=>qe(`No figma personal token found for project {projectName}.
Add it in your project dashboard on zeytal.com`,e),undefinedCreateFolderDir:()=>"No directory specified for createFolder()!",undefinedRefreshPath:()=>"No path provided to refreshFolder()!",writingFile:()=>"Error while attempting to write file(s)!"};function fr(e){try{if(!e)throw A.undefinedCreateFolderDir();fs$1.existsSync(e)||fs$1.mkdirSync(e,{recursive:!0});}catch(t){n.error(t);}}var H=async e=>{try{if(!e)throw A.undefinedRefreshPath();await cr__default.default([e]),fr(e);}catch(t){n.error(t);}};function U(e,t){try{if(!e||!t)throw A.writingFile();fs$1.writeFileSync(e,t,"utf8");}catch(r){n.error(r);}}var q=async e=>{let{config:t}=await c12.loadConfig({name:"zeytal",configFile:"zeytal",cwd:e,globalRc:false,dotenv:true,packageJson:false,envName:false,omit$Keys:true,jitiOptions:{extensions:[".json"]},defaultConfig:D});return {...t,projectToken:process.env.ZEYTAL_PROJECT_TOKEN??""}};var X=e=>typeof e=="string"&&e!=="undefined"?xe.resolve(e):".";var Xe=Be,J=()=>(process.env.ZEYTAL_API_BASE&&(Xe=process.env.ZEYTAL_API_BASE),Xe);var ur=dr__default.default(),O=(e,t)=>ur?e:t,Z={checkmark:O("\u2714","\u221A"),leftHalfCircle:O("\u25D0","o"),warning:O("\u203C","\u203C")};var wr=async(e,t)=>{n.log(`${colorette.magenta(Z.leftHalfCircle)} Assets fetching started...`),n.spinner().start("Assessing your configuration parameters...");let r=J();n.debug("Getting user\u2019s zeytal project data and figma files list.");let a=await(await Dt__default.default(`${r}/api/assets`,{method:"GET",headers:{"Content-Type":"application/json",[_]:t.projectToken??""}}).catch(()=>{throw n.spinner().fail(),A.zeytalApiError500()})).json();if(!a||!a.success)throw n.spinner().fail(),a.message;if(!a.data||a.data===null)throw n.spinner().fail(),A.zeytalApiNoData();if(n.spinner().succeed(),n.spinner().start(`Searching for the latest ${t.assets.figmaFilesVersion} version of your figma files...`),!a.data.projectData.figmaApiKey)throw n.spinner().fail(),A.noFigmaApiKey({projectName:a.data.projectData.name});let o=await ie(a.data.figmaFiles,a.data.projectData.figmaApiKey,t,"assets")??[];n.spinner().succeed(),n.spinner().start("Figma files fetching started...");let l=t.assets.figmaFilesPagesBatchSize,i=!l||typeof l!="number"||l<=1?D.assets.figmaFilesPagesBatchSize:l;n.spinner().succeed();let m=await le(i,o,a.data.projectData.figmaApiKey);n.spinner().start("Processing your figma files data..."),n.debug("Nesting Figma files nodes.");let p=Me(m);n.debug("Filtering and sorting Figma files nodes.");let c=Le(p);n.spinner().succeed(),n.spinner().succeed("Requesting your figma assets URLs...");let f=[],y=0;for(let[b,P]of c){y+=1,n.resetSpinner(),n.spinner().start(`Fetching assets URLs batch ${y}/${c.length}`);for(let[k,w]of Object.entries(P)){let x=w.map(({id:$})=>$).join(","),S=k+`&ids=${x}`;n.debug("Fetching data from Figma assets endpoints.");let{images:z}=await De(a.data.projectData.figmaApiKey,b,S);f.length>0&&(n.debug("Delaying requests to avoid rejections from Figma\u2019s API."),await B(50));for(let{id:$,name:jt}of w)z[$]&&f.push([jt,z[$]]);}n.spinner().succeed();}let h=[];for(let[b,P]of f){let k=b.slice(b.indexOf("/")+1);n.log(`${colorette.green(Z.checkmark)} Downloading and optimizing ${colorette.cyan(k)}`),n.debug("Downloading asset.");let w=await ve(P);if(n.debug("Delaying next request to avoid rejections from Figma\u2019s servers."),await B(150),!w)n.warn(`${Z.warning} No asset data found for ${colorette.cyan(k)}`);else {n.debug("Optimizing asset.");let x=Ee(t,b,w);h.push([b,x]);}}n.spinner().succeed("All assets downloaded and optimized."),n.spinner().succeed(`Writing assets files inside ${colorette.cyan(t.assets.directoryPath)}...`);let d=[],g=h.length,F=0;for(F;F<g;F+=1){let[b,P]=h[F],k=xe__namespace.join(e.cwd,t.assets.directoryPath,b),[w,x]=b.split("/");if(n.resetSpinner(),n.spinner().start(`Writing ${colorette.cyan(x??"")}...`),w){n.debug("Refreshing assets directory.");let S=xe__namespace.join(e.cwd,t.assets.directoryPath,w);d.includes(S)||(await H(S),d.push(S));}n.debug("Writing asset."),U(k,Buffer.from(P,"base64")),n.debug("Asset written."),n.spinner().succeed(`${colorette.cyan(x??"")} written.`);}n.spinner().succeed(`All assets files written to ${colorette.cyan(t.assets.directoryPath)}`);},se=new commander.Command().name("assets").description("extract and optimize SVGs from your Figma files").action(async(e,t)=>{n.break();let r=t.optsWithGlobals();n.setDebugModeTo(r.debug);let s={...r,cwd:X(r.cwd)};n.debug("Getting user\u2019s zeytal CLI config.");let a=await q(s.cwd);try{await wr(s,a);}catch(o){n.error(o),n.break(),process.exit(1);}});var Se=e=>e==="FILL"?/^(stroke|fill)$/:e==="TEXT"?/^text$/:e==="EFFECT"?/^effect$/:e==="GRID"?/^grid$/:/ /,j=e=>{let{key:t,styleType:r,node:s}=e,a=Se(r),o=Object.entries(s.styles).reduce((l,[i,m])=>(m===t&&a.test(i)&&(l=i),l),"");if(o==="fill")return "fills";if(o==="stroke")return "strokes";if(o==="text")return "style";if(o==="effect")return "effects";if(o==="grid")return "layoutGrids"};var Ar=(e,t)=>Object.entries(e).filter(([,{remote:r}])=>!r).reduce((r,[s,a])=>{let o=Se(a.styleType),[l]=t.filter(({styles:i})=>!!Object.entries(i).filter(([p,c])=>c===s&&o.test(p)).length);return l?[...r,{...a,key:s,node:l}]:r},[]),Fr=e=>e.reduce((t,r)=>t.find(a=>a.name===r.name)?t:t.concat([r]),[]),Je=(e,t)=>{let r=e.reduce((a,o)=>{let{styles:l}=o,i=[];return l?(i=Ar(l,t),[...a,...i]):a},[]);return Fr(r)};var Qe=e=>e.reduce((t,r)=>(Object.prototype.hasOwnProperty.call(r,"styles")&&r.styles?t.push(r):r.children&&r.children.length&&t.push(...Qe(r.children)),t),[]),Ye=e=>e.reduce((t,r)=>{let{document:s}=r,a=Qe(s.children);return [...t,...a]},[]);var N=e=>e.normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase().replace(/[^\w\s-]/g,"-").replace(/[\s_]+/g,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"");var et=e=>{let{node:t}=e,r=j(e);return r?t[r]:[]};var tt=e=>{let{node:t}=e,r=j(e);return r?t[r]:[]};var rt=e=>{let{node:t}=e,r=j(e);return r?t[r]:{}};var st=e=>{let{node:t}=e,r=j(e);return r?t[r]:[]};var u="alias:",me="var-",pe="style-";var xr=e=>e.map(r=>{let s;switch(r.styleType){case "FILL":s=et(r);break;case "TEXT":s=rt(r);break;case "EFFECT":s=tt(r);break;case "GRID":s=st(r);break}let a=r.name;return {name:N(`${pe}${a}`),styleType:r.styleType,value:s}}),at=e=>xr(e);var T=(e,t=6)=>{let r=e.toFixed(t);return parseFloat(r)};var ot=e=>{let{r:t,g:r,b:s,a}=e,o=parseFloat((t*255).toFixed(0)).toString(16).padStart(2,"0"),l=parseFloat((r*255).toFixed(0)).toString(16).padStart(2,"0"),i=parseFloat((s*255).toFixed(0)).toString(16).padStart(2,"0"),m=parseFloat((a*255).toFixed(0)).toString(16).padStart(2,"0");return `#${o}${l}${i}${a!==1?m:""}`},Sr=e=>{let{r:t,g:r,b:s,a}=e,o=(t*255).toFixed(0),l=(r*255).toFixed(0),i=(s*255).toFixed(0),m=T(a,2);return `rgb(${o}, ${l}, ${i}, ${m})`},Cr=e=>{let{r:t,g:r,b:s,a}=e,o=Math.max(t,r,s),l=Math.min(t,r,s),i=(o+l)/2,m=(o+l)/2,p=(o+l)/2,c=T(a,2);if(o===l)i=m=0;else {let f=o-l;switch(m=p>.5?f/(2-o-l):f/(o+l),o){case t:i=(r-s)/f+(r<s?6:0);break;case r:i=(s-t)/f+2;break;case s:i=(t-r)/f+4;break}i/=6;}return i=Math.round(i*360),m=Math.round(m*100),p=Math.round(p*100),`hsl(${i}, ${m}%, ${p}%, ${c})`},C=(e,t)=>{let{format:r}=e;return r==="hex"?ot(t):r==="rgba"?Sr(t):r==="hsla"?Cr(t):ot(t)},Y=(e,t)=>{let r="";return t.forEach((s,a)=>{let o=C(e.colors,s.color),l=(s.position??0)*100;a>0&&(r+=" "),r+=`${o} ${l}%`,a<t.length-1&&(r+=",");}),r},nt=e=>{if(e.length<2)throw new Error("gradientHandlePositions must contain at least two points");let[t,r]=e;return `${T((Math.atan2(r.y-t.y,r.x-t.x)*180/Math.PI+450)%360,2)}deg, `},it=e=>{if(e.length<3)throw new Error("gradientHandlePositions must contain at least two points");let[t,r,s]=e,a=T(t.x*100,2),o=T(t.y*100,2),l=r.x-t.x,i=r.y-t.y,m=Math.sqrt(l*l+i*i),p=s.x-t.x,c=s.y-t.y,f=Math.sqrt(p*p+c*c),y=T(m*100,2),h=T(f*100,2);return `${y}% ${h}% at ${a}% ${o}%, `},lt=e=>{if(e.length<2)throw new Error("gradientHandlePositions must contain at least two points");let[t,r]=e,s=T((Math.atan2(r.y-t.y,r.x-t.x)*180/Math.PI+450)%360,2),a=T(t.x*100,2),o=T(t.y*100,2);return `from ${s}deg at ${a}% ${o}%, `};function mt(e,t){let{gradientHandlePositions:r,gradientStops:s}=t,a="conic-gradient(";return a+=lt(r),a+=Y(e,s),a+=")",a}var pt=(e,t)=>{let{gradientStops:r}=t,s=["top right","bottom right","bottom left","top left"];return Array.from(Array(4)).map((o,l)=>{let i=r.map(m=>{let p=C(e.colors,m.color),c=m.position??0,f=T(c/2*100,2);return `${p} ${f}%`}).join(", ");return `linear-gradient(to ${s[l]}, ${i}) ${s[l]} / 50% 50% no-repeat`}).join(", ")};function ct(e,t){let{gradientHandlePositions:r,gradientStops:s}=t,a="linear-gradient(";return a+=nt(r),a+=Y(e,s),a+=")",a}function ft(e,t){let{gradientHandlePositions:r,gradientStops:s}=t,a="radial-gradient(";return a+=it(r),a+=Y(e,s),a+=")",a}var gt=(e,t)=>C(e.colors,t.color);var yt=(e,t)=>{let[r]=t,s="";return r?.type==="SOLID"?s=gt(e,r):r?.type==="GRADIENT_LINEAR"?s=ct(e,r):r?.type==="GRADIENT_ANGULAR"?s=mt(e,r):r?.type==="GRADIENT_DIAMOND"?s=pt(e,r):r?.type==="GRADIENT_RADIAL"&&(s=ft(e,r)),s};var Ce=(e,t)=>`blur(${t.radius}px)`;var ae=(e,t)=>{let{offset:{x:r,y:s},radius:a,color:o}=t,l=C(e.colors,o);return `${r}px ${s}px ${a}px ${l}`};var Pe=(e,t)=>ae(e,t)+" inset";var dt=(e,t)=>{let r={},{combine:s}=e.effects;return t.forEach(a=>{!r.shadow&&(a.type==="INNER_SHADOW"||a.type==="DROP_SHADOW")&&(r.shadow=s?"":[]),e.effects.combine&&(a.type==="INNER_SHADOW"||a.type==="DROP_SHADOW")&&(r.shadow+=r.shadow?", ":""),a.type==="INNER_SHADOW"?!s&&Array.isArray(r.shadow)?r.shadow.push(Pe(e,a)):r.shadow+=Pe(e,a):a.type==="DROP_SHADOW"?!s&&Array.isArray(r.shadow)?r.shadow.push(ae(e,a)):r.shadow+=ae(e,a):a.type==="LAYER_BLUR"?r.layerBlur=Ce(e,a):a.type==="BACKGROUND_BLUR"&&(r.backgroundBlur=Ce(e,a));}),r.shadow&&Array.isArray(r.shadow)&&r.shadow.length===1&&(r.shadow=r.shadow[0]),r};var Pr=16,I=e=>`${T(e,5)}px`,ee=e=>`${T(e/Pr,5)}rem`;var ut=(e,t)=>{let{usePostscriptFontNames:r,unit:s,relativeLineHeight:a}=e.fonts,{fontPostScriptName:o,fontFamily:l,fontSize:i,letterSpacing:m,lineHeightPx:p,lineHeightPercentFontSize:c,fontWeight:f,italic:y,textCase:h,textDecoration:d}=t,g={fontName:(r?o:l)??"",fontSize:I(i??0),lineHeight:p?I(p):I(i??0),fontWeight:f??400};return i&&(s==="rem"?g.fontSize=ee(i):s==="px"&&(g.fontSize=I(i))),a&&c?g.lineHeight=c/100:s==="rem"&&p?g.lineHeight=ee(p):s==="px"&&p&&(g.lineHeight=I(p)),m&&(s==="rem"?g.letterSpacing=ee(m):s==="px"&&(g.letterSpacing=I(m))),y!==void 0&&(g.italic=y),h&&(g.textCase=h),d&&(g.textDecoration=d),g};var ht=(e,t)=>t.filter(({visible:s})=>s).map(({pattern:s,sectionSize:a,color:o,alignment:l,gutterSize:i,offset:m,count:p})=>{let c={pattern:s.toLowerCase(),sectionSize:a,alignment:l.toLowerCase(),gutterSize:i,offset:m,count:p};return e.grids.extractColors&&(c.color=C(e.colors,o)),c});var Tt=(e,t)=>e.reduce((s,{name:a,styleType:o,value:l})=>{let i=[];if(o==="FILL"){let m=yt(t.styles.formats,l);i=[{name:a,value:m,originType:o}];}else if(o==="EFFECT"){let m=dt(t.styles.formats,l);i=Object.entries(m).map(([p,c])=>({name:`${a}-${N(p.replace(/[A-Z]+/g,f=>" "+f))}`,value:Array.isArray(c)?c.join(", "):c,originType:o}));}else if(o==="TEXT"){let m=ut(t.styles.formats,l);i=Object.entries(m).map(([p,c])=>({name:`${a}-${N(p.replace(/[A-Z]+/g,f=>" "+f))}`,value:c,originType:o}));}else if(o==="GRID"){let m=ht(t.styles.formats,l);i=Object.entries(m).reduce((p,[c,f])=>(Object.entries(f).forEach(([y,h])=>{p.push({name:`${a}-${N(c.replace(/[A-Z]+/g,d=>" "+d))}-${N(y.replace(/[A-Z]+/g,d=>" "+d))}`,value:h,originType:o});}),p),[]);}return s.push(...i),s},[]);var E=e=>e.replace(/[A-Z]+/g,t=>" "+t).replace(/[^a-zA-Z0-9]+/g," ").trim().replace(/[a-zA-Z0-9]+/g,(t,r)=>r===0?t.toLowerCase():t[0].toUpperCase()+t.slice(1).toLowerCase()).replace(/ /g,"");var Ne=e=>`${E(e)}`,Nr=e=>`${e}`,$r=e=>e.toString(),Zr=e=>e.startsWith(u)?Ne(e.replace(u,"")):`"${e}"`,Ir=e=>{switch(typeof e){case "boolean":return Nr(e);case "number":return $r(e);case "string":return Zr(e);default:return "null"}},ce=e=>{let t=e.reduce((s,a)=>`${s}const ${Ne(a.name)} = ${Ir(a.value)};
`,""),r=`
module.exports = {
${e.reduce((s,a)=>`${s} ${Ne(a.name)},
`,"")}}
`;return t+r};var kt=e=>`--${e}`,Rr=e=>`${e}`,Vr=e=>e.toString(),vr=(e,t,r)=>{let s=t;return r==="STRING"||r==="TEXT"&&e.endsWith("font-family")?s=`"${t}"`:t.startsWith(u)?s=`var(${kt(t.replace(u,""))})`:s=t===""?'""':t,s},Mr=e=>{switch(typeof e.value){case "boolean":return Rr(e.value);case "number":return Vr(e.value);case "string":return vr(e.name,e.value,e.originType);default:return "null"}},fe=e=>`:root {
`+e.reduce((t,r)=>`${t} ${kt(r.name)}: ${Mr(r)};
`,"")+`}
`;var bt=e=>`${E(e)}`,zr=e=>`${e}`,Lr=e=>e.toString(),jr=e=>e.startsWith(u)?bt(e.replace(u,"")):`"${e}"`,Er=e=>{switch(typeof e){case "boolean":return zr(e);case "number":return Lr(e);case "string":return jr(e);default:return "null"}},ge=e=>e.reduce((t,r)=>`${t}export const ${bt(r.name)} = ${Er(r.value)};
`,"");var Dr=e=>`"${E(e)}"`,Or=e=>`${e}`,Gr=e=>e.toString(),Br=e=>`"${e}"`,Wr=e=>{switch(typeof e){case "boolean":return Or(e);case "number":return Gr(e);case "string":return Br(e);default:return "null"}},ye=e=>{let t=JSON.parse(JSON.stringify(e)),r=t.reduce((a,o)=>({...a,[o.name]:o.value}),{}),s=t.map(a=>(typeof a.value!="string"||!a.value.startsWith(u)||(a.value=r[a.value.replace(u,"")]??a.value),a));return `{
`+s.reduce((a,o,l)=>`${a} ${Dr(o.name)}: ${Wr(o.value)}${l!==s.length-1?",":""}
`,"")+`}
`};var wt=e=>`@${e}`,Kr=e=>`${e}`,_r=e=>e.toString(),Hr=(e,t,r)=>{let s=t;return r==="STRING"||r==="TEXT"&&e.endsWith("font-family")?s=`"${t}"`:t.startsWith(u)?s=`var(${wt(t.replace(u,""))})`:s=t===""?'""':t,s},Ur=e=>{switch(typeof e.value){case "boolean":return Kr(e.value);case "number":return _r(e.value);case "string":return Hr(e.name,e.value,e.originType);default:return "null"}},de=e=>e.reduce((t,r)=>`${t}${wt(r.name)}: ${Ur(r)};
`,"");var At=e=>`$${e}`,qr=e=>`${e}`,Xr=e=>e.toString(),Jr=(e,t,r)=>{let s=t;return r==="STRING"||r==="TEXT"&&e.endsWith("font-family")?s=`"${t}"`:t.startsWith(u)?s=`var(${At(t.replace(u,""))})`:s=t===""?'""':t,s},Qr=e=>{switch(typeof e.value){case "boolean":return qr(e.value);case "number":return Xr(e.value);case "string":return Jr(e.name,e.value,e.originType);default:return "null"}},ue=e=>e.reduce((t,r)=>`${t}${At(r.name)}: ${Qr(r)};
`,"");var Ft=e=>`$${e}`,Yr=e=>`${e}`,es=e=>e.toString(),ts=(e,t,r)=>{let s=t;return r==="STRING"||r==="TEXT"&&e.endsWith("font-family")?s=`"${t}"`:t.startsWith(u)?s=`var(${Ft(t.replace(u,""))})`:s=t===""?'""':t,s},rs=e=>{switch(typeof e.value){case "boolean":return Yr(e.value);case "number":return es(e.value);case "string":return ts(e.name,e.value,e.originType);default:return "null"}},he=e=>e.reduce((t,r)=>`${t}${Ft(r.name)}: ${rs(r)};
`,"");var xt=e=>`${E(e)}`,ss=e=>`${e}`,as=e=>e.toString(),os=e=>e.startsWith(u)?xt(e.replace(u,"")):`"${e}"`,ns=e=>{switch(typeof e){case "boolean":return ss(e);case "number":return as(e);case "string":return os(e);default:return "null"}},Te=e=>e.reduce((t,r)=>`${t}export const ${xt(r.name)} = ${ns(r.value)};
`,"");var te=(e,t)=>typeof e!="string"?false:new RegExp(e).test(t);var is={fontFamily:"font-",fontSize:"text-",fontWeight:"font-weight-",letterSpacing:"tracking-",lineHeight:"leading-",color:"color-",spacing:"spacing-",breakpoint:"breakpoint-",container:"container-",radius:"radius-",shadow:"shadow-",insetShadow:"inset-shadow-",dropShadow:"drop-shadow-",blur:"blur-",perspective:"perspective-",aspect:"aspect-",ease:"ease-",animate:"animate-"},$e,St,Ct=(e,t,r)=>{let s=typeof e.tailwind.tokensPrefix=="string"?e.tailwind.tokensPrefix:"",a=t.replace(me,"").replace(pe,"");return a=e.tailwind.globalStripTokenNames.reduce((o,l)=>o.replace(new RegExp(l),""),a),a=St.reduce((o,[l,i])=>o.replace(new RegExp(l),i),a),r?$e.forEach(o=>{let[l,i]=o,m=is[l];i.tokensMapping.forEach(p=>{te(p,a)&&(a=i.stripTokenNames.reduce((c,f)=>c.replace(new RegExp(f),""),a),a=Object.entries(i.rewriteTokenNames).reduce((c,[f,y])=>c.replace(new RegExp(f),y),a),a=m+s+a);});}):a=s+a,`--${a}`},ls=e=>`${e}`,ms=e=>e.toString(),ps=(e,t,r,s)=>{let a=r;return r.startsWith(u)?a=`var(${Ct(e,r.replace(u,""),false)})`:s==="STRING"||s==="TEXT"&&t.endsWith("font-family")?a=`"${r}"`:a=r===""?'""':r,a},cs=(e,t)=>{switch(typeof t.value){case "boolean":return ls(t.value);case "number":return ms(t.value);case "string":return ps(e,t.name,t.value,t.originType);default:return "null"}},fs=(e,t)=>{let r=$e.flatMap(([,a])=>a.tokensMapping),s=t.reduce((a,o)=>{let l=JSON.parse(JSON.stringify(o));if(e.tailwind.globalIgnoreTokenNames.filter(f=>te(f,l.name)).length>0)return a;let m=e.tailwind.globalModes.reduce((f,y)=>{let h=y.reduce((d,g)=>l.name.endsWith(g)?g:d,"");return h===""?f:h},""),p=r.filter(f=>te(f,l.name)).length>0,c=m!==""?m:p?"zeytalTwTheme":"zeytalTwRoot";if(m!==""&&(l.name=l.name.replace(m,"")),a[c]||(a[c]=[]),a[c].push(l),m!==""&&p){let f=l.value;p&&(f=`${u}${l.name}`),a.zeytalTwTheme.push({...l,value:f});}return a},{zeytalTwRoot:[],zeytalTwTheme:[]});return s.zeytalTwTheme=Array.from(new Map(s.zeytalTwTheme.map(a=>[a.name,a])).values()),s},gs=(e,t,r)=>{let s=t.replace(/^-+|-+$/g,""),a=t==="zeytalTwTheme",o=" ",l="",i="",m="";t==="zeytalTwRoot"?(l=`:root {
`,i=`
}`):t==="zeytalTwTheme"?(l=`@theme {
`,i=`
}`):(l=`.${s} {
`,i=`
}`);let p=r.map(c=>`${o}${Ct(e,c.name,a)}: ${cs(e,c)};`).join(`
`);return m=`${l}${p}${i}`,m},ke=(e,t)=>{$e=Object.entries(t.tailwind.namespaces),St=Object.entries(t.tailwind.globalRewriteTokenNames);let r=fs(t,e);return Object.entries(r).sort(([a],[o])=>a==="zeytalTwRoot"?-1:o==="zeytalTwRoot"||a==="zeytalTwTheme"?1:o==="zeytalTwTheme"?-1:0).map(([a,o])=>gs(t,a,o)).join(`
`)};var ys=["tw","ts","esm","cjs","json","css","scss","sass","less"],R={twV4:"styles-tw",ts:"styles",esm:"styles",cjs:"styles",json:"styles",css:"styles",scss:"styles",sass:"styles",less:"styles"},V={twV4:"css",ts:"ts",esm:"mjs",cjs:"cjs",json:"json",css:"css",scss:"scss",sass:"sass",less:"less"},ds=e=>ys.includes(e),Pt=e=>{let t;switch(e){case "tw":t=`${R.twV4}.${V.twV4}`;break;case "ts":t=`${R.ts}.${V.ts}`;break;case "esm":t=`${R.esm}.${V.esm}`;break;case "cjs":t=`${R.cjs}.${V.cjs}`;break;case "json":t=`${R.json}.${V.json}`;break;case "css":t=`${R.css}.${V.css}`;break;case "scss":t=`${R.scss}.${V.scss}`;break;case "sass":t=`${R.sass}.${V.sass}`;break;case "less":t=`${R.less}.${V.less}`;break;default:t="";break}return t},us=(e,t,r)=>{switch(e){case "tw":return ke(r,t);case "ts":return Te(r);case "esm":return ge(r);case "cjs":return ce(r);case "json":return ye(r);case "css":return fe(r);case "scss":return he(r);case "sass":return ue(r);case "less":return de(r);default:return ""}},Nt=(e,t)=>{let{targets:r}=t.styles.formats,s=[...new Set(r)].filter(ds),a=Object.assign({},...s.map(o=>({[Pt(o)]:{}})));return s.forEach(o=>{a[Pt(o)]=us(o,t,e);}),a};var hs=(e,t)=>{let r={};for(let s of e){if(!s)continue;JSON.parse(s).forEach(o=>{let{name:l,modes:i}=o;t.variables.collectionsIgnorePrefix&&typeof t.variables.collectionsIgnorePrefix=="string"&&l.startsWith(t.variables.collectionsIgnorePrefix)||i.forEach(m=>{let{name:p,variables:c}=m;c.forEach(f=>{let{id:y,name:h,resolvedType:d,value:g}=f;if(!g)return;let F=`${l.replace(/^[^a-zA-Z]+/,"")}-`,b=i.length>1?`-${p}`:"",k=N(`${me}${F}${h}${b}`);if(typeof g=="string"||typeof g=="boolean"||typeof g=="number")r[k]={id:y,varType:d,modeName:i.length>1?p:void 0,value:g};else if(typeof g=="object"&&g!==null&&Object.hasOwn(g,"r")&&Object.hasOwn(g,"g")&&Object.hasOwn(g,"b"))r[k]={id:y,varType:d,modeName:i.length>1?p:void 0,value:g};else if(typeof g=="object"&&g!==null&&Object.hasOwn(g,"type")&&Object.hasOwn(g,"id")){let w=g;if(w.type!=="VARIABLE_ALIAS")return;r[k]={id:y,varType:d,modeName:i.length>1?p:void 0,value:w};}});});});}return r},$t=(e,t,r=0)=>{let s=r+1,a=t.value,o=t.modeName?`-${N(t.modeName)}`:"";return typeof a=="object"&&a!==null&&Object.hasOwn(a,"type")&&a.type==="VARIABLE_ALIAS"&&a.id?e.filter(([,{id:i}])=>i===a.id).flatMap(([,i])=>$t(e,i,s).map(({modeName:p,value:c})=>({modeName:(s>1?o:"")+p,value:c}))):[{modeName:o,value:t.value}]},Ts=e=>{let t=Object.entries(e),r={};return t.forEach(([s,a])=>{let o=a.value;typeof o=="object"&&o!==null&&Object.hasOwn(o,"type")&&o.type==="VARIABLE_ALIAS"&&o.id?$t(t,a).forEach(i=>{r[s+i.modeName]={...a,value:i.value};}):r[s]=a;}),r},ks=e=>{let t=Object.entries(e),r={};t.forEach(([i,m])=>{let{value:p}=m;if(typeof p=="string"&&p.startsWith(u)){let c=p.replace(u,"");r[i]||(r[i]=[]),r[i].push(c);}});let s=new Set,a=new Set,o=[];function l(i){if(s.has(i)||a.has(i))return;a.add(i);let m=r[i]||[];for(let p of m)l(p);a.delete(i),s.add(i),e[i]&&o.push({...e[i],name:i});}return Object.keys(e).forEach(i=>{s.has(i)||l(i);}),o};function bs(e){let t={};e.forEach((r,s)=>{t[r.name]=s;});for(let r=0;r<e.length;r++){let s=e[r];if(s&&typeof s.value=="string"&&s.value.startsWith(u)){let a=s.value.replace(u,"");if(a in t){if(!t[a])continue;if(t[a]>r)return console.warn(`Sorting error: ${s.name} at position ${r} references ${a} at position ${t[a]}`),false}}}return true}var Zt=(e,t)=>{let r=hs(e,t),s=Ts(r),a=ks(s);return bs(a),a};var It=(e,t)=>e.map(({name:s,varType:a,value:o})=>{let l;if(typeof o=="boolean")l=o;else if(a==="COLOR"&&typeof o=="object"&&Object.hasOwn(o,"r")&&Object.hasOwn(o,"g")&&Object.hasOwn(o,"b")){let i={...o};i.a=i.a??1,l=C(t.variables.formats.colors,i);}else if(typeof o=="number"){let{format:i}=t.variables.formats.numbers,m="";i.forEach(({mapping:p,unit:c})=>{m.endsWith(c)||p.forEach(f=>{te(f,s)&&(c==="rem"?m=ee(o):c==="px"&&(m=I(o)));});}),l=m!==""?m:T(o,5);}else typeof o=="string"&&(l=o);return l?{name:s,value:l,originType:a}:void 0}).filter(s=>!!s);var ws=["tw","ts","esm","cjs","json","css","scss","sass","less"],v={twV4:"variables-tw",ts:"variables",esm:"variables",cjs:"variables",json:"variables",css:"variables",scss:"variables",sass:"variables",less:"variables"},M={twV4:"css",ts:"ts",esm:"mjs",cjs:"cjs",json:"json",css:"css",scss:"scss",sass:"sass",less:"less"},As=e=>ws.includes(e),Rt=e=>{let t;switch(e){case "tw":t=`${v.twV4}.${M.twV4}`;break;case "ts":t=`${v.ts}.${M.ts}`;break;case "esm":t=`${v.esm}.${M.esm}`;break;case "cjs":t=`${v.cjs}.${M.cjs}`;break;case "json":t=`${v.json}.${M.json}`;break;case "css":t=`${v.css}.${M.css}`;break;case "scss":t=`${v.scss}.${M.scss}`;break;case "sass":t=`${v.sass}.${M.sass}`;break;case "less":t=`${v.less}.${M.less}`;break;default:t="";break}return t},Fs=(e,t,r)=>{let s;switch(e){case "tw":s=ke(r,t);break;case "ts":s=Te(r);break;case "esm":s=ge(r);break;case "cjs":s=ce(r);break;case "json":s=ye(r);break;case "css":s=fe(r);break;case "scss":s=he(r);break;case "sass":s=ue(r);break;case "less":s=de(r);break;default:s="";break}return s},Vt=(e,t)=>{let{targets:r}=t.variables.formats,s=[...new Set(r)].filter(As),a=Object.assign({},...s.map(o=>({[Rt(o)]:{}})));return s.forEach(o=>{a[Rt(o)]=Fs(o,t,e);}),a};var Cs=async(e,t)=>{n.log(`${colorette.magenta(Z.leftHalfCircle)} Styles fetching started...`),n.spinner().start("Assessing your configuration parameters...");let r=J();n.debug("Getting user\u2019s zeytal project data and figma files list.");let a=await(await fetch(`${r}/api/styles`,{method:"GET",headers:{"Content-Type":"application/json",[_]:t.projectToken??""}}).catch(()=>{throw n.spinner().fail(),A.zeytalApiError500()})).json();if(!a||!a.success)throw n.spinner().fail(),a.message;if(!a.data||a.data===null)throw n.spinner().fail(),A.zeytalApiNoData();if(n.spinner().succeed(),n.spinner().start(`Searching for the latest ${t.styles.figmaFilesVersion} version of your figma files...`),!a.data.projectData.figmaApiKey)throw n.spinner().fail(),A.noFigmaApiKey({projectName:a.data.projectData.name});let o=await ie(a.data.figmaFiles,a.data.projectData.figmaApiKey,t,"styles")??[];n.spinner().succeed(),n.spinner().start("Figma files fetching started...");let l=t.styles.figmaFilesPagesBatchSize,i=!l||typeof l!="number"||l<=1?D.styles.figmaFilesPagesBatchSize:l;n.spinner().succeed();let m=await le(i,o,a.data.projectData.figmaApiKey);n.spinner().start("Processing your figma files data..."),n.debug("Nesting Figma files nodes.");let p=Ye(m);n.spinner().succeed(),n.spinner().start("Extracting your styles..."),n.debug("Mapping Figma styles.");let c=Je(m,p);n.debug("Structuring Figma styles.");let f=at(c);n.spinner().succeed(),n.spinner().start("Remodelling your styles values..."),n.debug("Transforming Figma styles values.");let y=Tt(f,t);if(n.spinner().succeed(),t.styles.formats.targets.length<=0){n.warn(`${Z.warning} Your style's format target array is empty. No style translation will be performed.`);return}n.spinner().start(`Translating your styles into ${[...new Set(t.styles.formats.targets)].map(d=>colorette.cyan(d)).join(", ")}.`),n.debug("Translating Figma styles.");let h=Nt(y,t);n.spinner().succeed(),n.spinner().succeed("Styles extraction and remodelling done."),n.spinner().start(`Writing styles files inside ${colorette.cyan(t.styles.directoryPath)}...`),n.debug("Refreshing styles directory."),await H(xe__namespace.join(e.cwd,t.styles.directoryPath)),Object.entries(h).forEach(([d,g])=>{n.debug("Writing styles file.");let F=xe__namespace.join(e.cwd,t.styles.directoryPath,d);U(F,g);}),n.spinner().succeed(`All styles files written to ${colorette.cyan(t.styles.directoryPath)}`);},oe=new commander.Command().name("styles").description("extract and transform Figma styles from your Figma files").action(async(e,t)=>{n.break();let r=t.optsWithGlobals();n.setDebugModeTo(r.debug);let s={...r,cwd:X(r.cwd)};n.debug("Getting user\u2019s zeytal CLI config.");let a=await q(s.cwd);try{await Cs(s,a);}catch(o){n.error(o),n.break(),process.exit(1);}});var $s=async(e,t)=>{n.log(`${colorette.magenta(Z.leftHalfCircle)} Variables fetching started...`),n.spinner().start("Assessing your configuration parameters...");let r=J();n.debug("Getting user\u2019s zeytal project data and figma files list.");let a=await(await fetch(`${r}/api/variables`,{method:"GET",headers:{"Content-Type":"application/json",[_]:t.projectToken??""}}).catch(()=>{throw n.spinner().fail(),A.zeytalApiError500()})).json();if(!a||!a.success)throw n.spinner().fail(),a.message;if(!a.data||a.data===null)throw n.spinner().fail(),A.zeytalApiNoData();n.spinner().succeed(),n.spinner().start("Processing your Figma variables exports data..."),n.debug("Structuring Figma variables.");let o=Zt(a.data.figmaVariablesExports.map(m=>m.variablesExportData).filter(m=>m!==null),t);n.spinner().succeed(),n.spinner().start("Remodelling your variables values..."),n.debug("Transforming Figma variables values.");let l=It(o,t);n.spinner().succeed(),n.spinner().start(`Translating your variables into ${[...new Set(t.variables.formats.targets)].map(m=>colorette.cyan(m)).join(", ")}.`),n.debug("Translating Figma variables.");let i=Vt(l,t);n.spinner().succeed(),n.spinner().succeed("Variables remodelling and translation done."),n.spinner().start(`Writing variables files inside ${colorette.cyan(t.variables.directoryPath)}...`),n.debug("Refreshing variables directory."),await H(xe__namespace.join(e.cwd,t.variables.directoryPath)),Object.entries(i).forEach(([m,p])=>{n.debug("Writing variables file.");let c=xe__namespace.join(e.cwd,t.variables.directoryPath,m);U(c,p);}),n.spinner().succeed(`All variables files written to ${colorette.cyan(t.variables.directoryPath)}`);},ne=new commander.Command().name("variables").alias("vars").description("extract and transform Figma variables from your Figma files").action(async(e,t)=>{n.break();let r=t.optsWithGlobals();n.setDebugModeTo(r.debug);let s={...r,cwd:X(r.cwd)};n.debug("Getting user\u2019s zeytal CLI config.");let a=await q(s.cwd);try{await $s(s,a);}catch(o){n.error(o),n.break(),process.exit(1);}});var be=[new commander.Option("-d, --debug","debug mode").default(false,"off"),new commander.Option("-c, --cwd <cwd>","the working directory. defaults to the current directory.").default(".")];var Mt=new commander.Command().name("generate").alias("gen").description("run `variables`, `styles`, and `assets` commands in this specific order").action(async(e,t)=>{let r=t.optsWithGlobals();n.setDebugModeTo(r.debug),n.debug("Mapping global options to each command called by the generate command."),be.forEach(s=>{se.addOption(s),oe.addOption(s),ne.addOption(s);}),n.debug("Starting assets command."),await se.parseAsync([]),n.debug("Starting styles command."),await oe.parseAsync([]),n.debug("Starting variables command."),await ne.parseAsync([]);});var zt=async(e,t)=>{try{let s=(await(await Dt__default.default(`https://registry.npmjs.org/${e}`)).json())["dist-tags"].latest;vs__default.default.gt(s,t)&&(n.break(),n.box(`Update available! ${colorette.gray(`v${t}`)} \u226B ${colorette.green(`v${s}`)}
Run \`pnpm i -D zeytal@latest\` to update.`,{borderColor:"black"}));}catch{}};var Lt=()=>{let e=G.version;n.break(),n.success(colorette.bold(`Starting Zeytal v${e}`));};async function Wl(){let e=new commander.Command().name("zeytal").description("From Figma to code in only one command line.").version(G.version,"-v, --version","display the version number");be.forEach(t=>{e.addOption(t);}),e.addCommand(se).addCommand(oe).addCommand(ne).addCommand(Mt,{isDefault:true}),Lt(),await zt(G.name,G.version).catch(()=>{}),await e.parseAsync();}exports.main=Wl;//# sourceMappingURL=index.cjs.map
//# sourceMappingURL=index.cjs.map