@mahameru/cli 0.0.33 → 0.0.34

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 (2) hide show
  1. package/cli.js +59 -64
  2. package/package.json +1 -1
package/cli.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * ┌────────────────────────────────────────────┐
4
4
  * │ │
5
5
  * │ ▲ MahameruJS - CLI │
6
- * │ Version: 0.0.33
6
+ * │ Version: 0.0.34
7
7
  * │ Built: 2026 │
8
8
  * │ │
9
9
  * │ Copyright (c) Bintan <hello@bintvn.co> │
@@ -22,18 +22,18 @@ f.generateBarrelIndexFile)((0,c.join)(o,"types")),await(0,f.generateMahameruDts)
22
22
  ;const n="tsconfig.build.json",a=(0,c.join)(e,n),l=(0,c.join)(e,"tsconfig.json"),w=await(0,i.readFile)(l,"utf8")
23
23
  ;let v=null;try{v=JSON.parse(w),v.compilerOptions.outDir=".mahameru",v.compilerOptions.rootDir="src",await(0,
24
24
  i.writeFile)(a,JSON.stringify(v,null,2))}catch(e){console.error(`Error parsing ${l}: ${e}`),process.exit(1)}
25
- const S=await(0,u.runNodeScript)(g,["--project",n],e);0!==S&&(r.fail(s.default.red(" Build failed!")),await(0,
26
- d.deleteDirIfExists)(o),process.exit(S));const P=await(0,u.runNodeScript)(y,["--project",n],e)
27
- ;0!==P&&(r.fail(s.default.red(" tsc-alias failed.")),await(0,d.deleteDirIfExists)(o),process.exit(P));const $=(0,
25
+ const P=await(0,u.runNodeScript)(g,["--project",n],e);0!==P&&(r.fail(s.default.red(" Build failed!")),await(0,
26
+ d.deleteDirIfExists)(o),process.exit(P));const S=await(0,u.runNodeScript)(y,["--project",n],e)
27
+ ;0!==S&&(r.fail(s.default.red(" tsc-alias failed.")),await(0,d.deleteDirIfExists)(o),process.exit(S));const $=(0,
28
28
  p.findUnresolvedAliases)(o);if($.length>0){r.fail(s.default.red(" Build produced unresolved path aliases.")),
29
29
  console.error(s.default.yellow("Please use tsconfig path aliases such as @/* and avoid package.json imports for app source files."))
30
30
  ;for(const e of $)console.error(s.default.red(` - ${e}`));process.exit(1)}await(0,d.deleteDirIfExists)(a),await(0,
31
31
  d.deleteDirIfExists)((0,c.join)(o,"types"));try{
32
32
  const t=await(0,i.readFile)((0,c.join)(e,"package.json"),"utf-8"),r=JSON.parse(t)
33
33
  ;r.devDependencies&&delete r.devDependencies,await(0,i.writeFile)((0,c.join)(o,"package.json"),JSON.stringify(r,null,2))
34
- }catch{}const _=(0,c.join)(e,".env"),j=(0,c.join)(e,".env.development"),M=(0,c.join)(e,".env.production");(0,
35
- m.existsSync)(_)&&await(0,i.copyFile)(_,(0,c.join)(o,".env")),(0,m.existsSync)(M)?await(0,i.copyFile)(M,(0,
36
- c.join)(o,".env.production")):(0,m.existsSync)(j)&&await(0,i.copyFile)(j,(0,c.join)(o,".env.production")),await(0,
34
+ }catch{}const j=(0,c.join)(e,".env"),_=(0,c.join)(e,".env.development"),M=(0,c.join)(e,".env.production");(0,
35
+ m.existsSync)(j)&&await(0,i.copyFile)(j,(0,c.join)(o,".env")),(0,m.existsSync)(M)?await(0,i.copyFile)(M,(0,
36
+ c.join)(o,".env.production")):(0,m.existsSync)(_)&&await(0,i.copyFile)(_,(0,c.join)(o,".env.production")),await(0,
37
37
  h.createZip)((0,c.join)(process.cwd(),t),(0,c.join)(process.cwd(),`${t}.zip`),!1),
38
38
  r.succeed(s.default.green(" Build success."))}catch(e){r.fail(s.default.red(" Internal error.")),console.error(e),
39
39
  process.exit(1)}}}
