rapidkit 0.12.2 → 0.12.3

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 (3) hide show
  1. package/README.md +4 -2
  2. package/dist/index.js +19 -19
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -98,9 +98,11 @@ rapidkit format # Format code
98
98
  rapidkit --help # Show all commands
99
99
  ```
100
100
 
101
- ### Alternative: Without Activation
101
+ > **Note:** The global `rapidkit` command automatically detects when you're inside a RapidKit project and delegates to the local CLI. No need for `./rapidkit` prefix or `source .rapidkit/activate`.
102
102
 
103
- You can also run commands directly without activation:
103
+ ### Alternative: Direct Commands
104
+
105
+ You can also run commands directly:
104
106
 
105
107
  ```bash
106
108
  ./rapidkit dev # Using the wrapper script
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
- import {Command}from'commander';import r from'chalk';import P from'inquirer';import l,{dirname,join}from'path';import {execa}from'execa';import {readFileSync,promises}from'fs';import {fileURLToPath}from'url';import te from'os';import re from'validate-npm-package-name';import*as k from'fs-extra';import N from'ora';var E=class{debugEnabled=false;setDebug(t){this.debugEnabled=t;}debug(t,...i){this.debugEnabled&&console.log(r.gray(`[DEBUG] ${t}`),...i);}info(t,...i){console.log(r.blue(t),...i);}success(t,...i){console.log(r.green(t),...i);}warn(t,...i){console.log(r.yellow(t),...i);}error(t,...i){console.error(r.red(t),...i);}step(t,i,o){console.log(r.cyan(`
3
- [${t}/${i}]`),r.white(o));}},c=new E;var z="rapidkit",V=fileURLToPath(import.meta.url),q=dirname(V),X=join(q,"..","package.json"),Q=JSON.parse(readFileSync(X,"utf-8")),S=Q.version;async function T(){try{c.debug("Checking for updates...");let{stdout:e}=await execa("npm",["view",z,"version"],{timeout:3e3}),t=e.trim();t&&t!==S?(console.log(r.yellow(`
2
+ import {Command}from'commander';import r from'chalk';import P from'inquirer';import d,{dirname,join}from'path';import {spawn}from'child_process';import {execa}from'execa';import {readFileSync,promises}from'fs';import {fileURLToPath}from'url';import ie from'os';import ae from'validate-npm-package-name';import*as u from'fs-extra';import N from'ora';var E=class{debugEnabled=false;setDebug(t){this.debugEnabled=t;}debug(t,...i){this.debugEnabled&&console.log(r.gray(`[DEBUG] ${t}`),...i);}info(t,...i){console.log(r.blue(t),...i);}success(t,...i){console.log(r.green(t),...i);}warn(t,...i){console.log(r.yellow(t),...i);}error(t,...i){console.error(r.red(t),...i);}step(t,i,a){console.log(r.cyan(`
3
+ [${t}/${i}]`),r.white(a));}},c=new E;var V="rapidkit",q=fileURLToPath(import.meta.url),X=dirname(q),Q=join(X,"..","package.json"),Z=JSON.parse(readFileSync(Q,"utf-8")),S=Z.version;async function U(){try{c.debug("Checking for updates...");let{stdout:e}=await execa("npm",["view",V,"version"],{timeout:3e3}),t=e.trim();t&&t!==S?(console.log(r.yellow(`
4
4
  \u26A0\uFE0F Update available: ${S} \u2192 ${t}`)),console.log(r.cyan(`Run: npm install -g rapidkit@latest
5
- `))):c.debug("You are using the latest version");}catch{c.debug("Could not check for updates");}}function w(){return S}var ie=".rapidkitrc.json";async function U(){let e=l.join(te.homedir(),ie);try{let t=await promises.readFile(e,"utf-8"),i=JSON.parse(t);return c.debug(`Loaded config from ${e}`),i}catch{return c.debug("No user config found, using defaults"),{}}}var v=class extends Error{constructor(i,o,n){super(i);this.code=o;this.details=n;this.name="RapidKitError",Error.captureStackTrace(this,this.constructor);}};var u=class extends v{constructor(t,i){super(`Invalid project name: "${t}"`,"INVALID_PROJECT_NAME",i);}};function O(e){let t=re(e);if(!t.validForNewPackages){let o=t.errors||[],n=t.warnings||[],s=[...o,...n];throw new u(e,`NPM validation failed: ${s.join(", ")}`)}if(!/^[a-z][a-z0-9_-]*$/.test(e))throw new u(e,"Must start with a lowercase letter and contain only lowercase letters, numbers, hyphens, and underscores");if(["test","tests","src","dist","build","lib","python","pip","poetry","node","npm","rapidkit","rapidkit"].includes(e.toLowerCase()))throw new u(e,`"${e}" is a reserved name. Please choose a different name.`);if(e.length<2)throw new u(e,"Name must be at least 2 characters long");if(e.length>214)throw new u(e,"Name must be less than 214 characters");return true}async function F(e,t){let i=N("Creating RapidKit workspace...").start();try{await promises.mkdir(e,{recursive:!0}),await promises.mkdir(l.join(e,".rapidkit"),{recursive:!0});let o={workspace_name:t.name,author:t.author,rapidkit_version:w(),created_at:new Date().toISOString(),type:"workspace"};await promises.writeFile(l.join(e,".rapidkit","config.json"),JSON.stringify(o,null,2));let n=ae();await promises.writeFile(l.join(e,"rapidkit"),n),await promises.chmod(l.join(e,"rapidkit"),493);let s=oe(t.name);if(await promises.writeFile(l.join(e,"README.md"),s),await promises.writeFile(l.join(e,".gitignore"),`# RapidKit workspace
5
+ `))):c.debug("You are using the latest version");}catch{c.debug("Could not check for updates");}}function w(){return S}var re=".rapidkitrc.json";async function O(){let e=d.join(ie.homedir(),re);try{let t=await promises.readFile(e,"utf-8"),i=JSON.parse(t);return c.debug(`Loaded config from ${e}`),i}catch{return c.debug("No user config found, using defaults"),{}}}var v=class extends Error{constructor(i,a,n){super(i);this.code=a;this.details=n;this.name="RapidKitError",Error.captureStackTrace(this,this.constructor);}};var h=class extends v{constructor(t,i){super(`Invalid project name: "${t}"`,"INVALID_PROJECT_NAME",i);}};function F(e){let t=ae(e);if(!t.validForNewPackages){let a=t.errors||[],n=t.warnings||[],s=[...a,...n];throw new h(e,`NPM validation failed: ${s.join(", ")}`)}if(!/^[a-z][a-z0-9_-]*$/.test(e))throw new h(e,"Must start with a lowercase letter and contain only lowercase letters, numbers, hyphens, and underscores");if(["test","tests","src","dist","build","lib","python","pip","poetry","node","npm","rapidkit","rapidkit"].includes(e.toLowerCase()))throw new h(e,`"${e}" is a reserved name. Please choose a different name.`);if(e.length<2)throw new h(e,"Name must be at least 2 characters long");if(e.length>214)throw new h(e,"Name must be less than 214 characters");return true}async function B(e,t){let i=N("Creating RapidKit workspace...").start();try{await promises.mkdir(e,{recursive:!0}),await promises.mkdir(d.join(e,".rapidkit"),{recursive:!0});let a={workspace_name:t.name,author:t.author,rapidkit_version:w(),created_at:new Date().toISOString(),type:"workspace"};await promises.writeFile(d.join(e,".rapidkit","config.json"),JSON.stringify(a,null,2));let n=oe();await promises.writeFile(d.join(e,"rapidkit"),n),await promises.chmod(d.join(e,"rapidkit"),493);let s=ne(t.name);if(await promises.writeFile(d.join(e,"README.md"),s),await promises.writeFile(d.join(e,".gitignore"),`# RapidKit workspace
6
6
  .env
7
7
  .env.*
8
8
  !.env.example
@@ -17,7 +17,7 @@ Thumbs.db
17
17
 
18
18
  # Logs
19
19
  *.log
20
- `),await ne(e),i.succeed("Workspace created!"),!t.skipGit){let d=N("Initializing git repository...").start();try{await execa("git",["init"],{cwd:e}),await execa("git",["add","."],{cwd:e}),await execa("git",["commit","-m","Initial commit: RapidKit workspace"],{cwd:e}),d.succeed("Git repository initialized");}catch{d.warn("Could not initialize git repository");}}console.log(`
20
+ `),await se(e),i.succeed("Workspace created!"),!t.skipGit){let l=N("Initializing git repository...").start();try{await execa("git",["init"],{cwd:e}),await execa("git",["add","."],{cwd:e}),await execa("git",["commit","-m","Initial commit: RapidKit workspace"],{cwd:e}),l.succeed("Git repository initialized");}catch{l.warn("Could not initialize git repository");}}console.log(`
21
21
  ${r.green("\u2728 RapidKit workspace created successfully!")}
22
22
 
23
23
  ${r.bold("\u{1F4C2} Workspace structure:")}
@@ -46,7 +46,7 @@ ${r.bold("\u{1F4DA} Commands:")}
46
46
 
47
47
  ${r.gray("Tip: Add workspace to PATH for easier access:")}
48
48
  ${r.cyan(`echo 'export PATH="${e}:$PATH"' >> ~/.bashrc`)}
49
- `);}catch(o){throw i.fail("Failed to create workspace"),o}}function ae(){return `#!/usr/bin/env bash
49
+ `);}catch(a){throw i.fail("Failed to create workspace"),a}}function oe(){return `#!/usr/bin/env bash
50
50
  #
51
51
  # RapidKit CLI - Local workspace commands
52
52
  # This script provides rapidkit commands within the workspace
@@ -394,7 +394,7 @@ main() {
394
394
  }
395
395
 
396
396
  main "$@"
397
- `}function oe(e){return `# ${e}
397
+ `}function ne(e){return `# ${e}
398
398
 
399
399
  RapidKit workspace for building API projects.
400
400
 
@@ -449,7 +449,7 @@ rapidkit dev # Start dev server
449
449
 
450
450
  - [RapidKit Documentation](https://rapidkit.dev)
451
451
  - [GitHub Repository](https://github.com/Baziar/rapidkit)
452
- `}async function ne(e){let{fileURLToPath:t}=await import('url'),i=t(import.meta.url),o=l.dirname(i),n=l.resolve(o,".."),s=l.join(n,"templates","kits"),p=l.join(e,".rapidkit","templates"),{default:d}=await import('fs-extra');await d.copy(s,p);let g=l.join(n,"templates","generator.js"),j=l.join(e,".rapidkit","generator.js");await d.copy(g,j);}async function B(e,t){let i=t.template==="fastapi",o=i?"FastAPI":"NestJS",n=N(`Creating ${o} project...`).start();try{let{fileURLToPath:s}=await import('url'),p=s(import.meta.url),d=l.dirname(p),g=l.resolve(d,".."),j=i?"fastapi-standard":"nestjs-standard",C=l.join(g,"templates","kits",j);await promises.mkdir(e,{recursive:!0});let _={project_name:i?t.name.replace(/-/g,"_").toLowerCase():t.name.replace(/_/g,"-").toLowerCase(),author:t.author,description:t.description||`${o} application generated with RapidKit`,app_version:"0.1.0",license:"MIT",package_manager:t.package_manager||"npm",created_at:new Date().toISOString(),rapidkit_version:w()};await K(C,e,_);let G=i?`# Python
452
+ `}async function se(e){let{fileURLToPath:t}=await import('url'),i=t(import.meta.url),a=d.dirname(i),n=d.resolve(a,".."),s=d.join(n,"templates","kits"),p=d.join(e,".rapidkit","templates"),{default:l}=await import('fs-extra');await l.copy(s,p);let g=d.join(n,"templates","generator.js"),j=d.join(e,".rapidkit","generator.js");await l.copy(g,j);}async function K(e,t){let i=t.template==="fastapi",a=i?"FastAPI":"NestJS",n=N(`Creating ${a} project...`).start();try{let{fileURLToPath:s}=await import('url'),p=s(import.meta.url),l=d.dirname(p),g=d.resolve(l,".."),j=i?"fastapi-standard":"nestjs-standard",C=d.join(g,"templates","kits",j);await promises.mkdir(e,{recursive:!0});let _={project_name:i?t.name.replace(/-/g,"_").toLowerCase():t.name.replace(/_/g,"-").toLowerCase(),author:t.author,description:t.description||`${a} application generated with RapidKit`,app_version:"0.1.0",license:"MIT",package_manager:t.package_manager||"npm",created_at:new Date().toISOString(),rapidkit_version:w()};await G(C,e,_);let W=i?`# Python
453
453
  __pycache__/
454
454
  *.py[cod]
455
455
  *$py.class
@@ -517,7 +517,7 @@ Thumbs.db
517
517
 
518
518
  # Coverage
519
519
  coverage/
520
- `;if(await promises.writeFile(l.join(e,".gitignore"),G),n.succeed(`${o} project created!`),!t.skipGit){let y=N("Initializing git repository...").start();try{await execa("git",["init"],{cwd:e}),await execa("git",["add","."],{cwd:e}),await execa("git",["commit","-m",`Initial commit: ${o} project via RapidKit`],{cwd:e}),y.succeed("Git repository initialized");}catch{y.warn("Could not initialize git repository");}}if(!t.skipInstall&&!i){let y=t.package_manager||"npm",D=N(`Installing dependencies with ${y}...`).start();try{await execa(y,["install"],{cwd:e}),D.succeed("Dependencies installed");}catch{D.warn(`Could not install dependencies. Run '${y} install' manually.`);}}let A=l.basename(e);console.log(i?`
520
+ `;if(await promises.writeFile(d.join(e,".gitignore"),W),n.succeed(`${a} project created!`),!t.skipGit){let y=N("Initializing git repository...").start();try{await execa("git",["init"],{cwd:e}),await execa("git",["add","."],{cwd:e}),await execa("git",["commit","-m",`Initial commit: ${a} project via RapidKit`],{cwd:e}),y.succeed("Git repository initialized");}catch{y.warn("Could not initialize git repository");}}if(!t.skipInstall&&!i){let y=t.package_manager||"npm",L=N(`Installing dependencies with ${y}...`).start();try{await execa(y,["install"],{cwd:e}),L.succeed("Dependencies installed");}catch{L.warn(`Could not install dependencies. Run '${y} install' manually.`);}}let D=d.basename(e);console.log(i?`
521
521
  ${r.green("\u2728 FastAPI project created successfully!")}
522
522
 
523
523
  ${r.bold("\u{1F4C2} Project structure:")}
@@ -533,7 +533,7 @@ ${e}/
533
533
  \u2514\u2500\u2500 README.md
534
534
 
535
535
  ${r.bold("\u{1F680} Get started:")}
536
- ${r.cyan(`cd ${A}`)}
536
+ ${r.cyan(`cd ${D}`)}
537
537
  ${r.cyan("rapidkit init")} ${r.gray("# Install dependencies")}
538
538
  ${r.cyan("rapidkit dev")} ${r.gray("# Start dev server")}
539
539
 
@@ -562,7 +562,7 @@ ${e}/
562
562
  \u2514\u2500\u2500 README.md
563
563
 
564
564
  ${r.bold("\u{1F680} Get started:")}
565
- ${r.cyan(`cd ${A}`)}
565
+ ${r.cyan(`cd ${D}`)}
566
566
  ${t.skipInstall?r.cyan("rapidkit init")+r.gray(" # npm install")+`
567
567
  `:""}${r.cyan("cp .env.example .env")}
568
568
  ${r.cyan("rapidkit dev")} ${r.gray("# Start dev server")}
@@ -580,26 +580,26 @@ ${r.bold("\u{1F310} API endpoints:")}
580
580
  http://localhost:8000/health # Health check
581
581
  http://localhost:8000/docs # Swagger docs
582
582
  http://localhost:8000/examples/notes # Example API
583
- `);}catch(s){throw n.fail(`Failed to create ${o} project`),s}}async function K(e,t,i){let o=await promises.readdir(e,{withFileTypes:true});for(let n of o){let s=l.join(e,n.name),p=n.name.replace(/\.j2$/,""),d=l.join(t,p);if(n.isDirectory())await promises.mkdir(d,{recursive:true}),await K(s,d,i);else {let g=await promises.readFile(s,"utf-8");n.name.endsWith(".j2")&&(g=se(g,i)),await promises.writeFile(d,g),(p==="rapidkit"||p==="activate"||p.endsWith(".py")&&d.includes(".rapidkit"))&&await promises.chmod(d,493);}}}function se(e,t){let i=e;for(let[o,n]of Object.entries(t)){let s=new RegExp(`\\{\\{\\s*${o}\\s*\\}\\}`,"g");i=i.replace(s,String(n));let p=new RegExp(`\\{\\{\\s*${o}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\}\\}`,"g");i=i.replace(p,(j,C,_)=>String(n).replace(new RegExp(C,"g"),_));let d=new RegExp(`\\{\\{\\s*${o}\\s*\\|\\s*lower\\s*\\}\\}`,"g");i=i.replace(d,String(n).toLowerCase());let g=new RegExp(`\\{\\{\\s*${o}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\|\\s*lower\\s*\\}\\}`,"g");i=i.replace(g,(j,C,_)=>String(n).replace(new RegExp(C,"g"),_).toLowerCase());}return i}var h=null,x=false,I=new Command;I.name("rapidkit").description("Create RapidKit workspaces and projects").version(w());I.argument("[name]","Name of the workspace or project directory").option("-t, --template <template>","Create project with template (fastapi, nestjs) instead of workspace").option("-y, --yes","Skip prompts and use defaults").option("--skip-git","Skip git initialization").option("--skip-install","Skip installing dependencies").option("--debug","Enable debug logging").option("--dry-run","Show what would be created without creating it").option("--no-update-check","Skip checking for updates").action(async(e,t)=>{try{t.debug&&(c.setDebug(!0),c.debug("Debug mode enabled"));let i=await U();c.debug("User config loaded",i),t.updateCheck!==!1&&await T(),console.log(r.blue.bold(`
583
+ `);}catch(s){throw n.fail(`Failed to create ${a} project`),s}}async function G(e,t,i){let a=await promises.readdir(e,{withFileTypes:true});for(let n of a){let s=d.join(e,n.name),p=n.name.replace(/\.j2$/,""),l=d.join(t,p);if(n.isDirectory())await promises.mkdir(l,{recursive:true}),await G(s,l,i);else {let g=await promises.readFile(s,"utf-8");n.name.endsWith(".j2")&&(g=ce(g,i)),await promises.writeFile(l,g),(p==="rapidkit"||p==="activate"||p.endsWith(".py")&&l.includes(".rapidkit"))&&await promises.chmod(l,493);}}}function ce(e,t){let i=e;for(let[a,n]of Object.entries(t)){let s=new RegExp(`\\{\\{\\s*${a}\\s*\\}\\}`,"g");i=i.replace(s,String(n));let p=new RegExp(`\\{\\{\\s*${a}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\}\\}`,"g");i=i.replace(p,(j,C,_)=>String(n).replace(new RegExp(C,"g"),_));let l=new RegExp(`\\{\\{\\s*${a}\\s*\\|\\s*lower\\s*\\}\\}`,"g");i=i.replace(l,String(n).toLowerCase());let g=new RegExp(`\\{\\{\\s*${a}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\|\\s*lower\\s*\\}\\}`,"g");i=i.replace(g,(j,C,_)=>String(n).replace(new RegExp(C,"g"),_).toLowerCase());}return i}var de=["init","dev","start","build","test","lint","format","help","--help","-h"];async function me(){let e=process.cwd(),t=d.join(e,"rapidkit"),i=d.join(e,".rapidkit"),[a,n]=await Promise.all([u.pathExists(t),u.pathExists(i)]);if(!a||!n)return false;let s=process.argv.slice(2),p=s[0];if(!p||!de.includes(p))return false;c.debug(`Delegating to local CLI: ./rapidkit ${s.join(" ")}`);let l=spawn(t,s,{stdio:"inherit",cwd:e});return l.on("close",g=>{process.exit(g??0);}),l.on("error",g=>{c.error(`Failed to run local rapidkit: ${g.message}`),process.exit(1);}),true}var f=null,x=false,A=new Command;A.name("rapidkit").description("Create RapidKit workspaces and projects").version(w());A.argument("[name]","Name of the workspace or project directory").option("-t, --template <template>","Create project with template (fastapi, nestjs) instead of workspace").option("-y, --yes","Skip prompts and use defaults").option("--skip-git","Skip git initialization").option("--skip-install","Skip installing dependencies").option("--debug","Enable debug logging").option("--dry-run","Show what would be created without creating it").option("--no-update-check","Skip checking for updates").action(async(e,t)=>{try{t.debug&&(c.setDebug(!0),c.debug("Debug mode enabled"));let i=await O();c.debug("User config loaded",i),t.updateCheck!==!1&&await U(),console.log(r.blue.bold(`
584
584
  \u{1F680} Welcome to RapidKit!
585
- `)),e||(le(),process.exit(0));try{O(e);}catch(p){throw p instanceof v&&(c.error(`
585
+ `)),e||(ge(),process.exit(0));try{F(e);}catch(p){throw p instanceof v&&(c.error(`
586
586
  \u274C ${p.message}`),p.details&&c.warn(`\u{1F4A1} ${p.details}
587
- `),process.exit(1)),p}let o=l.resolve(process.cwd(),e);h=o,await k.pathExists(o)&&(c.error(`
587
+ `),process.exit(1)),p}let a=d.resolve(process.cwd(),e);f=a,await u.pathExists(a)&&(c.error(`
588
588
  \u274C Directory "${e}" already exists`),console.log(r.cyan(`
589
589
  \u{1F4A1} Choose a different name or delete the existing directory.
590
- `)),process.exit(1));let n=!!t.template;if(n){let p=t.template.toLowerCase(),d=["fastapi","nestjs"];d.includes(p)||(c.error(`
590
+ `)),process.exit(1));let n=!!t.template;if(n){let p=t.template.toLowerCase(),l=["fastapi","nestjs"];l.includes(p)||(c.error(`
591
591
  \u274C Invalid template: ${t.template}`),console.log(r.cyan(`
592
- \u{1F4E6} Available templates: ${d.join(", ")}
592
+ \u{1F4E6} Available templates: ${l.join(", ")}
593
593
  `)),process.exit(1));}if(t.dryRun){console.log(r.cyan(`
594
594
  \u{1F50D} Dry-run mode - showing what would be created:
595
- `)),console.log(r.white("\u{1F4C2} Path:"),o),console.log(r.white("\u{1F4E6} Type:"),n?`Project (${t.template})`:"Workspace"),console.log();return}let s;t.yes?(s={author:process.env.USER||"RapidKit User",description:n?`${t.template==="nestjs"?"NestJS":"FastAPI"} application generated with RapidKit`:void 0,package_manager:"npm"},console.log(r.gray(`Using default values (--yes flag)
596
- `))):n?t.template.toLowerCase()==="fastapi"?s=await P.prompt([{type:"input",name:"author",message:"Author name:",default:process.env.USER||"RapidKit User"},{type:"input",name:"description",message:"Project description:",default:"FastAPI service generated with RapidKit"}]):s=await P.prompt([{type:"input",name:"author",message:"Author name:",default:process.env.USER||"RapidKit User"},{type:"input",name:"description",message:"Project description:",default:"NestJS application generated with RapidKit"},{type:"list",name:"package_manager",message:"Package manager:",choices:["npm","yarn","pnpm"],default:"npm"}]):s=await P.prompt([{type:"input",name:"author",message:"Author name:",default:process.env.USER||"RapidKit User"}]),n?await B(o,{name:e,template:t.template.toLowerCase(),author:s.author,description:s.description,package_manager:s.package_manager,skipGit:t.skipGit,skipInstall:t.skipInstall}):await F(o,{name:e,author:s.author,skipGit:t.skipGit});}catch(i){i instanceof v?(c.error(`
595
+ `)),console.log(r.white("\u{1F4C2} Path:"),a),console.log(r.white("\u{1F4E6} Type:"),n?`Project (${t.template})`:"Workspace"),console.log();return}let s;t.yes?(s={author:process.env.USER||"RapidKit User",description:n?`${t.template==="nestjs"?"NestJS":"FastAPI"} application generated with RapidKit`:void 0,package_manager:"npm"},console.log(r.gray(`Using default values (--yes flag)
596
+ `))):n?t.template.toLowerCase()==="fastapi"?s=await P.prompt([{type:"input",name:"author",message:"Author name:",default:process.env.USER||"RapidKit User"},{type:"input",name:"description",message:"Project description:",default:"FastAPI service generated with RapidKit"}]):s=await P.prompt([{type:"input",name:"author",message:"Author name:",default:process.env.USER||"RapidKit User"},{type:"input",name:"description",message:"Project description:",default:"NestJS application generated with RapidKit"},{type:"list",name:"package_manager",message:"Package manager:",choices:["npm","yarn","pnpm"],default:"npm"}]):s=await P.prompt([{type:"input",name:"author",message:"Author name:",default:process.env.USER||"RapidKit User"}]),n?await K(a,{name:e,template:t.template.toLowerCase(),author:s.author,description:s.description,package_manager:s.package_manager,skipGit:t.skipGit,skipInstall:t.skipInstall}):await B(a,{name:e,author:s.author,skipGit:t.skipGit});}catch(i){i instanceof v?(c.error(`
597
597
  \u274C ${i.message}`),i.details&&c.warn(`\u{1F4A1} ${i.details}`),c.debug("Error code:",i.code)):(c.error(`
598
- \u274C An unexpected error occurred:`),console.error(i)),process.exit(1);}finally{h=null;}});function le(){console.log(r.white(`Usage: npx rapidkit <name> [options]
598
+ \u274C An unexpected error occurred:`),console.error(i)),process.exit(1);}finally{f=null;}});function ge(){console.log(r.white(`Usage: npx rapidkit <name> [options]
599
599
  `)),console.log(r.bold("Create a workspace (recommended):")),console.log(r.cyan(" npx rapidkit my-workspace")),console.log(r.cyan(" cd my-workspace")),console.log(r.cyan(" rapidkit create my-api --template fastapi")),console.log(r.cyan(" cd my-api")),console.log(r.cyan(` rapidkit dev
600
600
  `)),console.log(r.bold("Or create a project directly:")),console.log(r.cyan(" npx rapidkit my-project --template fastapi")),console.log(r.cyan(` npx rapidkit my-project --template nestjs
601
601
  `)),console.log(r.bold("Options:")),console.log(r.gray(" -t, --template <template> Create project with template (fastapi, nestjs)")),console.log(r.gray(" -y, --yes Skip prompts and use defaults")),console.log(r.gray(" --skip-git Skip git initialization")),console.log(r.gray(" --skip-install Skip installing dependencies")),console.log(r.gray(" --debug Enable debug logging")),console.log(r.gray(` --dry-run Show what would be created
602
602
  `)),console.log(r.bold("Templates:")),console.log(r.gray(" fastapi FastAPI + Python")),console.log(r.gray(` nestjs NestJS + TypeScript
603
603
  `));}process.on("SIGINT",async()=>{if(!x){if(x=true,console.log(r.yellow(`
604
604
 
605
- \u26A0\uFE0F Interrupted by user`)),h&&await k.pathExists(h)){console.log(r.gray("Cleaning up partial installation..."));try{await k.remove(h),console.log(r.green("\u2713 Cleanup complete"));}catch(e){c.debug("Cleanup failed:",e);}}process.exit(130);}});process.on("SIGTERM",async()=>{if(!x){if(x=true,c.debug("Received SIGTERM"),h&&await k.pathExists(h))try{await k.remove(h);}catch(e){c.debug("Cleanup failed:",e);}process.exit(143);}});I.parse();
605
+ \u26A0\uFE0F Interrupted by user`)),f&&await u.pathExists(f)){console.log(r.gray("Cleaning up partial installation..."));try{await u.remove(f),console.log(r.green("\u2713 Cleanup complete"));}catch(e){c.debug("Cleanup failed:",e);}}process.exit(130);}});process.on("SIGTERM",async()=>{if(!x){if(x=true,c.debug("Received SIGTERM"),f&&await u.pathExists(f))try{await u.remove(f);}catch(e){c.debug("Cleanup failed:",e);}process.exit(143);}});me().then(e=>{e||A.parse();});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapidkit",
3
- "version": "0.12.2",
3
+ "version": "0.12.3",
4
4
  "type": "module",
5
5
  "description": "Create RapidKit projects with a single command - The official CLI for RapidKit framework",
6
6
  "keywords": [