rapidkit 0.13.0 → 0.14.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.
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # rapidkit
1
+ # RapidKit CLI
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/rapidkit.svg?style=flat-square)](https://www.npmjs.com/package/rapidkit)
4
4
  [![npm downloads](https://img.shields.io/npm/dm/rapidkit.svg?style=flat-square)](https://www.npmjs.com/package/rapidkit)
@@ -199,6 +199,8 @@ MIT
199
199
 
200
200
  ---
201
201
 
202
+ **v0.13.0** - NestJS test coverage boost (75%→90%), demo-kit improvements
203
+
202
204
  **v0.12.4** - Friendly shell activation UX with green headers and robust fallback logic
203
205
 
204
206
  **v0.12.2** - Simplified CLI: `rapidkit init` now handles environment activation automatically
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {Command}from'commander';import r from'chalk';import O from'inquirer';import l,{dirname,join}from'path';import {spawn}from'child_process';import {execa}from'execa';import y,{readFileSync,promises}from'fs';import {fileURLToPath}from'url';import le from'os';import me from'validate-npm-package-name';import*as h from'fs-extra';import A from'ora';var F=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,n){console.log(r.cyan(`
2
+ import {Command}from'commander';import r from'chalk';import O from'inquirer';import l,{dirname,join}from'path';import {spawn}from'child_process';import {execa}from'execa';import k,{readFileSync,promises}from'fs';import {fileURLToPath}from'url';import le from'os';import me from'validate-npm-package-name';import*as h from'fs-extra';import A from'ora';var F=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,n){console.log(r.cyan(`
3
3
  [${t}/${i}]`),r.white(n));}},m=new F;var ne="rapidkit",oe=fileURLToPath(import.meta.url),ae=dirname(oe),re=join(ae,"..","package.json"),se=JSON.parse(readFileSync(re,"utf-8")),V=se.version;async function J(){try{m.debug("Checking for updates...");let{stdout:e}=await execa("npm",["view",ne,"version"],{timeout:3e3}),t=e.trim();t&&t!==V?(console.log(r.yellow(`
4
4
  \u26A0\uFE0F Update available: ${V} \u2192 ${t}`)),console.log(r.cyan(`Run: npm install -g rapidkit@latest
5
5
  `))):m.debug("You are using the latest version");}catch{m.debug("Could not check for updates");}}function N(){return V}var de=".rapidkitrc.json";async function W(){let e=l.join(le.homedir(),de);try{let t=await promises.readFile(e,"utf-8"),i=JSON.parse(t);return m.debug(`Loaded config from ${e}`),i}catch{return m.debug("No user config found, using defaults"),{}}}var S=class extends Error{constructor(i,n,a){super(i);this.code=n;this.details=a;this.name="RapidKitError",Error.captureStackTrace(this,this.constructor);}};var v=class extends S{constructor(t,i){super(`Invalid project name: "${t}"`,"INVALID_PROJECT_NAME",i);}};function M(e){let t=me(e);if(!t.validForNewPackages){let n=t.errors||[],a=t.warnings||[],s=[...n,...a];throw new v(e,`NPM validation failed: ${s.join(", ")}`)}if(!/^[a-z][a-z0-9_-]*$/.test(e))throw new v(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 v(e,`"${e}" is a reserved name. Please choose a different name.`);if(e.length<2)throw new v(e,"Name must be at least 2 characters long");if(e.length>214)throw new v(e,"Name must be less than 214 characters");return true}async function H(e,t){let i=A("Creating RapidKit workspace...").start();try{await promises.mkdir(e,{recursive:!0}),await promises.mkdir(l.join(e,".rapidkit"),{recursive:!0});let n={workspace_name:t.name,author:t.author,rapidkit_version:N(),created_at:new Date().toISOString(),type:"workspace"};await promises.writeFile(l.join(e,".rapidkit","config.json"),JSON.stringify(n,null,2));let a=ge();await promises.writeFile(l.join(e,"rapidkit"),a),await promises.chmod(l.join(e,"rapidkit"),493);let s=ue(t.name);if(await promises.writeFile(l.join(e,"README.md"),s),await promises.writeFile(l.join(e,".gitignore"),`# RapidKit workspace
@@ -577,10 +577,10 @@ ${r.bold("\u{1F310} API endpoints:")}
577
577
  http://localhost:8000/examples/notes # Example API
578
578
 
579
579
  ${r.gray("\u{1F4A1} Tip: Install globally (npm i -g rapidkit) to use without npx")}
580
- `);}catch(s){throw a.fail(`Failed to create ${n} project`),s}}async function z(e,t,i){let n=await promises.readdir(e,{withFileTypes:true});for(let a of n){let s=l.join(e,a.name),c=a.name.replace(/\.j2$/,""),o=l.join(t,c);if(a.isDirectory())await promises.mkdir(o,{recursive:true}),await z(s,o,i);else {let d=await promises.readFile(s,"utf-8");a.name.endsWith(".j2")&&(d=he(d,i)),await promises.writeFile(o,d),(c==="rapidkit"||c==="activate"||c.endsWith(".py")&&o.includes(".rapidkit"))&&await promises.chmod(o,493);}}}function he(e,t){let i=e;for(let[n,a]of Object.entries(t)){let s=new RegExp(`\\{\\{\\s*${n}\\s*\\}\\}`,"g");i=i.replace(s,String(a));let c=new RegExp(`\\{\\{\\s*${n}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\}\\}`,"g");i=i.replace(c,(f,$,j)=>String(a).replace(new RegExp($,"g"),j));let o=new RegExp(`\\{\\{\\s*${n}\\s*\\|\\s*lower\\s*\\}\\}`,"g");i=i.replace(o,String(a).toLowerCase());let d=new RegExp(`\\{\\{\\s*${n}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\|\\s*lower\\s*\\}\\}`,"g");i=i.replace(d,(f,$,j)=>String(a).replace(new RegExp($,"g"),j).toLowerCase());}return i}var B=["init","dev","start","build","test","lint","format","create","help","--help","-h"];function ye(e){let t=e;for(;;){let i=l.join(t,".rapidkit","context.json");if(y.existsSync(i))return i;let n=l.dirname(t);if(n===t)break;t=n;}return null}function $e(e){let t=process.platform==="win32",i=e;for(;;){if(t){let c=l.join(i,"rapidkit.cmd"),o=l.join(i,".rapidkit","rapidkit.cmd");if(y.existsSync(c))return c;if(y.existsSync(o))return o}let n=l.join(i,"rapidkit"),a=l.join(i,".rapidkit","rapidkit");if(y.existsSync(n))return n;if(y.existsSync(a))return a;let s=l.dirname(i);if(s===i)break;i=s;}return null}(()=>{try{let e=process.cwd(),i=process.argv.slice(2)[0],n=ye(e);if(n&&y.existsSync(n)){let a=y.readFileSync(n,"utf8");try{let s=JSON.parse(a),c=i==="shell"&&process.argv.slice(2)[1]==="activate",d=$e(e)&&i&&B.includes(i);s?.engine==="pip"&&!c&&!d&&i!=="init"&&(console.log(r.yellow(`
580
+ `);}catch(s){throw a.fail(`Failed to create ${n} project`),s}}async function z(e,t,i){let n=await promises.readdir(e,{withFileTypes:true});for(let a of n){let s=l.join(e,a.name),c=a.name.replace(/\.j2$/,""),o=l.join(t,c);if(a.isDirectory())await promises.mkdir(o,{recursive:true}),await z(s,o,i);else {let d=await promises.readFile(s,"utf-8");a.name.endsWith(".j2")&&(d=he(d,i)),await promises.writeFile(o,d),(c==="rapidkit"||c==="activate"||c.endsWith(".py")&&o.includes(".rapidkit"))&&await promises.chmod(o,493);}}}function he(e,t){let i=e;for(let[n,a]of Object.entries(t)){let s=new RegExp(`\\{\\{\\s*${n}\\s*\\}\\}`,"g");i=i.replace(s,String(a));let c=new RegExp(`\\{\\{\\s*${n}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\}\\}`,"g");i=i.replace(c,(f,$,j)=>String(a).replace(new RegExp($,"g"),j));let o=new RegExp(`\\{\\{\\s*${n}\\s*\\|\\s*lower\\s*\\}\\}`,"g");i=i.replace(o,String(a).toLowerCase());let d=new RegExp(`\\{\\{\\s*${n}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\|\\s*lower\\s*\\}\\}`,"g");i=i.replace(d,(f,$,j)=>String(a).replace(new RegExp($,"g"),j).toLowerCase());}return i}var B=["init","dev","start","build","test","lint","format","create","help","--help","-h"];function ke(e){let t=e;for(;;){let i=l.join(t,".rapidkit","context.json");if(k.existsSync(i))return i;let n=l.dirname(t);if(n===t)break;t=n;}return null}function $e(e){let t=process.platform==="win32",i=e;for(;;){if(t){let c=l.join(i,"rapidkit.cmd"),o=l.join(i,".rapidkit","rapidkit.cmd");if(k.existsSync(c))return c;if(k.existsSync(o))return o}let n=l.join(i,"rapidkit"),a=l.join(i,".rapidkit","rapidkit");if(k.existsSync(n))return n;if(k.existsSync(a))return a;let s=l.dirname(i);if(s===i)break;i=s;}return null}(()=>{try{let e=process.cwd(),i=process.argv.slice(2)[0],n=ke(e);if(n&&k.existsSync(n)){let a=k.readFileSync(n,"utf8");try{let s=JSON.parse(a),c=i==="shell"&&process.argv.slice(2)[1]==="activate",d=$e(e)&&i&&B.includes(i);s?.engine==="pip"&&!c&&!d&&i!=="init"&&(console.log(r.yellow(`
581
581
  \u26A0\uFE0F This project uses the Python RapidKit engine (pip). The global npm RapidKit CLI will not operate on this project.
582
582
  \u{1F4A1} To prepare this project run: 'rapidkit init' (it uses the project's Python toolchain)
583
- `)),process.exit(0));}catch{}}}catch{}})();function X(e){let t=e;for(;;){let i=l.join(t,".rapidkit","context.json");if(y.existsSync(i))return i;let n=l.dirname(t);if(n===t)break;t=n;}return null}async function we(){let e=process.cwd(),t=X(e),i=process.platform==="win32",n=i?[l.join(e,"rapidkit.cmd"),l.join(e,"rapidkit"),l.join(e,".rapidkit","rapidkit.cmd"),l.join(e,".rapidkit","rapidkit")]:[l.join(e,"rapidkit"),l.join(e,".rapidkit","rapidkit")],a=null;for(let o of n)if(await h.pathExists(o)){a=o;break}let s=process.argv.slice(2),c=s[0];if(a&&c&&B.includes(c)){m.debug(`Delegating to local CLI: ${a} ${s.join(" ")}`);let o=spawn(a,s,{stdio:"inherit",cwd:e,shell:i});return o.on("close",d=>{process.exit(d??0);}),o.on("error",d=>{m.error(`Failed to run local rapidkit: ${d.message}`),process.exit(1);}),true}if(t&&await h.pathExists(t))try{if((await h.readJson(t)).engine==="pip"){let d=process.argv.slice(2),f=d[0],j=process.platform==="win32"?[l.join(e,"rapidkit.cmd"),l.join(e,"rapidkit"),l.join(e,".rapidkit","rapidkit.cmd"),l.join(e,".rapidkit","rapidkit")]:[l.join(e,"rapidkit"),l.join(e,".rapidkit","rapidkit")],_=null;for(let g of j)if(await h.pathExists(g)){_=g;break}if(_&&f&&B.includes(f)){m.debug(`Delegating to local CLI (early detection): ${_} ${d.join(" ")}`);let g=spawn(_,d,{stdio:"inherit",cwd:e});return g.on("close",E=>process.exit(E??0)),g.on("error",E=>{m.error(`Failed to run local rapidkit: ${E.message}`),process.exit(1);}),!0}if(f==="shell"&&d[1]==="activate"){let g=`# RapidKit: activation snippet - eval "$(rapidkit shell activate)"
583
+ `)),process.exit(0));}catch{}}}catch{}})();function X(e){let t=e;for(;;){let i=l.join(t,".rapidkit","context.json");if(k.existsSync(i))return i;let n=l.dirname(t);if(n===t)break;t=n;}return null}async function we(){let e=process.cwd(),t=X(e),i=process.platform==="win32",n=i?[l.join(e,"rapidkit.cmd"),l.join(e,"rapidkit"),l.join(e,".rapidkit","rapidkit.cmd"),l.join(e,".rapidkit","rapidkit")]:[l.join(e,"rapidkit"),l.join(e,".rapidkit","rapidkit")],a=null;for(let o of n)if(await h.pathExists(o)){a=o;break}let s=process.argv.slice(2),c=s[0];if(a&&c&&B.includes(c)){m.debug(`Delegating to local CLI: ${a} ${s.join(" ")}`);let o=spawn(a,s,{stdio:"inherit",cwd:e,shell:i});return o.on("close",d=>{process.exit(d??0);}),o.on("error",d=>{m.error(`Failed to run local rapidkit: ${d.message}`),process.exit(1);}),true}if(t&&await h.pathExists(t))try{if((await h.readJson(t)).engine==="pip"){let d=process.argv.slice(2),f=d[0],j=process.platform==="win32"?[l.join(e,"rapidkit.cmd"),l.join(e,"rapidkit"),l.join(e,".rapidkit","rapidkit.cmd"),l.join(e,".rapidkit","rapidkit")]:[l.join(e,"rapidkit"),l.join(e,".rapidkit","rapidkit")],_=null;for(let g of j)if(await h.pathExists(g)){_=g;break}if(_&&f&&B.includes(f)){m.debug(`Delegating to local CLI (early detection): ${_} ${d.join(" ")}`);let g=spawn(_,d,{stdio:"inherit",cwd:e});return g.on("close",E=>process.exit(E??0)),g.on("error",E=>{m.error(`Failed to run local rapidkit: ${E.message}`),process.exit(1);}),!0}if(f==="shell"&&d[1]==="activate"){let g=`# RapidKit: activation snippet - eval "$(rapidkit shell activate)"
584
584
  VENV='.venv'
585
585
  if [ -f "$VENV/bin/activate" ]; then
586
586
  . "$VENV/bin/activate"
@@ -602,7 +602,7 @@ export PATH="$(pwd)/.rapidkit:$(pwd):$PATH"
602
602
  `));let{spawnSync:w}=await import('child_process'),D=[["python3",["-m","pip","install","rapidkit-core"]],["python",["-m","pip","install","rapidkit-core"]],["pip",["install","rapidkit-core"]]],P=!0;if(process.stdin.isTTY)try{P=!!(await O.prompt([{type:"confirm",name:"confirm",message:"This project needs the Python RapidKit CLI (rapidkit). Do you want to try installing it now using pip?",default:!0}])).confirm;}catch{P=!1;}else P=!1;if(!P){let g=(await import('chalk')).default;console.log(g.yellow(`
603
603
  \u26A0\uFE0F Skipping automatic installation of the Python RapidKit CLI (rapidkit-core).
604
604
  \u{1F4A1} To continue, either run 'rapidkit init' locally after installing rapidkit-core: \`python3 -m pip install rapidkit-core\`
605
- `)),process.exit(0);}let R={status:1};if(P)for(let[g,E]of D)try{if(console.log(r.gray(`Running: ${g} ${E.join(" ")}
605
+ `)),process.exit(0);}let R={status:1,stderr:null,stdout:null};if(P)for(let[g,E]of D)try{if(console.log(r.gray(`Running: ${g} ${E.join(" ")}
606
606
  `)),R=w(g,E,{stdio:"inherit"}),R&&R.status===0)break}catch{}if(R&&R.status===0){let g=(await import('chalk')).default;console.log(g.green(`
607
607
  \u2705 RapidKit Python CLI (rapidkit) installed successfully!
608
608
  Please re-run your command.
@@ -627,7 +627,7 @@ Please re-run your command.
627
627
  `)),console.log(r.white("\u{1F4C2} Path:"),n),console.log(r.white("\u{1F4E6} Type:"),a?`Project (${t.template})`:"Workspace"),console.log();return}let s;t.yes?(s={author:process.env.USER||"RapidKit User",description:a?`${t.template==="nestjs"?"NestJS":"FastAPI"} application generated with RapidKit`:void 0,package_manager:"npm"},console.log(r.gray(`Using default values (--yes flag)
628
628
  `))):a?t.template.toLowerCase()==="fastapi"?s=await O.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 O.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 O.prompt([{type:"input",name:"author",message:"Author name:",default:process.env.USER||"RapidKit User"}]),a?await Y(n,{name:e,template:t.template.toLowerCase(),author:s.author,description:s.description,package_manager:s.package_manager,skipGit:t.skipGit,skipInstall:t.skipInstall}):await H(n,{name:e,author:s.author,skipGit:t.skipGit});}catch(i){i instanceof S?(m.error(`
629
629
  \u274C ${i.message}`),i.details&&m.warn(`\u{1F4A1} ${i.details}`),m.debug("Error code:",i.code)):(m.error(`
630
- \u274C An unexpected error occurred:`),console.error(i)),process.exit(1);}finally{x=null;}});K.command("shell <action>").description("Shell helpers (activate virtualenv in current shell)").action(async e=>{e!=="activate"&&(console.log(r.red(`Unknown shell command: ${e}`)),process.exit(1));let t=process.cwd();function i(c){let o=c;for(;;){let d=l.join(o,".rapidkit","context.json");if(y.existsSync(d))return d;let f=l.dirname(o);if(f===o)break;o=f;}return null}let n=i(t);function a(c){let o=c;for(;;){let d=l.join(o,".venv"),f=l.join(o,".rapidkit","activate");if(y.existsSync(f)||y.existsSync(d))return {venv:d,activateFile:f};let $=l.dirname(o);if($===o)break;o=$;}return null}let s=a(t);if(!n&&!s&&(console.log(r.red("No RapidKit project found to activate")),process.exit(1)),s){let c=`# RapidKit: activation snippet - eval "$(rapidkit shell activate)"
630
+ \u274C An unexpected error occurred:`),console.error(i)),process.exit(1);}finally{x=null;}});K.command("shell <action>").description("Shell helpers (activate virtualenv in current shell)").action(async e=>{e!=="activate"&&(console.log(r.red(`Unknown shell command: ${e}`)),process.exit(1));let t=process.cwd();function i(c){let o=c;for(;;){let d=l.join(o,".rapidkit","context.json");if(k.existsSync(d))return d;let f=l.dirname(o);if(f===o)break;o=f;}return null}let n=i(t);function a(c){let o=c;for(;;){let d=l.join(o,".venv"),f=l.join(o,".rapidkit","activate");if(k.existsSync(f)||k.existsSync(d))return {venv:d,activateFile:f};let $=l.dirname(o);if($===o)break;o=$;}return null}let s=a(t);if(!n&&!s&&(console.log(r.red("No RapidKit project found to activate")),process.exit(1)),s){let c=`# RapidKit: activation snippet - eval "$(rapidkit shell activate)"
631
631
  VENV='.venv'
632
632
  if [ -f "$VENV/bin/activate" ]; then
633
633
  . "$VENV/bin/activate"
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapidkit",
3
- "version": "0.13.0",
3
+ "version": "0.13.1",
4
4
  "type": "module",
5
5
  "description": "Create RapidKit projects with a single command - The official CLI for RapidKit framework",
6
6
  "keywords": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapidkit",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "type": "module",
5
5
  "description": "Create RapidKit projects with a single command - The official CLI for RapidKit framework",
6
6
  "keywords": [
@@ -77,7 +77,7 @@
77
77
  "vitest": "^4.0.15"
78
78
  },
79
79
  "engines": {
80
- "node": ">=18.0.0"
80
+ "node": ">=20.19.6"
81
81
  },
82
82
  "lint-staged": {
83
83
  "*.ts": [
@@ -17,22 +17,22 @@ format = "src.cli:format"
17
17
  help = "src.cli:help_cmd"
18
18
 
19
19
  [tool.poetry.dependencies]
20
- python = "^3.11"
21
- fastapi = "^0.119.0"
22
- uvicorn = { extras = ["standard"], version = "^0.37.0" }
23
- pydantic = "^2.12.0"
24
- pydantic-settings = { version = "^2.11.0", extras = ["yaml"] }
20
+ python = "^3.10.14"
21
+ fastapi = "^0.128.0"
22
+ uvicorn = { extras = ["standard"], version = "^0.40.0" }
23
+ pydantic = "^2.12.5"
24
+ pydantic-settings = { version = "^2.12.0", extras = ["yaml"] }
25
25
  # <<<inject:poetry-dependencies>>>
26
26
 
27
27
  [tool.poetry.group.dev.dependencies]
28
- pytest = "^8.4.0"
29
- pytest-asyncio = "^0.24.0"
30
- pytest-cov = "^6.1.0"
28
+ pytest = "^9.0.2"
29
+ pytest-asyncio = "^1.3.0"
30
+ pytest-cov = "^7.0.0"
31
31
  httpx = "^0.28.1"
32
- ruff = "^0.14.0"
33
- black = "^24.10.0"
34
- isort = "^5.13.2"
35
- mypy = "^1.13.0"
32
+ ruff = "^0.14.10"
33
+ black = "^25.12.0"
34
+ isort = "^7.0.0"
35
+ mypy = "^1.19.1"
36
36
  build = "^1.3.0"
37
37
 
38
38
  # <<<inject:poetry-dev-dependencies>>>
@@ -5,7 +5,7 @@
5
5
  "license": "{{ license }}",
6
6
  "author": "{{ author }}",
7
7
  "engines": {
8
- "node": ">=20"
8
+ "node": ">=20.19.6"
9
9
  },
10
10
  "private": true,
11
11
  "scripts": {
@@ -31,42 +31,42 @@
31
31
  "test:e2e": "jest --config ./test/jest-e2e.json"
32
32
  },
33
33
  "dependencies": {
34
- "@nestjs/common": "^11.1.6",
34
+ "@nestjs/common": "^11.1.10",
35
35
  "@nestjs/config": "^4.0.2",
36
- "@nestjs/core": "^11.1.6",
37
- "@nestjs/platform-express": "^11.1.6",
36
+ "@nestjs/core": "^11.1.10",
37
+ "@nestjs/platform-express": "^11.1.10",
38
38
  "@nestjs/swagger": "^11.2.3",
39
39
  "class-transformer": "^0.5.1",
40
- "class-validator": "^0.14.0",
41
- "reflect-metadata": "^0.2.1",
42
- "rxjs": "^7.8.1",
43
- "helmet": "^7.0.0",
44
- "compression": "^1.7.4",
45
- "winston": "^3.11.0",
46
- "joi": "^17.12.1",
40
+ "class-validator": "^0.14.3",
41
+ "reflect-metadata": "^0.2.2",
42
+ "rxjs": "^7.8.2",
43
+ "helmet": "^8.1.0",
44
+ "compression": "^1.8.1",
45
+ "winston": "^3.19.0",
46
+ "joi": "^18.0.2",
47
47
  "@nestjs/terminus": "^11.0.0",
48
- "dotenv": "^16.3.1"
48
+ "dotenv": "^17.2.3"
49
49
  },
50
50
  "devDependencies": {
51
- "@nestjs/cli": "^11.0.10",
52
- "@nestjs/schematics": "^11.0.7",
53
- "@nestjs/testing": "^11.1.6",
54
- "@types/compression": "^1.7.5",
55
- "@types/express": "^4.17.21",
56
- "@types/jest": "^29.5.12",
57
- "@types/node": "^22.8.5",
58
- "@types/supertest": "^2.0.16",
59
- "@typescript-eslint/eslint-plugin": "^8.46.1",
60
- "@typescript-eslint/parser": "^8.46.1",
61
- "eslint": "^8.57.1",
51
+ "@nestjs/cli": "^11.0.14",
52
+ "@nestjs/schematics": "^11.0.9",
53
+ "@nestjs/testing": "^11.1.10",
54
+ "@types/compression": "^1.8.1",
55
+ "@types/express": "^5.0.6",
56
+ "@types/jest": "^30.0.0",
57
+ "@types/node": "^18.19.130",
58
+ "@types/supertest": "^6.0.3",
59
+ "@typescript-eslint/eslint-plugin": "^8.50.1",
60
+ "@typescript-eslint/parser": "^8.50.1",
61
+ "eslint": "^9.39.2",
62
62
  "eslint-config-prettier": "^10.1.8",
63
63
  "eslint-plugin-import": "^2.32.0",
64
64
  "eslint-plugin-prettier": "^5.5.4",
65
- "jest": "^29.7.0",
66
- "prettier": "^3.6.2",
65
+ "jest": "^30.2.0",
66
+ "prettier": "^3.7.4",
67
67
  "source-map-support": "^0.5.21",
68
68
  "supertest": "^7.1.4",
69
- "ts-jest": "^29.4.5",
69
+ "ts-jest": "^29.4.6",
70
70
  "ts-loader": "^9.5.4",
71
71
  "ts-node": "^10.9.2",
72
72
  "tsconfig-paths": "^4.2.0",