@tiptap/cli 3.3.8 → 3.3.9
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/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import vo from"path";import{Command as bo}from"commander";import{z as ie}from"zod";import{createPrompt as Nn,useState as Ge,useKeypress as jn,usePrefix as On,usePagination as _n,useRef as It,useMemo as He,useEffect as Un,isBackspaceKey as Dn,isEnterKey as Fn,isUpKey as Xe,isDownKey as Ct,isNumberKey as Ln,Separator as Se,ValidationError as Mn,makeTheme as Bn}from"@inquirer/core";import At from"yoctocolors-cjs";import Wn from"@inquirer/figures";import zn from"ansi-escapes";import{Separator as ws}from"@inquirer/core";var Kn={icon:{cursor:Wn.pointer},style:{disabled:e=>At.dim(`- ${e}`),description:e=>At.cyan(e)},indexMode:"hidden"};function ae(e){return!Se.isSeparator(e)&&!e.disabled}function Vn(e){return e.map(t=>{if(Se.isSeparator(t))return t;if(typeof t=="string")return{value:t,name:t,short:t,disabled:!1};let n=t.name??String(t.value),r={value:t.value,name:n,short:t.short??n,disabled:t.disabled??!1};return t.description&&(r.description=t.description),r})}var we=Nn((e,t)=>{let{loop:n=!0,pageSize:r=7,instructions:s}=e,i=It(!0),c=Bn(Kn,e.theme),[p,l]=Ge("idle"),x=On({status:p,theme:c}),h=It(),[w,u]=Ge(!0),f=He(()=>Vn(e.choices),[e.choices]),k=He(()=>{let y=f.findIndex(ae),v=f.findLastIndex(ae);if(y===-1)throw new Mn("[select prompt] No selectable choices. All choices are disabled.");return{first:y,last:v}},[f]),P=He(()=>"default"in e?f.findIndex(y=>ae(y)&&y.value===e.default):-1,[e.default,f]),[$,S]=Ge(P===-1?k.first:P),C=f[$];jn((y,v)=>{if(clearTimeout(h.current),u(!1),Fn(y))l("done"),t(C.value);else if(Xe(y)||Ct(y)){if(v.clearLine(0),n||Xe(y)&&$!==k.first||Ct(y)&&$!==k.last){let b=Xe(y)?-1:1,F=$;do F=(F+b+f.length)%f.length;while(!ae(f[F]));S(F)}}else if(Ln(y)&&!Number.isNaN(Number(v.line))){let b=Number(v.line)-1,F=f[b];F!=null&&ae(F)&&S(b),h.current=setTimeout(()=>{v.clearLine(0)},700)}else if(Dn(y))v.clearLine(0);else{let b=v.line.toLowerCase(),F=f.findIndex(Q=>Se.isSeparator(Q)||!ae(Q)?!1:Q.name.toLowerCase().startsWith(b));F!==-1&&S(F),h.current=setTimeout(()=>{v.clearLine(0)},700)}}),Un(()=>()=>{clearTimeout(h.current)},[]);let _=c.style.message(e.message,p),U="",m="";typeof s=="string"&&(U=s);let d=_n({items:f,active:$,renderItem({item:y,isActive:v,index:b}){if(Se.isSeparator(y))return` ${y.separator}`;let F=c.indexMode==="number"?`${b+1}. `:"";if(y.disabled){let Ye=typeof y.disabled=="string"?y.disabled:"(disabled)";return c.style.disabled(`${F}${y.name} ${Ye}`)}let Q=v?c.style.highlight:Ye=>Ye,$n=v?c.icon.cursor:" ";return Q(`${$n} ${F}${y.name}`)},pageSize:r,loop:n});if(p==="done")return`${x} ${_} ${c.style.answer(C.short)}`;let T=C.description?`
|
|
3
3
|
${c.style.description(C.description)}`:"";return`${[x,_,U].filter(Boolean).join(" ")}
|
|
4
|
-
${d}${m}${T}${zn.cursorHide}`});import{Separator as he,input as So,confirm as rl,checkbox as Io}from"@inquirer/prompts";import or from"path";import M from"path";import{createMatchPath as Jn}from"tsconfig-paths";async function O(e,t){return Jn(t.absoluteBaseUrl,t.paths)(e,void 0,()=>!0,[".ts",".tsx"])}import{cosmiconfig as Zn}from"cosmiconfig";import Qn from"fast-glob";import{loadConfig as er}from"tsconfig-paths";import{z as A}from"zod";import Rt from"path";var g={"next-app":{name:"next-app",label:"Next.js",links:{installation:"https://tiptap.dev/docs/ui-components/install/next"}},"next-pages":{name:"next-pages",label:"Next.js",links:{installation:"https://tiptap.dev/docs/ui-components/install/next"}},"react-router":{name:"react-router",label:"React Router",links:{installation:"https://tiptap.dev/docs/ui-components/install/react-router"}},vite:{name:"vite",label:"Vite",links:{installation:"https://tiptap.dev/docs/ui-components/install/vite"}},astro:{name:"astro",label:"Astro",links:{installation:"https://tiptap.dev/docs/ui-components/install/astro"}},laravel:{name:"laravel",label:"Laravel",links:{installation:"https://tiptap.dev/docs/ui-components/install/laravel"}},"tanstack-start":{name:"tanstack-start",label:"TanStack Start",links:{installation:"https://tiptap.dev/docs/ui-components/install/tanstack"}},manual:{name:"manual",label:"Manual",links:{installation:"https://tiptap.dev/docs/ui-components/install/next"}}};import qn from"path";import Yn from"fs-extra";function Et(e="",t=!0){let n=qn.join(e,"package.json");return Yn.readJSONSync(n,{throws:t})}import Nt from"fast-glob";import $t from"fs-extra";import{loadConfig as Gn}from"tsconfig-paths";var jt=["**/node_modules/**",".next","public","dist","build"];async function D(e){let[t,n,r,s,i]=await Promise.all([Nt.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:jt}),$t.pathExists(Rt.resolve(e,"src")),Xn(e),Hn(e),Et(e,!1)]),c=await $t.pathExists(Rt.resolve(e,`${n?"src/":""}app`)),p={framework:g.manual,isSrcDir:n,isRSC:!1,isTsx:r,aliasPrefix:s};return t.find(l=>l.startsWith("next.config."))?.length?(p.framework=c?g["next-app"]:g["next-pages"],p.isRSC=c,p):t.find(l=>l.startsWith("astro.config."))?.length?(p.framework=g.astro,p):t.find(l=>l.startsWith("composer.json"))?.length?(p.framework=g.laravel,p):t.find(l=>l.startsWith("app.config."))?.length&&[...Object.keys(i?.dependencies??{}),...Object.keys(i?.devDependencies??{})].find(l=>l.startsWith("@tanstack/start"))?(p.framework=g["tanstack-start"],p):t.find(l=>l.startsWith("react-router.config."))?.length?(p.framework=g["react-router"],p):(t.find(l=>l.startsWith("vite.config."))?.length&&(p.framework=g.vite),p)}async function Hn(e){let t=await Gn(e);if(t?.resultType==="failed"||!Object.entries(t?.paths).length)return null;for(let[n,r]of Object.entries(t.paths))if(r.includes("./*")||r.includes("./src/*")||r.includes("./app/*")||r.includes("./resources/js/*"))return n.replace(/\/\*$/,"")??null;return Object.keys(t?.paths)?.[0].replace(/\/\*$/,"")??null}async function Xn(e){return(await Nt.glob("tsconfig.*",{cwd:e,deep:1,ignore:jt})).length>0}async function Ot(e,t=null){let[n,r]=await Promise.all([q(e),t?Promise.resolve(t):D(e)]);if(n)return n;if(!r)return null;let s={rsc:r.isRSC,tsx:r.isTsx,aliases:{components:`${r.aliasPrefix}/components`,contexts:`${r.aliasPrefix}/contexts`,hooks:`${r.aliasPrefix}/hooks`,tiptapIcons:`${r.aliasPrefix}/components/tiptap-icons`,lib:`${r.aliasPrefix}/lib`,tiptapExtensions:`${r.aliasPrefix}/components/tiptap-extensions`,tiptapNodes:`${r.aliasPrefix}/components/tiptap-nodes`,tiptapUi:`${r.aliasPrefix}/components/tiptap-ui`,tiptapUiPrimitives:`${r.aliasPrefix}/components/tiptap-ui-primitives`,tiptapUiUtils:`${r.aliasPrefix}/components/tiptap-ui-utils`,styles:`${r.aliasPrefix}/styles`}};return await ee(e,s)}var Ze="@/components",Qe="@/contexts",et="@/hooks",tt="@/components/tiptap-icons",Ce="@/lib",nt="@/components/tiptap-extension",rt="@/components/tiptap-node",ot="@/components/tiptap-ui",st="@/components/tiptap-ui-primitive",it="@/components/tiptap-ui-utils",at="@/styles",tr=Zn("components",{searchPlaces:["components.json"]}),te=A.object({rsc:A.coerce.boolean().default(!1),tsx:A.coerce.boolean().default(!0),aliases:A.object({components:A.string(),contexts:A.string().optional(),hooks:A.string().optional(),tiptapIcons:A.string().optional(),lib:A.string().optional(),tiptapExtensions:A.string().optional(),tiptapNodes:A.string().optional(),tiptapUi:A.string().optional(),tiptapUiPrimitives:A.string().optional(),tiptapUiUtils:A.string().optional(),styles:A.string().optional()})}),_t=te.extend({resolvedPaths:A.object({cwd:A.string(),components:A.string(),contexts:A.string(),hooks:A.string(),tiptapIcons:A.string(),lib:A.string(),tiptapExtensions:A.string(),tiptapNodes:A.string(),tiptapUi:A.string(),tiptapUiPrimitives:A.string(),tiptapUiUtils:A.string(),styles:A.string()})}),nr=A.record(_t);async function q(e){let t=await tr.search(e),n=await D(e),r={components:Ze,contexts:Qe,hooks:et,tiptapIcons:tt,lib:Ce,tiptapExtensions:nt,tiptapNodes:rt,tiptapUi:ot,tiptapUiPrimitives:st,tiptapUiUtils:it,styles:at},s=(c,p)=>Object.fromEntries(Object.entries(c).map(([l,x])=>[l,x.replace(/^@/,p)])),i;if(t){let c={...r,...t.config.aliases};n?.aliasPrefix?i=te.parse({...t.config,aliases:s(c,n.aliasPrefix)}):i=te.parse({...t.config,aliases:c})}else{let c=r;n?.aliasPrefix&&(c=s(c,n.aliasPrefix)),i=te.parse({rsc:n?.isRSC??!1,tsx:n?.isTsx??!0,aliases:c})}return await ee(e,i)}async function ee(e,t){let n=await er(e);if(n.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${n.message??""}`.trim());return _t.parse({...t,resolvedPaths:{cwd:e,components:await O(t.aliases.components,n),contexts:t.aliases.contexts?await O(t.aliases.contexts,n):M.resolve(await O(t.aliases.components,n)??e,"..","contexts"),hooks:t.aliases.hooks?await O(t.aliases.hooks,n):M.resolve(await O(t.aliases.components,n)??e,"..","hooks"),tiptapIcons:t.aliases.tiptapIcons?await O(t.aliases.tiptapIcons,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-icons"),lib:t.aliases.lib?await O(t.aliases.lib,n):M.resolve(await O(Ce,n)??e,".."),tiptapExtensions:t.aliases.tiptapExtensions?await O(t.aliases.tiptapExtensions,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-extension"),tiptapNodes:t.aliases.tiptapNodes?await O(t.aliases.tiptapNodes,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-node"),tiptapUi:t.aliases.tiptapUi?await O(t.aliases.tiptapUi,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-ui"),tiptapUiPrimitives:t.aliases.tiptapUiPrimitives?await O(t.aliases.tiptapUiPrimitives,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-ui-primitive"),tiptapUiUtils:t.aliases.tiptapUiUtils?await O(t.aliases.tiptapUiUtils,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-ui-utils"),styles:t.aliases.styles?await O(t.aliases.styles,n):M.resolve(e,"styles")}})}async function Ut(e){let t={};for(let r of Object.keys(e.aliases)){if(!rr(r,e))continue;let s=e.resolvedPaths[r],i=await ct(e.resolvedPaths.cwd,s);if(!i){t[r]=e;continue}t[r]=await q(i)}let n=nr.safeParse(t);return n.success?n.data:null}async function ct(e,t){let n=lt(e,t),r=M.relative(n,t),i=(await Qn.glob("**/package.json",{cwd:n,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(c=>M.dirname(c)).find(c=>r.startsWith(c));return i?M.join(n,i):null}function rr(e,t){return Object.keys(t.resolvedPaths).includes(e)}function lt(e,t){let n=e.split(M.sep),r=t.split(M.sep),s=[];for(let i=0;i<Math.min(n.length,r.length)&&n[i]===r[i];i++)s.push(n[i]);return s.join(M.sep)}import K from"chalk";var a={cyan:K.cyan,magenta:K.magenta,gray:K.gray,white:K.white,yellow:K.yellow,green:K.green,red:K.red,blue:K.blue,reset:K.reset,dim:K.dim,bold:K.bold,whiteBold:K.white.bold};var xe=e=>e.map(String).join(" "),o={error(...e){console.log(a.red(xe(e)))},warn(...e){console.log(a.yellow(xe(e)))},info(...e){console.log(a.cyan(xe(e)))},success(...e){console.log(a.green(xe(e)))},log(...e){console.log(xe(e))},break(){console.log("")}};import Dt from"fs-extra";async function Ft(e){let t={};if(!Dt.existsSync(e.cwd)||!Dt.existsSync(or.resolve(e.cwd,"package.json")))return t["1"]=!0,{errors:t,config:null};try{let n=await q(e.cwd);return{errors:t,config:n}}catch(n){console.log("[preFlightAdd] - ",n),o.break(),o.error(`Make sure you are in a valid project directory. Run ${a.cyan("npx @tiptap/cli init")} to create a new project.`),o.break(),process.exit(0)}}import le from"path";import{z as sr}from"zod";function j(e){if(o.error("Something went wrong. Please check the error below for more details."),o.error("If the problem persists, please open an issue on GitHub."),o.error(""),typeof e=="string"&&(o.error(e),o.break(),process.exit(0)),e instanceof sr.ZodError){o.error("Validation failed:");for(let[t,n]of Object.entries(e.flatten().fieldErrors))o.error(`- ${a.cyan(t)}: ${n}`);o.break(),process.exit(0)}e instanceof Error&&(o.error(e.message),o.break(),process.exit(0)),o.break(),process.exit(0)}import{z as R}from"zod";var Lt=R.enum(["registry:context","registry:extension","registry:hook","registry:icon","registry:lib","registry:node","registry:template","registry:ui-primitive","registry:ui","registry:ui-utils","registry:page","registry:component","registry:style","registry:asset"]),Ae=["start","team","growth","enterprise"],ir=["open-source","light"],ar=[...Ae,...ir],cr=R.array(R.enum(ar)).default([]),Mt=R.object({path:R.string(),content:R.string().optional(),type:Lt,target:R.string().optional()}),re=R.object({name:R.string(),type:Lt,description:R.string().optional(),dependencies:R.array(R.string()).optional(),devDependencies:R.array(R.string()).optional(),registryDependencies:R.array(R.string()).optional(),files:R.array(Mt).optional(),meta:R.record(R.string(),R.any()).optional(),plans:cr.optional(),hide:R.boolean().default(!1).optional(),isNew:R.boolean().default(!1).optional()}),si=R.array(re),Bt=R.array(re.extend({files:R.array(R.union([R.string(),Mt])).optional()})),Wt=re.pick({dependencies:!0,devDependencies:!0,files:!0});import pt from"deepmerge";import{HttpsProxyAgent as pr}from"https-proxy-agent";import mt from"node-fetch";import{z as mr}from"zod";import lr from"conf";var Ee=class{config;logger;constructor(t){this.logger=t,this.config=new lr({projectName:"tiptap-cli",clearInvalidConfig:!0,schema:{bearerToken:{type:"string"},authToken:{type:"string"},email:{type:"string"},loginDate:{type:"string"},plans:{type:"array",items:{type:"string"},default:[]},licenseAccepted:{type:"boolean"},licenseAcceptedDate:{type:"string"}}})}safeError(t,n){let r=n instanceof Error?`${n.name}: ${n.message}`:String(n??"Unknown error");try{this.logger.error(`${t}: ${r}`)}catch{}}setBearerToken(t,n){try{this.config.set("bearerToken",t),this.config.set("loginDate",new Date().toISOString()),n?.email&&this.config.set("email",n.email),n?.plans&&this.config.set("plans",n.plans)}catch(r){this.safeError("Failed to store bearer token",r)}}getBearerToken(){try{return this.config.get("bearerToken")??null}catch(t){return this.safeError("Failed to retrieve bearer token",t),null}}setAuthToken(t,n){try{this.config.set("authToken",t),this.config.set("loginDate",new Date().toISOString()),n?.email&&this.config.set("email",n.email),n?.plans&&this.config.set("plans",n.plans)}catch(r){this.safeError("Failed to store auth token",r)}}getAuthToken(){try{return this.config.get("authToken")??null}catch(t){return this.safeError("Failed to retrieve auth token",t),null}}getUserInfo(){return{email:this.config.get("email"),plans:this.config.get("plans")??[],loginDate:this.config.get("loginDate")}}getTokenExpiration(){let t=this.config.get("loginDate");if(!t)return null;let n=new Date(t);return n.setMonth(n.getMonth()+11),n.toISOString()}isValidToken(){let t=this.getBearerToken(),n=this.getAuthToken();if(!t&&!n)return!1;let r=this.getTokenExpiration();return r&&new Date(r)<=new Date?(this.clear(),!1):!0}clear(){try{this.config.clear()}catch(t){this.safeError("Failed to clear token storage",t)}}hasPlan(t){let n=this.config.get("plans")??[];return Array.isArray(n)&&n.includes(t)}setLicenseAccepted(){try{this.config.set("licenseAccepted",!0),this.config.set("licenseAcceptedDate",new Date().toISOString())}catch(t){this.safeError("Failed to store license acceptance",t)}}hasAcceptedLicense(){try{return this.config.get("licenseAccepted")??!1}catch(t){return this.safeError("Failed to retrieve license acceptance",t),!1}}clearLicenseAcceptance(){try{this.config.delete("licenseAccepted"),this.config.delete("licenseAcceptedDate")}catch(t){this.safeError("Failed to clear license acceptance",t)}}};var N=new Ee(o);var H="https://template.tiptap.dev",dt=process.env.https_proxy?new pr(process.env.https_proxy):void 0;async function X(){try{let[e]=await Re(["index.json"]);return Bt.parse(e)}catch(e){o.error(`
|
|
4
|
+
${d}${m}${T}${zn.cursorHide}`});import{Separator as he,input as So,confirm as rl,checkbox as Io}from"@inquirer/prompts";import or from"path";import M from"path";import{createMatchPath as Jn}from"tsconfig-paths";async function O(e,t){return Jn(t.absoluteBaseUrl,t.paths)(e,void 0,()=>!0,[".ts",".tsx"])}import{cosmiconfig as Zn}from"cosmiconfig";import Qn from"fast-glob";import{loadConfig as er}from"tsconfig-paths";import{z as A}from"zod";import Rt from"path";var g={"next-app":{name:"next-app",label:"Next.js",links:{installation:"https://tiptap.dev/docs/ui-components/install/next"}},"next-pages":{name:"next-pages",label:"Next.js",links:{installation:"https://tiptap.dev/docs/ui-components/install/next"}},"react-router":{name:"react-router",label:"React Router",links:{installation:"https://tiptap.dev/docs/ui-components/install/react-router"}},vite:{name:"vite",label:"Vite",links:{installation:"https://tiptap.dev/docs/ui-components/install/vite"}},astro:{name:"astro",label:"Astro",links:{installation:"https://tiptap.dev/docs/ui-components/install/astro"}},laravel:{name:"laravel",label:"Laravel",links:{installation:"https://tiptap.dev/docs/ui-components/install/laravel"}},"tanstack-start":{name:"tanstack-start",label:"TanStack Start",links:{installation:"https://tiptap.dev/docs/ui-components/install/tanstack"}},manual:{name:"manual",label:"Manual",links:{installation:"https://tiptap.dev/docs/ui-components/install/next"}}};import qn from"path";import Yn from"fs-extra";function Et(e="",t=!0){let n=qn.join(e,"package.json");return Yn.readJSONSync(n,{throws:t})}import Nt from"fast-glob";import $t from"fs-extra";import{loadConfig as Gn}from"tsconfig-paths";var jt=["**/node_modules/**",".next","public","dist","build"];async function D(e){let[t,n,r,s,i]=await Promise.all([Nt.glob("**/{next,vite,astro,app}.config.*|gatsby-config.*|composer.json|react-router.config.*",{cwd:e,deep:3,ignore:jt}),$t.pathExists(Rt.resolve(e,"src")),Xn(e),Hn(e),Et(e,!1)]),c=await $t.pathExists(Rt.resolve(e,`${n?"src/":""}app`)),p={framework:g.manual,isSrcDir:n,isRSC:!1,isTsx:r,aliasPrefix:s};return t.find(l=>l.startsWith("next.config."))?.length?(p.framework=c?g["next-app"]:g["next-pages"],p.isRSC=c,p):t.find(l=>l.startsWith("astro.config."))?.length?(p.framework=g.astro,p):t.find(l=>l.startsWith("composer.json"))?.length?(p.framework=g.laravel,p):t.find(l=>l.startsWith("app.config."))?.length&&[...Object.keys(i?.dependencies??{}),...Object.keys(i?.devDependencies??{})].find(l=>l.startsWith("@tanstack/start"))?(p.framework=g["tanstack-start"],p):t.find(l=>l.startsWith("react-router.config."))?.length?(p.framework=g["react-router"],p):(t.find(l=>l.startsWith("vite.config."))?.length&&(p.framework=g.vite),p)}async function Hn(e){let t=await Gn(e);if(t?.resultType==="failed"||!Object.entries(t?.paths).length)return null;for(let[n,r]of Object.entries(t.paths))if(r.includes("./*")||r.includes("./src/*")||r.includes("./app/*")||r.includes("./resources/js/*"))return n.replace(/\/\*$/,"")??null;return Object.keys(t?.paths)?.[0].replace(/\/\*$/,"")??null}async function Xn(e){return(await Nt.glob("tsconfig.*",{cwd:e,deep:1,ignore:jt})).length>0}async function Ot(e,t=null){let[n,r]=await Promise.all([q(e),t?Promise.resolve(t):D(e)]);if(n)return n;if(!r)return null;let s={rsc:r.isRSC,tsx:r.isTsx,aliases:{components:`${r.aliasPrefix}/components`,contexts:`${r.aliasPrefix}/contexts`,hooks:`${r.aliasPrefix}/hooks`,tiptapIcons:`${r.aliasPrefix}/components/tiptap-icons`,lib:`${r.aliasPrefix}/lib`,tiptapExtensions:`${r.aliasPrefix}/components/tiptap-extensions`,tiptapNodes:`${r.aliasPrefix}/components/tiptap-nodes`,tiptapUi:`${r.aliasPrefix}/components/tiptap-ui`,tiptapUiPrimitives:`${r.aliasPrefix}/components/tiptap-ui-primitives`,tiptapUiUtils:`${r.aliasPrefix}/components/tiptap-ui-utils`,styles:`${r.aliasPrefix}/styles`}};return await ee(e,s)}var Ze="@/components",Qe="@/contexts",et="@/hooks",tt="@/components/tiptap-icons",Ce="@/lib",nt="@/components/tiptap-extension",rt="@/components/tiptap-node",ot="@/components/tiptap-ui",st="@/components/tiptap-ui-primitive",it="@/components/tiptap-ui-utils",at="@/styles",tr=Zn("components",{searchPlaces:["components.json"]}),te=A.object({rsc:A.coerce.boolean().default(!1),tsx:A.coerce.boolean().default(!0),aliases:A.object({components:A.string(),contexts:A.string().optional(),hooks:A.string().optional(),tiptapIcons:A.string().optional(),lib:A.string().optional(),tiptapExtensions:A.string().optional(),tiptapNodes:A.string().optional(),tiptapUi:A.string().optional(),tiptapUiPrimitives:A.string().optional(),tiptapUiUtils:A.string().optional(),styles:A.string().optional()})}),_t=te.extend({resolvedPaths:A.object({cwd:A.string(),components:A.string(),contexts:A.string(),hooks:A.string(),tiptapIcons:A.string(),lib:A.string(),tiptapExtensions:A.string(),tiptapNodes:A.string(),tiptapUi:A.string(),tiptapUiPrimitives:A.string(),tiptapUiUtils:A.string(),styles:A.string()})}),nr=A.record(_t);async function q(e){let t=await tr.search(e),n=await D(e),r={components:Ze,contexts:Qe,hooks:et,tiptapIcons:tt,lib:Ce,tiptapExtensions:nt,tiptapNodes:rt,tiptapUi:ot,tiptapUiPrimitives:st,tiptapUiUtils:it,styles:at},s=(c,p)=>Object.fromEntries(Object.entries(c).map(([l,x])=>[l,x.replace(/^@/,p)])),i;if(t){let c={...r,...t.config.aliases};n?.aliasPrefix?i=te.parse({...t.config,aliases:s(c,n.aliasPrefix)}):i=te.parse({...t.config,aliases:c})}else{let c=r;n?.aliasPrefix&&(c=s(c,n.aliasPrefix)),i=te.parse({rsc:n?.isRSC??!1,tsx:n?.isTsx??!0,aliases:c})}return await ee(e,i)}async function ee(e,t){let n=await er(e);if(n.resultType==="failed")throw new Error(`Failed to load ${t.tsx?"tsconfig":"jsconfig"}.json. ${n.message??""}`.trim());return _t.parse({...t,resolvedPaths:{cwd:e,components:await O(t.aliases.components,n),contexts:t.aliases.contexts?await O(t.aliases.contexts,n):M.resolve(await O(t.aliases.components,n)??e,"..","contexts"),hooks:t.aliases.hooks?await O(t.aliases.hooks,n):M.resolve(await O(t.aliases.components,n)??e,"..","hooks"),tiptapIcons:t.aliases.tiptapIcons?await O(t.aliases.tiptapIcons,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-icons"),lib:t.aliases.lib?await O(t.aliases.lib,n):M.resolve(await O(Ce,n)??e,".."),tiptapExtensions:t.aliases.tiptapExtensions?await O(t.aliases.tiptapExtensions,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-extension"),tiptapNodes:t.aliases.tiptapNodes?await O(t.aliases.tiptapNodes,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-node"),tiptapUi:t.aliases.tiptapUi?await O(t.aliases.tiptapUi,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-ui"),tiptapUiPrimitives:t.aliases.tiptapUiPrimitives?await O(t.aliases.tiptapUiPrimitives,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-ui-primitive"),tiptapUiUtils:t.aliases.tiptapUiUtils?await O(t.aliases.tiptapUiUtils,n):M.resolve(await O(t.aliases.components,n)??e,"tiptap-ui-utils"),styles:t.aliases.styles?await O(t.aliases.styles,n):M.resolve(e,"styles")}})}async function Ut(e){let t={};for(let r of Object.keys(e.aliases)){if(!rr(r,e))continue;let s=e.resolvedPaths[r],i=await ct(e.resolvedPaths.cwd,s);if(!i){t[r]=e;continue}t[r]=await q(i)}let n=nr.safeParse(t);return n.success?n.data:null}async function ct(e,t){let n=lt(e,t),r=M.relative(n,t),i=(await Qn.glob("**/package.json",{cwd:n,deep:3,ignore:["**/node_modules/**","**/dist/**","**/build/**","**/public/**"]})).map(c=>M.dirname(c)).find(c=>r.startsWith(c));return i?M.join(n,i):null}function rr(e,t){return Object.keys(t.resolvedPaths).includes(e)}function lt(e,t){let n=e.split(M.sep),r=t.split(M.sep),s=[];for(let i=0;i<Math.min(n.length,r.length)&&n[i]===r[i];i++)s.push(n[i]);return s.join(M.sep)}import K from"chalk";var a={cyan:K.cyan,magenta:K.magenta,gray:K.gray,white:K.white,yellow:K.yellow,green:K.green,red:K.red,blue:K.blue,reset:K.reset,dim:K.dim,bold:K.bold,whiteBold:K.white.bold};var xe=e=>e.map(String).join(" "),o={error(...e){console.log(a.red(xe(e)))},warn(...e){console.log(a.yellow(xe(e)))},info(...e){console.log(a.cyan(xe(e)))},success(...e){console.log(a.green(xe(e)))},log(...e){console.log(xe(e))},break(){console.log("")}};import Dt from"fs-extra";async function Ft(e){let t={};if(!Dt.existsSync(e.cwd)||!Dt.existsSync(or.resolve(e.cwd,"package.json")))return t["1"]=!0,{errors:t,config:null};try{let n=await q(e.cwd);return{errors:t,config:n}}catch(n){console.log("[preFlightAdd] - ",n),o.break(),o.error(`Make sure you are in a valid project directory. Run ${a.cyan("npx @tiptap/cli init")} to create a new project.`),o.break(),process.exit(0)}}import le from"path";import{z as sr}from"zod";function j(e){if(o.error("Something went wrong. Please check the error below for more details."),o.error("If the problem persists, please open an issue on GitHub."),o.error(""),typeof e=="string"&&(o.error(e),o.break(),process.exit(0)),e instanceof sr.ZodError){o.error("Validation failed:");for(let[t,n]of Object.entries(e.flatten().fieldErrors))o.error(`- ${a.cyan(t)}: ${n}`);o.break(),process.exit(0)}e instanceof Error&&(o.error(e.message),o.break(),process.exit(0)),o.break(),process.exit(0)}import{z as R}from"zod";var Lt=R.enum(["registry:context","registry:extension","registry:hook","registry:icon","registry:lib","registry:node","registry:template","registry:ui-primitive","registry:ui","registry:ui-utils","registry:page","registry:component","registry:style","registry:asset"]),Ae=["start","team","growth","enterprise","business"],ir=["open-source","light"],ar=[...Ae,...ir],cr=R.array(R.enum(ar)).default([]),Mt=R.object({path:R.string(),content:R.string().optional(),type:Lt,target:R.string().optional()}),re=R.object({name:R.string(),type:Lt,description:R.string().optional(),dependencies:R.array(R.string()).optional(),devDependencies:R.array(R.string()).optional(),registryDependencies:R.array(R.string()).optional(),files:R.array(Mt).optional(),meta:R.record(R.string(),R.any()).optional(),plans:cr.optional(),hide:R.boolean().default(!1).optional(),isNew:R.boolean().default(!1).optional()}),si=R.array(re),Bt=R.array(re.extend({files:R.array(R.union([R.string(),Mt])).optional()})),Wt=re.pick({dependencies:!0,devDependencies:!0,files:!0});import pt from"deepmerge";import{HttpsProxyAgent as pr}from"https-proxy-agent";import mt from"node-fetch";import{z as mr}from"zod";import lr from"conf";var Ee=class{config;logger;constructor(t){this.logger=t,this.config=new lr({projectName:"tiptap-cli",clearInvalidConfig:!0,schema:{bearerToken:{type:"string"},authToken:{type:"string"},email:{type:"string"},loginDate:{type:"string"},plans:{type:"array",items:{type:"string"},default:[]},licenseAccepted:{type:"boolean"},licenseAcceptedDate:{type:"string"}}})}safeError(t,n){let r=n instanceof Error?`${n.name}: ${n.message}`:String(n??"Unknown error");try{this.logger.error(`${t}: ${r}`)}catch{}}setBearerToken(t,n){try{this.config.set("bearerToken",t),this.config.set("loginDate",new Date().toISOString()),n?.email&&this.config.set("email",n.email),n?.plans&&this.config.set("plans",n.plans)}catch(r){this.safeError("Failed to store bearer token",r)}}getBearerToken(){try{return this.config.get("bearerToken")??null}catch(t){return this.safeError("Failed to retrieve bearer token",t),null}}setAuthToken(t,n){try{this.config.set("authToken",t),this.config.set("loginDate",new Date().toISOString()),n?.email&&this.config.set("email",n.email),n?.plans&&this.config.set("plans",n.plans)}catch(r){this.safeError("Failed to store auth token",r)}}getAuthToken(){try{return this.config.get("authToken")??null}catch(t){return this.safeError("Failed to retrieve auth token",t),null}}getUserInfo(){return{email:this.config.get("email"),plans:this.config.get("plans")??[],loginDate:this.config.get("loginDate")}}getTokenExpiration(){let t=this.config.get("loginDate");if(!t)return null;let n=new Date(t);return n.setMonth(n.getMonth()+11),n.toISOString()}isValidToken(){let t=this.getBearerToken(),n=this.getAuthToken();if(!t&&!n)return!1;let r=this.getTokenExpiration();return r&&new Date(r)<=new Date?(this.clear(),!1):!0}clear(){try{this.config.clear()}catch(t){this.safeError("Failed to clear token storage",t)}}hasPlan(t){let n=this.config.get("plans")??[];return Array.isArray(n)&&n.includes(t)}setLicenseAccepted(){try{this.config.set("licenseAccepted",!0),this.config.set("licenseAcceptedDate",new Date().toISOString())}catch(t){this.safeError("Failed to store license acceptance",t)}}hasAcceptedLicense(){try{return this.config.get("licenseAccepted")??!1}catch(t){return this.safeError("Failed to retrieve license acceptance",t),!1}}clearLicenseAcceptance(){try{this.config.delete("licenseAccepted"),this.config.delete("licenseAcceptedDate")}catch(t){this.safeError("Failed to clear license acceptance",t)}}};var N=new Ee(o);var H="https://template.tiptap.dev",dt=process.env.https_proxy?new pr(process.env.https_proxy):void 0;async function X(){try{let[e]=await Re(["index.json"]);return Bt.parse(e)}catch(e){o.error(`
|
|
5
5
|
`),j(e)}}function zt(e,t){let n={400:"Bad request",401:"Unauthorized",403:"Forbidden",404:"Not found",500:"Internal server error"},r=t?` at ${a.cyan(t)}`:"";switch(e.status){case 401:return N.clear(),new Error(`You are not authorized to access the component${r}.
|
|
6
6
|
Please run ${a.cyan("@tiptap/cli login")} to log in to your Tiptap Cloud account.`);case 404:return new Error(`The component${r} was not found.
|
|
7
7
|
It may not exist at the registry. Please make sure it is a valid component.`);case 403:return new Error(`You do not have access to the component${r}.
|
|
@@ -342,5 +342,5 @@ The built-in AI tools let you:
|
|
|
342
342
|
|
|
343
343
|
## Extendability
|
|
344
344
|
|
|
345
|
-
This template is designed to grow with your needs. New Tiptap Cloud features will be seamlessly compatible with the same UI system\u2014no rewrites required.`;async function Cn(e,t){let n=Z.join(e,"README.md"),r={"simple-editor":es,"notion-like-editor":ts},s=t&&t in r?r[t]:"";try{s.trim()&&await z.writeFile(n,s,"utf-8")}catch{}}var ss=G.object({cwd:G.string(),components:G.array(G.string()).optional(),silent:G.boolean(),isNewProject:G.boolean(),srcDir:G.boolean().optional(),reactCompiler:G.boolean().optional(),framework:G.string().optional().refine(e=>!e||ye[e],{message:"Invalid framework. Please use 'next' or 'vite'."})}),St=(e,t=!0)=>rs({message:a.reset(e),default:t,theme:{prefix:{done:a.cyan("\u2714"),idle:"?"}}}),En=new ns().name("init").description("initialize your project and install Tiptap UI components as source code").argument("[components...]","the components to add").option("-f, --framework <framework>","the framework to use. (next, vite)").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",!1).option("--src-dir","use the src directory when creating a new project (specific to next).",!1).option("--react-compiler","enable React Compiler when creating a new project (specific to next).",!1).action(async(e,t)=>{try{Ve();let n=ze("Tiptap UI Components","Install UI components or templates as editable source code in your project");Y(n);let r=Ke("What are Tiptap UI Components?",["React UI components that help you develop an editor","They install as source code (not npm packages) in your src/components/","UI components are a foundation for customization rather than a fixed library"]);Y(r),await os({message:a.reset(`Press ${a.cyan("Enter")} to initialize a project...`),theme:{prefix:{done:"",idle:""}}}),o.log("");let s=ss.parse({cwd:An.resolve(t.cwd),isNewProject:!1,components:e,...t}),i=await is(s);if(i?.filesCreated&&i.filesCreated.length>0){let c=i.filesCreated.some(l=>l.includes("notion")),p=i.filesCreated.some(l=>l.includes("simple")&&l.includes("editor"));if(c){o.log(""),o.log(`${a.green("\u2714")} Notion template installed - ${i.filesCreated.length} files added to ${a.cyan("src/components/")}`),o.log("");let l=i.framework||i.projectInfo?.framework;l&&Je(l,i.config)}else if(p){o.log(""),o.log(`${a.green("\u2714")} Simple editor template installed - ${i.filesCreated.length} files added to ${a.cyan("src/components/")}`),o.log("");let l=i.framework||i.projectInfo?.framework;l&&ge(l,i.config)}else o.log(""),o.log(`${a.green("\u2714")} Components installed - ${i.filesCreated.length} files added to ${a.cyan("src/components/")}`),o.log(""),i.filesCreated.some(h=>h.includes("tiptap-templates")||h.includes("tiptap-ui"))&&ge(i?.projectInfo?.framework,i.config),i.selectedComponents?.includes("table-node")&&qe()}o.break()}catch(n){o.break(),j(n)}});async function is(e){let{cwd:t,skipPreflight:n,components:r,silent:s}=e,i={...e},c,p=(S,C,_=[],U)=>({config:S,projectInfo:C,framework:c,selectedComponents:_,filesCreated:U?.filesCreated||[],filesUpdated:U?.filesUpdated||[],filesSkipped:U?.filesSkipped||[],errors:[]}),l;if(n)l=await D(t);else{let S=await Sn(e);if(S.errors["1"]){let{projectPath:_,framework:U}=await In(e);_||process.exit(0),i={...i,cwd:_,isNewProject:!0},c=U,o.log("")}l=S.projectInfo}if(c==="next-monorepo"){let S=An.resolve(i.cwd,"apps/web"),C=await q(S);return p(C,l)}let x=await Ot(i.cwd,l),h=x?await cs(x):await as(await q(i.cwd));o.log("");let w=r||[];if(!w.length){if(!await St("Would you like to add a template or UI components to your project?")){let C=await ee(i.cwd,h);return p(C,l)}if(w=await bt({...i,overwrite:!1},!0),!w.length){let C=await ee(i.cwd,h);return p(C,l)}}let u;try{if(u=await X(),!u)throw new Error("Failed to fetch registry index.")}catch(S){if(S instanceof Error&&S.message.includes("You are not authorized")){let C=w.map(U=>({name:U,plans:["start"]}));if(await fe(C,i.cwd)||(o.error("Authentication failed. Cannot proceed with paid component download."),o.log("You can try again with only free components, or authenticate first."),process.exit(1)),u=await X(),!u)throw new Error("Failed to fetch registry index after authentication.")}else throw S}let f=w.map(S=>{let C=u.find(_=>_.name===S);return{name:S,plans:C?.plans||[]}});await fe(f,i.cwd)||(o.error("Authentication failed. Cannot proceed with paid component download."),o.log("You can try again with only free components, or authenticate first."),process.exit(1));let P=await ee(i.cwd,h),$=await Ue(w,P,{overwrite:!1,silent:s,isNewProject:i.isNewProject||l?.framework.name==="next-app"});return p(P,l,w,$||{filesCreated:[],filesUpdated:[],filesSkipped:[]})}async function as(e=null){o.log(""),o.log(a.cyan("Project Configuration")),o.log("");let t=await St(`Would you like to use ${a.cyan("TypeScript")} (recommended)?`,e?.tsx??!0),n=await St(`Are you using ${a.cyan("React Server Components")}?`,e?.rsc??!0);return te.parse({rsc:n,tsx:t,aliases:{components:Ze,contexts:Qe,hooks:et,tiptapIcons:tt,lib:Ce,tiptapExtensions:nt,tiptapNodes:rt,tiptapUi:ot,tiptapUiPrimitives:st,tiptapUiUtils:it,styles:at}})}async function cs(e){return te.parse({rsc:e?.rsc,tsx:e?.tsx,aliases:e?.aliases})}import{Command as ps}from"commander";var Rn={name:"@tiptap/cli",version:"3.3.
|
|
345
|
+
This template is designed to grow with your needs. New Tiptap Cloud features will be seamlessly compatible with the same UI system\u2014no rewrites required.`;async function Cn(e,t){let n=Z.join(e,"README.md"),r={"simple-editor":es,"notion-like-editor":ts},s=t&&t in r?r[t]:"";try{s.trim()&&await z.writeFile(n,s,"utf-8")}catch{}}var ss=G.object({cwd:G.string(),components:G.array(G.string()).optional(),silent:G.boolean(),isNewProject:G.boolean(),srcDir:G.boolean().optional(),reactCompiler:G.boolean().optional(),framework:G.string().optional().refine(e=>!e||ye[e],{message:"Invalid framework. Please use 'next' or 'vite'."})}),St=(e,t=!0)=>rs({message:a.reset(e),default:t,theme:{prefix:{done:a.cyan("\u2714"),idle:"?"}}}),En=new ns().name("init").description("initialize your project and install Tiptap UI components as source code").argument("[components...]","the components to add").option("-f, --framework <framework>","the framework to use. (next, vite)").option("-c, --cwd <cwd>","the working directory. defaults to the current directory.",process.cwd()).option("-s, --silent","mute output.",!1).option("--src-dir","use the src directory when creating a new project (specific to next).",!1).option("--react-compiler","enable React Compiler when creating a new project (specific to next).",!1).action(async(e,t)=>{try{Ve();let n=ze("Tiptap UI Components","Install UI components or templates as editable source code in your project");Y(n);let r=Ke("What are Tiptap UI Components?",["React UI components that help you develop an editor","They install as source code (not npm packages) in your src/components/","UI components are a foundation for customization rather than a fixed library"]);Y(r),await os({message:a.reset(`Press ${a.cyan("Enter")} to initialize a project...`),theme:{prefix:{done:"",idle:""}}}),o.log("");let s=ss.parse({cwd:An.resolve(t.cwd),isNewProject:!1,components:e,...t}),i=await is(s);if(i?.filesCreated&&i.filesCreated.length>0){let c=i.filesCreated.some(l=>l.includes("notion")),p=i.filesCreated.some(l=>l.includes("simple")&&l.includes("editor"));if(c){o.log(""),o.log(`${a.green("\u2714")} Notion template installed - ${i.filesCreated.length} files added to ${a.cyan("src/components/")}`),o.log("");let l=i.framework||i.projectInfo?.framework;l&&Je(l,i.config)}else if(p){o.log(""),o.log(`${a.green("\u2714")} Simple editor template installed - ${i.filesCreated.length} files added to ${a.cyan("src/components/")}`),o.log("");let l=i.framework||i.projectInfo?.framework;l&&ge(l,i.config)}else o.log(""),o.log(`${a.green("\u2714")} Components installed - ${i.filesCreated.length} files added to ${a.cyan("src/components/")}`),o.log(""),i.filesCreated.some(h=>h.includes("tiptap-templates")||h.includes("tiptap-ui"))&&ge(i?.projectInfo?.framework,i.config),i.selectedComponents?.includes("table-node")&&qe()}o.break()}catch(n){o.break(),j(n)}});async function is(e){let{cwd:t,skipPreflight:n,components:r,silent:s}=e,i={...e},c,p=(S,C,_=[],U)=>({config:S,projectInfo:C,framework:c,selectedComponents:_,filesCreated:U?.filesCreated||[],filesUpdated:U?.filesUpdated||[],filesSkipped:U?.filesSkipped||[],errors:[]}),l;if(n)l=await D(t);else{let S=await Sn(e);if(S.errors["1"]){let{projectPath:_,framework:U}=await In(e);_||process.exit(0),i={...i,cwd:_,isNewProject:!0},c=U,o.log("")}l=S.projectInfo}if(c==="next-monorepo"){let S=An.resolve(i.cwd,"apps/web"),C=await q(S);return p(C,l)}let x=await Ot(i.cwd,l),h=x?await cs(x):await as(await q(i.cwd));o.log("");let w=r||[];if(!w.length){if(!await St("Would you like to add a template or UI components to your project?")){let C=await ee(i.cwd,h);return p(C,l)}if(w=await bt({...i,overwrite:!1},!0),!w.length){let C=await ee(i.cwd,h);return p(C,l)}}let u;try{if(u=await X(),!u)throw new Error("Failed to fetch registry index.")}catch(S){if(S instanceof Error&&S.message.includes("You are not authorized")){let C=w.map(U=>({name:U,plans:["start"]}));if(await fe(C,i.cwd)||(o.error("Authentication failed. Cannot proceed with paid component download."),o.log("You can try again with only free components, or authenticate first."),process.exit(1)),u=await X(),!u)throw new Error("Failed to fetch registry index after authentication.")}else throw S}let f=w.map(S=>{let C=u.find(_=>_.name===S);return{name:S,plans:C?.plans||[]}});await fe(f,i.cwd)||(o.error("Authentication failed. Cannot proceed with paid component download."),o.log("You can try again with only free components, or authenticate first."),process.exit(1));let P=await ee(i.cwd,h),$=await Ue(w,P,{overwrite:!1,silent:s,isNewProject:i.isNewProject||l?.framework.name==="next-app"});return p(P,l,w,$||{filesCreated:[],filesUpdated:[],filesSkipped:[]})}async function as(e=null){o.log(""),o.log(a.cyan("Project Configuration")),o.log("");let t=await St(`Would you like to use ${a.cyan("TypeScript")} (recommended)?`,e?.tsx??!0),n=await St(`Are you using ${a.cyan("React Server Components")}?`,e?.rsc??!0);return te.parse({rsc:n,tsx:t,aliases:{components:Ze,contexts:Qe,hooks:et,tiptapIcons:tt,lib:Ce,tiptapExtensions:nt,tiptapNodes:rt,tiptapUi:ot,tiptapUiPrimitives:st,tiptapUiUtils:it,styles:at}})}async function cs(e){return te.parse({rsc:e?.rsc,tsx:e?.tsx,aliases:e?.aliases})}import{Command as ps}from"commander";var Rn={name:"@tiptap/cli",version:"3.3.9",description:"Tiptap CLI",publishConfig:{access:"public"},author:{name:"tiptap",url:"https://github.com/ueberdosis/tiptap"},files:["dist"],keywords:["cli","components","nextjs","react","templates","tiptap","@tiptap/cli","ui"],license:"SEE LICENSE IN LICENSE.md",type:"module",exports:{".":{types:"./dist/index.d.ts",default:"./dist/index.js"}},bin:"./dist/index.js",scripts:{dev:"tsup --watch",build:"tsup",typecheck:"tsc --noEmit",clean:"rm -rf dist","start:dev":"cross-env REGISTRY_URL=http://localhost:3000 node dist/index.js","start:prod":"cross-env REGISTRY_URL=https://template.tiptap.dev node dist/index.js",start:"node dist/index.js","pub:beta":"pnpm build && pnpm publish --no-git-checks --access public --tag beta","pub:release":"pnpm build && pnpm publish --access public"},dependencies:{"@antfu/ni":"^23.3.1","@babel/core":"^7.28.5","@babel/parser":"^7.28.5","@babel/plugin-transform-typescript":"^7.28.5","@inquirer/core":"^10.3.0","@inquirer/figures":"^1.0.14","@inquirer/prompts":"^7.9.0","@inquirer/type":"^3.0.9","ansi-escapes":"^7.1.1",chalk:"^5.6.2",commander:"^13.1.0",conf:"^14.0.0",cosmiconfig:"^9.0.0",deepmerge:"^4.3.1",execa:"^9.6.0","fast-glob":"^3.3.3","fs-extra":"^11.3.2","https-proxy-agent":"^7.0.6","jsonc-parser":"^3.3.1","node-fetch":"^3.3.2",ora:"^8.2.0",recast:"^0.23.11",sass:"^1.93.2","ts-morph":"^25.0.1","tsconfig-paths":"^4.2.0",yaml:"^2.8.1","yoctocolors-cjs":"^2.1.3",zod:"^3.25.76"},devDependencies:{"@babel/plugin-transform-typescript":"^7.26.5","@types/babel__core":"^7.20.5","@types/conf":"^3.0.3","@types/fs-extra":"^11.0.4","@types/prompts":"^2.4.9","cross-env":"^7.0.3",tsup:"^8.5.0","type-fest":"^4.41.0"}};process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function ms(){let e=new ps().name("tiptap").description("add components and dependencies to your project").version(Rn.version||"1.0.0","-v, --version","display the CLI version number");e.addCommand(En).addCommand(Tn).addCommand(Pn).addCommand(mn).addCommand(un).addCommand(dn).addCommand(fn),e.parse()}ms();
|
|
346
346
|
//# sourceMappingURL=index.js.map
|