rapidkit 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
- import {Command}from'commander';import i from'chalk';import {promises}from'fs';import*as h from'fs-extra';import y from'path';import oe from'inquirer';import W from'ora';import {execa}from'execa';import ee from'os';import ce from'nunjucks';import {fileURLToPath}from'url';import he from'validate-npm-package-name';var G=class{debugEnabled=false;setDebug(e){this.debugEnabled=e;}debug(e,...o){this.debugEnabled&&console.log(i.gray(`[DEBUG] ${e}`),...o);}info(e,...o){console.log(i.blue(e),...o);}success(e,...o){console.log(i.green(e),...o);}warn(e,...o){console.log(i.yellow(e),...o);}error(e,...o){console.error(i.red(e),...o);}step(e,o,r){console.log(i.cyan(`
3
- [${e}/${o}]`),i.white(r));}},s=new G;var te=".rapidkitrc.json";async function z(){let t=y.join(ee.homedir(),te);try{let e=await promises.readFile(t,"utf-8"),o=JSON.parse(e);return s.debug(`Loaded config from ${t}`),o}catch{return s.debug("No user config found, using defaults"),{}}}function $(t){return process.env.RAPIDKIT_DEV_PATH||t.testRapidKitPath||void 0}var g=class extends Error{constructor(o,r,n){super(o);this.code=r;this.details=n;this.name="RapidKitError",Error.captureStackTrace(this,this.constructor);}},x=class extends g{constructor(e,o){let r=o?`Python ${e}+ required, found ${o}`:`Python ${e}+ not found`;super(r,"PYTHON_NOT_FOUND","Please install Python from https://www.python.org/downloads/");}},F=class extends g{constructor(){super("Poetry is not installed","POETRY_NOT_FOUND","Install Poetry from https://python-poetry.org/docs/#installation");}},N=class extends g{constructor(){super("pipx is not installed","PIPX_NOT_FOUND","Install pipx from https://pypa.github.io/pipx/installation/");}},T=class extends g{constructor(e){super(`Directory "${e}" already exists`,"DIRECTORY_EXISTS","Please choose a different name or remove the existing directory");}},k=class extends g{constructor(e,o){super(`Invalid project name: "${e}"`,"INVALID_PROJECT_NAME",o);}},I=class extends g{constructor(e,o){let r=`Installation failed at: ${e}`,n=`${o.message}
2
+ import {Command}from'commander';import i from'chalk';import {readFileSync,promises}from'fs';import*as h from'fs-extra';import y,{dirname,join}from'path';import oe from'inquirer';import W from'ora';import {execa}from'execa';import ee from'os';import ce from'nunjucks';import {fileURLToPath}from'url';import je from'validate-npm-package-name';var G=class{debugEnabled=false;setDebug(e){this.debugEnabled=e;}debug(e,...o){this.debugEnabled&&console.log(i.gray(`[DEBUG] ${e}`),...o);}info(e,...o){console.log(i.blue(e),...o);}success(e,...o){console.log(i.green(e),...o);}warn(e,...o){console.log(i.yellow(e),...o);}error(e,...o){console.error(i.red(e),...o);}step(e,o,r){console.log(i.cyan(`
3
+ [${e}/${o}]`),i.white(r));}},s=new G;var te=".rapidkitrc.json";async function z(){let t=y.join(ee.homedir(),te);try{let e=await promises.readFile(t,"utf-8"),o=JSON.parse(e);return s.debug(`Loaded config from ${t}`),o}catch{return s.debug("No user config found, using defaults"),{}}}function F(t){return process.env.RAPIDKIT_DEV_PATH||t.testRapidKitPath||void 0}var g=class extends Error{constructor(o,r,n){super(o);this.code=r;this.details=n;this.name="RapidKitError",Error.captureStackTrace(this,this.constructor);}},b=class extends g{constructor(e,o){let r=o?`Python ${e}+ required, found ${o}`:`Python ${e}+ not found`;super(r,"PYTHON_NOT_FOUND","Please install Python from https://www.python.org/downloads/");}},$=class extends g{constructor(){super("Poetry is not installed","POETRY_NOT_FOUND","Install Poetry from https://python-poetry.org/docs/#installation");}},N=class extends g{constructor(){super("pipx is not installed","PIPX_NOT_FOUND","Install pipx from https://pypa.github.io/pipx/installation/");}},T=class extends g{constructor(e){super(`Directory "${e}" already exists`,"DIRECTORY_EXISTS","Please choose a different name or remove the existing directory");}},k=class extends g{constructor(e,o){super(`Invalid project name: "${e}"`,"INVALID_PROJECT_NAME",o);}},j=class extends g{constructor(e,o){let r=`Installation failed at: ${e}`,n=`${o.message}
4
4
 
5
5
  Troubleshooting:
6
6
  - Check your internet connection
7
7
  - Verify Python/Poetry installation
8
- - Try running with --debug flag for more details`;super(r,"INSTALLATION_ERROR",n);}},E=class extends g{constructor(){super("RapidKit Python package is not yet available on PyPI","RAPIDKIT_NOT_AVAILABLE",`Available options:
8
+ - Try running with --debug flag for more details`;super(r,"INSTALLATION_ERROR",n);}},x=class extends g{constructor(){super("RapidKit Python package is not yet available on PyPI","RAPIDKIT_NOT_AVAILABLE",`Available options:
9
9
  1. Demo mode: npx rapidkit my-workspace --demo
10
10
  2. Test mode: npx rapidkit my-workspace --test-mode (requires local RapidKit)
11
11
  3. Wait for official PyPI release (coming soon)`);}};async function U(t,e){let{skipGit:o=false,testMode:r=false,demoMode:n=false,dryRun:m=false,userConfig:p={}}=e,a=t,l=y.resolve(process.cwd(),a);if(await h.pathExists(l))throw new T(a);if(m){await le(l,a,n,p);return}if(n){await se(l,a,o);return}let f=await oe.prompt([{type:"list",name:"pythonVersion",message:"Select Python version for RapidKit:",choices:["3.10","3.11","3.12"],default:p.pythonVersion||"3.11"},{type:"list",name:"installMethod",message:"How would you like to install RapidKit?",choices:[{name:"\u{1F3AF} Poetry (Recommended - includes virtual env)",value:"poetry"},{name:"\u{1F4E6} pip with venv (Standard)",value:"venv"},{name:"\u{1F527} pipx (Global isolated install)",value:"pipx"}],default:p.defaultInstallMethod||"poetry"}]);s.step(1,3,"Setting up RapidKit environment");let u=W("Creating directory").start();try{if(await h.ensureDir(l),u.succeed("Directory created"),f.installMethod==="poetry"?await ie(l,f.pythonVersion,u,r,p):f.installMethod==="venv"?await re(l,f.pythonVersion,u,r,p):await ne(l,u,r,p),await ae(l,f.installMethod),u.succeed("RapidKit environment ready!"),!e.skipGit){u.start("Initializing git repository");try{await execa("git",["init"],{cwd:l}),await h.outputFile(y.join(l,".gitignore"),`.venv/
@@ -16,12 +16,12 @@ __pycache__/
16
16
  `,"utf-8"),await execa("git",["add","."],{cwd:l}),await execa("git",["commit","-m","Initial commit: RapidKit environment"],{cwd:l}),u.succeed("Git repository initialized");}catch{u.warn("Could not initialize git repository");}}if(console.log(i.green(`
17
17
  \u2728 RapidKit environment created successfully!
18
18
  `)),console.log(i.cyan("\u{1F4C2} Location:"),i.white(l)),console.log(i.cyan(`\u{1F680} Get started:
19
- `)),console.log(i.white(` cd ${a}`)),f.installMethod==="poetry"){let v="source $(poetry env info --path)/bin/activate";try{let{stdout:A}=await execa("poetry",["--version"]),D=A.match(/Poetry.*?(\d+)\.(\d+)/);D&&(parseInt(D[1])>=2?v="source $(poetry env info --path)/bin/activate":v="poetry shell");}catch{}console.log(i.white(` ${v} # Or: poetry run rapidkit`)),console.log(i.white(" rapidkit create # Interactive mode")),console.log(i.white(" cd <project-name> && poetry install && rapidkit run dev"));}else f.installMethod==="venv"?(console.log(i.white(" source .venv/bin/activate # On Windows: .venv\\Scripts\\activate")),console.log(i.white(" rapidkit create # Interactive mode")),console.log(i.white(" cd <project-name> && pip install -r requirements.txt && rapidkit run dev"))):(console.log(i.white(" rapidkit create # Interactive mode")),console.log(i.white(" cd <project-name> && rapidkit run dev")));console.log(i.white(`
19
+ `)),console.log(i.white(` cd ${a}`)),f.installMethod==="poetry"){let v="source $(poetry env info --path)/bin/activate";try{let{stdout:C}=await execa("poetry",["--version"]),D=C.match(/Poetry.*?(\d+)\.(\d+)/);D&&(parseInt(D[1])>=2?v="source $(poetry env info --path)/bin/activate":v="poetry shell");}catch{}console.log(i.white(` ${v} # Or: poetry run rapidkit`)),console.log(i.white(" rapidkit create # Interactive mode")),console.log(i.white(" cd <project-name> && poetry install && rapidkit run dev"));}else f.installMethod==="venv"?(console.log(i.white(" source .venv/bin/activate # On Windows: .venv\\Scripts\\activate")),console.log(i.white(" rapidkit create # Interactive mode")),console.log(i.white(" cd <project-name> && pip install -r requirements.txt && rapidkit run dev"))):(console.log(i.white(" rapidkit create # Interactive mode")),console.log(i.white(" cd <project-name> && rapidkit run dev")));console.log(i.white(`
20
20
  \u{1F4A1} For more information, check the README.md file.`)),console.log(i.cyan(`
21
21
  \u{1F4DA} RapidKit commands:`)),console.log(i.white(" rapidkit create - Create a new project (interactive)")),console.log(i.white(" rapidkit run dev - Run development server")),console.log(i.white(" rapidkit add module <name> - Add a module (e.g., settings)")),console.log(i.white(" rapidkit list - List available kits")),console.log(i.white(" rapidkit modules - List available modules")),console.log(i.white(` rapidkit --help - Show all commands
22
22
  `));}catch(v){u.fail("Failed to create RapidKit environment"),console.error(i.red(`
23
- \u274C Error:`),v);try{await h.remove(l);}catch{}process.exit(1);}}async function ie(t,e,o,r,n){o.start("Checking Poetry installation");try{await execa("poetry",["--version"]),o.succeed("Poetry found");}catch{throw new F}o.start("Initializing Poetry project"),await execa("poetry",["init","--no-interaction","--python",`^${e}`],{cwd:t});let m=y.join(t,"pyproject.toml"),a=(await promises.readFile(m,"utf-8")).replace("[tool.poetry]",`[tool.poetry]
24
- package-mode = false`);if(await promises.writeFile(m,a,"utf-8"),o.succeed("Poetry project initialized"),o.start("Installing RapidKit"),r){let l=$(n||{});if(!l)throw new I("Test mode installation",new Error("No local RapidKit path configured. Set RAPIDKIT_DEV_PATH environment variable."));s.debug(`Installing from local path: ${l}`),o.text="Installing RapidKit from local path (test mode)",await execa("poetry",["add",l],{cwd:t});}else {o.text="Installing RapidKit from PyPI";try{await execa("poetry",["add","rapidkit"],{cwd:t});}catch{throw new E}}o.succeed("RapidKit installed");}async function re(t,e,o,r,n){o.start(`Checking Python ${e}`);let m="python3";try{let{stdout:a}=await execa(m,["--version"]),l=a.match(/Python (\d+\.\d+)/)?.[1];if(l&&parseFloat(l)<parseFloat(e))throw new x(e,l);o.succeed(`Python ${l} found`);}catch(a){throw a instanceof x?a:new x(e)}o.start("Creating virtual environment"),await execa(m,["-m","venv",".venv"],{cwd:t}),o.succeed("Virtual environment created"),o.start("Installing RapidKit");let p=y.join(t,".venv","bin","pip");if(await execa(p,["install","--upgrade","pip"],{cwd:t}),r){let a=$(n||{});if(!a)throw new I("Test mode installation",new Error("No local RapidKit path configured. Set RAPIDKIT_DEV_PATH environment variable."));s.debug(`Installing from local path: ${a}`),o.text="Installing RapidKit from local path (test mode)",await execa(p,["install","-e",a],{cwd:t});}else {o.text="Installing RapidKit from PyPI";try{await execa(p,["install","rapidkit"],{cwd:t});}catch{throw new E}}o.succeed("RapidKit installed");}async function ne(t,e,o,r){e.start("Checking pipx installation");try{await execa("pipx",["--version"]),e.succeed("pipx found");}catch{throw new N}if(e.start("Installing RapidKit globally with pipx"),o){let n=$(r||{});if(!n)throw new I("Test mode installation",new Error("No local RapidKit path configured. Set RAPIDKIT_DEV_PATH environment variable."));s.debug(`Installing from local path: ${n}`),e.text="Installing RapidKit from local path (test mode)",await execa("pipx",["install","-e",n]);}else {e.text="Installing RapidKit from PyPI";try{await execa("pipx",["install","rapidkit"]);}catch{throw new E}}e.succeed("RapidKit installed globally"),await h.outputFile(y.join(t,".rapidkit-global"),`RapidKit installed globally with pipx
23
+ \u274C Error:`),v);try{await h.remove(l);}catch{}process.exit(1);}}async function ie(t,e,o,r,n){o.start("Checking Poetry installation");try{await execa("poetry",["--version"]),o.succeed("Poetry found");}catch{throw new $}o.start("Initializing Poetry project"),await execa("poetry",["init","--no-interaction","--python",`^${e}`],{cwd:t});let m=y.join(t,"pyproject.toml"),a=(await promises.readFile(m,"utf-8")).replace("[tool.poetry]",`[tool.poetry]
24
+ package-mode = false`);if(await promises.writeFile(m,a,"utf-8"),o.succeed("Poetry project initialized"),o.start("Installing RapidKit"),r){let l=F(n||{});if(!l)throw new j("Test mode installation",new Error("No local RapidKit path configured. Set RAPIDKIT_DEV_PATH environment variable."));s.debug(`Installing from local path: ${l}`),o.text="Installing RapidKit from local path (test mode)",await execa("poetry",["add",l],{cwd:t});}else {o.text="Installing RapidKit from PyPI";try{await execa("poetry",["add","rapidkit"],{cwd:t});}catch{throw new x}}o.succeed("RapidKit installed");}async function re(t,e,o,r,n){o.start(`Checking Python ${e}`);let m="python3";try{let{stdout:a}=await execa(m,["--version"]),l=a.match(/Python (\d+\.\d+)/)?.[1];if(l&&parseFloat(l)<parseFloat(e))throw new b(e,l);o.succeed(`Python ${l} found`);}catch(a){throw a instanceof b?a:new b(e)}o.start("Creating virtual environment"),await execa(m,["-m","venv",".venv"],{cwd:t}),o.succeed("Virtual environment created"),o.start("Installing RapidKit");let p=y.join(t,".venv","bin","pip");if(await execa(p,["install","--upgrade","pip"],{cwd:t}),r){let a=F(n||{});if(!a)throw new j("Test mode installation",new Error("No local RapidKit path configured. Set RAPIDKIT_DEV_PATH environment variable."));s.debug(`Installing from local path: ${a}`),o.text="Installing RapidKit from local path (test mode)",await execa(p,["install","-e",a],{cwd:t});}else {o.text="Installing RapidKit from PyPI";try{await execa(p,["install","rapidkit"],{cwd:t});}catch{throw new x}}o.succeed("RapidKit installed");}async function ne(t,e,o,r){e.start("Checking pipx installation");try{await execa("pipx",["--version"]),e.succeed("pipx found");}catch{throw new N}if(e.start("Installing RapidKit globally with pipx"),o){let n=F(r||{});if(!n)throw new j("Test mode installation",new Error("No local RapidKit path configured. Set RAPIDKIT_DEV_PATH environment variable."));s.debug(`Installing from local path: ${n}`),e.text="Installing RapidKit from local path (test mode)",await execa("pipx",["install","-e",n]);}else {e.text="Installing RapidKit from PyPI";try{await execa("pipx",["install","rapidkit"]);}catch{throw new x}}e.succeed("RapidKit installed globally"),await h.outputFile(y.join(t,".rapidkit-global"),`RapidKit installed globally with pipx
25
25
  `,"utf-8");}async function ae(t,e){let r=`# RapidKit Workspace
26
26
 
27
27
  This directory contains a RapidKit development environment.
@@ -270,7 +270,7 @@ __pycache__/
270
270
  \u{1F4DD} Files to create:`)),console.log(i.gray(" - pyproject.toml (Poetry) or .venv/ (venv)")),console.log(i.gray(" - README.md")),console.log(i.gray(" - .gitignore")),console.log(i.white(`
271
271
  \u{1F3AF} Next steps after creation:`)),console.log(i.gray(" 1. Install RapidKit Python package")),console.log(i.gray(" 2. Create projects with rapidkit CLI")),console.log(i.gray(" 3. Add modules and customize"))),console.log(i.white(`
272
272
  \u{1F4A1} To proceed with actual creation, run without --dry-run flag
273
- `));}var me=fileURLToPath(import.meta.url),ge=y.dirname(me);async function Y(t,e){let o=W("Generating FastAPI demo project...").start();try{let r=y.resolve(ge,".."),n=y.join(r,"templates","kits","fastapi-standard"),m=ce.configure(n,{autoescape:!1,trimBlocks:!0,lstripBlocks:!0}),p={project_name:e.project_name,author:e.author||"RapidKit User",description:e.description||"FastAPI service generated with RapidKit",app_version:e.app_version||"0.1.0",license:e.license||"MIT"},a=["src/main.py.j2","src/__init__.py.j2","src/cli.py.j2","src/routing/__init__.py.j2","src/routing/health.py.j2","src/modules/__init__.py.j2","tests/__init__.py.j2","README.md.j2","pyproject.toml.j2"];for(let f of a){let u=y.join(n,f),v=await promises.readFile(u,"utf-8"),A=m.renderString(v,p),D=f.replace(/\.j2$/,""),O=y.join(t,D);await promises.mkdir(y.dirname(O),{recursive:!0}),await promises.writeFile(O,A);}await promises.writeFile(y.join(t,".gitignore"),`# Python
273
+ `));}var me=fileURLToPath(import.meta.url),ge=y.dirname(me);async function Y(t,e){let o=W("Generating FastAPI demo project...").start();try{let r=y.resolve(ge,".."),n=y.join(r,"templates","kits","fastapi-standard"),m=ce.configure(n,{autoescape:!1,trimBlocks:!0,lstripBlocks:!0}),p={project_name:e.project_name,author:e.author||"RapidKit User",description:e.description||"FastAPI service generated with RapidKit",app_version:e.app_version||"0.1.0",license:e.license||"MIT"},a=["src/main.py.j2","src/__init__.py.j2","src/cli.py.j2","src/routing/__init__.py.j2","src/routing/health.py.j2","src/modules/__init__.py.j2","tests/__init__.py.j2","README.md.j2","pyproject.toml.j2"];for(let f of a){let u=y.join(n,f),v=await promises.readFile(u,"utf-8"),C=m.renderString(v,p),D=f.replace(/\.j2$/,""),O=y.join(t,D);await promises.mkdir(y.dirname(O),{recursive:!0}),await promises.writeFile(O,C);}await promises.writeFile(y.join(t,".gitignore"),`# Python
274
274
  __pycache__/
275
275
  *.py[cod]
276
276
  *$py.class
@@ -338,9 +338,9 @@ ${i.bold("\u{1F4DA} Next steps:")}
338
338
 
339
339
  ${i.yellow("Note:")} This is a standalone demo. For full RapidKit features and modules,
340
340
  install RapidKit Python package: ${i.cyan("pipx install rapidkit")}
341
- `);}catch(r){throw o.fail("Failed to generate demo project"),r}}var ye="rapidkit",L="1.0.0-beta.7";async function H(){try{s.debug("Checking for updates...");let{stdout:t}=await execa("npm",["view",ye,"version"],{timeout:3e3}),e=t.trim();e&&e!==L?(console.log(i.yellow(`
341
+ `);}catch(r){throw o.fail("Failed to generate demo project"),r}}var ve="rapidkit",ke=fileURLToPath(import.meta.url),Re=dirname(ke),Pe=join(Re,"..","package.json"),be=JSON.parse(readFileSync(Pe,"utf-8")),L=be.version;async function H(){try{s.debug("Checking for updates...");let{stdout:t}=await execa("npm",["view",ve,"version"],{timeout:3e3}),e=t.trim();e&&e!==L?(console.log(i.yellow(`
342
342
  \u26A0\uFE0F Update available: ${L} \u2192 ${e}`)),console.log(i.cyan(`Run: npm install -g rapidkit@latest
343
- `))):s.debug("You are using the latest version");}catch{s.debug("Could not check for updates");}}function B(){return L}function V(t){let e=he(t);if(!e.validForNewPackages){let r=e.errors||[],n=e.warnings||[],m=[...r,...n];throw new k(t,`NPM validation failed: ${m.join(", ")}`)}if(!/^[a-z][a-z0-9_-]*$/.test(t))throw new k(t,"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(t.toLowerCase()))throw new k(t,`"${t}" is a reserved name. Please choose a different name.`);if(t.length<2)throw new k(t,"Name must be at least 2 characters long");if(t.length>214)throw new k(t,"Name must be less than 214 characters");return true}var w=null,M=false,X=new Command;X.name("rapidkit").description("Create a RapidKit development environment or workspace").version(B()).argument("[directory-name]","Name of the workspace or project directory").option("--skip-git","Skip git initialization").option("--test-mode","Install RapidKit from local path (for development/testing only)").option("--demo","Create workspace with demo kit templates (no Python installation required)").option("--demo-only","Generate a demo project in current directory (used by demo workspace)").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(t,e)=>{try{e.debug&&(s.setDebug(!0),s.debug("Debug mode enabled"));let o=await z();if(s.debug("User config loaded",o),e.updateCheck!==!1&&await H(),console.log(i.blue.bold(`
343
+ `))):s.debug("You are using the latest version");}catch{s.debug("Could not check for updates");}}function J(){return L}function V(t){let e=je(t);if(!e.validForNewPackages){let r=e.errors||[],n=e.warnings||[],m=[...r,...n];throw new k(t,`NPM validation failed: ${m.join(", ")}`)}if(!/^[a-z][a-z0-9_-]*$/.test(t))throw new k(t,"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(t.toLowerCase()))throw new k(t,`"${t}" is a reserved name. Please choose a different name.`);if(t.length<2)throw new k(t,"Name must be at least 2 characters long");if(t.length>214)throw new k(t,"Name must be less than 214 characters");return true}var w=null,M=false,X=new Command;X.name("rapidkit").description("Create a RapidKit development environment or workspace").version(J()).argument("[directory-name]","Name of the workspace or project directory").option("--skip-git","Skip git initialization").option("--test-mode","Install RapidKit from local path (for development/testing only)").option("--demo","Create workspace with demo kit templates (no Python installation required)").option("--demo-only","Generate a demo project in current directory (used by demo workspace)").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(t,e)=>{try{e.debug&&(s.setDebug(!0),s.debug("Debug mode enabled"));let o=await z();if(s.debug("User config loaded",o),e.updateCheck!==!1&&await H(),console.log(i.blue.bold(`
344
344
  \u{1F680} Welcome to RapidKit!
345
345
  `)),e.demoOnly){let n=t||"my-fastapi-project";try{V(n);}catch(a){throw a instanceof g&&(s.error(`
346
346
  \u274C ${a.message}`),a.details&&s.warn(`\u{1F4A1} ${a.details}
@@ -0,0 +1,86 @@
1
+ {
2
+ "name": "rapidkit",
3
+ "version": "0.10.0",
4
+ "type": "module",
5
+ "description": "Create RapidKit projects with a single command - The official CLI for RapidKit framework",
6
+ "keywords": [
7
+ "rapidkit",
8
+ "cli",
9
+ "create",
10
+ "fastapi",
11
+ "nestjs",
12
+ "backend",
13
+ "microservices",
14
+ "generator",
15
+ "scaffold"
16
+ ],
17
+ "author": "RapidKit Team",
18
+ "license": "MIT",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/getrapidkit/rapidkit-npm.git"
22
+ },
23
+ "bin": {
24
+ "rapidkit": "dist/index.js"
25
+ },
26
+ "files": [
27
+ "dist",
28
+ "templates"
29
+ ],
30
+ "scripts": {
31
+ "build": "tsup",
32
+ "build:watch": "tsup --watch",
33
+ "dev": "tsup --watch",
34
+ "prepare": "husky",
35
+ "test": "vitest run",
36
+ "test:watch": "vitest",
37
+ "test:coverage": "vitest run --coverage",
38
+ "test:e2e": "vitest run src/__tests__/e2e.test.ts",
39
+ "lint": "eslint src --ext .ts",
40
+ "lint:fix": "eslint src --ext .ts --fix",
41
+ "format": "prettier --write \"src/**/*.ts\"",
42
+ "format:check": "prettier --check \"src/**/*.ts\"",
43
+ "typecheck": "tsc --noEmit",
44
+ "validate": "npm run typecheck && npm run lint && npm run format:check && npm test",
45
+ "security": "npm audit --audit-level=moderate",
46
+ "bundle-size": "npm run build && du -sh dist/ && ls -lh dist/"
47
+ },
48
+ "dependencies": {
49
+ "chalk": "^5.3.0",
50
+ "commander": "^12.1.0",
51
+ "execa": "^9.3.1",
52
+ "fs-extra": "^11.2.0",
53
+ "inquirer": "^9.2.23",
54
+ "nunjucks": "^3.2.4",
55
+ "ora": "^8.0.1",
56
+ "validate-npm-package-name": "^5.0.1"
57
+ },
58
+ "devDependencies": {
59
+ "@types/fs-extra": "^11.0.4",
60
+ "@types/inquirer": "^9.0.7",
61
+ "@types/node": "^20.14.0",
62
+ "@types/nunjucks": "^3.2.6",
63
+ "@types/validate-npm-package-name": "^4.0.2",
64
+ "@typescript-eslint/eslint-plugin": "^8.46.2",
65
+ "@typescript-eslint/parser": "^8.46.2",
66
+ "@vitest/coverage-v8": "^2.0.0",
67
+ "@vitest/ui": "^2.0.0",
68
+ "eslint": "^8.57.1",
69
+ "husky": "^9.1.7",
70
+ "lint-staged": "^15.5.2",
71
+ "prettier": "^3.6.2",
72
+ "tsup": "^8.5.0",
73
+ "typescript": "^5.5.0",
74
+ "vitest": "^2.0.0"
75
+ },
76
+ "engines": {
77
+ "node": ">=18.0.0"
78
+ },
79
+ "lint-staged": {
80
+ "*.ts": [
81
+ "eslint --fix",
82
+ "prettier --write"
83
+ ]
84
+ },
85
+ "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
86
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapidkit",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "type": "module",
5
5
  "description": "Create RapidKit projects with a single command - The official CLI for RapidKit framework",
6
6
  "keywords": [