rapidkit 0.26.0 → 0.27.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapidkit",
3
- "version": "0.26.0",
3
+ "version": "0.27.1",
4
4
  "type": "module",
5
5
  "description": "Official CLI for RapidKit, an open-source workspace platform that standardizes how teams build, scale, and deploy backend services.",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
- import {j}from'./chunk-Z5LKRG57.js';import {b}from'./chunk-Q7ULIFQA.js';import {promises}from'fs';import l from'path';import i from'chalk';import _ from'ora';import {execa}from'execa';function w(e){let t=l.resolve(e);return process.platform==="win32"?t.toLowerCase():t}function L(e){let t=w(e.path),r=Array.isArray(e.projects)?e.projects:[],a=[],o=new Set;for(let c of r){if(!c||typeof c.name!="string"||typeof c.path!="string")continue;let n=w(c.path);o.has(n)||(o.add(n),a.push({name:c.name,path:n}));}return {name:e.name,path:t,mode:e.mode,projects:a}}function R(e){let t=[],r=new Set;for(let a of e.workspaces||[]){if(!a||typeof a.name!="string"||typeof a.path!="string")continue;let o=L(a);r.has(o.path)||(r.add(o.path),t.push(o));}return {workspaces:t}}async function I(e,t){try{let r=w(e),a=j(),o=l.join(a,"workspaces.json");await promises.mkdir(a,{recursive:true});let c={workspaces:[]};try{let s=await promises.readFile(o,"utf8"),d=JSON.parse(s);d&&Array.isArray(d.workspaces)&&(c=R(d));}catch{}c.workspaces.some(s=>s.path===r)||(c.workspaces.push({name:t,path:r,mode:"full",projects:[]}),await promises.writeFile(o,JSON.stringify(c,null,2)));}catch{console.warn(i.gray("Note: Could not register workspace in shared registry"));}}async function V(e,t=false){try{let r=w(e),a=j(),o=l.join(a,"workspaces.json"),c={workspaces:[]};try{let g=await promises.readFile(o,"utf8"),u=JSON.parse(g);u&&Array.isArray(u.workspaces)&&(c=R(u));}catch{t||console.log("\u26A0\uFE0F Workspace registry not found");return}let n=c.workspaces.find(g=>g.path===r);if(!n){t||console.log("\u26A0\uFE0F Workspace not registered in registry");return}Array.isArray(n.projects)||(n.projects=[]);let s=0,d=0,h=[e],m=new Set;for(;h.length>0;){let g=h.shift();if(!g||m.has(g))continue;m.add(g);let u=await promises.readdir(g,{withFileTypes:true});for(let $ of u){if(!$.isDirectory()||$.name.startsWith(".")||["node_modules","dist","build","target","coverage","htmlcov"].includes($.name))continue;let f=l.join(g,$.name),k=w(f),E=l.join(k,".rapidkit","context.json"),b=l.join(k,".rapidkit","project.json");try{let C=false;try{await promises.access(E),C=true;}catch{await promises.access(b),C=true;}if(C){let x=l.basename(k);n.projects.some(S=>S.path===k||S.name===x)?d++:(n.projects.push({name:x,path:k}),s++,t||console.log(`\u2714 Added: ${l.relative(e,k)}`));continue}}catch{}h.push(f);}}s>0?(await promises.writeFile(o,JSON.stringify(c,null,2)),t||console.log(`
2
- \u2705 Synced ${s} project(s) to registry`)):t||console.log(`
3
- \u2705 All projects already registered (${d} found)`);}catch(r){t||console.error("\u274C Failed to sync projects:",r.message);}}async function H(e,t,r){try{let a=w(e),o=w(r),c=j(),n=l.join(c,"workspaces.json"),s={workspaces:[]};try{let m=await promises.readFile(n,"utf8"),g=JSON.parse(m);g&&Array.isArray(g.workspaces)&&(s=R(g));}catch{return}let d=s.workspaces.find(m=>m.path===a);if(!d)return;Array.isArray(d.projects)||(d.projects=[]),d.projects.some(m=>m.path===o||m.name===t)||(d.projects.push({name:t,path:o}),await promises.writeFile(n,JSON.stringify(s,null,2)));}catch{}}async function q(e,t){let r=_("Creating RapidKit workspace...").start();try{await promises.mkdir(e,{recursive:true}),await promises.mkdir(l.join(e,".rapidkit"),{recursive:true});let a={workspace_name:t.name,author:t.author,rapidkit_version:b(),created_at:new Date().toISOString(),type:"workspace"};await promises.writeFile(l.join(e,".rapidkit","config.json"),JSON.stringify(a,null,2));let{syncWorkspaceFoundationFiles:o}=await import('./create-YIUV6RUX.js');await o(e,{workspaceName:t.name,installMethod:"venv",writeMarker:true,writeGitignore:false,onlyIfMissing:true});let c=D();await promises.writeFile(l.join(e,"rapidkit"),c),await promises.chmod(l.join(e,"rapidkit"),493);let n=A();await promises.writeFile(l.join(e,"rapidkit.cmd"),n);let s=P(t.name);if(await promises.writeFile(l.join(e,"README.md"),s),await promises.writeFile(l.join(e,".gitignore"),`# RapidKit workspace
1
+ import {j as j$1}from'./chunk-Z5LKRG57.js';import {b as b$1}from'./chunk-Q7ULIFQA.js';import {promises}from'fs';import n from'path';import a from'chalk';import b from'ora';import {execa}from'execa';function j(e){let t=n.resolve(e);return process.platform==="win32"?t.toLowerCase():t}function I(e){let t=j(e.path),r=Array.isArray(e.projects)?e.projects:[],o=[],i=new Set;for(let s of r){if(!s||typeof s.name!="string"||typeof s.path!="string")continue;let c=j(s.path);i.has(c)||(i.add(c),o.push({name:s.name,path:c}));}return {name:e.name,path:t,mode:e.mode,projects:o}}function x(e){let t=[],r=new Set;for(let o of e.workspaces||[]){if(!o||typeof o.name!="string"||typeof o.path!="string")continue;let i=I(o);r.has(i.path)||(r.add(i.path),t.push(i));}return {workspaces:t}}async function A(e,t){try{let r=j(e),o=j$1(),i=n.join(o,"workspaces.json");await promises.mkdir(o,{recursive:true});let s={workspaces:[]};try{let p=await promises.readFile(i,"utf8"),d=JSON.parse(p);d&&Array.isArray(d.workspaces)&&(s=x(d));}catch{}s.workspaces.some(p=>p.path===r)||(s.workspaces.push({name:t,path:r,mode:"full",projects:[]}),await promises.writeFile(i,JSON.stringify(s,null,2)));}catch{console.warn(a.gray("Note: Could not register workspace in shared registry"));}}async function X(e,t=false){try{let r=j(e),o=j$1(),i=n.join(o,"workspaces.json"),s={workspaces:[]};try{let g=await promises.readFile(i,"utf8"),f=JSON.parse(g);f&&Array.isArray(f.workspaces)&&(s=x(f));}catch{t||console.log("\u26A0\uFE0F Workspace registry not found");return}let c=s.workspaces.find(g=>g.path===r);if(!c){t||console.log("\u26A0\uFE0F Workspace not registered in registry");return}Array.isArray(c.projects)||(c.projects=[]);let p=0,d=0,u=[e],m=new Set;for(;u.length>0;){let g=u.shift();if(!g||m.has(g))continue;m.add(g);let f=await promises.readdir(g,{withFileTypes:true});for(let y of f){if(!y.isDirectory()||y.name.startsWith(".")||["node_modules","dist","build","target","coverage","htmlcov"].includes(y.name))continue;let k=n.join(g,y.name),h=j(k),v=n.join(h,".rapidkit","context.json"),E=n.join(h,".rapidkit","project.json");try{let _=false;try{await promises.access(v),_=true;}catch{await promises.access(E),_=true;}if(_){let $=n.basename(h);c.projects.some(R=>R.path===h||R.name===$)?d++:(c.projects.push({name:$,path:h}),p++,t||console.log(`\u2714 Added: ${n.relative(e,h)}`));continue}}catch{}u.push(k);}}p>0?(await promises.writeFile(i,JSON.stringify(s,null,2)),t||console.log(`
2
+ \u2705 Synced ${p} project(s) to registry`)):t||console.log(`
3
+ \u2705 All projects already registered (${d} found)`);}catch(r){t||console.error("\u274C Failed to sync projects:",r.message);}}async function Z(e,t,r){try{let o=j(e),i=j(r),s=j$1(),c=n.join(s,"workspaces.json"),p={workspaces:[]};try{let m=await promises.readFile(c,"utf8"),g=JSON.parse(m);g&&Array.isArray(g.workspaces)&&(p=x(g));}catch{return}let d=p.workspaces.find(m=>m.path===o);if(!d)return;Array.isArray(d.projects)||(d.projects=[]),d.projects.some(m=>m.path===i||m.name===t)||(d.projects.push({name:t,path:i}),await promises.writeFile(c,JSON.stringify(p,null,2)));}catch{}}async function ee(e,t){let r=b("Creating RapidKit workspace...").start();try{await promises.mkdir(e,{recursive:true}),await promises.mkdir(n.join(e,".rapidkit"),{recursive:true});let o={workspace_name:t.name,author:t.author,rapidkit_version:b$1(),created_at:new Date().toISOString(),type:"workspace"};await promises.writeFile(n.join(e,".rapidkit","config.json"),JSON.stringify(o,null,2));let{syncWorkspaceFoundationFiles:i}=await import('./create-3V7O72CO.js');await i(e,{workspaceName:t.name,installMethod:"venv",writeMarker:true,writeGitignore:false,onlyIfMissing:true});let s=F();await promises.writeFile(n.join(e,"rapidkit"),s),await promises.chmod(n.join(e,"rapidkit"),493);let c=O();await promises.writeFile(n.join(e,"rapidkit.cmd"),c);let p=B(t.name);if(await promises.writeFile(n.join(e,"README.md"),p),await promises.writeFile(n.join(e,".gitignore"),`# RapidKit workspace
4
4
  .env
5
5
  .env.*
6
6
  !.env.example
@@ -15,10 +15,10 @@ Thumbs.db
15
15
 
16
16
  # Logs
17
17
  *.log
18
- `),await promises.writeFile(l.join(e,".rapidkit-workspace"),JSON.stringify({signature:"RAPIDKIT_WORKSPACE",createdBy:"rapidkit-npm",version:b(),createdAt:new Date().toISOString(),name:t.name},null,2)),await W(e),r.succeed("Workspace created!"),!t.skipGit){let h=_("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}),h.succeed("Git repository initialized");}catch{h.warn("Could not initialize git repository");}}await I(e,t.name),console.log(`
19
- ${i.green("\u2728 RapidKit workspace created successfully!")}
18
+ `),await promises.writeFile(n.join(e,".rapidkit-workspace"),JSON.stringify({signature:"RAPIDKIT_WORKSPACE",createdBy:"rapidkit-npm",version:b$1(),createdAt:new Date().toISOString(),name:t.name},null,2)),await T(e),r.succeed("Workspace created!"),!t.skipGit){let u=b("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}),u.succeed("Git repository initialized");}catch{u.warn("Could not initialize git repository");}}await A(e,t.name),console.log(`
19
+ ${a.green("\u2728 RapidKit workspace created successfully!")}
20
20
 
21
- ${i.bold("\u{1F4C2} Workspace structure:")}
21
+ ${a.bold("\u{1F4C2} Workspace structure:")}
22
22
  ${e}/
23
23
  \u251C\u2500\u2500 rapidkit # Local CLI wrapper
24
24
  \u251C\u2500\u2500 rapidkit.cmd # Windows local CLI wrapper
@@ -30,29 +30,29 @@ ${e}/
30
30
  \u2502 \u2514\u2500\u2500 config.json # Legacy compatibility metadata
31
31
  \u2514\u2500\u2500 README.md
32
32
 
33
- ${i.bold("\u{1F680} Get started:")}
34
- ${i.cyan(`cd ${t.name}`)}
35
- ${i.cyan("npx rapidkit my-api --template fastapi")}
36
- ${i.cyan("cd my-api")}
37
- ${i.cyan("npx rapidkit init")}
38
- ${i.cyan("npx rapidkit dev")}
33
+ ${a.bold("\u{1F680} Get started:")}
34
+ ${a.cyan(`cd ${t.name}`)}
35
+ ${a.cyan("npx rapidkit my-api --template fastapi")}
36
+ ${a.cyan("cd my-api")}
37
+ ${a.cyan("npx rapidkit init")}
38
+ ${a.cyan("npx rapidkit dev")}
39
39
 
40
- ${i.bold("\u{1F4E6} Available templates:")}
40
+ ${a.bold("\u{1F4E6} Available templates:")}
41
41
  fastapi - FastAPI + Python
42
42
  nestjs - NestJS + TypeScript
43
43
  springboot - Spring Boot + Java
44
44
  gofiber - Go Fiber
45
45
  gogin - Go Gin
46
46
 
47
- ${i.bold("\u{1F4DA} Commands:")}
47
+ ${a.bold("\u{1F4DA} Commands:")}
48
48
  npx rapidkit <name> --template <type> Create a new project
49
49
  npx rapidkit init Install dependencies
50
50
  npx rapidkit dev Start dev server
51
51
  npx rapidkit help Show all commands
52
52
 
53
- ${i.gray("Alternative: ./rapidkit dev (Windows: .\\rapidkit.cmd dev), make dev")}
54
- ${i.gray("\u{1F4A1} Tip: Install globally (npm i -g rapidkit) to use without npx")}
55
- `);}catch(a){throw r.fail("Failed to create workspace"),a}}function D(){return `#!/usr/bin/env bash
53
+ ${a.gray("Alternative: ./rapidkit dev (Windows: .\\rapidkit.cmd dev), make dev")}
54
+ ${a.gray("\u{1F4A1} Tip: Install globally (npm i -g rapidkit) to use without npx")}
55
+ `);}catch(o){throw r.fail("Failed to create workspace"),o}}function F(){return `#!/usr/bin/env bash
56
56
  #
57
57
  # RapidKit CLI - Local workspace commands
58
58
  # This script provides rapidkit commands within the workspace
@@ -400,7 +400,7 @@ main() {
400
400
  print_help
401
401
  ;;
402
402
  version|-v|--version)
403
- echo "RapidKit CLI (npm workspace) v${b()}"
403
+ echo "RapidKit CLI (npm workspace) v${b$1()}"
404
404
  ;;
405
405
  *)
406
406
  echo -e "\${RED}\u274C Unknown command: $cmd\${NC}"
@@ -412,7 +412,7 @@ main() {
412
412
  }
413
413
 
414
414
  main "$@"
415
- `}function A(){return `@echo off
415
+ `}function O(){return `@echo off
416
416
  setlocal enabledelayedexpansion
417
417
 
418
418
  set "SCRIPT_DIR=%~dp0"
@@ -432,7 +432,7 @@ if %ERRORLEVEL%==0 (
432
432
  echo [RapidKit] No sh/bash found. Falling back to npx rapidkit.
433
433
  npx rapidkit %*
434
434
  exit /b %ERRORLEVEL%
435
- `}function P(e){return `# ${e}
435
+ `}function B(e){return `# ${e}
436
436
 
437
437
  RapidKit workspace for building API projects.
438
438
 
@@ -480,7 +480,7 @@ npx rapidkit dev # Start dev server
480
480
 
481
481
  - [RapidKit Documentation](https://rapidkit.dev)
482
482
  - [GitHub Repository](https://github.com/Baziar/rapidkit)
483
- `}async function W(e){let{fileURLToPath:t}=await import('url'),r=t(import.meta.url),a=l.dirname(r),o=l.resolve(a,".."),c=l.join(o,"templates","kits"),n=l.join(e,".rapidkit","templates"),{default:s}=await import('fs-extra');await s.copy(c,n);let d=l.join(o,"templates","generator.js"),h=l.join(e,".rapidkit","generator.js");await s.copy(d,h);}async function Q(e,t){let r=t.template==="fastapi",a=r?"FastAPI":"NestJS",o=_(`Creating ${a} project...`).start();try{let{fileURLToPath:c}=await import('url'),n=c(import.meta.url),s=l.dirname(n),d=l.resolve(s,".."),h=r?"fastapi-standard":"nestjs-standard",m=l.join(d,"templates","kits",h);await promises.mkdir(e,{recursive:true});let g={project_name:r?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:b()};await N(m,e,g);let u=r?`# Python
483
+ `}async function T(e){let{fileURLToPath:t}=await import('url'),r=t(import.meta.url),o=n.dirname(r),i=n.resolve(o,".."),s=n.join(i,"templates","kits"),c=n.join(e,".rapidkit","templates"),{default:p}=await import('fs-extra');await p.copy(s,c);let d=n.join(i,"templates","generator.js"),u=n.join(e,".rapidkit","generator.js");await p.copy(d,u);}async function te(e,t){let r=t.template==="fastapi",o=r?"FastAPI":"NestJS",i=b(`Creating ${o} project...`).start();try{let{fileURLToPath:s}=await import('url'),c=s(import.meta.url),p=n.dirname(c),d=n.resolve(p,".."),u=r?"fastapi-standard":"nestjs-standard",m=n.join(d,"templates","kits",u);await promises.mkdir(e,{recursive:true});let g={project_name:r?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:b$1()};await W(m,e,g);let f=r?`# Python
484
484
  __pycache__/
485
485
  *.py[cod]
486
486
  *$py.class
@@ -548,10 +548,10 @@ Thumbs.db
548
548
 
549
549
  # Coverage
550
550
  coverage/
551
- `;if(await promises.writeFile(l.join(e,".gitignore"),u),o.succeed(`${a} project created!`),!t.skipGit){let f=_("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}),f.succeed("Git repository initialized");}catch{f.warn("Could not initialize git repository");}}if(!t.skipInstall&&!r){let f=t.package_manager||"npm",k=_(`Installing dependencies with ${f}...`).start();try{await execa(f,["install"],{cwd:e}),k.succeed("Dependencies installed");}catch{k.warn(`Could not install dependencies. Run '${f} install' manually.`);}}let $=l.basename(e);console.log(r?`
552
- ${i.green("\u2728 FastAPI project created successfully!")}
551
+ `;if(await promises.writeFile(n.join(e,".gitignore"),f),i.succeed(`${o} project created!`),!t.skipGit){let k=b("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}),k.succeed("Git repository initialized");}catch{k.warn("Could not initialize git repository");}}if(!t.skipInstall&&!r){let k=t.package_manager||"npm",h=b(`Installing dependencies with ${k}...`).start();try{await execa(k,["install"],{cwd:e}),h.succeed("Dependencies installed");}catch{h.warn(`Could not install dependencies. Run '${k} install' manually.`);}}let y=n.basename(e);console.log(r?`
552
+ ${a.green("\u2728 FastAPI project created successfully!")}
553
553
 
554
- ${i.bold("\u{1F4C2} Project structure:")}
554
+ ${a.bold("\u{1F4C2} Project structure:")}
555
555
  ${e}/
556
556
  \u251C\u2500\u2500 .rapidkit/ # RapidKit CLI module
557
557
  \u251C\u2500\u2500 src/
@@ -563,12 +563,12 @@ ${e}/
563
563
  \u251C\u2500\u2500 pyproject.toml # Poetry configuration
564
564
  \u2514\u2500\u2500 README.md
565
565
 
566
- ${i.bold("\u{1F680} Get started:")}
567
- ${i.cyan(`cd ${$}`)}
568
- ${i.cyan("npx rapidkit init")} ${i.gray("# Install dependencies")}
569
- ${i.cyan("npx rapidkit dev")} ${i.gray("# Start dev server")}
566
+ ${a.bold("\u{1F680} Get started:")}
567
+ ${a.cyan(`cd ${y}`)}
568
+ ${a.cyan("npx rapidkit init")} ${a.gray("# Install dependencies")}
569
+ ${a.cyan("npx rapidkit dev")} ${a.gray("# Start dev server")}
570
570
 
571
- ${i.bold("\u{1F4DA} Available commands:")}
571
+ ${a.bold("\u{1F4DA} Available commands:")}
572
572
  npx rapidkit init # Install dependencies (poetry install)
573
573
  npx rapidkit dev # Start dev server with hot reload
574
574
  npx rapidkit start # Start production server
@@ -576,12 +576,12 @@ ${i.bold("\u{1F4DA} Available commands:")}
576
576
  npx rapidkit lint # Lint code
577
577
  npx rapidkit format # Format code
578
578
 
579
- ${i.gray("Alternative: make dev, ./rapidkit dev, poetry run dev")}
580
- ${i.gray("\u{1F4A1} Tip: Install globally (npm i -g rapidkit) to use without npx")}
579
+ ${a.gray("Alternative: make dev, ./rapidkit dev, poetry run dev")}
580
+ ${a.gray("\u{1F4A1} Tip: Install globally (npm i -g rapidkit) to use without npx")}
581
581
  `:`
582
- ${i.green("\u2728 NestJS project created successfully!")}
582
+ ${a.green("\u2728 NestJS project created successfully!")}
583
583
 
584
- ${i.bold("\u{1F4C2} Project structure:")}
584
+ ${a.bold("\u{1F4C2} Project structure:")}
585
585
  ${e}/
586
586
  \u251C\u2500\u2500 .rapidkit/ # RapidKit CLI module
587
587
  \u251C\u2500\u2500 src/
@@ -593,13 +593,13 @@ ${e}/
593
593
  \u251C\u2500\u2500 package.json # Dependencies
594
594
  \u2514\u2500\u2500 README.md
595
595
 
596
- ${i.bold("\u{1F680} Get started:")}
597
- ${i.cyan(`cd ${$}`)}
598
- ${t.skipInstall?i.cyan("npx rapidkit init")+i.gray(" # npm install")+`
599
- `:""}${i.cyan("cp .env.example .env")}
600
- ${i.cyan("npx rapidkit dev")} ${i.gray("# Start dev server")}
596
+ ${a.bold("\u{1F680} Get started:")}
597
+ ${a.cyan(`cd ${y}`)}
598
+ ${t.skipInstall?a.cyan("npx rapidkit init")+a.gray(" # npm install")+`
599
+ `:""}${a.cyan("cp .env.example .env")}
600
+ ${a.cyan("npx rapidkit dev")} ${a.gray("# Start dev server")}
601
601
 
602
- ${i.bold("\u{1F4DA} Available commands:")}
602
+ ${a.bold("\u{1F4DA} Available commands:")}
603
603
  npx rapidkit init # Install dependencies
604
604
  npx rapidkit dev # Start dev server with hot reload
605
605
  npx rapidkit start # Start production server
@@ -608,22 +608,22 @@ ${i.bold("\u{1F4DA} Available commands:")}
608
608
  npx rapidkit lint # Lint code
609
609
  npx rapidkit format # Format code
610
610
 
611
- ${i.bold("\u{1F310} API endpoints:")}
611
+ ${a.bold("\u{1F310} API endpoints:")}
612
612
  http://localhost:8000/health # Health check
613
613
  http://localhost:8000/docs # Swagger docs
614
614
  http://localhost:8000/examples/notes # Example API
615
615
 
616
- ${i.gray("\u{1F4A1} Tip: Install globally (npm i -g rapidkit) to use without npx")}
617
- `);}catch(c){throw o.fail(`Failed to create ${a} project`),c}}async function N(e,t,r){let a=await promises.readdir(e,{withFileTypes:true});for(let o of a){let c=l.join(e,o.name),n=o.name.replace(/\.j2$/,""),s=l.join(t,n);if(o.isDirectory())await promises.mkdir(s,{recursive:true}),await N(c,s,r);else {let d=await promises.readFile(c,"utf-8");o.name.endsWith(".j2")&&(d=F(d,r)),await promises.writeFile(s,d),(n==="rapidkit"||n==="activate"||n.endsWith(".py")&&s.includes(".rapidkit"))&&await promises.chmod(s,493);}}}function F(e,t){let r=e;for(let[a,o]of Object.entries(t)){let c=new RegExp(`\\{\\{\\s*${a}\\s*\\}\\}`,"g");r=r.replace(c,String(o));let n=new RegExp(`\\{\\{\\s*${a}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\}\\}`,"g");r=r.replace(n,(h,m,g)=>String(o).replace(new RegExp(m,"g"),g));let s=new RegExp(`\\{\\{\\s*${a}\\s*\\|\\s*lower\\s*\\}\\}`,"g");r=r.replace(s,String(o).toLowerCase());let d=new RegExp(`\\{\\{\\s*${a}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\|\\s*lower\\s*\\}\\}`,"g");r=r.replace(d,(h,m,g)=>String(o).replace(new RegExp(m,"g"),g).toLowerCase());}return r}async function X(){let e=j(),t=l.join(e,"workspaces.json");if(!await promises.stat(t).catch(()=>null)){console.log(i.yellow(`
616
+ ${a.gray("\u{1F4A1} Tip: Install globally (npm i -g rapidkit) to use without npx")}
617
+ `);}catch(s){throw i.fail(`Failed to create ${o} project`),s}}async function W(e,t,r){let o=await promises.readdir(e,{withFileTypes:true});for(let i of o){let s=n.join(e,i.name),c=i.name.replace(/\.j2$/,""),p=n.join(t,c);if(i.isDirectory())await promises.mkdir(p,{recursive:true}),await W(s,p,r);else {let d=await promises.readFile(s,"utf-8");i.name.endsWith(".j2")&&(d=z(d,r)),await promises.writeFile(p,d),(c==="rapidkit"||c==="activate"||c.endsWith(".py")&&p.includes(".rapidkit"))&&await promises.chmod(p,493);}}}function z(e,t){let r=e;for(let[o,i]of Object.entries(t)){let s=new RegExp(`\\{\\{\\s*${o}\\s*\\}\\}`,"g");r=r.replace(s,String(i));let c=new RegExp(`\\{\\{\\s*${o}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\}\\}`,"g");r=r.replace(c,(u,m,g)=>String(i).replace(new RegExp(m,"g"),g));let p=new RegExp(`\\{\\{\\s*${o}\\s*\\|\\s*lower\\s*\\}\\}`,"g");r=r.replace(p,String(i).toLowerCase());let d=new RegExp(`\\{\\{\\s*${o}\\s*\\|\\s*replace\\s*\\(\\s*['"]([^'"]+)['"]\\s*,\\s*['"]([^'"]*)['"]\\s*\\)\\s*\\|\\s*lower\\s*\\}\\}`,"g");r=r.replace(d,(u,m,g)=>String(i).replace(new RegExp(m,"g"),g).toLowerCase());}return r}async function re(){let e=j$1(),t=n.join(e,"workspaces.json");if(!await promises.stat(t).catch(()=>null)){console.log(a.yellow(`
618
618
  \u26A0\uFE0F No workspaces registered yet.
619
- `)),console.log(i.gray(`Create a workspace with: npx rapidkit <workspace-name>
620
- `));return}try{let r=await promises.readFile(t,"utf8"),a=JSON.parse(r);if(!a||typeof a!="object"||!Array.isArray(a.workspaces)){console.log(i.yellow(`
619
+ `)),console.log(a.gray(`Create a workspace with: npx rapidkit <workspace-name>
620
+ `));return}try{let r=await promises.readFile(t,"utf8"),o=JSON.parse(r);if(!o||typeof o!="object"||!Array.isArray(o.workspaces)){console.log(a.yellow(`
621
621
  \u26A0\uFE0F Workspace registry is invalid; resetting to empty state.
622
- `)),await promises.writeFile(t,JSON.stringify({workspaces:[]},null,2));return}let o=R(a),c=[],n=0;for(let m of o.workspaces)await promises.stat(m.path).catch(()=>null)?c.push(m):n+=1;let s={workspaces:c},d=JSON.stringify(a),h=JSON.stringify(s);if(d!==h&&await promises.writeFile(t,JSON.stringify(s,null,2)),!s.workspaces||s.workspaces.length===0){console.log(i.yellow(`
622
+ `)),await promises.writeFile(t,JSON.stringify({workspaces:[]},null,2));return}let i=x(o),s=[],c=0;for(let m of i.workspaces)await promises.stat(m.path).catch(()=>null)?s.push(m):c+=1;let p={workspaces:s},d=JSON.stringify(o),u=JSON.stringify(p);if(d!==u&&await promises.writeFile(t,JSON.stringify(p,null,2)),!p.workspaces||p.workspaces.length===0){console.log(a.yellow(`
623
623
  \u26A0\uFE0F No workspaces registered yet.
624
- `)),n>0&&console.log(i.gray(`Cleaned ${n} stale workspace entr${n===1?"y":"ies"}.
625
- `));return}console.log(i.bold(`
624
+ `)),c>0&&console.log(a.gray(`Cleaned ${c} stale workspace entr${c===1?"y":"ies"}.
625
+ `));return}console.log(a.bold(`
626
626
  \u{1F4E6} Registered RapidKit Workspaces:
627
- `));for(let m of s.workspaces)console.log(i.cyan(` ${m.name}`)),console.log(i.gray(` Path: ${m.path}`)),console.log(i.gray(` Projects: ${m.projects?.length||0}`)),console.log();n>0&&console.log(i.gray(`Cleaned ${n} stale workspace entr${n===1?"y":"ies"}.`)),console.log(i.gray(`Total: ${s.workspaces.length} workspace(s)
628
- `));}catch(r){console.error(i.red(`
629
- \u274C Failed to read workspace registry`)),console.error(i.gray(String(r)));}}export{Q as createProject,q as createWorkspace,X as listWorkspaces,H as registerProjectInWorkspace,I as registerWorkspace,V as syncWorkspaceProjects};
627
+ `));for(let m of p.workspaces)console.log(a.cyan(` ${m.name}`)),console.log(a.gray(` Path: ${m.path}`)),console.log(a.gray(` Projects: ${m.projects?.length||0}`)),console.log();c>0&&console.log(a.gray(`Cleaned ${c} stale workspace entr${c===1?"y":"ies"}.`)),console.log(a.gray(`Total: ${p.workspaces.length} workspace(s)
628
+ `));}catch(r){console.error(a.red(`
629
+ \u274C Failed to read workspace registry`)),console.error(a.gray(String(r)));}}async function P(e){try{let t=await promises.readFile(e,"utf8");return JSON.parse(t)}catch{return null}}async function D(e){try{return await promises.access(e),true}catch{return false}}async function U(e){let t=[],r=[e],o=new Set;for(;r.length>0;){let i=r.shift();if(!i||o.has(i))continue;o.add(i);let s=[];try{s=await promises.readdir(i,{withFileTypes:true});}catch{continue}for(let c of s){if(!c.isDirectory()||c.name.startsWith(".")||["node_modules","dist","build","target","coverage","htmlcov"].includes(c.name))continue;let p=n.join(i,c.name),d=await D(n.join(p,".rapidkit","context.json")),u=await D(n.join(p,".rapidkit","project.json"));(d||u)&&t.push(p),r.push(p);}}return t.sort((i,s)=>i.localeCompare(s))}async function L(e){try{return (await promises.readdir(e,{withFileTypes:true})).filter(r=>r.isFile()&&r.name.toLowerCase().endsWith(".json")).map(r=>r.name).sort((r,o)=>r.localeCompare(o))}catch{return []}}async function ie(e,t){let r=t?.includePaths===true,o=t?.includeDoctorEvidence!==false,i=n.resolve(e),s=await P(n.join(i,".rapidkit","workspace.json")),c=typeof s?.workspace_name=="string"&&s.workspace_name.trim()||n.basename(i),p=typeof s?.profile=="string"?s.profile:void 0,d=typeof s?.rapidkit_version=="string"?s.rapidkit_version:void 0,u=await U(i),m=[];for(let h of u){let v=await P(n.join(h,".rapidkit","project.json")),E=n.relative(i,h)||".",_=n.join(h,".rapidkit","reports"),$={name:n.basename(h),relative_path:E,runtime:typeof v?.runtime=="string"?v.runtime:void 0,kit_name:typeof v?.kit_name=="string"?v.kit_name:void 0};if(r&&($.absolute_path=h),o){let R=await P(n.join(_,"doctor-last-run.json"));R&&($.doctor_report=R);}let N=await L(_);N.length>0&&($.reports=N),m.push($);}let g=n.join(i,".rapidkit","reports"),f=await L(g),y={schema_version:"1.0",generated_at:new Date().toISOString(),generated_by:"rapidkit-npm",workspace:{name:c,relative_root:".",profile:p,rapidkit_version:d,...r?{absolute_root:i}:{}},summary:{project_count:m.length,doctor_evidence_included:o},reports:{workspace:f},projects:m},k=t?.outputPath?n.resolve(t.outputPath):n.join(g,"share-bundle.json");return await promises.mkdir(n.dirname(k),{recursive:true}),await promises.writeFile(k,JSON.stringify(y,null,2),"utf8"),k}export{te as createProject,ee as createWorkspace,ie as createWorkspaceShareBundle,re as listWorkspaces,Z as registerProjectInWorkspace,A as registerWorkspace,X as syncWorkspaceProjects};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapidkit",
3
- "version": "0.26.0",
3
+ "version": "0.27.1",
4
4
  "type": "module",
5
5
  "description": "Official CLI for RapidKit, an open-source workspace platform that standardizes how teams build, scale, and deploy backend services.",
6
6
  "keywords": [