@@ -167,47 +167,47 @@ return new Promise((n,s)=>{const a=(0,r.spawn)(process.execPath,[e,...t],{stdio:
167
167
  var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
168
168
  ;Object.defineProperty(t,"__esModule",{value:!0
169
169
  }),t.startWatchedDevServer=async function({environment:e,host:t,port:o,version:r}){
170
- let u,j=null,M=!1,E=null,x=!1,A=!0,T=!1,b=0;const D=new Set,O=new Set;await(0,p.generateRouteTypes)((0,
170
+ let u,_=null,M=!1,x=null,E=!1,A=!0,T=!1,b=0;const D=new Set,O=new Set;await(0,p.generateRouteTypes)((0,
171
171
  a.join)(m,"src","routes"),(0,a.join)(h,"types","routes.d.ts")),await(0,p.generateDataSourceTypes)((0,
172
172
  a.join)(m,"src","databases"),(0,a.join)(h,"types","dataSources.d.ts")),await(0,p.generateBarrelIndexFile)((0,
173
173
  a.join)(h,"types")),await(0,p.generateMahameruDts)((0,a.join)(m,"mahameru.d.ts")),await(0,s.mkdir)(h,{recursive:!0})
174
174
  ;const k=(0,i.default)({text:`${c.default.cyan("[Mahameru]")} Starting TypeScript watch...`,spinner:"triangle"
175
175
  }).start(),C={dev:!0,host:t,port:o,rootPath:m}
176
- ;u=new d.App(C),j=await async function({environment:e,spinner:t,onBuildStart:o,onBuildSuccess:r,onBuildFailure:i}){
176
+ ;u=new d.App(C),_=await async function({environment:e,spinner:t,onBuildStart:o,onBuildSuccess:r,onBuildFailure:i}){
177
177
  const l=(0,
178
- a.resolve)((0,a.join)(m,"node_modules","typescript")),{createWatchCompilerHost:d,createWatchProgram:u,formatDiagnosticsWithColorAndContext:p,formatDiagnostic:v,sys:P,createEmitAndSemanticDiagnosticsBuilderProgram:j}=f(l),M={
179
- getCanonicalFileName:e=>e,getCurrentDirectory:()=>m,getNewLine:()=>P.newLine};let E=!1,x=!1,A=0
178
+ a.resolve)((0,a.join)(m,"node_modules","typescript")),{createWatchCompilerHost:d,createWatchProgram:u,formatDiagnosticsWithColorAndContext:p,formatDiagnostic:v,sys:S,createEmitAndSemanticDiagnosticsBuilderProgram:_}=f(l),M={
179
+ getCanonicalFileName:e=>e,getCurrentDirectory:()=>m,getNewLine:()=>S.newLine};let x=!1,E=!1,A=0
180
180
  ;const T=new Map,b=new Map;let D,O,k=Promise.resolve();const C=new Promise((e,t)=>{D=e,O=t}),R=d(w,{rootDir:y,outDir:h
181
- },P,j,e=>{x=!0;const t=e.file?p([e],M):v(e,M);process.stderr.write(t.endsWith("\n")?t:`${t}\n`)},e=>{
181
+ },S,_,e=>{E=!0;const t=e.file?p([e],M):v(e,M);process.stderr.write(t.endsWith("\n")?t:`${t}\n`)},e=>{
182
182
  const t=e.messageText.toString().trim();(function(e){
183
183
  return e.includes("Starting compilation in watch mode...")||e.includes("File change detected. Starting incremental compilation...")
184
- })(t)&&(A+=1,T.set(A,Date.now()),b.set(A,{emittedRuntimeFiles:new Set,changedRuntimeSourceFiles:new Set}),x=!1,o()),
184
+ })(t)&&(A+=1,T.set(A,Date.now()),b.set(A,{emittedRuntimeFiles:new Set,changedRuntimeSourceFiles:new Set}),E=!1,o()),
185
185
  function(e){
186
186
  return["Starting compilation in watch mode...","File change detected. Starting incremental compilation...","Found 0 errors. Watching for file changes.","Watching for file changes."].some(t=>e.includes(t))
187
187
  }(t)||console.log(`${c.default.yellow("[Mahameru TSC]")} ${t}`)}),N=$((0,a.resolve)((0,a.join)(h,"types"))),I=e=>{
188
188
  const t=$((0,a.resolve)(e));return t===N||t.startsWith(`${N}/`)},F=R.watchFile?.bind(R)
189
189
  ;F&&(R.watchFile=(e,t,o,r)=>I(e)?{close(){}}:F(e,t,o,r));const H=R.watchDirectory?.bind(R)
190
- ;H&&(R.watchDirectory=(e,t,o,r)=>I(e)?{close(){}}:H(e,t,o,r));const W=R,J=W.writeFile?.bind(W)??P.writeFile.bind(P)
190
+ ;H&&(R.watchDirectory=(e,t,o,r)=>I(e)?{close(){}}:H(e,t,o,r));const W=R,J=W.writeFile?.bind(W)??S.writeFile.bind(S)
191
191
  ;W.writeFile=(e,t,o,r,n,s)=>{J?.(e,t,o,r,n,s),q(e,n)};const L=R.afterProgramCreate;R.afterProgramCreate=e=>{L?.(e)
192
192
  ;const t=0===A?1:A;A=t,k=k.then(()=>B(e,t)).catch(e=>{
193
193
  console.error(c.default.red("[Mahameru Dev] Build lifecycle failed.")),console.error(e)})};const U=u(R)
194
194
  ;async function B(e,o){const l=T.get(o)??Date.now(),d=b.get(o)??{emittedRuntimeFiles:new Set,
195
195
  changedRuntimeSourceFiles:new Set}
196
- ;if(x)return E||(E=!0,t.fail(`${c.default.red("[Mahameru]")} Initial TypeScript build failed.`),
197
- O(new Error("Initial TypeScript build failed."))),b.delete(o),T.delete(o),void i();try{if(E)await async function(e){
198
- if(0===e.length)return;const t=await async function(){if(!S){const e=(0,a.resolve)((0,
199
- a.join)(__dirname,"node_modules","tsc-alias")),{prepareSingleFileReplaceTscAliasPaths:t}=f(e);S=t({configFile:w,outDir:h
200
- })}return S}();for(const o of e){if(!(0,n.existsSync)(o))continue;const e=await(0,s.readFile)(o,"utf8"),r=t({
196
+ ;if(E)return x||(x=!0,t.fail(`${c.default.red("[Mahameru]")} Initial TypeScript build failed.`),
197
+ O(new Error("Initial TypeScript build failed."))),b.delete(o),T.delete(o),void i();try{if(x)await async function(e){
198
+ if(0===e.length)return;const t=await async function(){if(!P){const e=(0,a.resolve)((0,
199
+ a.join)(__dirname,"node_modules","tsc-alias")),{prepareSingleFileReplaceTscAliasPaths:t}=f(e);P=t({configFile:w,outDir:h
200
+ })}return P}();for(const o of e){if(!(0,n.existsSync)(o))continue;const e=await(0,s.readFile)(o,"utf8"),r=t({
201
201
  fileContents:e,filePath:o});r!==e&&await(0,s.writeFile)(o,r)}}([...d.emittedRuntimeFiles]);else{
202
- await async function(e=3e4){const t=Date.now();for(;Date.now()-t<e;){if((0,n.existsSync)(g))return void await _(200)
203
- ;await _(100)}throw new Error("Timed out waiting for emitted dev runtime artifacts.")}();const e=(0,a.resolve)((0,
202
+ await async function(e=3e4){const t=Date.now();for(;Date.now()-t<e;){if((0,n.existsSync)(g))return void await j(200)
203
+ ;await j(100)}throw new Error("Timed out waiting for emitted dev runtime artifacts.")}();const e=(0,a.resolve)((0,
204
204
  a.join)(__dirname,"node_modules","tsc-alias")),{replaceTscAliasPaths:t}=f(e);await t({configFile:w,outDir:h})}}catch(e){
205
- return console.error(c.default.red("[Mahameru Alias] Alias rewrite failed.")),console.error(e),E||(E=!0,
205
+ return console.error(c.default.red("[Mahameru Alias] Alias rewrite failed.")),console.error(e),x||(x=!0,
206
206
  t.fail(`${c.default.red("[Mahameru]")} Initial alias rewrite failed.`),O(e instanceof Error?e:new Error(String(e)))),
207
207
  b.delete(o),T.delete(o),void i()}const u=Date.now()-l;try{await r({durationMs:u,
208
208
  emittedRuntimeFiles:[...d.emittedRuntimeFiles],changedRuntimeSourceFiles:[...d.changedRuntimeSourceFiles],
209
- initialBuild:!E})}catch(e){return console.error(c.default.red("[Mahameru Alias] Alias rewrite failed.")),
210
- console.error(e),void i()}finally{b.delete(o),T.delete(o)}E||(E=!0,D())}function q(e,t){const o=(0,
209
+ initialBuild:!x})}catch(e){return console.error(c.default.red("[Mahameru Alias] Alias rewrite failed.")),
210
+ console.error(e),void i()}finally{b.delete(o),T.delete(o)}x||(x=!0,D())}function q(e,t){const o=(0,
211
211
  a.resolve)(e),r=$(o),n=b.get(A);if(n&&function(e){const t=`${$((0,a.resolve)(g))}/`
212
212
  ;return e.startsWith(t)&&e.endsWith(".js")&&!e.endsWith(".d.ts")&&!e.endsWith(".map")}(r)){n.emittedRuntimeFiles.add(o)
213
213
  ;for(const e of function(e){if(!e)return[];const t=`${$((0,a.resolve)(y))}/`;return e.map(e=>(0,
@@ -215,15 +215,15 @@ a.resolve)(e.fileName)).filter(e=>{const o=$(e);return o.startsWith(t)&&o.endsWi
215
215
  }(t))n.changedRuntimeSourceFiles.add(e)}}try{return await C,U}catch(e){throw U.close(),e}}({environment:e,spinner:k,
216
216
  onBuildStart:()=>{A=!0},
217
217
  onBuildSuccess:({durationMs:e,emittedRuntimeFiles:t,changedRuntimeSourceFiles:o,initialBuild:r})=>{if(b=e,A=!1,!r){
218
- for(const e of t)D.add(e);for(const e of o)O.add(e)}A||!u?.initialized||M||(x||T||0!==D.size)&&F()},onBuildFailure:()=>{
219
- A=!1,b=0,T=!1,D.clear(),O.clear(),E&&(clearTimeout(E),E=null)}
218
+ for(const e of t)D.add(e);for(const e of o)O.add(e)}A||!u?.initialized||M||(E||T||0!==D.size)&&F()},onBuildFailure:()=>{
219
+ A=!1,b=0,T=!1,D.clear(),O.clear(),x&&(clearTimeout(x),x=null)}
220
220
  }),k.succeed(`${c.default.green("[Mahameru]")} Initial build completed.\n`),await u.start()
221
- ;const R=new l.Watchman([h,v]),N=new l.Watchman(y);let I=Promise.resolve();const F=()=>{E&&clearTimeout(E),
222
- E=setTimeout(()=>{I=I.then(async()=>{if(M||!u)return;if(A)return void F();const e=[...D],t=[...O],o=T,r=x;if(x=!1,T=!1,
221
+ ;const R=new l.Watchman([h,v]),N=new l.Watchman(y);let I=Promise.resolve();const F=()=>{x&&clearTimeout(x),
222
+ x=setTimeout(()=>{I=I.then(async()=>{if(M||!u)return;if(A)return void F();const e=[...D],t=[...O],o=T,r=E;if(E=!1,T=!1,
223
223
  D.clear(),
224
- O.clear(),E=null,r)return console.log(c.default.yellow("\n [Mahameru] Config file changed. Reloading server...\n")),
224
+ O.clear(),x=null,r)return console.log(c.default.yellow("\n [Mahameru] Config file changed. Reloading server...\n")),
225
225
  await u.stop(),u=new d.App(C),console.clear(),void await u.start();if(0===e.length&&!o)return
226
- ;const n=e[e.length-1],s=t[t.length-1]??(n?P(n):(0,a.resolve)(y)),i=Date.now();o?await u.devHRM():await u.devHRM(n)
226
+ ;const n=e[e.length-1],s=t[t.length-1]??(n?S(n):(0,a.resolve)(y)),i=Date.now();o?await u.devHRM():await u.devHRM(n)
227
227
  ;const l=Date.now()-i,p=b+l;console.log(`${c.default.green("[Mahameru Dev]")} Rebuilt ${(0,
228
228
  a.relative)(m,s).replace(/\\/g,"/")} build: ${b}ms runtime: ${l}ms total: ${p}ms`)}).catch(e=>{
229
229
  console.error(c.default.red("[Mahameru Dev] Hot reload failed.")),console.error(e)})},250)}
@@ -231,7 +231,7 @@ console.error(c.default.red("[Mahameru Dev] Hot reload failed.")),console.error(
231
231
  a.resolve)(g)),s=$((0,a.resolve)(v));if(!o.startsWith(`${r}/`)&&o!==s)return null
232
232
  ;if(o.endsWith(".d.ts")||o.endsWith(".map")||o.endsWith(".tsbuildinfo"))return null;if(o===s)return"config"
233
233
  ;if(!o.endsWith(".js"))return null;if(o.startsWith(`${n}/`))return"runtime";return null}(t)
234
- ;o&&("runtime"===o&&"delete"!==e&&"rename"!==e||((e,t)=>{"config"===e?x=!0:(D.add(t),O.add(P(t))),A||F()})(o,t))}),
234
+ ;o&&("runtime"===o&&"delete"!==e&&"rename"!==e||((e,t)=>{"config"===e?E=!0:(D.add(t),O.add(S(t))),A||F()})(o,t))}),
235
235
  N.on("all",async({event:e,filePath:t,oldFilePath:o})=>{if("delete"!==e&&"rename"!==e)return;const r="rename"===e&&o?o:t
236
236
  ;(function(e){const t=`${$((0,a.resolve)(y))}/`;return $((0,a.resolve)(e)).startsWith(t)})(r)&&(await async function(e){
237
237
  const t=(0,a.resolve)(e),o=(0,a.relative)(y,t);if(o.startsWith(".."))return;if(/\.[^\\/]+$/.test(o)){
@@ -239,13 +239,13 @@ const e=function(e){const t=(0,a.relative)(y,e);return(0,a.resolve)(g,t.replace(
239
239
  ;return void await Promise.all([(0,s.rm)(e,{force:!0}).catch(()=>{}),(0,s.rm)(`${e}.map`,{force:!0}).catch(()=>{}),(0,
240
240
  s.rm)(e.replace(/\.js$/i,".d.ts"),{force:!0}).catch(()=>{}),(0,s.rm)(e.replace(/\.js$/i,".d.ts.map"),{force:!0
241
241
  }).catch(()=>{})])}await(0,s.rm)((0,a.resolve)(g,o),{recursive:!0,force:!0}).catch(()=>{})}(r),T=!0,O.add((0,
242
- a.resolve)(r)),A||F())}),await R.start(),await N.start();const H=async(e=0)=>{M||(M=!0,E&&(clearTimeout(E),E=null),
243
- R.stop(),N.stop(),await u.stop(),j?.close(),process.exit(e))};process.once("SIGINT",()=>{H(0)}),
242
+ a.resolve)(r)),A||F())}),await R.start(),await N.start();const H=async(e=0)=>{M||(M=!0,x&&(clearTimeout(x),x=null),
243
+ R.stop(),N.stop(),await u.stop(),_?.close(),process.exit(e))};process.once("SIGINT",()=>{H(0)}),
244
244
  process.once("SIGTERM",()=>{H(0)}),await new Promise(()=>{})}
245
245
  ;const n=o(3024),s=o(1455),a=o(6760),i=r(o(8720)),c=r(o(5205)),l=o(6469),d=o(1205),u=o(8995),p=o(1855),f=(0,
246
246
  u.createRequire)(__filename),m=process.cwd(),h=(0,a.join)(m,".mahameru"),g=h,y=(0,a.join)(m,"src"),w=(0,
247
- a.join)(m,"tsconfig.json"),v=(0,a.join)(m,"mahameru.config.ts");let S=null;function P(e){const t=(0,a.relative)(g,e)
248
- ;return(0,a.resolve)(y,t.replace(/\.js$/i,".ts"))}function $(e){return e.replace(/\\/g,"/")}function _(e){
247
+ a.join)(m,"tsconfig.json"),v=(0,a.join)(m,"mahameru.config.ts");let P=null;function S(e){const t=(0,a.relative)(g,e)
248
+ ;return(0,a.resolve)(y,t.replace(/\.js$/i,".ts"))}function $(e){return e.replace(/\\/g,"/")}function j(e){
249
249
  return new Promise(t=>{setTimeout(t,e)})}},5775(e,t,o){t.deleteDirIfExists=async function(e){return await(0,r.rm)(e,{
250
250
  recursive:!0,force:!0})},t.parsePort=function(e){const t=parseInt(e,10);return isNaN(t)?void 0:t}
251
251
  ;const r=o(1455),n=o(8161)},6469(e,t,o){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{
@@ -524,12 +524,12 @@ return r=Object.getOwnPropertyNames||function(e){var t=[]
524
524
  if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o=r(e),a=0;a<o.length;a++)"default"!==o[a]&&n(t,e,o[a])
525
525
  ;return s(t,e),t}),i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
526
526
  ;Object.defineProperty(t,"__esModule",{value:!0}),t.processManager=void 0
527
- ;const c=i(o(5205)),l=o(1421),d=o(6760),u=i(o(7030)),p=o(7067),f=o(4708),m=o(6921),h=o(5043),g=o(6929),y=o(7209),w=a(o(3024)),v=o(4437),S=o(7179),P=o(9731),$=(0,
528
- d.join)(__dirname,"mpm"),_={".html":"text/html",".css":"text/css",".js":"text/javascript",".json":"application/json",
527
+ ;const c=i(o(5205)),l=o(1421),d=o(6760),u=i(o(7030)),p=o(7067),f=o(4708),m=o(6921),h=o(5043),g=o(6929),y=o(7209),w=a(o(3024)),v=o(4437),P=o(7179),S=o(9731),$=(0,
528
+ d.join)(__dirname,"mpm"),j={".html":"text/html",".css":"text/css",".js":"text/javascript",".json":"application/json",
529
529
  ".png":"image/png",".jpg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon"}
530
530
  ;t.processManager=async({host:e,port:t,daemon:r,cert:n,key:s,logins:a},i)=>{try{
531
- const j=a.find(e=>e.role===S.LoginRole.ADMIN);if(!j)throw new Error("Admin login not found")
532
- ;const M="true"===process.env.MPM_DEV,E=n&&s;let x=!1;const A=await(0,h.loadProjects)();(0,h.setProjects)(A)
531
+ const _=a.find(e=>e.role===P.LoginRole.ADMIN);if(!_)throw new Error("Admin login not found")
532
+ ;const M="true"===process.env.MPM_DEV,x=n&&s;let E=!1;const A=await(0,h.loadProjects)();(0,h.setProjects)(A)
533
533
  ;const T=await(0,y.freePortFinder)(t),b=(e,t)=>{
534
534
  if(M&&(t.setHeader("Access-Control-Allow-Origin","http://localhost:5173"),
535
535
  t.setHeader("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),
@@ -542,30 +542,30 @@ o+=e.toString()}),void e.on("end",()=>{try{const e=JSON.parse(o);if(!e)throw new
542
542
  ;const r=a.find(t=>t.username===e.username&&t.password===e.password)
543
543
  ;if(!r)throw new Error("Invalid username or password")
544
544
  ;const n=Buffer.from(`${e.username}:${e.password}`).toString("base64"),s=2592e3
545
- ;t.setHeader("Set-Cookie",`mahameru_pm_token=${n}; Max-Age=${s}; HttpOnly; Path=/;${E?" Secure;":""} SameSite=Strict;`)
545
+ ;t.setHeader("Set-Cookie",`mahameru_pm_token=${n}; Max-Age=${s}; HttpOnly; Path=/;${x?" Secure;":""} SameSite=Strict;`)
546
546
  ;const{password:i,...c}=r;return t.writeHead(200,{"Content-Type":"application/json"}),void t.end(JSON.stringify({
547
547
  success:!0,data:c}))}catch(e){return void(t.headersSent||(e instanceof Error?(t.writeHead(400,{
548
548
  "Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:e.message}))):(console.error(e),
549
549
  t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:"Internal server error"
550
550
  })))))}})}if(("/api/auth/session"===e.url||"/api/login/session"===e.url)&&"POST"===e.method){const o=e.headers.cookie
551
551
  ;if(!o)return t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,
552
- message:"Unauthorized"}));const r=(0,P.parseCookies)(o);if(!r.mahameru_pm_token)return t.writeHead(200,{
552
+ message:"Unauthorized"}));const r=(0,S.parseCookies)(o);if(!r.mahameru_pm_token)return t.writeHead(200,{
553
553
  "Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:"Unauthorized"}))
554
554
  ;const[n,s]=Buffer.from(r.mahameru_pm_token,"base64").toString().split(":"),i=a.find(e=>e.username===n&&e.password===s)
555
555
  ;return i?(t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!0,data:i
556
- }))):(t.setHeader("Set-Cookie",`mahameru_pm_token=; Max-Age=0; HttpOnly; Path=/;${E?" Secure;":""} SameSite=Strict;`),
556
+ }))):(t.setHeader("Set-Cookie",`mahameru_pm_token=; Max-Age=0; HttpOnly; Path=/;${x?" Secure;":""} SameSite=Strict;`),
557
557
  t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:"Unauthorized"})))}
