@mahameru/cli 0.0.25 → 0.0.27
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 +164 -152
- 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.27 │
|
|
7
7
|
* │ Built: 2026 │
|
|
8
8
|
* │ │
|
|
9
9
|
* │ Copyright (c) Bintan <hello@bintvn.co> │
|
|
@@ -18,12 +18,12 @@ a.default)(s.default.cyan(" Checking environment...")).start(),{tscJsPath:g,tscA
|
|
|
18
18
|
l.ensureDevEnvironment)();try{r.text=s.default.cyan(" Starting build...\n"),await(0,d.deleteDirIfExists)(o),await(0,
|
|
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
|
-
f.
|
|
21
|
+
f.generateBarrelIndexFile)((0,c.join)(o,"types")),await(0,f.generateMahameruDts)((0,c.join)(e,"mahameru.d.ts"))
|
|
22
22
|
;const n="tsconfig.build.json",a=(0,c.join)(e,n),l=(0,c.join)(e,"tsconfig.json"),v=await(0,i.readFile)(l,"utf8")
|
|
23
|
-
;let
|
|
24
|
-
i.writeFile)(a,JSON.stringify(
|
|
25
|
-
const
|
|
26
|
-
d.deleteDirIfExists)(o),process.exit(
|
|
23
|
+
;let P=null;try{P=JSON.parse(v),P.compilerOptions.outDir=".mahameru",P.compilerOptions.rootDir="src",await(0,
|
|
24
|
+
i.writeFile)(a,JSON.stringify(P,null,2))}catch(e){console.error(`Error parsing ${l}: ${e}`),process.exit(1)}
|
|
25
|
+
const w=await(0,u.runNodeScript)(g,["--project",n],e);0!==w&&(r.fail(s.default.red(" Build failed!")),await(0,
|
|
26
|
+
d.deleteDirIfExists)(o),process.exit(w));const S=await(0,u.runNodeScript)(y,["--project",n],e)
|
|
27
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."))
|
|
@@ -31,8 +31,8 @@ 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)(
|
|
34
|
+
}catch{}const j=(0,c.join)(e,".env"),M=(0,c.join)(e,".env.development"),_=(0,c.join)(e,".env.production");(0,
|
|
35
|
+
m.existsSync)(j)&&await(0,i.copyFile)(j,(0,c.join)(o,".env")),(0,m.existsSync)(_)?await(0,i.copyFile)(_,(0,
|
|
36
36
|
c.join)(o,".env.production")):(0,m.existsSync)(M)&&await(0,i.copyFile)(M,(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),
|
|
@@ -139,15 +139,20 @@ t.generateRouteTypes=async function(e,t){const o=[];await async function e(t,a="
|
|
|
139
139
|
n.stat)(i)).isDirectory()?await e(i,`${a}/${r}`):"route.ts"!==r&&"route.js"!==r||o.push(""===a?"/":a)}}(e)
|
|
140
140
|
;const a=`// Do not edit this file, it is generated by MahameruJS\n\nimport { RouteObject } from 'mahameru';\n\ntype MahameruGeneratedRoutes = ${o.map(e=>`'${e}'`).join(" | ")||"string"};\n\ndeclare module 'mahameru' {\n\texport interface RegisterRoutes {\n\t\troutes: MahameruGeneratedRoutes | RouteObject<MahameruGeneratedRoutes>;\n\t}\n}\n`
|
|
141
141
|
;await(0,n.mkdir)((0,s.dirname)(t),{recursive:!0}),await(0,n.writeFile)(t,a.trim(),"utf-8")},
|
|
142
|
-
t.generateDataSourceTypes=async function(e,t){const o=[];if((0,r.existsSync)(e))
|
|
143
|
-
;for(const
|
|
144
|
-
|
|
145
|
-
;
|
|
146
|
-
|
|
147
|
-
n.
|
|
142
|
+
t.generateDataSourceTypes=async function(e,t){const o=[];if(!(0,r.existsSync)(e))return(0,r.existsSync)(t)?void await(0,
|
|
143
|
+
n.rm)(t,{force:!0}):void 0;const a=await(0,n.readdir)(e);for(const t of a){const r=(0,s.join)(e,t);(await(0,
|
|
144
|
+
n.stat)(r)).isDirectory()&&o.push(t)}if(!(o.length>0))return
|
|
145
|
+
;const i=`// Do not edit this file, it is generated by MahameruJS\n\nimport type { DataSource } from "typeorm";\n\ndeclare module 'mahameru' {\n\texport interface DataSources {\n${o.map(e=>`\t\t${e}: DataSource;`).join("\n")}\n\t}\n\n\texport interface PreInitContext {\n\t\tdataSources: DataSources;\n\t}\n}\n`
|
|
146
|
+
;await(0,n.mkdir)((0,s.dirname)(t),{recursive:!0}),await(0,n.writeFile)(t,i.trim(),"utf-8")},
|
|
147
|
+
t.generateBarrelIndexFile=async function(e){try{const t=(await(0,n.readdir)(e)).map(async t=>{
|
|
148
|
+
if("index.d.ts"===t||"index.ts"===t||"index.js"===t)return null;const o=(0,s.join)(e,t);if((await(0,
|
|
149
|
+
n.stat)(o)).isDirectory()||t.endsWith(".ts")||t.endsWith(".js")){return`export * from './${(0,s.parse)(t).name}'`}
|
|
150
|
+
return null}),o=(await Promise.all(t)).filter(e=>null!==e).join("\n")+"\n",r=(0,s.join)(e,"index.d.ts");await(0,
|
|
151
|
+
n.writeFile)(r,o,"utf-8")}catch(e){console.error("Failed to create index.d.ts:",e)}},
|
|
148
152
|
t.generateMahameruDts=async function(e){
|
|
149
153
|
await(0,n.writeFile)(e,'/// <reference path="./.mahameru/types/index.d.ts" />\n\n// Do not edit this file, it is generated by MahameruJS\n',"utf-8")
|
|
150
|
-
;try{const e=(0,s.join)(process.cwd(),"tsconfig.json")
|
|
154
|
+
;try{const e=(0,s.join)(process.cwd(),"tsconfig.json")
|
|
155
|
+
;if(!(0,r.existsSync)(e))throw new Error("tsconfig.json not found");const t=JSON.parse(await(0,n.readFile)(e,"utf-8"))
|
|
151
156
|
;void 0===t.include?t.include=["mahameru.d.ts"]:t.include.includes("mahameru.d.ts")||t.include.push("mahameru.d.ts"),
|
|
152
157
|
await(0,n.writeFile)(e,JSON.stringify(t,null,2),"utf-8")}catch(e){console.error(e)}};const r=o(3024),n=o(1455),s=o(6760)
|
|
153
158
|
},1785(e,t,o){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
@@ -162,59 +167,59 @@ return new Promise((n,s)=>{const a=(0,r.spawn)(process.execPath,[e,...t],{stdio:
|
|
|
162
167
|
var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
163
168
|
;Object.defineProperty(t,"__esModule",{value:!0
|
|
164
169
|
}),t.startWatchedDevServer=async function({environment:e,host:t,port:o,version:r}){
|
|
165
|
-
let u,M=null,
|
|
170
|
+
let u,M=null,_=!1,x=null,E=!1,A=!0,T=!1,b=0;const D=new Set,O=new Set;await(0,p.generateRouteTypes)((0,
|
|
166
171
|
a.join)(m,"src","routes"),(0,a.join)(h,"types","routes.d.ts")),await(0,p.generateDataSourceTypes)((0,
|
|
167
|
-
a.join)(m,"src","databases"),(0,a.join)(h,"types","dataSources.d.ts")),await(0,p.
|
|
168
|
-
a.join)(h,"types"
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
M=await async function({environment:e,spinner:t,onBuildStart:o,onBuildSuccess:r,onBuildFailure:i}){
|
|
172
|
-
|
|
173
|
-
a.join)(m,"node_modules","typescript")),{createWatchCompilerHost:d,createWatchProgram:u,formatDiagnosticsWithColorAndContext:p,formatDiagnostic:
|
|
174
|
-
getCanonicalFileName:e=>e,getCurrentDirectory:()=>m,getNewLine:()=>S.newLine};let x=!1,E=!1,
|
|
175
|
-
;const
|
|
176
|
-
},S,M,e=>{E=!0;const t=e.file?p([e],
|
|
172
|
+
a.join)(m,"src","databases"),(0,a.join)(h,"types","dataSources.d.ts")),await(0,p.generateBarrelIndexFile)((0,
|
|
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 R=(0,i.default)({text:`${c.default.cyan("[Mahameru]")} Starting TypeScript watch...`,spinner:"triangle"
|
|
175
|
+
}).start(),k={dev:!0,host:t,port:o,rootPath:m}
|
|
176
|
+
;u=new d.App(k),M=await async function({environment:e,spinner:t,onBuildStart:o,onBuildSuccess:r,onBuildFailure:i}){
|
|
177
|
+
const l=(0,
|
|
178
|
+
a.resolve)((0,a.join)(m,"node_modules","typescript")),{createWatchCompilerHost:d,createWatchProgram:u,formatDiagnosticsWithColorAndContext:p,formatDiagnostic:P,sys:S,createEmitAndSemanticDiagnosticsBuilderProgram:M}=f(l),_={
|
|
179
|
+
getCanonicalFileName:e=>e,getCurrentDirectory:()=>m,getNewLine:()=>S.newLine};let x=!1,E=!1,A=0
|
|
180
|
+
;const T=new Map,b=new Map;let D,O,R=Promise.resolve();const k=new Promise((e,t)=>{D=e,O=t}),C=d(v,{rootDir:y,outDir:h
|
|
181
|
+
},S,M,e=>{E=!0;const t=e.file?p([e],_):P(e,_);process.stderr.write(t.endsWith("\n")?t:`${t}\n`)},e=>{
|
|
177
182
|
const t=e.messageText.toString().trim();(function(e){
|
|
178
183
|
return e.includes("Starting compilation in watch mode...")||e.includes("File change detected. Starting incremental compilation...")
|
|
179
|
-
})(t)&&(
|
|
184
|
+
})(t)&&(A+=1,T.set(A,Date.now()),b.set(A,{emittedRuntimeFiles:new Set,changedRuntimeSourceFiles:new Set}),E=!1,o()),
|
|
180
185
|
function(e){
|
|
181
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))
|
|
182
|
-
}(t)||console.log(`${c.default.yellow("[Mahameru TSC]")} ${t}`)}),
|
|
183
|
-
const t=$((0,a.resolve)(e));return t===
|
|
184
|
-
;
|
|
187
|
+
}(t)||console.log(`${c.default.yellow("[Mahameru TSC]")} ${t}`)}),I=$((0,a.resolve)((0,a.join)(h,"types"))),F=e=>{
|
|
188
|
+
const t=$((0,a.resolve)(e));return t===I||t.startsWith(`${I}/`)},N=C.watchFile?.bind(C)
|
|
189
|
+
;N&&(C.watchFile=(e,t,o,r)=>F(e)?{close(){}}:N(e,t,o,r));const H=C.watchDirectory?.bind(C)
|
|
185
190
|
;H&&(C.watchDirectory=(e,t,o,r)=>F(e)?{close(){}}:H(e,t,o,r));const W=C,J=W.writeFile?.bind(W)??S.writeFile.bind(S)
|
|
186
|
-
;W.writeFile=(e,t,o,r,n,s)=>{J?.(e,t,o,r,n,s),q(e,n)};const
|
|
187
|
-
;const t=0===
|
|
188
|
-
console.error(c.default.red("[Mahameru Dev] Build lifecycle failed.")),console.error(e)})};const
|
|
189
|
-
;async function B(e,o){const l=
|
|
191
|
+
;W.writeFile=(e,t,o,r,n,s)=>{J?.(e,t,o,r,n,s),q(e,n)};const L=C.afterProgramCreate;C.afterProgramCreate=e=>{L?.(e)
|
|
192
|
+
;const t=0===A?1:A;A=t,R=R.then(()=>B(e,t)).catch(e=>{
|
|
193
|
+
console.error(c.default.red("[Mahameru Dev] Build lifecycle failed.")),console.error(e)})};const U=u(C)
|
|
194
|
+
;async function B(e,o){const l=T.get(o)??Date.now(),d=b.get(o)??{emittedRuntimeFiles:new Set,
|
|
190
195
|
changedRuntimeSourceFiles:new Set}
|
|
191
196
|
;if(E)return x||(x=!0,t.fail(`${c.default.red("[Mahameru]")} Initial TypeScript build failed.`),
|
|
192
|
-
O(new Error("Initial TypeScript build failed."))),b.delete(o),
|
|
193
|
-
if(0===e.length)return;const t=await async function(){if(!
|
|
194
|
-
a.join)(__dirname,"node_modules","tsc-alias")),{prepareSingleFileReplaceTscAliasPaths:t}=f(e);
|
|
195
|
-
})}return
|
|
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(!w){const e=(0,a.resolve)((0,
|
|
199
|
+
a.join)(__dirname,"node_modules","tsc-alias")),{prepareSingleFileReplaceTscAliasPaths:t}=f(e);w=t({configFile:v,outDir:h
|
|
200
|
+
})}return w}();for(const o of e){if(!(0,n.existsSync)(o))continue;const e=await(0,s.readFile)(o,"utf8"),r=t({
|
|
196
201
|
fileContents:e,filePath:o});r!==e&&await(0,s.writeFile)(o,r)}}([...d.emittedRuntimeFiles]);else{
|
|
197
|
-
await async function(e=3e4){const t=Date.now();for(;Date.now()-t<e;){if((0,n.existsSync)(g))return void await
|
|
198
|
-
;await
|
|
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,
|
|
199
204
|
a.join)(__dirname,"node_modules","tsc-alias")),{replaceTscAliasPaths:t}=f(e);await t({configFile:v,outDir:h})}}catch(e){
|
|
200
205
|
return console.error(c.default.red("[Mahameru Alias] Alias rewrite failed.")),console.error(e),x||(x=!0,
|
|
201
206
|
t.fail(`${c.default.red("[Mahameru]")} Initial alias rewrite failed.`),O(e instanceof Error?e:new Error(String(e)))),
|
|
202
|
-
b.delete(o),
|
|
207
|
+
b.delete(o),T.delete(o),void i()}const u=Date.now()-l;try{await r({durationMs:u,
|
|
203
208
|
emittedRuntimeFiles:[...d.emittedRuntimeFiles],changedRuntimeSourceFiles:[...d.changedRuntimeSourceFiles],
|
|
204
209
|
initialBuild:!x})}catch(e){return console.error(c.default.red("[Mahameru Alias] Alias rewrite failed.")),
|
|
205
|
-
console.error(e),void i()}finally{b.delete(o),
|
|
206
|
-
a.resolve)(e),r=$(o),n=b.get(
|
|
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
|
+
a.resolve)(e),r=$(o),n=b.get(A);if(n&&function(e){const t=`${$((0,a.resolve)(g))}/`
|
|
207
212
|
;return e.startsWith(t)&&e.endsWith(".js")&&!e.endsWith(".d.ts")&&!e.endsWith(".map")}(r)){n.emittedRuntimeFiles.add(o)
|
|
208
213
|
;for(const e of function(e){if(!e)return[];const t=`${$((0,a.resolve)(y))}/`;return e.map(e=>(0,
|
|
209
214
|
a.resolve)(e.fileName)).filter(e=>{const o=$(e);return o.startsWith(t)&&o.endsWith(".ts")&&!o.endsWith(".d.ts")})
|
|
210
|
-
}(t))n.changedRuntimeSourceFiles.add(e)}}try{return await k,
|
|
211
|
-
onBuildStart:()=>{
|
|
212
|
-
onBuildSuccess:({durationMs:e,emittedRuntimeFiles:t,changedRuntimeSourceFiles:o,initialBuild:r})=>{if(b=e,
|
|
213
|
-
for(const e of t)D.add(e);for(const e of o)O.add(e)}
|
|
214
|
-
|
|
215
|
+
}(t))n.changedRuntimeSourceFiles.add(e)}}try{return await k,U}catch(e){throw U.close(),e}}({environment:e,spinner:R,
|
|
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||_||(E||T||0!==D.size)&&N()},onBuildFailure:()=>{
|
|
219
|
+
A=!1,b=0,T=!1,D.clear(),O.clear(),x&&(clearTimeout(x),x=null)}
|
|
215
220
|
}),R.succeed(`${c.default.green("[Mahameru]")} Initial build completed.\n`),await u.start()
|
|
216
|
-
;const C=new l.Watchman([h,
|
|
217
|
-
x=setTimeout(()=>{F=F.then(async()=>{if(
|
|
221
|
+
;const C=new l.Watchman([h,P]),I=new l.Watchman(y);let F=Promise.resolve();const N=()=>{x&&clearTimeout(x),
|
|
222
|
+
x=setTimeout(()=>{F=F.then(async()=>{if(_||!u)return;if(A)return void N();const e=[...D],t=[...O],o=T,r=E;if(E=!1,T=!1,
|
|
218
223
|
D.clear(),
|
|
219
224
|
O.clear(),x=null,r)return console.log(c.default.yellow("\n [Mahameru] Config file changed. Reloading server...\n")),
|
|
220
225
|
await u.stop(),u=new d.App(k),console.clear(),void await u.start();if(0===e.length&&!o)return
|
|
@@ -223,24 +228,24 @@ await u.stop(),u=new d.App(k),console.clear(),void await u.start();if(0===e.leng
|
|
|
223
228
|
a.relative)(m,s).replace(/\\/g,"/")} build: ${b}ms runtime: ${l}ms total: ${p}ms`)}).catch(e=>{
|
|
224
229
|
console.error(c.default.red("[Mahameru Dev] Hot reload failed.")),console.error(e)})},250)}
|
|
225
230
|
;C.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,
|
|
226
|
-
a.resolve)(g)),s=$((0,a.resolve)(
|
|
231
|
+
a.resolve)(g)),s=$((0,a.resolve)(P));if(!o.startsWith(`${r}/`)&&o!==s)return null
|
|
227
232
|
;if(o.endsWith(".d.ts")||o.endsWith(".map")||o.endsWith(".tsbuildinfo"))return null;if(o===s)return"config"
|
|
228
233
|
;if(!o.endsWith(".js"))return null;if(o.startsWith(`${n}/`))return"runtime";return null}(t)
|
|
229
|
-
;o&&("runtime"===o&&"delete"!==e&&"rename"!==e||((e,t)=>{"config"===e?E=!0:(D.add(t),O.add(S(t))),
|
|
230
|
-
|
|
234
|
+
;o&&("runtime"===o&&"delete"!==e&&"rename"!==e||((e,t)=>{"config"===e?E=!0:(D.add(t),O.add(S(t))),A||N()})(o,t))}),
|
|
235
|
+
I.on("all",async({event:e,filePath:t,oldFilePath:o})=>{if("delete"!==e&&"rename"!==e)return;const r="rename"===e&&o?o:t
|
|
231
236
|
;(function(e){const t=`${$((0,a.resolve)(y))}/`;return $((0,a.resolve)(e)).startsWith(t)})(r)&&(await async function(e){
|
|
232
237
|
const t=(0,a.resolve)(e),o=(0,a.relative)(y,t);if(o.startsWith(".."))return;if(/\.[^\\/]+$/.test(o)){
|
|
233
238
|
const e=function(e){const t=(0,a.relative)(y,e);return(0,a.resolve)(g,t.replace(/\.ts$/i,".js"))}(t)
|
|
234
239
|
;return void await Promise.all([(0,s.rm)(e,{force:!0}).catch(()=>{}),(0,s.rm)(`${e}.map`,{force:!0}).catch(()=>{}),(0,
|
|
235
240
|
s.rm)(e.replace(/\.js$/i,".d.ts"),{force:!0}).catch(()=>{}),(0,s.rm)(e.replace(/\.js$/i,".d.ts.map"),{force:!0
|
|
236
|
-
}).catch(()=>{})])}await(0,s.rm)((0,a.resolve)(g,o),{recursive:!0,force:!0}).catch(()=>{})}(r),
|
|
237
|
-
a.resolve)(r)),
|
|
238
|
-
C.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||N())}),await C.start(),await I.start();const H=async(e=0)=>{_||(_=!0,x&&(clearTimeout(x),x=null),
|
|
243
|
+
C.stop(),I.stop(),await u.stop(),M?.close(),process.exit(e))};process.once("SIGINT",()=>{H(0)}),
|
|
239
244
|
process.once("SIGTERM",()=>{H(0)}),await new Promise(()=>{})}
|
|
240
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,
|
|
241
246
|
u.createRequire)(__filename),m=process.cwd(),h=(0,a.join)(m,".mahameru"),g=h,y=(0,a.join)(m,"src"),v=(0,
|
|
242
|
-
a.join)(m,"tsconfig.json"),
|
|
243
|
-
;return(0,a.resolve)(y,t.replace(/\.js$/i,".ts"))}function $(e){return e.replace(/\\/g,"/")}function
|
|
247
|
+
a.join)(m,"tsconfig.json"),P=(0,a.join)(m,"mahameru.config.ts");let w=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){
|
|
244
249
|
return new Promise(t=>{setTimeout(t,e)})}},5775(e,t,o){t.deleteDirIfExists=async function(e){return await(0,r.rm)(e,{
|
|
245
250
|
recursive:!0,force:!0})},t.parsePort=function(e){const t=parseInt(e,10);return isNaN(t)?void 0:t}
|
|
246
251
|
;const r=o(1455),n=o(8161)},6469(e,t,o){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{
|
|
@@ -287,9 +292,9 @@ process.exit(1));const g=await(0,l.getProjectJson)(o);if(!(0,p.existsSync)((0,f.
|
|
|
287
292
|
p.existsSync)((0,f.join)(o,"package-lock.json"))){const e=(0,c.default)("Installing dependencies...").start();(0,
|
|
288
293
|
m.execSync)("npm install",{stdio:"inherit",cwd:o}),e.succeed(s.default.green("\nDependencies installed."))}const y=(0,
|
|
289
294
|
c.default)("Checking available port...").start(),v=await(0,i.freePortFinder)(r)
|
|
290
|
-
;y.text="Connecting to MahameruJS PM Daemon...";const
|
|
291
|
-
|
|
292
|
-
projectRoot:o,port:v,host:h}}))});
|
|
295
|
+
;y.text="Connecting to MahameruJS PM Daemon...";const P=n.default.createConnection({path:u.IPC_SOCKET_PATH},()=>{
|
|
296
|
+
P.write(JSON.stringify({command:"FORK_PROJECT",payload:{name:g.name,description:g.description,version:g.version,
|
|
297
|
+
projectRoot:o,port:v,host:h}}))});P.on("data",e=>{
|
|
293
298
|
const t=JSON.parse(e.toString()),{success:o,message:r,data:n,mpmUrl:a}=t
|
|
294
299
|
;o?(!function({name:e,version:t,mode:o,host:r,port:n,pid:a,mpmUrl:i}){
|
|
295
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}`)}`]
|
|
@@ -297,8 +302,8 @@ const c=[`${s.default.bold("App:")} ${s.default.cyan(e)}`,`${s.default.bold
|
|
|
297
302
|
c.forEach(e=>console.log(` ${e}`)),
|
|
298
303
|
console.log(`\n${s.default.dim("Use `mahameru status` to inspect this managed project.")}\n`)}({name:g.name,
|
|
299
304
|
version:g.version,mode:"production",host:n.host,port:n.port,pid:n.pid,mpmUrl:a}),
|
|
300
|
-
y.succeed(s.default.green(`\n${r}`))):(y.fail(s.default.red("Failed to start project!")),console.error(t)),
|
|
301
|
-
process.exit(0)}),
|
|
305
|
+
y.succeed(s.default.green(`\n${r}`))):(y.fail(s.default.red("Failed to start project!")),console.error(t)),P.end(),
|
|
306
|
+
process.exit(0)}),P.on("error",e=>{
|
|
302
307
|
"ENOENT"===e.code||"ECONNREFUSED"===e.code?y.fail(s.default.red(`\nMahameru PM Daemon is not running.\nCannot connect to Mahameru PM Daemon. Make sure you run ${s.default.bold("mahameru pm service install")} first.`)):"win32"===process.platform&&"EPERM"===e.code?function(e,t){
|
|
303
308
|
if(!(0,d.hasWindowsElevationRetry)()&&!(0,d.isWindowsProcessElevated)()){
|
|
304
309
|
e.warn(s.default.yellow("\nWindows blocked access to the Mahameru PM pipe. Requesting Administrator approval..."))
|
|
@@ -468,17 +473,17 @@ s.execSync)(`sc stop "${e}"`)}catch(e){}
|
|
|
468
473
|
console.error(c.default.red("❌ Uninstallation failed:"),e.message)}}},8625(e,t,o){
|
|
469
474
|
var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
470
475
|
;Object.defineProperty(t,"__esModule",{value:!0})
|
|
471
|
-
;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),v=o(2074),
|
|
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),v=o(2074),P=new n.Command
|
|
472
477
|
;(async()=>{try{const e=process.cwd(),t="mahameru-pm"
|
|
473
|
-
;
|
|
474
|
-
|
|
475
|
-
i.dev)({version:a.version})),
|
|
478
|
+
;P.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
|
+
P.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})),P.command("build").description("Build MahameruJS production application.").action((0,
|
|
476
481
|
c.build)({rootPath:e
|
|
477
|
-
})),
|
|
478
|
-
g.startFork)({rootPath:e})),
|
|
479
|
-
v.stopFork)(e,a.version)),
|
|
482
|
+
})),P.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})),P.command("stop").description("Stop MahameruJS production server.").action((0,
|
|
484
|
+
v.stopFork)(e,a.version)),P.command("status").description("View MahameruJS production server status.").action((0,
|
|
480
485
|
y.projectStatus)(e,a.version))
|
|
481
|
-
;const o=
|
|
486
|
+
;const o=P.command("pm").description(`${s.default.bold(s.default.cyan("▲ MahameruJS"))} ${s.default.dim(`Process Manager v${a.version}`)}`)
|
|
482
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,
|
|
483
488
|
u.pm)(a.version)),
|
|
484
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(()=>{
|
|
@@ -494,7 +499,7 @@ p.uninstall)(t)),r.command("start").description("Start MahameruJS Process Manage
|
|
|
494
499
|
f.startService)(t)),
|
|
495
500
|
r.command("stop").description("Stop MahameruJS Process Manager service.").option("-g, --graceful","Gracefully stop the service.",!1).action((0,
|
|
496
501
|
m.stopService)(t)),r.command("status").description("Get MahameruJS Process Manager status.").action((0,
|
|
497
|
-
h.status)(t,a.version)),await
|
|
502
|
+
h.status)(t,a.version)),await P.parseAsync(process.argv)}catch(e){console.error(e),process.exit(1)}})()},6921(e,t,o){
|
|
498
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;const r=o(6760)
|
|
499
504
|
;"darwin"===process.platform||"win32"===process.platform||process.platform,t.IS_WINDOWS="win32"===process.platform,
|
|
500
505
|
t.vL="darwin"===process.platform,t.ig="linux"===process.platform,t.Ds="mahameru",t.APPDATA_PATH=(()=>{
|
|
@@ -518,101 +523,107 @@ return r=Object.getOwnPropertyNames||function(e){var t=[]
|
|
|
518
523
|
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])
|
|
519
524
|
;return s(t,e),t}),i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
520
525
|
;Object.defineProperty(t,"__esModule",{value:!0}),t.processManager=void 0
|
|
521
|
-
;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),v=a(o(3024)),
|
|
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),v=a(o(3024)),P=o(4437),w=(0,
|
|
522
527
|
d.join)(__dirname,"mpm"),S={".html":"text/html",".css":"text/css",".js":"text/javascript",".json":"application/json",
|
|
523
528
|
".png":"image/png",".jpg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon"}
|
|
524
|
-
;t.processManager=async({host:e,port:t,daemon:r,cert:n,key:s},a)=>{try{const
|
|
525
|
-
if(t.setHeader("Access-Control-Allow-Origin","*"),
|
|
529
|
+
;t.processManager=async({host:e,port:t,daemon:r,cert:n,key:s},a)=>{try{let i=!1;const $=await(0,h.loadProjects)();(0,
|
|
530
|
+
h.setProjects)($);const j=await(0,y.freePortFinder)(t),M=(e,t)=>{if(t.setHeader("Access-Control-Allow-Origin","*"),
|
|
526
531
|
t.setHeader("Access-Control-Allow-Methods","GET, POST, PUT, DELETE, OPTIONS"),
|
|
527
532
|
t.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),t.setHeader("X-Powered-By","MahameruJS"),
|
|
528
533
|
"OPTIONS"===e.method)return t.writeHead(204),t.end();if("/api/process"===e.url&&"GET"===e.method){t.writeHead(200,{
|
|
529
534
|
"Content-Type":"application/json"});const e=(0,h.getProjects)().map(g.parseProject);return t.end(JSON.stringify(e))}
|
|
530
|
-
if("GET"===e.method){const o="/"===e.url?"/index.html":e.url;let r=(0,d.join)(
|
|
531
|
-
;return r.startsWith(
|
|
535
|
+
if("GET"===e.method){const o="/"===e.url?"/index.html":e.url;let r=(0,d.join)(w,o)
|
|
536
|
+
;return r.startsWith(w)?void v.default.access(r,v.default.constants.F_OK,e=>{if(!e){const e=(0,
|
|
532
537
|
d.extname)(r).toLowerCase(),o=S[e]||"application/octet-stream";return t.writeHead(200,{"Content-Type":o}),
|
|
533
|
-
v.default.createReadStream(r).pipe(t)}{const e=(0,d.join)(
|
|
538
|
+
v.default.createReadStream(r).pipe(t)}{const e=(0,d.join)(w,"index.html")
|
|
534
539
|
;v.default.access(e,v.default.constants.F_OK,o=>o?(t.writeHead(404,{"Content-Type":"text/html"}),
|
|
535
540
|
t.end("<h1>404 - Frontend Build Not Found</h1>")):(t.writeHead(200,{"Content-Type":"text/html"}),
|
|
536
541
|
v.default.createReadStream(e).pipe(t)))}}):(t.writeHead(403,{"Content-Type":"text/plain"}),t.end("Forbidden"))}
|
|
537
542
|
return t.writeHead(404,{"Content-Type":"text/html"}),t.end("<h1>404 Not Found</h1>")
|
|
538
|
-
},_=()=>console.log("[MPM] HTTP server closed."),
|
|
543
|
+
},_=()=>console.log("[MPM] HTTP server closed."),x=e=>console.log("[MPM] HTTP server error:",e),E=async()=>{
|
|
539
544
|
process.send||r||(console.clear(),
|
|
540
545
|
console.log(`${c.default.bold(c.default.cyan("▲ Mahameru"))} ${c.default.dim(`Process Manager v${a}`)}\n`)),
|
|
541
546
|
console.log(`Server listening on host ${e} and port ${t}.`),
|
|
542
|
-
process.send||r||console.log(` ${c.default.bold(c.default.green("PID"))}: ${process.pid}\n ${c.default.bold(c.default.green("URL"))}: ${
|
|
543
|
-
;
|
|
544
|
-
f.createServer)({cert:v.default.readFileSync(n),
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
const o
|
|
548
|
-
;console.
|
|
547
|
+
process.send||r||console.log(` ${c.default.bold(c.default.green("PID"))}: ${process.pid}\n ${c.default.bold(c.default.green("URL"))}: ${A?"https":"http"}://${e}:${t}\n${c.default.bold(c.default.green("API Endpoint"))}: ${A?"https":"http"}://${e}:${t}/api/process\n\n${c.default.dim("Press Ctrl+C to stop the server")}\n`)
|
|
548
|
+
;for(const e of $)e.isLastStatusIsRunning&&(console.log(`[MPM] Starting project ${e.name}`),await B(e),
|
|
549
|
+
console.log(`[MPM] Project ${e.name} started`))},A=n&&s,T=n&&s?(0,f.createServer)({cert:v.default.readFileSync(n),
|
|
550
|
+
key:v.default.readFileSync(s)
|
|
551
|
+
},M).on("close",_).on("error",x).listen(j,e,E):(0,p.createServer)(M).on("close",_).on("error",x).listen(j,e,E)
|
|
552
|
+
;if(!m.IS_WINDOWS){const e=o(9896);e.existsSync(m.IPC_SOCKET_PATH)&&e.unlinkSync(m.IPC_SOCKET_PATH)}const b=e=>t=>{
|
|
553
|
+
const o=t.toString().trim();console.log(`[${e}] ${o}`)},D=e=>t=>{const o=t.toString().trim()
|
|
554
|
+
;console.error(`[${e} ERROR] ${o}`)},O=(o,r,n)=>({type:s,data:a})=>{if(o)if("ERROR"===s)o.write(JSON.stringify({
|
|
549
555
|
success:!1,message:a
|
|
550
556
|
}));else if("READY"===s)console.log(`[MPM] Project${r} successfully started by PM Daemon (PID: ${n.pid})`),
|
|
551
557
|
o.write(JSON.stringify({success:!0,message:`Project ${r} successfully started by PM Daemon (PID: ${n.pid})`,data:a,
|
|
552
|
-
mpmUrl:`http://${e}:${t}`}));else if("PROCESS_USAGE"===s){const e=(0,h.getProject)(r);e&&
|
|
553
|
-
project:(0,g.parseProject)(e)})}},
|
|
554
|
-
data:e}),
|
|
555
|
-
console.log(`[MPM] ${e}`)},
|
|
558
|
+
mpmUrl:`http://${e}:${t}`}));else if("PROCESS_USAGE"===s){const e=(0,h.getProject)(r);e&&K.emit("process-usage",{data:a,
|
|
559
|
+
project:(0,g.parseProject)(e)})}},R=e=>t=>{console.log(`[MPM] Project ${e} errored: ${t.message}`)},k=e=>({success:!0,
|
|
560
|
+
data:e}),C=e=>({success:!1,error:e}),I=e=>(0,g.parseProject)(e),F=()=>(0,h.getProjects)().map(g.parseProject),N=e=>{
|
|
561
|
+
console.log(`[MPM] ${e}`)},H=()=>{K.emit("projects",F())},W=e=>{
|
|
556
562
|
const t=(0,d.join)(e.rootPath,"node_modules","mahameru","server.js")
|
|
557
563
|
;if(!(0,v.existsSync)(t))throw new Error(`Mahameru package is not installed in ${e.rootPath} project. Please install it by running: npm install mahameru`)
|
|
558
|
-
;return t},
|
|
564
|
+
;return t},J=e=>({MAHAMERU__SEND_PROCESS_USAGE_INTERVAL:"3000",MAHAMERU__ROOT_PATH:e.rootPath,
|
|
559
565
|
MAHAMERU__MODE:"production",...e.host?{MAHAMERU__HTTP_LISTEN_HOST:e.host}:{},...e.port?{
|
|
560
|
-
MAHAMERU__HTTP_LISTEN_PORT:e.port.toString()}:{}}),
|
|
561
|
-
t.stderr?.on("data",
|
|
566
|
+
MAHAMERU__HTTP_LISTEN_PORT:e.port.toString()}:{}}),L=(e,t,o=null)=>{t.stdout?.on("data",b(e.name)),
|
|
567
|
+
t.stderr?.on("data",D(e.name)),t.on("message",O(o,e.name,t)),t.on("error",R(e.name)),t.once("exit",o=>{e.child===t&&(0,
|
|
562
568
|
h.getProject)(e.name)&&(e.status=0===o||null===o?"stopped":"errored",e.pid=void 0,e.child=void 0,
|
|
563
|
-
|
|
564
|
-
};e.on("message",r)}),
|
|
565
|
-
l.fork)(n,[],{cwd:e.rootPath,env:{...process.env,...
|
|
566
|
-
e.pid=a.pid,e.child=a,(0,h.setProject)(e),
|
|
569
|
+
K.emit("project-update",I(e)),H())})},U=(e,t)=>new Promise(o=>{const r=n=>{t.includes(n.type)&&(e.off("message",r),o(n))
|
|
570
|
+
};e.on("message",r)}),B=(e,t=null)=>new Promise((o,r)=>{let n=!1;const s=e=>{n||(n=!0,e())};try{const n=W(e),a=(0,
|
|
571
|
+
l.fork)(n,[],{cwd:e.rootPath,env:{...process.env,...J(e)},stdio:["inherit","pipe","pipe","ipc"]});e.status="stopped",
|
|
572
|
+
e.pid=a.pid,e.child=a,(0,h.setProject)(e),L(e,a,t),U(a,["READY","ERROR"]).then(({type:t,data:n})=>{"READY"===t?s(()=>{
|
|
567
573
|
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(()=>{
|
|
568
574
|
r(`[MPM] ${n.message}`)})}),a.once("error",t=>{s(()=>{e.status="errored",e.pid=void 0,e.child=void 0,(0,
|
|
569
575
|
h.setProject)(e),r(t)})}),a.once("exit",t=>{s(()=>{e.status=0===t||null===t?"stopped":"errored",e.pid=void 0,
|
|
570
576
|
e.child=void 0,
|
|
571
577
|
(0,h.setProject)(e),r(new Error(`Project ${e.name} exited before ready${"number"==typeof t?` with code ${t}`:""}`))})})
|
|
572
|
-
}catch(t){s(()=>{e.status="errored",e.pid=void 0,e.child=void 0,(0,h.setProject)(e),r(t)})}}),
|
|
573
|
-
if(
|
|
574
|
-
n||(n=!0,e())};
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
e.child=void 0,
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
;if(!t)throw N(`Delete aborted. Project "${e}" not found`),new Error("Project not found");const o=
|
|
581
|
-
;t.child?(N(`Project "${e}" is running. Stopping before delete`),await
|
|
578
|
+
}catch(t){s(()=>{e.status="errored",e.pid=void 0,e.child=void 0,(0,h.setProject)(e),r(t)})}}),q=e=>new Promise((t,o)=>{
|
|
579
|
+
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())};U(r,["SHUTDOWN_DONE"]).then(({type:o})=>{
|
|
581
|
+
"SHUTDOWN_DONE"===o&&s(()=>{e.status="stopped",e.pid=void 0,e.child=void 0,(0,h.setProject)(e),t(e)})}),
|
|
582
|
+
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
|
+
s(()=>{e.status=0===r||null===r?"stopped":"errored",e.pid=void 0,e.child=void 0,(0,h.setProject)(e),
|
|
584
|
+
0!==r&&null!==r?o(new Error(`Project ${e.name} exited during shutdown with code ${r}`)):t(e)})}),r.send({type:"SHUTDOWN"
|
|
585
|
+
})}),z=async e=>{N(`Delete requested for project "${e}"`);const t=(0,h.getProject)(e)
|
|
586
|
+
;if(!t)throw N(`Delete aborted. Project "${e}" not found`),new Error("Project not found");const o=I(t)
|
|
587
|
+
;t.child?(N(`Project "${e}" is running. Stopping before delete`),await q(t)):(t.status="stopped",t.pid=void 0,
|
|
582
588
|
t.child=void 0,(0,h.setProject)(t),N(`Project "${e}" already stopped. Proceeding to delete`));const r=(0,
|
|
583
|
-
h.getProject)(e),n=r?
|
|
589
|
+
h.getProject)(e),n=r?I(r):o;return N(`Deleting project "${e}" from registry`),(0,h.deleteProject)(e),
|
|
584
590
|
N(`Project "${e}" exists after delete: ${(0,h.getProject)(e)?"true":"false"}`),N(`Emitting project-delete for "${e}"`),
|
|
585
|
-
|
|
591
|
+
K.emit("project-delete",n),H(),n},G=u.default.createServer(e=>{e.on("data",t=>{try{const o=JSON.parse(t.toString())
|
|
586
592
|
;if("FORK_PROJECT"===o.command){const t=o.payload,{name:r,description:n,version:s,projectRoot:a,port:i,host:c}=t,l=(0,
|
|
587
593
|
h.getProject)(r);if(l&&"running"===l.status&&void 0!==l.child&&void 0!==l.pid)return void e.write(JSON.stringify({
|
|
588
594
|
status:"error",message:"Project already running"}));console.log(`[MPM] Starting project: ${r} (${a})`);const d={
|
|
589
595
|
pid:void 0,createdAt:l?.createdAt??(new Date).toISOString(),isDisabled:!1,name:r,mode:"production",description:n,
|
|
590
|
-
version:s,rootPath:a,host:c,port:i,status:"stopped"};(0,h.setProject)(d),
|
|
591
|
-
l?
|
|
596
|
+
version:s,rootPath:a,host:c,port:i,status:"stopped"};(0,h.setProject)(d),B(d,e).then(e=>{
|
|
597
|
+
l?K.emit("project-update",I(e)):K.emit("project-create",I(e)),H()}).catch(t=>{e.write(JSON.stringify({success:!1,
|
|
592
598
|
error:t.message}))})}else if("STOP"===o.command){const t=o.payload,r=(0,h.getProject)(t.name)
|
|
593
|
-
;if(!r)return void e.write(JSON.stringify({success:!1,error:"Project not found"}));
|
|
594
|
-
|
|
599
|
+
;if(!r)return void e.write(JSON.stringify({success:!1,error:"Project not found"}));q(r).then(t=>{
|
|
600
|
+
t.isLastStatusIsRunning=!1,(0,h.setProject)(t),K.emit("project-update",I(t)),H(),e.write(JSON.stringify(k(I(t))))
|
|
601
|
+
}).catch(t=>{e.write(JSON.stringify(C(t.message)))})
|
|
595
602
|
}else if("START"===o.command);else if("RESTART"===o.command);else if("STATUS"===o.command){const t=o.payload,r=(0,
|
|
596
603
|
h.getProject)(t.name);if(r){const{child:t,...o}=r;e.write(JSON.stringify({success:!0,data:o}))
|
|
597
604
|
}else e.write(JSON.stringify({success:!1,error:"Project not found"}))}}catch(t){e.write(JSON.stringify({success:!1,
|
|
598
|
-
error:t.message}))}})});
|
|
605
|
+
error:t.message}))}})});G.on("close",()=>{console.log("[MPM IPC SERVER] IPC Server closed")}),G.on("error",e=>{
|
|
599
606
|
"EADDRINUSE"===e.code?console.error(`[MPM IPC SERVER] IPC Server already running on ${m.IPC_SOCKET_PATH}`):console.error("[MPM IPC SERVER]",e),
|
|
600
|
-
process.exit(1)}),
|
|
601
|
-
console.log(`[MPM IPC SERVER] IPC Server listening on ${m.IPC_SOCKET_PATH}`)});const
|
|
602
|
-
},path:"/ws",serveClient:!1});
|
|
607
|
+
process.exit(1)}),G.listen(m.IPC_SOCKET_PATH,()=>{
|
|
608
|
+
console.log(`[MPM IPC SERVER] IPC Server listening on ${m.IPC_SOCKET_PATH}`)});const K=new P.Server(T,{cors:{origin:"*"
|
|
609
|
+
},path:"/ws",serveClient:!1});K.on("connection",e=>{(0,h.setSocket)(e);const t=(0,h.getProjects)().map(g.parseProject)
|
|
603
610
|
;e.emit("projects",t),e.on("getProjects",e=>e({success:!0,data:(0,h.getProjects)().map(g.parseProject)})),
|
|
604
611
|
e.on("start",(e,t)=>{const o=(0,h.getProject)(e)
|
|
605
|
-
;return o?o.child||"running"===o.status?t(
|
|
606
|
-
|
|
607
|
-
e.on("stop",(e,t)=>{const o=(0,h.getProject)(e);if(!o)return t(
|
|
608
|
-
|
|
609
|
-
N(`Socket event "${e}" received for project "${t}"`),
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
612
|
+
;return o?o.child||"running"===o.status?t(C(`Project ${e} is already running`)):void B(o).then(e=>{
|
|
613
|
+
K.emit("project-update",I(e)),H(),t(k(I(e)))}).catch(e=>{t(C(e.message))}):t(C("Project not found"))}),
|
|
614
|
+
e.on("stop",(e,t)=>{const o=(0,h.getProject)(e);if(!o)return t(C("Project not found"));q(o).then(async e=>{
|
|
615
|
+
e.isLastStatusIsRunning=!1,await(0,h.saveProjects)(e),K.emit("project-update",I(e)),H(),t(k(I(e)))}).catch(e=>{
|
|
616
|
+
t(C(e.message))})});const o=e=>(t,o)=>{N(`Socket event "${e}" received for project "${t}"`),z(t).then(e=>{
|
|
617
|
+
N(`Invoking delete callback for project "${t}"`),o(k(e))}).catch(e=>{
|
|
618
|
+
N(`Delete failed for project "${t}": ${e.message}`),o(C(e.message))})};e.on("delete",o("delete")),
|
|
619
|
+
e.on("remove",o("remove")),e.on("disconnect",()=>{(0,h.deleteSocket)(e.id)})});const V=async e=>{if(i)return;i=!0,
|
|
620
|
+
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 q(e);t.isLastStatusIsRunning=!0,
|
|
622
|
+
console.log(`[MPM] Project ${e.name} stopped`),(0,h.setProject)(t)}await(0,h.saveProjects)(),(0,
|
|
623
|
+
h.getSockets)().forEach(e=>e.disconnect()),K.close(),G.close(),T.close(e=>{e&&console.log("[MPM]",e),process.exit(0)})}
|
|
624
|
+
;process.on("SIGINT",V),process.on("SIGTERM",V)}catch(e){console.log("mpm error",e),process.exit(1)}}},7258(e,t,o){
|
|
625
|
+
Object.defineProperty(t,"__esModule",{value:!0
|
|
626
|
+
}),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
|
|
616
627
|
;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())
|
|
617
628
|
;t.getProject=e=>c.get(e);t.setProject=e=>(c.set(e.name,e),e);t.setProjects=e=>e.forEach(t.setProject)
|
|
618
629
|
;t.deleteProject=e=>c.delete(e);t.clearProjects=()=>c.clear();const l=new Map;t.getSockets=()=>Array.from(l.values())
|
|
@@ -620,29 +631,30 @@ t.saveProjects=t.loadProjects=t.clearSockets=t.deleteSocket=t.setSocket=t.getSoc
|
|
|
620
631
|
;t.loadProjects=async()=>{try{if((0,r.existsSync)((0,n.dirname)(a.PROJECTS_FILE_PATH))||await(0,s.mkdir)((0,
|
|
621
632
|
n.dirname)(a.PROJECTS_FILE_PATH),{recursive:!0}),!(0,r.existsSync)(a.PROJECTS_FILE_PATH))return await(0,
|
|
622
633
|
s.writeFile)(a.PROJECTS_FILE_PATH,"[]","utf-8"),[];const e=await(0,s.readFile)(a.PROJECTS_FILE_PATH,"utf-8")
|
|
623
|
-
;return JSON.parse(e)}catch(e){throw new Error("Failed to load projects")}};t.saveProjects=async
|
|
624
|
-
t.getProjects)().map(e
|
|
625
|
-
|
|
626
|
-
throw new Error("Failed to save projects")}}},7209(e,t,o){
|
|
627
|
-
return e&&e.__esModule?e:{default:e}}
|
|
628
|
-
t.freePortFinder=async function(e=3e3){let t=e;const o=e+999
|
|
629
|
-
throw new Error(`Port ${e} - 999 is not available`)},
|
|
630
|
-
const r=n.default.createServer();r.once("error",e=>{e.code,
|
|
631
|
-
r.listen(e,"127.0.0.1")})};const n=r(o(7030));function s(e){
|
|
632
|
-
;r.once("error",e=>{e.code,o(e)}),r.once("listening",()=>{
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
t.getNodeModulesPath=function(){try{
|
|
636
|
-
}).toString().trim()}catch(e){
|
|
637
|
-
;const r=o(1421)},4813(e,t,o){
|
|
638
|
-
n.join)(e,"
|
|
639
|
-
r.readFileSync)(t,"utf-8"),o=JSON.parse(e)
|
|
640
|
-
;const r=o(3024),n=o(6760)},6929(e,t){
|
|
641
|
-
|
|
642
|
-
port:e.port,host:e.host,status:e.status
|
|
643
|
-
},t
|
|
644
|
-
|
|
645
|
-
|
|
634
|
+
;return JSON.parse(e)}catch(e){throw new Error("Failed to load projects")}};t.saveProjects=async e=>{try{
|
|
635
|
+
e?Array.isArray(e)||((0,t.setProject)(e),e=(0,t.getProjects)().map(i.parseProject)):e=(0,
|
|
636
|
+
t.getProjects)().map(i.parseProject);const o=e.map(i.parseProject),r=JSON.stringify(o,null,2);await(0,
|
|
637
|
+
s.writeFile)(a.PROJECTS_FILE_PATH,r,"utf-8")}catch(e){throw new Error("Failed to save projects")}}},7209(e,t,o){
|
|
638
|
+
var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
639
|
+
;Object.defineProperty(t,"__esModule",{value:!0}),t.freePortFinder=async function(e=3e3){let t=e;const o=e+999
|
|
640
|
+
;for(;t<o;)try{return await s(t)}catch(e){t++}throw new Error(`Port ${e} - 999 is not available`)},
|
|
641
|
+
t.isPortAvailable=function(e){return new Promise((t,o)=>{const r=n.default.createServer();r.once("error",e=>{e.code,
|
|
642
|
+
o(!1)}),r.once("listening",()=>{r.close(()=>t(!0))}),r.listen(e,"127.0.0.1")})};const n=r(o(7030));function s(e){
|
|
643
|
+
return new Promise((t,o)=>{const r=n.default.createServer();r.once("error",e=>{e.code,o(e)}),r.once("listening",()=>{
|
|
644
|
+
r.close(()=>t(e))}),r.listen(e,"127.0.0.1")})}},4830(e,t,o){t.getProjectJson=async function(e){try{
|
|
645
|
+
return JSON.parse(await(0,r.readFile)((0,n.join)(e,"package.json"),"utf-8"))}catch(e){
|
|
646
|
+
throw new Error("package.json not found")}};const r=o(1455),n=o(6760)},6718(e,t,o){t.getNodeModulesPath=function(){try{
|
|
647
|
+
return(0,r.execSync)("npm root -g",{stdio:["ignore","pipe","ignore"]}).toString().trim()}catch(e){
|
|
648
|
+
throw new Error("npm is not installed or not accessible on your system.")}};const r=o(1421)},4813(e,t,o){
|
|
649
|
+
t.isMahameruProjectDir=function(e){const t=(0,n.join)(e,"package.json"),o=(0,n.join)(e,"node_modules");if(!(0,
|
|
650
|
+
r.existsSync)(t)&&(0,r.existsSync)(o))return!1;try{const e=(0,r.readFileSync)(t,"utf-8"),o=JSON.parse(e)
|
|
651
|
+
;return!(!o.dependencies||!o.dependencies.mahameru)}catch(e){return!1}};const r=o(3024),n=o(6760)},6929(e,t){
|
|
652
|
+
t.parseProject=function(e){return{pid:e.pid,createdAt:e.createdAt,isDisabled:e.isDisabled,name:e.name,
|
|
653
|
+
description:e.description,version:e.version,mode:e.mode,rootPath:e.rootPath,port:e.port,host:e.host,status:e.status,
|
|
654
|
+
isLastStatusIsRunning:e.isLastStatusIsRunning}}},3157(e,t,o){t.hasWindowsElevationRetry=function(){
|
|
655
|
+
return"1"===process.env[n]},t.getWindowsElevatedWorkingDirectory=function(){return process.env[s]},
|
|
656
|
+
t.isWindowsProcessElevated=function(){if("win32"!==process.platform)return!1;const e=(0,
|
|
657
|
+
r.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command","([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)"],{
|
|
646
658
|
encoding:"utf8",windowsHide:!0});return 0===e.status&&"true"===e.stdout.trim().toLowerCase()},
|
|
647
659
|
t.relaunchCurrentProcessAsAdmin=function(e){if("win32"!==process.platform)return{ok:!1,reason:"unsupported-platform"}
|
|
648
660
|
;const t=process.argv[1];if(!t)return{ok:!1,reason:"missing-entrypoint"}
|
|
@@ -667,5 +679,5 @@ e.exports=require("node:child_process")},139(e){e.exports=require("node:cluster"
|
|
|
667
679
|
},1455(e){e.exports=require("node:fs/promises")},7067(e){e.exports=require("node:http")},4708(e){
|
|
668
680
|
e.exports=require("node:https")},8995(e){e.exports=require("node:module")},7030(e){e.exports=require("node:net")},
|
|
669
681
|
8161(e){e.exports=require("node:os")},6760(e){e.exports=require("node:path")},6928(e){e.exports=require("path")},
|
|
670
|
-
8330(e){e.exports={version:"0.0.
|
|
682
|
+
8330(e){e.exports={version:"0.0.27"}}};const t={};(function o(r){const n=t[r];if(void 0!==n)return n.exports
|
|
671
683
|
;const s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,o),s.exports})(8625)})();
|