@mahameru/cli 0.0.24 → 0.0.25
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 +37 -34
- 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.25 │
|
|
7
7
|
* │ Built: 2026 │
|
|
8
8
|
* │ │
|
|
9
9
|
* │ Copyright (c) Bintan <hello@bintvn.co> │
|
|
@@ -31,9 +31,9 @@ console.error(s.default.yellow("Please use tsconfig path aliases such as @/* and
|
|
|
31
31
|
d.deleteDirIfExists)((0,c.join)(o,"types"));try{
|
|
32
32
|
const t=await(0,i.readFile)((0,c.join)(e,"package.json"),"utf-8"),r=JSON.parse(t)
|
|
33
33
|
;r.devDependencies&&delete r.devDependencies,await(0,i.writeFile)((0,c.join)(o,"package.json"),JSON.stringify(r,null,2))
|
|
34
|
-
}catch{}const
|
|
35
|
-
m.existsSync)(
|
|
36
|
-
c.join)(o,".env.production")):(0,m.existsSync)(
|
|
34
|
+
}catch{}const _=(0,c.join)(e,".env"),M=(0,c.join)(e,".env.development"),j=(0,c.join)(e,".env.production");(0,
|
|
35
|
+
m.existsSync)(_)&&await(0,i.copyFile)(_,(0,c.join)(o,".env")),(0,m.existsSync)(j)?await(0,i.copyFile)(j,(0,
|
|
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),
|
|
39
39
|
process.exit(1)}}}
|
|
@@ -162,18 +162,18 @@ return new Promise((n,s)=>{const a=(0,r.spawn)(process.execPath,[e,...t],{stdio:
|
|
|
162
162
|
var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
163
163
|
;Object.defineProperty(t,"__esModule",{value:!0
|
|
164
164
|
}),t.startWatchedDevServer=async function({environment:e,host:t,port:o,version:r}){
|
|
165
|
-
let u,
|
|
165
|
+
let u,M=null,j=!1,x=null,E=!1,T=!0,A=!1,b=0;const D=new Set,O=new Set;await(0,p.generateRouteTypes)((0,
|
|
166
166
|
a.join)(m,"src","routes"),(0,a.join)(h,"types","routes.d.ts")),await(0,p.generateDataSourceTypes)((0,
|
|
167
167
|
a.join)(m,"src","databases"),(0,a.join)(h,"types","dataSources.d.ts")),await(0,p.generateTypesBarrel)((0,
|
|
168
168
|
a.join)(h,"types","index.d.ts")),await(0,p.generateMahameruDts)((0,a.join)(m,"mahameru.d.ts")),await(0,s.mkdir)(h,{
|
|
169
169
|
recursive:!0});const R=(0,i.default)({text:`${c.default.cyan("[Mahameru]")} Starting TypeScript watch...`,
|
|
170
170
|
spinner:"triangle"}).start(),k={dev:!0,host:t,port:o,rootPath:m};u=new d.App(k),
|
|
171
|
-
|
|
171
|
+
M=await async function({environment:e,spinner:t,onBuildStart:o,onBuildSuccess:r,onBuildFailure:i}){const l=(0,
|
|
172
172
|
a.resolve)((0,
|
|
173
|
-
a.join)(m,"node_modules","typescript")),{createWatchCompilerHost:d,createWatchProgram:u,formatDiagnosticsWithColorAndContext:p,formatDiagnostic:w,sys:S,createEmitAndSemanticDiagnosticsBuilderProgram:
|
|
173
|
+
a.join)(m,"node_modules","typescript")),{createWatchCompilerHost:d,createWatchProgram:u,formatDiagnosticsWithColorAndContext:p,formatDiagnostic:w,sys:S,createEmitAndSemanticDiagnosticsBuilderProgram:M}=f(l),j={
|
|
174
174
|
getCanonicalFileName:e=>e,getCurrentDirectory:()=>m,getNewLine:()=>S.newLine};let x=!1,E=!1,T=0
|
|
175
175
|
;const A=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
|
|
176
|
-
},S,
|
|
176
|
+
},S,M,e=>{E=!0;const t=e.file?p([e],j):w(e,j);process.stderr.write(t.endsWith("\n")?t:`${t}\n`)},e=>{
|
|
177
177
|
const t=e.messageText.toString().trim();(function(e){
|
|
178
178
|
return e.includes("Starting compilation in watch mode...")||e.includes("File change detected. Starting incremental compilation...")
|
|
179
179
|
})(t)&&(T+=1,A.set(T,Date.now()),b.set(T,{emittedRuntimeFiles:new Set,changedRuntimeSourceFiles:new Set}),E=!1,o()),
|
|
@@ -194,8 +194,8 @@ if(0===e.length)return;const t=await async function(){if(!P){const e=(0,a.resolv
|
|
|
194
194
|
a.join)(__dirname,"node_modules","tsc-alias")),{prepareSingleFileReplaceTscAliasPaths:t}=f(e);P=t({configFile:v,outDir:h
|
|
195
195
|
})}return P}();for(const o of e){if(!(0,n.existsSync)(o))continue;const e=await(0,s.readFile)(o,"utf8"),r=t({
|
|
196
196
|
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
|
|
197
|
+
await async function(e=3e4){const t=Date.now();for(;Date.now()-t<e;){if((0,n.existsSync)(g))return void await _(200)
|
|
198
|
+
;await _(100)}throw new Error("Timed out waiting for emitted dev runtime artifacts.")}();const e=(0,a.resolve)((0,
|
|
199
199
|
a.join)(__dirname,"node_modules","tsc-alias")),{replaceTscAliasPaths:t}=f(e);await t({configFile:v,outDir:h})}}catch(e){
|
|
200
200
|
return console.error(c.default.red("[Mahameru Alias] Alias rewrite failed.")),console.error(e),x||(x=!0,
|
|
201
201
|
t.fail(`${c.default.red("[Mahameru]")} Initial alias rewrite failed.`),O(e instanceof Error?e:new Error(String(e)))),
|
|
@@ -235,12 +235,12 @@ const e=function(e){const t=(0,a.relative)(y,e);return(0,a.resolve)(g,t.replace(
|
|
|
235
235
|
s.rm)(e.replace(/\.js$/i,".d.ts"),{force:!0}).catch(()=>{}),(0,s.rm)(e.replace(/\.js$/i,".d.ts.map"),{force:!0
|
|
236
236
|
}).catch(()=>{})])}await(0,s.rm)((0,a.resolve)(g,o),{recursive:!0,force:!0}).catch(()=>{})}(r),A=!0,O.add((0,
|
|
237
237
|
a.resolve)(r)),T||I())}),await C.start(),await N.start();const H=async(e=0)=>{j||(j=!0,x&&(clearTimeout(x),x=null),
|
|
238
|
-
C.stop(),N.stop(),await u.stop(),
|
|
238
|
+
C.stop(),N.stop(),await u.stop(),M?.close(),process.exit(e))};process.once("SIGINT",()=>{H(0)}),
|
|
239
239
|
process.once("SIGTERM",()=>{H(0)}),await new Promise(()=>{})}
|
|
240
240
|
;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
241
|
u.createRequire)(__filename),m=process.cwd(),h=(0,a.join)(m,".mahameru"),g=h,y=(0,a.join)(m,"src"),v=(0,
|
|
242
242
|
a.join)(m,"tsconfig.json"),w=(0,a.join)(m,"mahameru.config.ts");let P=null;function S(e){const t=(0,a.relative)(g,e)
|
|
243
|
-
;return(0,a.resolve)(y,t.replace(/\.js$/i,".ts"))}function $(e){return e.replace(/\\/g,"/")}function
|
|
243
|
+
;return(0,a.resolve)(y,t.replace(/\.js$/i,".ts"))}function $(e){return e.replace(/\\/g,"/")}function _(e){
|
|
244
244
|
return new Promise(t=>{setTimeout(t,e)})}},5775(e,t,o){t.deleteDirIfExists=async function(e){return await(0,r.rm)(e,{
|
|
245
245
|
recursive:!0,force:!0})},t.parsePort=function(e){const t=parseInt(e,10);return isNaN(t)?void 0:t}
|
|
246
246
|
;const r=o(1455),n=o(8161)},6469(e,t,o){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{
|
|
@@ -280,23 +280,26 @@ const t=e.split("/"),o=[];for(const e of t){if(c.test(e))break;o.push(e)}
|
|
|
280
280
|
return 0===o.length?i.default.dirname(e):o.join("/")}normalizePath(e){return e.replace(/\\/g,"/")}}t.Watchman=l},
|
|
281
281
|
846(e,t,o){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
282
282
|
;Object.defineProperty(t,"__esModule",{value:!0}),t.startFork=void 0
|
|
283
|
-
;const n=r(o(9278)),s=r(o(5205)),a=o(4813),i=o(7209),c=r(o(8720)),l=o(4830),d=o(3157),u=o(6921)
|
|
284
|
-
;t.startFork=({rootPath:e})=>async t=>{const o=(0,d.getWindowsElevatedWorkingDirectory)()??e,r=t.port,
|
|
283
|
+
;const n=r(o(9278)),s=r(o(5205)),a=o(4813),i=o(7209),c=r(o(8720)),l=o(4830),d=o(3157),u=o(6921),p=o(9896),f=o(6928),m=o(5317)
|
|
284
|
+
;t.startFork=({rootPath:e})=>async t=>{const o=(0,d.getWindowsElevatedWorkingDirectory)()??e,r=t.port,h=t.host;(0,
|
|
285
285
|
a.isMahameruProjectDir)(o)||(console.error(s.default.red(`\n${o} is not a Mahameru project directory.`)),
|
|
286
|
-
process.exit(1));const
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
286
|
+
process.exit(1));const g=await(0,l.getProjectJson)(o);if(!(0,p.existsSync)((0,f.join)(o,"node_modules"))||!(0,
|
|
287
|
+
p.existsSync)((0,f.join)(o,"package-lock.json"))){const e=(0,c.default)("Installing dependencies...").start();(0,
|
|
288
|
+
m.execSync)("npm install",{stdio:"inherit",cwd:o}),e.succeed(s.default.green("\nDependencies installed."))}const y=(0,
|
|
289
|
+
c.default)("Checking available port...").start(),v=await(0,i.freePortFinder)(r)
|
|
290
|
+
;y.text="Connecting to MahameruJS PM Daemon...";const w=n.default.createConnection({path:u.IPC_SOCKET_PATH},()=>{
|
|
291
|
+
w.write(JSON.stringify({command:"FORK_PROJECT",payload:{name:g.name,description:g.description,version:g.version,
|
|
292
|
+
projectRoot:o,port:v,host:h}}))});w.on("data",e=>{
|
|
290
293
|
const t=JSON.parse(e.toString()),{success:o,message:r,data:n,mpmUrl:a}=t
|
|
291
294
|
;o?(!function({name:e,version:t,mode:o,host:r,port:n,pid:a,mpmUrl:i}){
|
|
292
295
|
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}`)}`]
|
|
293
296
|
;i&&c.push(`${s.default.bold("PM URL:")} ${s.default.cyan(i)}`),console.log(s.default.green("\n Project Started")),
|
|
294
297
|
c.forEach(e=>console.log(` ${e}`)),
|
|
295
|
-
console.log(`\n${s.default.dim("Use `mahameru status` to inspect this managed project.")}\n`)}({name:
|
|
296
|
-
version:
|
|
297
|
-
|
|
298
|
-
process.exit(0)}),
|
|
299
|
-
"ENOENT"===e.code||"ECONNREFUSED"===e.code?
|
|
298
|
+
console.log(`\n${s.default.dim("Use `mahameru status` to inspect this managed project.")}\n`)}({name:g.name,
|
|
299
|
+
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)),w.end(),
|
|
301
|
+
process.exit(0)}),w.on("error",e=>{
|
|
302
|
+
"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){
|
|
300
303
|
if(!(0,d.hasWindowsElevationRetry)()&&!(0,d.isWindowsProcessElevated)()){
|
|
301
304
|
e.warn(s.default.yellow("\nWindows blocked access to the Mahameru PM pipe. Requesting Administrator approval..."))
|
|
302
305
|
;const o=(0,d.relaunchCurrentProcessAsAdmin)(t)
|
|
@@ -309,7 +312,7 @@ process.exit(0))
|
|
|
309
312
|
o.errorText&&console.error(s.default.dim(o.errorText)),process.exit(1)}
|
|
310
313
|
e.fail(s.default.red(`\nAccess denied while connecting to Mahameru PM Daemon.\nThe daemon or Windows service is likely running elevated, and the elevated retry still could not access ${s.default.bold(u.IPC_SOCKET_PATH)}.`)),
|
|
311
314
|
console.log(s.default.dim("Check the visible Administrator PowerShell window for the detailed failure output.")),
|
|
312
|
-
process.exit(1)}(
|
|
315
|
+
process.exit(1)}(y,o):(y.fail(s.default.red(`\n${e.message}`)),console.error(e)),process.exit(1)})}},1471(e,t,o){
|
|
313
316
|
var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}}
|
|
314
317
|
;Object.defineProperty(t,"__esModule",{value:!0}),t.startService=void 0
|
|
315
318
|
;const n=o(6921),s=o(1421),a=o(3024),i=o(6760),c=r(o(5205));t.startService=e=>()=>{
|
|
@@ -532,14 +535,14 @@ v.default.createReadStream(r).pipe(t)}{const e=(0,d.join)(P,"index.html")
|
|
|
532
535
|
t.end("<h1>404 - Frontend Build Not Found</h1>")):(t.writeHead(200,{"Content-Type":"text/html"}),
|
|
533
536
|
v.default.createReadStream(e).pipe(t)))}}):(t.writeHead(403,{"Content-Type":"text/plain"}),t.end("Forbidden"))}
|
|
534
537
|
return t.writeHead(404,{"Content-Type":"text/html"}),t.end("<h1>404 Not Found</h1>")
|
|
535
|
-
},
|
|
538
|
+
},_=()=>console.log("[MPM] HTTP server closed."),M=e=>console.log("[MPM] HTTP server error:",e),j=async()=>{
|
|
536
539
|
process.send||r||(console.clear(),
|
|
537
540
|
console.log(`${c.default.bold(c.default.cyan("▲ Mahameru"))} ${c.default.dim(`Process Manager v${a}`)}\n`)),
|
|
538
541
|
console.log(`Server listening on host ${e} and port ${t}.`),
|
|
539
542
|
process.send||r||console.log(` ${c.default.bold(c.default.green("PID"))}: ${process.pid}\n ${c.default.bold(c.default.green("URL"))}: ${x?"https":"http"}://${e}:${t}\n${c.default.bold(c.default.green("API Endpoint"))}: ${x?"https":"http"}://${e}:${t}/api/process\n\n${c.default.dim("Press Ctrl+C to stop the server")}\n`)
|
|
540
543
|
;const o=await(0,h.loadProjects)();for(const e of o)e.isLastStatusIsRunning&&await U(e)},x=n&&s,E=n&&s?(0,
|
|
541
544
|
f.createServer)({cert:v.default.readFileSync(n),key:v.default.readFileSync(s)
|
|
542
|
-
},$).on("close",
|
|
545
|
+
},$).on("close",_).on("error",M).listen(i,e,j):(0,p.createServer)($).on("close",_).on("error",M).listen(i,e,j)
|
|
543
546
|
;if(!m.IS_WINDOWS){const e=o(9896);e.existsSync(m.IPC_SOCKET_PATH)&&e.unlinkSync(m.IPC_SOCKET_PATH)}const T=e=>t=>{
|
|
544
547
|
const o=t.toString().trim();console.log(`[${e}] ${o}`)},A=e=>t=>{const o=t.toString().trim()
|
|
545
548
|
;console.error(`[${e} ERROR] ${o}`)},b=(o,r,n)=>({type:s,data:a})=>{if(o)if("ERROR"===s)o.write(JSON.stringify({
|
|
@@ -658,11 +661,11 @@ e?r(new Error(`Extraction failed: ${e.message}`)):o(`Successfully extracted to $
|
|
|
658
661
|
e?a(new Error(`Zipping failed: ${e}`)):r(`Successfully created zip at ${t}`)})}catch(e){a(e)}})},4650(e){
|
|
659
662
|
e.exports=require("adm-zip")},6858(e){e.exports=require("commander")},6261(e){e.exports=require("events")},8720(e){
|
|
660
663
|
e.exports=require("ora")},5205(e){e.exports=require("picocolors")},6471(e){e.exports=require("porterman/string-helper")
|
|
661
|
-
},4437(e){e.exports=require("socket.io")},
|
|
662
|
-
|
|
663
|
-
e.exports=require("node:
|
|
664
|
-
|
|
665
|
-
e.exports=require("node:
|
|
666
|
-
e.exports=require("node:
|
|
667
|
-
;(function o(r){const n=t[r];if(void 0!==n)return n.exports
|
|
668
|
-
;return e[r].call(s.exports,s,s.exports,o),s.exports})(8625)})();
|
|
664
|
+
},4437(e){e.exports=require("socket.io")},5317(e){e.exports=require("child_process")},9896(e){e.exports=require("fs")},
|
|
665
|
+
1943(e){e.exports=require("fs/promises")},9278(e){e.exports=require("net")},1421(e){
|
|
666
|
+
e.exports=require("node:child_process")},139(e){e.exports=require("node:cluster")},3024(e){e.exports=require("node:fs")
|
|
667
|
+
},1455(e){e.exports=require("node:fs/promises")},7067(e){e.exports=require("node:http")},4708(e){
|
|
668
|
+
e.exports=require("node:https")},8995(e){e.exports=require("node:module")},7030(e){e.exports=require("node:net")},
|
|
669
|
+
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.25"}}};const t={};(function o(r){const n=t[r];if(void 0!==n)return n.exports
|
|
671
|
+
;const s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,o),s.exports})(8625)})();
|