@kunver/new 1.3.1 → 1.4.0

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.
Files changed (2) hide show
  1. package/dist/index.js +12 -13
  2. package/package.json +2 -1
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import{input as It,select as T}from"@inquirer/prompts";import{spawn as ct}from"child_process";import y from"chalk";import lt from"ora";async function f(s,t,i){return new Promise(e=>{let n;switch(s){case"pnpm":n=`cd ${t} && pnpm install`;break;case"npm":n=`cd ${t} && npm install`;break;case"bun":n=`cd ${t} && bun install`;break;default:n=`cd ${t} && pnpm install`}let r=ct(n,{shell:!0,cwd:i}),o=lt("Installing dependencies with "+y.blue(s)).start();o.color="white",r.on("close",a=>{a==0?(o.succeed("Installed dependencies for "+y.blue(t)),e(!0)):(o.fail("Failed to install dependencies for "+y.blue(t)),e(!1))})})}import{readFileSync as pt,writeFileSync as R}from"fs";import{spawn as dt}from"child_process";import v from"ora";import mt from"chalk";function ut(s,t){let i=`${t}/${s}/vite.config.ts`,e=v("Editing vite.config.ts...").start();e.color="blue";try{let n=pt(i,"utf-8");n.includes('import tailwindcss from "@tailwindcss/vite"')?e.info("Tailwind import already exists in vite.config.ts"):(n=`import tailwindcss from "@tailwindcss/vite"
3
- `+n,n=n.replace(/plugins:\s*\[.*?\]/,"plugins: [react(), tailwindcss()]"),R(i,n,"utf-8"),e.succeed("Updated vite.config.ts with Tailwind import"))}catch(n){e.fail(`Failed to edit vite.config.ts: ${n}`),console.error(n)}}function ft(s,t){let i=`${t}/${s}/src/index.css`,e='@import "tailwindcss";',n=v("Adding Tailwind directive to index.css...").start();R(i,e,"utf-8"),n.succeed("Added Tailwind directive to index.css")}async function W(s,t,i){return new Promise(e=>{let n="cd "+t+" && "+s+" install tailwindcss @tailwindcss/vite",r=dt(n,{shell:!0,cwd:i}),o=v("Installing Tailwind with "+mt.blue(s)).start();o.color="blue",o.start(),r.on("close",a=>{a===0?(o.succeed("Installed tailwind"),ut(t,i),ft(t,i),e(!0)):(o.fail("Failed to install tailwind"),e(!1))})})}var I=`
2
+ import{input as Ie,select as E}from"@inquirer/prompts";import{execa as ie}from"execa";import v from"chalk";import oe from"ora";async function m(e,t,n){let r;switch(e){case"pnpm":r=`cd ${t} && pnpm install`;break;case"npm":r=`cd ${t} && npm install`;break;case"bun":r=`cd ${t} && bun install`;break;default:r=`cd ${t} && pnpm install`}let s=oe("Installing dependencies with "+v.blue(e)).start();try{return await ie(r,{shell:!0,cwd:n}),s.succeed("Installed dependencies for "+v.blue(t)),!0}catch{return s.fail("Failed to install dependencies for "+v.blue(t)),!1}}import{readFileSync as ce,writeFileSync as I}from"fs";import{execa as le}from"execa";import k from"ora";import pe from"chalk";function de(e,t){let n=`${t}/${e}/vite.config.ts`,r=k("Editing vite.config.ts...").start();try{let s=ce(n,"utf-8");s.includes('import tailwindcss from "@tailwindcss/vite"')?r.info("Tailwind import already exists in vite.config.ts"):(s=`import tailwindcss from "@tailwindcss/vite"
3
+ `+s,s=s.replace(/plugins:\s*\[.*?\]/,"plugins: [react(), tailwindcss()]"),I(n,s,"utf-8"),r.succeed("Updated vite.config.ts with Tailwind import"))}catch(s){r.fail(`Failed to edit vite.config.ts: ${s}`),console.error(s)}}function me(e,t){let n=`${t}/${e}/src/index.css`,r='@import "tailwindcss";',s=k("Adding Tailwind directive to index.css...").start();I(n,r,"utf-8"),s.succeed("Added Tailwind directive to index.css")}async function W(e,t,n){let r="cd "+t+" && "+e+" install tailwindcss @tailwindcss/vite",s=k("Installing Tailwind with "+pe.blue(e)).start();try{return await le(r,{shell:!0,cwd:n}),s.succeed("Installed tailwind"),de(t,n),me(t,n),!0}catch{return s.fail("Failed to install tailwind"),!1}}var O=`
4
4
  {
5
5
  "semi": false,
6
6
  "trailingComma": "all",
@@ -12,7 +12,7 @@ import{input as It,select as T}from"@inquirer/prompts";import{spawn as ct}from"c
12
12
  "jsxBracketSameLine": false,
13
13
  "arrowParens": "avoid"
14
14
  }
