@crossdelta/platform-sdk 0.8.32 → 0.8.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/bin/cli.js +1 -1
  2. package/install.sh +14 -14
  3. package/package.json +1 -1
package/bin/cli.js CHANGED
@@ -311,7 +311,7 @@ export default config
311
311
  `}var SE=4001,kE=4e3;function _E(r){let e=[],t=r.matchAll(/ports\(\)\.(?:http|https|grpc|primary)\((\d+)\)/g);for(let c of t)e.push(Number(c[1]));let s=r.matchAll(/\.add(?:Http|Grpc)?\((\d+)/g);for(let c of s)e.push(Number(c[1]));let i=r.match(/containerPort\s*:\s*(\d+)/);i&&e.push(Number(i[1]));let n=r.match(/internalPorts\s*:\s*\[([^\]]+)\]/);if(n){let c=n[1].match(/\d+/g);c&&e.push(...c.map(Number))}let o=r.match(/httpPort\s*:\s*(\d+)/);o&&e.push(Number(o[1]));let a=r.matchAll(/const\s+\w*[pP]ort\w*\s*=\s*(\d+)/g);for(let c of a)e.push(Number(c[1]));return e}function AE(r,e){let t=e?SE:kE,s=new Set;if(!(0,qt.existsSync)(r))return t;let i=(0,qt.readdirSync)(r).filter(o=>o.endsWith(".ts"));for(let o of i){let a=(0,Qs.join)(r,o);try{let c=(0,qt.readFileSync)(a,"utf-8"),l=_E(c);for(let u of l)s.add(u)}catch{}}let n=t;for(;s.has(n);)n++;return n}function FE(r){return(0,Qs.basename)(r)}var ka={title:"Creating infrastructure service config",task:async(r,e)=>{let t=FE(r.projectName),s=oe(),i=(0,Qs.join)(s,"infra","services");if(!(0,qt.existsSync)(i)){e.title="Skipping infra config (no infra/services directory found)";return}let n=(0,Qs.join)(i,`${t}.ts`);if((0,qt.existsSync)(n)){e.title=`Service config already exists: infra/services/${t}.ts`;return}let o=AE(i,!0);r.assignedPort=o;let a=r.serviceType==="hono"?nb(t,o):ob(t,o);(0,qt.writeFileSync)(n,a),e.title=`Created infra/services/${t}.ts (port: ${o})`}};var gn=require("node:child_process"),ab=require("node:fs"),cb=require("node:path"),TE=()=>{try{return(0,gn.execSync)("git --version",{stdio:"ignore"}),!0}catch{return!1}},PE=r=>(0,ab.existsSync)((0,cb.join)(r,".git")),lb={title:"Initializing git repository",enabled:()=>TE(),skip:r=>PE(r.cwd)?"Already a git repository":!1,task:async(r,e)=>{try{(0,gn.execSync)("git init",{cwd:r.cwd,stdio:"ignore"}),(0,gn.execSync)("git add -A",{cwd:r.cwd,stdio:"ignore"}),(0,gn.execSync)('git commit -m "chore: initial commit"',{cwd:r.cwd,stdio:"ignore",env:{...process.env,GIT_AUTHOR_NAME:process.env.GIT_AUTHOR_NAME||"Platform SDK",GIT_AUTHOR_EMAIL:process.env.GIT_AUTHOR_EMAIL||"platform-sdk@localhost",GIT_COMMITTER_NAME:process.env.GIT_COMMITTER_NAME||"Platform SDK",GIT_COMMITTER_EMAIL:process.env.GIT_COMMITTER_EMAIL||"platform-sdk@localhost"}}),e.title="Git repository initialized with initial commit"}catch{e.title="Git initialization skipped (git error)"}}};var mh=C(require("chalk"));var ei={title:"Installing Bun",enabled:r=>!!r.shouldInstallBun&&!ih(),task:async(r,e)=>Ee(e,async t=>{await n1(e),r.elapsedTime+=t(),e.title=`Bun installed successfully. (${r.elapsedTime}s)`})},ti={enabled:r=>!ih()&&!r.shouldInstallBun&&!r.packageManager,task:async(r,e)=>{r.shouldInstallBun=await e.prompt(H).run({type:"Toggle",message:"Would you like to use Bun? (recommended)",initial:!0,footer:["",`${mh.default.magenta.bold("Bun")} is a fast JavaScript runtime, package manager, bundler, and test runner: ${mh.default.underline("https://bun.sh")}`,o1(),a1()].join(`