558
558
  if(("/api/auth/logout"===e.url||"/api/login/logout"===e.url)&&"POST"===e.method){const o=e.headers.cookie
559
559
  ;if(!o)return t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,
560
560
  message:"Unauthorized"}))
561
- ;return(0,P.parseCookies)(o).mahameru_pm_token?(t.setHeader("Set-Cookie",`mahameru_pm_token=; Max-Age=0; HttpOnly; Path=/;${E?" Secure;":""} SameSite=Strict;`),
561
+ ;return(0,S.parseCookies)(o).mahameru_pm_token?(t.setHeader("Set-Cookie",`mahameru_pm_token=; Max-Age=0; HttpOnly; Path=/;${x?" Secure;":""} SameSite=Strict;`),
562
562
  t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!0}))):(t.writeHead(401,{
563
563
  "Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:"Unauthorized"})))}
564
564
  if("/api/process"===e.url&&"GET"===e.method){t.writeHead(200,{"Content-Type":"application/json"});const e=(0,
565
565
  h.getProjects)().map(g.parseProject);return t.end(JSON.stringify(e))}if("GET"===e.method){
566
566
  const o="/"===e.url?"/index.html":e.url;let r=(0,d.join)($,o)
567
567
  ;return r.startsWith($)?void w.default.access(r,w.default.constants.F_OK,e=>{if(!e){const e=(0,
568
- d.extname)(r).toLowerCase(),o=_[e]||"application/octet-stream";return t.writeHead(200,{"Content-Type":o}),
568
+ d.extname)(r).toLowerCase(),o=j[e]||"application/octet-stream";return t.writeHead(200,{"Content-Type":o}),
569
569
  w.default.createReadStream(r).pipe(t)}{const e=(0,d.join)($,"index.html")
570
570
  ;w.default.access(e,w.default.constants.F_OK,o=>o?(t.writeHead(404,{"Content-Type":"text/html"}),
571
571
  t.end("<h1>404 - Frontend Build Not Found</h1>")):(t.writeHead(200,{"Content-Type":"text/html"}),
@@ -576,10 +576,10 @@ if(process.send||r||(console.clear(),
576
576
  console.log(`${c.default.bold(c.default.cyan("▲ Mahameru"))} ${c.default.dim(`Process Manager v${i}`)}\n`)),
577
577
  console.log(`Server listening on host ${e} and port ${t}.`),!process.send&&!r){let o=""
578
578
  ;o+=` ${c.default.bold(c.default.green("PID"))}: ${process.pid}\n`,
579
- o+=` ${c.default.bold(c.default.green("URL"))}: ${E?"https":"http"}://${e}:${t}\n`,
580
- o+=`${c.default.bold(c.default.green("API Endpoint"))}: ${E?"https":"http"}://${e}:${t}/api/process\n`,
581
- o+=` ${c.default.bold(c.default.green("Username"))}: ${c.default.cyan(j.username)}\n`,
582
- o+=` ${c.default.bold(c.default.green("password"))}: ${c.default.cyan(j.password)}\n`,
579
+ o+=` ${c.default.bold(c.default.green("URL"))}: ${x?"https":"http"}://${e}:${t}\n`,
580
+ o+=`${c.default.bold(c.default.green("API Endpoint"))}: ${x?"https":"http"}://${e}:${t}/api/process\n`,
581
+ o+=` ${c.default.bold(c.default.green("Username"))}: ${c.default.cyan(_.username)}\n`,
582
+ o+=` ${c.default.bold(c.default.green("password"))}: ${c.default.cyan(_.password)}\n`,
583
583
  o+=`\n${c.default.dim("Press Ctrl+C to stop the server")}\n`,console.log(o)}
584
584
  for(const e of A)e.isLastStatusIsRunning&&(console.log(`[MPM] Starting project ${e.name}`),await V(e),
585
585
  console.log(`[MPM] Project ${e.name} started`))},C=n&&s?(0,f.createServer)({cert:w.default.readFileSync(n),
@@ -644,7 +644,7 @@ error:t.message}))}})});Q.on("close",()=>{console.log("[MPM IPC SERVER] IPC Serv
644
644
  process.exit(1)}),Q.listen(m.IPC_SOCKET_PATH,()=>{
645
645
  console.log(`[MPM IPC SERVER] IPC Server listening on ${m.IPC_SOCKET_PATH}`)});const X=new v.Server(C,{cors:{origin:"*"
646
646
  },path:"/ws",serveClient:!1});X.use((e,t)=>{try{if(!e.handshake.headers.cookie)throw new Error("unauthorized")
647
- ;const o=(0,P.parseCookies)(e.handshake.headers.cookie);if(!o.mahameru_pm_token)throw new Error("unauthorized")
647
+ ;const o=(0,S.parseCookies)(e.handshake.headers.cookie);if(!o.mahameru_pm_token)throw new Error("unauthorized")
648
648
  ;const[r,n]=Buffer.from(o.mahameru_pm_token,"base64").toString().split(":"),s=a.find(e=>e.username===r&&e.password===n)
649
649
  ;if(!s)throw new Error("unauthorized");e.data.login=s,t()}catch(e){t(new Error(e.message))}}),X.on("connection",e=>{(0,
650
650
  h.setSocket)(e);const t=(0,h.getProjects)().map(g.parseProject);e.emit("projects",t),e.on("getProjects",e=>e({
@@ -656,7 +656,7 @@ e.isLastStatusIsRunning=!1,await(0,h.saveProjects)(e),X.emit("project-update",J(
656
656
  t(W(e.message))})});const o=e=>(t,o)=>{U(`Socket event "${e}" received for project "${t}"`),Y(t).then(e=>{
657
657
  U(`Invoking delete callback for project "${t}"`),o(H(e))}).catch(e=>{
658
658
  U(`Delete failed for project "${t}": ${e.message}`),o(W(e.message))})};e.on("delete",o("delete")),
659
- e.on("remove",o("remove")),e.on("disconnect",()=>{(0,h.deleteSocket)(e.id)})});const ee=async e=>{if(x)return;x=!0,
659
+ e.on("remove",o("remove")),e.on("disconnect",()=>{(0,h.deleteSocket)(e.id)})});const ee=async e=>{if(E)return;E=!0,
660
660
  console.log(`[MPM] Received ${e}`);const t=(0,h.getProjects)();for(const e of t)if("running"===e.status){
661
661
  console.log(`[MPM] Stopping project ${e.name}`);const t=await Z(e);t.isLastStatusIsRunning=!0,
662
662
  console.log(`[MPM] Project ${e.name} stopped`),(0,h.setProject)(t)}await(0,h.saveProjects)(),(0,
@@ -685,20 +685,15 @@ throw new Error(`Port ${e} - 999 is not available`)},t.isPortAvailable=function(
685
685
  const r=n.default.createServer();r.once("error",e=>{e.code,o(!1)}),r.once("listening",()=>{r.close(()=>t(!0))}),
686
686
  r.listen(e,"127.0.0.1")})};const n=r(o(7030));function s(e){return new Promise((t,o)=>{const r=n.default.createServer()
687
687
  ;r.once("error",e=>{e.code,o(e)}),r.once("listening",()=>{r.close(()=>t(e))}),r.listen(e,"127.0.0.1")})}},2354(e,t,o){
688
- t.generatePmConfig=async function({host:e,port:t,cert:o,key:l}){if(await c(n.PM_CONFIG_FILE_PATH)){const i=await(0,
689
- r.readFile)(n.PM_CONFIG_FILE_PATH,"utf-8"),d=JSON.parse(i)
690
- ;if(!d||!Array.isArray(d.logins))throw new Error('Invalid configuration file structure: "logins" array is missing.')
691
- ;if(d.cert&&!await c(d.cert))throw new Error("SSL Certificate file not found")
692
- ;if(d.key&&!await c(d.key))throw new Error("SSL key file not found")
693
- ;for(const e of d.logins)if(e.role!==s.LoginRole.ADMIN&&e.role!==s.LoginRole.USER)throw new Error(`Invalid role ${e.role} for login ${e.username}`)
694
- ;if(d.host=e,d.port=await(0,a.freePortFinder)(t),d.cert!==o){
695
- if(o&&!await c(o))throw new Error("SSL Certificate file not found");d.cert=o}if(d.key!==l){
696
- if(l&&!await c(l))throw new Error("SSL key file not found");d.key=l}return await(0,
697
- r.writeFile)(n.PM_CONFIG_FILE_PATH,JSON.stringify(d,null,2)),d}
688
+ t.generatePmConfig=async function({host:e,port:t,cert:o,key:l}){
698
689
  if(o&&!await c(o))throw new Error("SSL Certificate file not found")
699
- ;if(l&&!await c(l))throw new Error("SSL key file not found");const d={host:e,port:await(0,a.freePortFinder)(t),cert:o,
700
- key:l,logins:[{username:"admin",password:(0,i.generateRandomStrings)(8),role:"admin"}]};return await(0,
701
- r.writeFile)(n.PM_CONFIG_FILE_PATH,JSON.stringify(d,null,2)),d};const r=o(1455),n=o(6921),s=o(7179),a=o(7209),i=o(73)
690
+ ;if(l&&!await c(l))throw new Error("SSL key file not found");let d=[{username:"admin",password:(0,
691
+ i.generateRandomStrings)(8),role:"admin"}];if(await c(n.PM_CONFIG_FILE_PATH))try{const e=await(0,
692
+ r.readFile)(n.PM_CONFIG_FILE_PATH,"utf-8"),t=JSON.parse(e)
693
+ ;if(!t||!Array.isArray(t.logins))throw new Error('Invalid configuration file structure: "logins" array is missing.')
694
+ ;for(const e of t.logins)if(e.role!==s.LoginRole.ADMIN&&e.role!==s.LoginRole.USER)throw new Error(`Invalid role ${e.role} for login ${e.username}`)
695
+ ;d=t.logins}catch(e){throw e}const u={host:e,port:await(0,a.freePortFinder)(t),cert:o,key:l,logins:d};return await(0,
696
+ r.writeFile)(n.PM_CONFIG_FILE_PATH,JSON.stringify(u,null,2)),u};const r=o(1455),n=o(6921),s=o(7179),a=o(7209),i=o(73)
702
697
  ;async function c(e){try{return await(0,r.access)(e),!0}catch{return!1}}},73(e,t){t.generateRandomStrings=function(e){
703
698
  const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let o=""
704
699
  ;for(let r=0;r<e;r++)o+=t.charAt(Math.floor(62*Math.random()));return o}},4830(e,t,o){
@@ -741,5 +736,5 @@ e.exports=require("node:child_process")},139(e){e.exports=require("node:cluster"
741
736
  },1455(e){e.exports=require("node:fs/promises")},7067(e){e.exports=require("node:http")},4708(e){
742
737
  e.exports=require("node:https")},8995(e){e.exports=require("node:module")},7030(e){e.exports=require("node:net")},
743
738
  8161(e){e.exports=require("node:os")},6760(e){e.exports=require("node:path")},6928(e){e.exports=require("path")},
744
- 8330(e){e.exports={version:"0.0.33"}}};const t={};(function o(r){const n=t[r];if(void 0!==n)return n.exports
739
+ 8330(e){e.exports={version:"0.0.34"}}};const t={};(function o(r){const n=t[r];if(void 0!==n)return n.exports
745
740
  ;const s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,o),s.exports})(8625)})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mahameru/cli",
3
- "version": "0.0.33",
3
+ "version": "0.0.34",
4
4
  "description": "MahameruJS CLI Utility - The command-line interface for running and building Mahameru-based applications",
5
5
  "bin": {
6
6
  "mahameru": "./cli.js"