rapidkit 0.13.1 → 0.14.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 +5 -5
- package/dist/package.json +2 -2
- package/package.json +2 -2
- package/templates/kits/fastapi-standard/.rapidkit/cli.py.j2 +34 -2
- package/templates/kits/fastapi-standard/.rapidkit/rapidkit.j2 +9 -0
- package/templates/kits/fastapi-standard/pyproject.toml.j2 +12 -12
- package/templates/kits/nestjs-standard/package.json.j2 +26 -26
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
|
|
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
|
|
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(
|
|
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(
|
|
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.
|
|
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": ">=
|
|
80
|
+
"node": ">=20.19.6"
|
|
81
81
|
},
|
|
82
82
|
"lint-staged": {
|
|
83
83
|
"*.ts": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rapidkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.1",
|
|
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": ">=
|
|
80
|
+
"node": ">=20.19.6"
|
|
81
81
|
},
|
|
82
82
|
"lint-staged": {
|
|
83
83
|
"*.ts": [
|
|
@@ -56,6 +56,24 @@ def _python_code_targets(root: Path) -> list[str]:
|
|
|
56
56
|
return targets or ["src"]
|
|
57
57
|
|
|
58
58
|
|
|
59
|
+
def _get_poetry_venv() -> Path | None:
|
|
60
|
+
"""Get Poetry virtualenv path if it exists"""
|
|
61
|
+
try:
|
|
62
|
+
result = subprocess.run(
|
|
63
|
+
["poetry", "env", "info", "--path"],
|
|
64
|
+
capture_output=True,
|
|
65
|
+
text=True,
|
|
66
|
+
check=False
|
|
67
|
+
)
|
|
68
|
+
if result.returncode == 0 and result.stdout.strip():
|
|
69
|
+
venv_path = Path(result.stdout.strip())
|
|
70
|
+
if venv_path.exists():
|
|
71
|
+
return venv_path
|
|
72
|
+
except Exception:
|
|
73
|
+
pass
|
|
74
|
+
return None
|
|
75
|
+
|
|
76
|
+
|
|
59
77
|
def _venv_has_uvicorn(venv_path: Path) -> bool:
|
|
60
78
|
if (venv_path / "bin" / "uvicorn").exists():
|
|
61
79
|
return True
|
|
@@ -77,9 +95,16 @@ def dev(port: int = 8000, host: str = "0.0.0.0", allow_global_runtime: bool = Fa
|
|
|
77
95
|
_print_banner("📁", f"Working directory: {root}")
|
|
78
96
|
_print_banner("🌐", f"Server will be available at: http://{host}:{port}")
|
|
79
97
|
|
|
98
|
+
# Check for .venv or Poetry virtualenv
|
|
99
|
+
if not venv_dir.exists():
|
|
100
|
+
poetry_venv = _get_poetry_venv()
|
|
101
|
+
if poetry_venv:
|
|
102
|
+
venv_dir = poetry_venv
|
|
103
|
+
_print_banner("🐍", f"Using Poetry virtualenv: {venv_dir}")
|
|
104
|
+
|
|
80
105
|
if venv_dir.exists():
|
|
81
106
|
if not _venv_has_uvicorn(venv_dir):
|
|
82
|
-
print("❌ Project
|
|
107
|
+
print("❌ Project virtualenv was found but uvicorn/fastapi doesn't appear installed.")
|
|
83
108
|
print("💡 Run 'rapidkit init' to install dependencies.")
|
|
84
109
|
sys.exit(1)
|
|
85
110
|
else:
|
|
@@ -141,9 +166,16 @@ def start(port: int = 8000, host: str = "0.0.0.0", allow_global_runtime: bool =
|
|
|
141
166
|
|
|
142
167
|
if ptype == "python":
|
|
143
168
|
venv_dir = root / ".venv"
|
|
169
|
+
|
|
170
|
+
# Check for .venv or Poetry virtualenv
|
|
171
|
+
if not venv_dir.exists():
|
|
172
|
+
poetry_venv = _get_poetry_venv()
|
|
173
|
+
if poetry_venv:
|
|
174
|
+
venv_dir = poetry_venv
|
|
175
|
+
|
|
144
176
|
if venv_dir.exists():
|
|
145
177
|
if not _venv_has_uvicorn(venv_dir):
|
|
146
|
-
print("❌ Project
|
|
178
|
+
print("❌ Project virtualenv was found but uvicorn/fastapi doesn't appear installed.")
|
|
147
179
|
print("💡 Run 'poetry install' to install dependencies.")
|
|
148
180
|
sys.exit(1)
|
|
149
181
|
else:
|
|
@@ -48,6 +48,15 @@ fi
|
|
|
48
48
|
VENV_PY="${ROOT_DIR}/.venv/bin/python"
|
|
49
49
|
VENV_POETRY="${ROOT_DIR}/.venv/bin/poetry"
|
|
50
50
|
|
|
51
|
+
# Try to detect Poetry virtualenv path
|
|
52
|
+
if [ ! -d "${ROOT_DIR}/.venv" ] && command -v poetry >/dev/null 2>&1; then
|
|
53
|
+
POETRY_VENV_PATH=$(cd "$ROOT_DIR" && poetry env info --path 2>/dev/null || true)
|
|
54
|
+
if [ -n "$POETRY_VENV_PATH" ] && [ -d "$POETRY_VENV_PATH" ]; then
|
|
55
|
+
VENV_PY="${POETRY_VENV_PATH}/bin/python"
|
|
56
|
+
VENV_POETRY="${POETRY_VENV_PATH}/bin/poetry"
|
|
57
|
+
fi
|
|
58
|
+
fi
|
|
59
|
+
|
|
51
60
|
case "$PKG_TYPE" in
|
|
52
61
|
python)
|
|
53
62
|
# prefer project-local poetry
|
|
@@ -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.
|
|
21
|
-
fastapi = "^0.
|
|
22
|
-
uvicorn = { extras = ["standard"], version = "^0.
|
|
23
|
-
pydantic = "^2.12.
|
|
24
|
-
pydantic-settings = { version = "^2.
|
|
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 = "^
|
|
29
|
-
pytest-asyncio = "^
|
|
30
|
-
pytest-cov = "^
|
|
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.
|
|
33
|
-
black = "^
|
|
34
|
-
isort = "^
|
|
35
|
-
mypy = "^1.
|
|
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.
|
|
34
|
+
"@nestjs/common": "^11.1.10",
|
|
35
35
|
"@nestjs/config": "^4.0.2",
|
|
36
|
-
"@nestjs/core": "^11.1.
|
|
37
|
-
"@nestjs/platform-express": "^11.1.
|
|
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.
|
|
41
|
-
"reflect-metadata": "^0.2.
|
|
42
|
-
"rxjs": "^7.8.
|
|
43
|
-
"helmet": "^
|
|
44
|
-
"compression": "^1.
|
|
45
|
-
"winston": "^3.
|
|
46
|
-
"joi": "^
|
|
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": "^
|
|
48
|
+
"dotenv": "^17.2.3"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@nestjs/cli": "^11.0.
|
|
52
|
-
"@nestjs/schematics": "^11.0.
|
|
53
|
-
"@nestjs/testing": "^11.1.
|
|
54
|
-
"@types/compression": "^1.
|
|
55
|
-
"@types/express": "^
|
|
56
|
-
"@types/jest": "^
|
|
57
|
-
"@types/node": "^
|
|
58
|
-
"@types/supertest": "^
|
|
59
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
60
|
-
"@typescript-eslint/parser": "^8.
|
|
61
|
-
"eslint": "^
|
|
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": "^
|
|
66
|
-
"prettier": "^3.
|
|
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.
|
|
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",
|