@canva/cli 0.0.1-beta.31 → 0.0.1-beta.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/cli.js CHANGED
@@ -422,7 +422,7 @@ GFS4: `),console.error(e)});$t[Or]||(xj=global[Or]||[],Ej($t,xj),$t.close=functi
422
422
  `:`
423
423
  `)+r,i=n+1,n=e.indexOf(`
424
424
  `,i)}while(n!==-1);return o+=e.slice(i),o}var{stdout:xA,stderr:CA}=yA,zD=Symbol("GENERATOR"),Wl=Symbol("STYLER"),Jf=Symbol("IS_EMPTY"),EA=["ansi","ansi","ansi256","ansi16m"],zl=Object.create(null),TG=(e,t={})=>{if(t.level&&!(Number.isInteger(t.level)&&t.level>=0&&t.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let r=xA?xA.level:0;e.level=t.level===void 0?r:t.level};var LG=e=>{let t=(...r)=>r.join(" ");return TG(t,e),Object.setPrototypeOf(t,Zf.prototype),t};function Zf(e){return LG(e)}Object.setPrototypeOf(Zf.prototype,Function.prototype);for(let[e,t]of Object.entries(ki))zl[e]={get(){let r=eh(this,HD(t.open,t.close,this[Wl]),this[Jf]);return Object.defineProperty(this,e,{value:r}),r}};zl.visible={get(){let e=eh(this,this[Wl],!0);return Object.defineProperty(this,"visible",{value:e}),e}};var qD=(e,t,r,...n)=>e==="rgb"?t==="ansi16m"?ki[r].ansi16m(...n):t==="ansi256"?ki[r].ansi256(ki.rgbToAnsi256(...n)):ki[r].ansi(ki.rgbToAnsi(...n)):e==="hex"?qD("rgb",t,r,...ki.hexToRgb(...n)):ki[r][e](...n),PG=["rgb","hex","ansi256"];for(let e of PG){zl[e]={get(){let{level:r}=this;return function(...n){let i=HD(qD(e,EA[r],"color",...n),ki.color.close,this[Wl]);return eh(this,i,this[Jf])}}};let t="bg"+e[0].toUpperCase()+e.slice(1);zl[t]={get(){let{level:r}=this;return function(...n){let i=HD(qD(e,EA[r],"bgColor",...n),ki.bgColor.close,this[Wl]);return eh(this,i,this[Jf])}}}}var kG=Object.defineProperties(()=>{},{...zl,level:{enumerable:!0,get(){return this[zD].level},set(e){this[zD].level=e}}}),HD=(e,t,r)=>{let n,i;return r===void 0?(n=e,i=t):(n=r.openAll+e,i=t+r.closeAll),{open:e,close:t,openAll:n,closeAll:i,parent:r}},eh=(e,t,r)=>{let n=(...i)=>NG(n,i.length===1?""+i[0]:i.join(" "));return Object.setPrototypeOf(n,kG),n[zD]=e,n[Wl]=t,n[Jf]=r,n},NG=(e,t)=>{if(e.level<=0||!t)return e[Jf]?"":t;let r=e[Wl];if(r===void 0)return t;let{openAll:n,closeAll:i}=r;if(t.includes("\x1B"))for(;r!==void 0;)t=vA(t,r.close,r.open),r=r.parent;let o=t.indexOf(`
425
- `);return o!==-1&&(t=DA(t,i,n,o)),n+t+i};Object.defineProperties(Zf.prototype,zl);var RG=Zf(),Yye=Zf({level:CA?CA.level:0});var at=RG;var KD=at.inverse(" "),wA=({isDisabled:e=!1,state:t,placeholder:r=""})=>{let n=SA(()=>e?r?at.dim(r):"":r&&r.length>0?at.inverse(r[0])+at.dim(r.slice(1)):KD,[e,r]),i=SA(()=>{if(e)return t.value;let o=0,s=t.value.length>0?"":KD;for(let a of t.value)s+=o===t.cursorOffset?at.inverse(a):a,o++;return t.suggestion?(t.cursorOffset===t.value.length?s+=at.inverse(t.suggestion[0])+at.dim(t.suggestion.slice(1)):s+=at.dim(t.suggestion),s):(t.value.length>0&&t.cursorOffset===t.value.length&&(s+=KD),s)},[e,t.value,t.cursorOffset,t.suggestion]);return MG((o,s)=>{if(!(s.upArrow||s.downArrow||s.ctrl&&o==="c"||s.tab||s.shift&&s.tab)){if(s.return){t.submit();return}s.leftArrow?t.moveCursorLeft():s.rightArrow?t.moveCursorRight():s.backspace||s.delete?t.delete():t.insert(o)}},{isActive:!e}),{inputValue:t.value.length>0?i:n}};function _A({isDisabled:e=!1,defaultValue:t,placeholder:r="",suggestions:n,onChange:i,onSubmit:o}){let s=fA({defaultValue:t,suggestions:n,onChange:i,onSubmit:o}),{inputValue:a}=wA({isDisabled:e,placeholder:r,state:s}),{styles:u}=gt("TextInput");return BG.createElement(jG,{...u.value()},a)}import{Box as WG}from"ink";import Qf,{useContext as zG,isValidElement as AA}from"react";import{Box as bA,Text as UG}from"ink";import YD,{useContext as $G}from"react";import{createContext as VG}from"react";var th=VG({marker:Gt.line});function rh({children:e}){let{marker:t}=$G(th),{styles:r}=gt("OrderedList");return YD.createElement(bA,{...r.listItem()},YD.createElement(UG,{...r.marker()},t),YD.createElement(bA,{...r.content()},e))}import{createContext as GG}from"react";var XD=GG({marker:""});function qG({children:e}){let{marker:t}=zG(XD),{styles:r}=gt("OrderedList"),n=0;for(let o of Qf.Children.toArray(e))!AA(o)||o.type!==rh||n++;let i=String(n).length;return Qf.createElement(WG,{...r.list()},Qf.Children.map(e,(o,s)=>{if(!AA(o)||o.type!==rh)return o;let a=`${String(s+1).padStart(i)}.`,u=`${t}${a}`;return Qf.createElement(XD.Provider,{value:{marker:u}},Qf.createElement(th.Provider,{value:{marker:u}},o))}))}qG.Item=rh;import JG from"react";import{Text as ZG}from"ink";import{useReducer as HG,useCallback as ep,useEffect as KG}from"react";var YG=(e,t)=>{switch(t.type){case"move-cursor-left":return{...e,cursorOffset:Math.max(0,e.cursorOffset-1)};case"move-cursor-right":return{...e,cursorOffset:Math.min(e.value.length,e.cursorOffset+1)};case"insert":return{...e,previousValue:e.value,value:e.value.slice(0,e.cursorOffset)+t.text+e.value.slice(e.cursorOffset),cursorOffset:e.cursorOffset+t.text.length};case"delete":{let r=Math.max(0,e.cursorOffset-1);return{...e,previousValue:e.value,value:e.value.slice(0,r)+e.value.slice(r+1),cursorOffset:r}}}},OA=({onChange:e,onSubmit:t})=>{let[r,n]=HG(YG,{previousValue:"",value:"",cursorOffset:0}),i=ep(()=>{n({type:"move-cursor-left"})},[]),o=ep(()=>{n({type:"move-cursor-right"})},[]),s=ep(l=>{n({type:"insert",text:l})},[]),a=ep(()=>{n({type:"delete"})},[]),u=ep(()=>{t?.(r.value)},[r.value,t]);return KG(()=>{r.value!==r.previousValue&&e?.(r.value)},[r.previousValue,r.value,e]),{...r,moveCursorLeft:i,moveCursorRight:o,insert:s,delete:a,submit:u}};import{useMemo as IA}from"react";import{useInput as XG}from"ink";var JD=at.inverse(" "),FA=({isDisabled:e=!1,state:t,placeholder:r=""})=>{let n=IA(()=>e?r?at.dim(r):"":r&&r.length>0?at.inverse(r[0])+at.dim(r.slice(1)):JD,[e,r]),i=IA(()=>{let o="*".repeat(t.value.length);if(e)return o;let s=0,a=o.length>0?"":JD;for(let u of o)a+=s===t.cursorOffset?at.inverse(u):u,s++;return o.length>0&&t.cursorOffset===o.length&&(a+=JD),a},[e,t.value,t.cursorOffset]);return XG((o,s)=>{if(!(s.upArrow||s.downArrow||s.ctrl&&o==="c"||s.tab||s.shift&&s.tab)){if(s.return){t.submit();return}s.leftArrow?t.moveCursorLeft():s.rightArrow?t.moveCursorRight():s.backspace||s.delete?t.delete():t.insert(o)}},{isActive:!e}),{inputValue:t.value.length>0?i:n}};function TA({isDisabled:e=!1,placeholder:t="",onChange:r,onSubmit:n}){let i=OA({onChange:r,onSubmit:n}),{inputValue:o}=FA({isDisabled:e,placeholder:t,state:i}),{styles:s}=gt("PasswordInput");return JG.createElement(ZG,{...s.value()},o)}import Gve from"react";import{Box as zve,Text as qve}from"ink";import Zve from"react";import{Box as eDe,Text as tDe}from"ink";import EDe from"react";import{Text as wDe}from"ink";import{useReducer as aDe,useCallback as uDe,useEffect as lDe,useMemo as cDe}from"react";import{useMemo as dDe}from"react";import{useInput as hDe}from"ink";var yDe=at.inverse(" ");import LA,{useContext as QG}from"react";var co=e=>{let{lite:t}=QG(Xe),r=e.yesLabel||"Yes",n=e.noLabel||"No",i=[{label:r,value:"yes"},{label:n,value:"no"}],o=a=>{let u=a==="yes";e.onChange?.(u)},s=e.default==="no"?i.reverse():i;return t?LA.createElement(Qb,{onConfirm:()=>o("yes"),onCancel:()=>o("no"),defaultChoice:e.default==="yes"?"confirm":"cancel"}):LA.createElement(Go,{options:s,onChange:a=>o(a)})};async function bn(e=500){let t=(await Promise.resolve().then(()=>(NA(),kA))).default;return t(e)}var MA=({packageName:e,handlePromptDecision:t})=>{let{exit:r}=eW(),[n,i]=Ps.useState(!1);return Ps.createElement(RA,{flexDirection:"column",paddingX:2,borderStyle:"round",borderColor:"yellow",width:80},Ps.createElement(ZD,null,Ps.createElement(Be,{color:"greenBright"},"? "),"You're using an older version of our CLI. Would you like to update?"),Ps.createElement(co,{default:"yes",yesLabel:"Yes (Recommended to access the latest templates)",noLabel:"No (Some features, such as app templates, may be outdated)",onChange:async s=>{s&&(i(!0),await bn(),r()),t(s)}}),n&&Ps.createElement(RA,{marginTop:1},Ps.createElement(ZD,null,"Run ",Ps.createElement(ZD,{bold:!0},"npm i -g ",e,"@latest")," to update.")))};import{Text as tW}from"ink";import*as tp from"react";var Ir=e=>{let{lite:t}=tp.useContext(Xe);return t?tp.createElement(tW,null,e.label):tp.createElement(cA,{type:"bouncingBall",...e})};import BA from"react";var nh=class extends BA.Component{state={isCrashed:!1,message:void 0};static getDerivedStateFromError(t){return{isCrashed:!0,message:t.message}}render(){return this.state.isCrashed?BA.createElement(z,{variant:"error"},this.state.message??"Sorry, a problem occurred"):this.props.children}componentDidCatch(t){this.setState({isCrashed:!0,message:t.message})}componentDidMount(){process.setUncaughtExceptionCaptureCallback(this.crashed)}componentWillUnmount(){process.setUncaughtExceptionCaptureCallback(null)}crashed=t=>{this.setState({isCrashed:!0,message:t.message}),process.exitCode=1}};var UA=({pkg:e,getUpdateInfo:t,border:r="regular",children:n,shouldPromptUpdate:i=!1,Logo:o})=>{let{lite:s}=rW(Xe),[a,u]=ih(!0),[l,c]=ih(),[f,p]=ih(null),[d,m]=ih(!1);nW(()=>{(async()=>{let g=await t();g.success?p(g.data.latest):m(!0),u(!1)})()},[e]);let y=h=>{c(h?"agreed":"disagreed")};return a?Wo.createElement(Ir,{type:"bouncingBall",label:"Loading..."}):i&&f&&f!==e.version&&!l?Wo.createElement(MA,{packageName:e.name,handlePromptDecision:y}):Wo.createElement(jA,{borderColor:r==="regular"&&!s?Ym:void 0,borderStyle:r==="regular"&&!s?"round":void 0,margin:r==="regular"&&!s?2:void 0,flexDirection:"column"},o&&Wo.createElement(jA,{flexDirection:"row",paddingY:1},Wo.createElement(VA,null),Wo.createElement(o,null),Wo.createElement(VA,null)),Wo.createElement(nh,null,!d&&Wo.createElement(Lb,{name:e.name,currentVersion:e.version,latestVersion:f}),n))};var ql={name:"@canva/cli",version:"0.0.1-beta.31",description:"The official Canva CLI.",license:"SEE LICENSE IN LICENSE.md",author:"Canva Pty Ltd.",repository:{directory:"git+https://github.com/canva-sdks/canva-cli.git",type:"git"},type:"module",main:"./lib/cjs/index.cjs",module:"./lib/esm/index.mjs",exports:{".":{require:"./lib/cjs/index.cjs",import:"./lib/esm/index.mjs"}},bin:{canva:"./dist/cli.js"},files:["templates","cli.js","LICENSE.md","README.md","lib"],scripts:{"//0":"The following scripts must be run from the root directory of cli/canva-cli",build:"npm run compile && npm run build:patch && npm run build:patch && npm run build:library","build:patch":"npm run build:docs && npm run build:templates && npm run build:meta && npm run build:patch:code","build:patch:code":"node ./build/patch.mjs ./dist/cli.js","build:docs":"cp README.md LICENSE.md dist","build:templates":"node ./build/templates.mjs ./templates dist/templates","build:meta":"node ./build/package_json.mjs ./package.json dist/package.json canva","build:library":"node ./build/library.mjs",compile:"rm -rf dist && node ./build/build.mjs","prepare:release":"cd ../.. && npm run build:package:beta cli/canva-cli","lint:types:watch":"tsc --watch","lint:types":"tsc",lint:"eslint .","lint:fix":"eslint . --fix","test:unit":"jest --no-cache","test:unit:watch":"jest --watchAll","test:unit:ci":"jest --ci --collectCoverage","prebuild:ava":"tsc && tsc-alias","test:feature":"npm run prebuild:ava && ava src/**/*.feature.*","test:feature:specific":"npm run prebuild:ava && ava","test:feature:watch":"npm run test:feature -- --watch","test:feature:ci":"npm run prebuild:ava && ava src/**/*.feature.*","test:feature:update-snapshots":"npm run test:feature -- --u",format:"prettier ./ --no-config --write","format:check":"prettier ./ --no-config --check",start:"npm run build && node ./dist/cli.js","readme:check":"node ./bin/readme_check.mjs",dev:"ENV=dev npm run start",staging:"ENV=staging npm run start",prod:"ENV=prod npm run start",link:"npm run build && cp -r ./dist ../../ && cd ../../dist && npm install && npm link && chmod +x ./cli.js"},dependencies:{"@canva/app-ui-kit":"^4.9.0","@inkjs/ui":"2.0.0","@modelcontextprotocol/sdk":"1.8.0","@t3-oss/env-core":"0.11.1",clipboardy:"4.0.0",ink:"5.1.0","ink-gradient":"3.0.0",jose:"5.9.6",mobx:"6.13.3","mobx-react":"9.1.1",open:"10.1.0",react:"18.3.1","react-docgen-typescript":"2.2.2",semver:"7.6.3",systeminformation:"5.25.11","terminal-link":"3.0.0","update-notifier":"7.3.1",yargs:"17.7.2",zod:"3.24.1"},devDependencies:{"@ava/typescript":"5.0.0","@eslint/js":"9.23.0","@jest/globals":"29.7.0","@tsconfig/node20":"20.1.4","@types/jest":"29.5.14","@types/react":"18.3.12","@types/semver":"7.5.8","@types/update-notifier":"6.0.8","@typescript-eslint/eslint-plugin":"8.27.0","@typescript-eslint/parser":"8.27.0",ava:"6.2.0",esbuild:"0.25.0",eslint:"9.23.0","eslint-plugin-ava":"15.0.1","eslint-plugin-jest":"28.11.0","eslint-plugin-react":"7.37.4","eslint-plugin-unicorn":"57.0.0","ink-testing-library":"4.0.0",jest:"29.7.0",prettier:"3.4.2","react-dom":"18.3.1",testdouble:"3.20.2","ts-jest":"29.2.5","ts-jest-mock-import-meta":"1.2.1","ts-node":"10.9.2","tsc-alias":"1.8.10",typescript:"5.5.4","typescript-eslint":"8.27.0"},keywords:["apps sdk","canva","cli","starter kit"],engines:{node:">=16"}};import Ni from"react";import{Text as jO,Newline as NW}from"ink";var fo=ht(YA(),1),g1=ht(RO(),1);import PW from"react";import{Transform as kW}from"ink";function m1({onlyFirst:e=!1}={}){let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}var LW=m1();function h1(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(LW,"")}var MO=e=>{if(e.name&&e.colors)throw new Error("The `name` and `colors` props are mutually exclusive");let t;if(e.name)t=g1.default[e.name];else if(e.colors)t=(0,g1.default)(e.colors);else throw new Error("Either `name` or `colors` prop must be provided");let r=n=>t.multiline(h1(n));return PW.createElement(kW,{transform:r},e.children)};MO.propTypes={children:fo.default.oneOfType([fo.default.arrayOf(fo.default.node),fo.default.node]).isRequired,name:fo.default.oneOf(["cristal","teen","mind","morning","vice","passion","fruit","instagram","atlas","retro","summer","pastel","rainbow"]),colors:fo.default.arrayOf(fo.default.oneOfType([fo.default.string,fo.default.object]))};var BO=MO;var RW=`
425
+ `);return o!==-1&&(t=DA(t,i,n,o)),n+t+i};Object.defineProperties(Zf.prototype,zl);var RG=Zf(),Yye=Zf({level:CA?CA.level:0});var at=RG;var KD=at.inverse(" "),wA=({isDisabled:e=!1,state:t,placeholder:r=""})=>{let n=SA(()=>e?r?at.dim(r):"":r&&r.length>0?at.inverse(r[0])+at.dim(r.slice(1)):KD,[e,r]),i=SA(()=>{if(e)return t.value;let o=0,s=t.value.length>0?"":KD;for(let a of t.value)s+=o===t.cursorOffset?at.inverse(a):a,o++;return t.suggestion?(t.cursorOffset===t.value.length?s+=at.inverse(t.suggestion[0])+at.dim(t.suggestion.slice(1)):s+=at.dim(t.suggestion),s):(t.value.length>0&&t.cursorOffset===t.value.length&&(s+=KD),s)},[e,t.value,t.cursorOffset,t.suggestion]);return MG((o,s)=>{if(!(s.upArrow||s.downArrow||s.ctrl&&o==="c"||s.tab||s.shift&&s.tab)){if(s.return){t.submit();return}s.leftArrow?t.moveCursorLeft():s.rightArrow?t.moveCursorRight():s.backspace||s.delete?t.delete():t.insert(o)}},{isActive:!e}),{inputValue:t.value.length>0?i:n}};function _A({isDisabled:e=!1,defaultValue:t,placeholder:r="",suggestions:n,onChange:i,onSubmit:o}){let s=fA({defaultValue:t,suggestions:n,onChange:i,onSubmit:o}),{inputValue:a}=wA({isDisabled:e,placeholder:r,state:s}),{styles:u}=gt("TextInput");return BG.createElement(jG,{...u.value()},a)}import{Box as WG}from"ink";import Qf,{useContext as zG,isValidElement as AA}from"react";import{Box as bA,Text as UG}from"ink";import YD,{useContext as $G}from"react";import{createContext as VG}from"react";var th=VG({marker:Gt.line});function rh({children:e}){let{marker:t}=$G(th),{styles:r}=gt("OrderedList");return YD.createElement(bA,{...r.listItem()},YD.createElement(UG,{...r.marker()},t),YD.createElement(bA,{...r.content()},e))}import{createContext as GG}from"react";var XD=GG({marker:""});function qG({children:e}){let{marker:t}=zG(XD),{styles:r}=gt("OrderedList"),n=0;for(let o of Qf.Children.toArray(e))!AA(o)||o.type!==rh||n++;let i=String(n).length;return Qf.createElement(WG,{...r.list()},Qf.Children.map(e,(o,s)=>{if(!AA(o)||o.type!==rh)return o;let a=`${String(s+1).padStart(i)}.`,u=`${t}${a}`;return Qf.createElement(XD.Provider,{value:{marker:u}},Qf.createElement(th.Provider,{value:{marker:u}},o))}))}qG.Item=rh;import JG from"react";import{Text as ZG}from"ink";import{useReducer as HG,useCallback as ep,useEffect as KG}from"react";var YG=(e,t)=>{switch(t.type){case"move-cursor-left":return{...e,cursorOffset:Math.max(0,e.cursorOffset-1)};case"move-cursor-right":return{...e,cursorOffset:Math.min(e.value.length,e.cursorOffset+1)};case"insert":return{...e,previousValue:e.value,value:e.value.slice(0,e.cursorOffset)+t.text+e.value.slice(e.cursorOffset),cursorOffset:e.cursorOffset+t.text.length};case"delete":{let r=Math.max(0,e.cursorOffset-1);return{...e,previousValue:e.value,value:e.value.slice(0,r)+e.value.slice(r+1),cursorOffset:r}}}},OA=({onChange:e,onSubmit:t})=>{let[r,n]=HG(YG,{previousValue:"",value:"",cursorOffset:0}),i=ep(()=>{n({type:"move-cursor-left"})},[]),o=ep(()=>{n({type:"move-cursor-right"})},[]),s=ep(l=>{n({type:"insert",text:l})},[]),a=ep(()=>{n({type:"delete"})},[]),u=ep(()=>{t?.(r.value)},[r.value,t]);return KG(()=>{r.value!==r.previousValue&&e?.(r.value)},[r.previousValue,r.value,e]),{...r,moveCursorLeft:i,moveCursorRight:o,insert:s,delete:a,submit:u}};import{useMemo as IA}from"react";import{useInput as XG}from"ink";var JD=at.inverse(" "),FA=({isDisabled:e=!1,state:t,placeholder:r=""})=>{let n=IA(()=>e?r?at.dim(r):"":r&&r.length>0?at.inverse(r[0])+at.dim(r.slice(1)):JD,[e,r]),i=IA(()=>{let o="*".repeat(t.value.length);if(e)return o;let s=0,a=o.length>0?"":JD;for(let u of o)a+=s===t.cursorOffset?at.inverse(u):u,s++;return o.length>0&&t.cursorOffset===o.length&&(a+=JD),a},[e,t.value,t.cursorOffset]);return XG((o,s)=>{if(!(s.upArrow||s.downArrow||s.ctrl&&o==="c"||s.tab||s.shift&&s.tab)){if(s.return){t.submit();return}s.leftArrow?t.moveCursorLeft():s.rightArrow?t.moveCursorRight():s.backspace||s.delete?t.delete():t.insert(o)}},{isActive:!e}),{inputValue:t.value.length>0?i:n}};function TA({isDisabled:e=!1,placeholder:t="",onChange:r,onSubmit:n}){let i=OA({onChange:r,onSubmit:n}),{inputValue:o}=FA({isDisabled:e,placeholder:t,state:i}),{styles:s}=gt("PasswordInput");return JG.createElement(ZG,{...s.value()},o)}import Gve from"react";import{Box as zve,Text as qve}from"ink";import Zve from"react";import{Box as eDe,Text as tDe}from"ink";import EDe from"react";import{Text as wDe}from"ink";import{useReducer as aDe,useCallback as uDe,useEffect as lDe,useMemo as cDe}from"react";import{useMemo as dDe}from"react";import{useInput as hDe}from"ink";var yDe=at.inverse(" ");import LA,{useContext as QG}from"react";var co=e=>{let{lite:t}=QG(Xe),r=e.yesLabel||"Yes",n=e.noLabel||"No",i=[{label:r,value:"yes"},{label:n,value:"no"}],o=a=>{let u=a==="yes";e.onChange?.(u)},s=e.default==="no"?i.reverse():i;return t?LA.createElement(Qb,{onConfirm:()=>o("yes"),onCancel:()=>o("no"),defaultChoice:e.default==="yes"?"confirm":"cancel"}):LA.createElement(Go,{options:s,onChange:a=>o(a)})};async function bn(e=500){let t=(await Promise.resolve().then(()=>(NA(),kA))).default;return t(e)}var MA=({packageName:e,handlePromptDecision:t})=>{let{exit:r}=eW(),[n,i]=Ps.useState(!1);return Ps.createElement(RA,{flexDirection:"column",paddingX:2,borderStyle:"round",borderColor:"yellow",width:80},Ps.createElement(ZD,null,Ps.createElement(Be,{color:"greenBright"},"? "),"You're using an older version of our CLI. Would you like to update?"),Ps.createElement(co,{default:"yes",yesLabel:"Yes (Recommended to access the latest templates)",noLabel:"No (Some features, such as app templates, may be outdated)",onChange:async s=>{s&&(i(!0),await bn(),r()),t(s)}}),n&&Ps.createElement(RA,{marginTop:1},Ps.createElement(ZD,null,"Run ",Ps.createElement(ZD,{bold:!0},"npm i -g ",e,"@latest")," to update.")))};import{Text as tW}from"ink";import*as tp from"react";var Ir=e=>{let{lite:t}=tp.useContext(Xe);return t?tp.createElement(tW,null,e.label):tp.createElement(cA,{type:"bouncingBall",...e})};import BA from"react";var nh=class extends BA.Component{state={isCrashed:!1,message:void 0};static getDerivedStateFromError(t){return{isCrashed:!0,message:t.message}}render(){return this.state.isCrashed?BA.createElement(z,{variant:"error"},this.state.message??"Sorry, a problem occurred"):this.props.children}componentDidCatch(t){this.setState({isCrashed:!0,message:t.message})}componentDidMount(){process.setUncaughtExceptionCaptureCallback(this.crashed)}componentWillUnmount(){process.setUncaughtExceptionCaptureCallback(null)}crashed=t=>{this.setState({isCrashed:!0,message:t.message}),process.exitCode=1}};var UA=({pkg:e,getUpdateInfo:t,border:r="regular",children:n,shouldPromptUpdate:i=!1,Logo:o})=>{let{lite:s}=rW(Xe),[a,u]=ih(!0),[l,c]=ih(),[f,p]=ih(null),[d,m]=ih(!1);nW(()=>{(async()=>{let g=await t();g.success?p(g.data.latest):m(!0),u(!1)})()},[e]);let y=h=>{c(h?"agreed":"disagreed")};return a?Wo.createElement(Ir,{type:"bouncingBall",label:"Loading..."}):i&&f&&f!==e.version&&!l?Wo.createElement(MA,{packageName:e.name,handlePromptDecision:y}):Wo.createElement(jA,{borderColor:r==="regular"&&!s?Ym:void 0,borderStyle:r==="regular"&&!s?"round":void 0,margin:r==="regular"&&!s?2:void 0,flexDirection:"column"},o&&Wo.createElement(jA,{flexDirection:"row",paddingY:1},Wo.createElement(VA,null),Wo.createElement(o,null),Wo.createElement(VA,null)),Wo.createElement(nh,null,!d&&Wo.createElement(Lb,{name:e.name,currentVersion:e.version,latestVersion:f}),n))};var ql={name:"@canva/cli",version:"0.0.1-beta.32",description:"The official Canva CLI.",license:"SEE LICENSE IN LICENSE.md",author:"Canva Pty Ltd.",repository:{directory:"git+https://github.com/canva-sdks/canva-cli.git",type:"git"},type:"module",main:"./lib/cjs/index.cjs",module:"./lib/esm/index.mjs",exports:{".":{require:"./lib/cjs/index.cjs",import:"./lib/esm/index.mjs"}},bin:{canva:"./dist/cli.js"},files:["templates","cli.js","LICENSE.md","README.md","lib"],scripts:{"//0":"The following scripts must be run from the root directory of cli/canva-cli",build:"npm run compile && npm run build:patch && npm run build:patch && npm run build:library","build:patch":"npm run build:docs && npm run build:templates && npm run build:meta && npm run build:patch:code","build:patch:code":"node ./build/patch.mjs ./dist/cli.js","build:docs":"cp README.md LICENSE.md dist","build:templates":"node ./build/templates.mjs ./templates dist/templates","build:meta":"node ./build/package_json.mjs ./package.json dist/package.json canva","build:library":"node ./build/library.mjs",compile:"rm -rf dist && node ./build/build.mjs","prepare:release":"cd ../.. && npm run build:package:beta cli/canva-cli","lint:types:watch":"tsc --watch","lint:types":"tsc",lint:"eslint .","lint:fix":"eslint . --fix","test:unit":"jest --no-cache","test:unit:watch":"jest --watchAll","test:unit:ci":"jest --ci --collectCoverage","prebuild:ava":"tsc && tsc-alias","test:feature":"npm run prebuild:ava && ava src/**/*.feature.*","test:feature:specific":"npm run prebuild:ava && ava","test:feature:watch":"npm run test:feature -- --watch","test:feature:ci":"npm run prebuild:ava && ava src/**/*.feature.*","test:feature:update-snapshots":"npm run test:feature -- --u",format:"prettier ./ --no-config --write","format:check":"prettier ./ --no-config --check",start:"npm run build && node ./dist/cli.js","readme:check":"node ./bin/readme_check.mjs",dev:"ENV=dev npm run start",staging:"ENV=staging npm run start",prod:"ENV=prod npm run start",link:"npm run build && cp -r ./dist ../../ && cd ../../dist && npm install && npm link && chmod +x ./cli.js"},dependencies:{"@canva/app-ui-kit":"^4.10.0","@inkjs/ui":"2.0.0","@modelcontextprotocol/sdk":"1.8.0","@t3-oss/env-core":"0.11.1",clipboardy:"4.0.0",ink:"5.1.0","ink-gradient":"3.0.0",jose:"5.9.6",mobx:"6.13.3","mobx-react":"9.1.1",open:"10.1.0",react:"18.3.1","react-docgen-typescript":"2.2.2",semver:"7.6.3",systeminformation:"5.25.11","terminal-link":"3.0.0","update-notifier":"7.3.1",yargs:"17.7.2",zod:"3.24.1"},devDependencies:{"@ava/typescript":"5.0.0","@eslint/js":"9.23.0","@jest/globals":"29.7.0","@tsconfig/node20":"20.1.4","@types/jest":"29.5.14","@types/react":"18.3.12","@types/semver":"7.5.8","@types/update-notifier":"6.0.8","@typescript-eslint/eslint-plugin":"8.27.0","@typescript-eslint/parser":"8.27.0",ava:"6.2.0",esbuild:"0.25.0",eslint:"9.23.0","eslint-plugin-ava":"15.0.1","eslint-plugin-jest":"28.11.0","eslint-plugin-react":"7.37.4","eslint-plugin-unicorn":"57.0.0","ink-testing-library":"4.0.0",jest:"29.7.0",prettier:"3.4.2","react-dom":"18.3.1",testdouble:"3.20.2","ts-jest":"29.2.5","ts-jest-mock-import-meta":"1.2.1","ts-node":"10.9.2","tsc-alias":"1.8.10",typescript:"5.5.4","typescript-eslint":"8.27.0"},keywords:["apps sdk","canva","cli","starter kit"],engines:{node:">=16"}};import Ni from"react";import{Text as jO,Newline as NW}from"ink";var fo=ht(YA(),1),g1=ht(RO(),1);import PW from"react";import{Transform as kW}from"ink";function m1({onlyFirst:e=!1}={}){let t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}var LW=m1();function h1(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(LW,"")}var MO=e=>{if(e.name&&e.colors)throw new Error("The `name` and `colors` props are mutually exclusive");let t;if(e.name)t=g1.default[e.name];else if(e.colors)t=(0,g1.default)(e.colors);else throw new Error("Either `name` or `colors` prop must be provided");let r=n=>t.multiline(h1(n));return PW.createElement(kW,{transform:r},e.children)};MO.propTypes={children:fo.default.oneOfType([fo.default.arrayOf(fo.default.node),fo.default.node]).isRequired,name:fo.default.oneOf(["cristal","teen","mind","morning","vice","passion","fruit","instagram","atlas","retro","summer","pastel","rainbow"]),colors:fo.default.arrayOf(fo.default.oneOfType([fo.default.string,fo.default.object]))};var BO=MO;var RW=`
426
426
  \u2584\u259F\u2580\u2580\u2580\u2584
427
427
 
428
428
  \u2588\u259B \u259D\u2598 \u2584\u2584\u2596\u2584 \u2584 \u2584\u2584 \u2584 \u2597\u2580\u2596 \u2584\u2584\u2596\u2584
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@canva/cli",
3
- "version": "0.0.1-beta.31",
3
+ "version": "0.0.1-beta.32",
4
4
  "description": "The official Canva CLI.",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Canva Pty Ltd.",
@@ -6,11 +6,11 @@
6
6
  "license": "SEE LICENSE IN LICENSE.md",
7
7
  "author": "Canva Pty Ltd.",
8
8
  "dependencies": {
9
- "@canva/app-ui-kit": "^4.9.0",
9
+ "@canva/app-ui-kit": "^4.10.0",
10
10
  "@canva/asset": "^2.2.0",
11
- "@canva/design": "^2.4.1",
11
+ "@canva/design": "^2.6.0",
12
12
  "@canva/error": "^2.1.0",
13
- "@canva/platform": "^2.1.0",
13
+ "@canva/platform": "^2.2.0",
14
14
  "@canva/user": "^2.1.0",
15
15
  "cookie-parser": "1.4.7",
16
16
  "react": "18.3.1",
@@ -64,7 +64,7 @@
64
64
  "url-loader": "4.1.1",
65
65
  "webpack": "5.97.1",
66
66
  "webpack-cli": "5.1.4",
67
- "webpack-dev-server": "5.2.0",
67
+ "webpack-dev-server": "5.2.2",
68
68
  "yargs": "17.7.2"
69
69
  },
70
70
  "keywords": [
@@ -199,6 +199,7 @@ function buildDevConfig(options?: DevConfig): {
199
199
 
200
200
  const { port, enableHmr, appOrigin, appId, enableHttps, certFile, keyFile } =
201
201
  options;
202
+ const host = "localhost";
202
203
 
203
204
  let devServer: DevServerConfiguration = {
204
205
  server: enableHttps
@@ -210,7 +211,8 @@ function buildDevConfig(options?: DevConfig): {
210
211
  },
211
212
  }
212
213
  : "http",
213
- host: "localhost",
214
+ host,
215
+ allowedHosts: [host],
214
216
  historyApiFallback: {
215
217
  rewrites: [{ from: /^\/$/, to: "/app.js" }],
216
218
  },
@@ -227,7 +229,7 @@ function buildDevConfig(options?: DevConfig): {
227
229
  if (enableHmr && appOrigin) {
228
230
  devServer = {
229
231
  ...devServer,
230
- allowedHosts: new URL(appOrigin).hostname,
232
+ allowedHosts: [host, new URL(appOrigin).hostname],
231
233
  headers: {
232
234
  "Access-Control-Allow-Origin": appOrigin,
233
235
  "Access-Control-Allow-Credentials": "true",
@@ -245,7 +247,7 @@ function buildDevConfig(options?: DevConfig): {
245
247
  const appDomain = `app-${appId.toLowerCase().trim()}.canva-apps.com`;
246
248
  devServer = {
247
249
  ...devServer,
248
- allowedHosts: appDomain,
250
+ allowedHosts: [host, appDomain],
249
251
  headers: {
250
252
  "Access-Control-Allow-Origin": `https://${appDomain}`,