312
312
  `)}),r.shouldInstallBun&&(r.packageManager="bun")}};var xh=C(require("chalk"));var _a={title:"Install integrations",enabled:r=>r.selectedIntegrations.length>0,task:async(r,e)=>Ee(e,async t=>{let{selectedIntegrations:s,cwd:i,packageManager:n}=r;await h1({selectedIntegrations:s,packageManager:n,cwd:i,task:e}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1e3}},Aa={title:"Select integrations",enabled:r=>r.selectedIntegrations.length===0,task:async(r,e)=>{r.selectedIntegrations=await e.prompt(H).run({type:"MultiSelect",hint:`
313
313
  Press <space> to select/deselect, <enter> to confirm, <i> to invert selection`,message:"Which integrations would you like to include?",initial:Ys().map((t,s)=>s),choices:r.availableIntegrations.map(({name:t,description:s})=>({name:t,message:[xh.default.bold(t),s].join(" - "),value:t}))}),!r.selectedIntegrations||r.selectedIntegrations.length===0?e.title="No integrations selected.":e.title=["Selected integrations:",...r.selectedIntegrations.map(t=>xh.default.bold(`\u2022 ${t}`))].join(`
314
- `)}};var ub={title:"Install Nest CLI",task:async(r,e)=>Ee(e,async t=>{await R2({packages:["@nestjs/cli"],task:e,cwd:r.cwd}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1e3}};var Fa={title:"Install dependencies",task:async(r,e)=>Ee(e,async t=>{await Lt({cwd:r.cwd,task:e,packageManager:r.packageManager}),r.elapsedTime+=t()})};var hb=C(require("chalk"));var ri={enabled:r=>!r.removeDir&&!ra(r.cwd),task:async(r,e)=>{if(r.removeDir=await e.prompt(H).run({type:"Toggle",message:hb.default.bold("\u26A0\uFE0F Overwrite existing directory?"),initial:!1}),!r.removeDir)throw new Error("Project creation was canceled by the user.")}},si={enabled:r=>!!r.removeDir,task:async r=>o2(r.cwd)};var Ta={title:"Run integration commands",enabled:r=>r.selectedIntegrations.length>0,task:async(r,e)=>Ee(e,async t=>{let{selectedIntegrations:s,cwd:i}=r;await d1({selectedIntegrations:s,cwd:i,task:e,packageManager:r.packageManager}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1}};var OE=["services/my-hono-service","services/my-nest-service","my-platform"],ii={enabled:r=>r.skipInputPrompts||r.userConfirmed?!1:r.projectName?OE.includes(r.projectName):!0,task:async(r,e)=>{r.projectName=await e.prompt(H).run({type:"Input",initial:r.projectName,message:"Enter project name",validate:t=>t?!0:"Project name is required."}),r.cwd&&(r.cwd=ne(r.projectName))}};var gh=C(require("chalk"));var ni={title:"Select Package manager",task:async(r,e)=>{if(r.packageManager??=X0(),r.packageManager){e.title=`Using ${gh.default.bold(r.packageManager)} as package manager.`;return}r.packageManager=await e.prompt(H).run({type:"Select",message:"Which package manager would you like to use?",initial:Q0(),choices:B2}),e.title=`Using ${gh.default.bold(r.packageManager)} as package manager.`}};var bn=C(require("chalk")),fb={title:"GitHub repository owner",task:async(r,e)=>{if(r.githubOwner){e.title=`GitHub owner: ${bn.default.bold(r.githubOwner)}`;return}r.githubOwner=await e.prompt(H).run({type:"Input",message:"Enter GitHub organization or username",initial:"my-org",validate:t=>t?.trim()?!0:"GitHub owner is required."}),e.title=`GitHub owner: ${bn.default.bold(r.githubOwner)}`}},db={title:"Include GitHub CI/CD",task:async(r,e)=>{if(r.includeGitHubCI!==void 0){e.title=r.includeGitHubCI?"Including GitHub CI/CD workflows":"Skipping GitHub CI/CD";return}r.includeGitHubCI=await e.prompt(H).run({type:"Toggle",message:"Include GitHub Actions workflows and CI/CD?",initial:!0,enabled:"Yes",disabled:"No"}),e.title=r.includeGitHubCI?"Including GitHub CI/CD workflows":"Skipping GitHub CI/CD"}};var pb={title:"Pulumi stack name",task:async(r,e)=>{if(r.pulumiStackBase){e.title=`Pulumi stack: ${bn.default.bold(r.pulumiStackBase)}`;return}let t=r.githubOwner||"myorg",s=r.projectName?.replace(/[^a-zA-Z0-9-]/g,"-")||"myproject",i=`${t}/${s}`;r.pulumiStackBase=await e.prompt(H).run({type:"Input",message:"Enter Pulumi stack base name (org/project)",initial:i,validate:n=>n?.trim()?n.includes("/")?!0:"Format should be org/project (e.g., myorg/myproject)":"Pulumi stack name is required."}),e.title=`Pulumi stack: ${bn.default.bold(r.pulumiStackBase)}`}};var oi=require("node:fs"),es=require("node:path");var Oa=require("node:fs"),Pa=require("node:path"),mb=C(require("handlebars")),IE=r=>r.toUpperCase().replace(/-/g,"_"),BE=()=>{let r=[(0,Pa.join)(__dirname,"templates","hono-microservice"),(0,Pa.join)(__dirname,"..","hono-microservice","templates")];for(let e of r)if((0,Oa.existsSync)(e))return e;throw new Error(`Hono templates directory not found. Searched in: ${r.join(", ")}`)},yh=(r,e)=>{let t=BE(),s=(0,Pa.join)(t,r),i=(0,Oa.readFileSync)(s,"utf-8");return mb.default.compile(i)(e)};function xb(r){return yh("src/index.ts.hbs",{serviceName:r,envKey:IE(r)})}function gb(){return yh("tsconfig.json.hbs",{})}function bb(r="1.2.23"){return yh("Dockerfile.hbs",{bunVersion:r})}var yb={title:"Create Hono app structure",rendererOptions:{outputBar:1e3},task:async(r,e)=>Ee(e,async t=>{try{await sr("create-hono@latest",[r.projectName,"--pm",r.packageManager,"--template","bun","--install"],{task:e})}catch{let l=(0,es.join)(ne(r.projectName),"src","index.ts");if(!(0,oi.existsSync)(l))throw new Error("Failed to scaffold Hono app structure")}let s=(0,es.basename)(r.projectName),i="bun run --hot src/index.ts",n=ia();je("scripts.dev",i,r.projectName),je("scripts.start:dev",i,r.projectName),je("scripts.test","bun test",r.projectName),je("name",`${n}/${s}`,r.projectName),je(`dependencies.${n}/contracts`,"workspace:*",r.projectName);let o=(0,es.join)(ne(r.projectName),"src","index.ts");(0,oi.writeFileSync)(o,xb(s));let a=(0,es.join)(ne(r.projectName),"tsconfig.json");(0,oi.writeFileSync)(a,gb());let c=(0,es.join)(ne(r.projectName),"Dockerfile");(0,oi.writeFileSync)(c,bb()),r.elapsedTime+=t()})};async function RE(r,e){let{valid:t,config:s,error:i}=Ks();(!t||!s)&&(console.log(i),process.exit(1));let n=(r||"my-hono-service").trim();!n.includes("/")&&!n.startsWith(".")&&(n=`${yt().services}/${n}`);let o=await ma(e.description);xa(n,s,o);try{await ga({servicePath:n,description:o,serviceType:"hono"},s)?(console.log(Ct.default.green.bold(`
314
+ `)}};var ub={title:"Install Nest CLI",task:async(r,e)=>Ee(e,async t=>{await R2({packages:["@nestjs/cli"],task:e,cwd:r.cwd}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1e3}};var Fa={title:"Install dependencies",task:async(r,e)=>Ee(e,async t=>{await Lt({cwd:r.cwd,task:e,packageManager:r.packageManager}),r.elapsedTime+=t()})};var hb=C(require("chalk"));var ri={enabled:r=>!r.removeDir&&!ra(r.cwd),task:async(r,e)=>{if(r.removeDir=await e.prompt(H).run({type:"Toggle",message:hb.default.bold("\u26A0\uFE0F Overwrite existing directory?"),initial:!1}),!r.removeDir)throw new Error("Project creation was canceled by the user.")}},si={enabled:r=>!!r.removeDir,task:async r=>o2(r.cwd)};var Ta={title:"Run integration commands",enabled:r=>r.selectedIntegrations.length>0,task:async(r,e)=>Ee(e,async t=>{let{selectedIntegrations:s,cwd:i}=r;await d1({selectedIntegrations:s,cwd:i,task:e,packageManager:r.packageManager}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1}};var OE=["services/my-hono-service","services/my-nest-service","my-platform"],ii={enabled:r=>r.skipInputPrompts||r.userConfirmed?!1:r.projectName?OE.includes(r.projectName):!0,task:async(r,e)=>{r.projectName=await e.prompt(H).run({type:"Input",initial:r.projectName,message:"Enter project name",validate:t=>t?!0:"Project name is required."}),r.cwd&&(r.cwd=ne(r.projectName))}};var gh=C(require("chalk"));var ni={title:"Select Package manager",task:async(r,e)=>{if(r.packageManager??=X0(),r.packageManager){e.title=`Using ${gh.default.bold(r.packageManager)} as package manager.`;return}r.packageManager=await e.prompt(H).run({type:"Select",message:"Which package manager would you like to use?",initial:Q0(),choices:B2}),e.title=`Using ${gh.default.bold(r.packageManager)} as package manager.`}};var bn=C(require("chalk")),fb={title:"GitHub repository owner",task:async(r,e)=>{if(r.githubOwner){e.title=`GitHub owner: ${bn.default.bold(r.githubOwner)}`;return}r.githubOwner=await e.prompt(H).run({type:"Input",message:"Enter GitHub organization or username",initial:"my-org",validate:t=>t?.trim()?!0:"GitHub owner is required."}),e.title=`GitHub owner: ${bn.default.bold(r.githubOwner)}`}},db={title:"Include GitHub CI/CD",task:async(r,e)=>{if(r.includeGitHubCI!==void 0){e.title=r.includeGitHubCI?"Including GitHub CI/CD workflows":"Skipping GitHub CI/CD";return}r.includeGitHubCI=await e.prompt(H).run({type:"Toggle",message:"Include GitHub Actions workflows and CI/CD?",initial:!0,enabled:"Yes",disabled:"No"}),e.title=r.includeGitHubCI?"Including GitHub CI/CD workflows":"Skipping GitHub CI/CD"}};var pb={title:"Pulumi stack name",task:async(r,e)=>{if(r.pulumiStackBase){e.title=`Pulumi stack: ${bn.default.bold(r.pulumiStackBase)}`;return}let t=r.githubOwner||"myorg",s=r.projectName?.replace(/[^a-zA-Z0-9-]/g,"-")||"myproject",i=`${t}/${s}`;r.pulumiStackBase=await e.prompt(H).run({type:"Input",message:"Enter Pulumi stack base name (org/project)",initial:i,validate:n=>n?.trim()?n.includes("/")?!0:"Format should be org/project (e.g., myorg/myproject)":"Pulumi stack name is required."}),e.title=`Pulumi stack: ${bn.default.bold(r.pulumiStackBase)}`}};var oi=require("node:fs"),es=require("node:path");var Oa=require("node:fs"),Pa=require("node:path"),mb=C(require("handlebars")),IE=r=>r.toUpperCase().replace(/-/g,"_"),BE=()=>{let r=[(0,Pa.join)(__dirname,"templates","hono-microservice"),(0,Pa.join)(__dirname,"..","hono-microservice","templates")];for(let e of r)if((0,Oa.existsSync)(e))return e;throw new Error(`Hono templates directory not found. Searched in: ${r.join(", ")}`)},yh=(r,e)=>{let t=BE(),s=(0,Pa.join)(t,r),i=(0,Oa.readFileSync)(s,"utf-8");return mb.default.compile(i)(e)};function xb(r){return yh("src/index.ts.hbs",{serviceName:r,envKey:IE(r)})}function gb(){return yh("tsconfig.json.hbs",{})}function bb(r="1.2.23"){return yh("Dockerfile.hbs",{bunVersion:r})}var yb={title:"Create Hono app structure",rendererOptions:{outputBar:1e3},task:async(r,e)=>Ee(e,async t=>{try{await sr("create-hono@latest",[r.projectName,"--pm",r.packageManager,"--template","bun","--install"],{task:e})}catch{}let s=(0,es.join)(ne(r.projectName),"package.json");if(!(0,oi.existsSync)(s))throw new Error("Failed to scaffold Hono app structure - package.json not created");let i=(0,es.basename)(r.projectName),n="bun run --hot src/index.ts",o=ia();je("scripts.dev",n,r.projectName),je("scripts.start:dev",n,r.projectName),je("scripts.test","bun test",r.projectName),je("name",`${o}/${i}`,r.projectName),je(`dependencies.${o}/contracts`,"workspace:*",r.projectName);let a=(0,es.join)(ne(r.projectName),"src","index.ts");(0,oi.writeFileSync)(a,xb(i));let c=(0,es.join)(ne(r.projectName),"tsconfig.json");(0,oi.writeFileSync)(c,gb());let l=(0,es.join)(ne(r.projectName),"Dockerfile");(0,oi.writeFileSync)(l,bb()),r.elapsedTime+=t()})};async function RE(r,e){let{valid:t,config:s,error:i}=Ks();(!t||!s)&&(console.log(i),process.exit(1));let n=(r||"my-hono-service").trim();!n.includes("/")&&!n.startsWith(".")&&(n=`${yt().services}/${n}`);let o=await ma(e.description);xa(n,s,o);try{await ga({servicePath:n,description:o,serviceType:"hono"},s)?(console.log(Ct.default.green.bold(`
315
315
  \u2705 Service generated successfully!
