@crossdelta/platform-sdk 0.3.27 → 0.3.28

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/README.md +1 -2
  2. package/bin/cli.js +1 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -77,8 +77,7 @@
77
77
  npm install -g @crossdelta/platform-sdk
78
78
  pf new workspace my-platform
79
79
 
80
- # Or use directly with npx/bunx (no installation required)
81
- npx @crossdelta/platform-sdk new workspace my-platform
80
+ # Or use directly with bunx (no installation required)
82
81
  bunx @crossdelta/platform-sdk new workspace my-platform
83
82
  ```
84
83
 
package/bin/cli.js CHANGED
@@ -226,7 +226,7 @@ export default config
226
226
  `}var SC=4001,EC=4e3;function kC(r){let e=[],t=r.match(/containerPort\s*:\s*(\d+)/);t&&e.push(Number(t[1]));let s=r.match(/internalPorts\s*:\s*\[([^\]]+)\]/);if(s){let o=s[1].match(/\d+/g);o&&e.push(...o.map(Number))}let i=r.match(/httpPort\s*:\s*(\d+)/);i&&e.push(Number(i[1]));let n=r.matchAll(/const\s+\w*[pP]ort\w*\s*=\s*(\d+)/g);for(let o of n)e.push(Number(o[1]));return e}function _C(r,e){let t=e?SC:EC,s=new Set;if(!(0,Vt.existsSync)(r))return t;let i=(0,Vt.readdirSync)(r).filter(o=>o.endsWith(".ts"));for(let o of i){let a=(0,wi.join)(r,o);try{let c=(0,Vt.readFileSync)(a,"utf-8"),l=kC(c);for(let u of l)s.add(u)}catch{}}let n=t;for(;s.has(n);)n++;return n}function AC(r){return(0,wi.basename)(r)}var Ua={title:"Creating infrastructure service config",task:async(r,e)=>{let t=AC(r.projectName),s=En(),i=(0,wi.join)(s,"infra","services");if(!(0,Vt.existsSync)(i)){e.title="Skipping infra config (no infra/services directory found)";return}let n=(0,wi.join)(i,`${t}.ts`);if((0,Vt.existsSync)(n)){e.title=`Service config already exists: infra/services/${t}.ts`;return}let o=_C(i,!0);r.assignedPort=o;let a=r.serviceType==="hono"?d1(t,o):p1(t,o);(0,Vt.writeFileSync)(n,a),e.title=`Created infra/services/${t}.ts (port: ${o})`}};var Rn=require("node:child_process"),x1=require("node:fs"),m1=require("node:path"),TC=()=>{try{return(0,Rn.execSync)("git --version",{stdio:"ignore"}),!0}catch{return!1}},FC=r=>(0,x1.existsSync)((0,m1.join)(r,".git")),g1={title:"Initializing git repository",enabled:()=>TC(),skip:r=>FC(r.cwd)?"Already a git repository":!1,task:async(r,e)=>{try{(0,Rn.execSync)("git init",{cwd:r.cwd,stdio:"ignore"}),(0,Rn.execSync)("git add -A",{cwd:r.cwd,stdio:"ignore"}),(0,Rn.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 nh=_(require("chalk"));var Di={title:"Installing Bun",enabled:r=>!!r.shouldInstallBun&&!H0(),task:async(r,e)=>Te(e,async t=>{await Xg(e),r.elapsedTime+=t(),e.title=`Bun installed successfully. (${r.elapsedTime}s)`})},vi={enabled:r=>!H0()&&!r.shouldInstallBun&&!r.packageManager,task:async(r,e)=>{r.shouldInstallBun=await e.prompt(oe).run({type:"Toggle",message:"Would you like to use Bun? (recommended)",initial:!0,footer:["",`${nh.default.magenta.bold("Bun")} is a fast JavaScript runtime, package manager, bundler, and test runner: ${nh.default.underline("https://bun.sh")}`,Qg(),e2()].join(`
227
227
  `)}),r.shouldInstallBun&&(r.packageManager="bun")}};var oh=_(require("chalk"));var Wa={title:"Install integrations",enabled:r=>r.selectedIntegrations.length>0,task:async(r,e)=>Te(e,async t=>{let{selectedIntegrations:s,cwd:i,packageManager:n}=r;await p2({selectedIntegrations:s,packageManager:n,cwd:i,task:e}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1e3}},qa={title:"Select integrations",enabled:r=>r.selectedIntegrations.length===0,task:async(r,e)=>{r.selectedIntegrations=await e.prompt(oe).run({type:"MultiSelect",hint:`
228
228
  Press <space> to select/deselect, <enter> to confirm, <i> to invert selection`,message:"Which integrations would you like to include?",initial:mi().map((t,s)=>s),choices:r.availableIntegrations.map(({name:t,description:s})=>({name:t,message:[oh.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=>oh.default.bold(`\u2022 ${t}`))].join(`
229
- `)}};var b1={title:"Install Nest CLI",task:async(r,e)=>Te(e,async t=>{await Ng({packages:["@nestjs/cli"],task:e,cwd:r.cwd}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1e3}};var Ha={title:"Install dependencies",task:async(r,e)=>Te(e,async t=>{await Er({cwd:r.cwd,task:e,packageManager:r.packageManager}),r.elapsedTime+=t()})};var y1=_(require("chalk"));var Ci={enabled:r=>!r.removeDir&&!ma(r.cwd),task:async(r,e)=>{if(r.removeDir=await e.prompt(oe).run({type:"Toggle",message:y1.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=>ga(r.cwd)};var Va={title:"Run integration commands",enabled:r=>r.selectedIntegrations.length>0,task:async(r,e)=>Te(e,async t=>{let{selectedIntegrations:s,cwd:i}=r;await m2({selectedIntegrations:s,cwd:i,task:e,packageManager:r.packageManager}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1}};var OC=["services/my-hono-service","services/my-nest-service","my-platform"],Ei={enabled:r=>r.userConfirmed?!1:r.projectName?OC.includes(r.projectName):!0,task:async(r,e)=>{r.projectName=await e.prompt(oe).run({type:"Input",initial:r.projectName,message:"Enter project name",validate:t=>t?!0:"Project name is required."}),r.cwd&&(r.cwd=de(r.projectName))}};var ah=_(require("chalk"));var ki={title:"Select Package manager",task:async(r,e)=>{if(r.packageManager){e.title=`Using ${ah.default.bold(r.packageManager)} as package manager.`;return}r.packageManager=await e.prompt(oe).run({type:"Select",message:"Which package manager would you like to use?",initial:Fe(),choices:jg}),e.title=`Using ${ah.default.bold(r.packageManager)} as package manager.`}};var Mn=_(require("chalk")),w1={title:"GitHub repository owner",task:async(r,e)=>{if(r.githubOwner){e.title=`GitHub owner: ${Mn.default.bold(r.githubOwner)}`;return}r.githubOwner=await e.prompt(oe).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: ${Mn.default.bold(r.githubOwner)}`}},D1={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(oe).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 v1={title:"Pulumi stack name",task:async(r,e)=>{if(r.pulumiStackBase){e.title=`Pulumi stack: ${Mn.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(oe).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: ${Mn.default.bold(r.pulumiStackBase)}`}};var Ka=require("node:fs"),_i=require("node:path");var za=require("node:fs"),Ga=require("node:path"),C1=_(require("handlebars")),BC=r=>r.toUpperCase().replace(/-/g,"_"),PC=()=>{let r=[(0,Ga.join)(__dirname,"templates","hono-microservice"),(0,Ga.join)(__dirname,"..","hono-microservice","templates")];for(let e of r)if((0,za.existsSync)(e))return e;throw new Error(`Hono templates directory not found. Searched in: ${r.join(", ")}`)},lh=(r,e)=>{let t=PC(),s=(0,Ga.join)(t,r),i=(0,za.readFileSync)(s,"utf-8");return C1.default.compile(i)(e)};function S1(r){return lh("src/index.ts.hbs",{serviceName:r,envKey:BC(r)})}function E1(){return lh("tsconfig.json.hbs",{})}function k1(r="1.2.23"){return lh("Dockerfile.hbs",{bunVersion:r})}var _1={title:"Create Hono app structure",rendererOptions:{outputBar:1e3},task:async(r,e)=>Te(e,async t=>{await kr("create-hono@latest",[r.projectName,"--pm",r.packageManager,"--template","bun","--install"],{task:e});let s=(0,_i.basename)(r.projectName),i="bun run --hot src/index.ts",n=Bg();ni("scripts.start:dev",i,r.projectName),ni("name",`${n}/${s}`,r.projectName);let o=(0,_i.join)(de(r.projectName),"src","index.ts");(0,Ka.writeFileSync)(o,S1(s));let a=(0,_i.join)(de(r.projectName),"tsconfig.json");(0,Ka.writeFileSync)(a,E1());let c=(0,_i.join)(de(r.projectName),"Dockerfile");(0,Ka.writeFileSync)(c,k1()),r.elapsedTime+=t()})};async function IC(r,e){let{valid:t,config:s,error:i}=ai();(!t||!s)&&(console.log(i),process.exit(1));let n=(r||"services/my-hono-service").trim(),o=await Ca(e.description);Ea(n,s,o);try{await Sa({servicePath:n,description:o,serviceType:"hono"},s)?(console.log(Xe.default.green.bold(`
229
+ `)}};var b1={title:"Install Nest CLI",task:async(r,e)=>Te(e,async t=>{await Ng({packages:["@nestjs/cli"],task:e,cwd:r.cwd}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1e3}};var Ha={title:"Install dependencies",task:async(r,e)=>Te(e,async t=>{await Er({cwd:r.cwd,task:e,packageManager:r.packageManager}),r.elapsedTime+=t()})};var y1=_(require("chalk"));var Ci={enabled:r=>!r.removeDir&&!ma(r.cwd),task:async(r,e)=>{if(r.removeDir=await e.prompt(oe).run({type:"Toggle",message:y1.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=>ga(r.cwd)};var Va={title:"Run integration commands",enabled:r=>r.selectedIntegrations.length>0,task:async(r,e)=>Te(e,async t=>{let{selectedIntegrations:s,cwd:i}=r;await m2({selectedIntegrations:s,cwd:i,task:e,packageManager:r.packageManager}),r.elapsedTime+=t()}),rendererOptions:{outputBar:1}};var OC=["services/my-hono-service","services/my-nest-service","my-platform"],Ei={enabled:r=>r.userConfirmed?!1:r.projectName?OC.includes(r.projectName):!0,task:async(r,e)=>{r.projectName=await e.prompt(oe).run({type:"Input",initial:r.projectName,message:"Enter project name",validate:t=>t?!0:"Project name is required."}),r.cwd&&(r.cwd=de(r.projectName))}};var ah=_(require("chalk"));var ki={title:"Select Package manager",task:async(r,e)=>{if(r.packageManager){e.title=`Using ${ah.default.bold(r.packageManager)} as package manager.`;return}r.packageManager=await e.prompt(oe).run({type:"Select",message:"Which package manager would you like to use?",initial:Fe(),choices:jg}),e.title=`Using ${ah.default.bold(r.packageManager)} as package manager.`}};var Mn=_(require("chalk")),w1={title:"GitHub repository owner",task:async(r,e)=>{if(r.githubOwner){e.title=`GitHub owner: ${Mn.default.bold(r.githubOwner)}`;return}r.githubOwner=await e.prompt(oe).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: ${Mn.default.bold(r.githubOwner)}`}},D1={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(oe).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 v1={title:"Pulumi stack name",task:async(r,e)=>{if(r.pulumiStackBase){e.title=`Pulumi stack: ${Mn.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(oe).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: ${Mn.default.bold(r.pulumiStackBase)}`}};var Ka=require("node:fs"),_i=require("node:path");var za=require("node:fs"),Ga=require("node:path"),C1=_(require("handlebars")),BC=r=>r.toUpperCase().replace(/-/g,"_"),PC=()=>{let r=[(0,Ga.join)(__dirname,"templates","hono-microservice"),(0,Ga.join)(__dirname,"..","hono-microservice","templates")];for(let e of r)if((0,za.existsSync)(e))return e;throw new Error(`Hono templates directory not found. Searched in: ${r.join(", ")}`)},lh=(r,e)=>{let t=PC(),s=(0,Ga.join)(t,r),i=(0,za.readFileSync)(s,"utf-8");return C1.default.compile(i)(e)};function S1(r){return lh("src/index.ts.hbs",{serviceName:r,envKey:BC(r)})}function E1(){return lh("tsconfig.json.hbs",{})}function k1(r="1.2.23"){return lh("Dockerfile.hbs",{bunVersion:r})}var _1={title:"Create Hono app structure",rendererOptions:{outputBar:1e3},task:async(r,e)=>Te(e,async t=>{await kr("create-hono@latest",[r.projectName,"--pm",r.packageManager,"--template","bun","--install"],{task:e});let s=(0,_i.basename)(r.projectName),i="bun run src/index.ts",n=Bg();ni("scripts.start:dev",i,r.projectName),ni("name",`${n}/${s}`,r.projectName);let o=(0,_i.join)(de(r.projectName),"src","index.ts");(0,Ka.writeFileSync)(o,S1(s));let a=(0,_i.join)(de(r.projectName),"tsconfig.json");(0,Ka.writeFileSync)(a,E1());let c=(0,_i.join)(de(r.projectName),"Dockerfile");(0,Ka.writeFileSync)(c,k1()),r.elapsedTime+=t()})};async function IC(r,e){let{valid:t,config:s,error:i}=ai();(!t||!s)&&(console.log(i),process.exit(1));let n=(r||"services/my-hono-service").trim(),o=await Ca(e.description);Ea(n,s,o);try{await Sa({servicePath:n,description:o,serviceType:"hono"},s)?(console.log(Xe.default.green.bold(`
230
230
  \u2705 Service generated successfully!
231
231
  `)),console.log(Xe.default.dim("Next steps:")),console.log(Xe.default.dim(` 1. ${Xe.default.cyan(`cd ${n}`)}`)),console.log(Xe.default.dim(` 2. ${Xe.default.cyan("bun install")}`)),console.log(Xe.default.dim(` 3. ${Xe.default.cyan("bun dev")}`)),console.log(),process.exit(0)):(console.log(Xe.default.red.bold(`
232
232
  \u274C Service generation failed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crossdelta/platform-sdk",
3
- "version": "0.3.27",
3
+ "version": "0.3.28",
4
4
  "description": "CLI toolkit for scaffolding Turborepo workspaces with Pulumi infrastructure and Hono/NestJS microservices",
5
5
  "keywords": [
6
6
  "cli",