create-vitnode-app 0.0.10-canary.8 → 0.0.10-canary.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.cjs
CHANGED
|
@@ -24,7 +24,7 @@ Expecting one of '${i.join("', '")}'`);let r=`${e}Help`;return this.on(r,s=>{let
|
|
|
24
24
|
`),process.exit(1))},Tt=async t=>{let e=t.opts(),n={packageManager:e.packageManager,eslint:e.eslint,install:!e.skipInstall,docker:e.docker};if(!e.packageManager){let i=await St(),r=U.default.blue("package manager"),{packageManager:s}=await(0,Y.default)({onState:R,name:"packageManager",type:"select",message:`Which ${r} do you want to use?`,initial:e.packageManager,choices:[{title:`npm${i.npm?`@${i.npm}`:""}`,value:"npm",disabled:!i.npm},{title:`pnpm${i.pnpm?`@${i.pnpm}`:""}`,value:"pnpm",disabled:!i.pnpm}]});n={...n,packageManager:`${s}@${i[s]}`}}if(e.eslint===void 0){let i=U.default.blue("ESLint"),{eslint:r}=await(0,Y.default)({onState:R,type:"toggle",name:"eslint",message:`Would you like to use ${i}?`,initial:e.eslint?"Yes":"No",active:"Yes",inactive:"No"});n={...n,eslint:!!r}}if(e.docker===void 0){let i=U.default.blue("Dockerfile & Docker Compose"),{docker:r}=await(0,Y.default)({onState:R,type:"toggle",name:"docker",message:`Would you like to create ${i}?`,initial:e.i18nRouting?"Yes":"No",active:"Yes",inactive:"No"});n={...n,docker:!!r}}if(e.skipInstall===void 0){let i=U.default.blue("Install dependencies"),{install:r}=await(0,Y.default)({onState:R,type:"toggle",name:"install",message:`Would you like to ${i}?`,initial:e.eslint?"Yes":"No",active:"Yes",inactive:"No"});n={...n,install:!!r}}return n};var re=require("fs"),kt=require("path"),Se=p(require("picocolors"),1);function se(t,e){let n=[".DS_Store",".git",".gitattributes",".gitignore",".gitlab-ci.yml",".hg",".hgcheck",".hgignore",".idea",".npmignore",".travis.yml","LICENSE","Thumbs.db","docs","mkdocs.yml","npm-debug.log","yarn-debug.log","yarn-error.log","yarnrc.yml",".yarn"],i=(0,re.readdirSync)(t).filter(r=>!n.includes(r)&&!r.endsWith(".iml"));if(i.length>0){console.log(`The directory ${Se.default.green(e)} contains files that could conflict:
|
|
25
25
|
`);for(let r of i)try{(0,re.lstatSync)((0,kt.join)(t,r)).isDirectory()?console.log(`${Se.default.blue(r)}/`):console.log(r)}catch{console.log(r)}return console.log(`
|
|
26
26
|
Either try using a new directory name, or remove the files listed above.
|
|
27
|
-
`),!1}return!0}var $t=require("constants"),Pt=require("fs/promises");async function Nt(t){try{return await(0,Pt.access)(t,$t.W_OK),!0}catch{return!1}}var It=p(require("validate-npm-package-name"),1),Te=({name:t})=>{let e=(0,It.default)(t);return e.validForNewPackages?{valid:!0}:{valid:!1,problems:[...e.errors??[],...e.warnings??[]]}};var Rt={name:"create-vitnode-app",version:"0.0.10-canary.
|
|
27
|
+
`),!1}return!0}var $t=require("constants"),Pt=require("fs/promises");async function Nt(t){try{return await(0,Pt.access)(t,$t.W_OK),!0}catch{return!1}}var It=p(require("validate-npm-package-name"),1),Te=({name:t})=>{let e=(0,It.default)(t);return e.validForNewPackages?{valid:!0}:{valid:!1,problems:[...e.errors??[],...e.warnings??[]]}};var Rt={name:"create-vitnode-app",version:"0.0.10-canary.8",description:"Create a new VitNode app in seconds.",author:"VitNode Team",license:"MIT",homepage:"https://vitnode.com",repository:{type:"git",url:"git+https://github.com/VitNode/vitnode.git",directory:"packages/create-vitnode-app"},type:"module",bin:{"create-vitnode-app":"dist/index.cjs"},scripts:{lint:"eslint .","lint:fix":"eslint . --fix","build:scripts":"tsup index.ts","dev:script":"tsup index.ts --watch","start:script":"node dist/index.cjs"},keywords:["vitnode","react","next","nest","nextjs","nestjs","typescript","next.js","nest.js"],dependencies:{figlet:"^1.8.0",picocolors:"^1.1.1",prompts:"^2.4.2","validate-npm-package-name":"^6.0.0"},devDependencies:{"@types/cross-spawn":"^6.0.6","@types/figlet":"^1.7.0","@types/node":"^22.9.1","@types/prompts":"^2.4.9","@types/validate-npm-package-name":"^4.0.2",commander:"^12.1.0","cross-spawn":"^7.0.6","eslint-config-typescript-vitnode":"workspace:*",ora:"^8.1.1",tsup:"^8.3.5",typescript:"^5.6.3"}};var C=require("fs"),v=require("path"),oi=require("crypto"),ai=p(require("figlet"),1);var Q=p(require("process"),1);var jt=(t=0)=>e=>`\x1B[${e+t}m`,Vt=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,Mt=(t=0)=>(e,n,i)=>`\x1B[${38+t};2;${e};${n};${i}m`,m={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},Cs=Object.keys(m.modifier),Ni=Object.keys(m.color),Ii=Object.keys(m.bgColor),Es=[...Ni,...Ii];function Ri(){let t=new Map;for(let[e,n]of Object.entries(m)){for(let[i,r]of Object.entries(n))m[i]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},n[i]=m[i],t.set(r[0],r[1]);Object.defineProperty(m,e,{value:n,enumerable:!1})}return Object.defineProperty(m,"codes",{value:t,enumerable:!1}),m.color.close="\x1B[39m",m.bgColor.close="\x1B[49m",m.color.ansi=jt(),m.color.ansi256=Vt(),m.color.ansi16m=Mt(),m.bgColor.ansi=jt(10),m.bgColor.ansi256=Vt(10),m.bgColor.ansi16m=Mt(10),Object.defineProperties(m,{rgbToAnsi256:{value(e,n,i){return e===n&&n===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(n/255*5)+Math.round(i/255*5)},enumerable:!1},hexToRgb:{value(e){let n=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!n)return[0,0,0];let[i]=n;i.length===3&&(i=[...i].map(s=>s+s).join(""));let r=Number.parseInt(i,16);return[r>>16&255,r>>8&255,r&255]},enumerable:!1},hexToAnsi256:{value:e=>m.rgbToAnsi256(...m.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let n,i,r;if(e>=232)n=((e-232)*10+8)/255,i=n,r=n;else{e-=16;let o=e%36;n=Math.floor(e/36)/5,i=Math.floor(o/6)/5,r=o%6/5}let s=Math.max(n,i,r)*2;if(s===0)return 30;let u=30+(Math.round(r)<<2|Math.round(i)<<1|Math.round(n));return s===2&&(u+=60),u},enumerable:!1},rgbToAnsi:{value:(e,n,i)=>m.ansi256ToAnsi(m.rgbToAnsi256(e,n,i)),enumerable:!1},hexToAnsi:{value:e=>m.ansi256ToAnsi(m.hexToAnsi256(e)),enumerable:!1}}),m}var ji=Ri(),y=ji;var oe=p(require("process"),1),Wt=p(require("os"),1),ke=p(require("tty"),1);function B(t,e=globalThis.Deno?globalThis.Deno.args:oe.default.argv){let n=t.startsWith("-")?"":t.length===1?"-":"--",i=e.indexOf(n+t),r=e.indexOf("--");return i!==-1&&(r===-1||i<r)}var{env:d}=oe.default,ue;B("no-color")||B("no-colors")||B("color=false")||B("color=never")?ue=0:(B("color")||B("colors")||B("color=true")||B("color=always"))&&(ue=1);function Vi(){if("FORCE_COLOR"in d)return d.FORCE_COLOR==="true"?1:d.FORCE_COLOR==="false"?0:d.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(d.FORCE_COLOR,10),3)}function Mi(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function Hi(t,{streamIsTTY:e,sniffFlags:n=!0}={}){let i=Vi();i!==void 0&&(ue=i);let r=n?ue:i;if(r===0)return 0;if(n){if(B("color=16m")||B("color=full")||B("color=truecolor"))return 3;if(B("color=256"))return 2}if("TF_BUILD"in d&&"AGENT_NAME"in d)return 1;if(t&&!e&&r===void 0)return 0;let s=r||0;if(d.TERM==="dumb")return s;if(oe.default.platform==="win32"){let u=Wt.default.release().split(".");return Number(u[0])>=10&&Number(u[2])>=10586?Number(u[2])>=14931?3:2:1}if("CI"in d)return"GITHUB_ACTIONS"in d||"GITEA_ACTIONS"in d?3:["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(u=>u in d)||d.CI_NAME==="codeship"?1:s;if("TEAMCITY_VERSION"in d)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(d.TEAMCITY_VERSION)?1:0;if(d.COLORTERM==="truecolor"||d.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in d){let u=Number.parseInt((d.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(d.TERM_PROGRAM){case"iTerm.app":return u>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(d.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(d.TERM)||"COLORTERM"in d?1:s}function Ht(t,e={}){let n=Hi(t,{streamIsTTY:t&&t.isTTY,...e});return Mi(n)}var Wi={stdout:Ht({isTTY:ke.default.isatty(1)}),stderr:Ht({isTTY:ke.default.isatty(2)})},Lt=Wi;function qt(t,e,n){let i=t.indexOf(e);if(i===-1)return t;let r=e.length,s=0,u="";do u+=t.slice(s,i)+e+n,s=i+r,i=t.indexOf(e,s);while(i!==-1);return u+=t.slice(s),u}function Gt(t,e,n,i){let r=0,s="";do{let u=t[i-1]==="\r";s+=t.slice(r,u?i-1:i)+e+(u?`\r
|
|
28
28
|
`:`
|
|
29
29
|
`)+n,r=i+1,i=t.indexOf(`
|
|
30
30
|
`,r)}while(i!==-1);return s+=t.slice(r),s}var{stdout:Ut,stderr:Yt}=Lt,$e=Symbol("GENERATOR"),j=Symbol("STYLER"),z=Symbol("IS_EMPTY"),zt=["ansi","ansi","ansi256","ansi16m"],V=Object.create(null),Li=(t,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let n=Ut?Ut.level:0;t.level=e.level===void 0?n:e.level};var qi=t=>{let e=(...n)=>n.join(" ");return Li(e,t),Object.setPrototypeOf(e,J.prototype),e};function J(t){return qi(t)}Object.setPrototypeOf(J.prototype,Function.prototype);for(let[t,e]of Object.entries(y))V[t]={get(){let n=ae(this,Ne(e.open,e.close,this[j]),this[z]);return Object.defineProperty(this,t,{value:n}),n}};V.visible={get(){let t=ae(this,this[j],!0);return Object.defineProperty(this,"visible",{value:t}),t}};var Pe=(t,e,n,...i)=>t==="rgb"?e==="ansi16m"?y[n].ansi16m(...i):e==="ansi256"?y[n].ansi256(y.rgbToAnsi256(...i)):y[n].ansi(y.rgbToAnsi(...i)):t==="hex"?Pe("rgb",e,n,...y.hexToRgb(...i)):y[n][t](...i),Gi=["rgb","hex","ansi256"];for(let t of Gi){V[t]={get(){let{level:n}=this;return function(...i){let r=Ne(Pe(t,zt[n],"color",...i),y.color.close,this[j]);return ae(this,r,this[z])}}};let e="bg"+t[0].toUpperCase()+t.slice(1);V[e]={get(){let{level:n}=this;return function(...i){let r=Ne(Pe(t,zt[n],"bgColor",...i),y.bgColor.close,this[j]);return ae(this,r,this[z])}}}}var Ui=Object.defineProperties(()=>{},{...V,level:{enumerable:!0,get(){return this[$e].level},set(t){this[$e].level=t}}}),Ne=(t,e,n)=>{let i,r;return n===void 0?(i=t,r=e):(i=n.openAll+t,r=e+n.closeAll),{open:t,close:e,openAll:i,closeAll:r,parent:n}},ae=(t,e,n)=>{let i=(...r)=>Yi(i,r.length===1?""+r[0]:r.join(" "));return Object.setPrototypeOf(i,Ui),i[$e]=t,i[j]=e,i[z]=n,i},Yi=(t,e)=>{if(t.level<=0||!e)return t[z]?"":e;let n=t[j];if(n===void 0)return e;let{openAll:i,closeAll:r}=n;if(e.includes("\x1B"))for(;n!==void 0;)e=qt(e,n.close,n.open),n=n.parent;let s=e.indexOf(`
|
|
@@ -32,7 +32,7 @@ Either try using a new directory name, or remove the files listed above.
|
|
|
32
32
|
${e}`,Qi=Object.getOwnPropertyDescriptor(Function.prototype,"toString"),er=Object.getOwnPropertyDescriptor(Function.prototype.toString,"name"),tr=(t,e,n)=>{let i=n===""?"":`with ${n.trim()}() `,r=Zi.bind(null,i,e.toString());Object.defineProperty(r,"name",er);let{writable:s,enumerable:u,configurable:o}=Qi;Object.defineProperty(t,"toString",{value:r,writable:s,enumerable:u,configurable:o})};function Ie(t,e,{ignoreNonConfigurable:n=!1}={}){let{name:i}=t;for(let r of Reflect.ownKeys(e))Ji(t,e,r,n);return Xi(t,e),tr(t,e,i),t}var De=new WeakMap,Jt=(t,e={})=>{if(typeof t!="function")throw new TypeError("Expected a function");let n,i=0,r=t.displayName||t.name||"<anonymous>",s=function(...u){if(De.set(s,++i),i===1)n=t.apply(this,u),t=void 0;else if(e.throw===!0)throw new Error(`Function \`${r}\` can only be called once`);return n};return Ie(s,t),De.set(s,i),s};Jt.callCount=t=>{if(!De.has(t))throw new Error(`The given function \`${t.name}\` is not wrapped by the \`onetime\` package`);return De.get(t)};var Kt=Jt;var N=[];N.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&N.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&N.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var le=t=>!!t&&typeof t=="object"&&typeof t.removeListener=="function"&&typeof t.emit=="function"&&typeof t.reallyExit=="function"&&typeof t.listeners=="function"&&typeof t.kill=="function"&&typeof t.pid=="number"&&typeof t.on=="function",Re=Symbol.for("signal-exit emitter"),je=globalThis,nr=Object.defineProperty.bind(Object),Ve=class{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(je[Re])return je[Re];nr(je,Re,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(e,n){this.listeners[e].push(n)}removeListener(e,n){let i=this.listeners[e],r=i.indexOf(n);r!==-1&&(r===0&&i.length===1?i.length=0:i.splice(r,1))}emit(e,n,i){if(this.emitted[e])return!1;this.emitted[e]=!0;let r=!1;for(let s of this.listeners[e])r=s(n,i)===!0||r;return e==="exit"&&(r=this.emit("afterExit",n,i)||r),r}},ce=class{},ir=t=>({onExit(e,n){return t.onExit(e,n)},load(){return t.load()},unload(){return t.unload()}}),Me=class extends ce{onExit(){return()=>{}}load(){}unload(){}},He=class extends ce{#u=We.platform==="win32"?"SIGINT":"SIGHUP";#n=new Ve;#e;#r;#h;#t={};#s=!1;constructor(e){super(),this.#e=e,this.#t={};for(let n of N)this.#t[n]=()=>{let i=this.#e.listeners(n),{count:r}=this.#n,s=e;if(typeof s.__signal_exit_emitter__=="object"&&typeof s.__signal_exit_emitter__.count=="number"&&(r+=s.__signal_exit_emitter__.count),i.length===r){this.unload();let u=this.#n.emit("exit",null,n),o=n==="SIGHUP"?this.#u:n;u||e.kill(e.pid,o)}};this.#h=e.reallyExit,this.#r=e.emit}onExit(e,n){if(!le(this.#e))return()=>{};this.#s===!1&&this.load();let i=n?.alwaysLast?"afterExit":"exit";return this.#n.on(i,e),()=>{this.#n.removeListener(i,e),this.#n.listeners.exit.length===0&&this.#n.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#s){this.#s=!0,this.#n.count+=1;for(let e of N)try{let n=this.#t[e];n&&this.#e.on(e,n)}catch{}this.#e.emit=(e,...n)=>this.#f(e,...n),this.#e.reallyExit=e=>this.#i(e)}}unload(){this.#s&&(this.#s=!1,N.forEach(e=>{let n=this.#t[e];if(!n)throw new Error("Listener not defined for signal: "+e);try{this.#e.removeListener(e,n)}catch{}}),this.#e.emit=this.#r,this.#e.reallyExit=this.#h,this.#n.count-=1)}#i(e){return le(this.#e)?(this.#e.exitCode=e||0,this.#n.emit("exit",this.#e.exitCode,null),this.#h.call(this.#e,this.#e.exitCode)):0}#f(e,...n){let i=this.#r;if(e==="exit"&&le(this.#e)){typeof n[0]=="number"&&(this.#e.exitCode=n[0]);let r=i.call(this.#e,e,...n);return this.#n.emit("exit",this.#e.exitCode,null),r}else return i.call(this.#e,e,...n)}},We=globalThis.process,{onExit:Xt,load:Ps,unload:Ns}=ir(le(We)?new He(We):new Me);var Zt=K.default.stderr.isTTY?K.default.stderr:K.default.stdout.isTTY?K.default.stdout:void 0,rr=Zt?Kt(()=>{Xt(()=>{Zt.write("\x1B[?25h")},{alwaysLast:!0})}):()=>{},Qt=rr;var he=!1,M={};M.show=(t=Le.default.stderr)=>{t.isTTY&&(he=!1,t.write("\x1B[?25h"))};M.hide=(t=Le.default.stderr)=>{t.isTTY&&(Qt(),he=!0,t.write("\x1B[?25l"))};M.toggle=(t,e)=>{t!==void 0&&(he=t),he?M.show(e):M.hide(e)};var qe=M;var ee=p(Ge(),1);var x=p(require("process"),1);function Ue(){return x.default.platform!=="win32"?x.default.env.TERM!=="linux":!!x.default.env.CI||!!x.default.env.WT_SESSION||!!x.default.env.TERMINUS_SUBLIME||x.default.env.ConEmuTask==="{cmd::Cmder}"||x.default.env.TERM_PROGRAM==="Terminus-Sublime"||x.default.env.TERM_PROGRAM==="vscode"||x.default.env.TERM==="xterm-256color"||x.default.env.TERM==="alacritty"||x.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var ur={info:O.blue("\u2139"),success:O.green("\u2714"),warning:O.yellow("\u26A0"),error:O.red("\u2716")},or={info:O.blue("i"),success:O.green("\u221A"),warning:O.yellow("\u203C"),error:O.red("\xD7")},ar=Ue()?ur:or,X=ar;function Ye({onlyFirst:t=!1}={}){let n=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(n,t?void 0:"g")}var Dr=Ye();function Z(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Dr,"")}function rn(t){return t===161||t===164||t===167||t===168||t===170||t===173||t===174||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||t===198||t===208||t===215||t===216||t>=222&&t<=225||t===230||t>=232&&t<=234||t===236||t===237||t===240||t===242||t===243||t>=247&&t<=250||t===252||t===254||t===257||t===273||t===275||t===283||t===294||t===295||t===299||t>=305&&t<=307||t===312||t>=319&&t<=322||t===324||t>=328&&t<=331||t===333||t===338||t===339||t===358||t===359||t===363||t===462||t===464||t===466||t===468||t===470||t===472||t===474||t===476||t===593||t===609||t===708||t===711||t>=713&&t<=715||t===717||t===720||t>=728&&t<=731||t===733||t===735||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||t===1025||t>=1040&&t<=1103||t===1105||t===8208||t>=8211&&t<=8214||t===8216||t===8217||t===8220||t===8221||t>=8224&&t<=8226||t>=8228&&t<=8231||t===8240||t===8242||t===8243||t===8245||t===8251||t===8254||t===8308||t===8319||t>=8321&&t<=8324||t===8364||t===8451||t===8453||t===8457||t===8467||t===8470||t===8481||t===8482||t===8486||t===8491||t===8531||t===8532||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||t===8585||t>=8592&&t<=8601||t===8632||t===8633||t===8658||t===8660||t===8679||t===8704||t===8706||t===8707||t===8711||t===8712||t===8715||t===8719||t===8721||t===8725||t===8730||t>=8733&&t<=8736||t===8739||t===8741||t>=8743&&t<=8748||t===8750||t>=8756&&t<=8759||t===8764||t===8765||t===8776||t===8780||t===8786||t===8800||t===8801||t>=8804&&t<=8807||t===8810||t===8811||t===8814||t===8815||t===8834||t===8835||t===8838||t===8839||t===8853||t===8857||t===8869||t===8895||t===8978||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||t===9632||t===9633||t>=9635&&t<=9641||t===9650||t===9651||t===9654||t===9655||t===9660||t===9661||t===9664||t===9665||t>=9670&&t<=9672||t===9675||t>=9678&&t<=9681||t>=9698&&t<=9701||t===9711||t===9733||t===9734||t===9737||t===9742||t===9743||t===9756||t===9758||t===9792||t===9794||t===9824||t===9825||t>=9827&&t<=9829||t>=9831&&t<=9834||t===9836||t===9837||t===9839||t===9886||t===9887||t===9919||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||t===9955||t===9960||t===9961||t>=9963&&t<=9969||t===9972||t>=9974&&t<=9977||t===9979||t===9980||t===9982||t===9983||t===10045||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||t===65533||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||t===127375||t===127376||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109}function sn(t){return t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510}function un(t){return t>=4352&&t<=4447||t===8986||t===8987||t===9001||t===9002||t>=9193&&t<=9196||t===9200||t===9203||t===9725||t===9726||t===9748||t===9749||t>=9776&&t<=9783||t>=9800&&t<=9811||t===9855||t>=9866&&t<=9871||t===9875||t===9889||t===9898||t===9899||t===9917||t===9918||t===9924||t===9925||t===9934||t===9940||t===9962||t===9970||t===9971||t===9973||t===9978||t===9981||t===9989||t===9994||t===9995||t===10024||t===10060||t===10062||t>=10067&&t<=10069||t===10071||t>=10133&&t<=10135||t===10160||t===10175||t===11035||t===11036||t===11088||t===11093||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12773||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||t===94192||t===94193||t>=94208&&t<=100343||t>=100352&&t<=101589||t>=101631&&t<=101640||t>=110576&&t<=110579||t>=110581&&t<=110587||t===110589||t===110590||t>=110592&&t<=110882||t===110898||t>=110928&&t<=110930||t===110933||t>=110948&&t<=110951||t>=110960&&t<=111355||t>=119552&&t<=119638||t>=119648&&t<=119670||t===126980||t===127183||t===127374||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t===127568||t===127569||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||t===127988||t>=127992&&t<=128062||t===128064||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||t===128378||t===128405||t===128406||t===128420||t>=128507&&t<=128591||t>=128640&&t<=128709||t===128716||t>=128720&&t<=128722||t>=128725&&t<=128727||t>=128732&&t<=128735||t===128747||t===128748||t>=128756&&t<=128764||t>=128992&&t<=129003||t===129008||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129673||t>=129679&&t<=129734||t>=129742&&t<=129756||t>=129759&&t<=129769||t>=129776&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141}function lr(t){if(!Number.isSafeInteger(t))throw new TypeError(`Expected a code point, got \`${typeof t}\`.`)}function on(t,{ambiguousAsWide:e=!1}={}){return lr(t),sn(t)||un(t)||e&&rn(t)?2:1}var an=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;var cr=new Intl.Segmenter,hr=/^\p{Default_Ignorable_Code_Point}$/u;function ze(t,e={}){if(typeof t!="string"||t.length===0)return 0;let{ambiguousIsNarrow:n=!0,countAnsiEscapeCodes:i=!1}=e;if(i||(t=Z(t)),t.length===0)return 0;let r=0,s={ambiguousAsWide:!n};for(let{segment:u}of cr.segment(t)){let o=u.codePointAt(0);if(!(o<=31||o>=127&&o<=159)&&!(o>=8203&&o<=8207||o===65279)&&!(o>=768&&o<=879||o>=6832&&o<=6911||o>=7616&&o<=7679||o>=8400&&o<=8447||o>=65056&&o<=65071)&&!(o>=55296&&o<=57343)&&!(o>=65024&&o<=65039)&&!hr.test(u)){if(an().test(u)){r+=2;continue}r+=on(o,s)}}return r}function Je({stream:t=process.stdout}={}){return!!(t&&t.isTTY&&process.env.TERM!=="dumb"&&!("CI"in process.env))}var Ke=p(require("process"),1);function Xe(){let{env:t}=Ke.default,{TERM:e,TERM_PROGRAM:n}=t;return Ke.default.platform!=="win32"?e!=="linux":!!t.WT_SESSION||!!t.TERMINUS_SUBLIME||t.ConEmuTask==="{cmd::Cmder}"||n==="Terminus-Sublime"||n==="vscode"||e==="xterm-256color"||e==="alacritty"||e==="rxvt-unicode"||e==="rxvt-unicode-256color"||t.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var w=p(require("process"),1),fr=3,Ze=class{#u=0;start(){this.#u++,this.#u===1&&this.#n()}stop(){if(this.#u<=0)throw new Error("`stop` called more times than `start`");this.#u--,this.#u===0&&this.#e()}#n(){w.default.platform==="win32"||!w.default.stdin.isTTY||(w.default.stdin.setRawMode(!0),w.default.stdin.on("data",this.#r),w.default.stdin.resume())}#e(){w.default.stdin.isTTY&&(w.default.stdin.off("data",this.#r),w.default.stdin.pause(),w.default.stdin.setRawMode(!1))}#r(e){e[0]===fr&&w.default.emit("SIGINT")}},mr=new Ze,Qe=mr;var pr=p(Ge(),1),et=class{#u=0;#n=!1;#e=0;#r=-1;#h=0;#t;#s;#i;#f;#p;#D;#l;#c;#d;#o;#a;color;constructor(e){typeof e=="string"&&(e={text:e}),this.#t={color:"cyan",stream:Q.default.stderr,discardStdin:!0,hideCursor:!0,...e},this.color=this.#t.color,this.spinner=this.#t.spinner,this.#p=this.#t.interval,this.#i=this.#t.stream,this.#D=typeof this.#t.isEnabled=="boolean"?this.#t.isEnabled:Je({stream:this.#i}),this.#l=typeof this.#t.isSilent=="boolean"?this.#t.isSilent:!1,this.text=this.#t.text,this.prefixText=this.#t.prefixText,this.suffixText=this.#t.suffixText,this.indent=this.#t.indent,Q.default.env.NODE_ENV==="test"&&(this._stream=this.#i,this._isEnabled=this.#D,Object.defineProperty(this,"_linesToClear",{get(){return this.#u},set(n){this.#u=n}}),Object.defineProperty(this,"_frameIndex",{get(){return this.#r}}),Object.defineProperty(this,"_lineCount",{get(){return this.#e}}))}get indent(){return this.#c}set indent(e=0){if(!(e>=0&&Number.isInteger(e)))throw new Error("The `indent` option must be an integer from 0 and up");this.#c=e,this.#m()}get interval(){return this.#p??this.#s.interval??100}get spinner(){return this.#s}set spinner(e){if(this.#r=-1,this.#p=void 0,typeof e=="object"){if(e.frames===void 0)throw new Error("The given spinner must have a `frames` property");this.#s=e}else if(!Xe())this.#s=ee.default.line;else if(e===void 0)this.#s=ee.default.dots;else if(e!=="default"&&ee.default[e])this.#s=ee.default[e];else throw new Error(`There is no built-in spinner named '${e}'. See https://github.com/sindresorhus/cli-spinners/blob/main/spinners.json for a full list.`)}get text(){return this.#d}set text(e=""){this.#d=e,this.#m()}get prefixText(){return this.#o}set prefixText(e=""){this.#o=e,this.#m()}get suffixText(){return this.#a}set suffixText(e=""){this.#a=e,this.#m()}get isSpinning(){return this.#f!==void 0}#F(e=this.#o,n=" "){return typeof e=="string"&&e!==""?e+n:typeof e=="function"?e()+n:""}#g(e=this.#a,n=" "){return typeof e=="string"&&e!==""?n+e:typeof e=="function"?n+e():""}#m(){let e=this.#i.columns??80,n=this.#F(this.#o,"-"),i=this.#g(this.#a,"-"),r=" ".repeat(this.#c)+n+"--"+this.#d+"--"+i;this.#e=0;for(let s of Z(r).split(`
|
|
33
33
|
`))this.#e+=Math.max(1,Math.ceil(ze(s,{countAnsiEscapeCodes:!0})/e))}get isEnabled(){return this.#D&&!this.#l}set isEnabled(e){if(typeof e!="boolean")throw new TypeError("The `isEnabled` option must be a boolean");this.#D=e}get isSilent(){return this.#l}set isSilent(e){if(typeof e!="boolean")throw new TypeError("The `isSilent` option must be a boolean");this.#l=e}frame(){let e=Date.now();(this.#r===-1||e-this.#h>=this.interval)&&(this.#r=++this.#r%this.#s.frames.length,this.#h=e);let{frames:n}=this.#s,i=n[this.#r];this.color&&(i=O[this.color](i));let r=typeof this.#o=="string"&&this.#o!==""?this.#o+" ":"",s=typeof this.text=="string"?" "+this.text:"",u=typeof this.#a=="string"&&this.#a!==""?" "+this.#a:"";return r+i+s+u}clear(){if(!this.#D||!this.#i.isTTY)return this;this.#i.cursorTo(0);for(let e=0;e<this.#u;e++)e>0&&this.#i.moveCursor(0,-1),this.#i.clearLine(1);return(this.#c||this.lastIndent!==this.#c)&&this.#i.cursorTo(this.#c),this.lastIndent=this.#c,this.#u=0,this}render(){return this.#l?this:(this.clear(),this.#i.write(this.frame()),this.#u=this.#e,this)}start(e){return e&&(this.text=e),this.#l?this:this.#D?this.isSpinning?this:(this.#t.hideCursor&&qe.hide(this.#i),this.#t.discardStdin&&Q.default.stdin.isTTY&&(this.#n=!0,Qe.start()),this.render(),this.#f=setInterval(this.render.bind(this),this.interval),this):(this.text&&this.#i.write(`- ${this.text}
|
|
34
34
|
`),this)}stop(){return this.#D?(clearInterval(this.#f),this.#f=void 0,this.#r=0,this.clear(),this.#t.hideCursor&&qe.show(this.#i),this.#t.discardStdin&&Q.default.stdin.isTTY&&this.#n&&(Qe.stop(),this.#n=!1),this):this}succeed(e){return this.stopAndPersist({symbol:X.success,text:e})}fail(e){return this.stopAndPersist({symbol:X.error,text:e})}warn(e){return this.stopAndPersist({symbol:X.warning,text:e})}info(e){return this.stopAndPersist({symbol:X.info,text:e})}stopAndPersist(e={}){if(this.#l)return this;let n=e.prefixText??this.#o,i=this.#F(n," "),r=e.symbol??" ",s=e.text??this.text,o=typeof s=="string"?(r?" ":"")+s:"",a=e.suffixText??this.#a,D=this.#g(a," "),l=i+r+o+D+`
|
|
35
|
-
`;return this.stop(),this.#i.write(l),this}};function tt(t){return new et(t)}var A=p(require("picocolors"),1);var I=require("fs"),H=require("path"),Dn=({appName:t,root:e,packageManager:n,docker:i,eslint:r})=>{let s=JSON.parse((0,I.readFileSync)((0,H.join)(__dirname,"..","package.json"),"utf-8")),u={name:t,version:"1.0.0",private:!0,scripts:{dev:"turbo dev",build:"turbo build",start:"turbo start",db:"turbo db",...r?{lint:"turbo lint","lint:fix":"turbo lint:fix"}:{},...i?{"docker:dev":`docker compose -f ./docker-compose-dev.yml -p vitnode-dev-${t} up -d`}:{}},overrides:n.startsWith("npm")?{react:"19.0.0-rc.1","react-dom":"19.0.0-rc.1"}:{},pnpm:n.startsWith("pnpm")?{overrides:{"react-is":"19.0.0-rc.1"}}:{},devDependencies:{...r?{"eslint-config-typescript-vitnode":`^${s.version}`}:{},turbo:"^2.3.
|
|
35
|
+
`;return this.stop(),this.#i.write(l),this}};function tt(t){return new et(t)}var A=p(require("picocolors"),1);var I=require("fs"),H=require("path"),Dn=({appName:t,root:e,packageManager:n,docker:i,eslint:r})=>{let s=JSON.parse((0,I.readFileSync)((0,H.join)(__dirname,"..","package.json"),"utf-8")),u={name:t,version:"1.0.0",private:!0,scripts:{"config:init":"turbo config:init",dev:"turbo dev",build:"turbo build",start:"turbo start",db:"turbo db",...r?{lint:"turbo lint","lint:fix":"turbo lint:fix"}:{},...i?{"docker:dev":`docker compose -f ./docker-compose-dev.yml -p vitnode-dev-${t} up -d`,"docker:prod":`docker compose -f ./docker-compose.yml -p vitnode-prod-${t} up -d`}:{}},overrides:n.startsWith("npm")?{react:"19.0.0-rc.1","react-dom":"19.0.0-rc.1"}:{},pnpm:n.startsWith("pnpm")?{overrides:{"react-is":"19.0.0-rc.1"}}:{},devDependencies:{...r?{"eslint-config-typescript-vitnode":`^${s.version}`}:{},turbo:"^2.3.1"},packageManager:n,workspaces:["apps/*"]};(0,I.writeFileSync)((0,H.join)(e,"package.json"),JSON.stringify(u,null,2));let o={name:"frontend",version:"1.0.0",private:!0,scripts:{"config:init":"vitnode-frontend init",dev:"vitnode-frontend dev && next dev --turbo",build:"next build",start:"next start","start:prod":"node server.js",lint:"eslint .","lint:fix":"eslint . --fix"},dependencies:{"@hookform/resolvers":"^3.9.1",geist:"^1.3.1","lucide-react":"^0.460.0",next:"^15.0.3","next-intl":"^3.25.1",react:"19.0.0-rc.1","react-dom":"19.0.0-rc.1","react-hook-form":"^7.53.2",recharts:"^2.13.3",sonner:"^1.7.0","vitnode-frontend":`^${s.version}`,zod:"^3.23.8"},devDependencies:{"@types/node":"^22.9.1","@types/react":"^18.3.12","@types/react-dom":"^18.3.1",autoprefixer:"^10.4.20","eslint-config-typescript-vitnode":`^${s.version}`,postcss:"^8.4.49",shared:"workspace:*",tailwindcss:"^3.4.15",typescript:"^5.6.3","vitnode-shared":`^${s.version}`}};(0,I.writeFileSync)((0,H.join)(e,"apps","frontend","package.json"),JSON.stringify(o,null,2));let a={name:"backend",version:"1.0.0",private:!0,scripts:{"drizzle-kit":"drizzle-kit","config:init":"vitnode-backend init",dev:"pnpm config:init && cross-env NODE_ENV=development nest start -w",build:"nest build",start:"node dist/main",lint:"eslint .","lint:fix":"eslint . --fix",db:"vitnode-backend db"},dependencies:{"@nestjs/common":"^10.4.8","@nestjs/core":"^10.4.8","@nestjs/platform-express":"^10.4.8","@nestjs/schedule":"^4.1.1","@nestjs/throttler":"^6.2.1","@react-email/components":"^0.0.28","class-transformer":"^0.5.1","class-validator":"^0.14.1","drizzle-kit":"^0.28.1","drizzle-orm":"^0.36.4",react:"19.0.0-rc.1","react-dom":"19.0.0-rc.1","reflect-metadata":"^0.2.2","vitnode-backend":`^${s.version}`},devDependencies:{"@nestjs/cli":"^10.4.8","@nestjs/schematics":"^10.2.3","@swc/cli":"^0.5.1","@types/express":"^5.0.0","@types/node":"^22.9.1","@types/react":"^18.3.12","cross-env":"^7.0.3","eslint-config-typescript-vitnode":`^${s.version}`,shared:"workspace:*",typescript:"^5.6.3","vitnode-shared":`^${s.version}`}};(0,I.writeFileSync)((0,H.join)(e,"apps","backend","package.json"),JSON.stringify(a,null,2));let D={name:"shared",version:"1.0.0",private:!0,scripts:{build:"tsc",dev:"tsc -w",lint:"eslint .","lint:fix":"eslint . --fix"},exports:{"./*":{require:"./dist/*.js",import:"./dist/*.js",types:"./dist/*.d.ts"}},dependencies:{"@nestjs/common":"^10.4.8","@nestjs/swagger":"^8.0.7"},devDependencies:{"@types/multer":"^1.4.12","@types/node":"^22.9.1","class-transformer":"^0.5.1","class-validator":"^0.14.1","eslint-config-typescript-vitnode":`^${s.version}`,typescript:"^5.6.3","vitnode-shared":`^${s.version}`}};(0,I.writeFileSync)((0,H.join)(e,"apps","shared","package.json"),JSON.stringify(D,null,2))};var ti=p(Xn(),1),ni=p(require("picocolors"),1);var Zn=require("child_process"),ct=require("dns/promises"),Qn=require("url");function Wr(){if(process.env.https_proxy)return process.env.https_proxy;try{let t=(0,Zn.execSync)("npm config get https-proxy").toString().trim();return t!=="null"?t:void 0}catch{return}}async function ei(){try{return await(0,ct.lookup)("registry.yarnpkg.com"),!0}catch{let t=Wr();if(!t)return!1;let{hostname:e}=new Qn.URL(t);if(!e)return!1;try{return await(0,ct.lookup)(e),!0}catch{return!1}}}var ii=async({packageManager:t})=>{let e=t.split("@")[0],n=await ei(),i=e==="npm"?["install","--force"]:["install"];return n||(console.log(ni.default.yellow(`You appear to be offline.
|
|
36
36
|
Falling back to the local cache.`)),i.push("--offline")),new Promise((r,s)=>{(0,ti.default)(e,i,{stdio:"ignore",env:{...process.env,ADBLOCK:"1",NODE_ENV:"development",DISABLE_OPENCOLLECTIVE:"1"}}).on("close",o=>{if(o!==0){s({command:`${e} ${i.join(" ")}`});return}r()})})};var P=require("child_process"),ri=require("fs"),si=require("path");function Lr(){try{return(0,P.execSync)("git rev-parse --is-inside-work-tree",{stdio:"ignore"}),!0}catch{}return!1}function qr(){try{return(0,P.execSync)("hg --cwd . root",{stdio:"ignore"}),!0}catch{}return!1}function Gr(){try{return(0,P.execSync)("git config init.defaultBranch",{stdio:"ignore"}),!0}catch{}return!1}function ui(t){let e=!1;try{return(0,P.execSync)("git --version",{stdio:"ignore"}),Lr()||qr()?!1:((0,P.execSync)("git init",{stdio:"ignore"}),e=!0,Gr()||(0,P.execSync)("git checkout -b main",{stdio:"ignore"}),(0,P.execSync)("git add -A",{stdio:"ignore"}),(0,P.execSync)('git commit -m "Initial commit from Create VitNode App"',{stdio:"ignore"}),!0)}catch{if(e)try{(0,ri.rmSync)((0,si.join)(t,".git"),{recursive:!0,force:!0})}catch{}return!1}}var Di=async({root:t,appName:e,packageManager:n,eslint:i,docker:r,install:s})=>{let u=n.startsWith("npm"),o=n.split("@")[0],a=(0,v.join)(__dirname,"..","templates"),D=tt(`Creating a new VitNode app in ${A.default.green(t)}. Using ${A.default.green(n)}...`).start();if((0,C.mkdirSync)(t,{recursive:!0}),se(t,e)||process.exit(1),process.chdir(t),D.text="Copying files...",(0,C.cpSync)((0,v.join)(a,"basic"),t,{recursive:!0}),D.text="Creating package.json...",Dn({appName:e,root:t,packageManager:n,docker:r,eslint:i}),D.text="Renaming files...",(0,C.renameSync)((0,v.join)(t,".gitignore_template"),(0,v.join)(t,".gitignore")),D.text="Changing tailwind.config.ts...",n.startsWith("npm")){let E=(0,v.join)(t,"apps","frontend","tailwind.config.ts"),_=(0,C.readFileSync)(E,"utf-8").replace("./node_modules/vitnode-frontend/src/components/**/*.tsx","../../node_modules/vitnode-frontend/src/components/**/*.tsx").replace("./node_modules/vitnode-frontend/src/views/**/*.tsx","../../node_modules/vitnode-frontend/src/views/**/*.tsx");(0,C.writeFileSync)(E,_)}n.startsWith("pnpm")&&(D.text="Copying pnpm template...",(0,C.cpSync)((0,v.join)(a,"pnpm"),t,{recursive:!0})),i&&(D.text="Copying eslint template...",(0,C.cpSync)((0,v.join)(a,"eslint"),t,{recursive:!0})),r&&(D.text="Copying docker template...",(0,C.cpSync)((0,v.join)(a,"docker"),t,{recursive:!0})),D.text="Changing .env file...",(0,C.copyFileSync)((0,v.join)(t,".env.template"),(0,v.join)(t,".env"));let l=(0,v.join)(t,".env"),f=(0,C.readFileSync)(l,"utf-8").replace("LOGIN_TOKEN_SECRET=vitnode_secret",`LOGIN_TOKEN_SECRET=${(0,oi.randomBytes)(32).toString("hex")}`);(0,C.writeFileSync)(l,f),s&&(D.text="Installing dependencies...",await ii({packageManager:n})),D.text="Initializing a git repository...",ui(t),console.log(`
|
|
37
37
|
`+A.default.blue(ai.default.textSync("VitNode",{horizontalLayout:"full"})),+`
|
|
38
38
|
`),D.succeed(` ${A.default.green("Success!")} Created ${A.default.cyan(e)} at ${A.default.cyan(t)}`),console.log(`Inside that directory, you can run several commands:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-vitnode-app",
|
|
3
|
-
"version": "0.0.10-canary.
|
|
3
|
+
"version": "0.0.10-canary.9",
|
|
4
4
|
"description": "Create a new VitNode app in seconds.",
|
|
5
5
|
"author": "VitNode Team",
|
|
6
6
|
"license": "MIT",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"ora": "^8.1.1",
|
|
43
43
|
"tsup": "^8.3.5",
|
|
44
44
|
"typescript": "^5.6.3",
|
|
45
|
-
"eslint-config-typescript-vitnode": "0.0.10-canary.
|
|
45
|
+
"eslint-config-typescript-vitnode": "0.0.10-canary.9"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"lint": "eslint .",
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Environment variables
|
|
4
|
+
DOMAIN_MAIN_NAME="your_website.com"
|
|
5
|
+
DOMAIN_FRONTEND_NAME="your_website.com"
|
|
6
|
+
DOMAIN_BACKEND_NAME="backend.your_website.com"
|
|
7
|
+
EMAIL="contact@your_website.com"
|
|
8
|
+
DB_USER=$(openssl rand -base64 8) # Generate a random 8-character username
|
|
9
|
+
DB_PASSWORD=$(openssl rand -base64 12) # Generate a random 12-character password
|
|
10
|
+
DB_DATABASE="vitnode"
|
|
11
|
+
LOGIN_TOKEN_SECRET=$(openssl rand -base64 32) # Generate a random 32-character secret
|
|
12
|
+
|
|
13
|
+
# Other variables (do not change unless you know what you are doing)
|
|
14
|
+
SWAP_SIZE="1G" # Swap size of 1GB
|
|
15
|
+
|
|
16
|
+
# ================================
|
|
17
|
+
# ================================
|
|
18
|
+
# ================================
|
|
19
|
+
|
|
20
|
+
# Update package list and upgrade existing packages
|
|
21
|
+
sudo apt update && sudo apt upgrade -y
|
|
22
|
+
|
|
23
|
+
# Add Swap Space
|
|
24
|
+
if ! sudo swapon --show | grep -q '/swapfile'; then
|
|
25
|
+
sudo fallocate -l $SWAP_SIZE /swapfile
|
|
26
|
+
sudo chmod 600 /swapfile
|
|
27
|
+
sudo mkswap /swapfile
|
|
28
|
+
sudo swapon /swapfile
|
|
29
|
+
|
|
30
|
+
# Make swap permanent
|
|
31
|
+
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
|
|
32
|
+
else
|
|
33
|
+
echo "Swap file already exists and is active."
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
# ================================
|
|
37
|
+
# Install Nginx
|
|
38
|
+
sudo apt install nginx -y
|
|
39
|
+
# Allow Nginx through the firewall
|
|
40
|
+
sudo ufw allow 'Nginx HTTP'
|
|
41
|
+
|
|
42
|
+
# Delete the default Nginx configuration file if it exists
|
|
43
|
+
if [ -f /etc/nginx/sites-available/default ]; then
|
|
44
|
+
sudo rm -f /etc/nginx/sites-available/default
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
if [ -L /etc/nginx/sites-enabled/default ]; then
|
|
48
|
+
sudo rm -f /etc/nginx/sites-enabled/default
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# Stop Nginx temporarily to allow Certbot to run in standalone mode
|
|
52
|
+
sudo systemctl stop nginx
|
|
53
|
+
|
|
54
|
+
# Obtain SSL certificate using Certbot standalone mode
|
|
55
|
+
sudo apt install certbot -y
|
|
56
|
+
sudo certbot certonly --standalone -d $DOMAIN_FRONTEND_NAME -d $DOMAIN_BACKEND_NAME --non-interactive --agree-tos -m contact@vitnode.com --cert-name $DOMAIN_MAIN_NAME
|
|
57
|
+
|
|
58
|
+
# Ensure SSL files exist or generate them
|
|
59
|
+
if [ ! -f /etc/letsencrypt/options-ssl-nginx.conf ]; then
|
|
60
|
+
sudo wget https://raw.githubusercontent.com/certbot/certbot/main/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx.conf -P /etc/letsencrypt/
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
if [ ! -f /etc/letsencrypt/ssl-dhparams.pem ]; then
|
|
64
|
+
sudo openssl dhparam -out /etc/letsencrypt/ssl-dhparams.pem 2048
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# Create Nginx config with reverse proxy, SSL support, rate limiting, and streaming support for both frontend and backend
|
|
68
|
+
sudo tee /etc/nginx/sites-available/vitnode > /dev/null <<EOL
|
|
69
|
+
limit_req_zone \$binary_remote_addr zone=mylimit:10m rate=10r/s;
|
|
70
|
+
|
|
71
|
+
# Frontend Server Block
|
|
72
|
+
server {
|
|
73
|
+
listen 80;
|
|
74
|
+
server_name $DOMAIN_FRONTEND_NAME;
|
|
75
|
+
|
|
76
|
+
# Redirect all HTTP requests to HTTPS
|
|
77
|
+
return 301 https://\$host\$request_uri;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
server {
|
|
81
|
+
listen 443 ssl;
|
|
82
|
+
server_name $DOMAIN_FRONTEND_NAME;
|
|
83
|
+
|
|
84
|
+
ssl_certificate /etc/letsencrypt/live/$DOMAIN_MAIN_NAME/fullchain.pem;
|
|
85
|
+
ssl_certificate_key /etc/letsencrypt/live/$DOMAIN_MAIN_NAME/privkey.pem;
|
|
86
|
+
include /etc/letsencrypt/options-ssl-nginx.conf;
|
|
87
|
+
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
|
88
|
+
|
|
89
|
+
# Enable rate limiting
|
|
90
|
+
limit_req zone=mylimit burst=20 nodelay;
|
|
91
|
+
|
|
92
|
+
location / {
|
|
93
|
+
proxy_pass http://localhost:3000;
|
|
94
|
+
proxy_http_version 1.1;
|
|
95
|
+
proxy_set_header Upgrade \$http_upgrade;
|
|
96
|
+
proxy_set_header Connection 'upgrade';
|
|
97
|
+
proxy_set_header Host \$host;
|
|
98
|
+
proxy_cache_bypass \$http_upgrade;
|
|
99
|
+
|
|
100
|
+
# Disable buffering for streaming support
|
|
101
|
+
proxy_buffering off;
|
|
102
|
+
proxy_set_header X-Accel-Buffering no;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# Backend Server Block
|
|
107
|
+
server {
|
|
108
|
+
listen 80;
|
|
109
|
+
server_name $DOMAIN_BACKEND_NAME;
|
|
110
|
+
|
|
111
|
+
# Redirect all HTTP requests to HTTPS
|
|
112
|
+
return 301 https://\$host\$request_uri;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
server {
|
|
116
|
+
listen 443 ssl;
|
|
117
|
+
server_name $DOMAIN_BACKEND_NAME;
|
|
118
|
+
|
|
119
|
+
ssl_certificate /etc/letsencrypt/live/$DOMAIN_MAIN_NAME/fullchain.pem;
|
|
120
|
+
ssl_certificate_key /etc/letsencrypt/live/$DOMAIN_MAIN_NAME/privkey.pem;
|
|
121
|
+
include /etc/letsencrypt/options-ssl-nginx.conf;
|
|
122
|
+
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
|
123
|
+
|
|
124
|
+
# Enable rate limiting
|
|
125
|
+
limit_req zone=mylimit burst=20 nodelay;
|
|
126
|
+
|
|
127
|
+
location / {
|
|
128
|
+
proxy_pass http://localhost:8080;
|
|
129
|
+
proxy_http_version 1.1;
|
|
130
|
+
proxy_set_header Upgrade \$http_upgrade;
|
|
131
|
+
proxy_set_header Connection 'upgrade';
|
|
132
|
+
proxy_set_header Host \$host;
|
|
133
|
+
proxy_cache_bypass \$http_upgrade;
|
|
134
|
+
|
|
135
|
+
# Disable buffering for streaming support
|
|
136
|
+
proxy_buffering off;
|
|
137
|
+
proxy_set_header X-Accel-Buffering no;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
EOL
|
|
141
|
+
|
|
142
|
+
# Create symbolic link if it doesn't already exist
|
|
143
|
+
if [ ! -f /etc/nginx/sites-enabled/vitnode ]; then
|
|
144
|
+
sudo ln -s /etc/nginx/sites-available/vitnode /etc/nginx/sites-enabled/vitnode
|
|
145
|
+
fi
|
|
146
|
+
|
|
147
|
+
# Restart Nginx to apply the new configuration
|
|
148
|
+
sudo systemctl restart nginx
|
|
149
|
+
|
|
150
|
+
# ================================
|
|
151
|
+
|
|
152
|
+
# Add Docker's official GPG key:
|
|
153
|
+
sudo apt-get update
|
|
154
|
+
sudo apt-get install ca-certificates curl
|
|
155
|
+
sudo install -m 0755 -d /etc/apt/keyrings
|
|
156
|
+
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
|
|
157
|
+
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
|
158
|
+
|
|
159
|
+
# Add the repository to Apt sources:
|
|
160
|
+
echo \
|
|
161
|
+
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
|
|
162
|
+
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
|
|
163
|
+
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
|
164
|
+
sudo apt-get update
|
|
165
|
+
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
|
166
|
+
|
|
167
|
+
# Install Docker Compose
|
|
168
|
+
sudo rm -f /usr/local/bin/docker-compose
|
|
169
|
+
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
# Wait for the file to be fully downloaded before proceeding
|
|
173
|
+
if [ ! -f /usr/local/bin/docker-compose ]; then
|
|
174
|
+
echo "Docker Compose download failed. Exiting."
|
|
175
|
+
exit 1
|
|
176
|
+
fi
|
|
177
|
+
|
|
178
|
+
sudo chmod +x /usr/local/bin/docker-compose
|
|
179
|
+
|
|
180
|
+
# Ensure Docker Compose is executable and in path
|
|
181
|
+
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
|
|
182
|
+
|
|
183
|
+
# Verify Docker Compose installation
|
|
184
|
+
docker-compose --version
|
|
185
|
+
if [ $? -ne 0 ]; then
|
|
186
|
+
echo "Docker Compose installation failed. Exiting."
|
|
187
|
+
exit 1
|
|
188
|
+
fi
|
|
189
|
+
|
|
190
|
+
# Ensure Docker starts on boot and start Docker service
|
|
191
|
+
sudo systemctl enable docker
|
|
192
|
+
sudo systemctl start docker
|
|
193
|
+
|
|
194
|
+
# Create a .env file
|
|
195
|
+
if [ ! -f "./.env" ]; then
|
|
196
|
+
echo "LOGIN_TOKEN_SECRET=$LOGIN_TOKEN_SECRET" > "./.env"
|
|
197
|
+
echo "NEXT_PUBLIC_BACKEND_CLIENT_URL=https://$DOMAIN_BACKEND_NAME" >> "./.env"
|
|
198
|
+
echo "NEXT_PUBLIC_FRONTEND_URL=https://$DOMAIN_FRONTEND_NAME" >> "./.env"
|
|
199
|
+
echo "DB_USER=$DB_USER" >> "./.env"
|
|
200
|
+
echo "DB_PASSWORD=$DB_PASSWORD" >> "./.env"
|
|
201
|
+
echo "DB_DATABASE=$DB_DATABASE" >> "./.env"
|
|
202
|
+
else
|
|
203
|
+
echo ".env file already exists. Skipping creation."
|
|
204
|
+
fi
|
|
205
|
+
|
|
206
|
+
sudo docker-compose -f ./docker-compose.yml -p vitnode up -d
|
|
207
|
+
|
|
208
|
+
sudo chown -R 1001:1001 ./apps/backend/src/plugins/core
|
|
209
|
+
sudo chown -R 1001:1001 ./apps/backend/uploads
|
|
210
|
+
|
|
211
|
+
# Check if Docker Compose started correctly
|
|
212
|
+
if ! sudo docker-compose ps | grep "Up"; then
|
|
213
|
+
echo "Docker containers failed to start. Check logs with 'docker-compose logs'."
|
|
214
|
+
exit 1
|
|
215
|
+
fi
|