316
316
  `)),console.log(Ct.default.dim("Next steps:")),console.log(Ct.default.dim(` ${Ct.default.cyan("pf dev")} - Start all services`)),console.log(Ct.default.dim(` ${Ct.default.cyan(`cd ${n} && bun dev`)} - Start this service only`)),console.log(),process.exit(0)):(console.log(Ct.default.red.bold(`
317
317
  \u274C Service generation failed
package/install.sh CHANGED
@@ -11,15 +11,15 @@ NC='\033[0m'
11
11
 
12
12
  printf "${CYAN}"
13
13
  cat << "EOF"
14
- ______
14
+ ______
15
15
  / ____/
16
- ____ / /_
17
- / __ \ / __/
18
- / /_/ // /
19
- / .___//_/
20
- /_/
21
-
22
- @crossdelta/platform-sdk installer
16
+ ____ / /_
17
+ / __ \ / __/
18
+ / /_/ // /
19
+ / .___//_/
20
+ /_/
21
+
22
+ @crossdelta/platform-sdk installer
23
23
  EOF
24
24
  printf "${NC}\n"
25
25
 
@@ -44,28 +44,28 @@ detect_or_install_package_manager() {
44
44
  echo "npm"
45
45
  return 0
46
46
  fi
47
-
47
+
48
48
  # No package manager found - ask user for permission
49
49
  printf "${YELLOW}No package manager found (bun, pnpm, yarn, npm).${NC}\n"
50
50
  printf "${YELLOW}To use @crossdelta/platform-sdk, we recommend installing Bun (fast JavaScript runtime).${NC}\n"
51
51
  printf "\n"
52
52
  read -p "Do you want to install Bun now? (y/n) " -n 1 -r
53
53
  printf "\n"
54
-
54
+
55
55
  if [[ ! $REPLY =~ ^[Yy]$ ]]; then
56
56
  printf "${RED}Installation cancelled. Please install Bun or another package manager manually.${NC}\n"
57
57
  printf "${BLUE}Visit: https://bun.sh${NC}\n"
58
58
  exit 1
59
59
  fi
60
-
60
+
61
61
  # Install Bun
62
62
  printf "${BLUE}Installing Bun...${NC}\n"
63
63
  curl -fsSL https://bun.sh/install | bash
64
-
64
+
65
65
  # Load Bun into current shell
66
66
  export BUN_INSTALL="$HOME/.bun"
67
67
  export PATH="$BUN_INSTALL/bin:$PATH"
68
-
68
+
69
69
  printf "${GREEN}✓${NC} Bun installed successfully\n"
70
70
  echo "bun"
71
71
  }
@@ -117,7 +117,7 @@ if [ $# -eq 0 ]; then
117
117
  else
118
118
  # Arguments provided: Run pf command directly
119
119
  PF_ARGS=()
120
-
120
+
121
121
  while [[ $# -gt 0 ]]; do
122
122
  case $1 in
123
123
  -h|--help)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossdelta/platform-sdk",
3
- "version": "0.8.32",
3
+ "version": "0.8.33",
4
4
  "description": "Platform toolkit for event-driven microservices — keeping code and infrastructure in lockstep.",
5
5
  "keywords": [
6
6
  "cli",