@mahameru/cli 0.0.28 → 0.0.30
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/README.md +8 -0
- package/cli.js +214 -160
- package/mpm/assets/dashboard-BVQUZbKP.js +2 -0
- package/mpm/assets/index-CwN0u_3d.css +1 -0
- package/mpm/assets/index-mJCpWoYL.js +103 -0
- package/mpm/assets/{not-found-BMYPEFbE.js → not-found-14338NNv.js} +1 -1
- package/mpm/assets/project-BvNgWVYC.js +1 -0
- package/mpm/assets/sales-chart-DowosFUP.js +12 -0
- package/mpm/assets/sign-in-CT84Zsu0.js +1 -0
- package/mpm/index.html +2 -2
- package/package.json +1 -1
- package/mpm/assets/CartesianChart-B51AYOAb.js +0 -2
- package/mpm/assets/CategoricalChart-Co5NZKJw.js +0 -11
- package/mpm/assets/customer-insights-TeZ4O-CA.js +0 -3
- package/mpm/assets/dashboard-CJ1I00AU.js +0 -2
- package/mpm/assets/eye-DWDjYPPv.js +0 -1
- package/mpm/assets/index-C8qHc9ZS.js +0 -108
- package/mpm/assets/index-SBk3lk5W.css +0 -1
- package/mpm/assets/metrics-overview-BoKfDsgl.js +0 -1
- package/mpm/assets/project-DEpqfD40.js +0 -1
- package/mpm/assets/quick-actions-Dpas0JuQ.js +0 -1
- package/mpm/assets/recent-transactions-BVeaMgnN.js +0 -1
- package/mpm/assets/revenue-breakdown-e4JsCYXu.js +0 -1
- package/mpm/assets/sales-chart-BiTfVffl.js +0 -1
- package/mpm/assets/tooltipContext-D95ZMUkW.js +0 -1
- package/mpm/assets/top-products-Bhs_diJI.js +0 -1
- package/mpm/assets/trending-down-er9_YGzq.js +0 -1
- package/mpm/assets/trending-up-CnNmAQYy.js +0 -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.30 │
|
|
7
7
|
* │ Built: 2026 │
|
|
8
8
|
* │ │
|
|
9
9
|
* │ Copyright (c) Bintan <hello@bintvn.co> │
|
|
@@ -19,21 +19,21 @@ l.ensureDevEnvironment)();try{r.text=s.default.cyan(" Starting build...\n"),awai
|
|
|
19
19
|
f.generateRouteTypes)((0,c.join)(e,"src","routes"),(0,c.join)(o,"types","routes.d.ts")),await(0,
|
|
20
20
|
f.generateDataSourceTypes)((0,c.join)(e,"src","databases"),(0,c.join)(o,"types","dataSources.d.ts")),await(0,
|
|
21
21
|
f.generateBarrelIndexFile)((0,c.join)(o,"types")),await(0,f.generateMahameruDts)((0,c.join)(e,"mahameru.d.ts"))
|
|
22
|
-
;const n="tsconfig.build.json",a=(0,c.join)(e,n),l=(0,c.join)(e,"tsconfig.json"),
|
|
23
|
-
;let
|
|
24
|
-
i.writeFile)(a,JSON.stringify(
|
|
25
|
-
const
|
|
26
|
-
d.deleteDirIfExists)(o),process.exit(
|
|
27
|
-
;0!==
|
|
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
|
+
;let v=null;try{v=JSON.parse(w),v.compilerOptions.outDir=".mahameru",v.compilerOptions.rootDir="src",await(0,
|
|
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,
|
|
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 j=(0,c.join)(e,".env"),
|
|
35
|
-
m.existsSync)(j)&&await(0,i.copyFile)(j,(0,c.join)(o,".env")),(0,m.existsSync)(
|
|
36
|
-
c.join)(o,".env.production")):(0,m.existsSync)(
|
|
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)}}}
|
|
@@ -87,10 +87,10 @@ console.log(`📝 To check service status, run:\n - ${a.default.bold("mahameru
|
|
|
87
87
|
console.error(a.default.red(`❌ Error: ${e.message}`)),
|
|
88
88
|
m.fail("Make sure you are running CMD/PowerShell as an Administrator.")}}({serviceName:e,appPath:l,host:t,port:o,cert:r,
|
|
89
89
|
key:f})}catch{throw new Error('Executable "mahameru" not found in PATH.')}}}catch(e){
|
|
90
|
-
console.error(a.default.red(`❌ Error: ${e.message}`))}}},6478(e,t,o){t.pm=void 0;const r=o(5043)
|
|
91
|
-
;t.pm=e=>async({host:t,port:o,daemon:
|
|
92
|
-
},e)},1205(e,t,o){var r=this&&this.__importDefault||function(e){
|
|
93
|
-
;Object.defineProperty(t,"__esModule",{value:!0}),t.App=void 0
|
|
90
|
+
console.error(a.default.red(`❌ Error: ${e.message}`))}}},6478(e,t,o){t.pm=void 0;const r=o(5043),n=o(2354)
|
|
91
|
+
;t.pm=e=>async({host:t,port:o,daemon:s,cert:a,key:i})=>{const c=await(0,n.generatePmConfig)({host:t,port:o,cert:a,key:i
|
|
92
|
+
});await(0,r.processManager)({...c,daemon:s},e)}},1205(e,t,o){var r=this&&this.__importDefault||function(e){
|
|
93
|
+
return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.App=void 0
|
|
94
94
|
;const n=r(o(139)),s=o(8235),a=r(o(5205)),i=o(3024),c=o(6760);t.App=class{initialized=!1;options;worker;appEnv
|
|
95
95
|
;handleOnExit;constructor(e){this.options=e,this.appEnv=this.buildAppEnv();const t=(0,
|
|
96
96
|
c.join)(this.options.rootPath,"node_modules","mahameru","server.js")
|
|
@@ -167,84 +167,84 @@ 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,_=null,M=!1,x=null,E=!1,T=!0,A=!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
|
-
;const
|
|
175
|
-
}).start(),
|
|
176
|
-
;u=new d.App(
|
|
174
|
+
;const k=(0,i.default)({text:`${c.default.cyan("[Mahameru]")} Starting TypeScript watch...`,spinner:"triangle"
|
|
175
|
+
}).start(),C={dev:!0,host:t,port:o,rootPath:m}
|
|
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:
|
|
179
|
-
getCanonicalFileName:e=>e,getCurrentDirectory:()=>m,getNewLine:()=>
|
|
180
|
-
;const
|
|
181
|
-
},
|
|
178
|
+
a.resolve)((0,a.join)(m,"node_modules","typescript")),{createWatchCompilerHost:d,createWatchProgram:u,formatDiagnosticsWithColorAndContext:p,formatDiagnostic:v,sys:P,createEmitAndSemanticDiagnosticsBuilderProgram:_}=f(l),M={
|
|
179
|
+
getCanonicalFileName:e=>e,getCurrentDirectory:()=>m,getNewLine:()=>P.newLine};let x=!1,E=!1,T=0
|
|
180
|
+
;const A=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,_,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)&&(
|
|
184
|
+
})(t)&&(T+=1,A.set(T,Date.now()),b.set(T,{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
|
-
}(t)||console.log(`${c.default.yellow("[Mahameru TSC]")} ${t}`)}),
|
|
188
|
-
const t=$((0,a.resolve)(e));return t===
|
|
189
|
-
;
|
|
190
|
-
;H&&(
|
|
191
|
-
;W.writeFile=(e,t,o,r,n,s)=>{J?.(e,t,o,r,n,s),q(e,n)};const L=
|
|
192
|
-
;const t=0===
|
|
193
|
-
console.error(c.default.red("[Mahameru Dev] Build lifecycle failed.")),console.error(e)})};const U=u(
|
|
194
|
-
;async function B(e,o){const l=
|
|
187
|
+
}(t)||console.log(`${c.default.yellow("[Mahameru TSC]")} ${t}`)}),N=$((0,a.resolve)((0,a.join)(h,"types"))),I=e=>{
|
|
188
|
+
const t=$((0,a.resolve)(e));return t===N||t.startsWith(`${N}/`)},F=R.watchFile?.bind(R)
|
|
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)
|
|
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===T?1:T;T=t,k=k.then(()=>B(e,t)).catch(e=>{
|
|
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=A.get(o)??Date.now(),d=b.get(o)??{emittedRuntimeFiles:new Set,
|
|
195
195
|
changedRuntimeSourceFiles:new Set}
|
|
196
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),
|
|
198
|
-
if(0===e.length)return;const t=await async function(){if(!
|
|
199
|
-
a.join)(__dirname,"node_modules","tsc-alias")),{prepareSingleFileReplaceTscAliasPaths:t}=f(e);
|
|
200
|
-
})}return
|
|
197
|
+
O(new Error("Initial TypeScript build failed."))),b.delete(o),A.delete(o),void i();try{if(x)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({
|
|
201
201
|
fileContents:e,filePath:o});r!==e&&await(0,s.writeFile)(o,r)}}([...d.emittedRuntimeFiles]);else{
|
|
202
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
203
|
;await j(100)}throw new Error("Timed out waiting for emitted dev runtime artifacts.")}();const e=(0,a.resolve)((0,
|
|
204
|
-
a.join)(__dirname,"node_modules","tsc-alias")),{replaceTscAliasPaths:t}=f(e);await t({configFile:
|
|
204
|
+
a.join)(__dirname,"node_modules","tsc-alias")),{replaceTscAliasPaths:t}=f(e);await t({configFile:w,outDir:h})}}catch(e){
|
|
205
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
|
-
b.delete(o),
|
|
207
|
+
b.delete(o),A.delete(o),void i()}const u=Date.now()-l;try{await r({durationMs:u,
|
|
208
208
|
emittedRuntimeFiles:[...d.emittedRuntimeFiles],changedRuntimeSourceFiles:[...d.changedRuntimeSourceFiles],
|
|
209
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),
|
|
211
|
-
a.resolve)(e),r=$(o),n=b.get(
|
|
210
|
+
console.error(e),void i()}finally{b.delete(o),A.delete(o)}x||(x=!0,D())}function q(e,t){const o=(0,
|
|
211
|
+
a.resolve)(e),r=$(o),n=b.get(T);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
|
-
}(t))n.changedRuntimeSourceFiles.add(e)}}try{return await
|
|
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
|
-
|
|
220
|
-
}),
|
|
221
|
-
;const
|
|
222
|
-
x=setTimeout(()=>{
|
|
215
|
+
}(t))n.changedRuntimeSourceFiles.add(e)}}try{return await C,U}catch(e){throw U.close(),e}}({environment:e,spinner:k,
|
|
216
|
+
onBuildStart:()=>{T=!0},
|
|
217
|
+
onBuildSuccess:({durationMs:e,emittedRuntimeFiles:t,changedRuntimeSourceFiles:o,initialBuild:r})=>{if(b=e,T=!1,!r){
|
|
218
|
+
for(const e of t)D.add(e);for(const e of o)O.add(e)}T||!u?.initialized||M||(E||A||0!==D.size)&&F()},onBuildFailure:()=>{
|
|
219
|
+
T=!1,b=0,A=!1,D.clear(),O.clear(),x&&(clearTimeout(x),x=null)}
|
|
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=()=>{x&&clearTimeout(x),
|
|
222
|
+
x=setTimeout(()=>{I=I.then(async()=>{if(M||!u)return;if(T)return void F();const e=[...D],t=[...O],o=A,r=E;if(E=!1,A=!1,
|
|
223
223
|
D.clear(),
|
|
224
224
|
O.clear(),x=null,r)return console.log(c.default.yellow("\n [Mahameru] Config file changed. Reloading server...\n")),
|
|
225
|
-
await u.stop(),u=new d.App(
|
|
226
|
-
;const n=e[e.length-1],s=t[t.length-1]??(n?
|
|
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)
|
|
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)}
|
|
230
|
-
;
|
|
231
|
-
a.resolve)(g)),s=$((0,a.resolve)(
|
|
230
|
+
;R.on("all",({event:e,filePath:t})=>{const o=function(e){const t=(0,a.resolve)(e),o=$(t),r=$((0,a.resolve)(h)),n=$((0,
|
|
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?E=!0:(D.add(t),O.add(
|
|
235
|
-
|
|
234
|
+
;o&&("runtime"===o&&"delete"!==e&&"rename"!==e||((e,t)=>{"config"===e?E=!0:(D.add(t),O.add(P(t))),T||F()})(o,t))}),
|
|
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
|
-
|
|
241
|
+
}).catch(()=>{})])}await(0,s.rm)((0,a.resolve)(g,o),{recursive:!0,force:!0}).catch(()=>{})}(r),A=!0,O.add((0,
|
|
242
|
+
a.resolve)(r)),T||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
|
-
u.createRequire)(__filename),m=process.cwd(),h=(0,a.join)(m,".mahameru"),g=h,y=(0,a.join)(m,"src"),
|
|
247
|
-
a.join)(m,"tsconfig.json"),
|
|
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
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}
|
|
@@ -291,10 +291,10 @@ a.isMahameruProjectDir)(o)||(console.error(s.default.red(`\n${o} is not a Mahame
|
|
|
291
291
|
process.exit(1));const g=await(0,l.getProjectJson)(o);if(!(0,p.existsSync)((0,f.join)(o,"node_modules"))||!(0,
|
|
292
292
|
p.existsSync)((0,f.join)(o,"package-lock.json"))){const e=(0,c.default)("Installing dependencies...").start();(0,
|
|
293
293
|
m.execSync)("npm install",{stdio:"inherit",cwd:o}),e.succeed(s.default.green("Dependencies installed."))}const y=(0,
|
|
294
|
-
c.default)("Checking available port...").start(),
|
|
295
|
-
;y.text="Connecting to MahameruJS PM Daemon...";const
|
|
296
|
-
|
|
297
|
-
projectRoot:o,port:
|
|
294
|
+
c.default)("Checking available port...").start(),w=await(0,i.freePortFinder)(r)
|
|
295
|
+
;y.text="Connecting to MahameruJS PM Daemon...";const v=n.default.createConnection({path:u.IPC_SOCKET_PATH},()=>{
|
|
296
|
+
v.write(JSON.stringify({command:"FORK_PROJECT",payload:{name:g.name,description:g.description,version:g.version,
|
|
297
|
+
projectRoot:o,port:w,host:h}}))});v.on("data",e=>{
|
|
298
298
|
const t=JSON.parse(e.toString()),{success:o,message:r,data:n,mpmUrl:a}=t
|
|
299
299
|
;o?(!function({name:e,version:t,mode:o,host:r,port:n,pid:a,mpmUrl:i}){
|
|
300
300
|
const c=[`${s.default.bold("App:")} ${s.default.cyan(e)}`,`${s.default.bold("Version:")} ${t}`,`${s.default.bold("Mode:")} ${s.default.cyan(o)}`,`${s.default.bold("PID:")} ${a}`,`${s.default.bold("Local:")} ${s.default.cyan(`http://${r}:${n}`)}`]
|
|
@@ -302,8 +302,8 @@ const c=[`${s.default.bold("App:")} ${s.default.cyan(e)}`,`${s.default.bold
|
|
|
302
302
|
c.forEach(e=>console.log(` ${e}`)),
|
|
303
303
|
console.log(`\n${s.default.dim("Use `mahameru status` to inspect this managed project.")}\n`)}({name:g.name,
|
|
304
304
|
version:g.version,mode:"production",host:n.host,port:n.port,pid:n.pid,mpmUrl:a}),
|
|
305
|
-
y.succeed(s.default.green(`\n${r}`))):(y.fail(s.default.red("Failed to start project!")),console.error(t)),
|
|
306
|
-
process.exit(0)}),
|
|
305
|
+
y.succeed(s.default.green(`\n${r}`))):(y.fail(s.default.red("Failed to start project!")),console.error(t)),v.end(),
|
|
306
|
+
process.exit(0)}),v.on("error",e=>{
|
|
307
307
|
"ENOENT"===e.code||"ECONNREFUSED"===e.code?y.fail(`${s.default.red("Mahameru PM Service is not running. Cannot connect to Mahameru PM Service.")}\n\nMake sure you run ${s.default.bold(s.default.cyan("mahameru pm service install"))} first to install the service.\nOr open new terminal and run ${s.default.bold(s.default.cyan("mahameru pm start"))} to run the MahameruJS PM foreground process. Then you can run ${s.default.bold(s.default.cyan("mahameru start"))} again on this directory.`):"win32"===process.platform&&"EPERM"===e.code?function(e,t){
|
|
308
308
|
if(!(0,d.hasWindowsElevationRetry)()&&!(0,d.isWindowsProcessElevated)()){
|
|
309
309
|
e.warn(s.default.yellow("\nWindows blocked access to the Mahameru PM pipe. Requesting Administrator approval..."))
|
|
@@ -473,17 +473,17 @@ s.execSync)(`sc stop "${e}"`)}catch(e){}
|
|
|
473
473
|
console.error(c.default.red("❌ Uninstallation failed:"),e.message)}}},8625(e,t,o){
|
|
474
474
|
var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
475
475
|
;Object.defineProperty(t,"__esModule",{value:!0})
|
|
476
|
-
;const n=o(6858),s=r(o(5205)),a=o(8330),i=o(7022),c=o(545),l=o(5775),d=o(3674),u=o(6478),p=o(6571),f=o(1471),m=o(5019),h=o(7659),g=o(846),y=o(7695),
|
|
476
|
+
;const n=o(6858),s=r(o(5205)),a=o(8330),i=o(7022),c=o(545),l=o(5775),d=o(3674),u=o(6478),p=o(6571),f=o(1471),m=o(5019),h=o(7659),g=o(846),y=o(7695),w=o(2074),v=new n.Command
|
|
477
477
|
;(async()=>{try{const e=process.cwd(),t="mahameru-pm"
|
|
478
|
-
;
|
|
479
|
-
|
|
480
|
-
i.dev)({version:a.version})),
|
|
478
|
+
;v.name("mahameru").description(`${s.default.bold(s.default.cyan("▲ MahameruJS"))} ${s.default.dim(`CLI v${a.version}`)}`).version(a.version,"-v, --version","Display help for command"),
|
|
479
|
+
v.command("dev").description("Start MahameruJS development server.").option("-p, --port <number>","Port to run the server on",l.parsePort,3e3).option("-H, --host <string>","Host to run the server on","127.0.0.1").action((0,
|
|
480
|
+
i.dev)({version:a.version})),v.command("build").description("Build MahameruJS production application.").action((0,
|
|
481
481
|
c.build)({rootPath:e
|
|
482
|
-
})),
|
|
483
|
-
g.startFork)({rootPath:e})),
|
|
484
|
-
|
|
482
|
+
})),v.command("start").description("Start MahameruJS production server.").option("-p, --port <number>","Port to run the server on",l.parsePort,8e3).option("-H, --host <string>","Host to run the server on","127.0.0.1").action((0,
|
|
483
|
+
g.startFork)({rootPath:e})),v.command("stop").description("Stop MahameruJS production server.").action((0,
|
|
484
|
+
w.stopFork)(e,a.version)),v.command("status").description("View MahameruJS production server status.").action((0,
|
|
485
485
|
y.projectStatus)(e,a.version))
|
|
486
|
-
;const o=
|
|
486
|
+
;const o=v.command("pm").description(`${s.default.bold(s.default.cyan("▲ MahameruJS"))} ${s.default.dim(`Process Manager v${a.version}`)}`)
|
|
487
487
|
;o.command("start").description("Start MahameruJS Process Manager.").option("-p, --port <number>","Port to run the server on",l.parsePort,8e3).option("-H, --host <string>","Host to run the server on","127.0.0.1").option("--cert <string>","Path to the SSL certificate file").option("--key <string>","Path to the SSL key file").option("-d, --daemon","Run as a daemon",!1).action((0,
|
|
488
488
|
u.pm)(a.version)),
|
|
489
489
|
o.command("status").description("Start MahameruJS Process Manager.").option("-p, --port <number>","Port to run the server on",l.parsePort,8e3).option("-H, --host <string>","Host to run the server on","127.0.0.1").option("-d, --daemon","Run as a daemon",!1).action(()=>{
|
|
@@ -499,14 +499,15 @@ p.uninstall)(t)),r.command("start").description("Start MahameruJS Process Manage
|
|
|
499
499
|
f.startService)(t)),
|
|
500
500
|
r.command("stop").description("Stop MahameruJS Process Manager service.").option("-g, --graceful","Gracefully stop the service.",!1).action((0,
|
|
501
501
|
m.stopService)(t)),r.command("status").description("Get MahameruJS Process Manager status.").action((0,
|
|
502
|
-
h.status)(t,a.version)),await
|
|
503
|
-
t.IPC_SOCKET_PATH=t.MQ=t.PROJECTS_FILE_PATH=t.APPDATA_PATH=t.Ds=t.ig=t.vL=t.IS_WINDOWS=void 0
|
|
504
|
-
;"darwin"===process.platform||"win32"===process.platform||process.platform,
|
|
505
|
-
t.
|
|
506
|
-
if(t.IS_WINDOWS)return(0,r.join)(process.env.APPDATA,t.Ds)
|
|
507
|
-
|
|
502
|
+
h.status)(t,a.version)),await v.parseAsync(process.argv)}catch(e){console.error(e),process.exit(1)}})()},6921(e,t,o){
|
|
503
|
+
t.IPC_SOCKET_PATH=t.MQ=t.PM_CONFIG_FILE_PATH=t.PROJECTS_FILE_PATH=t.APPDATA_PATH=t.Ds=t.ig=t.vL=t.IS_WINDOWS=void 0
|
|
504
|
+
;const r=o(6760);"darwin"===process.platform||"win32"===process.platform||process.platform,
|
|
505
|
+
t.IS_WINDOWS="win32"===process.platform,t.vL="darwin"===process.platform,t.ig="linux"===process.platform,
|
|
506
|
+
t.Ds="mahameru",t.APPDATA_PATH=(()=>{if(t.IS_WINDOWS)return(0,r.join)(process.env.APPDATA,t.Ds);if(t.vL)return(0,
|
|
507
|
+
r.join)(process.env.HOME,"Library","Application Support",t.Ds);if(t.ig)return(0,r.join)("/etc",t.Ds)
|
|
508
508
|
;throw new Error("Unsupported platform")})(),t.PROJECTS_FILE_PATH=(0,r.join)(t.APPDATA_PATH,"projects.json"),
|
|
509
|
-
t.
|
|
509
|
+
t.PM_CONFIG_FILE_PATH=(0,r.join)(t.APPDATA_PATH,"pm.config.json"),t.MQ="mpm_ipc",
|
|
510
|
+
t.IPC_SOCKET_PATH="win32"===process.platform?`\\\\.\\pipe\\${t.MQ}`:`/tmp/${t.MQ}.sock`},5043(e,t,o){
|
|
510
511
|
var r=this&&this.__createBinding||(Object.create?function(e,t,o,r){void 0===r&&(r=o)
|
|
511
512
|
;var n=Object.getOwnPropertyDescriptor(t,o);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,
|
|
512
513
|
get:function(){return t[o]}}),Object.defineProperty(e,r,n)}:function(e,t,o,r){void 0===r&&(r=o),e[r]=t[o]
|
|
@@ -523,105 +524,143 @@ return r=Object.getOwnPropertyNames||function(e){var t=[]
|
|
|
523
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])
|
|
524
525
|
;return s(t,e),t}),i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
525
526
|
;Object.defineProperty(t,"__esModule",{value:!0}),t.processManager=void 0
|
|
526
|
-
;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),
|
|
527
|
-
d.join)(__dirname,"mpm"),
|
|
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"),j={".html":"text/html",".css":"text/css",".js":"text/javascript",".json":"application/json",
|
|
528
529
|
".png":"image/png",".jpg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon"}
|
|
529
|
-
;t.processManager=async({host:e,port:t,daemon:r,cert:n,key:s},
|
|
530
|
-
|
|
530
|
+
;t.processManager=async({host:e,port:t,daemon:r,cert:n,key:s,logins:a},i)=>{try{
|
|
531
|
+
const _=a.find(e=>e.role===S.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 T=await(0,h.loadProjects)();(0,h.setProjects)(T)
|
|
533
|
+
;const A=await(0,y.freePortFinder)(t),b=(e,t)=>{
|
|
534
|
+
if(M&&(t.setHeader("Access-Control-Allow-Origin","http://localhost:5173"),
|
|
531
535
|
t.setHeader("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),
|
|
532
|
-
t.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),
|
|
533
|
-
|
|
534
|
-
"
|
|
535
|
-
if("
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
;
|
|
536
|
+
t.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),
|
|
537
|
+
t.setHeader("Access-Control-Allow-Credentials","true")),t.setHeader("X-Powered-By","MahameruJS"),
|
|
538
|
+
"OPTIONS"===e.method)return t.writeHead(204),t.end()
|
|
539
|
+
;if(("/api/auth/login"===e.url||"/api/auth/login/"===e.url)&&"POST"===e.method){let o="";return e.on("data",e=>{
|
|
540
|
+
o+=e.toString()}),void e.on("end",()=>{try{const e=JSON.parse(o);if(!e)throw new Error("Body cannot be empty")
|
|
541
|
+
;if(!e.username||!e.password||"string"!=typeof e.username||"string"!=typeof e.password)throw new Error("Invalid username or password")
|
|
542
|
+
;const r=a.find(t=>t.username===e.username&&t.password===e.password)
|
|
543
|
+
;if(!r)throw new Error("Invalid username or password")
|
|
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=/;${x?" Secure;":""} SameSite=Strict;`)
|
|
546
|
+
;const{password:i,...c}=r;return t.writeHead(200,{"Content-Type":"application/json"}),void t.end(JSON.stringify({
|
|
547
|
+
success:!0,data:c}))}catch(e){return void(t.headersSent||(e instanceof Error?(t.writeHead(400,{
|
|
548
|
+
"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:e.message}))):(console.error(e),
|
|
549
|
+
t.writeHead(500,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:"Internal server error"
|
|
550
|
+
})))))}})}if(("/api/auth/session"===e.url||"/api/login/session"===e.url)&&"POST"===e.method){const o=e.headers.cookie
|
|
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,{
|
|
553
|
+
"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:"Unauthorized"}))
|
|
554
|
+
;const[n,s]=Buffer.from(r.mahameru_pm_token,"base64").toString().split(":"),i=a.find(e=>e.username===n&&e.password===s)
|
|
555
|
+
;return i?(t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!0,data:i
|
|
556
|
+
}))):(t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:"Unauthorized"})))}
|
|
557
|
+
if(("/api/auth/logout"===e.url||"/api/login/logout"===e.url)&&"POST"===e.method){const o=e.headers.cookie
|
|
558
|
+
;if(!o)return t.writeHead(401,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,
|
|
559
|
+
message:"Unauthorized"}))
|
|
560
|
+
;return(0,P.parseCookies)(o).mahameru_pm_token?(t.setHeader("Set-Cookie",`mahameru_pm_token=; Max-Age=0; HttpOnly; Path=/;${x?" Secure;":""} SameSite=Strict;`),
|
|
561
|
+
t.writeHead(200,{"Content-Type":"application/json"}),t.end(JSON.stringify({success:!0}))):(t.writeHead(401,{
|
|
562
|
+
"Content-Type":"application/json"}),t.end(JSON.stringify({success:!1,message:"Unauthorized"})))}
|
|
563
|
+
if("/api/process"===e.url&&"GET"===e.method){t.writeHead(200,{"Content-Type":"application/json"});const e=(0,
|
|
564
|
+
h.getProjects)().map(g.parseProject);return t.end(JSON.stringify(e))}if("GET"===e.method){
|
|
565
|
+
const o="/"===e.url?"/index.html":e.url;let r=(0,d.join)($,o)
|
|
566
|
+
;return r.startsWith($)?void w.default.access(r,w.default.constants.F_OK,e=>{if(!e){const e=(0,
|
|
567
|
+
d.extname)(r).toLowerCase(),o=j[e]||"application/octet-stream";return t.writeHead(200,{"Content-Type":o}),
|
|
568
|
+
w.default.createReadStream(r).pipe(t)}{const e=(0,d.join)($,"index.html")
|
|
569
|
+
;w.default.access(e,w.default.constants.F_OK,o=>o?(t.writeHead(404,{"Content-Type":"text/html"}),
|
|
540
570
|
t.end("<h1>404 - Frontend Build Not Found</h1>")):(t.writeHead(200,{"Content-Type":"text/html"}),
|
|
541
|
-
|
|
542
|
-
return t.writeHead(404,{"Content-Type":"text/html"}),t.end("
|
|
543
|
-
},
|
|
544
|
-
process.send||r||(console.clear(),
|
|
545
|
-
console.log(`${c.default.bold(c.default.cyan("▲ Mahameru"))} ${c.default.dim(`Process Manager v${
|
|
546
|
-
console.log(`Server listening on host ${e} and port ${t}.`)
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
const
|
|
554
|
-
|
|
571
|
+
w.default.createReadStream(e).pipe(t)))}}):(t.writeHead(403,{"Content-Type":"text/plain"}),t.end("Forbidden"))}
|
|
572
|
+
return t.writeHead(404,{"Content-Type":"text/html"}),t.end(JSON.stringify({success:!1,message:"Route Not Found"}))
|
|
573
|
+
},D=()=>console.log("[MPM] HTTP server closed."),O=e=>console.log("[MPM] HTTP server error:",e),k=async()=>{
|
|
574
|
+
if(process.send||r||(console.clear(),
|
|
575
|
+
console.log(`${c.default.bold(c.default.cyan("▲ Mahameru"))} ${c.default.dim(`Process Manager v${i}`)}\n`)),
|
|
576
|
+
console.log(`Server listening on host ${e} and port ${t}.`),!process.send&&!r){let o=""
|
|
577
|
+
;o+=` ${c.default.bold(c.default.green("PID"))}: ${process.pid}\n`,
|
|
578
|
+
o+=` ${c.default.bold(c.default.green("URL"))}: ${x?"https":"http"}://${e}:${t}\n`,
|
|
579
|
+
o+=`${c.default.bold(c.default.green("API Endpoint"))}: ${x?"https":"http"}://${e}:${t}/api/process\n`,
|
|
580
|
+
o+=` ${c.default.bold(c.default.green("Username"))}: ${c.default.cyan(_.username)}\n`,
|
|
581
|
+
o+=` ${c.default.bold(c.default.green("password"))}: ${c.default.cyan(_.password)}\n`,
|
|
582
|
+
o+=`\n${c.default.dim("Press Ctrl+C to stop the server")}\n`,console.log(o)}
|
|
583
|
+
for(const e of T)e.isLastStatusIsRunning&&(console.log(`[MPM] Starting project ${e.name}`),await V(e),
|
|
584
|
+
console.log(`[MPM] Project ${e.name} started`))},C=n&&s?(0,f.createServer)({cert:w.default.readFileSync(n),
|
|
585
|
+
key:w.default.readFileSync(s)
|
|
586
|
+
},b).on("close",D).on("error",O).listen(A,e,k):(0,p.createServer)(b).on("close",D).on("error",O).listen(A,e,k)
|
|
587
|
+
;if(!m.IS_WINDOWS){const e=o(9896);e.existsSync(m.IPC_SOCKET_PATH)&&e.unlinkSync(m.IPC_SOCKET_PATH)}const R=e=>t=>{
|
|
588
|
+
const o=t.toString().trim();console.log(`[${e}] ${o}`)},N=e=>t=>{const o=t.toString().trim()
|
|
589
|
+
;console.error(`[${e} ERROR] ${o}`)},I=(o,r,n)=>({type:s,data:a})=>{if(o)if("ERROR"===s)o.write(JSON.stringify({
|
|
555
590
|
success:!1,message:a
|
|
556
591
|
}));else if("READY"===s)console.log(`[MPM] Project${r} successfully started by PM Daemon (PID: ${n.pid})`),
|
|
557
592
|
o.write(JSON.stringify({success:!0,message:`Project ${r} successfully started by PM Daemon (PID: ${n.pid})`,data:a,
|
|
558
|
-
mpmUrl:`http://${e}:${t}`}));else if("PROCESS_USAGE"===s){const e=(0,h.getProject)(r);e&&
|
|
559
|
-
project:(0,g.parseProject)(e)})}},
|
|
560
|
-
data:e}),
|
|
561
|
-
console.log(`[MPM] ${e}`)},
|
|
593
|
+
mpmUrl:`http://${e}:${t}`}));else if("PROCESS_USAGE"===s){const e=(0,h.getProject)(r);e&&X.emit("process-usage",{data:a,
|
|
594
|
+
project:(0,g.parseProject)(e)})}},F=e=>t=>{console.log(`[MPM] Project ${e} errored: ${t.message}`)},H=e=>({success:!0,
|
|
595
|
+
data:e}),W=e=>({success:!1,error:e}),J=e=>(0,g.parseProject)(e),L=()=>(0,h.getProjects)().map(g.parseProject),U=e=>{
|
|
596
|
+
console.log(`[MPM] ${e}`)},B=()=>{X.emit("projects",L())},q=e=>{
|
|
562
597
|
const t=(0,d.join)(e.rootPath,"node_modules","mahameru","server.js")
|
|
563
|
-
;if(!(0,
|
|
564
|
-
;return t},
|
|
598
|
+
;if(!(0,w.existsSync)(t))throw new Error(`Mahameru package is not installed in ${e.rootPath} project. Please install it by running: npm install mahameru`)
|
|
599
|
+
;return t},z=e=>({MAHAMERU__SEND_PROCESS_USAGE_INTERVAL:"3000",MAHAMERU__ROOT_PATH:e.rootPath,
|
|
565
600
|
MAHAMERU__MODE:"production",...e.host?{MAHAMERU__HTTP_LISTEN_HOST:e.host}:{},...e.port?{
|
|
566
|
-
MAHAMERU__HTTP_LISTEN_PORT:e.port.toString()}:{}}),
|
|
567
|
-
t.stderr?.on("data",
|
|
601
|
+
MAHAMERU__HTTP_LISTEN_PORT:e.port.toString()}:{}}),G=(e,t,o=null)=>{t.stdout?.on("data",R(e.name)),
|
|
602
|
+
t.stderr?.on("data",N(e.name)),t.on("message",I(o,e.name,t)),t.on("error",F(e.name)),t.once("exit",o=>{e.child===t&&(0,
|
|
568
603
|
h.getProject)(e.name)&&(e.status=0===o||null===o?"stopped":"errored",e.pid=void 0,e.child=void 0,
|
|
569
|
-
|
|
570
|
-
};e.on("message",r)}),
|
|
571
|
-
l.fork)(n,[],{cwd:e.rootPath,env:{...process.env,...
|
|
572
|
-
e.pid=a.pid,e.child=a,(0,h.setProject)(e),
|
|
604
|
+
X.emit("project-update",J(e)),B())})},K=(e,t)=>new Promise(o=>{const r=n=>{t.includes(n.type)&&(e.off("message",r),o(n))
|
|
605
|
+
};e.on("message",r)}),V=(e,t=null)=>new Promise((o,r)=>{let n=!1;const s=e=>{n||(n=!0,e())};try{const n=q(e),a=(0,
|
|
606
|
+
l.fork)(n,[],{cwd:e.rootPath,env:{...process.env,...z(e)},stdio:["inherit","pipe","pipe","ipc"]});e.status="stopped",
|
|
607
|
+
e.pid=a.pid,e.child=a,(0,h.setProject)(e),G(e,a,t),K(a,["READY","ERROR"]).then(({type:t,data:n})=>{"READY"===t?s(()=>{
|
|
573
608
|
e.status="running",e.pid=a.pid,e.child=a,e.port=n.port,e.host=n.host,(0,h.setProject)(e),o(e)}):"ERROR"===t&&s(()=>{
|
|
574
609
|
r(`[MPM] ${n.message}`)})}),a.once("error",t=>{s(()=>{e.status="errored",e.pid=void 0,e.child=void 0,(0,
|
|
575
610
|
h.setProject)(e),r(t)})}),a.once("exit",t=>{s(()=>{e.status=0===t||null===t?"stopped":"errored",e.pid=void 0,
|
|
576
611
|
e.child=void 0,
|
|
577
612
|
(0,h.setProject)(e),r(new Error(`Project ${e.name} exited before ready${"number"==typeof t?` with code ${t}`:""}`))})})
|
|
578
|
-
}catch(t){s(()=>{e.status="errored",e.pid=void 0,e.child=void 0,(0,h.setProject)(e),r(t)})}}),
|
|
613
|
+
}catch(t){s(()=>{e.status="errored",e.pid=void 0,e.child=void 0,(0,h.setProject)(e),r(t)})}}),Z=e=>new Promise((t,o)=>{
|
|
579
614
|
if((0,h.setProject)({...e,status:"stopping"}),!e.child)return e.status="stopped",e.pid=void 0,(0,h.setProject)(e),
|
|
580
|
-
void t(e);const r=e.child;let n=!1;const s=e=>{n||(n=!0,e())};
|
|
615
|
+
void t(e);const r=e.child;let n=!1;const s=e=>{n||(n=!0,e())};K(r,["SHUTDOWN_DONE"]).then(({type:o})=>{
|
|
581
616
|
"SHUTDOWN_DONE"===o&&s(()=>{e.status="stopped",e.pid=void 0,e.child=void 0,(0,h.setProject)(e),t(e)})}),
|
|
582
617
|
r.once("error",t=>{s(()=>{e.status="errored",e.pid=void 0,e.child=void 0,(0,h.setProject)(e),o(t)})}),r.once("exit",r=>{
|
|
583
618
|
s(()=>{e.status=0===r||null===r?"stopped":"errored",e.pid=void 0,e.child=void 0,(0,h.setProject)(e),
|
|
584
619
|
0!==r&&null!==r?o(new Error(`Project ${e.name} exited during shutdown with code ${r}`)):t(e)})}),r.send({type:"SHUTDOWN"
|
|
585
|
-
})}),
|
|
586
|
-
;if(!t)throw
|
|
587
|
-
;t.child?(
|
|
588
|
-
t.child=void 0,(0,h.setProject)(t),
|
|
589
|
-
h.getProject)(e),n=r?
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
;if("FORK_PROJECT"===o.command){
|
|
593
|
-
h.getProject)(r)
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
620
|
+
})}),Y=async e=>{U(`Delete requested for project "${e}"`);const t=(0,h.getProject)(e)
|
|
621
|
+
;if(!t)throw U(`Delete aborted. Project "${e}" not found`),new Error("Project not found");const o=J(t)
|
|
622
|
+
;t.child?(U(`Project "${e}" is running. Stopping before delete`),await Z(t)):(t.status="stopped",t.pid=void 0,
|
|
623
|
+
t.child=void 0,(0,h.setProject)(t),U(`Project "${e}" already stopped. Proceeding to delete`));const r=(0,
|
|
624
|
+
h.getProject)(e),n=r?J(r):o;return U(`Deleting project "${e}" from registry`),(0,h.deleteProject)(e),
|
|
625
|
+
U(`Project "${e}" exists after delete: ${(0,h.getProject)(e)?"true":"false"}`),U(`Emitting project-delete for "${e}"`),
|
|
626
|
+
X.emit("project-delete",n),B(),(0,h.deleteProject)(e),await(0,h.saveProjects)(),n},Q=u.default.createServer(e=>{
|
|
627
|
+
e.on("data",t=>{try{const o=JSON.parse(t.toString());if("FORK_PROJECT"===o.command){
|
|
628
|
+
const t=o.payload,{name:r,description:n,version:s,projectRoot:a,port:i,host:c}=t,l=(0,h.getProject)(r)
|
|
629
|
+
;if(l&&"running"===l.status&&void 0!==l.child&&void 0!==l.pid)return void e.write(JSON.stringify({status:"error",
|
|
630
|
+
message:"Project already running"}));console.log(`[MPM] Starting project: ${r} (${a})`);const d={pid:void 0,
|
|
631
|
+
createdAt:l?.createdAt??(new Date).toISOString(),isDisabled:!1,name:r,mode:"production",description:n,version:s,
|
|
632
|
+
rootPath:a,host:c,port:i,status:"stopped"};(0,h.setProject)(d),V(d,e).then(e=>{
|
|
633
|
+
l?X.emit("project-update",J(e)):X.emit("project-create",J(e)),B()}).catch(t=>{e.write(JSON.stringify({success:!1,
|
|
598
634
|
error:t.message}))})}else if("STOP"===o.command){const t=o.payload,r=(0,h.getProject)(t.name)
|
|
599
|
-
;if(!r)return void e.write(JSON.stringify({success:!1,error:"Project not found"}));
|
|
600
|
-
t.isLastStatusIsRunning=!1,(0,h.setProject)(t),
|
|
601
|
-
}).catch(t=>{e.write(JSON.stringify(
|
|
635
|
+
;if(!r)return void e.write(JSON.stringify({success:!1,error:"Project not found"}));Z(r).then(t=>{
|
|
636
|
+
t.isLastStatusIsRunning=!1,(0,h.setProject)(t),X.emit("project-update",J(t)),B(),e.write(JSON.stringify(H(J(t))))
|
|
637
|
+
}).catch(t=>{e.write(JSON.stringify(W(t.message)))})
|
|
602
638
|
}else if("START"===o.command);else if("RESTART"===o.command);else if("STATUS"===o.command){const t=o.payload,r=(0,
|
|
603
639
|
h.getProject)(t.name);if(r){const{child:t,...o}=r;e.write(JSON.stringify({success:!0,data:o}))
|
|
604
640
|
}else e.write(JSON.stringify({success:!1,error:"Project not found"}))}}catch(t){e.write(JSON.stringify({success:!1,
|
|
605
|
-
error:t.message}))}})});
|
|
641
|
+
error:t.message}))}})});Q.on("close",()=>{console.log("[MPM IPC SERVER] IPC Server closed")}),Q.on("error",e=>{
|
|
606
642
|
"EADDRINUSE"===e.code?console.error(`[MPM IPC SERVER] IPC Server already running on ${m.IPC_SOCKET_PATH}`):console.error("[MPM IPC SERVER]",e),
|
|
607
|
-
process.exit(1)}),
|
|
608
|
-
console.log(`[MPM IPC SERVER] IPC Server listening on ${m.IPC_SOCKET_PATH}`)});const
|
|
609
|
-
},path:"/ws",serveClient:!1});
|
|
610
|
-
;
|
|
611
|
-
|
|
612
|
-
;
|
|
613
|
-
|
|
614
|
-
e.on("
|
|
615
|
-
|
|
616
|
-
t(
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
643
|
+
process.exit(1)}),Q.listen(m.IPC_SOCKET_PATH,()=>{
|
|
644
|
+
console.log(`[MPM IPC SERVER] IPC Server listening on ${m.IPC_SOCKET_PATH}`)});const X=new v.Server(C,{cors:{origin:"*"
|
|
645
|
+
},path:"/ws",serveClient:!1});X.use((e,t)=>{try{if(!e.handshake.headers.cookie)throw new Error("unauthorized")
|
|
646
|
+
;const o=(0,P.parseCookies)(e.handshake.headers.cookie);if(!o.mahameru_pm_token)throw new Error("unauthorized")
|
|
647
|
+
;const[r,n]=Buffer.from(o.mahameru_pm_token,"base64").toString().split(":"),s=a.find(e=>e.username===r&&e.password===n)
|
|
648
|
+
;if(!s)throw new Error("unauthorized");e.data.login=s,t()}catch(e){t(new Error(e.message))}}),X.on("connection",e=>{(0,
|
|
649
|
+
h.setSocket)(e);const t=(0,h.getProjects)().map(g.parseProject);e.emit("projects",t),e.on("getProjects",e=>e({
|
|
650
|
+
success:!0,data:(0,h.getProjects)().map(g.parseProject)})),e.on("start",(e,t)=>{const o=(0,h.getProject)(e)
|
|
651
|
+
;return o?o.child||"running"===o.status?t(W(`Project ${e} is already running`)):void V(o).then(e=>{
|
|
652
|
+
X.emit("project-update",J(e)),B(),t(H(J(e)))}).catch(e=>{t(W(e.message))}):t(W("Project not found"))}),
|
|
653
|
+
e.on("stop",(e,t)=>{const o=(0,h.getProject)(e);if(!o)return t(W("Project not found"));Z(o).then(async e=>{
|
|
654
|
+
e.isLastStatusIsRunning=!1,await(0,h.saveProjects)(e),X.emit("project-update",J(e)),B(),t(H(J(e)))}).catch(e=>{
|
|
655
|
+
t(W(e.message))})});const o=e=>(t,o)=>{U(`Socket event "${e}" received for project "${t}"`),Y(t).then(e=>{
|
|
656
|
+
U(`Invoking delete callback for project "${t}"`),o(H(e))}).catch(e=>{
|
|
657
|
+
U(`Delete failed for project "${t}": ${e.message}`),o(W(e.message))})};e.on("delete",o("delete")),
|
|
658
|
+
e.on("remove",o("remove")),e.on("disconnect",()=>{(0,h.deleteSocket)(e.id)})});const ee=async e=>{if(E)return;E=!0,
|
|
620
659
|
console.log(`[MPM] Received ${e}`);const t=(0,h.getProjects)();for(const e of t)if("running"===e.status){
|
|
621
|
-
console.log(`[MPM] Stopping project ${e.name}`);const t=await
|
|
660
|
+
console.log(`[MPM] Stopping project ${e.name}`);const t=await Z(e);t.isLastStatusIsRunning=!0,
|
|
622
661
|
console.log(`[MPM] Project ${e.name} stopped`),(0,h.setProject)(t)}await(0,h.saveProjects)(),(0,
|
|
623
|
-
h.getSockets)().forEach(e=>e.disconnect()),
|
|
624
|
-
;process.on("SIGINT",
|
|
662
|
+
h.getSockets)().forEach(e=>e.disconnect()),X.close(),Q.close(),C.close(e=>{e&&console.log("[MPM]",e),process.exit(0)})}
|
|
663
|
+
;process.on("SIGINT",ee),process.on("SIGTERM",ee)}catch(e){console.log("mpm error",e),process.exit(1)}}},7258(e,t,o){
|
|
625
664
|
Object.defineProperty(t,"__esModule",{value:!0
|
|
626
665
|
}),t.saveProjects=t.loadProjects=t.clearSockets=t.deleteSocket=t.setSocket=t.getSocket=t.getSockets=t.clearProjects=t.deleteProject=t.setProjects=t.setProject=t.getProject=t.getProjects=void 0
|
|
627
666
|
;const r=o(3024),n=o(6760),s=o(1455),a=o(6921),i=o(6929),c=new Map;t.getProjects=()=>Array.from(c.values())
|
|
@@ -637,13 +676,26 @@ r.existsSync)((0,n.join)(t.rootPath,"node_modules","mahameru"))||o.splice(e,1);r
|
|
|
637
676
|
}catch(e){throw new Error("Failed to load projects")}};t.saveProjects=async e=>{try{e?Array.isArray(e)||((0,
|
|
638
677
|
t.setProject)(e),e=(0,t.getProjects)().map(i.parseProject)):e=(0,t.getProjects)().map(i.parseProject)
|
|
639
678
|
;const o=e.map(i.parseProject),r=JSON.stringify(o,null,2);await(0,s.writeFile)(a.PROJECTS_FILE_PATH,r,"utf-8")}catch(e){
|
|
640
|
-
throw new Error("Failed to save projects")}}},
|
|
679
|
+
throw new Error("Failed to save projects")}}},7179(e,t){var o;t.LoginRole=void 0,function(e){e.ADMIN="admin",
|
|
680
|
+
e.USER="user"}(o||(t.LoginRole=o={}))},7209(e,t,o){var r=this&&this.__importDefault||function(e){
|
|
641
681
|
return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),
|
|
642
682
|
t.freePortFinder=async function(e=3e3){let t=e;const o=e+999;for(;t<o;)try{return await s(t)}catch(e){t++}
|
|
643
683
|
throw new Error(`Port ${e} - 999 is not available`)},t.isPortAvailable=function(e){return new Promise((t,o)=>{
|
|
644
684
|
const r=n.default.createServer();r.once("error",e=>{e.code,o(!1)}),r.once("listening",()=>{r.close(()=>t(!0))}),
|
|
645
685
|
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()
|
|
646
|
-
;r.once("error",e=>{e.code,o(e)}),r.once("listening",()=>{r.close(()=>t(e))}),r.listen(e,"127.0.0.1")})}},
|
|
686
|
+
;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){
|
|
687
|
+
t.generatePmConfig=async function({host:e,port:t,cert:o,key:l}){if((0,a.existsSync)(n.PM_CONFIG_FILE_PATH))try{
|
|
688
|
+
const e=await(0,r.readFile)(n.PM_CONFIG_FILE_PATH,"utf-8"),t=JSON.parse(e);if(t.cert&&!(0,
|
|
689
|
+
a.existsSync)(t.cert))throw new Error("SSL Certificate file not found");if(t.key&&!(0,
|
|
690
|
+
a.existsSync)(t.key))throw new Error("SSL key file not found")
|
|
691
|
+
;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}`)
|
|
692
|
+
;return t}catch(e){throw e}if(o&&!(0,a.existsSync)(o))throw new Error("SSL Certificate file not found");if(l&&!(0,
|
|
693
|
+
a.existsSync)(l))throw new Error("SSL key file not found");const d={host:e,port:await(0,i.freePortFinder)(t),cert:o,
|
|
694
|
+
key:l,logins:[{username:"admin",password:(0,c.generateRandomStrings)(8),role:"admin"}]};return await(0,
|
|
695
|
+
r.writeFile)(n.PM_CONFIG_FILE_PATH,JSON.stringify(d,null,2)),d}
|
|
696
|
+
;const r=o(1455),n=o(6921),s=o(7179),a=o(3024),i=o(7209),c=o(73)},73(e,t){t.generateRandomStrings=function(e){
|
|
697
|
+
const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let o=""
|
|
698
|
+
;for(let r=0;r<e;r++)o+=t.charAt(Math.floor(62*Math.random()));return o}},4830(e,t,o){
|
|
647
699
|
t.getProjectJson=async function(e){try{return JSON.parse(await(0,r.readFile)((0,n.join)(e,"package.json"),"utf-8"))
|
|
648
700
|
}catch(e){throw new Error("package.json not found")}};const r=o(1455),n=o(6760)},6718(e,t,o){
|
|
649
701
|
t.getNodeModulesPath=function(){try{return(0,r.execSync)("npm root -g",{stdio:["ignore","pipe","ignore"]
|
|
@@ -651,11 +703,13 @@ t.getNodeModulesPath=function(){try{return(0,r.execSync)("npm root -g",{stdio:["
|
|
|
651
703
|
;const r=o(1421)},4813(e,t,o){t.isMahameruProjectDir=function(e){const t=(0,n.join)(e,"package.json"),o=(0,
|
|
652
704
|
n.join)(e,"node_modules");if(!(0,r.existsSync)(t)&&(0,r.existsSync)(o))return!1;try{const e=(0,
|
|
653
705
|
r.readFileSync)(t,"utf-8"),o=JSON.parse(e);return!(!o.dependencies||!o.dependencies.mahameru)}catch(e){return!1}}
|
|
654
|
-
;const r=o(3024),n=o(6760)},
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
706
|
+
;const r=o(3024),n=o(6760)},9731(e,t){t.parseCookies=function(e){const t={};return e?(e.split(";").forEach(e=>{
|
|
707
|
+
let[o,...r]=e.split("=");if(o=o.trim(),!o)return;const n=r.join("=").trim();t[o]=decodeURIComponent(n)}),t):t}},
|
|
708
|
+
6929(e,t){t.parseProject=function(e){return{pid:e.pid,createdAt:e.createdAt,isDisabled:e.isDisabled,name:e.name,
|
|
709
|
+
description:e.description,version:e.version,mode:e.mode,rootPath:e.rootPath,port:e.port,host:e.host,status:e.status,
|
|
710
|
+
isLastStatusIsRunning:e.isLastStatusIsRunning}}},3157(e,t,o){t.hasWindowsElevationRetry=function(){
|
|
711
|
+
return"1"===process.env[n]},t.getWindowsElevatedWorkingDirectory=function(){return process.env[s]},
|
|
712
|
+
t.isWindowsProcessElevated=function(){if("win32"!==process.platform)return!1;const e=(0,
|
|
659
713
|
r.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command","([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)"],{
|
|
660
714
|
encoding:"utf8",windowsHide:!0});return 0===e.status&&"true"===e.stdout.trim().toLowerCase()},
|
|
661
715
|
t.relaunchCurrentProcessAsAdmin=function(e){if("win32"!==process.platform)return{ok:!1,reason:"unsupported-platform"}
|
|
@@ -681,5 +735,5 @@ e.exports=require("node:child_process")},139(e){e.exports=require("node:cluster"
|
|
|
681
735
|
},1455(e){e.exports=require("node:fs/promises")},7067(e){e.exports=require("node:http")},4708(e){
|
|
682
736
|
e.exports=require("node:https")},8995(e){e.exports=require("node:module")},7030(e){e.exports=require("node:net")},
|
|
683
737
|
8161(e){e.exports=require("node:os")},6760(e){e.exports=require("node:path")},6928(e){e.exports=require("path")},
|
|
684
|
-
8330(e){e.exports={version:"0.0.
|
|
738
|
+
8330(e){e.exports={version:"0.0.30"}}};const t={};(function o(r){const n=t[r];if(void 0!==n)return n.exports
|
|
685
739
|
;const s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,o),s.exports})(8625)})();
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/sales-chart-DowosFUP.js","assets/jsx-runtime-DIBGU2nq.js","assets/index-mJCpWoYL.js","assets/index-CwN0u_3d.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{n as e,o as t,r as n,t as r}from"./jsx-runtime-DIBGU2nq.js";import{fr as i}from"./index-mJCpWoYL.js";var a=e(),o=t(n(),1),s=r(),c=(0,o.lazy)(()=>i(()=>import(`./sales-chart-DowosFUP.js`),__vite__mapDeps([0,1,2,3])));function l(){let e=(0,a.c)(2),t;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,s.jsx)(`div`,{className:`flex flex-col justify-between gap-4 md:flex-row md:items-center md:gap-6`,children:(0,s.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,s.jsx)(`h1`,{className:`text-2xl font-bold tracking-tight`,children:`Process Manager Dashboard`}),(0,s.jsx)(`p`,{className:`text-muted-foreground`,children:`Monitor your process performance and key metrics in real-time`})]})}),e[0]=t):t=e[0];let n;return e[1]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,s.jsxs)(`div`,{className:`flex-1 space-y-6 px-6 pt-0`,children:[t,(0,s.jsx)(`div`,{className:`@container/main space-y-6`,children:(0,s.jsx)(o.Suspense,{fallback:(0,s.jsx)(`div`,{children:`Loading...`}),children:(0,s.jsx)(c,{})})})]}),e[1]=n):n=e[1],n}export{l as default};
|