15
- `,O=`
15
+ `,D=`
16
16
  #!/bin/bash
17
17
 
18
18
  # Exit immediately if a command fails
@@ -42,9 +42,9 @@ if [ $? -ne 0 ]; then
42
42
  echo "\u274C Failed to switch back to the 'dev' branch."
43
43
  exit 1
44
44
  fi
45
- `;import{writeFile as B}from"fs/promises";import{join as k}from"path";import{execSync as gt}from"child_process";import D from"chalk";import wt from"ora";async function g(s,t){let i=k(t,s),e=k(i,"push.sh"),n=wt("Copying config files to "+D.blue(s)).start();n.color="blue";try{await Promise.all([B(k(i,".prettierrc.json"),I),B(e,O)]);try{gt(`chmod +x "${e}"`)}catch{console.error(D.red("Failed to make push.sh executable"))}n.succeed("Config files copied and push.sh is executable")}catch(r){n.fail("Failed to copy config files or set permissions"),console.error(r)}}import{spawn as ht}from"child_process";import bt from"ora";import $ from"chalk";function H(s,t,i){let e;switch(s){case"pnpm":e=`pnpm create vite ${t} --template react-swc-ts`;break;case"npm":e=`npm create vite@latest ${t} -- --template react-swc-ts`;break;case"bun":e=`bun create vite ${t} --template react-swc-ts`;break;default:e=`pnpm create vite ${t} --template react-swc-ts`}return new Promise(n=>{let r=ht(e,{shell:!0,cwd:i}),o=bt("Creating React project "+$.blue(t)).start();o.color="blue",r.on("close",a=>{a===0?(o.succeed("Created React project at "+$.blue(t)),n(!0)):(o.fail("Failed to create React project at "+$.blue(t)),n(!1))})})}import{spawn as xt}from"child_process";import yt from"ora";async function w(s,t){return new Promise((i,e)=>{let n="cd "+s+" && pnpm approve-builds",r=xt(n,{shell:!0,cwd:t}),o=yt("Approving builds").start();r.stdout.pipe(process.stdout),r.stderr.pipe(process.stderr),setTimeout(()=>{r.stdin.write(`a
46
- `),setTimeout(()=>{r.stdin.write(`y
47
- `),r.stdin.end()},500)},500),r.on("close",a=>{a===0?(o.succeed("Builds approved."),i(!0)):(o.fail("Failed to approve builds."),e(new Error(`Process exited with code ${a}`)))}),r.on("error",a=>{o.fail(`Failed to start process. Error: ${a.message}`),e(a)})})}import{spawn as vt}from"child_process";import kt from"ora";import C from"chalk";async function h(s,t){return new Promise(i=>{let e=`cd ${s} && bun pm trust --all`,n=vt(e,{shell:!0,cwd:t}),r=kt("Approving builds for "+C.blue(s)).start();r.color="blue",n.on("close",o=>{o===0?(r.succeed("Approved builds for "+C.blue(s)),i(!0)):(r.fail("Failed to approve builds for "+C.blue(s)),i(!1))})})}import{writeFile as X,unlink as U,rm as $t}from"fs/promises";import d from"ora";import{spawn as Ct}from"child_process";async function z(s,t){let i=`${t}/${s}/README.md`,e=d("Editing README.md...").start();e.color="white";try{let n=`# ${s}`;await X(i,n,"utf-8"),e.succeed("Updated README.md")}catch(n){e.fail(`Failed to edit README.md: ${n}`),console.error(n)}}async function J(s,t){let i=`${t}/${s}/src/assets`,e=d("Deleting assets...").start();e.color="white";try{await $t(i,{recursive:!0,force:!0}),e.succeed("Deleted assets")}catch(n){e.fail(`Failed to delete assets: ${n}`),console.error(n)}}async function G(s,t){let i=`${t}/${s}/src/app.css`,e=d("Deleting app.css...").start();e.color="white";try{await U(i),e.succeed("Deleted app.css")}catch(n){e.fail(`Failed to delete app.css: ${n}`),console.error(n)}}async function Q(s,t){let i=`${t}/${s}/src/app.tsx`,e=d("Clearing app.tsx...").start();e.color="white";let n=`
45
+ `;import{writeFile as B,access as ue}from"fs/promises";import{join as $}from"path";import{execSync as fe}from"child_process";import H from"chalk";import ge from"ora";async function u(e,t){let n=$(t,e),r=$(n,"push.sh"),s=ge("Copying config files to "+H.blue(e)).start();try{await ue(n),await Promise.all([B($(n,".prettierrc.json"),O),B(r,D)]);try{fe(`chmod +x "${r}"`)}catch{console.error(H.red("Failed to make push.sh executable"))}s.succeed("Config files copied and push.sh is executable")}catch(a){throw s.fail("Failed to copy config files or set permissions"),console.error(a),a}}import{execa as we}from"execa";import he from"ora";import C from"chalk";async function X(e,t,n){let r;switch(e){case"pnpm":r=`pnpm create vite ${t} --template react-swc-ts`;break;case"npm":r=`npm create vite@latest ${t} -- --template react-swc-ts`;break;case"bun":r=`bun create vite ${t} --template react-swc-ts`;break;default:r=`pnpm create vite ${t} --template react-swc-ts`}let s=he("Creating React project "+C.blue(t)).start();try{return await we(r,{shell:!0,cwd:n}),s.succeed("Created React project at "+C.blue(t)),!0}catch{return s.fail("Failed to create React project at "+C.blue(t)),!1}}import xe from"ora";import d from"chalk";var{spawn:ye}=await import("child_process");async function f(e,t){let n=xe("Approving builds for "+d.blue(e)).start();try{return new Promise(r=>{let s=ye("pnpm",["approve-builds"],{cwd:`${t}/${e}`,stdio:["pipe","inherit","inherit"],shell:!0});setTimeout(()=>{s.stdin?.write(`a
46
+ `),setTimeout(()=>{s.stdin?.write(`y
47
+ `),s.stdin?.end()},1e3)},2e3),s.on("close",a=>{a===0?(n.succeed("Approved builds for "+d.blue(e)),r(!0)):(n.fail("Failed to approve builds for "+d.blue(e)),r(!1))}),s.on("error",a=>{n.fail("Failed to approve builds for "+d.blue(e)),console.error(a),r(!1)})})}catch(r){return n.fail("Failed to approve builds for "+d.blue(e)),console.error(r),!1}}import{execa as be}from"execa";import ve from"ora";import F from"chalk";async function g(e,t){let n=`cd ${e} && bun pm trust --all`,r=ve("Approving builds for "+F.blue(e)).start();try{return await be(n,{shell:!0,cwd:t}),r.succeed("Approved builds for "+F.blue(e)),!0}catch{return r.fail("Failed to approve builds for "+F.blue(e)),!1}}import{writeFile as U,unlink as z,rm as ke,access as J}from"fs/promises";import l from"ora";import{execa as $e}from"execa";async function G(e,t){let n=`${t}/${e}/README.md`,r=l("Editing README.md...").start();try{let s=`# ${e}`;await U(n,s,"utf-8"),r.succeed("Updated README.md")}catch(s){r.fail(`Failed to edit README.md: ${s}`),console.error(s)}}async function Q(e,t){let n=`${t}/${e}/src/assets`,r=l("Deleting assets...").start();try{await ke(n,{recursive:!0,force:!0}),r.succeed("Deleted assets")}catch(s){r.fail(`Failed to delete assets: ${s}`),console.error(s)}}async function L(e,t){let n=`${t}/${e}/src/app.css`,r=l("Deleting app.css...").start();try{await J(n),await z(n),r.succeed("Deleted app.css")}catch(s){s.code==="ENOENT"?r.info("app.css not found (already deleted or doesn't exist)"):(r.fail(`Failed to delete app.css: ${s}`),console.error(s))}}async function V(e,t){let n=`${t}/${e}/src/app.tsx`,r=l("Clearing app.tsx...").start(),s=`
48
48
  function App() {
49
49
  return (
50
50
  <>
@@ -54,11 +54,11 @@ fi
54
54
  }
55
55
 
56
56
  export default App
57
- `;try{await X(i,n,"utf-8"),e.succeed("Cleared app.tsx")}catch(r){e.fail(`Failed to clear app.tsx: ${r}`),console.error(r)}}async function L(s,t){let i=`${t}/${s}/eslint.config.js`,e=d("Deleting eslint.config.js...").start();e.color="white";try{await U(i),e.succeed("Deleted eslint.config.js")}catch(n){e.fail(`Failed to delete eslint.config.js: ${n}`),console.error(n)}}async function V(s,t,i){let e="cd "+s+" && "+t+" remove @eslint/js eslint eslint-plugin-react-hooks eslint-plugin-react-refresh globals typescript-eslint";return new Promise(n=>{let r=Ct(e,{shell:!0,cwd:i}),o=d("Removing packages...").start();o.color="white",o.start(),r.on("close",a=>{a===0?(o.succeed("Removed packages"),n(!0)):(o.fail("Failed to remove packages"),n(!1))})})}async function _(s,t,i){await Promise.all([G(s,i),J(s,i),L(s,i),Q(s,i),z(s,i),V(s,t,i)])}async function q(s){let{name:t,packageManager:i,cwd:e=process.cwd()}=s;try{await H(i,t,e)&&(await f(i,t,e),await g(t,e),await W(i,t,e),i==="pnpm"?await w(t,e):i==="bun"&&await h(t,e),await _(t,i,e))}catch(n){console.error(n)}}import{spawn as Ft}from"child_process";import Pt from"ora";import F from"chalk";async function K(s,t,i,e){let n;switch(t){case"pnpm":n=`pnpm dlx wxt@latest init ${i} -t ${s} --pm ${t}`;break;case"npm":n=`npx wxt@latest init ${i} -t ${s} --pm ${t}`;break;case"bun":n=`bunx wxt@latest init ${i} -t ${s} --pm ${t}`;break;default:n=`bun wxt@latest init ${i} -t ${s} --pm ${t}`}return new Promise(r=>{let o=Ft(n,{shell:!0,cwd:e}),a=Pt("Creating WXT project "+F.blue(i)).start();a.color="blue",o.on("close",u=>{u===0?(a.succeed("Created WXT project at "+F.blue(i)),r(!0)):(a.fail("Failed to create WXT project at "+F.blue(i)),r(!1))})})}import{select as Et}from"@inquirer/prompts";import jt from"chalk";import{rm as b,mkdir as St,writeFile as p,readFile as P}from"fs/promises";import{join as c}from"path";import{spawn as At}from"child_process";import Tt from"ora";import Y from"chalk";async function Z(s,t,i){let e=Tt("Finalizing WXT Svelte project setup...").start();try{e.text="Cleaning up default files...",await b(c(t,"src","assets","svelte.svg")),await b(c(t,"src","entrypoints","popup","app.css")),await b(c(t,"src","entrypoints","content.ts")),await b(c(t,"src","lib","Counter.svelte")),e.text="Creating content script files...";let n=c(t,"src","entrypoints","content");await St(n),await p(c(n,"App.svelte"),`<script lang="ts">
57
+ `;try{await U(n,s,"utf-8"),r.succeed("Cleared app.tsx")}catch(a){r.fail(`Failed to clear app.tsx: ${a}`),console.error(a)}}async function _(e,t){let n=`${t}/${e}/eslint.config.js`,r=l("Deleting eslint.config.js...").start();try{await J(n),await z(n),r.succeed("Deleted eslint.config.js")}catch(s){s.code==="ENOENT"?r.info("eslint.config.js not found (already deleted or doesn't exist)"):(r.fail(`Failed to delete eslint.config.js: ${s}`),console.error(s))}}async function q(e,t,n){let r="cd "+e+" && "+t+" remove @eslint/js eslint eslint-plugin-react-hooks eslint-plugin-react-refresh globals typescript-eslint",s=l("Removing packages...").start();try{return await $e(r,{shell:!0,cwd:n}),s.succeed("Removed packages"),!0}catch(a){return s.fail("Failed to remove packages"),console.error(a),!1}}async function K(e,t,n){await Promise.all([L(e,n),Q(e,n),_(e,n),V(e,n),G(e,n),q(e,t,n)])}async function Y(e){let{name:t,packageManager:n,cwd:r=process.cwd()}=e;try{if(!await X(n,t,r))throw new Error("Failed to create React project");if(!await m(n,t,r))throw new Error("Failed to install dependencies");if(await u(t,r),!await W(n,t,r))throw new Error("Failed to install Tailwind");return n==="pnpm"?await f(t,r):n==="bun"&&await g(t,r),await K(t,n,r),!0}catch(s){throw console.error("Error creating React project:",s),s}}import{execa as Ce}from"execa";import Fe from"ora";import T from"chalk";async function Z(e,t,n,r){let s;switch(t){case"pnpm":s=`pnpm dlx wxt@latest init ${n} -t ${e} --pm ${t}`;break;case"npm":s=`npx wxt@latest init ${n} -t ${e} --pm ${t}`;break;case"bun":s=`bunx wxt@latest init ${n} -t ${e} --pm ${t}`;break;default:s=`bun wxt@latest init ${n} -t ${e} --pm ${t}`}let a=Fe("Creating WXT project "+T.blue(n)).start();try{return await Ce(s,{shell:!0,cwd:r}),a.succeed("Created WXT project at "+T.blue(n)),!0}catch{return a.fail("Failed to create WXT project at "+T.blue(n)),!1}}import{select as Ee}from"@inquirer/prompts";import je from"chalk";import{rm as w,mkdir as Te,writeFile as c,readFile as A}from"fs/promises";import{join as i}from"path";import{execa as Ae}from"execa";import Se from"ora";import N from"chalk";async function ee(e,t,n){let r=Se("Finalizing WXT Svelte project setup...").start();try{r.text="Cleaning up default files...",await w(i(t,"src","assets","svelte.svg")),await w(i(t,"src","entrypoints","popup","app.css")),await w(i(t,"src","entrypoints","content.ts")),await w(i(t,"src","lib","Counter.svelte")),r.text="Creating content script files...";let s=i(t,"src","entrypoints","content");await Te(s),await c(i(s,"App.svelte"),`<script lang="ts">
58
58
  let message = "Hello World"
59
59
  </script>
60
60
 
61
- <h1 class="text-3xl fixed top-20 left-20 z-50">{message}</h1>`),await p(c(n,"index.ts"),`import App from "./App.svelte"
61
+ <h1 class="text-3xl fixed top-20 left-20 z-50">{message}</h1>`),await c(i(s,"index.ts"),`import App from "./App.svelte"
62
62
  import { mount, unmount } from "svelte"
63
63
 
64
64
  export default defineContentScript({
@@ -74,20 +74,19 @@ export default defineContentScript({
74
74
  return mount(App, { target: container })
75
75
  },
76
76
  onRemove: app => {
77
- unmount(app)
77
+ unmount(app as any)
78
78
  },
79
79
  })
80
80
  ui.mount()
81
81
  },
82
- })`),e.text="Installing Tailwind CSS...",await new Promise((it,rt)=>{let ot=`${i} install tailwindcss @tailwindcss/vite`;At(ot,{shell:!0,cwd:t}).on("close",at=>{at===0?it():rt(new Error("Failed to install Tailwind CSS"))})}),e.text="Configuring Tailwind CSS...",await p(c(t,"src","assets","tailwind.css"),'@import "tailwindcss";');let u=c(t,"wxt.config.ts"),m=await P(u,"utf-8");m=`import tailwindcss from '@tailwindcss/vite'
83
- `+m,m=m.replace("defineConfig({",`defineConfig({
82
+ })`),r.text="Installing Tailwind CSS...";let y=`${n} install tailwindcss @tailwindcss/vite`;await Ae(y,{shell:!0,cwd:t}),r.text="Configuring Tailwind CSS...",await c(i(t,"src","assets","tailwind.css"),'@import "tailwindcss";');let j=i(t,"wxt.config.ts"),p=await A(j,"utf-8");p='import tailwindcss from "@tailwindcss/vite"'+p,p=p.replace("defineConfig({",`defineConfig({
84
83
  vite: () => ({
85
84
  plugins: [tailwindcss()]
86
85
  }),
87
86
  webExt: {
88
87
  disabled: true
89
- },`),await p(u,m),e.text="Updating popup files...";let E=c(t,"src","entrypoints","popup","main.ts"),x=await P(E,"utf-8");x=x.replace("import './app.css'",'import "~/assets/tailwind.css"'),await p(E,x);let nt=c(t,"src","entrypoints","popup","App.svelte");await p(nt,`<script lang="ts">
88
+ },`),await c(j,p),r.text="Updating popup files...";let M=i(t,"src","entrypoints","popup","main.ts"),b=await A(M,"utf-8");b=b.replace("import './app.css'",'import "~/assets/tailwind.css"'),await c(M,b);let ae=i(t,"src","entrypoints","popup","App.svelte");await c(ae,`<script lang="ts">
90
89
  let message = "Hello World"
91
90
  </script>
92
91
 
93
- <h1 class="text-3xl">{message}</h1>`),e.text="Updating package.json...";let j=c(t,"package.json"),M=JSON.parse(await P(j,"utf-8"));return M.name=s,await p(j,JSON.stringify(M,null,2)),e.succeed(Y.green("WXT Svelte project setup finished successfully!")),!0}catch(n){return e.fail(Y.red(`Error during post-installation setup: ${n.message}`)),!1}}import{join as Mt}from"path";var Rt=["react - !not ready","vue - !not ready","svelte","vanilla - !not ready","solid - !not ready"];async function N(s){let{name:t,packageManager:i,cwd:e=process.cwd()}=s;try{let n=await Et({message:jt.bold.magenta("Select a framework for WXT"),choices:Rt,default:"svelte"});if(await K(n,i,t,e)){let o=Mt(e,t);await f(i,t,e),await g(t,e),n==="svelte"&&await Z(t,o,i),i==="pnpm"?await w(t,e):i==="bun"&&await h(t,e)}}catch(n){console.error(n)}}import{spawn as Wt}from"child_process";import S from"chalk";async function tt(s,t,i){return console.log(S.white("Opening "+S.blue(s)+" in "+S.green(i))),new Promise(e=>{Wt(`${i} ${s}`,{shell:!0,cwd:t}).on("close",()=>e(!0))})}var et=["react-ts-tw","next-ts - !not ready","wxt","cpp-cmake - !not ready"],st=["bun","pnpm","npm"];async function A(s){switch(s.projectType){case"react-ts-tw":await q({name:s.name,packageManager:s.packageManager});break;case"next-ts - !not ready":console.log("next-ts",s.packageManager,s.name);break;case"wxt":await N({name:s.name,packageManager:s.packageManager});break;case"cpp-cmake - !not ready":console.log("cpp-cmake",s.packageManager,s.name);break;default:console.log("Invalid project type",s.projectType);break}s.openInEditor!=="no"&&await tt(s.name,process.cwd(),s.openInEditor)}import l from"chalk";import Ot from"fs";import Bt from"path";var Dt=await It({message:l.bold.blue("Enter a project name"),default:l.gray("my-project"),validate:s=>!s||s.trim().length<2?l.red("Project name must be at least 2 characters"):/^[a-z0-9]+(-[a-z0-9]+)*$/.test(s)?Ot.existsSync(Bt.resolve(process.cwd(),s))?l.red("A folder with that name already exists"):!0:l.red("Only lowercase letters, numbers, and single hyphens allowed. No spaces or special characters.")}),Ht=await T({message:l.bold.green("Select a package manager"),choices:st,default:"bun"}),Xt=await T({message:l.bold.yellow("Select a project type"),default:"react-ts-tw",choices:et}),Ut=await T({message:l.bold.cyan("Open in editor?"),choices:["no","windsurf","cursor","code"],default:"no"}),zt={projectType:Xt,packageManager:Ht,name:Dt,openInEditor:Ut};await A(zt);
92
+ <h1 class="text-3xl">{message}</h1>`),r.text="Updating package.json...";let P=i(t,"package.json"),R=JSON.parse(await A(P,"utf-8"));return R.name=e,await c(P,JSON.stringify(R,null,2)),r.succeed(N.green("WXT Svelte project setup finished successfully!")),!0}catch(s){return r.fail(N.red(`Error during post-installation setup: ${s.message}`)),!1}}import{join as Me}from"path";var Pe=["react - !not ready","vue - !not ready","svelte","vanilla - !not ready","solid - !not ready"];async function te(e){let{name:t,packageManager:n,cwd:r=process.cwd(),selectedFramework:s}=e;try{let a=s||await Ee({message:je.bold.magenta("Select a framework for WXT"),choices:Pe,default:"svelte"});if(await Z(a,n,t,r)){let y=Me(r,t);await m(n,t,r),await u(t,r),a==="svelte"&&await ee(t,y,n),n==="pnpm"?await f(t,r):n==="bun"&&await g(t,r)}}catch(a){console.error(a)}}import{execa as Re}from"execa";import h from"chalk";async function re(e,t,n){console.log(h.white("Opening "+h.blue(e)+" in "+h.green(n)));try{return await Re(`${n} ${e}`,{shell:!0,cwd:t}),!0}catch(r){return console.error(h.red("Failed to open project in editor:"),r),!1}}var ne=["react-ts-tw","next-ts - !not ready","wxt","cpp-cmake - !not ready"],se=["bun","pnpm","npm"];async function S(e){switch(e.projectType){case"react-ts-tw":await Y({name:e.name,packageManager:e.packageManager});break;case"next-ts - !not ready":console.log("next-ts",e.packageManager,e.name);break;case"wxt":await te({name:e.name,packageManager:e.packageManager});break;case"cpp-cmake - !not ready":console.log("cpp-cmake",e.packageManager,e.name);break;default:console.log("Invalid project type",e.projectType);break}e.openInEditor!=="no"&&await re(e.name,process.cwd(),e.openInEditor)}import o from"chalk";import We from"fs";import Oe from"path";var De=await Ie({message:o.bold.blue("Enter a project name"),default:o.gray("my-project"),validate:e=>!e||e.trim().length<2?o.red("Project name must be at least 2 characters"):/^[a-z0-9]+(-[a-z0-9]+)*$/.test(e)?We.existsSync(Oe.resolve(process.cwd(),e))?o.red("A folder with that name already exists"):!0:o.red("Only lowercase letters, numbers, and single hyphens allowed. No spaces or special characters.")}),Be=await E({message:o.bold.green("Select a package manager"),choices:se,default:"bun"}),He=await E({message:o.bold.yellow("Select a project type"),default:"react-ts-tw",choices:ne}),Xe=await E({message:o.bold.cyan("Open in editor?"),choices:["no","windsurf","cursor","code"],default:"no"}),Ue={projectType:He,packageManager:Be,name:De,openInEditor:Xe};await S(Ue);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kunver/new",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "Opiniated project starter",
5
5
  "type": "module",
6
6
  "bin": {
@@ -25,6 +25,7 @@
25
25
  "dependencies": {
26
26
  "@inquirer/prompts": "^7.6.0",
27
27
  "chalk": "^5.4.1",
28
+ "execa": "^9.6.0",
28
29
  "ora": "^8.2.0"
29
30
  },
30
31
  "scripts": {