251
253
  "Access-Control-Allow-Credentials": "true",
@@ -20,11 +20,11 @@
20
20
  "dependencies": {
21
21
  "@canva/app-components": "^1.3.0",
22
22
  "@canva/app-i18n-kit": "^1.0.2",
23
- "@canva/app-ui-kit": "^4.9.0",
23
+ "@canva/app-ui-kit": "^4.10.0",
24
24
  "@canva/asset": "^2.2.0",
25
- "@canva/design": "^2.4.1",
25
+ "@canva/design": "^2.6.0",
26
26
  "@canva/error": "^2.1.0",
27
- "@canva/platform": "^2.1.0",
27
+ "@canva/platform": "^2.2.0",
28
28
  "@canva/user": "^2.1.0",
29
29
  "cookie-parser": "1.4.7",
30
30
  "cors": "2.8.5",
@@ -89,7 +89,7 @@
89
89
  "url-loader": "4.1.1",
90
90
  "webpack": "5.97.1",
91
91
  "webpack-cli": "5.1.4",
92
- "webpack-dev-server": "5.2.0",
92
+ "webpack-dev-server": "5.2.2",
93
93
  "yargs": "17.7.2"
94
94
  }
95
95
  }
@@ -199,6 +199,7 @@ function buildDevConfig(options?: DevConfig): {
199
199
 
200
200
  const { port, enableHmr, appOrigin, appId, enableHttps, certFile, keyFile } =
201
201
  options;
202
+ const host = "localhost";
202
203
 
203
204
  let devServer: DevServerConfiguration = {
204
205
  server: enableHttps
@@ -210,7 +211,8 @@ function buildDevConfig(options?: DevConfig): {
210
211
  },
211
212
  }
212
213
  : "http",
213
- host: "localhost",
214
+ host,
215
+ allowedHosts: [host],
214
216
  historyApiFallback: {
215
217
  rewrites: [{ from: /^\/$/, to: "/app.js" }],
216
218
  },
@@ -227,7 +229,7 @@ function buildDevConfig(options?: DevConfig): {
227
229
  if (enableHmr && appOrigin) {
228
230
  devServer = {
229
231
  ...devServer,
230
- allowedHosts: new URL(appOrigin).hostname,
232
+ allowedHosts: [host, new URL(appOrigin).hostname],
231
233
  headers: {
232
234
  "Access-Control-Allow-Origin": appOrigin,
233
235
  "Access-Control-Allow-Credentials": "true",
@@ -245,7 +247,7 @@ function buildDevConfig(options?: DevConfig): {
245
247
  const appDomain = `app-${appId.toLowerCase().trim()}.canva-apps.com`;
246
248
  devServer = {
247
249
  ...devServer,
248
- allowedHosts: appDomain,
250
+ allowedHosts: [host, appDomain],
249
251
  headers: {
250
252
  "Access-Control-Allow-Origin": `https://${appDomain}`,
251
253
  "Access-Control-Allow-Credentials": "true",
@@ -20,12 +20,12 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@canva/app-i18n-kit": "^1.0.2",
23
- "@canva/app-ui-kit": "^4.9.0",
23
+ "@canva/app-ui-kit": "^4.10.0",
24
24
  "@canva/asset": "^2.2.0",
25
- "@canva/design": "^2.4.1",
25
+ "@canva/design": "^2.6.0",
26
26
  "@canva/error": "^2.1.0",
27
27
  "@canva/intents": "^2.0.0",
28
- "@canva/platform": "^2.1.0",
28
+ "@canva/platform": "^2.2.0",
29
29
  "@canva/user": "^2.1.0",
30
30
  "react": "18.3.1",
31
31
  "react-dom": "18.3.1",
@@ -85,7 +85,7 @@
85
85
  "url-loader": "4.1.1",
86
86
  "webpack": "5.97.1",
87
87
  "webpack-cli": "5.1.4",
88
- "webpack-dev-server": "5.2.0",
88
+ "webpack-dev-server": "5.2.2",
89
89
  "yargs": "17.7.2"
90
90
  }
91
91
  }
@@ -199,6 +199,7 @@ function buildDevConfig(options?: DevConfig): {
199
199
 
200
200
  const { port, enableHmr, appOrigin, appId, enableHttps, certFile, keyFile } =
201
201
  options;
202
+ const host = "localhost";
202
203
 
203
204
  let devServer: DevServerConfiguration = {
204
205
  server: enableHttps
@@ -210,7 +211,8 @@ function buildDevConfig(options?: DevConfig): {
210
211
  },
211
212
  }
212
213
  : "http",
213
- host: "localhost",
214
+ host,
215
+ allowedHosts: [host],
214
216
  historyApiFallback: {
215
217
  rewrites: [{ from: /^\/$/, to: "/app.js" }],
216
218
  },
@@ -227,7 +229,7 @@ function buildDevConfig(options?: DevConfig): {
227
229
  if (enableHmr && appOrigin) {
228
230
  devServer = {
229
231
  ...devServer,
230
- allowedHosts: new URL(appOrigin).hostname,
232
+ allowedHosts: [host, new URL(appOrigin).hostname],
231
233
  headers: {
232
234
  "Access-Control-Allow-Origin": appOrigin,
233
235
  "Access-Control-Allow-Credentials": "true",
@@ -245,7 +247,7 @@ function buildDevConfig(options?: DevConfig): {
245
247
  const appDomain = `app-${appId.toLowerCase().trim()}.canva-apps.com`;
246
248
  devServer = {
247
249
  ...devServer,
248
- allowedHosts: appDomain,
250
+ allowedHosts: [host, appDomain],
249
251
  headers: {
250
252
  "Access-Control-Allow-Origin": `https://${appDomain}`,
251
253
  "Access-Control-Allow-Credentials": "true",
@@ -19,11 +19,11 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "@canva/app-i18n-kit": "^1.0.2",
22
- "@canva/app-ui-kit": "^4.9.0",
22
+ "@canva/app-ui-kit": "^4.10.0",
23
23
  "@canva/asset": "^2.2.0",
24
- "@canva/design": "^2.4.1",
24
+ "@canva/design": "^2.6.0",
25
25
  "@canva/error": "^2.1.0",
26
- "@canva/platform": "^2.1.0",
26
+ "@canva/platform": "^2.2.0",
27
27
  "@canva/user": "^2.1.0",
28
28
  "cookie-parser": "1.4.7",
29
29
  "cors": "2.8.5",
@@ -93,7 +93,7 @@
93
93
  "url-loader": "4.1.1",
94
94
  "webpack": "5.97.1",
95
95
  "webpack-cli": "5.1.4",
96
- "webpack-dev-server": "5.2.0",
96
+ "webpack-dev-server": "5.2.2",
97
97
  "yargs": "17.7.2"
98
98
  }
99
99
  }
@@ -199,6 +199,7 @@ function buildDevConfig(options?: DevConfig): {
199
199
 
200
200
  const { port, enableHmr, appOrigin, appId, enableHttps, certFile, keyFile } =
201
201
  options;
202
+ const host = "localhost";
202
203
 
203
204
  let devServer: DevServerConfiguration = {
204
205
  server: enableHttps
@@ -210,7 +211,8 @@ function buildDevConfig(options?: DevConfig): {
210
211
  },
211
212
  }
212
213
  : "http",
213
- host: "localhost",
214
+ host,
215
+ allowedHosts: [host],
214
216
  historyApiFallback: {
215
217
  rewrites: [{ from: /^\/$/, to: "/app.js" }],
216
218
  },
@@ -227,7 +229,7 @@ function buildDevConfig(options?: DevConfig): {
227
229
  if (enableHmr && appOrigin) {
228
230
  devServer = {
229
231
  ...devServer,
230
- allowedHosts: new URL(appOrigin).hostname,
232
+ allowedHosts: [host, new URL(appOrigin).hostname],
231
233
  headers: {
232
234
  "Access-Control-Allow-Origin": appOrigin,
233
235
  "Access-Control-Allow-Credentials": "true",
@@ -245,7 +247,7 @@ function buildDevConfig(options?: DevConfig): {
245
247
  const appDomain = `app-${appId.toLowerCase().trim()}.canva-apps.com`;
246
248
  devServer = {
247
249
  ...devServer,
248
- allowedHosts: appDomain,
250
+ allowedHosts: [host, appDomain],
249
251
  headers: {
250
252
  "Access-Control-Allow-Origin": `https://${appDomain}`,
251
253
  "Access-Control-Allow-Credentials": "true",
@@ -20,11 +20,11 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@canva/app-i18n-kit": "^1.0.2",
23
- "@canva/app-ui-kit": "^4.9.0",
23
+ "@canva/app-ui-kit": "^4.10.0",
24
24
  "@canva/asset": "^2.2.0",
25
- "@canva/design": "^2.4.1",
25
+ "@canva/design": "^2.6.0",
26
26
  "@canva/error": "^2.1.0",
27
- "@canva/platform": "^2.1.0",
27
+ "@canva/platform": "^2.2.0",
28
28
  "@canva/user": "^2.1.0",
29
29
  "react": "18.3.1",
30
30
  "react-dom": "18.3.1",
@@ -82,7 +82,7 @@
82
82
  "url-loader": "4.1.1",
83
83
  "webpack": "5.97.1",
84
84
  "webpack-cli": "5.1.4",
85
- "webpack-dev-server": "5.2.0",
85
+ "webpack-dev-server": "5.2.2",
86
86
  "yargs": "17.7.2"
87
87
  }
88
88
  }
@@ -199,6 +199,7 @@ function buildDevConfig(options?: DevConfig): {
199
199
 
200
200
  const { port, enableHmr, appOrigin, appId, enableHttps, certFile, keyFile } =
201
201
  options;
202
+ const host = "localhost";
202
203
 
203
204
  let devServer: DevServerConfiguration = {
204
205
  server: enableHttps
@@ -210,7 +211,8 @@ function buildDevConfig(options?: DevConfig): {
210
211
  },
211
212
  }
212
213
  : "http",
213
- host: "localhost",
214
+ host,
215
+ allowedHosts: [host],
214
216
  historyApiFallback: {
215
217
  rewrites: [{ from: /^\/$/, to: "/app.js" }],
216
218
  },
@@ -227,7 +229,7 @@ function buildDevConfig(options?: DevConfig): {
227
229
  if (enableHmr && appOrigin) {
228
230
  devServer = {
229
231
  ...devServer,
230
- allowedHosts: new URL(appOrigin).hostname,
232
+ allowedHosts: [host, new URL(appOrigin).hostname],
231
233
  headers: {
232
234
  "Access-Control-Allow-Origin": appOrigin,
233
235
  "Access-Control-Allow-Credentials": "true",
@@ -245,7 +247,7 @@ function buildDevConfig(options?: DevConfig): {
245
247
  const appDomain = `app-${appId.toLowerCase().trim()}.canva-apps.com`;
246
248
  devServer = {
247
249
  ...devServer,
248
- allowedHosts: appDomain,
250
+ allowedHosts: [host, appDomain],
249
251
  headers: {
250
252
  "Access-Control-Allow-Origin": `https://${appDomain}`,
251
253
  "Access-Control-Allow-Credentials": "true",