@h3ravel/console 11.3.2 → 11.3.3

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/bin/fire.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));require(`tsx/esm`);let c=require(`@h3ravel/core`);c=s(c);let l=require(`@h3ravel/shared`);l=s(l);let u=require(`node:fs/promises`);u=s(u);let d=require(`@h3ravel/support`);d=s(d);let f=require(`dayjs`);f=s(f);let p=require(`node:fs`);p=s(p);let m=require(`node:path`);m=s(m);let h=require(`@h3ravel/http`);h=s(h);let g=require(`@h3ravel/router`);g=s(g);let _=require(`@h3ravel/database`);_=s(_);let v=require(`@h3ravel/cache`);v=s(v);let y=require(`@h3ravel/queue`);y=s(y);let b=require(`@h3ravel/mail`);b=s(b);let x=require(`@h3ravel/config`);x=s(x);let S=require(`commander`);S=s(S);let C=require(`path`);C=s(C);let w=require(`child_process`);w=s(w);let T=require(`tsdown`);T=s(T);var E=class extends c.ConsoleCommand{};const D=String.raw`
2
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));require(`tsx/esm`);let c=require(`@h3ravel/core`);c=s(c);let l=require(`@h3ravel/shared`);l=s(l);let u=require(`node:fs/promises`);u=s(u);let d=require(`@h3ravel/support`);d=s(d);let f=require(`dayjs`);f=s(f);let p=require(`node:path`);p=s(p);let m=require(`@h3ravel/http`);m=s(m);let h=require(`@h3ravel/router`);h=s(h);let g=require(`@h3ravel/database`);g=s(g);let _=require(`@h3ravel/cache`);_=s(_);let v=require(`@h3ravel/queue`);v=s(v);let y=require(`@h3ravel/mail`);y=s(y);let b=require(`@h3ravel/config`);b=s(b);let x=require(`commander`);x=s(x);let S=require(`path`);S=s(S);let C=require(`child_process`);C=s(C);let w=require(`tsdown`);w=s(w);var T=class extends c.ConsoleCommand{};const E=String.raw`
3
3
  111
4
4
  111111111
5
5
  1111111111 111111
@@ -21,19 +21,19 @@ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=
21
21
  111111 111 111111
22
22
  111111111
23
23
  110
24
- `,O=String.raw`
24
+ `,D=String.raw`
25
25
  _ _ _____ _
26
26
  | | | |___ / _ __ __ ___ _____| |
27
27
  | |_| | |_ \| '__/ _ \ \ / / _ \ |
