@mahameru/cli 0.0.31 → 0.0.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.
- package/cli.js +64 -59
- 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.
|
|
6
|
+
* │ Version: 0.0.33 │
|
|
7
7
|
* │ Built: 2026 │
|
|
8
8
|
* │ │
|
|
9
9
|
* │ Copyright (c) Bintan <hello@bintvn.co> │
|
|
@@ -31,9 +31,9 @@ console.error(s.default.yellow("Please use tsconfig path aliases such as @/* and
|
|
|
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
|
|
35
|
-
m.existsSync)(
|
|
36
|
-
c.join)(o,".env.production")):(0,m.existsSync)(
|
|
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,
|
|
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,21 +167,21 @@ 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,
|
|
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,
|
|
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),
|
|
176
|
+
;u=new d.App(C),j=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:
|
|
179
|
-
getCanonicalFileName:e=>e,getCurrentDirectory:()=>m,getNewLine:()=>P.newLine};let
|
|
180
|
-
;const
|
|
181
|
-
},P,
|
|
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
|
|
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=>{
|
|
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)&&(
|
|
184
|
+
})(t)&&(A+=1,T.set(A,Date.now()),b.set(A,{emittedRuntimeFiles:new Set,changedRuntimeSourceFiles:new Set}),x=!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=>{
|
|
@@ -189,39 +189,39 @@ const t=$((0,a.resolve)(e));return t===N||t.startsWith(`${N}/`)},F=R.watchFile?.
|
|
|
189
189
|
;F&&(R.watchFile=(e,t,o,r)=>I(e)?{close(){}}:F(e,t,o,r));const H=R.watchDirectory?.bind(R)
|
|
190
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)
|
|
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
|
-
;const t=0===
|
|
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
|
-
;async function B(e,o){const l=
|
|
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(
|
|
197
|
-
O(new Error("Initial TypeScript build failed."))),b.delete(o),
|
|
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
198
|
if(0===e.length)return;const t=await async function(){if(!S){const e=(0,a.resolve)((0,
|
|
199
199
|
a.join)(__dirname,"node_modules","tsc-alias")),{prepareSingleFileReplaceTscAliasPaths:t}=f(e);S=t({configFile:w,outDir:h
|
|
200
200
|
})}return S}();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
|
|
203
|
-
;await
|
|
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,
|
|
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),
|
|
205
|
+
return console.error(c.default.red("[Mahameru Alias] Alias rewrite failed.")),console.error(e),E||(E=!0,
|
|
206
206
|
t.fail(`${c.default.red("[Mahameru]")} Initial alias rewrite failed.`),O(e instanceof Error?e:new Error(String(e)))),
|
|
207
|
-
b.delete(o),
|
|
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:!
|
|
210
|
-
console.error(e),void i()}finally{b.delete(o),
|
|
211
|
-
a.resolve)(e),r=$(o),n=b.get(
|
|
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,
|
|
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,
|
|
214
214
|
a.resolve)(e.fileName)).filter(e=>{const o=$(e);return o.startsWith(t)&&o.endsWith(".ts")&&!o.endsWith(".d.ts")})
|
|
215
215
|
}(t))n.changedRuntimeSourceFiles.add(e)}}try{return await C,U}catch(e){throw U.close(),e}}({environment:e,spinner:k,
|
|
216
|
-
onBuildStart:()=>{
|
|
217
|
-
onBuildSuccess:({durationMs:e,emittedRuntimeFiles:t,changedRuntimeSourceFiles:o,initialBuild:r})=>{if(b=e,
|
|
218
|
-
for(const e of t)D.add(e);for(const e of o)O.add(e)}
|
|
219
|
-
|
|
216
|
+
onBuildStart:()=>{A=!0},
|
|
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)}
|
|
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=()=>{
|
|
222
|
-
|
|
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,
|
|
223
223
|
D.clear(),
|
|
224
|
-
O.clear(),
|
|
224
|
+
O.clear(),E=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
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)
|
|
227
227
|
;const l=Date.now()-i,p=b+l;console.log(`${c.default.green("[Mahameru Dev]")} Rebuilt ${(0,
|
|
@@ -231,21 +231,21 @@ 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?
|
|
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))}),
|
|
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)){
|
|
238
238
|
const e=function(e){const t=(0,a.relative)(y,e);return(0,a.resolve)(g,t.replace(/\.ts$/i,".js"))}(t)
|
|
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
|
-
}).catch(()=>{})])}await(0,s.rm)((0,a.resolve)(g,o),{recursive:!0,force:!0}).catch(()=>{})}(r),
|
|
242
|
-
a.resolve)(r)),
|
|
243
|
-
R.stop(),N.stop(),await u.stop(),
|
|
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)}),
|
|
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
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
|
|
248
|
+
;return(0,a.resolve)(y,t.replace(/\.js$/i,".ts"))}function $(e){return e.replace(/\\/g,"/")}function _(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:{
|
|
@@ -525,12 +525,12 @@ if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o=r(e),a=0;a<o.length;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
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"),
|
|
528
|
+
d.join)(__dirname,"mpm"),_={".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
|
|
532
|
-
;const M="true"===process.env.MPM_DEV,
|
|
533
|
-
;const
|
|
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)
|
|
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"),
|
|
536
536
|
t.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),
|
|
@@ -542,7 +542,7 @@ 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=/;${
|
|
545
|
+
;t.setHeader("Set-Cookie",`mahameru_pm_token=${n}; Max-Age=${s}; HttpOnly; Path=/;${E?" 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),
|
|
@@ -553,19 +553,19 @@ message:"Unauthorized"}));const r=(0,P.parseCookies)(o);if(!r.mahameru_pm_token)
|
|
|
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=/;${
|
|
556
|
+
}))):(t.setHeader("Set-Cookie",`mahameru_pm_token=; Max-Age=0; HttpOnly; Path=/;${E?" 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=/;${
|
|
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;`),
|
|
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=
|
|
568
|
+
d.extname)(r).toLowerCase(),o=_[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,15 +576,15 @@ 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"))}: ${
|
|
580
|
-
o+=`${c.default.bold(c.default.green("API Endpoint"))}: ${
|
|
581
|
-
o+=` ${c.default.bold(c.default.green("Username"))}: ${c.default.cyan(
|
|
582
|
-
o+=` ${c.default.bold(c.default.green("password"))}: ${c.default.cyan(
|
|
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`,
|
|
583
583
|
o+=`\n${c.default.dim("Press Ctrl+C to stop the server")}\n`,console.log(o)}
|
|
584
|
-
for(const e of
|
|
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),
|
|
586
586
|
key:w.default.readFileSync(s)
|
|
587
|
-
},b).on("close",D).on("error",O).listen(
|
|
587
|
+
},b).on("close",D).on("error",O).listen(T,e,k):(0,p.createServer)(b).on("close",D).on("error",O).listen(T,e,k)
|
|
588
588
|
;if(!m.IS_WINDOWS){const e=o(9896);e.existsSync(m.IPC_SOCKET_PATH)&&e.unlinkSync(m.IPC_SOCKET_PATH)}const R=e=>t=>{
|
|
589
589
|
const o=t.toString().trim();console.log(`[${e}] ${o}`)},N=e=>t=>{const o=t.toString().trim()
|
|
590
590
|
;console.error(`[${e} ERROR] ${o}`)},I=(o,r,n)=>({type:s,data:a})=>{if(o)if("ERROR"===s)o.write(JSON.stringify({
|
|
@@ -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(
|
|
659
|
+
e.on("remove",o("remove")),e.on("disconnect",()=>{(0,h.deleteSocket)(e.id)})});const ee=async e=>{if(x)return;x=!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,16 +685,21 @@ 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((
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
;
|
|
693
|
-
;
|
|
694
|
-
|
|
695
|
-
|
|
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,
|
|
696
697
|
r.writeFile)(n.PM_CONFIG_FILE_PATH,JSON.stringify(d,null,2)),d}
|
|
697
|
-
|
|
698
|
+
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)
|
|
702
|
+
;async function c(e){try{return await(0,r.access)(e),!0}catch{return!1}}},73(e,t){t.generateRandomStrings=function(e){
|
|
698
703
|
const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let o=""
|
|
699
704
|
;for(let r=0;r<e;r++)o+=t.charAt(Math.floor(62*Math.random()));return o}},4830(e,t,o){
|
|
700
705
|
t.getProjectJson=async function(e){try{return JSON.parse(await(0,r.readFile)((0,n.join)(e,"package.json"),"utf-8"))
|
|
@@ -736,5 +741,5 @@ e.exports=require("node:child_process")},139(e){e.exports=require("node:cluster"
|
|
|
736
741
|
},1455(e){e.exports=require("node:fs/promises")},7067(e){e.exports=require("node:http")},4708(e){
|
|
737
742
|
e.exports=require("node:https")},8995(e){e.exports=require("node:module")},7030(e){e.exports=require("node:net")},
|
|
738
743
|
8161(e){e.exports=require("node:os")},6760(e){e.exports=require("node:path")},6928(e){e.exports=require("path")},
|
|
739
|
-
8330(e){e.exports={version:"0.0.
|
|
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
|
|
740
745
|
;const s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,o),s.exports})(8625)})();
|