28
28
  | _ |___) | | | (_| |\ V / __/ |
29
29
  |_| |_|____/|_| \__,_| \_/ \___|_|
30
30
 
31
- `;var k=class extends E{signature=`list`;description=`List all available commands`;async handle(){let e=[{short:`-h`,long:`--help`,description:`Display help for the given command. When no command is given display help for the list command`}].concat(this.program.options).map(e=>l.Logger.describe(l.Logger.log(` `+[e.short,e.long].filter(e=>!!e).join(`, `),`green`,!1),e.description,25,!1).join(``)),t=this.program.commands.map(e=>l.Logger.describe(l.Logger.log(` `+e.name(),`green`,!1),e.description(),25,!1).join(``)).reduce((e,t)=>{let n=t.replace(/\x1b\[\d+m/g,``),r=n.includes(`:`)?n.split(`:`)[0].trim():`__root__`;return e[r]??=[],e[r].push(t),e},{}),n=Object.entries(t).map(([e,t])=>{let n=e===`__root__`?``:e;return[l.Logger.log(n,`yellow`,!1),t.join(`
31
+ `;var O=class extends T{signature=`list`;description=`List all available commands`;async handle(){let e=[{short:`-h`,long:`--help`,description:`Display help for the given command. When no command is given display help for the list command`}].concat(this.program.options).map(e=>l.Logger.describe(l.Logger.log(` `+[e.short,e.long].filter(e=>!!e).join(`, `),`green`,!1),e.description,25,!1).join(``)),t=this.program.commands.map(e=>l.Logger.describe(l.Logger.log(` `+e.name(),`green`,!1),e.description(),25,!1).join(``)).reduce((e,t)=>{let n=t.replace(/\x1b\[\d+m/g,``),r=n.includes(`:`)?n.split(`:`)[0].trim():`__root__`;return e[r]??=[],e[r].push(t),e},{}),n=Object.entries(t).map(([e,t])=>{let n=e===`__root__`?``:e;return[l.Logger.log(n,`yellow`,!1),t.join(`
32
32
  `)].join(`
33
- `)});l.Logger.log([[`H3ravel Framework`,`white`],[this.kernel.modulePackage.version,`green`]],` `),console.log(``),console.log(O),console.log(``),l.Logger.log(`Usage:`,`yellow`),l.Logger.log(` command [options] [arguments]`,`white`),console.log(``),l.Logger.log(`Options:`,`yellow`),console.log(e.join(`
33
+ `)});l.Logger.log([[`H3ravel Framework`,`white`],[this.kernel.modulePackage.version,`green`]],` `),console.log(``),console.log(D),console.log(``),l.Logger.log(`Usage:`,`yellow`),l.Logger.log(` command [options] [arguments]`,`white`),console.log(``),l.Logger.log(`Options:`,`yellow`),console.log(e.join(`
34
34
  `).trim()),console.log(``),l.Logger.log(`Available Commands:`,`yellow`),console.log(n.join(`
35
35
 
36
- `).trim())}},A=class e{static CREATE_PATTERNS=[/^create_(\w+)_table$/,/^create_(\w+)$/];static CHANGE_PATTERNS=[/.+_(to|from|in)_(\w+)_table$/,/.+_(to|from|in)_(\w+)$/];static guess(t){for(let n of e.CREATE_PATTERNS){let e=t.match(n);if(e)return[e[1],!0]}for(let n of e.CHANGE_PATTERNS){let e=t.match(n);if(e)return[e[2],!1]}return[]}},j=class extends E{signature=`#make:
36
+ `).trim())}},k=class e{static CREATE_PATTERNS=[/^create_(\w+)_table$/,/^create_(\w+)$/];static CHANGE_PATTERNS=[/.+_(to|from|in)_(\w+)_table$/,/.+_(to|from|in)_(\w+)$/];static guess(t){for(let n of e.CREATE_PATTERNS){let e=t.match(n);if(e)return[e[1],!0]}for(let n of e.CHANGE_PATTERNS){let e=t.match(n);if(e)return[e[2],!1]}return[]}},A=class extends T{signature=`#make:
37
37
  {controller : Create a new controller class.
38
38
  | {--a|api : Exclude the create and edit methods from the controller}
39
39
  | {--m|model= : Generate a resource controller for the given model}
@@ -66,5 +66,5 @@ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=
66
66
  | {--force : Create the model even if it already exists}
67
67
  }
68
68
  {^name : The name of the [name] to generate}
69
- `;description=`Generate component classes`;async handle(){let e=this.dictionary.baseCommand??this.dictionary.name,t={controller:`makeController`,resource:`makeResource`,migration:`makeMigration`,factory:`makeFactory`,seeder:`makeSeeder`,model:`makeModel`,view:`makeView`};try{await this?.[t[e]]()}catch(e){l.Logger.error(e)}}async makeController(){let e=this.option(`api`)?`-resource`:``,t=this.argument(`name`),n=this.option(`force`),r=m.default.join(app_path(`Http/Controllers`),t+`.ts`),i=l.FileSystem.findModulePkg(`@h3ravel/http`,this.kernel.cwd)??``,a=m.default.join(i,`dist/stubs/controller${e}.stub`);!n&&(0,p.existsSync)(r)&&l.Logger.error(`ERORR: ${t} controller already exists`);let o=await(0,u.readFile)(a,`utf-8`);o=o.replace(/{{ name }}/g,t),await(0,u.writeFile)(r,o),l.Logger.split(`INFO: Controller Created`,l.Logger.log(m.default.basename(r),`gray`,!1))}makeResource(){l.Logger.success(`Resource support is not yet available`)}async makeMigration(){let e=this.argument(`name`),t=(0,f.default)().format(`YYYY_MM_DD_HHmmss`),n=m.default.join(database_path(`migrations`),`${t}_${e}.ts`),r=l.FileSystem.findModulePkg(`@h3ravel/database`,this.kernel.cwd)??``,i=this.option(`create`,!1),a=this.option(`table`);if(!a&&typeof i==`string`&&(a=i,i=!0),!a){let t=A.guess(e);a=t[0],i=!!t[1]}let o=m.default.join(r,this.getMigrationStubName(a,i)),s=await(0,u.readFile)(o,`utf-8`);a!==null&&(s=s.replace(/DummyTable|{{\s*table\s*}}/g,a)),l.Logger.info(`INFO: Creating Migration`),await this.kernel.ensureDirectoryExists(m.default.dirname(n)),await(0,u.writeFile)(n,s),l.Logger.split(`INFO: Migration Created`,l.Logger.log(m.default.basename(n),`gray`,!1))}makeFactory(){l.Logger.success(`Factory support is not yet available`)}makeSeeder(){l.Logger.success(`Seeder support is not yet available`)}async makeModel(){let e=this.option(`type`,`ts`),t=this.argument(`name`),n=this.argument(`force`),r=m.default.join(app_path(`Models`),t.toLowerCase(),`.`+e);!n&&(0,p.existsSync)(r)&&l.Logger.error(`ERORR: ${t} view already exists`);let i=l.FileSystem.findModulePkg(`@h3ravel/database`,this.kernel.cwd)??``,a=m.default.join(i,`dist/stubs/model-${e}.stub`),o=await(0,u.readFile)(a,`utf-8`);o=o.replace(/{{ name }}/g,t),await(0,u.writeFile)(r,o),l.Logger.split(`INFO: Model Created`,l.Logger.log(m.default.basename(r),`gray`,!1))}async makeView(){let e=this.argument(`name`),t=this.option(`force`),n=m.default.join(base_path(`src/resources/views`),e+`.edge`);e.includes(`/`)&&await(0,u.mkdir)((0,d.beforeLast)(n,`/`),{recursive:!0}),!t&&(0,p.existsSync)(n)&&l.Logger.error(`ERORR: ${e} view already exists`),await(0,u.writeFile)(n,`{{-- src/resources/views/${e}.edge --}}`),l.Logger.split(`INFO: View Created`,l.Logger.log(`src/resources/views/${e}.edge`,`gray`,!1))}getMigrationStubName(e,t=!1,n=`ts`){let r;return r=e?t?`migration.create-${n}.stub`:`migration.update-${n}.stub`:`migration-${n}.stub`,`dist/stubs/`+r}},M=class extends E{signature=`postinstall`;description=`Default post installation command`;async handle(){this.createSqliteDB()}async createSqliteDB(){config(`database.default`)===`sqlite`&&(await l.FileSystem.fileExists(database_path())||await(0,u.mkdir)(database_path(),{recursive:!0}),await l.FileSystem.fileExists(database_path(`db.sqlite`))||await(0,u.writeFile)(database_path(`db.sqlite`),``))}},N=[h.HttpServiceProvider,x.ConfigServiceProvider,g.RouteServiceProvider,g.AssetsServiceProvider,_.DatabaseServiceProvider,v.CacheServiceProvider,y.QueueServiceProvider,b.MailServiceProvider],P=class e{static parseOptions(t){let n=[],r=/\{([^{}]+(?:\{[^{}]*\}[^{}]*)*)\}/g,i;for(;(i=r.exec(t))!==null;){let t=i[1][0]===`^`||/:[#^]/.test(i[1]),r=([`#`,`^`].includes(i[1][0])||/:[#^]/.test(i[1]))&&!t,a=i[1].trim().replace(/[#^]/,``),o=a.indexOf(`:`);if(o===-1){n.push({name:a});continue}let s=a.substring(0,o).trim(),c=a.substring(o+1).trim(),l=c,u,d=c.indexOf(`|`);if(d!==-1){l=c.substring(0,d).trim();let t=c.substring(d+1).trim().replace(/^\{/,``).trim();u=e.parseOptions(`{`+t+`}`)}else l=l.trim();let f=s,p=/[^a-zA-Z0-9_|-]/.test(f),m=!1;f.endsWith(`?*`)?(p=!1,m=!0,f=f.slice(0,-2)):f.endsWith(`*`)?(m=!0,f=f.slice(0,-1)):f.endsWith(`?`)&&(p=!1,f=f.slice(0,-1));let h=f.startsWith(`--`),g,_;if(h){let e=f.split(`|`).map(e=>e.trim());g=[];for(let t of e){t.startsWith(`--`)&&t.slice(2).length===1?t=`-`+t.slice(2):t.startsWith(`-`)&&!t.startsWith(`--`)&&t.slice(1).length>1?t=`--`+t.slice(1):!t.startsWith(`-`)&&t.slice(1).length>1&&(t=`--`+t);let e=t.indexOf(`=`);if(e!==-1){g.push(t.substring(0,e));let n=t.substring(e+1);_=n===`*`?[]:n===`true`||n===`false`||!n&&!p?n===`true`:isNaN(Number(n))?n:Number(n)}else g.push(t)}}n.push({name:h?g[g.length-1]:f,required:p,multiple:m,description:l,flags:g,shared:t,isFlag:h,isHidden:r,defaultValue:_,nestedOptions:u})}return n}static parseSignature(t,n){let r=t.split(`
70
- `).map(e=>e.trim()).filter(e=>e.length>0),i=[`#`,`^`].includes(r[0][0])||/:[#^]/.test(r[0]),a=r[0].replace(/[^\w=:-]/g,``),o=n.getDescription(),s=a.endsWith(`:`),c=r.slice(1).join(` `),l=e.parseOptions(c);return s?{baseCommand:a.slice(0,-1),isNamespaceCommand:s,subCommands:l.filter(e=>!e.flags&&!e.isHidden),description:o,commandClass:n,options:l.filter(e=>!!e.flags),isHidden:i}:{baseCommand:a,isNamespaceCommand:s,options:l,description:o,commandClass:n,isHidden:i}}};function F(e={}){let t,n,r=e.args||[],i=e.allowRestarts||!1,a=e.input,o=e.options||e;return delete o.args,delete o.allowRestarts,{name:`run`,buildStart(e){let n=a??e.input;if(typeof n==`string`&&(n=[n]),typeof n==`object`&&(n=Object.values(n)),n.length>1)throw Error("@rollup/plugin-run must have a single entry point; consider setting the `input` option");t=(0,C.resolve)(n[0])},generateBundle(e,t,n){n||this.error(`@rollup/plugin-run currently only works with bundles that are written to disk`)},writeBundle(e,a){let s=(e,t)=>{n&&n.kill(),n=(0,w.fork)((0,C.join)(e,t),r,o)},c=e.dir||(0,C.dirname)(e.file),l=Object.keys(a).find(e=>{let n=a[e];return n.isEntry&&n.facadeModuleId===t});l?(s(c,l),i&&(process.stdin.resume(),process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{let t=e.toString().trim().toLowerCase();t===`rs`||t===`restart`||e.toString().charCodeAt(0)===11?s(c,l):(t===`cls`||t===`clear`||e.toString().charCodeAt(0)===12)&&console.clear()}))):this.error(`@rollup/plugin-run could not find output chunk`)}}}const I=process.env.NODE_ENV||`development`,L=I===`development`?`.h3ravel/serve`:`dist`,R={outDir:L,entry:[`src/**/*.ts`],format:[`esm`],target:`node22`,sourcemap:I===`development`,clean:!0,shims:!0,copy:[{from:`public`,to:L},`src/resources`,`src/database`],env:I===`development`?{NODE_ENV:I,SRC_PATH:L}:{},watch:I===`development`&&process.env.CLI_BUILD!==`true`?[`.env`,`.env.*`,`src`,`../../packages`]:!1,dts:!1,logLevel:`silent`,nodeProtocol:!0,skipNodeModulesBundle:!0,plugins:I===`development`&&process.env.CLI_BUILD!==`true`?[F({env:Object.assign({},process.env,{NODE_ENV:I,SRC_PATH:L}),execArgv:[`-r`,`source-map-support/register`],allowRestarts:!1,input:process.cwd()+`/src/server.ts`})]:[]};var z=R,B=class e{commands=[];constructor(e,t){this.app=e,this.kernel=t}async build(){return this.loadBaseCommands(),await this.loadDiscoveredCommands(),this.initialize()}loadBaseCommands(){[new j(this.app,this.kernel),new k(this.app,this.kernel),new M(this.app,this.kernel)].forEach(e=>this.addCommand(e))}async loadDiscoveredCommands(){let e=[...this.app.registeredCommands.map(e=>new e(this.app,this.kernel))],t=app_path(`Console/Commands/*.js`).replace(`/src/`,`/.h3ravel/serve/`);for await(let n of(0,u.glob)(t)){let t=m.default.basename(n).replace(`.js`,``);try{let r=(await import(n))[t];e.push(new r(this.app,this.kernel))}catch{}}e.forEach(e=>this.addCommand(e))}addCommand(e){this.commands.push(P.parseSignature(e.getSignature(),e))}initialize(){let e=l.Logger.parse([[`Musket CLI:`,`white`],[this.kernel.consolePackage.version,`green`]],` `,!1),t=l.Logger.parse([[`H3ravel Framework:`,`white`],[this.kernel.modulePackage.version,`green`]],` `,!1),n={quiet:[`-q, --quiet`,`Do not output any message`],silent:[`--silent`,`Do not output any message`],verbose:[`-v, --verbose <number>`,`Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug`],lock:[`--lock`,`Locked and loaded, do not ask any interactive question`]};S.program.name(`musket`).version(`${e}\n${t}`).description(O).addOption(new S.Option(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new S.Option(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new S.Option(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new S.Option(n.lock[0],n.lock[1])).action(async()=>{let e=new k(this.app,this.kernel);e.setInput(S.program.opts(),S.program.args,S.program.registeredArguments,{},S.program),e.handle()}),S.program.command(`init`).description(`Initialize H3ravel.`).action(async()=>{l.Logger.success(`Initialized: H3ravel has been initialized!`)});for(let e=0;e<this.commands.length;e++){let t=this.commands[e],r=t.commandClass;if(t.isNamespaceCommand&&t.subCommands){let e=t.isHidden?S.program:S.program.command(t.baseCommand).description(t.description??``).addOption(new S.Option(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new S.Option(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new S.Option(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new S.Option(n.lock[0],n.lock[1])).action(async()=>{r.setInput(e.opts(),e.args,e.registeredArguments,t,S.program),await r.handle()});(t.options?.length??0)>0&&t.options?.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(t=>{this.makeOption(t,e)}),t.subCommands.filter((e,t,n)=>!e.shared&&n.findIndex(t=>t.name===e.name)===t).forEach(e=>{let i=S.program.command(`${t.baseCommand}:${e.name}`).description(e.description||``).addOption(new S.Option(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new S.Option(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new S.Option(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new S.Option(n.lock[0],n.lock[1])).action(async()=>{r.setInput(i.opts(),i.args,i.registeredArguments,e,S.program),await r.handle()});t.subCommands?.filter(e=>e.shared).forEach(t=>{this.makeOption(t,i,!1,e)}),t.options?.filter(e=>e.shared).forEach(t=>{this.makeOption(t,i,!1,e)}),e.nestedOptions&&e.nestedOptions.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(e=>{this.makeOption(e,i)})})}else{let e=S.program.command(t.baseCommand).description(t.description??``);t?.options?.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(t=>{this.makeOption(t,e,!0)}),e.action(async()=>{r.setInput(e.opts(),e.args,e.registeredArguments,t,S.program),await r.handle()})}}return S.program.hook(`preAction`,async(e,t)=>{t.name()!==`fire`&&await(0,T.build)({...z,watch:!1,plugins:[]})}),S.program}makeOption(e,t,n,r){let i=e.description?.replace(/\[(\w+)\]/g,(e,t)=>r?.[t]??`[${t}]`)??``,a=e.name.replaceAll(`-`,``);if(e.isFlag)if(n){let n=e.flags?.map(e=>e.length===1?`-${e}`:`--${e}`).join(`, `).replaceAll(`----`,`--`).replaceAll(`---`,`-`);t.option(n||``,i,String(e.defaultValue)||void 0)}else t.option(e.flags?.join(`, `)+(e.required?` <${a}>`:``),i,e.defaultValue);else t.argument(e.required?`<${e.name}>`:`[${e.name}]`,i,e.defaultValue)}static async parse(t){return(await new e(t.app,t).build()).parseAsync()}},V=class e extends c.ConsoleKernel{constructor(e){super(e),this.app=e}static init(t){let n=new e(t);Promise.all([n.loadRequirements()]).then(([e])=>e.run())}async run(){await B.parse(this),process.exit(0)}async loadRequirements(){this.cwd=m.default.join(process.cwd(),this.basePath),this.modulePath=l.FileSystem.findModulePkg(`@h3ravel/core`,this.cwd)??``,this.consolePath=l.FileSystem.findModulePkg(`@h3ravel/console`,this.cwd)??``;try{this.modulePackage=await import(m.default.join(this.modulePath,`package.json`))}catch{this.modulePackage={version:`N/A`}}try{this.consolePackage=await import(m.default.join(this.consolePath,`package.json`))}catch{this.consolePackage={version:`N/A`}}return this}},H=class extends c.ServiceProvider{static priority=992;static console=!0;register(){}boot(){V.init(this.app),process.on(`SIGINT`,()=>{process.exit(0)}),process.on(`SIGTERM`,()=>{process.exit(0)})}},U=class{async fire(){let e=new c.Application(process.cwd()),t=app_path(`Providers/*.js`).replace(`/src/`,`/.h3ravel/serve/`);for await(let e of(0,u.glob)(t)){let t=m.default.basename(e).replace(`.js`,``);try{N.push((await import(e))[t])}catch{}}N.push(H),e.registerProviders(N),await e.registerConfiguredProviders(),await e.boot()}};new U().fire();
69
+ `;description=`Generate component classes`;async handle(){let e=this.dictionary.baseCommand??this.dictionary.name;this.argument(`name`)||this.program.error(`Please provide a valid name for the `+e);let t={controller:`makeController`,resource:`makeResource`,migration:`makeMigration`,factory:`makeFactory`,seeder:`makeSeeder`,model:`makeModel`,view:`makeView`};try{await this?.[t[e]]()}catch(e){l.Logger.error(e)}}async makeController(){let e=this.option(`api`)?`-resource`:``,t=this.argument(`name`),n=this.option(`force`),r=app_path(`Http/Controllers/${t}.ts`),i=l.FileSystem.findModulePkg(`@h3ravel/http`,this.kernel.cwd)??``,a=p.default.join(i,`dist/stubs/controller${e}.stub`);!n&&await l.FileSystem.fileExists(r)&&l.Logger.error(`ERORR: ${t} controller already exists`);let o=await(0,u.readFile)(a,`utf-8`);o=o.replace(/{{ name }}/g,t),await(0,u.writeFile)(r,o),l.Logger.split(`INFO: Controller Created`,l.Logger.log(p.default.basename(r),`gray`,!1))}makeResource(){l.Logger.success(`Resource support is not yet available`)}async makeMigration(){let e=this.argument(`name`),t=(0,f.default)().format(`YYYY_MM_DD_HHmmss`),n=database_path(`migrations/${t}_${e}.ts`),r=l.FileSystem.findModulePkg(`@h3ravel/database`,this.kernel.cwd)??``,i=this.option(`create`,!1),a=this.option(`table`);if(!a&&typeof i==`string`&&(a=i,i=!0),!a){let t=k.guess(e);a=t[0],i=!!t[1]}let o=p.default.join(r,this.getMigrationStubName(a,i)),s=await(0,u.readFile)(o,`utf-8`);a!==null&&(s=s.replace(/DummyTable|{{\s*table\s*}}/g,a)),l.Logger.info(`INFO: Creating Migration`),await this.kernel.ensureDirectoryExists(p.default.dirname(n)),await(0,u.writeFile)(n,s),l.Logger.split(`INFO: Migration Created`,l.Logger.log(p.default.basename(n),`gray`,!1))}makeFactory(){l.Logger.success(`Factory support is not yet available`)}makeSeeder(){l.Logger.success(`Seeder support is not yet available`)}async makeModel(){let e=this.option(`type`,`ts`),t=this.argument(`name`),n=this.argument(`force`),r=app_path(`Models/${t.toLowerCase()}.${e}`);!n&&await l.FileSystem.fileExists(r)&&l.Logger.error(`ERORR: ${t} model already exists`);let i=l.FileSystem.findModulePkg(`@h3ravel/database`,this.kernel.cwd)??``,a=p.default.join(i,`dist/stubs/model-${e}.stub`),o=await(0,u.readFile)(a,`utf-8`);o=o.replace(/{{ name }}/g,t),await(0,u.writeFile)(r,o),l.Logger.split(`INFO: Model Created`,l.Logger.log(p.default.basename(r),`gray`,!1))}async makeView(){let e=this.argument(`name`),t=this.option(`force`),n=base_path(`src/resources/views/${e}.edge`);e.includes(`/`)&&await(0,u.mkdir)((0,d.beforeLast)(n,`/`),{recursive:!0}),!t&&await l.FileSystem.fileExists(n)&&l.Logger.error(`ERORR: ${e} view already exists`),await(0,u.writeFile)(n,`{{-- src/resources/views/${e}.edge --}}`),l.Logger.split(`INFO: View Created`,l.Logger.log(`src/resources/views/${e}.edge`,`gray`,!1))}getMigrationStubName(e,t=!1,n=`ts`){let r;return r=e?t?`migration.create-${n}.stub`:`migration.update-${n}.stub`:`migration-${n}.stub`,`dist/stubs/`+r}},j=class extends T{signature=`postinstall`;description=`Default post installation command`;async handle(){this.createSqliteDB()}async createSqliteDB(){config(`database.default`)===`sqlite`&&(await l.FileSystem.fileExists(database_path())||await(0,u.mkdir)(database_path(),{recursive:!0}),await l.FileSystem.fileExists(database_path(`db.sqlite`))||await(0,u.writeFile)(database_path(`db.sqlite`),``))}},M=[m.HttpServiceProvider,b.ConfigServiceProvider,h.RouteServiceProvider,h.AssetsServiceProvider,g.DatabaseServiceProvider,_.CacheServiceProvider,v.QueueServiceProvider,y.MailServiceProvider],N=class e{static parseOptions(t){let n=[],r=/\{([^{}]+(?:\{[^{}]*\}[^{}]*)*)\}/g,i;for(;(i=r.exec(t))!==null;){let t=i[1][0]===`^`||/:[#^]/.test(i[1]),r=([`#`,`^`].includes(i[1][0])||/:[#^]/.test(i[1]))&&!t,a=i[1].trim().replace(/[#^]/,``),o=a.indexOf(`:`);if(o===-1){n.push({name:a});continue}let s=a.substring(0,o).trim(),c=a.substring(o+1).trim(),l=c,u,d=c.indexOf(`|`);if(d!==-1){l=c.substring(0,d).trim();let t=c.substring(d+1).trim().replace(/^\{/,``).trim();u=e.parseOptions(`{`+t+`}`)}else l=l.trim();let f=s,p=/[^a-zA-Z0-9_|-]/.test(f),m=!1;f.endsWith(`?*`)?(p=!1,m=!0,f=f.slice(0,-2)):f.endsWith(`*`)?(m=!0,f=f.slice(0,-1)):f.endsWith(`?`)&&(p=!1,f=f.slice(0,-1));let h=f.startsWith(`--`),g,_;if(h){let e=f.split(`|`).map(e=>e.trim());g=[];for(let t of e){t.startsWith(`--`)&&t.slice(2).length===1?t=`-`+t.slice(2):t.startsWith(`-`)&&!t.startsWith(`--`)&&t.slice(1).length>1?t=`--`+t.slice(1):!t.startsWith(`-`)&&t.slice(1).length>1&&(t=`--`+t);let e=t.indexOf(`=`);if(e!==-1){g.push(t.substring(0,e));let n=t.substring(e+1);_=n===`*`?[]:n===`true`||n===`false`||!n&&!p?n===`true`:isNaN(Number(n))?n:Number(n)}else g.push(t)}}n.push({name:h?g[g.length-1]:f,required:p,multiple:m,description:l,flags:g,shared:t,isFlag:h,isHidden:r,defaultValue:_,nestedOptions:u})}return n}static parseSignature(t,n){let r=t.split(`
70
+ `).map(e=>e.trim()).filter(e=>e.length>0),i=[`#`,`^`].includes(r[0][0])||/:[#^]/.test(r[0]),a=r[0].replace(/[^\w=:-]/g,``),o=n.getDescription(),s=a.endsWith(`:`),c=r.slice(1).join(` `),l=e.parseOptions(c);return s?{baseCommand:a.slice(0,-1),isNamespaceCommand:s,subCommands:l.filter(e=>!e.flags&&!e.isHidden),description:o,commandClass:n,options:l.filter(e=>!!e.flags),isHidden:i}:{baseCommand:a,isNamespaceCommand:s,options:l,description:o,commandClass:n,isHidden:i}}};function P(e={}){let t,n,r=e.args||[],i=e.allowRestarts||!1,a=e.input,o=e.options||e;return delete o.args,delete o.allowRestarts,{name:`run`,buildStart(e){let n=a??e.input;if(typeof n==`string`&&(n=[n]),typeof n==`object`&&(n=Object.values(n)),n.length>1)throw Error("@rollup/plugin-run must have a single entry point; consider setting the `input` option");t=(0,S.resolve)(n[0])},generateBundle(e,t,n){n||this.error(`@rollup/plugin-run currently only works with bundles that are written to disk`)},writeBundle(e,a){let s=(e,t)=>{n&&n.kill(),n=(0,C.fork)((0,S.join)(e,t),r,o)},c=e.dir||(0,S.dirname)(e.file),l=Object.keys(a).find(e=>{let n=a[e];return n.isEntry&&n.facadeModuleId===t});l?(s(c,l),i&&(process.stdin.resume(),process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{let t=e.toString().trim().toLowerCase();t===`rs`||t===`restart`||e.toString().charCodeAt(0)===11?s(c,l):(t===`cls`||t===`clear`||e.toString().charCodeAt(0)===12)&&console.clear()}))):this.error(`@rollup/plugin-run could not find output chunk`)}}}const F=process.env.NODE_ENV||`development`,I=F===`development`?`.h3ravel/serve`:`dist`,L={outDir:I,entry:[`src/**/*.ts`],format:[`esm`],target:`node22`,sourcemap:F===`development`,clean:!0,shims:!0,copy:[{from:`public`,to:I},`src/resources`,`src/database`],env:F===`development`?{NODE_ENV:F,SRC_PATH:I}:{},watch:F===`development`&&process.env.CLI_BUILD!==`true`?[`.env`,`.env.*`,`src`,`../../packages`]:!1,dts:!1,logLevel:`silent`,nodeProtocol:!0,skipNodeModulesBundle:!0,plugins:F===`development`&&process.env.CLI_BUILD!==`true`?[P({env:Object.assign({},process.env,{NODE_ENV:F,SRC_PATH:I}),execArgv:[`-r`,`source-map-support/register`],allowRestarts:!1,input:process.cwd()+`/src/server.ts`})]:[]};var R=L,z=class e{commands=[];constructor(e,t){this.app=e,this.kernel=t}async build(){return this.loadBaseCommands(),await this.loadDiscoveredCommands(),this.initialize()}loadBaseCommands(){[new A(this.app,this.kernel),new O(this.app,this.kernel),new j(this.app,this.kernel)].forEach(e=>this.addCommand(e))}async loadDiscoveredCommands(){let e=[...this.app.registeredCommands.map(e=>new e(this.app,this.kernel))],t=app_path(`Console/Commands/*.js`).replace(`/src/`,`/.h3ravel/serve/`);for await(let n of(0,u.glob)(t)){let t=p.default.basename(n).replace(`.js`,``);try{let r=(await import(n))[t];e.push(new r(this.app,this.kernel))}catch{}}e.forEach(e=>this.addCommand(e))}addCommand(e){this.commands.push(N.parseSignature(e.getSignature(),e))}initialize(){let e=l.Logger.parse([[`Musket CLI:`,`white`],[this.kernel.consolePackage.version,`green`]],` `,!1),t=l.Logger.parse([[`H3ravel Framework:`,`white`],[this.kernel.modulePackage.version,`green`]],` `,!1),n={quiet:[`-q, --quiet`,`Do not output any message`],silent:[`--silent`,`Do not output any message`],verbose:[`-v, --verbose <number>`,`Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug`],lock:[`--lock`,`Locked and loaded, do not ask any interactive question`]};x.program.name(`musket`).version(`${e}\n${t}`).description(D).addOption(new x.Option(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new x.Option(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new x.Option(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new x.Option(n.lock[0],n.lock[1])).action(async()=>{let e=new O(this.app,this.kernel);e.setInput(x.program.opts(),x.program.args,x.program.registeredArguments,{},x.program),e.handle()}),x.program.command(`init`).description(`Initialize H3ravel.`).action(async()=>{l.Logger.success(`Initialized: H3ravel has been initialized!`)});for(let e=0;e<this.commands.length;e++){let t=this.commands[e],r=t.commandClass;if(t.isNamespaceCommand&&t.subCommands){let e=t.isHidden?x.program:x.program.command(t.baseCommand).description(t.description??``).addOption(new x.Option(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new x.Option(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new x.Option(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new x.Option(n.lock[0],n.lock[1])).action(async()=>{r.setInput(e.opts(),e.args,e.registeredArguments,t,x.program),await r.handle()});(t.options?.length??0)>0&&t.options?.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(t=>{this.makeOption(t,e)}),t.subCommands.filter((e,t,n)=>!e.shared&&n.findIndex(t=>t.name===e.name)===t).forEach(e=>{let i=x.program.command(`${t.baseCommand}:${e.name}`).description(e.description||``).addOption(new x.Option(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new x.Option(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new x.Option(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new x.Option(n.lock[0],n.lock[1])).action(async()=>{r.setInput(i.opts(),i.args,i.registeredArguments,e,x.program),await r.handle()});t.subCommands?.filter(e=>e.shared).forEach(t=>{this.makeOption(t,i,!1,e)}),t.options?.filter(e=>e.shared).forEach(t=>{this.makeOption(t,i,!1,e)}),e.nestedOptions&&e.nestedOptions.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(e=>{this.makeOption(e,i)})})}else{let e=x.program.command(t.baseCommand).description(t.description??``);t?.options?.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(t=>{this.makeOption(t,e,!0)}),e.action(async()=>{r.setInput(e.opts(),e.args,e.registeredArguments,t,x.program),await r.handle()})}}return x.program.hook(`preAction`,async(e,t)=>{t.name()!==`fire`&&await(0,w.build)({...R,watch:!1,plugins:[]})}),x.program}makeOption(e,t,n,r){let i=e.description?.replace(/\[(\w+)\]/g,(e,t)=>r?.[t]??`[${t}]`)??``,a=e.name.replaceAll(`-`,``);if(e.isFlag)if(n){let n=e.flags?.map(e=>e.length===1?`-${e}`:`--${e}`).join(`, `).replaceAll(`----`,`--`).replaceAll(`---`,`-`);t.option(n||``,i,String(e.defaultValue)||void 0)}else t.option(e.flags?.join(`, `)+(e.required?` <${a}>`:``),i,e.defaultValue);else t.argument(e.required?`<${e.name}>`:`[${e.name}]`,i,e.defaultValue)}static async parse(t){return(await new e(t.app,t).build()).parseAsync()}},B=class e extends c.ConsoleKernel{constructor(e){super(e),this.app=e}static init(t){let n=new e(t);Promise.all([n.loadRequirements()]).then(([e])=>e.run())}async run(){await z.parse(this),process.exit(0)}async loadRequirements(){this.cwd=p.default.join(process.cwd(),this.basePath),this.modulePath=l.FileSystem.findModulePkg(`@h3ravel/core`,this.cwd)??``,this.consolePath=l.FileSystem.findModulePkg(`@h3ravel/console`,this.cwd)??``;try{this.modulePackage=await import(p.default.join(this.modulePath,`package.json`))}catch{this.modulePackage={version:`N/A`}}try{this.consolePackage=await import(p.default.join(this.consolePath,`package.json`))}catch{this.consolePackage={version:`N/A`}}return this}},V=class extends c.ServiceProvider{static priority=992;static console=!0;register(){}boot(){B.init(this.app),process.on(`SIGINT`,()=>{process.exit(0)}),process.on(`SIGTERM`,()=>{process.exit(0)})}},H=class{async fire(){let e=new c.Application(process.cwd()),t=app_path(`Providers/*.js`).replace(`/src/`,`/.h3ravel/serve/`);for await(let e of(0,u.glob)(t)){let t=p.default.basename(e).replace(`.js`,``);try{M.push((await import(e))[t])}catch{}}M.push(V),e.registerProviders(M),await e.registerConfiguredProviders(),await e.boot()}};new H().fire();
package/bin/fire.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import"tsx/esm";import{Application as e,ConsoleCommand as t,ConsoleKernel as n,ServiceProvider as r}from"@h3ravel/core";import{FileSystem as i,Logger as a}from"@h3ravel/shared";import{glob as o,mkdir as s,readFile as c,writeFile as l}from"node:fs/promises";import{beforeLast as u}from"@h3ravel/support";import d from"dayjs";import{existsSync as f}from"node:fs";import p from"node:path";import{HttpServiceProvider as m}from"@h3ravel/http";import{AssetsServiceProvider as h,RouteServiceProvider as g}from"@h3ravel/router";import{DatabaseServiceProvider as _}from"@h3ravel/database";import{CacheServiceProvider as v}from"@h3ravel/cache";import{QueueServiceProvider as y}from"@h3ravel/queue";import{MailServiceProvider as b}from"@h3ravel/mail";import{ConfigServiceProvider as x}from"@h3ravel/config";import{Option as S,program as C}from"commander";import{dirname as w,join as T,resolve as E}from"path";import{fork as D}from"child_process";import{build as O}from"tsdown";var k=class extends t{};String.raw`
2
+ import"tsx/esm";import{Application as e,ConsoleCommand as t,ConsoleKernel as n,ServiceProvider as r}from"@h3ravel/core";import{FileSystem as i,Logger as a}from"@h3ravel/shared";import{glob as o,mkdir as s,readFile as c,writeFile as l}from"node:fs/promises";import{beforeLast as u}from"@h3ravel/support";import d from"dayjs";import f from"node:path";import{HttpServiceProvider as p}from"@h3ravel/http";import{AssetsServiceProvider as m,RouteServiceProvider as h}from"@h3ravel/router";import{DatabaseServiceProvider as g}from"@h3ravel/database";import{CacheServiceProvider as _}from"@h3ravel/cache";import{QueueServiceProvider as v}from"@h3ravel/queue";import{MailServiceProvider as y}from"@h3ravel/mail";import{ConfigServiceProvider as b}from"@h3ravel/config";import{Option as x,program as S}from"commander";import{dirname as C,join as w,resolve as T}from"path";import{fork as E}from"child_process";import{build as D}from"tsdown";var O=class extends t{};String.raw`
3
3
  111
4
4
  111111111
5
5
  1111111111 111111
@@ -21,19 +21,19 @@ import"tsx/esm";import{Application as e,ConsoleCommand as t,ConsoleKernel as n,S
21
21
  111111 111 111111
22
22
  111111111
23
23
  110
24
- `;const A=String.raw`
24
+ `;const k=String.raw`
25
25
  _ _ _____ _
26
26
  | | | |___ / _ __ __ ___ _____| |
27
27
  | |_| | |_ \| '__/ _ \ \ / / _ \ |
28
28
  | _ |___) | | | (_| |\ V / __/ |
29
29
  |_| |_|____/|_| \__,_| \_/ \___|_|
30
30
 
31
- `;var j=class extends k{signature=`list`;description=`List all available commands`;async handle(){let e=[{short:`-h`,long:`--help`,description:`Display help for the given command. When no command is given display help for the list command`}].concat(this.program.options).map(e=>a.describe(a.log(` `+[e.short,e.long].filter(e=>!!e).join(`, `),`green`,!1),e.description,25,!1).join(``)),t=this.program.commands.map(e=>a.describe(a.log(` `+e.name(),`green`,!1),e.description(),25,!1).join(``)).reduce((e,t)=>{let n=t.replace(/\x1b\[\d+m/g,``),r=n.includes(`:`)?n.split(`:`)[0].trim():`__root__`;return e[r]??=[],e[r].push(t),e},{}),n=Object.entries(t).map(([e,t])=>{let n=e===`__root__`?``:e;return[a.log(n,`yellow`,!1),t.join(`
31
+ `;var A=class extends O{signature=`list`;description=`List all available commands`;async handle(){let e=[{short:`-h`,long:`--help`,description:`Display help for the given command. When no command is given display help for the list command`}].concat(this.program.options).map(e=>a.describe(a.log(` `+[e.short,e.long].filter(e=>!!e).join(`, `),`green`,!1),e.description,25,!1).join(``)),t=this.program.commands.map(e=>a.describe(a.log(` `+e.name(),`green`,!1),e.description(),25,!1).join(``)).reduce((e,t)=>{let n=t.replace(/\x1b\[\d+m/g,``),r=n.includes(`:`)?n.split(`:`)[0].trim():`__root__`;return e[r]??=[],e[r].push(t),e},{}),n=Object.entries(t).map(([e,t])=>{let n=e===`__root__`?``:e;return[a.log(n,`yellow`,!1),t.join(`
32
32
  `)].join(`
33
- `)});a.log([[`H3ravel Framework`,`white`],[this.kernel.modulePackage.version,`green`]],` `),console.log(``),console.log(A),console.log(``),a.log(`Usage:`,`yellow`),a.log(` command [options] [arguments]`,`white`),console.log(``),a.log(`Options:`,`yellow`),console.log(e.join(`
33
+ `)});a.log([[`H3ravel Framework`,`white`],[this.kernel.modulePackage.version,`green`]],` `),console.log(``),console.log(k),console.log(``),a.log(`Usage:`,`yellow`),a.log(` command [options] [arguments]`,`white`),console.log(``),a.log(`Options:`,`yellow`),console.log(e.join(`
34
34
  `).trim()),console.log(``),a.log(`Available Commands:`,`yellow`),console.log(n.join(`
35
35
 
36
- `).trim())}},M=class e{static CREATE_PATTERNS=[/^create_(\w+)_table$/,/^create_(\w+)$/];static CHANGE_PATTERNS=[/.+_(to|from|in)_(\w+)_table$/,/.+_(to|from|in)_(\w+)$/];static guess(t){for(let n of e.CREATE_PATTERNS){let e=t.match(n);if(e)return[e[1],!0]}for(let n of e.CHANGE_PATTERNS){let e=t.match(n);if(e)return[e[2],!1]}return[]}},N=class extends k{signature=`#make:
36
+ `).trim())}},j=class e{static CREATE_PATTERNS=[/^create_(\w+)_table$/,/^create_(\w+)$/];static CHANGE_PATTERNS=[/.+_(to|from|in)_(\w+)_table$/,/.+_(to|from|in)_(\w+)$/];static guess(t){for(let n of e.CREATE_PATTERNS){let e=t.match(n);if(e)return[e[1],!0]}for(let n of e.CHANGE_PATTERNS){let e=t.match(n);if(e)return[e[2],!1]}return[]}},M=class extends O{signature=`#make:
37
37
  {controller : Create a new controller class.
38
38
  | {--a|api : Exclude the create and edit methods from the controller}
39
39
  | {--m|model= : Generate a resource controller for the given model}
@@ -66,5 +66,5 @@ import"tsx/esm";import{Application as e,ConsoleCommand as t,ConsoleKernel as n,S
66
66
  | {--force : Create the model even if it already exists}
67
67
  }
68
68
  {^name : The name of the [name] to generate}
69
- `;description=`Generate component classes`;async handle(){let e=this.dictionary.baseCommand??this.dictionary.name,t={controller:`makeController`,resource:`makeResource`,migration:`makeMigration`,factory:`makeFactory`,seeder:`makeSeeder`,model:`makeModel`,view:`makeView`};try{await this?.[t[e]]()}catch(e){a.error(e)}}async makeController(){let e=this.option(`api`)?`-resource`:``,t=this.argument(`name`),n=this.option(`force`),r=p.join(app_path(`Http/Controllers`),t+`.ts`),o=i.findModulePkg(`@h3ravel/http`,this.kernel.cwd)??``,s=p.join(o,`dist/stubs/controller${e}.stub`);!n&&f(r)&&a.error(`ERORR: ${t} controller already exists`);let u=await c(s,`utf-8`);u=u.replace(/{{ name }}/g,t),await l(r,u),a.split(`INFO: Controller Created`,a.log(p.basename(r),`gray`,!1))}makeResource(){a.success(`Resource support is not yet available`)}async makeMigration(){let e=this.argument(`name`),t=d().format(`YYYY_MM_DD_HHmmss`),n=p.join(database_path(`migrations`),`${t}_${e}.ts`),r=i.findModulePkg(`@h3ravel/database`,this.kernel.cwd)??``,o=this.option(`create`,!1),s=this.option(`table`);if(!s&&typeof o==`string`&&(s=o,o=!0),!s){let t=M.guess(e);s=t[0],o=!!t[1]}let u=p.join(r,this.getMigrationStubName(s,o)),f=await c(u,`utf-8`);s!==null&&(f=f.replace(/DummyTable|{{\s*table\s*}}/g,s)),a.info(`INFO: Creating Migration`),await this.kernel.ensureDirectoryExists(p.dirname(n)),await l(n,f),a.split(`INFO: Migration Created`,a.log(p.basename(n),`gray`,!1))}makeFactory(){a.success(`Factory support is not yet available`)}makeSeeder(){a.success(`Seeder support is not yet available`)}async makeModel(){let e=this.option(`type`,`ts`),t=this.argument(`name`),n=this.argument(`force`),r=p.join(app_path(`Models`),t.toLowerCase(),`.`+e);!n&&f(r)&&a.error(`ERORR: ${t} view already exists`);let o=i.findModulePkg(`@h3ravel/database`,this.kernel.cwd)??``,s=p.join(o,`dist/stubs/model-${e}.stub`),u=await c(s,`utf-8`);u=u.replace(/{{ name }}/g,t),await l(r,u),a.split(`INFO: Model Created`,a.log(p.basename(r),`gray`,!1))}async makeView(){let e=this.argument(`name`),t=this.option(`force`),n=p.join(base_path(`src/resources/views`),e+`.edge`);e.includes(`/`)&&await s(u(n,`/`),{recursive:!0}),!t&&f(n)&&a.error(`ERORR: ${e} view already exists`),await l(n,`{{-- src/resources/views/${e}.edge --}}`),a.split(`INFO: View Created`,a.log(`src/resources/views/${e}.edge`,`gray`,!1))}getMigrationStubName(e,t=!1,n=`ts`){let r;return r=e?t?`migration.create-${n}.stub`:`migration.update-${n}.stub`:`migration-${n}.stub`,`dist/stubs/`+r}},P=class extends k{signature=`postinstall`;description=`Default post installation command`;async handle(){this.createSqliteDB()}async createSqliteDB(){config(`database.default`)===`sqlite`&&(await i.fileExists(database_path())||await s(database_path(),{recursive:!0}),await i.fileExists(database_path(`db.sqlite`))||await l(database_path(`db.sqlite`),``))}},F=[m,x,g,h,_,v,y,b],I=class e{static parseOptions(t){let n=[],r=/\{([^{}]+(?:\{[^{}]*\}[^{}]*)*)\}/g,i;for(;(i=r.exec(t))!==null;){let t=i[1][0]===`^`||/:[#^]/.test(i[1]),r=([`#`,`^`].includes(i[1][0])||/:[#^]/.test(i[1]))&&!t,a=i[1].trim().replace(/[#^]/,``),o=a.indexOf(`:`);if(o===-1){n.push({name:a});continue}let s=a.substring(0,o).trim(),c=a.substring(o+1).trim(),l=c,u,d=c.indexOf(`|`);if(d!==-1){l=c.substring(0,d).trim();let t=c.substring(d+1).trim().replace(/^\{/,``).trim();u=e.parseOptions(`{`+t+`}`)}else l=l.trim();let f=s,p=/[^a-zA-Z0-9_|-]/.test(f),m=!1;f.endsWith(`?*`)?(p=!1,m=!0,f=f.slice(0,-2)):f.endsWith(`*`)?(m=!0,f=f.slice(0,-1)):f.endsWith(`?`)&&(p=!1,f=f.slice(0,-1));let h=f.startsWith(`--`),g,_;if(h){let e=f.split(`|`).map(e=>e.trim());g=[];for(let t of e){t.startsWith(`--`)&&t.slice(2).length===1?t=`-`+t.slice(2):t.startsWith(`-`)&&!t.startsWith(`--`)&&t.slice(1).length>1?t=`--`+t.slice(1):!t.startsWith(`-`)&&t.slice(1).length>1&&(t=`--`+t);let e=t.indexOf(`=`);if(e!==-1){g.push(t.substring(0,e));let n=t.substring(e+1);_=n===`*`?[]:n===`true`||n===`false`||!n&&!p?n===`true`:isNaN(Number(n))?n:Number(n)}else g.push(t)}}n.push({name:h?g[g.length-1]:f,required:p,multiple:m,description:l,flags:g,shared:t,isFlag:h,isHidden:r,defaultValue:_,nestedOptions:u})}return n}static parseSignature(t,n){let r=t.split(`
70
- `).map(e=>e.trim()).filter(e=>e.length>0),i=[`#`,`^`].includes(r[0][0])||/:[#^]/.test(r[0]),a=r[0].replace(/[^\w=:-]/g,``),o=n.getDescription(),s=a.endsWith(`:`),c=r.slice(1).join(` `),l=e.parseOptions(c);return s?{baseCommand:a.slice(0,-1),isNamespaceCommand:s,subCommands:l.filter(e=>!e.flags&&!e.isHidden),description:o,commandClass:n,options:l.filter(e=>!!e.flags),isHidden:i}:{baseCommand:a,isNamespaceCommand:s,options:l,description:o,commandClass:n,isHidden:i}}};function L(e={}){let t,n,r=e.args||[],i=e.allowRestarts||!1,a=e.input,o=e.options||e;return delete o.args,delete o.allowRestarts,{name:`run`,buildStart(e){let n=a??e.input;if(typeof n==`string`&&(n=[n]),typeof n==`object`&&(n=Object.values(n)),n.length>1)throw Error("@rollup/plugin-run must have a single entry point; consider setting the `input` option");t=E(n[0])},generateBundle(e,t,n){n||this.error(`@rollup/plugin-run currently only works with bundles that are written to disk`)},writeBundle(e,a){let s=(e,t)=>{n&&n.kill(),n=D(T(e,t),r,o)},c=e.dir||w(e.file),l=Object.keys(a).find(e=>{let n=a[e];return n.isEntry&&n.facadeModuleId===t});l?(s(c,l),i&&(process.stdin.resume(),process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{let t=e.toString().trim().toLowerCase();t===`rs`||t===`restart`||e.toString().charCodeAt(0)===11?s(c,l):(t===`cls`||t===`clear`||e.toString().charCodeAt(0)===12)&&console.clear()}))):this.error(`@rollup/plugin-run could not find output chunk`)}}}const R=process.env.NODE_ENV||`development`,z=R===`development`?`.h3ravel/serve`:`dist`;var B={outDir:z,entry:[`src/**/*.ts`],format:[`esm`],target:`node22`,sourcemap:R===`development`,clean:!0,shims:!0,copy:[{from:`public`,to:z},`src/resources`,`src/database`],env:R===`development`?{NODE_ENV:R,SRC_PATH:z}:{},watch:R===`development`&&process.env.CLI_BUILD!==`true`?[`.env`,`.env.*`,`src`,`../../packages`]:!1,dts:!1,logLevel:`silent`,nodeProtocol:!0,skipNodeModulesBundle:!0,plugins:R===`development`&&process.env.CLI_BUILD!==`true`?[L({env:Object.assign({},process.env,{NODE_ENV:R,SRC_PATH:z}),execArgv:[`-r`,`source-map-support/register`],allowRestarts:!1,input:process.cwd()+`/src/server.ts`})]:[]},V=class e{commands=[];constructor(e,t){this.app=e,this.kernel=t}async build(){return this.loadBaseCommands(),await this.loadDiscoveredCommands(),this.initialize()}loadBaseCommands(){[new N(this.app,this.kernel),new j(this.app,this.kernel),new P(this.app,this.kernel)].forEach(e=>this.addCommand(e))}async loadDiscoveredCommands(){let e=[...this.app.registeredCommands.map(e=>new e(this.app,this.kernel))],t=app_path(`Console/Commands/*.js`).replace(`/src/`,`/.h3ravel/serve/`);for await(let n of o(t)){let t=p.basename(n).replace(`.js`,``);try{let r=(await import(n))[t];e.push(new r(this.app,this.kernel))}catch{}}e.forEach(e=>this.addCommand(e))}addCommand(e){this.commands.push(I.parseSignature(e.getSignature(),e))}initialize(){let e=a.parse([[`Musket CLI:`,`white`],[this.kernel.consolePackage.version,`green`]],` `,!1),t=a.parse([[`H3ravel Framework:`,`white`],[this.kernel.modulePackage.version,`green`]],` `,!1),n={quiet:[`-q, --quiet`,`Do not output any message`],silent:[`--silent`,`Do not output any message`],verbose:[`-v, --verbose <number>`,`Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug`],lock:[`--lock`,`Locked and loaded, do not ask any interactive question`]};C.name(`musket`).version(`${e}\n${t}`).description(A).addOption(new S(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new S(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new S(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new S(n.lock[0],n.lock[1])).action(async()=>{let e=new j(this.app,this.kernel);e.setInput(C.opts(),C.args,C.registeredArguments,{},C),e.handle()}),C.command(`init`).description(`Initialize H3ravel.`).action(async()=>{a.success(`Initialized: H3ravel has been initialized!`)});for(let e=0;e<this.commands.length;e++){let t=this.commands[e],r=t.commandClass;if(t.isNamespaceCommand&&t.subCommands){let e=t.isHidden?C:C.command(t.baseCommand).description(t.description??``).addOption(new S(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new S(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new S(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new S(n.lock[0],n.lock[1])).action(async()=>{r.setInput(e.opts(),e.args,e.registeredArguments,t,C),await r.handle()});(t.options?.length??0)>0&&t.options?.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(t=>{this.makeOption(t,e)}),t.subCommands.filter((e,t,n)=>!e.shared&&n.findIndex(t=>t.name===e.name)===t).forEach(e=>{let i=C.command(`${t.baseCommand}:${e.name}`).description(e.description||``).addOption(new S(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new S(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new S(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new S(n.lock[0],n.lock[1])).action(async()=>{r.setInput(i.opts(),i.args,i.registeredArguments,e,C),await r.handle()});t.subCommands?.filter(e=>e.shared).forEach(t=>{this.makeOption(t,i,!1,e)}),t.options?.filter(e=>e.shared).forEach(t=>{this.makeOption(t,i,!1,e)}),e.nestedOptions&&e.nestedOptions.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(e=>{this.makeOption(e,i)})})}else{let e=C.command(t.baseCommand).description(t.description??``);t?.options?.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(t=>{this.makeOption(t,e,!0)}),e.action(async()=>{r.setInput(e.opts(),e.args,e.registeredArguments,t,C),await r.handle()})}}return C.hook(`preAction`,async(e,t)=>{t.name()!==`fire`&&await O({...B,watch:!1,plugins:[]})}),C}makeOption(e,t,n,r){let i=e.description?.replace(/\[(\w+)\]/g,(e,t)=>r?.[t]??`[${t}]`)??``,a=e.name.replaceAll(`-`,``);if(e.isFlag)if(n){let n=e.flags?.map(e=>e.length===1?`-${e}`:`--${e}`).join(`, `).replaceAll(`----`,`--`).replaceAll(`---`,`-`);t.option(n||``,i,String(e.defaultValue)||void 0)}else t.option(e.flags?.join(`, `)+(e.required?` <${a}>`:``),i,e.defaultValue);else t.argument(e.required?`<${e.name}>`:`[${e.name}]`,i,e.defaultValue)}static async parse(t){return(await new e(t.app,t).build()).parseAsync()}},H=class e extends n{constructor(e){super(e),this.app=e}static init(t){let n=new e(t);Promise.all([n.loadRequirements()]).then(([e])=>e.run())}async run(){await V.parse(this),process.exit(0)}async loadRequirements(){this.cwd=p.join(process.cwd(),this.basePath),this.modulePath=i.findModulePkg(`@h3ravel/core`,this.cwd)??``,this.consolePath=i.findModulePkg(`@h3ravel/console`,this.cwd)??``;try{this.modulePackage=await import(p.join(this.modulePath,`package.json`))}catch{this.modulePackage={version:`N/A`}}try{this.consolePackage=await import(p.join(this.consolePath,`package.json`))}catch{this.consolePackage={version:`N/A`}}return this}},U=class extends r{static priority=992;static console=!0;register(){}boot(){H.init(this.app),process.on(`SIGINT`,()=>{process.exit(0)}),process.on(`SIGTERM`,()=>{process.exit(0)})}};new class{async fire(){let t=new e(process.cwd()),n=(app_path(`Providers/*.js`).replace(`/src/`,`/.h3ravel/serve/`));for await(let e of o(n)){let t=(p.basename(e).replace(`.js`,``));try{F.push((await import(e))[t])}catch{}}F.push(U),t.registerProviders(F),await t.registerConfiguredProviders(),await t.boot()}}().fire();export{};
69
+ `;description=`Generate component classes`;async handle(){let e=this.dictionary.baseCommand??this.dictionary.name;this.argument(`name`)||this.program.error(`Please provide a valid name for the `+e);let t={controller:`makeController`,resource:`makeResource`,migration:`makeMigration`,factory:`makeFactory`,seeder:`makeSeeder`,model:`makeModel`,view:`makeView`};try{await this?.[t[e]]()}catch(e){a.error(e)}}async makeController(){let e=this.option(`api`)?`-resource`:``,t=this.argument(`name`),n=this.option(`force`),r=app_path(`Http/Controllers/${t}.ts`),o=i.findModulePkg(`@h3ravel/http`,this.kernel.cwd)??``,s=f.join(o,`dist/stubs/controller${e}.stub`);!n&&await i.fileExists(r)&&a.error(`ERORR: ${t} controller already exists`);let u=await c(s,`utf-8`);u=u.replace(/{{ name }}/g,t),await l(r,u),a.split(`INFO: Controller Created`,a.log(f.basename(r),`gray`,!1))}makeResource(){a.success(`Resource support is not yet available`)}async makeMigration(){let e=this.argument(`name`),t=d().format(`YYYY_MM_DD_HHmmss`),n=database_path(`migrations/${t}_${e}.ts`),r=i.findModulePkg(`@h3ravel/database`,this.kernel.cwd)??``,o=this.option(`create`,!1),s=this.option(`table`);if(!s&&typeof o==`string`&&(s=o,o=!0),!s){let t=j.guess(e);s=t[0],o=!!t[1]}let u=f.join(r,this.getMigrationStubName(s,o)),p=await c(u,`utf-8`);s!==null&&(p=p.replace(/DummyTable|{{\s*table\s*}}/g,s)),a.info(`INFO: Creating Migration`),await this.kernel.ensureDirectoryExists(f.dirname(n)),await l(n,p),a.split(`INFO: Migration Created`,a.log(f.basename(n),`gray`,!1))}makeFactory(){a.success(`Factory support is not yet available`)}makeSeeder(){a.success(`Seeder support is not yet available`)}async makeModel(){let e=this.option(`type`,`ts`),t=this.argument(`name`),n=this.argument(`force`),r=app_path(`Models/${t.toLowerCase()}.${e}`);!n&&await i.fileExists(r)&&a.error(`ERORR: ${t} model already exists`);let o=i.findModulePkg(`@h3ravel/database`,this.kernel.cwd)??``,s=f.join(o,`dist/stubs/model-${e}.stub`),u=await c(s,`utf-8`);u=u.replace(/{{ name }}/g,t),await l(r,u),a.split(`INFO: Model Created`,a.log(f.basename(r),`gray`,!1))}async makeView(){let e=this.argument(`name`),t=this.option(`force`),n=base_path(`src/resources/views/${e}.edge`);e.includes(`/`)&&await s(u(n,`/`),{recursive:!0}),!t&&await i.fileExists(n)&&a.error(`ERORR: ${e} view already exists`),await l(n,`{{-- src/resources/views/${e}.edge --}}`),a.split(`INFO: View Created`,a.log(`src/resources/views/${e}.edge`,`gray`,!1))}getMigrationStubName(e,t=!1,n=`ts`){let r;return r=e?t?`migration.create-${n}.stub`:`migration.update-${n}.stub`:`migration-${n}.stub`,`dist/stubs/`+r}},N=class extends O{signature=`postinstall`;description=`Default post installation command`;async handle(){this.createSqliteDB()}async createSqliteDB(){config(`database.default`)===`sqlite`&&(await i.fileExists(database_path())||await s(database_path(),{recursive:!0}),await i.fileExists(database_path(`db.sqlite`))||await l(database_path(`db.sqlite`),``))}},P=[p,b,h,m,g,_,v,y],F=class e{static parseOptions(t){let n=[],r=/\{([^{}]+(?:\{[^{}]*\}[^{}]*)*)\}/g,i;for(;(i=r.exec(t))!==null;){let t=i[1][0]===`^`||/:[#^]/.test(i[1]),r=([`#`,`^`].includes(i[1][0])||/:[#^]/.test(i[1]))&&!t,a=i[1].trim().replace(/[#^]/,``),o=a.indexOf(`:`);if(o===-1){n.push({name:a});continue}let s=a.substring(0,o).trim(),c=a.substring(o+1).trim(),l=c,u,d=c.indexOf(`|`);if(d!==-1){l=c.substring(0,d).trim();let t=c.substring(d+1).trim().replace(/^\{/,``).trim();u=e.parseOptions(`{`+t+`}`)}else l=l.trim();let f=s,p=/[^a-zA-Z0-9_|-]/.test(f),m=!1;f.endsWith(`?*`)?(p=!1,m=!0,f=f.slice(0,-2)):f.endsWith(`*`)?(m=!0,f=f.slice(0,-1)):f.endsWith(`?`)&&(p=!1,f=f.slice(0,-1));let h=f.startsWith(`--`),g,_;if(h){let e=f.split(`|`).map(e=>e.trim());g=[];for(let t of e){t.startsWith(`--`)&&t.slice(2).length===1?t=`-`+t.slice(2):t.startsWith(`-`)&&!t.startsWith(`--`)&&t.slice(1).length>1?t=`--`+t.slice(1):!t.startsWith(`-`)&&t.slice(1).length>1&&(t=`--`+t);let e=t.indexOf(`=`);if(e!==-1){g.push(t.substring(0,e));let n=t.substring(e+1);_=n===`*`?[]:n===`true`||n===`false`||!n&&!p?n===`true`:isNaN(Number(n))?n:Number(n)}else g.push(t)}}n.push({name:h?g[g.length-1]:f,required:p,multiple:m,description:l,flags:g,shared:t,isFlag:h,isHidden:r,defaultValue:_,nestedOptions:u})}return n}static parseSignature(t,n){let r=t.split(`
70
+ `).map(e=>e.trim()).filter(e=>e.length>0),i=[`#`,`^`].includes(r[0][0])||/:[#^]/.test(r[0]),a=r[0].replace(/[^\w=:-]/g,``),o=n.getDescription(),s=a.endsWith(`:`),c=r.slice(1).join(` `),l=e.parseOptions(c);return s?{baseCommand:a.slice(0,-1),isNamespaceCommand:s,subCommands:l.filter(e=>!e.flags&&!e.isHidden),description:o,commandClass:n,options:l.filter(e=>!!e.flags),isHidden:i}:{baseCommand:a,isNamespaceCommand:s,options:l,description:o,commandClass:n,isHidden:i}}};function I(e={}){let t,n,r=e.args||[],i=e.allowRestarts||!1,a=e.input,o=e.options||e;return delete o.args,delete o.allowRestarts,{name:`run`,buildStart(e){let n=a??e.input;if(typeof n==`string`&&(n=[n]),typeof n==`object`&&(n=Object.values(n)),n.length>1)throw Error("@rollup/plugin-run must have a single entry point; consider setting the `input` option");t=T(n[0])},generateBundle(e,t,n){n||this.error(`@rollup/plugin-run currently only works with bundles that are written to disk`)},writeBundle(e,a){let s=(e,t)=>{n&&n.kill(),n=E(w(e,t),r,o)},c=e.dir||C(e.file),l=Object.keys(a).find(e=>{let n=a[e];return n.isEntry&&n.facadeModuleId===t});l?(s(c,l),i&&(process.stdin.resume(),process.stdin.setEncoding(`utf8`),process.stdin.on(`data`,e=>{let t=e.toString().trim().toLowerCase();t===`rs`||t===`restart`||e.toString().charCodeAt(0)===11?s(c,l):(t===`cls`||t===`clear`||e.toString().charCodeAt(0)===12)&&console.clear()}))):this.error(`@rollup/plugin-run could not find output chunk`)}}}const L=process.env.NODE_ENV||`development`,R=L===`development`?`.h3ravel/serve`:`dist`;var z={outDir:R,entry:[`src/**/*.ts`],format:[`esm`],target:`node22`,sourcemap:L===`development`,clean:!0,shims:!0,copy:[{from:`public`,to:R},`src/resources`,`src/database`],env:L===`development`?{NODE_ENV:L,SRC_PATH:R}:{},watch:L===`development`&&process.env.CLI_BUILD!==`true`?[`.env`,`.env.*`,`src`,`../../packages`]:!1,dts:!1,logLevel:`silent`,nodeProtocol:!0,skipNodeModulesBundle:!0,plugins:L===`development`&&process.env.CLI_BUILD!==`true`?[I({env:Object.assign({},process.env,{NODE_ENV:L,SRC_PATH:R}),execArgv:[`-r`,`source-map-support/register`],allowRestarts:!1,input:process.cwd()+`/src/server.ts`})]:[]},B=class e{commands=[];constructor(e,t){this.app=e,this.kernel=t}async build(){return this.loadBaseCommands(),await this.loadDiscoveredCommands(),this.initialize()}loadBaseCommands(){[new M(this.app,this.kernel),new A(this.app,this.kernel),new N(this.app,this.kernel)].forEach(e=>this.addCommand(e))}async loadDiscoveredCommands(){let e=[...this.app.registeredCommands.map(e=>new e(this.app,this.kernel))],t=app_path(`Console/Commands/*.js`).replace(`/src/`,`/.h3ravel/serve/`);for await(let n of o(t)){let t=f.basename(n).replace(`.js`,``);try{let r=(await import(n))[t];e.push(new r(this.app,this.kernel))}catch{}}e.forEach(e=>this.addCommand(e))}addCommand(e){this.commands.push(F.parseSignature(e.getSignature(),e))}initialize(){let e=a.parse([[`Musket CLI:`,`white`],[this.kernel.consolePackage.version,`green`]],` `,!1),t=a.parse([[`H3ravel Framework:`,`white`],[this.kernel.modulePackage.version,`green`]],` `,!1),n={quiet:[`-q, --quiet`,`Do not output any message`],silent:[`--silent`,`Do not output any message`],verbose:[`-v, --verbose <number>`,`Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug`],lock:[`--lock`,`Locked and loaded, do not ask any interactive question`]};S.name(`musket`).version(`${e}\n${t}`).description(k).addOption(new x(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new x(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new x(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new x(n.lock[0],n.lock[1])).action(async()=>{let e=new A(this.app,this.kernel);e.setInput(S.opts(),S.args,S.registeredArguments,{},S),e.handle()}),S.command(`init`).description(`Initialize H3ravel.`).action(async()=>{a.success(`Initialized: H3ravel has been initialized!`)});for(let e=0;e<this.commands.length;e++){let t=this.commands[e],r=t.commandClass;if(t.isNamespaceCommand&&t.subCommands){let e=t.isHidden?S:S.command(t.baseCommand).description(t.description??``).addOption(new x(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new x(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new x(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new x(n.lock[0],n.lock[1])).action(async()=>{r.setInput(e.opts(),e.args,e.registeredArguments,t,S),await r.handle()});(t.options?.length??0)>0&&t.options?.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(t=>{this.makeOption(t,e)}),t.subCommands.filter((e,t,n)=>!e.shared&&n.findIndex(t=>t.name===e.name)===t).forEach(e=>{let i=S.command(`${t.baseCommand}:${e.name}`).description(e.description||``).addOption(new x(n.quiet[0],n.quiet[1]).implies({silent:!0})).addOption(new x(n.silent[0],n.silent[1]).implies({quiet:!0})).addOption(new x(n.verbose[0],n.verbose[1]).choices([`1`,`2`,`3`])).addOption(new x(n.lock[0],n.lock[1])).action(async()=>{r.setInput(i.opts(),i.args,i.registeredArguments,e,S),await r.handle()});t.subCommands?.filter(e=>e.shared).forEach(t=>{this.makeOption(t,i,!1,e)}),t.options?.filter(e=>e.shared).forEach(t=>{this.makeOption(t,i,!1,e)}),e.nestedOptions&&e.nestedOptions.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(e=>{this.makeOption(e,i)})})}else{let e=S.command(t.baseCommand).description(t.description??``);t?.options?.filter((e,t,n)=>n.findIndex(t=>t.name===e.name)===t).forEach(t=>{this.makeOption(t,e,!0)}),e.action(async()=>{r.setInput(e.opts(),e.args,e.registeredArguments,t,S),await r.handle()})}}return S.hook(`preAction`,async(e,t)=>{t.name()!==`fire`&&await D({...z,watch:!1,plugins:[]})}),S}makeOption(e,t,n,r){let i=e.description?.replace(/\[(\w+)\]/g,(e,t)=>r?.[t]??`[${t}]`)??``,a=e.name.replaceAll(`-`,``);if(e.isFlag)if(n){let n=e.flags?.map(e=>e.length===1?`-${e}`:`--${e}`).join(`, `).replaceAll(`----`,`--`).replaceAll(`---`,`-`);t.option(n||``,i,String(e.defaultValue)||void 0)}else t.option(e.flags?.join(`, `)+(e.required?` <${a}>`:``),i,e.defaultValue);else t.argument(e.required?`<${e.name}>`:`[${e.name}]`,i,e.defaultValue)}static async parse(t){return(await new e(t.app,t).build()).parseAsync()}},V=class e extends n{constructor(e){super(e),this.app=e}static init(t){let n=new e(t);Promise.all([n.loadRequirements()]).then(([e])=>e.run())}async run(){await B.parse(this),process.exit(0)}async loadRequirements(){this.cwd=f.join(process.cwd(),this.basePath),this.modulePath=i.findModulePkg(`@h3ravel/core`,this.cwd)??``,this.consolePath=i.findModulePkg(`@h3ravel/console`,this.cwd)??``;try{this.modulePackage=await import(f.join(this.modulePath,`package.json`))}catch{this.modulePackage={version:`N/A`}}try{this.consolePackage=await import(f.join(this.consolePath,`package.json`))}catch{this.consolePackage={version:`N/A`}}return this}},H=class extends r{static priority=992;static console=!0;register(){}boot(){V.init(this.app),process.on(`SIGINT`,()=>{process.exit(0)}),process.on(`SIGTERM`,()=>{process.exit(0)})}};new class{async fire(){let t=new e(process.cwd()),n=(app_path(`Providers/*.js`).replace(`/src/`,`/.h3ravel/serve/`));for await(let e of o(n)){let t=(f.basename(e).replace(`.js`,``));try{P.push((await import(e))[t])}catch{}}P.push(H),t.registerProviders(P),await t.registerConfiguredProviders(),await t.boot()}}().fire();export{};
package/dist/index.cjs CHANGED
@@ -32,8 +32,6 @@ let __h3ravel_support = require("@h3ravel/support");
32
32
  __h3ravel_support = __toESM(__h3ravel_support);
33
33
  let dayjs = require("dayjs");
34
34
  dayjs = __toESM(dayjs);
35
- let node_fs = require("node:fs");
36
- node_fs = __toESM(node_fs);
37
35
  let node_path = require("node:path");
38
36
  node_path = __toESM(node_path);
39
37
  require("@h3ravel/http");
@@ -195,6 +193,7 @@ var MakeCommand = class extends Command {
195
193
  description = "Generate component classes";
196
194
  async handle() {
197
195
  const command = this.dictionary.baseCommand ?? this.dictionary.name;
196
+ if (!this.argument("name")) this.program.error("Please provide a valid name for the " + command);
198
197
  const methods = {
199
198
  controller: "makeController",
200
199
  resource: "makeResource",
@@ -217,11 +216,11 @@ var MakeCommand = class extends Command {
217
216
  const type = this.option("api") ? "-resource" : "";
218
217
  const name = this.argument("name");
219
218
  const force = this.option("force");
220
- const path$4 = node_path.default.join(app_path("Http/Controllers"), name + ".ts");
219
+ const path$4 = app_path(`Http/Controllers/${name}.ts`);
221
220
  const crtlrPath = __h3ravel_shared.FileSystem.findModulePkg("@h3ravel/http", this.kernel.cwd) ?? "";
222
221
  const stubPath = node_path.default.join(crtlrPath, `dist/stubs/controller${type}.stub`);
223
222
  /** Check if the controller already exists */
224
- if (!force && (0, node_fs.existsSync)(path$4)) __h3ravel_shared.Logger.error(`ERORR: ${name} controller already exists`);
223
+ if (!force && await __h3ravel_shared.FileSystem.fileExists(path$4)) __h3ravel_shared.Logger.error(`ERORR: ${name} controller already exists`);
225
224
  let stub = await (0, node_fs_promises.readFile)(stubPath, "utf-8");
226
225
  stub = stub.replace(/{{ name }}/g, name);
227
226
  await (0, node_fs_promises.writeFile)(path$4, stub);
@@ -236,7 +235,7 @@ var MakeCommand = class extends Command {
236
235
  async makeMigration() {
237
236
  const name = this.argument("name");
238
237
  const datePrefix = (0, dayjs.default)().format("YYYY_MM_DD_HHmmss");
239
- const path$4 = node_path.default.join(database_path("migrations"), `${datePrefix}_${name}.ts`);
238
+ const path$4 = database_path(`migrations/${datePrefix}_${name}.ts`);
240
239
  const crtlrPath = __h3ravel_shared.FileSystem.findModulePkg("@h3ravel/database", this.kernel.cwd) ?? "";
241
240
  let create = this.option("create", false);
242
241
  let table = this.option("table");
@@ -276,9 +275,9 @@ var MakeCommand = class extends Command {
276
275
  const type = this.option("type", "ts");
277
276
  const name = this.argument("name");
278
277
  const force = this.argument("force");
279
- const path$4 = node_path.default.join(app_path("Models"), name.toLowerCase(), "." + type);
278
+ const path$4 = app_path(`Models/${name.toLowerCase()}.${type}`);
280
279
  /** Check if the model already exists */
281
- if (!force && (0, node_fs.existsSync)(path$4)) __h3ravel_shared.Logger.error(`ERORR: ${name} view already exists`);
280
+ if (!force && await __h3ravel_shared.FileSystem.fileExists(path$4)) __h3ravel_shared.Logger.error(`ERORR: ${name} model already exists`);
282
281
  const crtlrPath = __h3ravel_shared.FileSystem.findModulePkg("@h3ravel/database", this.kernel.cwd) ?? "";
283
282
  const stubPath = node_path.default.join(crtlrPath, `dist/stubs/model-${type}.stub`);
284
283
  let stub = await (0, node_fs_promises.readFile)(stubPath, "utf-8");
@@ -292,10 +291,10 @@ var MakeCommand = class extends Command {
292
291
  async makeView() {
293
292
  const name = this.argument("name");
294
293
  const force = this.option("force");
295
- const path$4 = node_path.default.join(base_path("src/resources/views"), name + ".edge");
294
+ const path$4 = base_path(`src/resources/views/${name}.edge`);
296
295
  if (name.includes("/")) await (0, node_fs_promises.mkdir)((0, __h3ravel_support.beforeLast)(path$4, "/"), { recursive: true });
297
296
  /** Check if the view already exists */
298
- if (!force && (0, node_fs.existsSync)(path$4)) __h3ravel_shared.Logger.error(`ERORR: ${name} view already exists`);
297
+ if (!force && await __h3ravel_shared.FileSystem.fileExists(path$4)) __h3ravel_shared.Logger.error(`ERORR: ${name} view already exists`);
299
298
  await (0, node_fs_promises.writeFile)(path$4, `{{-- src/resources/views/${name}.edge --}}`);
300
299
  __h3ravel_shared.Logger.split("INFO: View Created", __h3ravel_shared.Logger.log(`src/resources/views/${name}.edge`, "gray", false));
301
300
  }
@@ -336,6 +335,7 @@ var PostinstallCommand = class extends Command {
336
335
  }
337
336
  /**
338
337
  * Create sqlite database if none exist
338
+ *
339
339
  * @returns
340
340
  */
341
341
  async createSqliteDB() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["ConsoleCommand","Logger","e","path","nodepath","FileSystem","Logger","TableGuesser","stub: string","FileSystem","options: CommandOption[]","nestedOptions: CommandOption[] | undefined","flags: string[] | undefined","defaultValue: string | number | boolean | undefined | string[]","dir","entryFileName","TsDownConfig: Options","app: Application","kernel: Kernel","commands: Command[]","path","Logger","Option","program","i","cmd","TsDownConfig","ConsoleKernel","app: Application","path","FileSystem","ServiceProvider"],"sources":["../src/Commands/Command.ts","../src/logo.ts","../src/Commands/ListCommand.ts","../src/Commands/MakeCommand.ts","../src/Commands/PostinstallCommand.ts","../src/Signature.ts","../../../node_modules/.pnpm/@rollup+plugin-run@3.1.0/node_modules/@rollup/plugin-run/dist/es/index.js","../src/TsdownConfig.ts","../src/Musket.ts","../src/Kernel.ts","../src/Providers/ConsoleServiceProvider.ts"],"sourcesContent":["import { ConsoleCommand } from '@h3ravel/core'\n\nexport class Command extends ConsoleCommand { }\n","export const logo = String.raw`\n 111 \n 111111111 \n 1111111111 111111 \n 111111 111 111111 \n 111111 111 111111 \n11111 111 11111 \n1111111 111 1111111 \n111 11111 111 111111 111 1111 1111 11111111 1111\n111 11111 1111 111111 111 1111 1111 1111 11111 1111\n111 11111 11111 111 1111 1111 111111111111 111111111111 1111 1111111 1111\n111 111111 1111 111 111111111111 111111 11111 1111 111 1111 11111111 1111 1111\n111 111 11111111 111 1101 1101 111111111 11111111 1111 1111111111111111101\n111 1111111111111111 1111 111 1111 1111 111 11111011 1111 111 1111111 1101 1111\n111 11111 1110111111111111 111 1111 1111 1111111101 1111 111111111 1111011 111111111 1111\n1111111 111110111110 111 1111 1111 111111 1111 11011101 10111 11111 1111\n11011 111111 11 11111 \n 111111 11101 111111 \n 111111 111 111111 \n 111111 111 111111 \n 111111111 \n 110 \n`\n\nexport const altLogo = String.raw`\n _ _ _____ _ \n| | | |___ / _ __ __ ___ _____| |\n| |_| | |_ \\| '__/ _ \\ \\ / / _ \\ |\n| _ |___) | | | (_| |\\ V / __/ |\n|_| |_|____/|_| \\__,_| \\_/ \\___|_|\n\n`\n","import { Command } from './Command'\nimport { Logger } from '@h3ravel/shared'\nimport { Option } from 'commander'\n/* eslint-disable no-control-regex */\nimport { altLogo } from '../logo'\n\nexport class ListCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = 'list'\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'List all available commands'\n\n public async handle () {\n const options = [\n {\n short: '-h',\n long: '--help',\n description: 'Display help for the given command. When no command is given display help for the list command'\n } as Option\n ]\n .concat(this.program.options)\n .map(e => {\n const desc = Logger.describe(Logger.log(\n ' ' + [e.short, e.long].filter(e => !!e).join(', '), 'green', false\n ), e.description, 25, false)\n return desc.join('')\n })\n\n /** Get the program commands */\n const commands = this.program.commands.map(e => {\n const desc = Logger.describe(Logger.log(' ' + e.name(), 'green', false), e.description(), 25, false)\n return desc.join('')\n })\n\n const grouped = commands.reduce<Record<string, string[]>>((acc, cmd) => {\n /** strip colors before checking prefix */\n const clean = cmd.replace(/\\x1b\\[\\d+m/g, '')\n const prefix = clean.includes(':') ? clean.split(':')[0].trim() : '__root__'\n acc[prefix] ??= []\n /** keep original with colors */\n acc[prefix].push(cmd)\n return acc\n }, {})\n\n const list = Object.entries(grouped).map(([group, cmds]) => {\n const label = group === '__root__' ? '' : group\n return [Logger.log(label, 'yellow', false), cmds.join('\\n')].join('\\n')\n })\n\n /** Ootput the app version */\n Logger.log([['H3ravel Framework', 'white'], [this.kernel.modulePackage.version, 'green']], ' ')\n\n console.log('')\n\n console.log(altLogo)\n\n console.log('')\n\n Logger.log('Usage:', 'yellow')\n Logger.log(' command [options] [arguments]', 'white')\n\n console.log('')\n\n /** Ootput the options */\n Logger.log('Options:', 'yellow')\n console.log(options.join('\\n').trim())\n\n console.log('')\n\n /** Ootput the commands */\n Logger.log('Available Commands:', 'yellow')\n console.log(list.join('\\n\\n').trim())\n }\n}\n","import { FileSystem, Logger } from '@h3ravel/shared'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { TableGuesser } from '../Utils'\nimport { beforeLast } from '@h3ravel/support'\nimport dayjs from 'dayjs'\nimport { existsSync } from 'node:fs'\nimport nodepath from 'node:path'\n\nexport class MakeCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `#make:\n {controller : Create a new controller class. \n | {--a|api : Exclude the create and edit methods from the controller} \n | {--m|model= : Generate a resource controller for the given model} \n | {--r|resource : Generate a resource controller class} \n | {--force : Create the controller even if it already exists}\n }\n {resource : Create a new resource. \n | {--c|collection : Create a resource collection}\n | {--force : Create the resource even if it already exists}\n }\n {migration : Generates a new database migration class. \n | {--l|type=ts : The file type to generate} \n | {--t|table : The table to migrate} \n | {--c|create : The table to be created} \n }\n {factory : Create a new model factory.}\n {seeder : Create a new seeder class.}\n {view : Create a new view.\n | {--force : Create the view even if it already exists}\n }\n {model : Create a new Eloquent model class. \n | {--api : Indicates if the generated controller should be an API resource controller} \n | {--c|controller : Create a new controller for the model} \n | {--f|factory : Create a new factory for the model} \n | {--m|migration : Create a new migration file for the model} \n | {--r|resource : Indicates if the generated controller should be a resource controller} \n | {--a|all : Generate a migration, seeder, factory, policy, resource controller, and form request classes for the model} \n | {--s|seed : Create a new seeder for the model} \n | {--t|type=ts : The file type to generate}\n | {--force : Create the model even if it already exists}\n } \n {^name : The name of the [name] to generate}\n `\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Generate component classes'\n\n public async handle () {\n const command = (this.dictionary.baseCommand ?? this.dictionary.name) as never\n\n const methods = {\n controller: 'makeController',\n resource: 'makeResource',\n migration: 'makeMigration',\n factory: 'makeFactory',\n seeder: 'makeSeeder',\n model: 'makeModel',\n view: 'makeView',\n } as const\n\n try {\n await (this as any)?.[methods[command]]()\n } catch (e) {\n Logger.error(e as any)\n }\n }\n\n /**\n * Create a new controller class.\n */\n protected async makeController () {\n const type = this.option('api') ? '-resource' : ''\n const name = this.argument('name')\n const force = this.option('force')\n\n const path = nodepath.join(app_path('Http/Controllers'), name + '.ts')\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/http', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/controller${type}.stub`)\n\n /** Check if the controller already exists */\n if (!force && existsSync(path)) {\n Logger.error(`ERORR: ${name} controller already exists`)\n }\n\n let stub = await readFile(stubPath, 'utf-8')\n stub = stub.replace(/{{ name }}/g, name)\n\n await writeFile(path, stub)\n Logger.split('INFO: Controller Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n protected makeResource () {\n Logger.success('Resource support is not yet available')\n }\n\n /**\n * Generate a new database migration class\n */\n protected async makeMigration () {\n const name = this.argument('name')\n const datePrefix = dayjs().format('YYYY_MM_DD_HHmmss')\n const path = nodepath.join(database_path('migrations'), `${datePrefix}_${name}.ts`)\n\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/database', this.kernel.cwd) ?? ''\n\n let create = this.option('create', false)\n let table = this.option('table')\n if (!table && typeof create === 'string') {\n table = create\n create = true\n }\n\n if (!table) {\n const guessed = TableGuesser.guess(name)\n table = guessed[0]\n create = !!guessed[1]\n }\n\n const stubPath = nodepath.join(crtlrPath, this.getMigrationStubName(table, create))\n let stub = await readFile(stubPath, 'utf-8')\n\n if (table !== null) {\n stub = stub.replace(/DummyTable|{{\\s*table\\s*}}/g, table)\n }\n\n Logger.info('INFO: Creating Migration')\n\n await this.kernel.ensureDirectoryExists(nodepath.dirname(path))\n await writeFile(path, stub)\n\n Logger.split('INFO: Migration Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n /**\n * Create a new model factory\n */\n protected makeFactory () {\n Logger.success('Factory support is not yet available')\n }\n\n /**\n * Create a new seeder class\n */\n protected makeSeeder () {\n Logger.success('Seeder support is not yet available')\n }\n\n /**\n * Generate a new Arquebus model class\n */\n protected async makeModel () {\n const type = this.option('type', 'ts')\n const name = this.argument('name')\n const force = this.argument('force')\n\n const path = nodepath.join(app_path('Models'), name.toLowerCase(), '.' + type)\n\n /** Check if the model already exists */\n if (!force && existsSync(path)) {\n Logger.error(`ERORR: ${name} view already exists`)\n }\n\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/database', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/model-${type}.stub`)\n\n let stub = await readFile(stubPath, 'utf-8')\n stub = stub.replace(/{{ name }}/g, name)\n\n await writeFile(path, stub)\n Logger.split('INFO: Model Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n /**\n * Create a new view.\n */\n protected async makeView () {\n const name = this.argument('name')\n const force = this.option('force')\n\n const path = nodepath.join(base_path('src/resources/views'), name + '.edge')\n\n if (name.includes('/')) {\n await mkdir(beforeLast(path, '/'), { recursive: true })\n }\n\n /** Check if the view already exists */\n if (!force && existsSync(path)) {\n Logger.error(`ERORR: ${name} view already exists`)\n }\n\n await writeFile(path, `{{-- src/resources/views/${name}.edge --}}`)\n Logger.split('INFO: View Created', Logger.log(`src/resources/views/${name}.edge`, 'gray', false))\n }\n\n /**\n * Ge the database migration file name\n * \n * @param table \n * @param create \n * @param type \n * @returns \n */\n getMigrationStubName (table?: string, create: boolean = false, type: 'ts' | 'js' = 'ts') {\n let stub: string\n if (!table) {\n stub = `migration-${type}.stub`\n }\n else if (create) {\n stub = `migration.create-${type}.stub`\n }\n else {\n stub = `migration.update-${type}.stub`\n }\n return 'dist/stubs/' + stub\n }\n}\n","import { mkdir, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { FileSystem } from '@h3ravel/shared'\n\nexport class PostinstallCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = 'postinstall'\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Default post installation command'\n\n public async handle () {\n this.createSqliteDB()\n }\n\n /**\n * Create sqlite database if none exist\n * @returns \n */\n private async createSqliteDB () {\n if (config('database.default') !== 'sqlite') return\n\n if (!await FileSystem.fileExists(database_path())) {\n await mkdir(database_path(), { recursive: true })\n }\n\n if (!await FileSystem.fileExists(database_path('db.sqlite'))) {\n await writeFile(database_path('db.sqlite'), '')\n }\n }\n}\n","import { CommandOption, ParsedCommand } from './Contracts/ICommand'\n\nimport { Command } from './Commands/Command'\n\nexport class Signature {\n /**\n * Helper to parse options inside a block of text\n * \n * @param block \n * @returns \n */\n static parseOptions (block: string): CommandOption[] {\n const options: CommandOption[] = []\n /**\n * Match { ... } blocks at top level \n */\n const regex = /\\{([^{}]+(?:\\{[^{}]*\\}[^{}]*)*)\\}/g\n let match\n\n while ((match = regex.exec(block)) !== null) {\n const shared = '^' === match[1][0]! || /:[#^]/.test(match[1])\n const isHidden = (['#', '^'].includes(match[1][0]!) || /:[#^]/.test(match[1])) && !shared\n const content = match[1].trim().replace(/[#^]/, '')\n /**\n * Split by first ':' to separate name and description+nested\n */\n const colonIndex = content.indexOf(':')\n if (colonIndex === -1) {\n /**\n * No description, treat whole as name\n */\n options.push({ name: content })\n continue\n }\n\n const namePart = content.substring(0, colonIndex).trim()\n const rest = content.substring(colonIndex + 1).trim()\n\n /**\n * Check for nested options after '|'\n */\n let description = rest\n let nestedOptions: CommandOption[] | undefined\n\n const pipeIndex = rest.indexOf('|')\n if (pipeIndex !== -1) {\n description = rest.substring(0, pipeIndex).trim()\n const nestedText = rest.substring(pipeIndex + 1).trim()\n /**\n * nestedText should start with '{' and end with ')', clean it\n * Also Remove trailing ')' if present\n */\n const cleanedNestedText = nestedText.replace(/^\\{/, '').trim()\n\n /**\n * Parse nested options recursively\n */\n nestedOptions = Signature.parseOptions('{' + cleanedNestedText + '}')\n } else {\n /**\n * Trim the string\n */\n description = description.trim()\n }\n\n /**\n * Parse name modifiers (?, *, ?*)\n */\n let name = namePart\n let required = /[^a-zA-Z0-9_|-]/.test(name)\n let multiple = false\n\n if (name.endsWith('?*')) {\n required = false\n multiple = true\n name = name.slice(0, -2)\n } else if (name.endsWith('*')) {\n multiple = true\n name = name.slice(0, -1)\n } else if (name.endsWith('?')) {\n required = false\n name = name.slice(0, -1)\n }\n\n /**\n * Check if it's a flag option (starts with --)\n */\n const isFlag = name.startsWith('--')\n let flags: string[] | undefined\n let defaultValue: string | number | boolean | undefined | string[]\n\n if (isFlag) {\n /**\n * Parse flags and default values\n */\n const flagParts = name.split('|').map(s => s.trim())\n\n flags = []\n\n for (let part of flagParts) {\n if (part.startsWith('--') && part.slice(2).length === 1) {\n part = '-' + part.slice(2)\n } else if (part.startsWith('-') && !part.startsWith('--') && part.slice(1).length > 1) {\n part = '--' + part.slice(1)\n } else if (!part.startsWith('-') && part.slice(1).length > 1) {\n part = '--' + part\n }\n\n const eqIndex = part.indexOf('=')\n if (eqIndex !== -1) {\n flags.push(part.substring(0, eqIndex))\n const val = part.substring(eqIndex + 1)\n if (val === '*') {\n defaultValue = []\n } else if (val === 'true' || val === 'false' || (!val && !required)) {\n defaultValue = val === 'true'\n } else if (!isNaN(Number(val))) {\n defaultValue = Number(val)\n } else {\n defaultValue = val\n }\n } else {\n flags.push(part)\n }\n }\n }\n\n options.push({\n name: isFlag ? flags![flags!.length - 1] : name,\n required,\n multiple,\n description,\n flags,\n shared,\n isFlag,\n isHidden,\n defaultValue,\n nestedOptions,\n })\n }\n\n return options\n }\n\n /**\n * Helper to parse a command's signature\n * \n * @param signature \n * @param commandClass \n * @returns \n */\n static parseSignature (signature: string, commandClass: Command): ParsedCommand {\n const lines = signature.split('\\n').map(l => l.trim()).filter(l => l.length > 0)\n const isHidden = ['#', '^'].includes(lines[0][0]!) || /:[#^]/.test(lines[0])\n const baseCommand = lines[0].replace(/[^\\w=:-]/g, '')\n const description = commandClass.getDescription()\n const isNamespaceCommand = baseCommand.endsWith(':')\n\n /**\n * Join the rest lines to a single string for parsing\n */\n const rest = lines.slice(1).join(' ')\n\n /**\n * Parse all top-level options/subcommands\n */\n const allOptions = Signature.parseOptions(rest)\n\n if (isNamespaceCommand) {\n /**\n * Separate subcommands (those without flags) and base options (flags)\n * Here we assume subcommands are those without flags (isFlag false)\n * and base options are flags or options after subcommands\n\n * For simplicity, treat all top-level options as subcommands\n * and assume base command options come after subcommands in signature (not shown in example)\n */\n\n return {\n baseCommand: baseCommand.slice(0, -1),\n isNamespaceCommand,\n subCommands: allOptions.filter(e => !e.flags && !e.isHidden),\n description,\n commandClass,\n options: allOptions.filter(e => !!e.flags),\n isHidden,\n }\n } else {\n return {\n baseCommand,\n isNamespaceCommand,\n options: allOptions,\n description,\n commandClass,\n isHidden,\n }\n }\n }\n}\n","import { dirname, join, resolve } from 'path';\n\nimport { fork } from 'child_process';\n\nfunction run (opts = {}) {\n let input;\n let proc;\n const args = opts.args || [];\n const allowRestarts = opts.allowRestarts || false;\n const overrideInput = opts.input;\n const forkOptions = opts.options || opts;\n delete forkOptions.args;\n delete forkOptions.allowRestarts;\n return {\n name: 'run',\n buildStart (options) {\n let inputs = overrideInput !== null && overrideInput !== void 0 ? overrideInput : options.input;\n if (typeof inputs === 'string') {\n inputs = [inputs];\n }\n if (typeof inputs === 'object') {\n inputs = Object.values(inputs);\n }\n if (inputs.length > 1) {\n throw new Error(`@rollup/plugin-run must have a single entry point; consider setting the \\`input\\` option`);\n }\n input = resolve(inputs[0]);\n },\n generateBundle (_outputOptions, _bundle, isWrite) {\n if (!isWrite) {\n this.error(`@rollup/plugin-run currently only works with bundles that are written to disk`);\n }\n },\n writeBundle (outputOptions, bundle) {\n const forkBundle = (dir, entryFileName) => {\n if (proc)\n proc.kill();\n proc = fork(join(dir, entryFileName), args, forkOptions);\n };\n const dir = outputOptions.dir || dirname(outputOptions.file);\n const entryFileName = Object.keys(bundle).find((fileName) => {\n const chunk = bundle[fileName];\n return chunk.isEntry && chunk.facadeModuleId === input;\n });\n if (entryFileName) {\n forkBundle(dir, entryFileName);\n if (allowRestarts) {\n process.stdin.resume();\n process.stdin.setEncoding('utf8');\n process.stdin.on('data', (data) => {\n const line = data.toString().trim().toLowerCase();\n if (line === 'rs' || line === 'restart' || data.toString().charCodeAt(0) === 11) {\n forkBundle(dir, entryFileName);\n }\n else if (line === 'cls' || line === 'clear' || data.toString().charCodeAt(0) === 12) {\n // eslint-disable-next-line no-console\n console.clear();\n }\n });\n }\n }\n else {\n this.error(`@rollup/plugin-run could not find output chunk`);\n }\n }\n };\n}\n\nexport { run as default };\n//# sourceMappingURL=index.js.map\n","import { Options } from 'tsdown'\nimport run from '@rollup/plugin-run'\n\nconst env = process.env.NODE_ENV || 'development'\nconst outDir = env === 'development' ? '.h3ravel/serve' : 'dist'\n\nexport const TsDownConfig: Options = {\n outDir,\n entry: ['src/**/*.ts'],\n format: ['esm'],//, 'cjs'],\n target: 'node22',\n sourcemap: env === 'development',\n clean: true,\n shims: true,\n copy: [{ from: 'public', to: outDir }, 'src/resources', 'src/database'],\n env: env === 'development' ? {\n NODE_ENV: env,\n SRC_PATH: outDir,\n } : {},\n watch:\n env === 'development' && process.env.CLI_BUILD !== 'true'\n ? ['.env', '.env.*', 'src', '../../packages']\n : false,\n dts: false,\n logLevel: 'silent',\n nodeProtocol: true,\n skipNodeModulesBundle: true,\n plugins: env === 'development' && process.env.CLI_BUILD !== 'true' ? [\n run({\n env: Object.assign({}, process.env, {\n NODE_ENV: env,\n SRC_PATH: outDir,\n }),\n execArgv: ['-r', 'source-map-support/register'],\n allowRestarts: false,\n input: process.cwd() + '/src/server.ts'//\n })\n ] : [],\n}\n\nexport default TsDownConfig\n","import { CommandOption, ParsedCommand } from './Contracts/ICommand'\nimport { Option, program, type Command as Commander } from 'commander'\n\nimport { Application } from '@h3ravel/core'\nimport { Command } from './Commands/Command'\nimport { Kernel } from './Kernel'\nimport { ListCommand } from './Commands/ListCommand'\nimport { Logger } from '@h3ravel/shared'\nimport { MakeCommand } from './Commands/MakeCommand'\nimport { Signature } from './Signature'\nimport TsDownConfig from './TsdownConfig'\nimport { altLogo } from './logo'\nimport { build } from 'tsdown'\nimport { glob } from 'node:fs/promises'\nimport path from 'node:path'\nimport { PostinstallCommand } from './Commands/PostinstallCommand'\n\n/**\n * Musket is H3ravel's CLI tool\n */\nexport class Musket {\n private commands: ParsedCommand[] = []\n\n constructor(private app: Application, private kernel: Kernel) { }\n\n async build () {\n this.loadBaseCommands()\n await this.loadDiscoveredCommands()\n return this.initialize()\n }\n\n private loadBaseCommands () {\n const commands: Command[] = [\n new MakeCommand(this.app, this.kernel),\n new ListCommand(this.app, this.kernel),\n new PostinstallCommand(this.app, this.kernel),\n ]\n\n commands.forEach(e => this.addCommand(e))\n }\n\n private async loadDiscoveredCommands () {\n const commands: Command[] = [\n ...this.app.registeredCommands.map(cmd => new cmd(this.app, this.kernel))\n ]\n\n /**\n * Musket Commands auto registration\n */\n const providers_path = app_path('Console/Commands/*.js').replace('/src/', '/.h3ravel/serve/')\n\n /** Add the App Commands */\n for await (const cmd of glob(providers_path)) {\n const name = path.basename(cmd).replace('.js', '')\n try {\n const cmdClass = (await import(cmd))[name]\n commands.push(new cmdClass(this.app, this.kernel))\n } catch { /** */ }\n }\n\n commands.forEach(e => this.addCommand(e))\n }\n\n addCommand (command: Command) {\n this.commands.push(Signature.parseSignature(command.getSignature(), command))\n }\n\n private initialize () {\n /** Init the Musket Version */\n const cliVersion = Logger.parse([\n ['Musket CLI:', 'white'],\n [this.kernel.consolePackage.version, 'green']\n ], ' ', false)\n\n /** Init the App Version */\n const localVersion = Logger.parse([\n ['H3ravel Framework:', 'white'],\n [this.kernel.modulePackage.version, 'green']\n ], ' ', false)\n\n const additional = {\n quiet: ['-q, --quiet', 'Do not output any message'],\n silent: ['--silent', 'Do not output any message'],\n verbose: ['-v, --verbose <number>', 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'],\n lock: ['--lock', 'Locked and loaded, do not ask any interactive question'],\n }\n\n /** Init Commander */\n program\n .name('musket')\n .version(`${cliVersion}\\n${localVersion}`)\n .description(altLogo)\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n const instance = new ListCommand(this.app, this.kernel)\n instance.setInput(program.opts(), program.args, program.registeredArguments, {}, program)\n instance.handle()\n })\n\n /** Create the init Command */\n program\n .command('init')\n .description('Initialize H3ravel.')\n .action(async () => {\n Logger.success('Initialized: H3ravel has been initialized!')\n })\n\n /** Loop through all the available commands */\n for (let i = 0; i < this.commands.length; i++) {\n const command = this.commands[i]\n const instance = command.commandClass\n\n if (command.isNamespaceCommand && command.subCommands) {\n /**\n * Initialize the base command\n */\n const cmd = command.isHidden\n ? program\n : program\n .command(command.baseCommand)\n .description(command.description ?? '')\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program)\n await instance.handle()\n })\n\n /**\n * Add options to the base command if it has any\n */\n if ((command.options?.length ?? 0) > 0) {\n command.options\n ?.filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd)\n })\n }\n\n /**\n * Initialize the sub commands\n */\n command\n .subCommands\n .filter((v, i, a) => !v.shared && a.findIndex(t => t.name === v.name) === i)\n .forEach(sub => {\n const cmd = program\n .command(`${command.baseCommand}:${sub.name}`)\n .description(sub.description || '')\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, sub, program)\n await instance.handle()\n })\n\n /**\n * Add the shared arguments here\n */\n command.subCommands?.filter(e => e.shared).forEach(opt => {\n this.makeOption(opt, cmd, false, sub)\n })\n\n /**\n * Add the shared options here\n */\n command.options?.filter(e => e.shared).forEach(opt => {\n this.makeOption(opt, cmd, false, sub)\n })\n\n /**\n * Add options to the sub command if it has any\n */\n if (sub.nestedOptions) {\n sub.nestedOptions\n .filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd)\n })\n }\n })\n } else {\n /**\n * Initialize command with options\n */\n const cmd = program\n .command(command.baseCommand)\n .description(command.description ?? '')\n\n command\n ?.options\n ?.filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd, true)\n })\n\n cmd.action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program)\n await instance.handle()\n })\n }\n }\n\n /** Rebuild the app on every command except fire so we wont need TS */\n program.hook('preAction', async (_, cmd) => {\n if (cmd.name() !== 'fire') {\n await build({\n ...TsDownConfig,\n watch: false,\n plugins: []\n })\n }\n })\n\n return program\n }\n\n makeOption (opt: CommandOption, cmd: Commander, parse?: boolean, parent?: any) {\n const description = opt.description?.replace(/\\[(\\w+)\\]/g, (_, k) => parent?.[k] ?? `[${k}]`) ?? ''\n const type = opt.name.replaceAll('-', '')\n\n if (opt.isFlag) {\n if (parse) {\n const flags = opt.flags\n ?.map(f => (f.length === 1 ? `-${f}` : `--${f}`)).join(', ')!\n .replaceAll('----', '--')\n .replaceAll('---', '-')\n\n cmd.option(flags || '', description!, String(opt.defaultValue) || undefined)\n } else {\n cmd.option(\n opt.flags?.join(', ') + (opt.required ? ` <${type}>` : ''),\n description!,\n opt.defaultValue as any\n )\n }\n } else {\n cmd.argument(\n opt.required ? `<${opt.name}>` : `[${opt.name}]`,\n description,\n opt.defaultValue\n )\n }\n }\n\n static async parse (kernel: Kernel) {\n return (await new Musket(kernel.app, kernel).build()).parseAsync()\n }\n\n}\n","import { Application, ConsoleKernel } from '@h3ravel/core'\n\nimport { FileSystem } from '@h3ravel/shared'\nimport { Musket } from './Musket'\nimport path from 'node:path'\n\nexport class Kernel extends ConsoleKernel {\n constructor(public app: Application) {\n super(app)\n }\n\n static init (app: Application) {\n const instance = new Kernel(app)\n\n Promise.all([instance.loadRequirements()])\n .then(([e]) => e.run())\n }\n\n\n private async run () {\n await Musket.parse(this)\n process.exit(0)\n }\n\n private async loadRequirements () {\n this.cwd = path.join(process.cwd(), this.basePath)\n this.modulePath = FileSystem.findModulePkg('@h3ravel/core', this.cwd) ?? ''\n this.consolePath = FileSystem.findModulePkg('@h3ravel/console', this.cwd) ?? ''\n\n try {\n this.modulePackage = await import(path.join(this.modulePath, 'package.json'))\n } catch {\n this.modulePackage = { version: 'N/A' }\n }\n\n try {\n this.consolePackage = await import(path.join(this.consolePath, 'package.json'))\n } catch {\n this.consolePackage = { version: 'N/A' }\n }\n\n return this\n }\n}\n","/// <reference path=\"../../../core/src/app.globals.d.ts\" />\n\nimport { Kernel } from '../Kernel'\nimport { ServiceProvider } from '@h3ravel/core'\n/**\n * Handles CLI commands and tooling.\n * \n * Register DatabaseManager and QueryBuilder.\n * Set up ORM models and relationships.\n * Register migration and seeder commands.\n * \n * Auto-Registered when in CLI mode\n */\nexport class ConsoleServiceProvider extends ServiceProvider {\n public static priority = 992\n\n /**\n * Indicate that this service provider only runs in console\n */\n public static console = true\n\n register () {\n }\n\n boot () {\n Kernel.init(this.app)\n\n process.on('SIGINT', () => {\n process.exit(0)\n })\n process.on('SIGTERM', () => {\n process.exit(0)\n })\n }\n}\n"],"x_google_ignoreList":[6],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["ConsoleCommand","Logger","e","path","FileSystem","nodepath","Logger","TableGuesser","stub: string","FileSystem","options: CommandOption[]","nestedOptions: CommandOption[] | undefined","flags: string[] | undefined","defaultValue: string | number | boolean | undefined | string[]","dir","entryFileName","TsDownConfig: Options","app: Application","kernel: Kernel","commands: Command[]","path","Logger","Option","program","i","cmd","TsDownConfig","ConsoleKernel","app: Application","path","FileSystem","ServiceProvider"],"sources":["../src/Commands/Command.ts","../src/logo.ts","../src/Commands/ListCommand.ts","../src/Commands/MakeCommand.ts","../src/Commands/PostinstallCommand.ts","../src/Signature.ts","../../../node_modules/.pnpm/@rollup+plugin-run@3.1.0/node_modules/@rollup/plugin-run/dist/es/index.js","../src/TsdownConfig.ts","../src/Musket.ts","../src/Kernel.ts","../src/Providers/ConsoleServiceProvider.ts"],"sourcesContent":["import { ConsoleCommand } from '@h3ravel/core'\n\nexport class Command extends ConsoleCommand { }\n","export const logo = String.raw`\n 111 \n 111111111 \n 1111111111 111111 \n 111111 111 111111 \n 111111 111 111111 \n11111 111 11111 \n1111111 111 1111111 \n111 11111 111 111111 111 1111 1111 11111111 1111\n111 11111 1111 111111 111 1111 1111 1111 11111 1111\n111 11111 11111 111 1111 1111 111111111111 111111111111 1111 1111111 1111\n111 111111 1111 111 111111111111 111111 11111 1111 111 1111 11111111 1111 1111\n111 111 11111111 111 1101 1101 111111111 11111111 1111 1111111111111111101\n111 1111111111111111 1111 111 1111 1111 111 11111011 1111 111 1111111 1101 1111\n111 11111 1110111111111111 111 1111 1111 1111111101 1111 111111111 1111011 111111111 1111\n1111111 111110111110 111 1111 1111 111111 1111 11011101 10111 11111 1111\n11011 111111 11 11111 \n 111111 11101 111111 \n 111111 111 111111 \n 111111 111 111111 \n 111111111 \n 110 \n`\n\nexport const altLogo = String.raw`\n _ _ _____ _ \n| | | |___ / _ __ __ ___ _____| |\n| |_| | |_ \\| '__/ _ \\ \\ / / _ \\ |\n| _ |___) | | | (_| |\\ V / __/ |\n|_| |_|____/|_| \\__,_| \\_/ \\___|_|\n\n`\n","import { Command } from './Command'\nimport { Logger } from '@h3ravel/shared'\nimport { Option } from 'commander'\n/* eslint-disable no-control-regex */\nimport { altLogo } from '../logo'\n\nexport class ListCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = 'list'\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'List all available commands'\n\n public async handle () {\n const options = [\n {\n short: '-h',\n long: '--help',\n description: 'Display help for the given command. When no command is given display help for the list command'\n } as Option\n ]\n .concat(this.program.options)\n .map(e => {\n const desc = Logger.describe(Logger.log(\n ' ' + [e.short, e.long].filter(e => !!e).join(', '), 'green', false\n ), e.description, 25, false)\n return desc.join('')\n })\n\n /** Get the program commands */\n const commands = this.program.commands.map(e => {\n const desc = Logger.describe(Logger.log(' ' + e.name(), 'green', false), e.description(), 25, false)\n return desc.join('')\n })\n\n const grouped = commands.reduce<Record<string, string[]>>((acc, cmd) => {\n /** strip colors before checking prefix */\n const clean = cmd.replace(/\\x1b\\[\\d+m/g, '')\n const prefix = clean.includes(':') ? clean.split(':')[0].trim() : '__root__'\n acc[prefix] ??= []\n /** keep original with colors */\n acc[prefix].push(cmd)\n return acc\n }, {})\n\n const list = Object.entries(grouped).map(([group, cmds]) => {\n const label = group === '__root__' ? '' : group\n return [Logger.log(label, 'yellow', false), cmds.join('\\n')].join('\\n')\n })\n\n /** Ootput the app version */\n Logger.log([['H3ravel Framework', 'white'], [this.kernel.modulePackage.version, 'green']], ' ')\n\n console.log('')\n\n console.log(altLogo)\n\n console.log('')\n\n Logger.log('Usage:', 'yellow')\n Logger.log(' command [options] [arguments]', 'white')\n\n console.log('')\n\n /** Ootput the options */\n Logger.log('Options:', 'yellow')\n console.log(options.join('\\n').trim())\n\n console.log('')\n\n /** Ootput the commands */\n Logger.log('Available Commands:', 'yellow')\n console.log(list.join('\\n\\n').trim())\n }\n}\n","import { FileSystem, Logger } from '@h3ravel/shared'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { TableGuesser } from '../Utils'\nimport { beforeLast } from '@h3ravel/support'\nimport dayjs from 'dayjs'\nimport nodepath from 'node:path'\n\nexport class MakeCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `#make:\n {controller : Create a new controller class. \n | {--a|api : Exclude the create and edit methods from the controller} \n | {--m|model= : Generate a resource controller for the given model} \n | {--r|resource : Generate a resource controller class} \n | {--force : Create the controller even if it already exists}\n }\n {resource : Create a new resource. \n | {--c|collection : Create a resource collection}\n | {--force : Create the resource even if it already exists}\n }\n {migration : Generates a new database migration class. \n | {--l|type=ts : The file type to generate} \n | {--t|table : The table to migrate} \n | {--c|create : The table to be created} \n }\n {factory : Create a new model factory.}\n {seeder : Create a new seeder class.}\n {view : Create a new view.\n | {--force : Create the view even if it already exists}\n }\n {model : Create a new Eloquent model class. \n | {--api : Indicates if the generated controller should be an API resource controller} \n | {--c|controller : Create a new controller for the model} \n | {--f|factory : Create a new factory for the model} \n | {--m|migration : Create a new migration file for the model} \n | {--r|resource : Indicates if the generated controller should be a resource controller} \n | {--a|all : Generate a migration, seeder, factory, policy, resource controller, and form request classes for the model} \n | {--s|seed : Create a new seeder for the model} \n | {--t|type=ts : The file type to generate}\n | {--force : Create the model even if it already exists}\n } \n {^name : The name of the [name] to generate}\n `\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Generate component classes'\n\n public async handle () {\n const command = (this.dictionary.baseCommand ?? this.dictionary.name) as never\n\n if (!this.argument('name')) {\n this.program.error('Please provide a valid name for the ' + command)\n }\n\n const methods = {\n controller: 'makeController',\n resource: 'makeResource',\n migration: 'makeMigration',\n factory: 'makeFactory',\n seeder: 'makeSeeder',\n model: 'makeModel',\n view: 'makeView',\n } as const\n\n try {\n await (this as any)?.[methods[command]]()\n } catch (e) {\n Logger.error(e as any)\n }\n }\n\n /**\n * Create a new controller class.\n */\n protected async makeController () {\n const type = this.option('api') ? '-resource' : ''\n const name = this.argument('name')\n const force = this.option('force')\n\n const path = app_path(`Http/Controllers/${name}.ts`)\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/http', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/controller${type}.stub`)\n\n /** Check if the controller already exists */\n if (!force && await FileSystem.fileExists(path)) {\n Logger.error(`ERORR: ${name} controller already exists`)\n }\n\n let stub = await readFile(stubPath, 'utf-8')\n stub = stub.replace(/{{ name }}/g, name)\n\n await writeFile(path, stub)\n Logger.split('INFO: Controller Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n protected makeResource () {\n Logger.success('Resource support is not yet available')\n }\n\n /**\n * Generate a new database migration class\n */\n protected async makeMigration () {\n const name = this.argument('name')\n const datePrefix = dayjs().format('YYYY_MM_DD_HHmmss')\n const path = database_path(`migrations/${datePrefix}_${name}.ts`)\n\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/database', this.kernel.cwd) ?? ''\n\n let create = this.option('create', false)\n let table = this.option('table')\n if (!table && typeof create === 'string') {\n table = create\n create = true\n }\n\n if (!table) {\n const guessed = TableGuesser.guess(name)\n table = guessed[0]\n create = !!guessed[1]\n }\n\n const stubPath = nodepath.join(crtlrPath, this.getMigrationStubName(table, create))\n let stub = await readFile(stubPath, 'utf-8')\n\n if (table !== null) {\n stub = stub.replace(/DummyTable|{{\\s*table\\s*}}/g, table)\n }\n\n Logger.info('INFO: Creating Migration')\n\n await this.kernel.ensureDirectoryExists(nodepath.dirname(path))\n await writeFile(path, stub)\n\n Logger.split('INFO: Migration Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n /**\n * Create a new model factory\n */\n protected makeFactory () {\n Logger.success('Factory support is not yet available')\n }\n\n /**\n * Create a new seeder class\n */\n protected makeSeeder () {\n Logger.success('Seeder support is not yet available')\n }\n\n /**\n * Generate a new Arquebus model class\n */\n protected async makeModel () {\n const type = this.option('type', 'ts')\n const name = this.argument('name')\n const force = this.argument('force')\n\n const path = app_path(`Models/${name.toLowerCase()}.${type}`)\n\n /** Check if the model already exists */\n if (!force && await FileSystem.fileExists(path)) {\n Logger.error(`ERORR: ${name} model already exists`)\n }\n\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/database', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/model-${type}.stub`)\n\n let stub = await readFile(stubPath, 'utf-8')\n stub = stub.replace(/{{ name }}/g, name)\n\n await writeFile(path, stub)\n Logger.split('INFO: Model Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n /**\n * Create a new view.\n */\n protected async makeView () {\n const name = this.argument('name')\n const force = this.option('force')\n\n const path = base_path(`src/resources/views/${name}.edge`)\n\n if (name.includes('/')) {\n await mkdir(beforeLast(path, '/'), { recursive: true })\n }\n\n /** Check if the view already exists */\n if (!force && await FileSystem.fileExists(path)) {\n Logger.error(`ERORR: ${name} view already exists`)\n }\n\n await writeFile(path, `{{-- src/resources/views/${name}.edge --}}`)\n Logger.split('INFO: View Created', Logger.log(`src/resources/views/${name}.edge`, 'gray', false))\n }\n\n /**\n * Ge the database migration file name\n * \n * @param table \n * @param create \n * @param type \n * @returns \n */\n getMigrationStubName (table?: string, create: boolean = false, type: 'ts' | 'js' = 'ts') {\n let stub: string\n if (!table) {\n stub = `migration-${type}.stub`\n }\n else if (create) {\n stub = `migration.create-${type}.stub`\n }\n else {\n stub = `migration.update-${type}.stub`\n }\n return 'dist/stubs/' + stub\n }\n}\n","import { mkdir, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { FileSystem } from '@h3ravel/shared'\n\nexport class PostinstallCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = 'postinstall'\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Default post installation command'\n\n public async handle () {\n this.createSqliteDB()\n }\n\n /**\n * Create sqlite database if none exist\n * \n * @returns \n */\n private async createSqliteDB () {\n if (config('database.default') !== 'sqlite') return\n\n if (!await FileSystem.fileExists(database_path())) {\n await mkdir(database_path(), { recursive: true })\n }\n\n if (!await FileSystem.fileExists(database_path('db.sqlite'))) {\n await writeFile(database_path('db.sqlite'), '')\n }\n }\n}\n","import { CommandOption, ParsedCommand } from './Contracts/ICommand'\n\nimport { Command } from './Commands/Command'\n\nexport class Signature {\n /**\n * Helper to parse options inside a block of text\n * \n * @param block \n * @returns \n */\n static parseOptions (block: string): CommandOption[] {\n const options: CommandOption[] = []\n /**\n * Match { ... } blocks at top level \n */\n const regex = /\\{([^{}]+(?:\\{[^{}]*\\}[^{}]*)*)\\}/g\n let match\n\n while ((match = regex.exec(block)) !== null) {\n const shared = '^' === match[1][0]! || /:[#^]/.test(match[1])\n const isHidden = (['#', '^'].includes(match[1][0]!) || /:[#^]/.test(match[1])) && !shared\n const content = match[1].trim().replace(/[#^]/, '')\n /**\n * Split by first ':' to separate name and description+nested\n */\n const colonIndex = content.indexOf(':')\n if (colonIndex === -1) {\n /**\n * No description, treat whole as name\n */\n options.push({ name: content })\n continue\n }\n\n const namePart = content.substring(0, colonIndex).trim()\n const rest = content.substring(colonIndex + 1).trim()\n\n /**\n * Check for nested options after '|'\n */\n let description = rest\n let nestedOptions: CommandOption[] | undefined\n\n const pipeIndex = rest.indexOf('|')\n if (pipeIndex !== -1) {\n description = rest.substring(0, pipeIndex).trim()\n const nestedText = rest.substring(pipeIndex + 1).trim()\n /**\n * nestedText should start with '{' and end with ')', clean it\n * Also Remove trailing ')' if present\n */\n const cleanedNestedText = nestedText.replace(/^\\{/, '').trim()\n\n /**\n * Parse nested options recursively\n */\n nestedOptions = Signature.parseOptions('{' + cleanedNestedText + '}')\n } else {\n /**\n * Trim the string\n */\n description = description.trim()\n }\n\n /**\n * Parse name modifiers (?, *, ?*)\n */\n let name = namePart\n let required = /[^a-zA-Z0-9_|-]/.test(name)\n let multiple = false\n\n if (name.endsWith('?*')) {\n required = false\n multiple = true\n name = name.slice(0, -2)\n } else if (name.endsWith('*')) {\n multiple = true\n name = name.slice(0, -1)\n } else if (name.endsWith('?')) {\n required = false\n name = name.slice(0, -1)\n }\n\n /**\n * Check if it's a flag option (starts with --)\n */\n const isFlag = name.startsWith('--')\n let flags: string[] | undefined\n let defaultValue: string | number | boolean | undefined | string[]\n\n if (isFlag) {\n /**\n * Parse flags and default values\n */\n const flagParts = name.split('|').map(s => s.trim())\n\n flags = []\n\n for (let part of flagParts) {\n if (part.startsWith('--') && part.slice(2).length === 1) {\n part = '-' + part.slice(2)\n } else if (part.startsWith('-') && !part.startsWith('--') && part.slice(1).length > 1) {\n part = '--' + part.slice(1)\n } else if (!part.startsWith('-') && part.slice(1).length > 1) {\n part = '--' + part\n }\n\n const eqIndex = part.indexOf('=')\n if (eqIndex !== -1) {\n flags.push(part.substring(0, eqIndex))\n const val = part.substring(eqIndex + 1)\n if (val === '*') {\n defaultValue = []\n } else if (val === 'true' || val === 'false' || (!val && !required)) {\n defaultValue = val === 'true'\n } else if (!isNaN(Number(val))) {\n defaultValue = Number(val)\n } else {\n defaultValue = val\n }\n } else {\n flags.push(part)\n }\n }\n }\n\n options.push({\n name: isFlag ? flags![flags!.length - 1] : name,\n required,\n multiple,\n description,\n flags,\n shared,\n isFlag,\n isHidden,\n defaultValue,\n nestedOptions,\n })\n }\n\n return options\n }\n\n /**\n * Helper to parse a command's signature\n * \n * @param signature \n * @param commandClass \n * @returns \n */\n static parseSignature (signature: string, commandClass: Command): ParsedCommand {\n const lines = signature.split('\\n').map(l => l.trim()).filter(l => l.length > 0)\n const isHidden = ['#', '^'].includes(lines[0][0]!) || /:[#^]/.test(lines[0])\n const baseCommand = lines[0].replace(/[^\\w=:-]/g, '')\n const description = commandClass.getDescription()\n const isNamespaceCommand = baseCommand.endsWith(':')\n\n /**\n * Join the rest lines to a single string for parsing\n */\n const rest = lines.slice(1).join(' ')\n\n /**\n * Parse all top-level options/subcommands\n */\n const allOptions = Signature.parseOptions(rest)\n\n if (isNamespaceCommand) {\n /**\n * Separate subcommands (those without flags) and base options (flags)\n * Here we assume subcommands are those without flags (isFlag false)\n * and base options are flags or options after subcommands\n\n * For simplicity, treat all top-level options as subcommands\n * and assume base command options come after subcommands in signature (not shown in example)\n */\n\n return {\n baseCommand: baseCommand.slice(0, -1),\n isNamespaceCommand,\n subCommands: allOptions.filter(e => !e.flags && !e.isHidden),\n description,\n commandClass,\n options: allOptions.filter(e => !!e.flags),\n isHidden,\n }\n } else {\n return {\n baseCommand,\n isNamespaceCommand,\n options: allOptions,\n description,\n commandClass,\n isHidden,\n }\n }\n }\n}\n","import { dirname, join, resolve } from 'path';\n\nimport { fork } from 'child_process';\n\nfunction run (opts = {}) {\n let input;\n let proc;\n const args = opts.args || [];\n const allowRestarts = opts.allowRestarts || false;\n const overrideInput = opts.input;\n const forkOptions = opts.options || opts;\n delete forkOptions.args;\n delete forkOptions.allowRestarts;\n return {\n name: 'run',\n buildStart (options) {\n let inputs = overrideInput !== null && overrideInput !== void 0 ? overrideInput : options.input;\n if (typeof inputs === 'string') {\n inputs = [inputs];\n }\n if (typeof inputs === 'object') {\n inputs = Object.values(inputs);\n }\n if (inputs.length > 1) {\n throw new Error(`@rollup/plugin-run must have a single entry point; consider setting the \\`input\\` option`);\n }\n input = resolve(inputs[0]);\n },\n generateBundle (_outputOptions, _bundle, isWrite) {\n if (!isWrite) {\n this.error(`@rollup/plugin-run currently only works with bundles that are written to disk`);\n }\n },\n writeBundle (outputOptions, bundle) {\n const forkBundle = (dir, entryFileName) => {\n if (proc)\n proc.kill();\n proc = fork(join(dir, entryFileName), args, forkOptions);\n };\n const dir = outputOptions.dir || dirname(outputOptions.file);\n const entryFileName = Object.keys(bundle).find((fileName) => {\n const chunk = bundle[fileName];\n return chunk.isEntry && chunk.facadeModuleId === input;\n });\n if (entryFileName) {\n forkBundle(dir, entryFileName);\n if (allowRestarts) {\n process.stdin.resume();\n process.stdin.setEncoding('utf8');\n process.stdin.on('data', (data) => {\n const line = data.toString().trim().toLowerCase();\n if (line === 'rs' || line === 'restart' || data.toString().charCodeAt(0) === 11) {\n forkBundle(dir, entryFileName);\n }\n else if (line === 'cls' || line === 'clear' || data.toString().charCodeAt(0) === 12) {\n // eslint-disable-next-line no-console\n console.clear();\n }\n });\n }\n }\n else {\n this.error(`@rollup/plugin-run could not find output chunk`);\n }\n }\n };\n}\n\nexport { run as default };\n//# sourceMappingURL=index.js.map\n","import { Options } from 'tsdown'\nimport run from '@rollup/plugin-run'\n\nconst env = process.env.NODE_ENV || 'development'\nconst outDir = env === 'development' ? '.h3ravel/serve' : 'dist'\n\nexport const TsDownConfig: Options = {\n outDir,\n entry: ['src/**/*.ts'],\n format: ['esm'],//, 'cjs'],\n target: 'node22',\n sourcemap: env === 'development',\n clean: true,\n shims: true,\n copy: [{ from: 'public', to: outDir }, 'src/resources', 'src/database'],\n env: env === 'development' ? {\n NODE_ENV: env,\n SRC_PATH: outDir,\n } : {},\n watch:\n env === 'development' && process.env.CLI_BUILD !== 'true'\n ? ['.env', '.env.*', 'src', '../../packages']\n : false,\n dts: false,\n logLevel: 'silent',\n nodeProtocol: true,\n skipNodeModulesBundle: true,\n plugins: env === 'development' && process.env.CLI_BUILD !== 'true' ? [\n run({\n env: Object.assign({}, process.env, {\n NODE_ENV: env,\n SRC_PATH: outDir,\n }),\n execArgv: ['-r', 'source-map-support/register'],\n allowRestarts: false,\n input: process.cwd() + '/src/server.ts'//\n })\n ] : [],\n}\n\nexport default TsDownConfig\n","import { CommandOption, ParsedCommand } from './Contracts/ICommand'\nimport { Option, program, type Command as Commander } from 'commander'\n\nimport { Application } from '@h3ravel/core'\nimport { Command } from './Commands/Command'\nimport { Kernel } from './Kernel'\nimport { ListCommand } from './Commands/ListCommand'\nimport { Logger } from '@h3ravel/shared'\nimport { MakeCommand } from './Commands/MakeCommand'\nimport { Signature } from './Signature'\nimport TsDownConfig from './TsdownConfig'\nimport { altLogo } from './logo'\nimport { build } from 'tsdown'\nimport { glob } from 'node:fs/promises'\nimport path from 'node:path'\nimport { PostinstallCommand } from './Commands/PostinstallCommand'\n\n/**\n * Musket is H3ravel's CLI tool\n */\nexport class Musket {\n private commands: ParsedCommand[] = []\n\n constructor(private app: Application, private kernel: Kernel) { }\n\n async build () {\n this.loadBaseCommands()\n await this.loadDiscoveredCommands()\n return this.initialize()\n }\n\n private loadBaseCommands () {\n const commands: Command[] = [\n new MakeCommand(this.app, this.kernel),\n new ListCommand(this.app, this.kernel),\n new PostinstallCommand(this.app, this.kernel),\n ]\n\n commands.forEach(e => this.addCommand(e))\n }\n\n private async loadDiscoveredCommands () {\n const commands: Command[] = [\n ...this.app.registeredCommands.map(cmd => new cmd(this.app, this.kernel))\n ]\n\n /**\n * Musket Commands auto registration\n */\n const providers_path = app_path('Console/Commands/*.js').replace('/src/', '/.h3ravel/serve/')\n\n /** Add the App Commands */\n for await (const cmd of glob(providers_path)) {\n const name = path.basename(cmd).replace('.js', '')\n try {\n const cmdClass = (await import(cmd))[name]\n commands.push(new cmdClass(this.app, this.kernel))\n } catch { /** */ }\n }\n\n commands.forEach(e => this.addCommand(e))\n }\n\n addCommand (command: Command) {\n this.commands.push(Signature.parseSignature(command.getSignature(), command))\n }\n\n private initialize () {\n /** Init the Musket Version */\n const cliVersion = Logger.parse([\n ['Musket CLI:', 'white'],\n [this.kernel.consolePackage.version, 'green']\n ], ' ', false)\n\n /** Init the App Version */\n const localVersion = Logger.parse([\n ['H3ravel Framework:', 'white'],\n [this.kernel.modulePackage.version, 'green']\n ], ' ', false)\n\n const additional = {\n quiet: ['-q, --quiet', 'Do not output any message'],\n silent: ['--silent', 'Do not output any message'],\n verbose: ['-v, --verbose <number>', 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'],\n lock: ['--lock', 'Locked and loaded, do not ask any interactive question'],\n }\n\n /** Init Commander */\n program\n .name('musket')\n .version(`${cliVersion}\\n${localVersion}`)\n .description(altLogo)\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n const instance = new ListCommand(this.app, this.kernel)\n instance.setInput(program.opts(), program.args, program.registeredArguments, {}, program)\n instance.handle()\n })\n\n /** Create the init Command */\n program\n .command('init')\n .description('Initialize H3ravel.')\n .action(async () => {\n Logger.success('Initialized: H3ravel has been initialized!')\n })\n\n /** Loop through all the available commands */\n for (let i = 0; i < this.commands.length; i++) {\n const command = this.commands[i]\n const instance = command.commandClass\n\n if (command.isNamespaceCommand && command.subCommands) {\n /**\n * Initialize the base command\n */\n const cmd = command.isHidden\n ? program\n : program\n .command(command.baseCommand)\n .description(command.description ?? '')\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program)\n await instance.handle()\n })\n\n /**\n * Add options to the base command if it has any\n */\n if ((command.options?.length ?? 0) > 0) {\n command.options\n ?.filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd)\n })\n }\n\n /**\n * Initialize the sub commands\n */\n command\n .subCommands\n .filter((v, i, a) => !v.shared && a.findIndex(t => t.name === v.name) === i)\n .forEach(sub => {\n const cmd = program\n .command(`${command.baseCommand}:${sub.name}`)\n .description(sub.description || '')\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, sub, program)\n await instance.handle()\n })\n\n /**\n * Add the shared arguments here\n */\n command.subCommands?.filter(e => e.shared).forEach(opt => {\n this.makeOption(opt, cmd, false, sub)\n })\n\n /**\n * Add the shared options here\n */\n command.options?.filter(e => e.shared).forEach(opt => {\n this.makeOption(opt, cmd, false, sub)\n })\n\n /**\n * Add options to the sub command if it has any\n */\n if (sub.nestedOptions) {\n sub.nestedOptions\n .filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd)\n })\n }\n })\n } else {\n /**\n * Initialize command with options\n */\n const cmd = program\n .command(command.baseCommand)\n .description(command.description ?? '')\n\n command\n ?.options\n ?.filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd, true)\n })\n\n cmd.action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program)\n await instance.handle()\n })\n }\n }\n\n /** Rebuild the app on every command except fire so we wont need TS */\n program.hook('preAction', async (_, cmd) => {\n if (cmd.name() !== 'fire') {\n await build({\n ...TsDownConfig,\n watch: false,\n plugins: []\n })\n }\n })\n\n return program\n }\n\n makeOption (opt: CommandOption, cmd: Commander, parse?: boolean, parent?: any) {\n const description = opt.description?.replace(/\\[(\\w+)\\]/g, (_, k) => parent?.[k] ?? `[${k}]`) ?? ''\n const type = opt.name.replaceAll('-', '')\n\n if (opt.isFlag) {\n if (parse) {\n const flags = opt.flags\n ?.map(f => (f.length === 1 ? `-${f}` : `--${f}`)).join(', ')!\n .replaceAll('----', '--')\n .replaceAll('---', '-')\n\n cmd.option(flags || '', description!, String(opt.defaultValue) || undefined)\n } else {\n cmd.option(\n opt.flags?.join(', ') + (opt.required ? ` <${type}>` : ''),\n description!,\n opt.defaultValue as any\n )\n }\n } else {\n cmd.argument(\n opt.required ? `<${opt.name}>` : `[${opt.name}]`,\n description,\n opt.defaultValue\n )\n }\n }\n\n static async parse (kernel: Kernel) {\n return (await new Musket(kernel.app, kernel).build()).parseAsync()\n }\n\n}\n","import { Application, ConsoleKernel } from '@h3ravel/core'\n\nimport { FileSystem } from '@h3ravel/shared'\nimport { Musket } from './Musket'\nimport path from 'node:path'\n\nexport class Kernel extends ConsoleKernel {\n constructor(public app: Application) {\n super(app)\n }\n\n static init (app: Application) {\n const instance = new Kernel(app)\n\n Promise.all([instance.loadRequirements()])\n .then(([e]) => e.run())\n }\n\n\n private async run () {\n await Musket.parse(this)\n process.exit(0)\n }\n\n private async loadRequirements () {\n this.cwd = path.join(process.cwd(), this.basePath)\n this.modulePath = FileSystem.findModulePkg('@h3ravel/core', this.cwd) ?? ''\n this.consolePath = FileSystem.findModulePkg('@h3ravel/console', this.cwd) ?? ''\n\n try {\n this.modulePackage = await import(path.join(this.modulePath, 'package.json'))\n } catch {\n this.modulePackage = { version: 'N/A' }\n }\n\n try {\n this.consolePackage = await import(path.join(this.consolePath, 'package.json'))\n } catch {\n this.consolePackage = { version: 'N/A' }\n }\n\n return this\n }\n}\n","/// <reference path=\"../../../core/src/app.globals.d.ts\" />\n\nimport { Kernel } from '../Kernel'\nimport { ServiceProvider } from '@h3ravel/core'\n/**\n * Handles CLI commands and tooling.\n * \n * Register DatabaseManager and QueryBuilder.\n * Set up ORM models and relationships.\n * Register migration and seeder commands.\n * \n * Auto-Registered when in CLI mode\n */\nexport class ConsoleServiceProvider extends ServiceProvider {\n public static priority = 992\n\n /**\n * Indicate that this service provider only runs in console\n */\n public static console = true\n\n register () {\n }\n\n boot () {\n Kernel.init(this.app)\n\n process.on('SIGINT', () => {\n process.exit(0)\n })\n process.on('SIGTERM', () => {\n process.exit(0)\n })\n }\n}\n"],"x_google_ignoreList":[6],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -91,6 +91,7 @@ declare class PostinstallCommand extends Command {
91
91
  handle(): Promise<void>;
92
92
  /**
93
93
  * Create sqlite database if none exist
94
+ *
94
95
  * @returns
95
96
  */
96
97
  private createSqliteDB;
package/dist/index.d.ts CHANGED
@@ -91,6 +91,7 @@ declare class PostinstallCommand extends Command {
91
91
  handle(): Promise<void>;
92
92
  /**
93
93
  * Create sqlite database if none exist
94
+ *
94
95
  * @returns
95
96
  */
96
97
  private createSqliteDB;
package/dist/index.js CHANGED
@@ -4,7 +4,6 @@ import { FileSystem, Logger } from "@h3ravel/shared";
4
4
  import { glob, mkdir, readFile, writeFile } from "node:fs/promises";
5
5
  import { beforeLast } from "@h3ravel/support";
6
6
  import dayjs from "dayjs";
7
- import { existsSync } from "node:fs";
8
7
  import nodepath from "node:path";
9
8
  import "@h3ravel/http";
10
9
  import "@h3ravel/router";
@@ -161,6 +160,7 @@ var MakeCommand = class extends Command {
161
160
  description = "Generate component classes";
162
161
  async handle() {
163
162
  const command = this.dictionary.baseCommand ?? this.dictionary.name;
163
+ if (!this.argument("name")) this.program.error("Please provide a valid name for the " + command);
164
164
  const methods = {
165
165
  controller: "makeController",
166
166
  resource: "makeResource",
@@ -183,11 +183,11 @@ var MakeCommand = class extends Command {
183
183
  const type = this.option("api") ? "-resource" : "";
184
184
  const name = this.argument("name");
185
185
  const force = this.option("force");
186
- const path = nodepath.join(app_path("Http/Controllers"), name + ".ts");
186
+ const path = app_path(`Http/Controllers/${name}.ts`);
187
187
  const crtlrPath = FileSystem.findModulePkg("@h3ravel/http", this.kernel.cwd) ?? "";
188
188
  const stubPath = nodepath.join(crtlrPath, `dist/stubs/controller${type}.stub`);
189
189
  /** Check if the controller already exists */
190
- if (!force && existsSync(path)) Logger.error(`ERORR: ${name} controller already exists`);
190
+ if (!force && await FileSystem.fileExists(path)) Logger.error(`ERORR: ${name} controller already exists`);
191
191
  let stub = await readFile(stubPath, "utf-8");
192
192
  stub = stub.replace(/{{ name }}/g, name);
193
193
  await writeFile(path, stub);
@@ -202,7 +202,7 @@ var MakeCommand = class extends Command {
202
202
  async makeMigration() {
203
203
  const name = this.argument("name");
204
204
  const datePrefix = dayjs().format("YYYY_MM_DD_HHmmss");
205
- const path = nodepath.join(database_path("migrations"), `${datePrefix}_${name}.ts`);
205
+ const path = database_path(`migrations/${datePrefix}_${name}.ts`);
206
206
  const crtlrPath = FileSystem.findModulePkg("@h3ravel/database", this.kernel.cwd) ?? "";
207
207
  let create = this.option("create", false);
208
208
  let table = this.option("table");
@@ -242,9 +242,9 @@ var MakeCommand = class extends Command {
242
242
  const type = this.option("type", "ts");
243
243
  const name = this.argument("name");
244
244
  const force = this.argument("force");
245
- const path = nodepath.join(app_path("Models"), name.toLowerCase(), "." + type);
245
+ const path = app_path(`Models/${name.toLowerCase()}.${type}`);
246
246
  /** Check if the model already exists */
247
- if (!force && existsSync(path)) Logger.error(`ERORR: ${name} view already exists`);
247
+ if (!force && await FileSystem.fileExists(path)) Logger.error(`ERORR: ${name} model already exists`);
248
248
  const crtlrPath = FileSystem.findModulePkg("@h3ravel/database", this.kernel.cwd) ?? "";
249
249
  const stubPath = nodepath.join(crtlrPath, `dist/stubs/model-${type}.stub`);
250
250
  let stub = await readFile(stubPath, "utf-8");
@@ -258,10 +258,10 @@ var MakeCommand = class extends Command {
258
258
  async makeView() {
259
259
  const name = this.argument("name");
260
260
  const force = this.option("force");
261
- const path = nodepath.join(base_path("src/resources/views"), name + ".edge");
261
+ const path = base_path(`src/resources/views/${name}.edge`);
262
262
  if (name.includes("/")) await mkdir(beforeLast(path, "/"), { recursive: true });
263
263
  /** Check if the view already exists */
264
- if (!force && existsSync(path)) Logger.error(`ERORR: ${name} view already exists`);
264
+ if (!force && await FileSystem.fileExists(path)) Logger.error(`ERORR: ${name} view already exists`);
265
265
  await writeFile(path, `{{-- src/resources/views/${name}.edge --}}`);
266
266
  Logger.split("INFO: View Created", Logger.log(`src/resources/views/${name}.edge`, "gray", false));
267
267
  }
@@ -302,6 +302,7 @@ var PostinstallCommand = class extends Command {
302
302
  }
303
303
  /**
304
304
  * Create sqlite database if none exist
305
+ *
305
306
  * @returns
306
307
  */
307
308
  async createSqliteDB() {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["e","stub: string","options: CommandOption[]","nestedOptions: CommandOption[] | undefined","flags: string[] | undefined","defaultValue: string | number | boolean | undefined | string[]","dir","entryFileName","TsDownConfig: Options","app: Application","kernel: Kernel","commands: Command[]","path","i","cmd","TsDownConfig","app: Application","path"],"sources":["../src/Commands/Command.ts","../src/logo.ts","../src/Commands/ListCommand.ts","../src/Commands/MakeCommand.ts","../src/Commands/PostinstallCommand.ts","../src/Signature.ts","../../../node_modules/.pnpm/@rollup+plugin-run@3.1.0/node_modules/@rollup/plugin-run/dist/es/index.js","../src/TsdownConfig.ts","../src/Musket.ts","../src/Kernel.ts","../src/Providers/ConsoleServiceProvider.ts"],"sourcesContent":["import { ConsoleCommand } from '@h3ravel/core'\n\nexport class Command extends ConsoleCommand { }\n","export const logo = String.raw`\n 111 \n 111111111 \n 1111111111 111111 \n 111111 111 111111 \n 111111 111 111111 \n11111 111 11111 \n1111111 111 1111111 \n111 11111 111 111111 111 1111 1111 11111111 1111\n111 11111 1111 111111 111 1111 1111 1111 11111 1111\n111 11111 11111 111 1111 1111 111111111111 111111111111 1111 1111111 1111\n111 111111 1111 111 111111111111 111111 11111 1111 111 1111 11111111 1111 1111\n111 111 11111111 111 1101 1101 111111111 11111111 1111 1111111111111111101\n111 1111111111111111 1111 111 1111 1111 111 11111011 1111 111 1111111 1101 1111\n111 11111 1110111111111111 111 1111 1111 1111111101 1111 111111111 1111011 111111111 1111\n1111111 111110111110 111 1111 1111 111111 1111 11011101 10111 11111 1111\n11011 111111 11 11111 \n 111111 11101 111111 \n 111111 111 111111 \n 111111 111 111111 \n 111111111 \n 110 \n`\n\nexport const altLogo = String.raw`\n _ _ _____ _ \n| | | |___ / _ __ __ ___ _____| |\n| |_| | |_ \\| '__/ _ \\ \\ / / _ \\ |\n| _ |___) | | | (_| |\\ V / __/ |\n|_| |_|____/|_| \\__,_| \\_/ \\___|_|\n\n`\n","import { Command } from './Command'\nimport { Logger } from '@h3ravel/shared'\nimport { Option } from 'commander'\n/* eslint-disable no-control-regex */\nimport { altLogo } from '../logo'\n\nexport class ListCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = 'list'\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'List all available commands'\n\n public async handle () {\n const options = [\n {\n short: '-h',\n long: '--help',\n description: 'Display help for the given command. When no command is given display help for the list command'\n } as Option\n ]\n .concat(this.program.options)\n .map(e => {\n const desc = Logger.describe(Logger.log(\n ' ' + [e.short, e.long].filter(e => !!e).join(', '), 'green', false\n ), e.description, 25, false)\n return desc.join('')\n })\n\n /** Get the program commands */\n const commands = this.program.commands.map(e => {\n const desc = Logger.describe(Logger.log(' ' + e.name(), 'green', false), e.description(), 25, false)\n return desc.join('')\n })\n\n const grouped = commands.reduce<Record<string, string[]>>((acc, cmd) => {\n /** strip colors before checking prefix */\n const clean = cmd.replace(/\\x1b\\[\\d+m/g, '')\n const prefix = clean.includes(':') ? clean.split(':')[0].trim() : '__root__'\n acc[prefix] ??= []\n /** keep original with colors */\n acc[prefix].push(cmd)\n return acc\n }, {})\n\n const list = Object.entries(grouped).map(([group, cmds]) => {\n const label = group === '__root__' ? '' : group\n return [Logger.log(label, 'yellow', false), cmds.join('\\n')].join('\\n')\n })\n\n /** Ootput the app version */\n Logger.log([['H3ravel Framework', 'white'], [this.kernel.modulePackage.version, 'green']], ' ')\n\n console.log('')\n\n console.log(altLogo)\n\n console.log('')\n\n Logger.log('Usage:', 'yellow')\n Logger.log(' command [options] [arguments]', 'white')\n\n console.log('')\n\n /** Ootput the options */\n Logger.log('Options:', 'yellow')\n console.log(options.join('\\n').trim())\n\n console.log('')\n\n /** Ootput the commands */\n Logger.log('Available Commands:', 'yellow')\n console.log(list.join('\\n\\n').trim())\n }\n}\n","import { FileSystem, Logger } from '@h3ravel/shared'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { TableGuesser } from '../Utils'\nimport { beforeLast } from '@h3ravel/support'\nimport dayjs from 'dayjs'\nimport { existsSync } from 'node:fs'\nimport nodepath from 'node:path'\n\nexport class MakeCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `#make:\n {controller : Create a new controller class. \n | {--a|api : Exclude the create and edit methods from the controller} \n | {--m|model= : Generate a resource controller for the given model} \n | {--r|resource : Generate a resource controller class} \n | {--force : Create the controller even if it already exists}\n }\n {resource : Create a new resource. \n | {--c|collection : Create a resource collection}\n | {--force : Create the resource even if it already exists}\n }\n {migration : Generates a new database migration class. \n | {--l|type=ts : The file type to generate} \n | {--t|table : The table to migrate} \n | {--c|create : The table to be created} \n }\n {factory : Create a new model factory.}\n {seeder : Create a new seeder class.}\n {view : Create a new view.\n | {--force : Create the view even if it already exists}\n }\n {model : Create a new Eloquent model class. \n | {--api : Indicates if the generated controller should be an API resource controller} \n | {--c|controller : Create a new controller for the model} \n | {--f|factory : Create a new factory for the model} \n | {--m|migration : Create a new migration file for the model} \n | {--r|resource : Indicates if the generated controller should be a resource controller} \n | {--a|all : Generate a migration, seeder, factory, policy, resource controller, and form request classes for the model} \n | {--s|seed : Create a new seeder for the model} \n | {--t|type=ts : The file type to generate}\n | {--force : Create the model even if it already exists}\n } \n {^name : The name of the [name] to generate}\n `\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Generate component classes'\n\n public async handle () {\n const command = (this.dictionary.baseCommand ?? this.dictionary.name) as never\n\n const methods = {\n controller: 'makeController',\n resource: 'makeResource',\n migration: 'makeMigration',\n factory: 'makeFactory',\n seeder: 'makeSeeder',\n model: 'makeModel',\n view: 'makeView',\n } as const\n\n try {\n await (this as any)?.[methods[command]]()\n } catch (e) {\n Logger.error(e as any)\n }\n }\n\n /**\n * Create a new controller class.\n */\n protected async makeController () {\n const type = this.option('api') ? '-resource' : ''\n const name = this.argument('name')\n const force = this.option('force')\n\n const path = nodepath.join(app_path('Http/Controllers'), name + '.ts')\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/http', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/controller${type}.stub`)\n\n /** Check if the controller already exists */\n if (!force && existsSync(path)) {\n Logger.error(`ERORR: ${name} controller already exists`)\n }\n\n let stub = await readFile(stubPath, 'utf-8')\n stub = stub.replace(/{{ name }}/g, name)\n\n await writeFile(path, stub)\n Logger.split('INFO: Controller Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n protected makeResource () {\n Logger.success('Resource support is not yet available')\n }\n\n /**\n * Generate a new database migration class\n */\n protected async makeMigration () {\n const name = this.argument('name')\n const datePrefix = dayjs().format('YYYY_MM_DD_HHmmss')\n const path = nodepath.join(database_path('migrations'), `${datePrefix}_${name}.ts`)\n\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/database', this.kernel.cwd) ?? ''\n\n let create = this.option('create', false)\n let table = this.option('table')\n if (!table && typeof create === 'string') {\n table = create\n create = true\n }\n\n if (!table) {\n const guessed = TableGuesser.guess(name)\n table = guessed[0]\n create = !!guessed[1]\n }\n\n const stubPath = nodepath.join(crtlrPath, this.getMigrationStubName(table, create))\n let stub = await readFile(stubPath, 'utf-8')\n\n if (table !== null) {\n stub = stub.replace(/DummyTable|{{\\s*table\\s*}}/g, table)\n }\n\n Logger.info('INFO: Creating Migration')\n\n await this.kernel.ensureDirectoryExists(nodepath.dirname(path))\n await writeFile(path, stub)\n\n Logger.split('INFO: Migration Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n /**\n * Create a new model factory\n */\n protected makeFactory () {\n Logger.success('Factory support is not yet available')\n }\n\n /**\n * Create a new seeder class\n */\n protected makeSeeder () {\n Logger.success('Seeder support is not yet available')\n }\n\n /**\n * Generate a new Arquebus model class\n */\n protected async makeModel () {\n const type = this.option('type', 'ts')\n const name = this.argument('name')\n const force = this.argument('force')\n\n const path = nodepath.join(app_path('Models'), name.toLowerCase(), '.' + type)\n\n /** Check if the model already exists */\n if (!force && existsSync(path)) {\n Logger.error(`ERORR: ${name} view already exists`)\n }\n\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/database', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/model-${type}.stub`)\n\n let stub = await readFile(stubPath, 'utf-8')\n stub = stub.replace(/{{ name }}/g, name)\n\n await writeFile(path, stub)\n Logger.split('INFO: Model Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n /**\n * Create a new view.\n */\n protected async makeView () {\n const name = this.argument('name')\n const force = this.option('force')\n\n const path = nodepath.join(base_path('src/resources/views'), name + '.edge')\n\n if (name.includes('/')) {\n await mkdir(beforeLast(path, '/'), { recursive: true })\n }\n\n /** Check if the view already exists */\n if (!force && existsSync(path)) {\n Logger.error(`ERORR: ${name} view already exists`)\n }\n\n await writeFile(path, `{{-- src/resources/views/${name}.edge --}}`)\n Logger.split('INFO: View Created', Logger.log(`src/resources/views/${name}.edge`, 'gray', false))\n }\n\n /**\n * Ge the database migration file name\n * \n * @param table \n * @param create \n * @param type \n * @returns \n */\n getMigrationStubName (table?: string, create: boolean = false, type: 'ts' | 'js' = 'ts') {\n let stub: string\n if (!table) {\n stub = `migration-${type}.stub`\n }\n else if (create) {\n stub = `migration.create-${type}.stub`\n }\n else {\n stub = `migration.update-${type}.stub`\n }\n return 'dist/stubs/' + stub\n }\n}\n","import { mkdir, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { FileSystem } from '@h3ravel/shared'\n\nexport class PostinstallCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = 'postinstall'\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Default post installation command'\n\n public async handle () {\n this.createSqliteDB()\n }\n\n /**\n * Create sqlite database if none exist\n * @returns \n */\n private async createSqliteDB () {\n if (config('database.default') !== 'sqlite') return\n\n if (!await FileSystem.fileExists(database_path())) {\n await mkdir(database_path(), { recursive: true })\n }\n\n if (!await FileSystem.fileExists(database_path('db.sqlite'))) {\n await writeFile(database_path('db.sqlite'), '')\n }\n }\n}\n","import { CommandOption, ParsedCommand } from './Contracts/ICommand'\n\nimport { Command } from './Commands/Command'\n\nexport class Signature {\n /**\n * Helper to parse options inside a block of text\n * \n * @param block \n * @returns \n */\n static parseOptions (block: string): CommandOption[] {\n const options: CommandOption[] = []\n /**\n * Match { ... } blocks at top level \n */\n const regex = /\\{([^{}]+(?:\\{[^{}]*\\}[^{}]*)*)\\}/g\n let match\n\n while ((match = regex.exec(block)) !== null) {\n const shared = '^' === match[1][0]! || /:[#^]/.test(match[1])\n const isHidden = (['#', '^'].includes(match[1][0]!) || /:[#^]/.test(match[1])) && !shared\n const content = match[1].trim().replace(/[#^]/, '')\n /**\n * Split by first ':' to separate name and description+nested\n */\n const colonIndex = content.indexOf(':')\n if (colonIndex === -1) {\n /**\n * No description, treat whole as name\n */\n options.push({ name: content })\n continue\n }\n\n const namePart = content.substring(0, colonIndex).trim()\n const rest = content.substring(colonIndex + 1).trim()\n\n /**\n * Check for nested options after '|'\n */\n let description = rest\n let nestedOptions: CommandOption[] | undefined\n\n const pipeIndex = rest.indexOf('|')\n if (pipeIndex !== -1) {\n description = rest.substring(0, pipeIndex).trim()\n const nestedText = rest.substring(pipeIndex + 1).trim()\n /**\n * nestedText should start with '{' and end with ')', clean it\n * Also Remove trailing ')' if present\n */\n const cleanedNestedText = nestedText.replace(/^\\{/, '').trim()\n\n /**\n * Parse nested options recursively\n */\n nestedOptions = Signature.parseOptions('{' + cleanedNestedText + '}')\n } else {\n /**\n * Trim the string\n */\n description = description.trim()\n }\n\n /**\n * Parse name modifiers (?, *, ?*)\n */\n let name = namePart\n let required = /[^a-zA-Z0-9_|-]/.test(name)\n let multiple = false\n\n if (name.endsWith('?*')) {\n required = false\n multiple = true\n name = name.slice(0, -2)\n } else if (name.endsWith('*')) {\n multiple = true\n name = name.slice(0, -1)\n } else if (name.endsWith('?')) {\n required = false\n name = name.slice(0, -1)\n }\n\n /**\n * Check if it's a flag option (starts with --)\n */\n const isFlag = name.startsWith('--')\n let flags: string[] | undefined\n let defaultValue: string | number | boolean | undefined | string[]\n\n if (isFlag) {\n /**\n * Parse flags and default values\n */\n const flagParts = name.split('|').map(s => s.trim())\n\n flags = []\n\n for (let part of flagParts) {\n if (part.startsWith('--') && part.slice(2).length === 1) {\n part = '-' + part.slice(2)\n } else if (part.startsWith('-') && !part.startsWith('--') && part.slice(1).length > 1) {\n part = '--' + part.slice(1)\n } else if (!part.startsWith('-') && part.slice(1).length > 1) {\n part = '--' + part\n }\n\n const eqIndex = part.indexOf('=')\n if (eqIndex !== -1) {\n flags.push(part.substring(0, eqIndex))\n const val = part.substring(eqIndex + 1)\n if (val === '*') {\n defaultValue = []\n } else if (val === 'true' || val === 'false' || (!val && !required)) {\n defaultValue = val === 'true'\n } else if (!isNaN(Number(val))) {\n defaultValue = Number(val)\n } else {\n defaultValue = val\n }\n } else {\n flags.push(part)\n }\n }\n }\n\n options.push({\n name: isFlag ? flags![flags!.length - 1] : name,\n required,\n multiple,\n description,\n flags,\n shared,\n isFlag,\n isHidden,\n defaultValue,\n nestedOptions,\n })\n }\n\n return options\n }\n\n /**\n * Helper to parse a command's signature\n * \n * @param signature \n * @param commandClass \n * @returns \n */\n static parseSignature (signature: string, commandClass: Command): ParsedCommand {\n const lines = signature.split('\\n').map(l => l.trim()).filter(l => l.length > 0)\n const isHidden = ['#', '^'].includes(lines[0][0]!) || /:[#^]/.test(lines[0])\n const baseCommand = lines[0].replace(/[^\\w=:-]/g, '')\n const description = commandClass.getDescription()\n const isNamespaceCommand = baseCommand.endsWith(':')\n\n /**\n * Join the rest lines to a single string for parsing\n */\n const rest = lines.slice(1).join(' ')\n\n /**\n * Parse all top-level options/subcommands\n */\n const allOptions = Signature.parseOptions(rest)\n\n if (isNamespaceCommand) {\n /**\n * Separate subcommands (those without flags) and base options (flags)\n * Here we assume subcommands are those without flags (isFlag false)\n * and base options are flags or options after subcommands\n\n * For simplicity, treat all top-level options as subcommands\n * and assume base command options come after subcommands in signature (not shown in example)\n */\n\n return {\n baseCommand: baseCommand.slice(0, -1),\n isNamespaceCommand,\n subCommands: allOptions.filter(e => !e.flags && !e.isHidden),\n description,\n commandClass,\n options: allOptions.filter(e => !!e.flags),\n isHidden,\n }\n } else {\n return {\n baseCommand,\n isNamespaceCommand,\n options: allOptions,\n description,\n commandClass,\n isHidden,\n }\n }\n }\n}\n","import { dirname, join, resolve } from 'path';\n\nimport { fork } from 'child_process';\n\nfunction run (opts = {}) {\n let input;\n let proc;\n const args = opts.args || [];\n const allowRestarts = opts.allowRestarts || false;\n const overrideInput = opts.input;\n const forkOptions = opts.options || opts;\n delete forkOptions.args;\n delete forkOptions.allowRestarts;\n return {\n name: 'run',\n buildStart (options) {\n let inputs = overrideInput !== null && overrideInput !== void 0 ? overrideInput : options.input;\n if (typeof inputs === 'string') {\n inputs = [inputs];\n }\n if (typeof inputs === 'object') {\n inputs = Object.values(inputs);\n }\n if (inputs.length > 1) {\n throw new Error(`@rollup/plugin-run must have a single entry point; consider setting the \\`input\\` option`);\n }\n input = resolve(inputs[0]);\n },\n generateBundle (_outputOptions, _bundle, isWrite) {\n if (!isWrite) {\n this.error(`@rollup/plugin-run currently only works with bundles that are written to disk`);\n }\n },\n writeBundle (outputOptions, bundle) {\n const forkBundle = (dir, entryFileName) => {\n if (proc)\n proc.kill();\n proc = fork(join(dir, entryFileName), args, forkOptions);\n };\n const dir = outputOptions.dir || dirname(outputOptions.file);\n const entryFileName = Object.keys(bundle).find((fileName) => {\n const chunk = bundle[fileName];\n return chunk.isEntry && chunk.facadeModuleId === input;\n });\n if (entryFileName) {\n forkBundle(dir, entryFileName);\n if (allowRestarts) {\n process.stdin.resume();\n process.stdin.setEncoding('utf8');\n process.stdin.on('data', (data) => {\n const line = data.toString().trim().toLowerCase();\n if (line === 'rs' || line === 'restart' || data.toString().charCodeAt(0) === 11) {\n forkBundle(dir, entryFileName);\n }\n else if (line === 'cls' || line === 'clear' || data.toString().charCodeAt(0) === 12) {\n // eslint-disable-next-line no-console\n console.clear();\n }\n });\n }\n }\n else {\n this.error(`@rollup/plugin-run could not find output chunk`);\n }\n }\n };\n}\n\nexport { run as default };\n//# sourceMappingURL=index.js.map\n","import { Options } from 'tsdown'\nimport run from '@rollup/plugin-run'\n\nconst env = process.env.NODE_ENV || 'development'\nconst outDir = env === 'development' ? '.h3ravel/serve' : 'dist'\n\nexport const TsDownConfig: Options = {\n outDir,\n entry: ['src/**/*.ts'],\n format: ['esm'],//, 'cjs'],\n target: 'node22',\n sourcemap: env === 'development',\n clean: true,\n shims: true,\n copy: [{ from: 'public', to: outDir }, 'src/resources', 'src/database'],\n env: env === 'development' ? {\n NODE_ENV: env,\n SRC_PATH: outDir,\n } : {},\n watch:\n env === 'development' && process.env.CLI_BUILD !== 'true'\n ? ['.env', '.env.*', 'src', '../../packages']\n : false,\n dts: false,\n logLevel: 'silent',\n nodeProtocol: true,\n skipNodeModulesBundle: true,\n plugins: env === 'development' && process.env.CLI_BUILD !== 'true' ? [\n run({\n env: Object.assign({}, process.env, {\n NODE_ENV: env,\n SRC_PATH: outDir,\n }),\n execArgv: ['-r', 'source-map-support/register'],\n allowRestarts: false,\n input: process.cwd() + '/src/server.ts'//\n })\n ] : [],\n}\n\nexport default TsDownConfig\n","import { CommandOption, ParsedCommand } from './Contracts/ICommand'\nimport { Option, program, type Command as Commander } from 'commander'\n\nimport { Application } from '@h3ravel/core'\nimport { Command } from './Commands/Command'\nimport { Kernel } from './Kernel'\nimport { ListCommand } from './Commands/ListCommand'\nimport { Logger } from '@h3ravel/shared'\nimport { MakeCommand } from './Commands/MakeCommand'\nimport { Signature } from './Signature'\nimport TsDownConfig from './TsdownConfig'\nimport { altLogo } from './logo'\nimport { build } from 'tsdown'\nimport { glob } from 'node:fs/promises'\nimport path from 'node:path'\nimport { PostinstallCommand } from './Commands/PostinstallCommand'\n\n/**\n * Musket is H3ravel's CLI tool\n */\nexport class Musket {\n private commands: ParsedCommand[] = []\n\n constructor(private app: Application, private kernel: Kernel) { }\n\n async build () {\n this.loadBaseCommands()\n await this.loadDiscoveredCommands()\n return this.initialize()\n }\n\n private loadBaseCommands () {\n const commands: Command[] = [\n new MakeCommand(this.app, this.kernel),\n new ListCommand(this.app, this.kernel),\n new PostinstallCommand(this.app, this.kernel),\n ]\n\n commands.forEach(e => this.addCommand(e))\n }\n\n private async loadDiscoveredCommands () {\n const commands: Command[] = [\n ...this.app.registeredCommands.map(cmd => new cmd(this.app, this.kernel))\n ]\n\n /**\n * Musket Commands auto registration\n */\n const providers_path = app_path('Console/Commands/*.js').replace('/src/', '/.h3ravel/serve/')\n\n /** Add the App Commands */\n for await (const cmd of glob(providers_path)) {\n const name = path.basename(cmd).replace('.js', '')\n try {\n const cmdClass = (await import(cmd))[name]\n commands.push(new cmdClass(this.app, this.kernel))\n } catch { /** */ }\n }\n\n commands.forEach(e => this.addCommand(e))\n }\n\n addCommand (command: Command) {\n this.commands.push(Signature.parseSignature(command.getSignature(), command))\n }\n\n private initialize () {\n /** Init the Musket Version */\n const cliVersion = Logger.parse([\n ['Musket CLI:', 'white'],\n [this.kernel.consolePackage.version, 'green']\n ], ' ', false)\n\n /** Init the App Version */\n const localVersion = Logger.parse([\n ['H3ravel Framework:', 'white'],\n [this.kernel.modulePackage.version, 'green']\n ], ' ', false)\n\n const additional = {\n quiet: ['-q, --quiet', 'Do not output any message'],\n silent: ['--silent', 'Do not output any message'],\n verbose: ['-v, --verbose <number>', 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'],\n lock: ['--lock', 'Locked and loaded, do not ask any interactive question'],\n }\n\n /** Init Commander */\n program\n .name('musket')\n .version(`${cliVersion}\\n${localVersion}`)\n .description(altLogo)\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n const instance = new ListCommand(this.app, this.kernel)\n instance.setInput(program.opts(), program.args, program.registeredArguments, {}, program)\n instance.handle()\n })\n\n /** Create the init Command */\n program\n .command('init')\n .description('Initialize H3ravel.')\n .action(async () => {\n Logger.success('Initialized: H3ravel has been initialized!')\n })\n\n /** Loop through all the available commands */\n for (let i = 0; i < this.commands.length; i++) {\n const command = this.commands[i]\n const instance = command.commandClass\n\n if (command.isNamespaceCommand && command.subCommands) {\n /**\n * Initialize the base command\n */\n const cmd = command.isHidden\n ? program\n : program\n .command(command.baseCommand)\n .description(command.description ?? '')\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program)\n await instance.handle()\n })\n\n /**\n * Add options to the base command if it has any\n */\n if ((command.options?.length ?? 0) > 0) {\n command.options\n ?.filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd)\n })\n }\n\n /**\n * Initialize the sub commands\n */\n command\n .subCommands\n .filter((v, i, a) => !v.shared && a.findIndex(t => t.name === v.name) === i)\n .forEach(sub => {\n const cmd = program\n .command(`${command.baseCommand}:${sub.name}`)\n .description(sub.description || '')\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, sub, program)\n await instance.handle()\n })\n\n /**\n * Add the shared arguments here\n */\n command.subCommands?.filter(e => e.shared).forEach(opt => {\n this.makeOption(opt, cmd, false, sub)\n })\n\n /**\n * Add the shared options here\n */\n command.options?.filter(e => e.shared).forEach(opt => {\n this.makeOption(opt, cmd, false, sub)\n })\n\n /**\n * Add options to the sub command if it has any\n */\n if (sub.nestedOptions) {\n sub.nestedOptions\n .filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd)\n })\n }\n })\n } else {\n /**\n * Initialize command with options\n */\n const cmd = program\n .command(command.baseCommand)\n .description(command.description ?? '')\n\n command\n ?.options\n ?.filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd, true)\n })\n\n cmd.action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program)\n await instance.handle()\n })\n }\n }\n\n /** Rebuild the app on every command except fire so we wont need TS */\n program.hook('preAction', async (_, cmd) => {\n if (cmd.name() !== 'fire') {\n await build({\n ...TsDownConfig,\n watch: false,\n plugins: []\n })\n }\n })\n\n return program\n }\n\n makeOption (opt: CommandOption, cmd: Commander, parse?: boolean, parent?: any) {\n const description = opt.description?.replace(/\\[(\\w+)\\]/g, (_, k) => parent?.[k] ?? `[${k}]`) ?? ''\n const type = opt.name.replaceAll('-', '')\n\n if (opt.isFlag) {\n if (parse) {\n const flags = opt.flags\n ?.map(f => (f.length === 1 ? `-${f}` : `--${f}`)).join(', ')!\n .replaceAll('----', '--')\n .replaceAll('---', '-')\n\n cmd.option(flags || '', description!, String(opt.defaultValue) || undefined)\n } else {\n cmd.option(\n opt.flags?.join(', ') + (opt.required ? ` <${type}>` : ''),\n description!,\n opt.defaultValue as any\n )\n }\n } else {\n cmd.argument(\n opt.required ? `<${opt.name}>` : `[${opt.name}]`,\n description,\n opt.defaultValue\n )\n }\n }\n\n static async parse (kernel: Kernel) {\n return (await new Musket(kernel.app, kernel).build()).parseAsync()\n }\n\n}\n","import { Application, ConsoleKernel } from '@h3ravel/core'\n\nimport { FileSystem } from '@h3ravel/shared'\nimport { Musket } from './Musket'\nimport path from 'node:path'\n\nexport class Kernel extends ConsoleKernel {\n constructor(public app: Application) {\n super(app)\n }\n\n static init (app: Application) {\n const instance = new Kernel(app)\n\n Promise.all([instance.loadRequirements()])\n .then(([e]) => e.run())\n }\n\n\n private async run () {\n await Musket.parse(this)\n process.exit(0)\n }\n\n private async loadRequirements () {\n this.cwd = path.join(process.cwd(), this.basePath)\n this.modulePath = FileSystem.findModulePkg('@h3ravel/core', this.cwd) ?? ''\n this.consolePath = FileSystem.findModulePkg('@h3ravel/console', this.cwd) ?? ''\n\n try {\n this.modulePackage = await import(path.join(this.modulePath, 'package.json'))\n } catch {\n this.modulePackage = { version: 'N/A' }\n }\n\n try {\n this.consolePackage = await import(path.join(this.consolePath, 'package.json'))\n } catch {\n this.consolePackage = { version: 'N/A' }\n }\n\n return this\n }\n}\n","/// <reference path=\"../../../core/src/app.globals.d.ts\" />\n\nimport { Kernel } from '../Kernel'\nimport { ServiceProvider } from '@h3ravel/core'\n/**\n * Handles CLI commands and tooling.\n * \n * Register DatabaseManager and QueryBuilder.\n * Set up ORM models and relationships.\n * Register migration and seeder commands.\n * \n * Auto-Registered when in CLI mode\n */\nexport class ConsoleServiceProvider extends ServiceProvider {\n public static priority = 992\n\n /**\n * Indicate that this service provider only runs in console\n */\n public static console = true\n\n register () {\n }\n\n boot () {\n Kernel.init(this.app)\n\n process.on('SIGINT', () => {\n process.exit(0)\n })\n process.on('SIGTERM', () => {\n process.exit(0)\n })\n }\n}\n"],"x_google_ignoreList":[6],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["e","stub: string","options: CommandOption[]","nestedOptions: CommandOption[] | undefined","flags: string[] | undefined","defaultValue: string | number | boolean | undefined | string[]","dir","entryFileName","TsDownConfig: Options","app: Application","kernel: Kernel","commands: Command[]","path","i","cmd","TsDownConfig","app: Application","path"],"sources":["../src/Commands/Command.ts","../src/logo.ts","../src/Commands/ListCommand.ts","../src/Commands/MakeCommand.ts","../src/Commands/PostinstallCommand.ts","../src/Signature.ts","../../../node_modules/.pnpm/@rollup+plugin-run@3.1.0/node_modules/@rollup/plugin-run/dist/es/index.js","../src/TsdownConfig.ts","../src/Musket.ts","../src/Kernel.ts","../src/Providers/ConsoleServiceProvider.ts"],"sourcesContent":["import { ConsoleCommand } from '@h3ravel/core'\n\nexport class Command extends ConsoleCommand { }\n","export const logo = String.raw`\n 111 \n 111111111 \n 1111111111 111111 \n 111111 111 111111 \n 111111 111 111111 \n11111 111 11111 \n1111111 111 1111111 \n111 11111 111 111111 111 1111 1111 11111111 1111\n111 11111 1111 111111 111 1111 1111 1111 11111 1111\n111 11111 11111 111 1111 1111 111111111111 111111111111 1111 1111111 1111\n111 111111 1111 111 111111111111 111111 11111 1111 111 1111 11111111 1111 1111\n111 111 11111111 111 1101 1101 111111111 11111111 1111 1111111111111111101\n111 1111111111111111 1111 111 1111 1111 111 11111011 1111 111 1111111 1101 1111\n111 11111 1110111111111111 111 1111 1111 1111111101 1111 111111111 1111011 111111111 1111\n1111111 111110111110 111 1111 1111 111111 1111 11011101 10111 11111 1111\n11011 111111 11 11111 \n 111111 11101 111111 \n 111111 111 111111 \n 111111 111 111111 \n 111111111 \n 110 \n`\n\nexport const altLogo = String.raw`\n _ _ _____ _ \n| | | |___ / _ __ __ ___ _____| |\n| |_| | |_ \\| '__/ _ \\ \\ / / _ \\ |\n| _ |___) | | | (_| |\\ V / __/ |\n|_| |_|____/|_| \\__,_| \\_/ \\___|_|\n\n`\n","import { Command } from './Command'\nimport { Logger } from '@h3ravel/shared'\nimport { Option } from 'commander'\n/* eslint-disable no-control-regex */\nimport { altLogo } from '../logo'\n\nexport class ListCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = 'list'\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'List all available commands'\n\n public async handle () {\n const options = [\n {\n short: '-h',\n long: '--help',\n description: 'Display help for the given command. When no command is given display help for the list command'\n } as Option\n ]\n .concat(this.program.options)\n .map(e => {\n const desc = Logger.describe(Logger.log(\n ' ' + [e.short, e.long].filter(e => !!e).join(', '), 'green', false\n ), e.description, 25, false)\n return desc.join('')\n })\n\n /** Get the program commands */\n const commands = this.program.commands.map(e => {\n const desc = Logger.describe(Logger.log(' ' + e.name(), 'green', false), e.description(), 25, false)\n return desc.join('')\n })\n\n const grouped = commands.reduce<Record<string, string[]>>((acc, cmd) => {\n /** strip colors before checking prefix */\n const clean = cmd.replace(/\\x1b\\[\\d+m/g, '')\n const prefix = clean.includes(':') ? clean.split(':')[0].trim() : '__root__'\n acc[prefix] ??= []\n /** keep original with colors */\n acc[prefix].push(cmd)\n return acc\n }, {})\n\n const list = Object.entries(grouped).map(([group, cmds]) => {\n const label = group === '__root__' ? '' : group\n return [Logger.log(label, 'yellow', false), cmds.join('\\n')].join('\\n')\n })\n\n /** Ootput the app version */\n Logger.log([['H3ravel Framework', 'white'], [this.kernel.modulePackage.version, 'green']], ' ')\n\n console.log('')\n\n console.log(altLogo)\n\n console.log('')\n\n Logger.log('Usage:', 'yellow')\n Logger.log(' command [options] [arguments]', 'white')\n\n console.log('')\n\n /** Ootput the options */\n Logger.log('Options:', 'yellow')\n console.log(options.join('\\n').trim())\n\n console.log('')\n\n /** Ootput the commands */\n Logger.log('Available Commands:', 'yellow')\n console.log(list.join('\\n\\n').trim())\n }\n}\n","import { FileSystem, Logger } from '@h3ravel/shared'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { TableGuesser } from '../Utils'\nimport { beforeLast } from '@h3ravel/support'\nimport dayjs from 'dayjs'\nimport nodepath from 'node:path'\n\nexport class MakeCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `#make:\n {controller : Create a new controller class. \n | {--a|api : Exclude the create and edit methods from the controller} \n | {--m|model= : Generate a resource controller for the given model} \n | {--r|resource : Generate a resource controller class} \n | {--force : Create the controller even if it already exists}\n }\n {resource : Create a new resource. \n | {--c|collection : Create a resource collection}\n | {--force : Create the resource even if it already exists}\n }\n {migration : Generates a new database migration class. \n | {--l|type=ts : The file type to generate} \n | {--t|table : The table to migrate} \n | {--c|create : The table to be created} \n }\n {factory : Create a new model factory.}\n {seeder : Create a new seeder class.}\n {view : Create a new view.\n | {--force : Create the view even if it already exists}\n }\n {model : Create a new Eloquent model class. \n | {--api : Indicates if the generated controller should be an API resource controller} \n | {--c|controller : Create a new controller for the model} \n | {--f|factory : Create a new factory for the model} \n | {--m|migration : Create a new migration file for the model} \n | {--r|resource : Indicates if the generated controller should be a resource controller} \n | {--a|all : Generate a migration, seeder, factory, policy, resource controller, and form request classes for the model} \n | {--s|seed : Create a new seeder for the model} \n | {--t|type=ts : The file type to generate}\n | {--force : Create the model even if it already exists}\n } \n {^name : The name of the [name] to generate}\n `\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Generate component classes'\n\n public async handle () {\n const command = (this.dictionary.baseCommand ?? this.dictionary.name) as never\n\n if (!this.argument('name')) {\n this.program.error('Please provide a valid name for the ' + command)\n }\n\n const methods = {\n controller: 'makeController',\n resource: 'makeResource',\n migration: 'makeMigration',\n factory: 'makeFactory',\n seeder: 'makeSeeder',\n model: 'makeModel',\n view: 'makeView',\n } as const\n\n try {\n await (this as any)?.[methods[command]]()\n } catch (e) {\n Logger.error(e as any)\n }\n }\n\n /**\n * Create a new controller class.\n */\n protected async makeController () {\n const type = this.option('api') ? '-resource' : ''\n const name = this.argument('name')\n const force = this.option('force')\n\n const path = app_path(`Http/Controllers/${name}.ts`)\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/http', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/controller${type}.stub`)\n\n /** Check if the controller already exists */\n if (!force && await FileSystem.fileExists(path)) {\n Logger.error(`ERORR: ${name} controller already exists`)\n }\n\n let stub = await readFile(stubPath, 'utf-8')\n stub = stub.replace(/{{ name }}/g, name)\n\n await writeFile(path, stub)\n Logger.split('INFO: Controller Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n protected makeResource () {\n Logger.success('Resource support is not yet available')\n }\n\n /**\n * Generate a new database migration class\n */\n protected async makeMigration () {\n const name = this.argument('name')\n const datePrefix = dayjs().format('YYYY_MM_DD_HHmmss')\n const path = database_path(`migrations/${datePrefix}_${name}.ts`)\n\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/database', this.kernel.cwd) ?? ''\n\n let create = this.option('create', false)\n let table = this.option('table')\n if (!table && typeof create === 'string') {\n table = create\n create = true\n }\n\n if (!table) {\n const guessed = TableGuesser.guess(name)\n table = guessed[0]\n create = !!guessed[1]\n }\n\n const stubPath = nodepath.join(crtlrPath, this.getMigrationStubName(table, create))\n let stub = await readFile(stubPath, 'utf-8')\n\n if (table !== null) {\n stub = stub.replace(/DummyTable|{{\\s*table\\s*}}/g, table)\n }\n\n Logger.info('INFO: Creating Migration')\n\n await this.kernel.ensureDirectoryExists(nodepath.dirname(path))\n await writeFile(path, stub)\n\n Logger.split('INFO: Migration Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n /**\n * Create a new model factory\n */\n protected makeFactory () {\n Logger.success('Factory support is not yet available')\n }\n\n /**\n * Create a new seeder class\n */\n protected makeSeeder () {\n Logger.success('Seeder support is not yet available')\n }\n\n /**\n * Generate a new Arquebus model class\n */\n protected async makeModel () {\n const type = this.option('type', 'ts')\n const name = this.argument('name')\n const force = this.argument('force')\n\n const path = app_path(`Models/${name.toLowerCase()}.${type}`)\n\n /** Check if the model already exists */\n if (!force && await FileSystem.fileExists(path)) {\n Logger.error(`ERORR: ${name} model already exists`)\n }\n\n const crtlrPath = FileSystem.findModulePkg('@h3ravel/database', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/model-${type}.stub`)\n\n let stub = await readFile(stubPath, 'utf-8')\n stub = stub.replace(/{{ name }}/g, name)\n\n await writeFile(path, stub)\n Logger.split('INFO: Model Created', Logger.log(nodepath.basename(path), 'gray', false))\n }\n\n /**\n * Create a new view.\n */\n protected async makeView () {\n const name = this.argument('name')\n const force = this.option('force')\n\n const path = base_path(`src/resources/views/${name}.edge`)\n\n if (name.includes('/')) {\n await mkdir(beforeLast(path, '/'), { recursive: true })\n }\n\n /** Check if the view already exists */\n if (!force && await FileSystem.fileExists(path)) {\n Logger.error(`ERORR: ${name} view already exists`)\n }\n\n await writeFile(path, `{{-- src/resources/views/${name}.edge --}}`)\n Logger.split('INFO: View Created', Logger.log(`src/resources/views/${name}.edge`, 'gray', false))\n }\n\n /**\n * Ge the database migration file name\n * \n * @param table \n * @param create \n * @param type \n * @returns \n */\n getMigrationStubName (table?: string, create: boolean = false, type: 'ts' | 'js' = 'ts') {\n let stub: string\n if (!table) {\n stub = `migration-${type}.stub`\n }\n else if (create) {\n stub = `migration.create-${type}.stub`\n }\n else {\n stub = `migration.update-${type}.stub`\n }\n return 'dist/stubs/' + stub\n }\n}\n","import { mkdir, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { FileSystem } from '@h3ravel/shared'\n\nexport class PostinstallCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = 'postinstall'\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Default post installation command'\n\n public async handle () {\n this.createSqliteDB()\n }\n\n /**\n * Create sqlite database if none exist\n * \n * @returns \n */\n private async createSqliteDB () {\n if (config('database.default') !== 'sqlite') return\n\n if (!await FileSystem.fileExists(database_path())) {\n await mkdir(database_path(), { recursive: true })\n }\n\n if (!await FileSystem.fileExists(database_path('db.sqlite'))) {\n await writeFile(database_path('db.sqlite'), '')\n }\n }\n}\n","import { CommandOption, ParsedCommand } from './Contracts/ICommand'\n\nimport { Command } from './Commands/Command'\n\nexport class Signature {\n /**\n * Helper to parse options inside a block of text\n * \n * @param block \n * @returns \n */\n static parseOptions (block: string): CommandOption[] {\n const options: CommandOption[] = []\n /**\n * Match { ... } blocks at top level \n */\n const regex = /\\{([^{}]+(?:\\{[^{}]*\\}[^{}]*)*)\\}/g\n let match\n\n while ((match = regex.exec(block)) !== null) {\n const shared = '^' === match[1][0]! || /:[#^]/.test(match[1])\n const isHidden = (['#', '^'].includes(match[1][0]!) || /:[#^]/.test(match[1])) && !shared\n const content = match[1].trim().replace(/[#^]/, '')\n /**\n * Split by first ':' to separate name and description+nested\n */\n const colonIndex = content.indexOf(':')\n if (colonIndex === -1) {\n /**\n * No description, treat whole as name\n */\n options.push({ name: content })\n continue\n }\n\n const namePart = content.substring(0, colonIndex).trim()\n const rest = content.substring(colonIndex + 1).trim()\n\n /**\n * Check for nested options after '|'\n */\n let description = rest\n let nestedOptions: CommandOption[] | undefined\n\n const pipeIndex = rest.indexOf('|')\n if (pipeIndex !== -1) {\n description = rest.substring(0, pipeIndex).trim()\n const nestedText = rest.substring(pipeIndex + 1).trim()\n /**\n * nestedText should start with '{' and end with ')', clean it\n * Also Remove trailing ')' if present\n */\n const cleanedNestedText = nestedText.replace(/^\\{/, '').trim()\n\n /**\n * Parse nested options recursively\n */\n nestedOptions = Signature.parseOptions('{' + cleanedNestedText + '}')\n } else {\n /**\n * Trim the string\n */\n description = description.trim()\n }\n\n /**\n * Parse name modifiers (?, *, ?*)\n */\n let name = namePart\n let required = /[^a-zA-Z0-9_|-]/.test(name)\n let multiple = false\n\n if (name.endsWith('?*')) {\n required = false\n multiple = true\n name = name.slice(0, -2)\n } else if (name.endsWith('*')) {\n multiple = true\n name = name.slice(0, -1)\n } else if (name.endsWith('?')) {\n required = false\n name = name.slice(0, -1)\n }\n\n /**\n * Check if it's a flag option (starts with --)\n */\n const isFlag = name.startsWith('--')\n let flags: string[] | undefined\n let defaultValue: string | number | boolean | undefined | string[]\n\n if (isFlag) {\n /**\n * Parse flags and default values\n */\n const flagParts = name.split('|').map(s => s.trim())\n\n flags = []\n\n for (let part of flagParts) {\n if (part.startsWith('--') && part.slice(2).length === 1) {\n part = '-' + part.slice(2)\n } else if (part.startsWith('-') && !part.startsWith('--') && part.slice(1).length > 1) {\n part = '--' + part.slice(1)\n } else if (!part.startsWith('-') && part.slice(1).length > 1) {\n part = '--' + part\n }\n\n const eqIndex = part.indexOf('=')\n if (eqIndex !== -1) {\n flags.push(part.substring(0, eqIndex))\n const val = part.substring(eqIndex + 1)\n if (val === '*') {\n defaultValue = []\n } else if (val === 'true' || val === 'false' || (!val && !required)) {\n defaultValue = val === 'true'\n } else if (!isNaN(Number(val))) {\n defaultValue = Number(val)\n } else {\n defaultValue = val\n }\n } else {\n flags.push(part)\n }\n }\n }\n\n options.push({\n name: isFlag ? flags![flags!.length - 1] : name,\n required,\n multiple,\n description,\n flags,\n shared,\n isFlag,\n isHidden,\n defaultValue,\n nestedOptions,\n })\n }\n\n return options\n }\n\n /**\n * Helper to parse a command's signature\n * \n * @param signature \n * @param commandClass \n * @returns \n */\n static parseSignature (signature: string, commandClass: Command): ParsedCommand {\n const lines = signature.split('\\n').map(l => l.trim()).filter(l => l.length > 0)\n const isHidden = ['#', '^'].includes(lines[0][0]!) || /:[#^]/.test(lines[0])\n const baseCommand = lines[0].replace(/[^\\w=:-]/g, '')\n const description = commandClass.getDescription()\n const isNamespaceCommand = baseCommand.endsWith(':')\n\n /**\n * Join the rest lines to a single string for parsing\n */\n const rest = lines.slice(1).join(' ')\n\n /**\n * Parse all top-level options/subcommands\n */\n const allOptions = Signature.parseOptions(rest)\n\n if (isNamespaceCommand) {\n /**\n * Separate subcommands (those without flags) and base options (flags)\n * Here we assume subcommands are those without flags (isFlag false)\n * and base options are flags or options after subcommands\n\n * For simplicity, treat all top-level options as subcommands\n * and assume base command options come after subcommands in signature (not shown in example)\n */\n\n return {\n baseCommand: baseCommand.slice(0, -1),\n isNamespaceCommand,\n subCommands: allOptions.filter(e => !e.flags && !e.isHidden),\n description,\n commandClass,\n options: allOptions.filter(e => !!e.flags),\n isHidden,\n }\n } else {\n return {\n baseCommand,\n isNamespaceCommand,\n options: allOptions,\n description,\n commandClass,\n isHidden,\n }\n }\n }\n}\n","import { dirname, join, resolve } from 'path';\n\nimport { fork } from 'child_process';\n\nfunction run (opts = {}) {\n let input;\n let proc;\n const args = opts.args || [];\n const allowRestarts = opts.allowRestarts || false;\n const overrideInput = opts.input;\n const forkOptions = opts.options || opts;\n delete forkOptions.args;\n delete forkOptions.allowRestarts;\n return {\n name: 'run',\n buildStart (options) {\n let inputs = overrideInput !== null && overrideInput !== void 0 ? overrideInput : options.input;\n if (typeof inputs === 'string') {\n inputs = [inputs];\n }\n if (typeof inputs === 'object') {\n inputs = Object.values(inputs);\n }\n if (inputs.length > 1) {\n throw new Error(`@rollup/plugin-run must have a single entry point; consider setting the \\`input\\` option`);\n }\n input = resolve(inputs[0]);\n },\n generateBundle (_outputOptions, _bundle, isWrite) {\n if (!isWrite) {\n this.error(`@rollup/plugin-run currently only works with bundles that are written to disk`);\n }\n },\n writeBundle (outputOptions, bundle) {\n const forkBundle = (dir, entryFileName) => {\n if (proc)\n proc.kill();\n proc = fork(join(dir, entryFileName), args, forkOptions);\n };\n const dir = outputOptions.dir || dirname(outputOptions.file);\n const entryFileName = Object.keys(bundle).find((fileName) => {\n const chunk = bundle[fileName];\n return chunk.isEntry && chunk.facadeModuleId === input;\n });\n if (entryFileName) {\n forkBundle(dir, entryFileName);\n if (allowRestarts) {\n process.stdin.resume();\n process.stdin.setEncoding('utf8');\n process.stdin.on('data', (data) => {\n const line = data.toString().trim().toLowerCase();\n if (line === 'rs' || line === 'restart' || data.toString().charCodeAt(0) === 11) {\n forkBundle(dir, entryFileName);\n }\n else if (line === 'cls' || line === 'clear' || data.toString().charCodeAt(0) === 12) {\n // eslint-disable-next-line no-console\n console.clear();\n }\n });\n }\n }\n else {\n this.error(`@rollup/plugin-run could not find output chunk`);\n }\n }\n };\n}\n\nexport { run as default };\n//# sourceMappingURL=index.js.map\n","import { Options } from 'tsdown'\nimport run from '@rollup/plugin-run'\n\nconst env = process.env.NODE_ENV || 'development'\nconst outDir = env === 'development' ? '.h3ravel/serve' : 'dist'\n\nexport const TsDownConfig: Options = {\n outDir,\n entry: ['src/**/*.ts'],\n format: ['esm'],//, 'cjs'],\n target: 'node22',\n sourcemap: env === 'development',\n clean: true,\n shims: true,\n copy: [{ from: 'public', to: outDir }, 'src/resources', 'src/database'],\n env: env === 'development' ? {\n NODE_ENV: env,\n SRC_PATH: outDir,\n } : {},\n watch:\n env === 'development' && process.env.CLI_BUILD !== 'true'\n ? ['.env', '.env.*', 'src', '../../packages']\n : false,\n dts: false,\n logLevel: 'silent',\n nodeProtocol: true,\n skipNodeModulesBundle: true,\n plugins: env === 'development' && process.env.CLI_BUILD !== 'true' ? [\n run({\n env: Object.assign({}, process.env, {\n NODE_ENV: env,\n SRC_PATH: outDir,\n }),\n execArgv: ['-r', 'source-map-support/register'],\n allowRestarts: false,\n input: process.cwd() + '/src/server.ts'//\n })\n ] : [],\n}\n\nexport default TsDownConfig\n","import { CommandOption, ParsedCommand } from './Contracts/ICommand'\nimport { Option, program, type Command as Commander } from 'commander'\n\nimport { Application } from '@h3ravel/core'\nimport { Command } from './Commands/Command'\nimport { Kernel } from './Kernel'\nimport { ListCommand } from './Commands/ListCommand'\nimport { Logger } from '@h3ravel/shared'\nimport { MakeCommand } from './Commands/MakeCommand'\nimport { Signature } from './Signature'\nimport TsDownConfig from './TsdownConfig'\nimport { altLogo } from './logo'\nimport { build } from 'tsdown'\nimport { glob } from 'node:fs/promises'\nimport path from 'node:path'\nimport { PostinstallCommand } from './Commands/PostinstallCommand'\n\n/**\n * Musket is H3ravel's CLI tool\n */\nexport class Musket {\n private commands: ParsedCommand[] = []\n\n constructor(private app: Application, private kernel: Kernel) { }\n\n async build () {\n this.loadBaseCommands()\n await this.loadDiscoveredCommands()\n return this.initialize()\n }\n\n private loadBaseCommands () {\n const commands: Command[] = [\n new MakeCommand(this.app, this.kernel),\n new ListCommand(this.app, this.kernel),\n new PostinstallCommand(this.app, this.kernel),\n ]\n\n commands.forEach(e => this.addCommand(e))\n }\n\n private async loadDiscoveredCommands () {\n const commands: Command[] = [\n ...this.app.registeredCommands.map(cmd => new cmd(this.app, this.kernel))\n ]\n\n /**\n * Musket Commands auto registration\n */\n const providers_path = app_path('Console/Commands/*.js').replace('/src/', '/.h3ravel/serve/')\n\n /** Add the App Commands */\n for await (const cmd of glob(providers_path)) {\n const name = path.basename(cmd).replace('.js', '')\n try {\n const cmdClass = (await import(cmd))[name]\n commands.push(new cmdClass(this.app, this.kernel))\n } catch { /** */ }\n }\n\n commands.forEach(e => this.addCommand(e))\n }\n\n addCommand (command: Command) {\n this.commands.push(Signature.parseSignature(command.getSignature(), command))\n }\n\n private initialize () {\n /** Init the Musket Version */\n const cliVersion = Logger.parse([\n ['Musket CLI:', 'white'],\n [this.kernel.consolePackage.version, 'green']\n ], ' ', false)\n\n /** Init the App Version */\n const localVersion = Logger.parse([\n ['H3ravel Framework:', 'white'],\n [this.kernel.modulePackage.version, 'green']\n ], ' ', false)\n\n const additional = {\n quiet: ['-q, --quiet', 'Do not output any message'],\n silent: ['--silent', 'Do not output any message'],\n verbose: ['-v, --verbose <number>', 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'],\n lock: ['--lock', 'Locked and loaded, do not ask any interactive question'],\n }\n\n /** Init Commander */\n program\n .name('musket')\n .version(`${cliVersion}\\n${localVersion}`)\n .description(altLogo)\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n const instance = new ListCommand(this.app, this.kernel)\n instance.setInput(program.opts(), program.args, program.registeredArguments, {}, program)\n instance.handle()\n })\n\n /** Create the init Command */\n program\n .command('init')\n .description('Initialize H3ravel.')\n .action(async () => {\n Logger.success('Initialized: H3ravel has been initialized!')\n })\n\n /** Loop through all the available commands */\n for (let i = 0; i < this.commands.length; i++) {\n const command = this.commands[i]\n const instance = command.commandClass\n\n if (command.isNamespaceCommand && command.subCommands) {\n /**\n * Initialize the base command\n */\n const cmd = command.isHidden\n ? program\n : program\n .command(command.baseCommand)\n .description(command.description ?? '')\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program)\n await instance.handle()\n })\n\n /**\n * Add options to the base command if it has any\n */\n if ((command.options?.length ?? 0) > 0) {\n command.options\n ?.filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd)\n })\n }\n\n /**\n * Initialize the sub commands\n */\n command\n .subCommands\n .filter((v, i, a) => !v.shared && a.findIndex(t => t.name === v.name) === i)\n .forEach(sub => {\n const cmd = program\n .command(`${command.baseCommand}:${sub.name}`)\n .description(sub.description || '')\n .addOption(new Option(additional.quiet[0], additional.quiet[1]).implies({ silent: true }))\n .addOption(new Option(additional.silent[0], additional.silent[1]).implies({ quiet: true }))\n .addOption(new Option(additional.verbose[0], additional.verbose[1]).choices(['1', '2', '3']))\n .addOption(new Option(additional.lock[0], additional.lock[1]))\n .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, sub, program)\n await instance.handle()\n })\n\n /**\n * Add the shared arguments here\n */\n command.subCommands?.filter(e => e.shared).forEach(opt => {\n this.makeOption(opt, cmd, false, sub)\n })\n\n /**\n * Add the shared options here\n */\n command.options?.filter(e => e.shared).forEach(opt => {\n this.makeOption(opt, cmd, false, sub)\n })\n\n /**\n * Add options to the sub command if it has any\n */\n if (sub.nestedOptions) {\n sub.nestedOptions\n .filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd)\n })\n }\n })\n } else {\n /**\n * Initialize command with options\n */\n const cmd = program\n .command(command.baseCommand)\n .description(command.description ?? '')\n\n command\n ?.options\n ?.filter((v, i, a) => a.findIndex(t => t.name === v.name) === i)\n .forEach(opt => {\n this.makeOption(opt, cmd, true)\n })\n\n cmd.action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program)\n await instance.handle()\n })\n }\n }\n\n /** Rebuild the app on every command except fire so we wont need TS */\n program.hook('preAction', async (_, cmd) => {\n if (cmd.name() !== 'fire') {\n await build({\n ...TsDownConfig,\n watch: false,\n plugins: []\n })\n }\n })\n\n return program\n }\n\n makeOption (opt: CommandOption, cmd: Commander, parse?: boolean, parent?: any) {\n const description = opt.description?.replace(/\\[(\\w+)\\]/g, (_, k) => parent?.[k] ?? `[${k}]`) ?? ''\n const type = opt.name.replaceAll('-', '')\n\n if (opt.isFlag) {\n if (parse) {\n const flags = opt.flags\n ?.map(f => (f.length === 1 ? `-${f}` : `--${f}`)).join(', ')!\n .replaceAll('----', '--')\n .replaceAll('---', '-')\n\n cmd.option(flags || '', description!, String(opt.defaultValue) || undefined)\n } else {\n cmd.option(\n opt.flags?.join(', ') + (opt.required ? ` <${type}>` : ''),\n description!,\n opt.defaultValue as any\n )\n }\n } else {\n cmd.argument(\n opt.required ? `<${opt.name}>` : `[${opt.name}]`,\n description,\n opt.defaultValue\n )\n }\n }\n\n static async parse (kernel: Kernel) {\n return (await new Musket(kernel.app, kernel).build()).parseAsync()\n }\n\n}\n","import { Application, ConsoleKernel } from '@h3ravel/core'\n\nimport { FileSystem } from '@h3ravel/shared'\nimport { Musket } from './Musket'\nimport path from 'node:path'\n\nexport class Kernel extends ConsoleKernel {\n constructor(public app: Application) {\n super(app)\n }\n\n static init (app: Application) {\n const instance = new Kernel(app)\n\n Promise.all([instance.loadRequirements()])\n .then(([e]) => e.run())\n }\n\n\n private async run () {\n await Musket.parse(this)\n process.exit(0)\n }\n\n private async loadRequirements () {\n this.cwd = path.join(process.cwd(), this.basePath)\n this.modulePath = FileSystem.findModulePkg('@h3ravel/core', this.cwd) ?? ''\n this.consolePath = FileSystem.findModulePkg('@h3ravel/console', this.cwd) ?? ''\n\n try {\n this.modulePackage = await import(path.join(this.modulePath, 'package.json'))\n } catch {\n this.modulePackage = { version: 'N/A' }\n }\n\n try {\n this.consolePackage = await import(path.join(this.consolePath, 'package.json'))\n } catch {\n this.consolePackage = { version: 'N/A' }\n }\n\n return this\n }\n}\n","/// <reference path=\"../../../core/src/app.globals.d.ts\" />\n\nimport { Kernel } from '../Kernel'\nimport { ServiceProvider } from '@h3ravel/core'\n/**\n * Handles CLI commands and tooling.\n * \n * Register DatabaseManager and QueryBuilder.\n * Set up ORM models and relationships.\n * Register migration and seeder commands.\n * \n * Auto-Registered when in CLI mode\n */\nexport class ConsoleServiceProvider extends ServiceProvider {\n public static priority = 992\n\n /**\n * Indicate that this service provider only runs in console\n */\n public static console = true\n\n register () {\n }\n\n boot () {\n Kernel.init(this.app)\n\n process.on('SIGINT', () => {\n process.exit(0)\n })\n process.on('SIGTERM', () => {\n process.exit(0)\n })\n }\n}\n"],"x_google_ignoreList":[6],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,IAAa,UAAb,cAA6B,eAAe;;;;ACF5C,MAAa,OAAO,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;AAwB9B,MAAa,UAAU,OAAO,GAAG;;;;;;;;;;;AClBjC,IAAa,cAAb,cAAiC,QAAQ;;;;;;CAOrC,AAAU,YAAoB;;;;;;CAO9B,AAAU,cAAsB;CAEhC,MAAa,SAAU;EACnB,MAAM,UAAU,CACZ;GACI,OAAO;GACP,MAAM;GACN,aAAa;GAChB,CACJ,CACI,OAAO,KAAK,QAAQ,QAAQ,CAC5B,KAAI,MAAK;AAIN,UAHa,OAAO,SAAS,OAAO,IAChC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,QAAO,QAAK,CAAC,CAACA,IAAE,CAAC,KAAK,KAAK,EAAE,SAAS,MAClE,EAAE,EAAE,aAAa,IAAI,MAAM,CAChB,KAAK,GAAG;IACtB;EAQN,MAAM,UALW,KAAK,QAAQ,SAAS,KAAI,MAAK;AAE5C,UADa,OAAO,SAAS,OAAO,IAAI,OAAO,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,MAAM,CACzF,KAAK,GAAG;IACtB,CAEuB,QAAkC,KAAK,QAAQ;;GAEpE,MAAM,QAAQ,IAAI,QAAQ,eAAe,GAAG;GAC5C,MAAM,SAAS,MAAM,SAAS,IAAI,GAAG,MAAM,MAAM,IAAI,CAAC,GAAG,MAAM,GAAG;AAClE,OAAI,YAAY,EAAE;;AAElB,OAAI,QAAQ,KAAK,IAAI;AACrB,UAAO;KACR,EAAE,CAAC;EAEN,MAAM,OAAO,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,OAAO,UAAU;GACxD,MAAM,QAAQ,UAAU,aAAa,KAAK;AAC1C,UAAO,CAAC,OAAO,IAAI,OAAO,UAAU,MAAM,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK;IACzE;;AAGF,SAAO,IAAI,CAAC,CAAC,qBAAqB,QAAQ,EAAE,CAAC,KAAK,OAAO,cAAc,SAAS,QAAQ,CAAC,EAAE,IAAI;AAE/F,UAAQ,IAAI,GAAG;AAEf,UAAQ,IAAI,QAAQ;AAEpB,UAAQ,IAAI,GAAG;AAEf,SAAO,IAAI,UAAU,SAAS;AAC9B,SAAO,IAAI,mCAAmC,QAAQ;AAEtD,UAAQ,IAAI,GAAG;;AAGf,SAAO,IAAI,YAAY,SAAS;AAChC,UAAQ,IAAI,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC;AAEtC,UAAQ,IAAI,GAAG;;AAGf,SAAO,IAAI,uBAAuB,SAAS;AAC3C,UAAQ,IAAI,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC;;;;;;ACxE7C,IAAa,cAAb,cAAiC,QAAQ;;;;;;CAOrC,AAAU,YAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuC9B,AAAU,cAAsB;CAEhC,MAAa,SAAU;EACnB,MAAM,UAAW,KAAK,WAAW,eAAe,KAAK,WAAW;AAEhE,MAAI,CAAC,KAAK,SAAS,OAAO,CACtB,MAAK,QAAQ,MAAM,yCAAyC,QAAQ;EAGxE,MAAM,UAAU;GACZ,YAAY;GACZ,UAAU;GACV,WAAW;GACX,SAAS;GACT,QAAQ;GACR,OAAO;GACP,MAAM;GACT;AAED,MAAI;AACA,SAAO,OAAe,QAAQ,WAAW;WACpC,GAAG;AACR,UAAO,MAAM,EAAS;;;;;;CAO9B,MAAgB,iBAAkB;EAC9B,MAAM,OAAO,KAAK,OAAO,MAAM,GAAG,cAAc;EAChD,MAAM,OAAO,KAAK,SAAS,OAAO;EAClC,MAAM,QAAQ,KAAK,OAAO,QAAQ;EAElC,MAAM,OAAO,SAAS,oBAAoB,KAAK,KAAK;EACpD,MAAM,YAAY,WAAW,cAAc,iBAAiB,KAAK,OAAO,IAAI,IAAI;EAChF,MAAM,WAAW,SAAS,KAAK,WAAW,wBAAwB,KAAK,OAAO;;AAG9E,MAAI,CAAC,SAAS,MAAM,WAAW,WAAW,KAAK,CAC3C,QAAO,MAAM,UAAU,KAAK,4BAA4B;EAG5D,IAAI,OAAO,MAAM,SAAS,UAAU,QAAQ;AAC5C,SAAO,KAAK,QAAQ,eAAe,KAAK;AAExC,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,MAAM,4BAA4B,OAAO,IAAI,SAAS,SAAS,KAAK,EAAE,QAAQ,MAAM,CAAC;;CAGhG,AAAU,eAAgB;AACtB,SAAO,QAAQ,wCAAwC;;;;;CAM3D,MAAgB,gBAAiB;EAC7B,MAAM,OAAO,KAAK,SAAS,OAAO;EAClC,MAAM,aAAa,OAAO,CAAC,OAAO,oBAAoB;EACtD,MAAM,OAAO,cAAc,cAAc,WAAW,GAAG,KAAK,KAAK;EAEjE,MAAM,YAAY,WAAW,cAAc,qBAAqB,KAAK,OAAO,IAAI,IAAI;EAEpF,IAAI,SAAS,KAAK,OAAO,UAAU,MAAM;EACzC,IAAI,QAAQ,KAAK,OAAO,QAAQ;AAChC,MAAI,CAAC,SAAS,OAAO,WAAW,UAAU;AACtC,WAAQ;AACR,YAAS;;AAGb,MAAI,CAAC,OAAO;GACR,MAAM,UAAU,aAAa,MAAM,KAAK;AACxC,WAAQ,QAAQ;AAChB,YAAS,CAAC,CAAC,QAAQ;;EAGvB,MAAM,WAAW,SAAS,KAAK,WAAW,KAAK,qBAAqB,OAAO,OAAO,CAAC;EACnF,IAAI,OAAO,MAAM,SAAS,UAAU,QAAQ;AAE5C,MAAI,UAAU,KACV,QAAO,KAAK,QAAQ,+BAA+B,MAAM;AAG7D,SAAO,KAAK,2BAA2B;AAEvC,QAAM,KAAK,OAAO,sBAAsB,SAAS,QAAQ,KAAK,CAAC;AAC/D,QAAM,UAAU,MAAM,KAAK;AAE3B,SAAO,MAAM,2BAA2B,OAAO,IAAI,SAAS,SAAS,KAAK,EAAE,QAAQ,MAAM,CAAC;;;;;CAM/F,AAAU,cAAe;AACrB,SAAO,QAAQ,uCAAuC;;;;;CAM1D,AAAU,aAAc;AACpB,SAAO,QAAQ,sCAAsC;;;;;CAMzD,MAAgB,YAAa;EACzB,MAAM,OAAO,KAAK,OAAO,QAAQ,KAAK;EACtC,MAAM,OAAO,KAAK,SAAS,OAAO;EAClC,MAAM,QAAQ,KAAK,SAAS,QAAQ;EAEpC,MAAM,OAAO,SAAS,UAAU,KAAK,aAAa,CAAC,GAAG,OAAO;;AAG7D,MAAI,CAAC,SAAS,MAAM,WAAW,WAAW,KAAK,CAC3C,QAAO,MAAM,UAAU,KAAK,uBAAuB;EAGvD,MAAM,YAAY,WAAW,cAAc,qBAAqB,KAAK,OAAO,IAAI,IAAI;EACpF,MAAM,WAAW,SAAS,KAAK,WAAW,oBAAoB,KAAK,OAAO;EAE1E,IAAI,OAAO,MAAM,SAAS,UAAU,QAAQ;AAC5C,SAAO,KAAK,QAAQ,eAAe,KAAK;AAExC,QAAM,UAAU,MAAM,KAAK;AAC3B,SAAO,MAAM,uBAAuB,OAAO,IAAI,SAAS,SAAS,KAAK,EAAE,QAAQ,MAAM,CAAC;;;;;CAM3F,MAAgB,WAAY;EACxB,MAAM,OAAO,KAAK,SAAS,OAAO;EAClC,MAAM,QAAQ,KAAK,OAAO,QAAQ;EAElC,MAAM,OAAO,UAAU,uBAAuB,KAAK,OAAO;AAE1D,MAAI,KAAK,SAAS,IAAI,CAClB,OAAM,MAAM,WAAW,MAAM,IAAI,EAAE,EAAE,WAAW,MAAM,CAAC;;AAI3D,MAAI,CAAC,SAAS,MAAM,WAAW,WAAW,KAAK,CAC3C,QAAO,MAAM,UAAU,KAAK,sBAAsB;AAGtD,QAAM,UAAU,MAAM,4BAA4B,KAAK,YAAY;AACnE,SAAO,MAAM,sBAAsB,OAAO,IAAI,uBAAuB,KAAK,QAAQ,QAAQ,MAAM,CAAC;;;;;;;;;;CAWrG,qBAAsB,OAAgB,SAAkB,OAAO,OAAoB,MAAM;EACrF,IAAIC;AACJ,MAAI,CAAC,MACD,QAAO,aAAa,KAAK;WAEpB,OACL,QAAO,oBAAoB,KAAK;MAGhC,QAAO,oBAAoB,KAAK;AAEpC,SAAO,gBAAgB;;;;;;AC9N/B,IAAa,qBAAb,cAAwC,QAAQ;;;;;;CAO5C,AAAU,YAAoB;;;;;;CAO9B,AAAU,cAAsB;CAEhC,MAAa,SAAU;AACnB,OAAK,gBAAgB;;;;;;;CAQzB,MAAc,iBAAkB;AAC5B,MAAI,OAAO,mBAAmB,KAAK,SAAU;AAE7C,MAAI,CAAC,MAAM,WAAW,WAAW,eAAe,CAAC,CAC7C,OAAM,MAAM,eAAe,EAAE,EAAE,WAAW,MAAM,CAAC;AAGrD,MAAI,CAAC,MAAM,WAAW,WAAW,cAAc,YAAY,CAAC,CACxD,OAAM,UAAU,cAAc,YAAY,EAAE,GAAG;;;;;;AClC3D,IAAa,YAAb,MAAa,UAAU;;;;;;;CAOnB,OAAO,aAAc,OAAgC;EACjD,MAAMC,UAA2B,EAAE;;;;EAInC,MAAM,QAAQ;EACd,IAAI;AAEJ,UAAQ,QAAQ,MAAM,KAAK,MAAM,MAAM,MAAM;GACzC,MAAM,SAAS,QAAQ,MAAM,GAAG,MAAO,QAAQ,KAAK,MAAM,GAAG;GAC7D,MAAM,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,MAAM,GAAG,GAAI,IAAI,QAAQ,KAAK,MAAM,GAAG,KAAK,CAAC;GACnF,MAAM,UAAU,MAAM,GAAG,MAAM,CAAC,QAAQ,QAAQ,GAAG;;;;GAInD,MAAM,aAAa,QAAQ,QAAQ,IAAI;AACvC,OAAI,eAAe,IAAI;;;;AAInB,YAAQ,KAAK,EAAE,MAAM,SAAS,CAAC;AAC/B;;GAGJ,MAAM,WAAW,QAAQ,UAAU,GAAG,WAAW,CAAC,MAAM;GACxD,MAAM,OAAO,QAAQ,UAAU,aAAa,EAAE,CAAC,MAAM;;;;GAKrD,IAAI,cAAc;GAClB,IAAIC;GAEJ,MAAM,YAAY,KAAK,QAAQ,IAAI;AACnC,OAAI,cAAc,IAAI;AAClB,kBAAc,KAAK,UAAU,GAAG,UAAU,CAAC,MAAM;;;;;IAMjD,MAAM,oBALa,KAAK,UAAU,YAAY,EAAE,CAAC,MAAM,CAKlB,QAAQ,OAAO,GAAG,CAAC,MAAM;;;;AAK9D,oBAAgB,UAAU,aAAa,MAAM,oBAAoB,IAAI;;;;;AAKrE,iBAAc,YAAY,MAAM;;;;GAMpC,IAAI,OAAO;GACX,IAAI,WAAW,kBAAkB,KAAK,KAAK;GAC3C,IAAI,WAAW;AAEf,OAAI,KAAK,SAAS,KAAK,EAAE;AACrB,eAAW;AACX,eAAW;AACX,WAAO,KAAK,MAAM,GAAG,GAAG;cACjB,KAAK,SAAS,IAAI,EAAE;AAC3B,eAAW;AACX,WAAO,KAAK,MAAM,GAAG,GAAG;cACjB,KAAK,SAAS,IAAI,EAAE;AAC3B,eAAW;AACX,WAAO,KAAK,MAAM,GAAG,GAAG;;;;;GAM5B,MAAM,SAAS,KAAK,WAAW,KAAK;GACpC,IAAIC;GACJ,IAAIC;AAEJ,OAAI,QAAQ;;;;IAIR,MAAM,YAAY,KAAK,MAAM,IAAI,CAAC,KAAI,MAAK,EAAE,MAAM,CAAC;AAEpD,YAAQ,EAAE;AAEV,SAAK,IAAI,QAAQ,WAAW;AACxB,SAAI,KAAK,WAAW,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,WAAW,EAClD,QAAO,MAAM,KAAK,MAAM,EAAE;cACnB,KAAK,WAAW,IAAI,IAAI,CAAC,KAAK,WAAW,KAAK,IAAI,KAAK,MAAM,EAAE,CAAC,SAAS,EAChF,QAAO,OAAO,KAAK,MAAM,EAAE;cACpB,CAAC,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC,SAAS,EACvD,QAAO,OAAO;KAGlB,MAAM,UAAU,KAAK,QAAQ,IAAI;AACjC,SAAI,YAAY,IAAI;AAChB,YAAM,KAAK,KAAK,UAAU,GAAG,QAAQ,CAAC;MACtC,MAAM,MAAM,KAAK,UAAU,UAAU,EAAE;AACvC,UAAI,QAAQ,IACR,gBAAe,EAAE;eACV,QAAQ,UAAU,QAAQ,WAAY,CAAC,OAAO,CAAC,SACtD,gBAAe,QAAQ;eAChB,CAAC,MAAM,OAAO,IAAI,CAAC,CAC1B,gBAAe,OAAO,IAAI;UAE1B,gBAAe;WAGnB,OAAM,KAAK,KAAK;;;AAK5B,WAAQ,KAAK;IACT,MAAM,SAAS,MAAO,MAAO,SAAS,KAAK;IAC3C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACH,CAAC;;AAGN,SAAO;;;;;;;;;CAUX,OAAO,eAAgB,WAAmB,cAAsC;EAC5E,MAAM,QAAQ,UAAU,MAAM,KAAK,CAAC,KAAI,MAAK,EAAE,MAAM,CAAC,CAAC,QAAO,MAAK,EAAE,SAAS,EAAE;EAChF,MAAM,WAAW,CAAC,KAAK,IAAI,CAAC,SAAS,MAAM,GAAG,GAAI,IAAI,QAAQ,KAAK,MAAM,GAAG;EAC5E,MAAM,cAAc,MAAM,GAAG,QAAQ,aAAa,GAAG;EACrD,MAAM,cAAc,aAAa,gBAAgB;EACjD,MAAM,qBAAqB,YAAY,SAAS,IAAI;;;;EAKpD,MAAM,OAAO,MAAM,MAAM,EAAE,CAAC,KAAK,IAAI;;;;EAKrC,MAAM,aAAa,UAAU,aAAa,KAAK;AAE/C,MAAI;;;;;;;;;AAUA,SAAO;GACH,aAAa,YAAY,MAAM,GAAG,GAAG;GACrC;GACA,aAAa,WAAW,QAAO,MAAK,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS;GAC5D;GACA;GACA,SAAS,WAAW,QAAO,MAAK,CAAC,CAAC,EAAE,MAAM;GAC1C;GACH;MAED,QAAO;GACH;GACA;GACA,SAAS;GACT;GACA;GACA;GACH;;;;;;AC/Lb,SAAS,IAAK,OAAO,EAAE,EAAE;CACvB,IAAI;CACJ,IAAI;CACJ,MAAM,OAAO,KAAK,QAAQ,EAAE;CAC5B,MAAM,gBAAgB,KAAK,iBAAiB;CAC5C,MAAM,gBAAgB,KAAK;CAC3B,MAAM,cAAc,KAAK,WAAW;AACpC,QAAO,YAAY;AACnB,QAAO,YAAY;AACnB,QAAO;EACL,MAAM;EACN,WAAY,SAAS;GACnB,IAAI,SAAS,kBAAkB,QAAQ,kBAAkB,KAAK,IAAI,gBAAgB,QAAQ;AAC1F,OAAI,OAAO,WAAW,SACpB,UAAS,CAAC,OAAO;AAEnB,OAAI,OAAO,WAAW,SACpB,UAAS,OAAO,OAAO,OAAO;AAEhC,OAAI,OAAO,SAAS,EAClB,OAAM,IAAI,MAAM,2FAA2F;AAE7G,WAAQ,QAAQ,OAAO,GAAG;;EAE5B,eAAgB,gBAAgB,SAAS,SAAS;AAChD,OAAI,CAAC,QACH,MAAK,MAAM,gFAAgF;;EAG/F,YAAa,eAAe,QAAQ;GAClC,MAAM,cAAc,OAAK,oBAAkB;AACzC,QAAI,KACF,MAAK,MAAM;AACb,WAAO,KAAK,KAAKC,OAAKC,gBAAc,EAAE,MAAM,YAAY;;GAE1D,MAAM,MAAM,cAAc,OAAO,QAAQ,cAAc,KAAK;GAC5D,MAAM,gBAAgB,OAAO,KAAK,OAAO,CAAC,MAAM,aAAa;IAC3D,MAAM,QAAQ,OAAO;AACrB,WAAO,MAAM,WAAW,MAAM,mBAAmB;KACjD;AACF,OAAI,eAAe;AACjB,eAAW,KAAK,cAAc;AAC9B,QAAI,eAAe;AACjB,aAAQ,MAAM,QAAQ;AACtB,aAAQ,MAAM,YAAY,OAAO;AACjC,aAAQ,MAAM,GAAG,SAAS,SAAS;MACjC,MAAM,OAAO,KAAK,UAAU,CAAC,MAAM,CAAC,aAAa;AACjD,UAAI,SAAS,QAAQ,SAAS,aAAa,KAAK,UAAU,CAAC,WAAW,EAAE,KAAK,GAC3E,YAAW,KAAK,cAAc;eAEvB,SAAS,SAAS,SAAS,WAAW,KAAK,UAAU,CAAC,WAAW,EAAE,KAAK,GAE/E,SAAQ,OAAO;OAEjB;;SAIJ,MAAK,MAAM,iDAAiD;;EAGjE;;;;;AC9DH,MAAM,MAAM,QAAQ,IAAI,YAAY;AACpC,MAAM,SAAS,QAAQ,gBAAgB,mBAAmB;AAE1D,MAAaC,eAAwB;CACjC;CACA,OAAO,CAAC,cAAc;CACtB,QAAQ,CAAC,MAAM;CACf,QAAQ;CACR,WAAW,QAAQ;CACnB,OAAO;CACP,OAAO;CACP,MAAM;EAAC;GAAE,MAAM;GAAU,IAAI;GAAQ;EAAE;EAAiB;EAAe;CACvE,KAAK,QAAQ,gBAAgB;EACzB,UAAU;EACV,UAAU;EACb,GAAG,EAAE;CACN,OACI,QAAQ,iBAAiB,QAAQ,IAAI,cAAc,SAC7C;EAAC;EAAQ;EAAU;EAAO;EAAiB,GAC3C;CACV,KAAK;CACL,UAAU;CACV,cAAc;CACd,uBAAuB;CACvB,SAAS,QAAQ,iBAAiB,QAAQ,IAAI,cAAc,SAAS,CACjE,IAAI;EACA,KAAK,OAAO,OAAO,EAAE,EAAE,QAAQ,KAAK;GAChC,UAAU;GACV,UAAU;GACb,CAAC;EACF,UAAU,CAAC,MAAM,8BAA8B;EAC/C,eAAe;EACf,OAAO,QAAQ,KAAK,GAAG;EAC1B,CAAC,CACL,GAAG,EAAE;CACT;AAED,2BAAe;;;;;;;ACpBf,IAAa,SAAb,MAAa,OAAO;CAChB,AAAQ,WAA4B,EAAE;CAEtC,YAAY,AAAQC,KAAkB,AAAQC,QAAgB;EAA1C;EAA0B;;CAE9C,MAAM,QAAS;AACX,OAAK,kBAAkB;AACvB,QAAM,KAAK,wBAAwB;AACnC,SAAO,KAAK,YAAY;;CAG5B,AAAQ,mBAAoB;AAOxB,EAN4B;GACxB,IAAI,YAAY,KAAK,KAAK,KAAK,OAAO;GACtC,IAAI,YAAY,KAAK,KAAK,KAAK,OAAO;GACtC,IAAI,mBAAmB,KAAK,KAAK,KAAK,OAAO;GAChD,CAEQ,SAAQ,MAAK,KAAK,WAAW,EAAE,CAAC;;CAG7C,MAAc,yBAA0B;EACpC,MAAMC,WAAsB,CACxB,GAAG,KAAK,IAAI,mBAAmB,KAAI,QAAO,IAAI,IAAI,KAAK,KAAK,KAAK,OAAO,CAAC,CAC5E;;;;EAKD,MAAM,iBAAiB,SAAS,wBAAwB,CAAC,QAAQ,SAAS,mBAAmB;;AAG7F,aAAW,MAAM,OAAO,KAAK,eAAe,EAAE;GAC1C,MAAM,OAAOC,SAAK,SAAS,IAAI,CAAC,QAAQ,OAAO,GAAG;AAClD,OAAI;IACA,MAAM,YAAY,MAAM,OAAO,MAAM;AACrC,aAAS,KAAK,IAAI,SAAS,KAAK,KAAK,KAAK,OAAO,CAAC;WAC9C;;AAGZ,WAAS,SAAQ,MAAK,KAAK,WAAW,EAAE,CAAC;;CAG7C,WAAY,SAAkB;AAC1B,OAAK,SAAS,KAAK,UAAU,eAAe,QAAQ,cAAc,EAAE,QAAQ,CAAC;;CAGjF,AAAQ,aAAc;;EAElB,MAAM,aAAa,OAAO,MAAM,CAC5B,CAAC,eAAe,QAAQ,EACxB,CAAC,KAAK,OAAO,eAAe,SAAS,QAAQ,CAChD,EAAE,KAAK,MAAM;;EAGd,MAAM,eAAe,OAAO,MAAM,CAC9B,CAAC,sBAAsB,QAAQ,EAC/B,CAAC,KAAK,OAAO,cAAc,SAAS,QAAQ,CAC/C,EAAE,KAAK,MAAM;EAEd,MAAM,aAAa;GACf,OAAO,CAAC,eAAe,4BAA4B;GACnD,QAAQ,CAAC,YAAY,4BAA4B;GACjD,SAAS,CAAC,0BAA0B,qGAAqG;GACzI,MAAM,CAAC,UAAU,yDAAyD;GAC7E;;AAGD,UACK,KAAK,SAAS,CACd,QAAQ,GAAG,WAAW,IAAI,eAAe,CACzC,YAAY,QAAQ,CACpB,UAAU,IAAI,OAAO,WAAW,MAAM,IAAI,WAAW,MAAM,GAAG,CAAC,QAAQ,EAAE,QAAQ,MAAM,CAAC,CAAC,CACzF,UAAU,IAAI,OAAO,WAAW,OAAO,IAAI,WAAW,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,MAAM,CAAC,CAAC,CAC1F,UAAU,IAAI,OAAO,WAAW,QAAQ,IAAI,WAAW,QAAQ,GAAG,CAAC,QAAQ;GAAC;GAAK;GAAK;GAAI,CAAC,CAAC,CAC5F,UAAU,IAAI,OAAO,WAAW,KAAK,IAAI,WAAW,KAAK,GAAG,CAAC,CAC7D,OAAO,YAAY;GAChB,MAAM,WAAW,IAAI,YAAY,KAAK,KAAK,KAAK,OAAO;AACvD,YAAS,SAAS,QAAQ,MAAM,EAAE,QAAQ,MAAM,QAAQ,qBAAqB,EAAE,EAAE,QAAQ;AACzF,YAAS,QAAQ;IACnB;;AAGN,UACK,QAAQ,OAAO,CACf,YAAY,sBAAsB,CAClC,OAAO,YAAY;AAChB,UAAO,QAAQ,6CAA6C;IAC9D;;AAGN,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;GAC3C,MAAM,UAAU,KAAK,SAAS;GAC9B,MAAM,WAAW,QAAQ;AAEzB,OAAI,QAAQ,sBAAsB,QAAQ,aAAa;;;;IAInD,MAAM,MAAM,QAAQ,WACd,UACA,QACG,QAAQ,QAAQ,YAAY,CAC5B,YAAY,QAAQ,eAAe,GAAG,CACtC,UAAU,IAAI,OAAO,WAAW,MAAM,IAAI,WAAW,MAAM,GAAG,CAAC,QAAQ,EAAE,QAAQ,MAAM,CAAC,CAAC,CACzF,UAAU,IAAI,OAAO,WAAW,OAAO,IAAI,WAAW,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,MAAM,CAAC,CAAC,CAC1F,UAAU,IAAI,OAAO,WAAW,QAAQ,IAAI,WAAW,QAAQ,GAAG,CAAC,QAAQ;KAAC;KAAK;KAAK;KAAI,CAAC,CAAC,CAC5F,UAAU,IAAI,OAAO,WAAW,KAAK,IAAI,WAAW,KAAK,GAAG,CAAC,CAC7D,OAAO,YAAY;AAChB,cAAS,SAAS,IAAI,MAAM,EAAE,IAAI,MAAM,IAAI,qBAAqB,SAAS,QAAQ;AAClF,WAAM,SAAS,QAAQ;MACzB;;;;AAKV,SAAK,QAAQ,SAAS,UAAU,KAAK,EACjC,SAAQ,SACF,QAAQ,GAAG,KAAG,MAAM,EAAE,WAAU,MAAK,EAAE,SAAS,EAAE,KAAK,KAAKC,IAAE,CAC/D,SAAQ,QAAO;AACZ,UAAK,WAAW,KAAK,IAAI;MAC3B;;;;AAMV,YACK,YACA,QAAQ,GAAG,KAAG,MAAM,CAAC,EAAE,UAAU,EAAE,WAAU,MAAK,EAAE,SAAS,EAAE,KAAK,KAAKA,IAAE,CAC3E,SAAQ,QAAO;KACZ,MAAMC,QAAM,QACP,QAAQ,GAAG,QAAQ,YAAY,GAAG,IAAI,OAAO,CAC7C,YAAY,IAAI,eAAe,GAAG,CAClC,UAAU,IAAI,OAAO,WAAW,MAAM,IAAI,WAAW,MAAM,GAAG,CAAC,QAAQ,EAAE,QAAQ,MAAM,CAAC,CAAC,CACzF,UAAU,IAAI,OAAO,WAAW,OAAO,IAAI,WAAW,OAAO,GAAG,CAAC,QAAQ,EAAE,OAAO,MAAM,CAAC,CAAC,CAC1F,UAAU,IAAI,OAAO,WAAW,QAAQ,IAAI,WAAW,QAAQ,GAAG,CAAC,QAAQ;MAAC;MAAK;MAAK;MAAI,CAAC,CAAC,CAC5F,UAAU,IAAI,OAAO,WAAW,KAAK,IAAI,WAAW,KAAK,GAAG,CAAC,CAC7D,OAAO,YAAY;AAChB,eAAS,SAASA,MAAI,MAAM,EAAEA,MAAI,MAAMA,MAAI,qBAAqB,KAAK,QAAQ;AAC9E,YAAM,SAAS,QAAQ;OACzB;;;;AAKN,aAAQ,aAAa,QAAO,MAAK,EAAE,OAAO,CAAC,SAAQ,QAAO;AACtD,WAAK,WAAW,KAAKA,OAAK,OAAO,IAAI;OACvC;;;;AAKF,aAAQ,SAAS,QAAO,MAAK,EAAE,OAAO,CAAC,SAAQ,QAAO;AAClD,WAAK,WAAW,KAAKA,OAAK,OAAO,IAAI;OACvC;;;;AAKF,SAAI,IAAI,cACJ,KAAI,cACC,QAAQ,GAAG,KAAG,MAAM,EAAE,WAAU,MAAK,EAAE,SAAS,EAAE,KAAK,KAAKD,IAAE,CAC9D,SAAQ,QAAO;AACZ,WAAK,WAAW,KAAKC,MAAI;OAC3B;MAEZ;UACH;;;;IAIH,MAAM,MAAM,QACP,QAAQ,QAAQ,YAAY,CAC5B,YAAY,QAAQ,eAAe,GAAG;AAE3C,aACM,SACA,QAAQ,GAAG,KAAG,MAAM,EAAE,WAAU,MAAK,EAAE,SAAS,EAAE,KAAK,KAAKD,IAAE,CAC/D,SAAQ,QAAO;AACZ,UAAK,WAAW,KAAK,KAAK,KAAK;MACjC;AAEN,QAAI,OAAO,YAAY;AACnB,cAAS,SAAS,IAAI,MAAM,EAAE,IAAI,MAAM,IAAI,qBAAqB,SAAS,QAAQ;AAClF,WAAM,SAAS,QAAQ;MACzB;;;;AAKV,UAAQ,KAAK,aAAa,OAAO,GAAG,QAAQ;AACxC,OAAI,IAAI,MAAM,KAAK,OACf,OAAM,MAAM;IACR,GAAGE;IACH,OAAO;IACP,SAAS,EAAE;IACd,CAAC;IAER;AAEF,SAAO;;CAGX,WAAY,KAAoB,KAAgB,OAAiB,QAAc;EAC3E,MAAM,cAAc,IAAI,aAAa,QAAQ,eAAe,GAAG,MAAM,SAAS,MAAM,IAAI,EAAE,GAAG,IAAI;EACjG,MAAM,OAAO,IAAI,KAAK,WAAW,KAAK,GAAG;AAEzC,MAAI,IAAI,OACJ,KAAI,OAAO;GACP,MAAM,QAAQ,IAAI,OACZ,KAAI,MAAM,EAAE,WAAW,IAAI,IAAI,MAAM,KAAK,IAAK,CAAC,KAAK,KAAK,CAC3D,WAAW,QAAQ,KAAK,CACxB,WAAW,OAAO,IAAI;AAE3B,OAAI,OAAO,SAAS,IAAI,aAAc,OAAO,IAAI,aAAa,IAAI,OAAU;QAE5E,KAAI,OACA,IAAI,OAAO,KAAK,KAAK,IAAI,IAAI,WAAW,KAAK,KAAK,KAAK,KACvD,aACA,IAAI,aACP;MAGL,KAAI,SACA,IAAI,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAC9C,aACA,IAAI,aACP;;CAIT,aAAa,MAAO,QAAgB;AAChC,UAAQ,MAAM,IAAI,OAAO,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,YAAY;;;;;;ACvP1E,IAAa,SAAb,MAAa,eAAe,cAAc;CACtC,YAAY,AAAOC,KAAkB;AACjC,QAAM,IAAI;EADK;;CAInB,OAAO,KAAM,KAAkB;EAC3B,MAAM,WAAW,IAAI,OAAO,IAAI;AAEhC,UAAQ,IAAI,CAAC,SAAS,kBAAkB,CAAC,CAAC,CACrC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;;CAI/B,MAAc,MAAO;AACjB,QAAM,OAAO,MAAM,KAAK;AACxB,UAAQ,KAAK,EAAE;;CAGnB,MAAc,mBAAoB;AAC9B,OAAK,MAAMC,SAAK,KAAK,QAAQ,KAAK,EAAE,KAAK,SAAS;AAClD,OAAK,aAAa,WAAW,cAAc,iBAAiB,KAAK,IAAI,IAAI;AACzE,OAAK,cAAc,WAAW,cAAc,oBAAoB,KAAK,IAAI,IAAI;AAE7E,MAAI;AACA,QAAK,gBAAgB,MAAM,OAAOA,SAAK,KAAK,KAAK,YAAY,eAAe;UACxE;AACJ,QAAK,gBAAgB,EAAE,SAAS,OAAO;;AAG3C,MAAI;AACA,QAAK,iBAAiB,MAAM,OAAOA,SAAK,KAAK,KAAK,aAAa,eAAe;UAC1E;AACJ,QAAK,iBAAiB,EAAE,SAAS,OAAO;;AAG5C,SAAO;;;;;;;;;;;;;;;AC5Bf,IAAa,yBAAb,cAA4C,gBAAgB;CACxD,OAAc,WAAW;;;;CAKzB,OAAc,UAAU;CAExB,WAAY;CAGZ,OAAQ;AACJ,SAAO,KAAK,KAAK,IAAI;AAErB,UAAQ,GAAG,gBAAgB;AACvB,WAAQ,KAAK,EAAE;IACjB;AACF,UAAQ,GAAG,iBAAiB;AACxB,WAAQ,KAAK,EAAE;IACjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@h3ravel/console",
3
- "version": "11.3.2",
3
+ "version": "11.3.3",
4
4
  "description": "CLI utilities for scaffolding, running migrations, tasks and for H3ravel.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -51,8 +51,8 @@
51
51
  ],
52
52
  "peerDependencies": {
53
53
  "@h3ravel/arquebus": "^0.4.0",
54
- "@h3ravel/core": "^1.9.1",
55
- "@h3ravel/support": "^0.10.0"
54
+ "@h3ravel/support": "^0.10.0",
55
+ "@h3ravel/core": "^1.9.1"
56
56
  },
57
57
  "devDependencies": {
58
58
  "typescript": "^5.9.2"
@@ -66,10 +66,10 @@
66
66
  "radashi": "^12.6.2",
67
67
  "resolve-from": "^5.0.0",
68
68
  "tsx": "^4.20.5",
69
- "@h3ravel/database": "^11.2.1",
70
- "@h3ravel/config": "^1.4.0",
71
69
  "@h3ravel/cache": "^11.0.1",
70
+ "@h3ravel/database": "^11.2.1",
72
71
  "@h3ravel/http": "^11.2.0",
72
+ "@h3ravel/config": "^1.4.0",
73
73
  "@h3ravel/queue": "^11.0.1",
74
74
  "@h3ravel/shared": "^0.20.0",
75
75
  "@h3ravel/router": "^1.9.0",