@h3ravel/console 11.8.0 → 11.9.0

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/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { createRequire } from "node:module";
2
2
  import { FileSystem, Logger, TaskManager } from "@h3ravel/shared";
3
- import { Application, ConsoleCommand, ConsoleKernel, ServiceProvider } from "@h3ravel/core";
3
+ import { Application, ConsoleCommand, ConsoleKernel, ContainerResolver, ServiceProvider } from "@h3ravel/core";
4
4
  import { execa } from "execa";
5
5
  import preferredPM from "preferred-pm";
6
6
  import { glob, mkdir, readFile, rm, writeFile } from "node:fs/promises";
7
7
  import { Str } from "@h3ravel/support";
8
8
  import nodepath from "node:path";
9
- import { Option, program } from "commander";
9
+ import { Argument, Option, program } from "commander";
10
10
  import { existsSync } from "node:fs";
11
11
  import { fork } from "child_process";
12
12
  import { dirname, join, resolve } from "path";
@@ -23,7 +23,7 @@ var BuildCommand = class BuildCommand extends ConsoleCommand {
23
23
  *
24
24
  * @var string
25
25
  */
26
- signature = `build:
26
+ signature = `build
27
27
  {--m|minify : Minify your bundle output}
28
28
  {--d|dev : Build for dev but don't watch for changes}
29
29
  `;
@@ -116,6 +116,39 @@ var BuildCommand = class BuildCommand extends ConsoleCommand {
116
116
  //#region src/Commands/Command.ts
117
117
  var Command = class extends ConsoleCommand {};
118
118
 
119
+ //#endregion
120
+ //#region src/Commands/HelpCommand.ts
121
+ var HelpCommand = class extends Command {
122
+ /**
123
+ * The name and signature of the console command.
124
+ *
125
+ * @var string
126
+ */
127
+ signature = `help
128
+ {command_name=help : The command name}
129
+ {--format=txt : The output format}
130
+ `;
131
+ /**
132
+ * The console command description.
133
+ *
134
+ * @var string
135
+ */
136
+ description = "Display help for a command";
137
+ async handle() {
138
+ const cmd = this.argument("command_name");
139
+ if (!cmd) {
140
+ this.program.outputHelp();
141
+ return;
142
+ }
143
+ const target = this.program.commands.find((c) => c.name() === cmd);
144
+ if (!target) {
145
+ this.error(`ERROR: Unknown command: ${Logger.log(cmd, ["italic", "grey"], false)}.`);
146
+ process.exit(1);
147
+ }
148
+ target.outputHelp();
149
+ }
150
+ };
151
+
119
152
  //#endregion
120
153
  //#region src/logo.ts
121
154
  const logo = String.raw`
@@ -392,13 +425,28 @@ var Signature = class Signature {
392
425
  * Trim the string
393
426
  */
394
427
  description = description.trim();
395
- /**
396
- * Parse name modifiers (?, *, ?*)
397
- */
398
428
  let name = namePart;
429
+ let flags;
430
+ let choices = [];
399
431
  let required = /[^a-zA-Z0-9_|-]/.test(name);
400
432
  let multiple = false;
401
433
  let placeholder;
434
+ let defaultValue;
435
+ /**
436
+ * Parse the command name
437
+ */
438
+ if (name.includes("=")) {
439
+ const [rawName, rawDefault] = name.split("=");
440
+ name = rawName.trim();
441
+ const hold = rawName.trim().split("|");
442
+ const holder = (hold.at(1) ?? hold.at(0)).replace("--", "");
443
+ defaultValue = rawDefault.trim();
444
+ placeholder = defaultValue ? `[${holder}]` : `<${holder}>`;
445
+ required = false;
446
+ }
447
+ /**
448
+ * Parse name modifiers (?, *, ?*)
449
+ */
402
450
  if (name.endsWith("?*")) {
403
451
  required = false;
404
452
  multiple = true;
@@ -415,8 +463,6 @@ var Signature = class Signature {
415
463
  * Check if it's a flag option (starts with --)
416
464
  */
417
465
  const isFlag = name.startsWith("--");
418
- let flags;
419
- let defaultValue;
420
466
  if (isFlag) {
421
467
  /**
422
468
  * Parse flags and default values
@@ -438,8 +484,14 @@ var Signature = class Signature {
438
484
  } else flags.push(part);
439
485
  }
440
486
  }
487
+ const desc = description.match(/^([^:]+?)\s*:\s*\[?([\w\s,]+)\]?$/);
488
+ if (match) {
489
+ description = desc?.[1].trim() ?? description;
490
+ choices = desc?.[2].split(",").map((s) => s.trim()).filter(Boolean) ?? choices;
491
+ }
441
492
  options.push({
442
493
  name: isFlag ? flags[flags.length - 1] : name,
494
+ choices,
443
495
  required,
444
496
  multiple,
445
497
  description,
@@ -464,7 +516,7 @@ var Signature = class Signature {
464
516
  static parseSignature(signature, commandClass) {
465
517
  const lines = signature.split("\n").map((l) => l.trim()).filter((l) => l.length > 0);
466
518
  const isHidden = ["#", "^"].includes(lines[0][0]) || /:[#^]/.test(lines[0]);
467
- const baseCommand = lines[0].replace(/[^\w=:-]/g, "");
519
+ const baseCommand = lines[0].split("{")[0].trim().replace(/[^\w:-]/g, "");
468
520
  const description = commandClass.getDescription();
469
521
  const isNamespaceCommand = baseCommand.endsWith(":");
470
522
  /**
@@ -630,6 +682,7 @@ var Musket = class Musket {
630
682
  }
631
683
  loadBaseCommands() {
632
684
  [
685
+ new HelpCommand(this.app, this.kernel),
633
686
  new MakeCommand(this.app, this.kernel),
634
687
  new ListCommand(this.app, this.kernel),
635
688
  new PostinstallCommand(this.app, this.kernel),
@@ -681,7 +734,7 @@ var Musket = class Musket {
681
734
  ])).addOption(new Option(additional.noInteraction[0], additional.noInteraction[1])).action(async () => {
682
735
  const instance = new ListCommand(this.app, this.kernel);
683
736
  instance.setInput(program.opts(), program.args, program.registeredArguments, {}, program);
684
- instance.handle();
737
+ await this.handle(instance);
685
738
  });
686
739
  /**
687
740
  * Format the help command display
@@ -693,12 +746,14 @@ var Musket = class Musket {
693
746
  styleSubcommandTerm: (str) => Logger.log(str, "green", false),
694
747
  formatItemList(heading, items) {
695
748
  if (items.length < 1) return [];
749
+ if (!heading.includes("Commands:")) return items;
696
750
  const c = (str) => str.replace(/[^A-Za-z0-9-,]/g, "").replace("32m", "");
697
751
  let flags = items.filter((e) => c(e).startsWith("--") || c(e).includes(",--"));
698
752
  if (flags.length > 0) flags = [Logger.log("\n" + heading + "\n", "yellow", false)].concat(flags);
699
753
  const list = items.filter((e) => !c(e).startsWith("--") && !c(e).includes(",--"));
700
754
  if (list.length < 1) return flags;
701
- return flags.concat(Logger.log("\nAvailable Commands:", "yellow", false), ListCommand.groupItems(list, true));
755
+ const _heading = c(heading).includes("Arguments") ? heading : "Available Commands:";
756
+ return flags.concat(Logger.log(`\n${_heading}`, "yellow", false), ListCommand.groupItems(list, true));
702
757
  },
703
758
  showGlobalOptions: true
704
759
  });
@@ -720,7 +775,7 @@ var Musket = class Musket {
720
775
  */
721
776
  const cmd = command.isHidden ? program : program.command(command.baseCommand).description(command.description ?? "").action(async () => {
722
777
  instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program);
723
- await instance.handle();
778
+ await this.handle(instance);
724
779
  });
725
780
  /**
726
781
  * Add options to the base command if it has any
@@ -734,7 +789,7 @@ var Musket = class Musket {
734
789
  command.subCommands.filter((v, i$1, a) => !v.shared && a.findIndex((t) => t.name === v.name) === i$1).forEach((sub) => {
735
790
  const cmd$1 = program.command(`${command.baseCommand}:${sub.name}`).description(sub.description || "").action(async () => {
736
791
  instance.setInput(cmd$1.opts(), cmd$1.args, cmd$1.registeredArguments, sub, program);
737
- await instance.handle();
792
+ await this.handle(instance);
738
793
  });
739
794
  /**
740
795
  * Add the shared arguments here
@@ -765,7 +820,7 @@ var Musket = class Musket {
765
820
  });
766
821
  cmd.action(async () => {
767
822
  instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program);
768
- await instance.handle();
823
+ await this.handle(instance);
769
824
  });
770
825
  }
771
826
  }
@@ -789,17 +844,38 @@ var Musket = class Musket {
789
844
  let flags = opt.flags?.map((f) => f.length === 1 ? `-${f}` : `--${f.replace(/^-+/, "")}`).join(", ") ?? void 0;
790
845
  if (opt.required && !opt.placeholder) flags += ` <${type}>`;
791
846
  else if (opt.placeholder) flags += " " + opt.placeholder;
792
- cmd.option(flags || "", description, opt.defaultValue);
847
+ let optn = new Option(flags || "", description).default(opt.defaultValue);
848
+ if (opt.choices && opt.choices.length) optn = optn.choices(opt.choices ?? []);
849
+ cmd.addOption(optn);
793
850
  } else {
794
851
  let flags = opt.flags?.join(", ") ?? "";
795
852
  if (opt.required && !opt.placeholder) flags += ` <${type}>`;
796
853
  else if (opt.placeholder) flags += " " + opt.placeholder;
797
- cmd.option(flags, description, opt.defaultValue);
854
+ let optn = new Option(flags, description).default(opt.defaultValue);
855
+ if (opt.choices && opt.choices.length) optn = optn.choices(opt.choices ?? []);
856
+ cmd.addOption(optn);
798
857
  }
799
- else cmd.argument(opt.required ? `<${opt.name}>` : `[${opt.name}]`, description, opt.defaultValue);
858
+ else {
859
+ let name = opt.placeholder;
860
+ if (!name) name = opt.required ? `<${opt.name}>` : `[${opt.name}]`;
861
+ let arg = new Argument(name, description);
862
+ if (opt.choices && opt.choices.length) arg = arg.choices(opt.choices ?? []);
863
+ if (opt.defaultValue) arg.default(opt.defaultValue);
864
+ cmd.addArgument(arg);
865
+ }
866
+ }
867
+ async handle(cmd) {
868
+ await new ContainerResolver(this.app).resolveMethodParams(cmd, "handle");
800
869
  }
801
870
  static async parse(kernel) {
802
- return (await new Musket(kernel.app, kernel).build()).parseAsync();
871
+ return (await new Musket(kernel.app, kernel).build()).exitOverride(() => {
872
+ Logger.log("Unknown command or argument.", "white");
873
+ Logger.log([
874
+ ["Run", "white"],
875
+ ["`musket --help`", ["grey", "italic"]],
876
+ ["to see available commands.", "white"]
877
+ ], " ");
878
+ }).parseAsync(process.argv).catch((e) => e);
803
879
  }
804
880
  };
805
881
 
@@ -867,5 +943,5 @@ var ConsoleServiceProvider = class extends ServiceProvider {
867
943
  };
868
944
 
869
945
  //#endregion
870
- export { BuildCommand, Command, ConsoleServiceProvider, Kernel, ListCommand, MakeCommand, Musket, PostinstallCommand, Signature, TsDownConfig, altLogo, logo };
946
+ export { BuildCommand, Command, ConsoleServiceProvider, HelpCommand, Kernel, ListCommand, MakeCommand, Musket, PostinstallCommand, Signature, TsDownConfig, altLogo, logo };
871
947
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["outDir","e","options: CommandOption[]","match: RegExpExecArray | null","nestedOptions: CommandOption[] | undefined","placeholder: string | undefined","flags: string[] | undefined","defaultValue: string | number | boolean | undefined | string[]","dir","entryFileName","env","TsDownConfig: Options","path","app: Application","kernel: Kernel","commands: Command[]","path","i","cmd","TsDownConfig","app: Application","path"],"sources":["../src/Commands/BuildCommand.ts","../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_rollup@4.52.3/node_modules/@rollup/plugin-run/dist/es/index.js","../src/TsdownConfig.ts","../src/Musket.ts","../src/Kernel.ts","../src/Providers/ConsoleServiceProvider.ts"],"sourcesContent":["import { Logger, TaskManager } from '@h3ravel/shared'\n\nimport { ConsoleCommand } from '@h3ravel/core'\nimport { execa } from 'execa'\nimport preferredPM from 'preferred-pm'\n\nexport class BuildCommand extends ConsoleCommand {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `build:\n {--m|minify : Minify your bundle output}\n {--d|dev : Build for dev but don't watch for changes}\n `\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Build the app for production'\n\n public async handle () {\n try {\n await this.fire()\n } catch (e) {\n Logger.error(e as any)\n }\n }\n\n protected async fire () {\n const outDir = this.option('dev') ? '.h3ravel/serve' : env('DIST_DIR', 'dist')\n const minify = this.option('minify')\n const verbosity = this.getVerbosity()\n const debug = verbosity > 0\n\n this.newLine()\n await BuildCommand.build({ outDir, minify, verbosity, debug, mute: false })\n this.newLine()\n }\n\n /**\n * build\n */\n public static async build ({ debug, minify, mute, verbosity, outDir } = {\n mute: false,\n debug: false,\n minify: false,\n verbosity: 0,\n outDir: 'dist'\n }) {\n\n const pm = (await preferredPM(base_path()))?.name ?? 'pnpm'\n\n const LOG_LEVELS = [\n 'silent',\n 'info',\n 'warn',\n 'error',\n ]\n\n const ENV_VARS = {\n EXTENDED_DEBUG: debug ? 'true' : 'false',\n CLI_BUILD: 'true',\n NODE_ENV: 'production',\n DIST_DIR: outDir,\n DIST_MINIFY: minify,\n LOG_LEVEL: LOG_LEVELS[verbosity]\n }\n\n const silent = ENV_VARS.LOG_LEVEL === 'silent' ? '--silent' : null\n\n if (mute) {\n return await execa(\n pm,\n ['tsdown', silent, '--config-loader', 'unconfig', '-c', 'tsdown.default.config.ts'].filter(e => e !== null),\n { stdout: 'inherit', stderr: 'inherit', cwd: base_path(), env: Object.assign({}, process.env, ENV_VARS) }\n )\n }\n\n const type = outDir === 'dist' ? 'Production' : 'Development'\n\n return await TaskManager.advancedTaskRunner(\n [[`Creating ${type} Bundle`, 'STARTED'], [`${type} Bundle Created`, 'COMPLETED']],\n async () => {\n await execa(\n pm,\n ['tsdown', silent, '--config-loader', 'unconfig', '-c', 'tsdown.default.config.ts'].filter(e => e !== null),\n { stdout: 'inherit', stderr: 'inherit', cwd: base_path(), env: Object.assign({}, process.env, ENV_VARS) }\n )\n }\n )\n }\n}\n","import { ConsoleCommand } from '@h3ravel/core'\n\nexport class Command extends ConsoleCommand {\n}\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 list = ListCommand.groupItems(commands)\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 /**\n * Group Commands based on thier names\n * \n * @param commands \n * @returns \n */\n public static groupItems (commands: string[], fmtd = false) {\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 return Object.entries(grouped).map(([group, cmds]) => {\n const label = group === '__root__' ? '' : group\n let out = [Logger.log(label, 'yellow', false), cmds.join('\\n')].join('\\n')\n if (fmtd) {\n out += '\\n'\n }\n return out\n })\n }\n}\n","import { FileSystem, Logger } from '@h3ravel/shared'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { Str } from '@h3ravel/support'\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 {command : Create a new Musket command. \n | {--command : The terminal command that will be used to invoke the class} \n | {--force : Create the class even if the console command already exists}\n }\n {view : Create a new view.\n | {--force : Create the view 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 (this: any) {\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 view: 'makeView',\n command: 'makeCommand',\n } as const\n\n await this[methods[command]]()\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 crtlrPath = FileSystem.findModulePkg('@h3ravel/http', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/controller${type}.stub`)\n const path = app_path(`Http/Controllers/${name}.ts`)\n\n /** The Controller is scoped to a path make sure to create the associated directories */\n if (name.includes('/')) {\n await mkdir(Str.beforeLast(path, '/'), { recursive: true })\n }\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 * Create a new Musket command\n */\n protected makeCommand () {\n Logger.success('Musket command creation is not yet available')\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 /** The view is scoped to a path make sure to create the associated directories */\n if (name.includes('/')) {\n await mkdir(Str.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","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: RegExpExecArray | null\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 let placeholder: string | undefined\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 const cname = name.split('--').at(1)?.split('|').at(1) ?? name\n placeholder = `[${cname}]`\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 placeholder,\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 { fork } from 'child_process';\nimport { resolve, dirname, join } from 'path';\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 { existsSync } from 'node:fs'\nimport path from 'node:path'\nimport { rm } from 'node:fs/promises'\nimport run from '@rollup/plugin-run'\n\nconst env = process.env.NODE_ENV || 'development'\nlet outDir = env === 'development' ? '.h3ravel/serve' : 'dist'\nif (process.env.DIST_DIR) {\n outDir = process.env.DIST_DIR\n}\n\nexport const TsDownConfig: Options = {\n outDir,\n entry: ['src/**/*.ts'],\n format: ['esm'],//, 'cjs'],\n target: 'node22',\n sourcemap: env === 'development',\n minify: !!process.env.DIST_MINIFY,\n external: [\n /^@h3ravel\\/.*/gi,\n ],\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 DIST_DIR: 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 hooks (e) {\n e.hook('build:done', async () => {\n const paths = ['database/migrations', 'database/factories', 'database/seeders']\n for (let i = 0; i < paths.length; i++) {\n const name = paths[i]\n if (existsSync(path.join(outDir, name)))\n await rm(path.join(outDir, name), { recursive: true })\n }\n })\n },\n plugins: env === 'development' && process.env.CLI_BUILD !== 'true' ? [\n run({\n env: Object.assign({}, process.env, {\n NODE_ENV: env,\n DIST_DIR: 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","\nimport { 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'\nimport { BuildCommand } from './Commands/BuildCommand'\n\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 await 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 new BuildCommand(this.app, this.kernel),\n ]\n\n commands.forEach(e => this.addCommand(e))\n }\n\n private async loadDiscoveredCommands () {\n const DIST_DIR = `/${env('DIST_DIR', '.h3ravel/serve')}/`.replaceAll('//', '')\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/', DIST_DIR)\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 async initialize () {\n // Build the app if the user is calling for help to ensure we get the latest data\n if (process.argv.includes('--help') || process.argv.includes('-h')) {\n await this.rebuild('help')\n Object.keys(require.cache).forEach(key => delete require.cache[key])\n }\n\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 except errors and warnings'],\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 noInteraction: ['-n, --no-interaction', 'Do not ask any interactive question'],\n }\n\n /** \n * Init Commander\n */\n program\n .name('musket')\n .version(`${cliVersion}\\n${localVersion}`)\n .description(altLogo)\n .configureHelp({ showGlobalOptions: true })\n .addOption(new Option(additional.quiet[0], additional.quiet[1]))\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.noInteraction[0], additional.noInteraction[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 /**\n * Format the help command display\n */\n program.configureHelp({\n styleTitle: (str) => Logger.log(str, 'yellow', false),\n styleOptionTerm: (str) => Logger.log(str, 'green', false),\n styleArgumentTerm: (str) => Logger.log(str, 'green', false),\n styleSubcommandTerm: (str) => Logger.log(str, 'green', false),\n formatItemList (heading, items) {\n if (items.length < 1) {\n return []\n }\n const c = (str: string) => str.replace(/[^A-Za-z0-9-,]/g, '').replace('32m', '')\n\n let flags = items.filter(e => c(e).startsWith('--') || c(e).includes(',--'))\n\n if (flags.length > 0) {\n flags = [Logger.log('\\n' + heading + '\\n', 'yellow', false)].concat(flags)\n }\n\n const list = items.filter(e => !c(e).startsWith('--') && !c(e).includes(',--'))\n\n if (list.length < 1) {\n return flags\n }\n\n return flags.concat(Logger.log('\\nAvailable Commands:', 'yellow', false), ListCommand.groupItems(list, true))\n },\n showGlobalOptions: true\n })\n\n\n /** \n * Create the init Command\n */\n program\n .command('init')\n .description('Initialize H3ravel.')\n .action(async () => {\n Logger.success('Initialized: H3ravel has been initialized!')\n })\n\n /** \n * Loop through all the available commands\n */\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 .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 .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 this.rebuild(cmd.name())\n })\n\n return program\n }\n\n async rebuild (name: string) {\n if (name !== 'fire' && name !== 'build') {\n await build({\n ...TsDownConfig,\n watch: false,\n plugins: []\n })\n }\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 let flags = opt.flags\n ?.map(f => (f.length === 1 ? `-${f}` : `--${f.replace(/^-+/, '')}`))\n .join(', ') ?? undefined\n\n if (opt.required && !opt.placeholder) {\n flags += ` <${type}>`\n } else if (opt.placeholder) {\n flags += ' ' + opt.placeholder\n }\n\n cmd.option(flags || '', description!, <never>opt.defaultValue)\n } else {\n let flags = opt.flags?.join(', ') ?? ''\n\n if (opt.required && !opt.placeholder) {\n flags += ` <${type}>`\n } else if (opt.placeholder) {\n flags += ' ' + opt.placeholder\n }\n\n cmd.option(\n flags,\n description!,\n <never>opt.defaultValue\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 runsInConsole = true\n public runsInConsole = 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":[7],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["outDir","e","options: CommandOption[]","match: RegExpExecArray | null","description: string","nestedOptions: CommandOption[] | undefined","flags: string[] | undefined","choices: string[]","placeholder: string | undefined","defaultValue: string | number | boolean | undefined | string[]","dir","entryFileName","env","TsDownConfig: Options","path","app: Application","kernel: Kernel","commands: Command[]","path","i","cmd","TsDownConfig","app: Application","path"],"sources":["../src/Commands/BuildCommand.ts","../src/Commands/Command.ts","../src/Commands/HelpCommand.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_rollup@4.52.3/node_modules/@rollup/plugin-run/dist/es/index.js","../src/TsdownConfig.ts","../src/Musket.ts","../src/Kernel.ts","../src/Providers/ConsoleServiceProvider.ts"],"sourcesContent":["import { Logger, TaskManager } from '@h3ravel/shared'\n\nimport { ConsoleCommand } from '@h3ravel/core'\nimport { execa } from 'execa'\nimport preferredPM from 'preferred-pm'\n\nexport class BuildCommand extends ConsoleCommand {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `build\n {--m|minify : Minify your bundle output}\n {--d|dev : Build for dev but don't watch for changes}\n `\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Build the app for production'\n\n public async handle () {\n try {\n await this.fire()\n } catch (e) {\n Logger.error(e as any)\n }\n }\n\n protected async fire () {\n const outDir = this.option('dev') ? '.h3ravel/serve' : env('DIST_DIR', 'dist')\n const minify = this.option('minify')\n const verbosity = this.getVerbosity()\n const debug = verbosity > 0\n\n this.newLine()\n await BuildCommand.build({ outDir, minify, verbosity, debug, mute: false })\n this.newLine()\n }\n\n /**\n * build\n */\n public static async build ({ debug, minify, mute, verbosity, outDir } = {\n mute: false,\n debug: false,\n minify: false,\n verbosity: 0,\n outDir: 'dist'\n }) {\n\n const pm = (await preferredPM(base_path()))?.name ?? 'pnpm'\n\n const LOG_LEVELS = [\n 'silent',\n 'info',\n 'warn',\n 'error',\n ]\n\n const ENV_VARS = {\n EXTENDED_DEBUG: debug ? 'true' : 'false',\n CLI_BUILD: 'true',\n NODE_ENV: 'production',\n DIST_DIR: outDir,\n DIST_MINIFY: minify,\n LOG_LEVEL: LOG_LEVELS[verbosity]\n }\n\n const silent = ENV_VARS.LOG_LEVEL === 'silent' ? '--silent' : null\n\n if (mute) {\n return await execa(\n pm,\n ['tsdown', silent, '--config-loader', 'unconfig', '-c', 'tsdown.default.config.ts'].filter(e => e !== null),\n { stdout: 'inherit', stderr: 'inherit', cwd: base_path(), env: Object.assign({}, process.env, ENV_VARS) }\n )\n }\n\n const type = outDir === 'dist' ? 'Production' : 'Development'\n\n return await TaskManager.advancedTaskRunner(\n [[`Creating ${type} Bundle`, 'STARTED'], [`${type} Bundle Created`, 'COMPLETED']],\n async () => {\n await execa(\n pm,\n ['tsdown', silent, '--config-loader', 'unconfig', '-c', 'tsdown.default.config.ts'].filter(e => e !== null),\n { stdout: 'inherit', stderr: 'inherit', cwd: base_path(), env: Object.assign({}, process.env, ENV_VARS) }\n )\n }\n )\n }\n}\n","import { ConsoleCommand } from '@h3ravel/core'\n\nexport class Command extends ConsoleCommand {\n}\n","import { Command } from './Command'\nimport { Logger } from '@h3ravel/shared'\n\nexport class HelpCommand extends Command {\n\n /**\n * The name and signature of the console command.\n *\n * @var string\n */\n protected signature: string = `help\n {command_name=help : The command name}\n {--format=txt : The output format}\n `\n\n /**\n * The console command description.\n *\n * @var string\n */\n protected description: string = 'Display help for a command'\n\n public async handle () {\n const cmd = this.argument('command_name')\n\n if (!cmd) {\n this.program.outputHelp()\n return\n }\n\n const target = this.program.commands.find(c => c.name() === cmd)\n\n if (!target) {\n this.error(`ERROR: Unknown command: ${Logger.log(cmd, ['italic', 'grey'], false)}.`)\n process.exit(1)\n }\n\n target.outputHelp()\n }\n}\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 list = ListCommand.groupItems(commands)\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 /**\n * Group Commands based on thier names\n * \n * @param commands \n * @returns \n */\n public static groupItems (commands: string[], fmtd = false) {\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 return Object.entries(grouped).map(([group, cmds]) => {\n const label = group === '__root__' ? '' : group\n let out = [Logger.log(label, 'yellow', false), cmds.join('\\n')].join('\\n')\n if (fmtd) {\n out += '\\n'\n }\n return out\n })\n }\n}\n","import { FileSystem, Logger } from '@h3ravel/shared'\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\n\nimport { Command } from './Command'\nimport { Str } from '@h3ravel/support'\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 {command : Create a new Musket command. \n | {--command : The terminal command that will be used to invoke the class} \n | {--force : Create the class even if the console command already exists}\n }\n {view : Create a new view.\n | {--force : Create the view 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 (this: any) {\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 view: 'makeView',\n command: 'makeCommand',\n } as const\n\n await this[methods[command]]()\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 crtlrPath = FileSystem.findModulePkg('@h3ravel/http', this.kernel.cwd) ?? ''\n const stubPath = nodepath.join(crtlrPath, `dist/stubs/controller${type}.stub`)\n const path = app_path(`Http/Controllers/${name}.ts`)\n\n /** The Controller is scoped to a path make sure to create the associated directories */\n if (name.includes('/')) {\n await mkdir(Str.beforeLast(path, '/'), { recursive: true })\n }\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 * Create a new Musket command\n */\n protected makeCommand () {\n Logger.success('Musket command creation is not yet available')\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 /** The view is scoped to a path make sure to create the associated directories */\n if (name.includes('/')) {\n await mkdir(Str.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","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: RegExpExecArray | null\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: string = 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 // Initialize all variables\n let name = namePart\n let flags: string[] | undefined\n let choices: string[] = []\n let required = /[^a-zA-Z0-9_|-]/.test(name)\n let multiple = false\n let placeholder: string | undefined\n let defaultValue: string | number | boolean | undefined | string[]\n\n /**\n * Parse the command name\n */\n if (name.includes('=')) {\n const [rawName, rawDefault] = name.split('=')\n\n name = rawName.trim()\n const hold = rawName.trim().split('|')\n const holder = (hold.at(1) ?? hold.at(0)!).replace('--', '')\n defaultValue = rawDefault.trim()\n placeholder = defaultValue ? `[${holder}]` : `<${holder}>`\n required = false\n }\n\n /**\n * Parse name modifiers (?, *, ?*)\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 const cname = name.split('--').at(1)?.split('|').at(1) ?? name\n placeholder = `[${cname}]`\n }\n\n /**\n * Check if it's a flag option (starts with --)\n */\n const isFlag = name.startsWith('--')\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 // Extract choices from the descriptions\n const desc = description.match(/^([^:]+?)\\s*:\\s*\\[?([\\w\\s,]+)\\]?$/)\n if (match) {\n description = desc?.[1].trim() ?? description\n choices = desc?.[2].split(',').map(s => s.trim()).filter(Boolean) ?? choices\n }\n\n options.push({\n name: isFlag ? flags![flags!.length - 1] : name,\n choices,\n required,\n multiple,\n description,\n flags,\n shared,\n isFlag,\n isHidden,\n placeholder,\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].split('{')[0].trim().replace(/[^\\w:-]/g, '')\n const description = commandClass.getDescription()\n const isNamespaceCommand = baseCommand.endsWith(':')\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 { fork } from 'child_process';\nimport { resolve, dirname, join } from 'path';\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 { existsSync } from 'node:fs'\nimport path from 'node:path'\nimport { rm } from 'node:fs/promises'\nimport run from '@rollup/plugin-run'\n\nconst env = process.env.NODE_ENV || 'development'\nlet outDir = env === 'development' ? '.h3ravel/serve' : 'dist'\nif (process.env.DIST_DIR) {\n outDir = process.env.DIST_DIR\n}\n\nexport const TsDownConfig: Options = {\n outDir,\n entry: ['src/**/*.ts'],\n format: ['esm'],//, 'cjs'],\n target: 'node22',\n sourcemap: env === 'development',\n minify: !!process.env.DIST_MINIFY,\n external: [\n /^@h3ravel\\/.*/gi,\n ],\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 DIST_DIR: 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 hooks (e) {\n e.hook('build:done', async () => {\n const paths = ['database/migrations', 'database/factories', 'database/seeders']\n for (let i = 0; i < paths.length; i++) {\n const name = paths[i]\n if (existsSync(path.join(outDir, name)))\n await rm(path.join(outDir, name), { recursive: true })\n }\n })\n },\n plugins: env === 'development' && process.env.CLI_BUILD !== 'true' ? [\n run({\n env: Object.assign({}, process.env, {\n NODE_ENV: env,\n DIST_DIR: 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","\nimport { CommandOption, ParsedCommand } from './Contracts/ICommand'\nimport { Argument, Option, program, type Command as Commander } from 'commander'\n\nimport { Application, ContainerResolver } 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'\nimport { BuildCommand } from './Commands/BuildCommand'\nimport { HelpCommand } from './Commands/HelpCommand'\n\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 await this.initialize()\n }\n\n private loadBaseCommands () {\n const commands: Command[] = [\n new HelpCommand(this.app, this.kernel),\n new MakeCommand(this.app, this.kernel),\n new ListCommand(this.app, this.kernel),\n new PostinstallCommand(this.app, this.kernel),\n new BuildCommand(this.app, this.kernel),\n ]\n\n commands.forEach(e => this.addCommand(e))\n }\n\n private async loadDiscoveredCommands () {\n const DIST_DIR = `/${env('DIST_DIR', '.h3ravel/serve')}/`.replaceAll('//', '')\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/', DIST_DIR)\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 async initialize () {\n // Build the app if the user is calling for help to ensure we get the latest data\n if (process.argv.includes('--help') || process.argv.includes('-h')) {\n await this.rebuild('help')\n Object.keys(require.cache).forEach(key => delete require.cache[key])\n }\n\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 except errors and warnings'],\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 noInteraction: ['-n, --no-interaction', 'Do not ask any interactive question'],\n }\n\n /** \n * Init Commander\n */\n program\n .name('musket')\n .version(`${cliVersion}\\n${localVersion}`)\n .description(altLogo)\n .configureHelp({ showGlobalOptions: true })\n .addOption(new Option(additional.quiet[0], additional.quiet[1]))\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.noInteraction[0], additional.noInteraction[1]))\n .action(async () => {\n const instance = new ListCommand(this.app, this.kernel)\n instance.setInput(program.opts(), program.args, program.registeredArguments, {}, program)\n await this.handle(instance)\n })\n\n /**\n * Format the help command display\n */\n program.configureHelp({\n styleTitle: (str) => Logger.log(str, 'yellow', false),\n styleOptionTerm: (str) => Logger.log(str, 'green', false),\n styleArgumentTerm: (str) => Logger.log(str, 'green', false),\n styleSubcommandTerm: (str) => Logger.log(str, 'green', false),\n formatItemList (heading, items) {\n if (items.length < 1) {\n return []\n }\n\n if (!heading.includes('Commands:')) {\n return items\n }\n\n const c = (str: string) => str.replace(/[^A-Za-z0-9-,]/g, '').replace('32m', '')\n\n let flags = items.filter(e => c(e).startsWith('--') || c(e).includes(',--'))\n\n if (flags.length > 0) {\n flags = [Logger.log('\\n' + heading + '\\n', 'yellow', false)].concat(flags)\n }\n\n const list = items.filter(e => !c(e).startsWith('--') && !c(e).includes(',--'))\n\n if (list.length < 1) {\n return flags\n }\n\n const _heading = c(heading).includes('Arguments') ? heading : 'Available Commands:'\n\n return flags.concat(Logger.log(`\\n${_heading}`, 'yellow', false), ListCommand.groupItems(list, true))\n },\n showGlobalOptions: true\n })\n\n\n /** \n * Create the init Command\n */\n program\n .command('init')\n .description('Initialize H3ravel.')\n .action(async () => {\n Logger.success('Initialized: H3ravel has been initialized!')\n })\n\n /** \n * Loop through all the available commands\n */\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 .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, command, program)\n await this.handle(instance)\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 .action(async () => {\n instance.setInput(cmd.opts(), cmd.args, cmd.registeredArguments, sub, program)\n await this.handle(instance)\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 this.handle(instance)\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 this.rebuild(cmd.name())\n })\n\n return program\n }\n\n async rebuild (name: string) {\n if (name !== 'fire' && name !== 'build') {\n await build({\n ...TsDownConfig,\n watch: false,\n plugins: []\n })\n }\n }\n\n private 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 let flags = opt.flags\n ?.map(f => (f.length === 1 ? `-${f}` : `--${f.replace(/^-+/, '')}`))\n .join(', ') ?? undefined\n\n if (opt.required && !opt.placeholder) {\n flags += ` <${type}>`\n } else if (opt.placeholder) {\n flags += ' ' + opt.placeholder\n }\n\n let optn = new Option(flags || '', description).default(opt.defaultValue)\n if (opt.choices && opt.choices.length) {\n optn = optn.choices(opt.choices ?? [])\n }\n cmd.addOption(optn)\n } else {\n let flags = opt.flags?.join(', ') ?? ''\n\n if (opt.required && !opt.placeholder) {\n flags += ` <${type}>`\n } else if (opt.placeholder) {\n flags += ' ' + opt.placeholder\n }\n\n let optn = new Option(flags, description).default(opt.defaultValue)\n if (opt.choices && opt.choices.length) {\n optn = optn.choices(opt.choices ?? [])\n }\n cmd.addOption(optn)\n }\n } else {\n let name = opt.placeholder\n if (!name) {\n name = opt.required ? `<${opt.name}>` : `[${opt.name}]`\n }\n\n let arg = new Argument(name, description)\n if (opt.choices && opt.choices.length) {\n arg = arg.choices(opt.choices ?? [])\n }\n if (opt.defaultValue) arg.default(opt.defaultValue)\n cmd.addArgument(arg)\n }\n }\n\n private async handle (cmd: Command) {\n //\n await new ContainerResolver(this.app).resolveMethodParams(cmd, 'handle')\n }\n\n static async parse (kernel: Kernel) {\n return (await new Musket(kernel.app, kernel).build())\n .exitOverride(() => {\n Logger.log('Unknown command or argument.', 'white')\n Logger.log([\n ['Run', 'white'],\n ['`musket --help`', ['grey', 'italic']],\n ['to see available commands.', 'white']\n ], ' ')\n })\n .parseAsync(process.argv)\n .catch(e => e)\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 runsInConsole = true\n public runsInConsole = 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":[8],"mappings":";;;;;;;;;;;;;;;;;;;AAMA,IAAa,eAAb,MAAa,qBAAqB,eAAe;;;;;;CAO7C,AAAU,YAAoB;;;;;;;;;CAU9B,AAAU,cAAsB;CAEhC,MAAa,SAAU;AACnB,MAAI;AACA,SAAM,KAAK,MAAM;WACZ,GAAG;AACR,UAAO,MAAM,EAAS;;;CAI9B,MAAgB,OAAQ;EACpB,MAAMA,WAAS,KAAK,OAAO,MAAM,GAAG,mBAAmB,IAAI,YAAY,OAAO;EAC9E,MAAM,SAAS,KAAK,OAAO,SAAS;EACpC,MAAM,YAAY,KAAK,cAAc;EACrC,MAAM,QAAQ,YAAY;AAE1B,OAAK,SAAS;AACd,QAAM,aAAa,MAAM;GAAE;GAAQ;GAAQ;GAAW;GAAO,MAAM;GAAO,CAAC;AAC3E,OAAK,SAAS;;;;;CAMlB,aAAoB,MAAO,EAAE,OAAO,QAAQ,MAAM,WAAW,qBAAW;EACpE,MAAM;EACN,OAAO;EACP,QAAQ;EACR,WAAW;EACX,QAAQ;EACX,EAAE;EAEC,MAAM,MAAM,MAAM,YAAY,WAAW,CAAC,GAAG,QAAQ;EASrD,MAAM,WAAW;GACb,gBAAgB,QAAQ,SAAS;GACjC,WAAW;GACX,UAAU;GACV,UAAUA;GACV,aAAa;GACb,WAbe;IACf;IACA;IACA;IACA;IACH,CAQyB;GACzB;EAED,MAAM,SAAS,SAAS,cAAc,WAAW,aAAa;AAE9D,MAAI,KACA,QAAO,MAAM,MACT,IACA;GAAC;GAAU;GAAQ;GAAmB;GAAY;GAAM;GAA2B,CAAC,QAAO,MAAK,MAAM,KAAK,EAC3G;GAAE,QAAQ;GAAW,QAAQ;GAAW,KAAK,WAAW;GAAE,KAAK,OAAO,OAAO,EAAE,EAAE,QAAQ,KAAK,SAAS;GAAE,CAC5G;EAGL,MAAM,OAAOA,aAAW,SAAS,eAAe;AAEhD,SAAO,MAAM,YAAY,mBACrB,CAAC,CAAC,YAAY,KAAK,UAAU,UAAU,EAAE,CAAC,GAAG,KAAK,kBAAkB,YAAY,CAAC,EACjF,YAAY;AACR,SAAM,MACF,IACA;IAAC;IAAU;IAAQ;IAAmB;IAAY;IAAM;IAA2B,CAAC,QAAO,MAAK,MAAM,KAAK,EAC3G;IAAE,QAAQ;IAAW,QAAQ;IAAW,KAAK,WAAW;IAAE,KAAK,OAAO,OAAO,EAAE,EAAE,QAAQ,KAAK,SAAS;IAAE,CAC5G;IAER;;;;;;AC5FT,IAAa,UAAb,cAA6B,eAAe;;;;ACC5C,IAAa,cAAb,cAAiC,QAAQ;;;;;;CAOrC,AAAU,YAAoB;;;;;;;;;CAU9B,AAAU,cAAsB;CAEhC,MAAa,SAAU;EACnB,MAAM,MAAM,KAAK,SAAS,eAAe;AAEzC,MAAI,CAAC,KAAK;AACN,QAAK,QAAQ,YAAY;AACzB;;EAGJ,MAAM,SAAS,KAAK,QAAQ,SAAS,MAAK,MAAK,EAAE,MAAM,KAAK,IAAI;AAEhE,MAAI,CAAC,QAAQ;AACT,QAAK,MAAM,2BAA2B,OAAO,IAAI,KAAK,CAAC,UAAU,OAAO,EAAE,MAAM,CAAC,GAAG;AACpF,WAAQ,KAAK,EAAE;;AAGnB,SAAO,YAAY;;;;;;ACrC3B,MAAa,OAAO,OAAO,GAAG;;;;;;;;;;;;;;;;;;;;;;;AAwB9B,MAAa,UAAU,OAAO,GAAG;;;;;;;;;;;AClBjC,IAAa,cAAb,MAAa,oBAAoB,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,CAACC,IAAE,CAAC,KAAK,KAAK,EAAE,SAAS,MAClE,EAAE,EAAE,aAAa,IAAI,MAAM,CAChB,KAAK,GAAG;IACtB;;EAGN,MAAM,WAAW,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;EAEF,MAAM,OAAO,YAAY,WAAW,SAAS;;AAG7C,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;;;;;;;;CASzC,OAAc,WAAY,UAAoB,OAAO,OAAO;EACxD,MAAM,UAAU,SAAS,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;AAEN,SAAO,OAAO,QAAQ,QAAQ,CAAC,KAAK,CAAC,OAAO,UAAU;GAClD,MAAM,QAAQ,UAAU,aAAa,KAAK;GAC1C,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,UAAU,MAAM,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK;AAC1E,OAAI,KACA,QAAO;AAEX,UAAO;IACT;;;;;;ACxFV,IAAa,cAAb,cAAiC,QAAQ;;;;;;CAOrC,AAAU,YAAoB;;;;;;;;;;;;;;;;;;;;;;;;;CAyB9B,AAAU,cAAsB;CAEhC,MAAa,SAAmB;EAC5B,MAAM,UAAW,KAAK,WAAW,eAAe,KAAK,WAAW;AAEhE,MAAI,CAAC,KAAK,SAAS,OAAO,CACtB,MAAK,QAAQ,MAAM,yCAAyC,QAAQ;AAUxE,QAAM,KAPU;GACZ,YAAY;GACZ,UAAU;GACV,MAAM;GACN,SAAS;GACZ,CAEkB,WAAW;;;;;CAMlC,MAAgB,iBAAkB;EAC9B,MAAM,OAAO,KAAK,OAAO,MAAM,GAAG,cAAc;EAChD,MAAM,OAAO,KAAK,SAAS,OAAO;EAClC,MAAM,QAAQ,KAAK,OAAO,QAAQ;EAElC,MAAM,YAAY,WAAW,cAAc,iBAAiB,KAAK,OAAO,IAAI,IAAI;EAChF,MAAM,WAAW,SAAS,KAAK,WAAW,wBAAwB,KAAK,OAAO;EAC9E,MAAM,OAAO,SAAS,oBAAoB,KAAK,KAAK;;AAGpD,MAAI,KAAK,SAAS,IAAI,CAClB,OAAM,MAAM,IAAI,WAAW,MAAM,IAAI,EAAE,EAAE,WAAW,MAAM,CAAC;;AAI/D,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,AAAU,cAAe;AACrB,SAAO,QAAQ,+CAA+C;;;;;CAMlE,MAAgB,WAAY;EACxB,MAAM,OAAO,KAAK,SAAS,OAAO;EAClC,MAAM,QAAQ,KAAK,OAAO,QAAQ;EAElC,MAAM,OAAO,UAAU,uBAAuB,KAAK,OAAO;;AAG1D,MAAI,KAAK,SAAS,IAAI,CAClB,OAAM,MAAM,IAAI,WAAW,MAAM,IAAI,EAAE,EAAE,WAAW,MAAM,CAAC;;AAI/D,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;;;;;;ACjHzG,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,IAAIC;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,IAAIC,cAAsB;GAC1B,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;GAIpC,IAAI,OAAO;GACX,IAAIC;GACJ,IAAIC,UAAoB,EAAE;GAC1B,IAAI,WAAW,kBAAkB,KAAK,KAAK;GAC3C,IAAI,WAAW;GACf,IAAIC;GACJ,IAAIC;;;;AAKJ,OAAI,KAAK,SAAS,IAAI,EAAE;IACpB,MAAM,CAAC,SAAS,cAAc,KAAK,MAAM,IAAI;AAE7C,WAAO,QAAQ,MAAM;IACrB,MAAM,OAAO,QAAQ,MAAM,CAAC,MAAM,IAAI;IACtC,MAAM,UAAU,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE,EAAG,QAAQ,MAAM,GAAG;AAC5D,mBAAe,WAAW,MAAM;AAChC,kBAAc,eAAe,IAAI,OAAO,KAAK,IAAI,OAAO;AACxD,eAAW;;;;;AAMf,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;AAExB,kBAAc,IADA,KAAK,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,KAClC;;;;;GAM5B,MAAM,SAAS,KAAK,WAAW,KAAK;AAEpC,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;;;GAM5B,MAAM,OAAO,YAAY,MAAM,oCAAoC;AACnE,OAAI,OAAO;AACP,kBAAc,OAAO,GAAG,MAAM,IAAI;AAClC,cAAU,OAAO,GAAG,MAAM,IAAI,CAAC,KAAI,MAAK,EAAE,MAAM,CAAC,CAAC,OAAO,QAAQ,IAAI;;AAGzE,WAAQ,KAAK;IACT,MAAM,SAAS,MAAO,MAAO,SAAS,KAAK;IAC3C;IACA;IACA;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,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,YAAY,GAAG;EACzE,MAAM,cAAc,aAAa,gBAAgB;EACjD,MAAM,qBAAqB,YAAY,SAAS,IAAI;;;;EAIpD,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;;;;;;AC3Nb,SAAS,IAAI,OAAO,EAAE,EAAE;CACpB,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;EACH,MAAM;EACN,WAAW,SAAS;GAChB,IAAI,SAAS,kBAAkB,QAAQ,kBAAkB,KAAK,IAAI,gBAAgB,QAAQ;AAC1F,OAAI,OAAO,WAAW,SAClB,UAAS,CAAC,OAAO;AAErB,OAAI,OAAO,WAAW,SAClB,UAAS,OAAO,OAAO,OAAO;AAElC,OAAI,OAAO,SAAS,EAChB,OAAM,IAAI,MAAM,2FAA2F;AAE/G,WAAQ,QAAQ,OAAO,GAAG;;EAE9B,eAAe,gBAAgB,SAAS,SAAS;AAC7C,OAAI,CAAC,QACD,MAAK,MAAM,gFAAgF;;EAGnG,YAAY,eAAe,QAAQ;GAC/B,MAAM,cAAc,OAAK,oBAAkB;AACvC,QAAI,KACA,MAAK,MAAM;AACf,WAAO,KAAK,KAAKC,OAAKC,gBAAc,EAAE,MAAM,YAAY;;GAE5D,MAAM,MAAM,cAAc,OAAO,QAAQ,cAAc,KAAK;GAC5D,MAAM,gBAAgB,OAAO,KAAK,OAAO,CAAC,MAAM,aAAa;IACzD,MAAM,QAAQ,OAAO;AACrB,WAAO,MAAM,WAAW,MAAM,mBAAmB;KACnD;AACF,OAAI,eAAe;AACf,eAAW,KAAK,cAAc;AAC9B,QAAI,eAAe;AACf,aAAQ,MAAM,QAAQ;AACtB,aAAQ,MAAM,YAAY,OAAO;AACjC,aAAQ,MAAM,GAAG,SAAS,SAAS;MAC/B,MAAM,OAAO,KAAK,UAAU,CAAC,MAAM,CAAC,aAAa;AACjD,UAAI,SAAS,QAAQ,SAAS,aAAa,KAAK,UAAU,CAAC,WAAW,EAAE,KAAK,GACzE,YAAW,KAAK,cAAc;eAEzB,SAAS,SAAS,SAAS,WAAW,KAAK,UAAU,CAAC,WAAW,EAAE,KAAK,GAE7E,SAAQ,OAAO;OAErB;;SAIN,MAAK,MAAM,iDAAiD;;EAGvE;;;;;AC1DL,MAAMC,QAAM,QAAQ,IAAI,YAAY;AACpC,IAAI,SAASA,UAAQ,gBAAgB,mBAAmB;AACxD,IAAI,QAAQ,IAAI,SACZ,UAAS,QAAQ,IAAI;AAGzB,MAAaC,eAAwB;CACjC;CACA,OAAO,CAAC,cAAc;CACtB,QAAQ,CAAC,MAAM;CACf,QAAQ;CACR,WAAWD,UAAQ;CACnB,QAAQ,CAAC,CAAC,QAAQ,IAAI;CACtB,UAAU,CACN,kBACH;CACD,OAAO;CACP,OAAO;CACP,MAAM;EAAC;GAAE,MAAM;GAAU,IAAI;GAAQ;EAAE;EAAiB;EAAe;CACvE,KAAKA,UAAQ,gBAAgB;EACzB,UAAUA;EACV,UAAU;EACb,GAAG,EAAE;CACN,OACIA,UAAQ,iBAAiB,QAAQ,IAAI,cAAc,SAC7C;EAAC;EAAQ;EAAU;EAAO;EAAiB,GAC3C;CACV,KAAK;CACL,UAAU;CACV,cAAc;CACd,uBAAuB;CACvB,MAAO,GAAG;AACN,IAAE,KAAK,cAAc,YAAY;GAC7B,MAAM,QAAQ;IAAC;IAAuB;IAAsB;IAAmB;AAC/E,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;IACnC,MAAM,OAAO,MAAM;AACnB,QAAI,WAAWE,SAAK,KAAK,QAAQ,KAAK,CAAC,CACnC,OAAM,GAAGA,SAAK,KAAK,QAAQ,KAAK,EAAE,EAAE,WAAW,MAAM,CAAC;;IAEhE;;CAEN,SAASF,UAAQ,iBAAiB,QAAQ,IAAI,cAAc,SAAS,CACjE,IAAI;EACA,KAAK,OAAO,OAAO,EAAE,EAAE,QAAQ,KAAK;GAChC,UAAUA;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;;;;ACvCf,IAAa,SAAb,MAAa,OAAO;CAChB,AAAQ,WAA4B,EAAE;CAEtC,YAAY,AAAQG,KAAkB,AAAQC,QAAgB;EAA1C;EAA0B;;CAE9C,MAAM,QAAS;AACX,OAAK,kBAAkB;AACvB,QAAM,KAAK,wBAAwB;AACnC,SAAO,MAAM,KAAK,YAAY;;CAGlC,AAAQ,mBAAoB;AASxB,EAR4B;GACxB,IAAI,YAAY,KAAK,KAAK,KAAK,OAAO;GACtC,IAAI,YAAY,KAAK,KAAK,KAAK,OAAO;GACtC,IAAI,YAAY,KAAK,KAAK,KAAK,OAAO;GACtC,IAAI,mBAAmB,KAAK,KAAK,KAAK,OAAO;GAC7C,IAAI,aAAa,KAAK,KAAK,KAAK,OAAO;GAC1C,CAEQ,SAAQ,MAAK,KAAK,WAAW,EAAE,CAAC;;CAG7C,MAAc,yBAA0B;EACpC,MAAM,WAAW,IAAI,IAAI,YAAY,iBAAiB,CAAC,GAAG,WAAW,MAAM,GAAG;EAC9E,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,SAAS;;AAGnF,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,MAAc,aAAc;AAExB,MAAI,QAAQ,KAAK,SAAS,SAAS,IAAI,QAAQ,KAAK,SAAS,KAAK,EAAE;AAChE,SAAM,KAAK,QAAQ,OAAO;AAC1B,UAAO,eAAa,MAAM,CAAC,SAAQ,QAAO,iBAAe,MAAM,KAAK;;;EAIxE,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,uDAAuD;GAC9E,QAAQ,CAAC,YAAY,4BAA4B;GACjD,SAAS,CAAC,0BAA0B,qGAAqG;GACzI,eAAe,CAAC,wBAAwB,sCAAsC;GACjF;;;;AAKD,UACK,KAAK,SAAS,CACd,QAAQ,GAAG,WAAW,IAAI,eAAe,CACzC,YAAY,QAAQ,CACpB,cAAc,EAAE,mBAAmB,MAAM,CAAC,CAC1C,UAAU,IAAI,OAAO,WAAW,MAAM,IAAI,WAAW,MAAM,GAAG,CAAC,CAC/D,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,cAAc,IAAI,WAAW,cAAc,GAAG,CAAC,CAC/E,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,SAAM,KAAK,OAAO,SAAS;IAC7B;;;;AAKN,UAAQ,cAAc;GAClB,aAAa,QAAQ,OAAO,IAAI,KAAK,UAAU,MAAM;GACrD,kBAAkB,QAAQ,OAAO,IAAI,KAAK,SAAS,MAAM;GACzD,oBAAoB,QAAQ,OAAO,IAAI,KAAK,SAAS,MAAM;GAC3D,sBAAsB,QAAQ,OAAO,IAAI,KAAK,SAAS,MAAM;GAC7D,eAAgB,SAAS,OAAO;AAC5B,QAAI,MAAM,SAAS,EACf,QAAO,EAAE;AAGb,QAAI,CAAC,QAAQ,SAAS,YAAY,CAC9B,QAAO;IAGX,MAAM,KAAK,QAAgB,IAAI,QAAQ,mBAAmB,GAAG,CAAC,QAAQ,OAAO,GAAG;IAEhF,IAAI,QAAQ,MAAM,QAAO,MAAK,EAAE,EAAE,CAAC,WAAW,KAAK,IAAI,EAAE,EAAE,CAAC,SAAS,MAAM,CAAC;AAE5E,QAAI,MAAM,SAAS,EACf,SAAQ,CAAC,OAAO,IAAI,OAAO,UAAU,MAAM,UAAU,MAAM,CAAC,CAAC,OAAO,MAAM;IAG9E,MAAM,OAAO,MAAM,QAAO,MAAK,CAAC,EAAE,EAAE,CAAC,WAAW,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC,SAAS,MAAM,CAAC;AAE/E,QAAI,KAAK,SAAS,EACd,QAAO;IAGX,MAAM,WAAW,EAAE,QAAQ,CAAC,SAAS,YAAY,GAAG,UAAU;AAE9D,WAAO,MAAM,OAAO,OAAO,IAAI,KAAK,YAAY,UAAU,MAAM,EAAE,YAAY,WAAW,MAAM,KAAK,CAAC;;GAEzG,mBAAmB;GACtB,CAAC;;;;AAMF,UACK,QAAQ,OAAO,CACf,YAAY,sBAAsB,CAClC,OAAO,YAAY;AAChB,UAAO,QAAQ,6CAA6C;IAC9D;;;;AAKN,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,OAAO,YAAY;AAChB,cAAS,SAAS,IAAI,MAAM,EAAE,IAAI,MAAM,IAAI,qBAAqB,SAAS,QAAQ;AAClF,WAAM,KAAK,OAAO,SAAS;MAC7B;;;;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,OAAO,YAAY;AAChB,eAAS,SAASA,MAAI,MAAM,EAAEA,MAAI,MAAMA,MAAI,qBAAqB,KAAK,QAAQ;AAC9E,YAAM,KAAK,OAAO,SAAS;OAC7B;;;;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,KAAK,OAAO,SAAS;MAC7B;;;;AAKV,UAAQ,KAAK,aAAa,OAAO,GAAG,QAAQ;AACxC,QAAK,QAAQ,IAAI,MAAM,CAAC;IAC1B;AAEF,SAAO;;CAGX,MAAM,QAAS,MAAc;AACzB,MAAI,SAAS,UAAU,SAAS,QAC5B,OAAM,MAAM;GACR,GAAGE;GACH,OAAO;GACP,SAAS,EAAE;GACd,CAAC;;CAIV,AAAQ,WAAY,KAAoB,KAAgB,OAAiB,QAAc;EACnF,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,IAAI,QAAQ,IAAI,OACV,KAAI,MAAM,EAAE,WAAW,IAAI,IAAI,MAAM,KAAK,EAAE,QAAQ,OAAO,GAAG,GAAI,CACnE,KAAK,KAAK,IAAI;AAEnB,OAAI,IAAI,YAAY,CAAC,IAAI,YACrB,UAAS,KAAK,KAAK;YACZ,IAAI,YACX,UAAS,MAAM,IAAI;GAGvB,IAAI,OAAO,IAAI,OAAO,SAAS,IAAI,YAAY,CAAC,QAAQ,IAAI,aAAa;AACzE,OAAI,IAAI,WAAW,IAAI,QAAQ,OAC3B,QAAO,KAAK,QAAQ,IAAI,WAAW,EAAE,CAAC;AAE1C,OAAI,UAAU,KAAK;SAChB;GACH,IAAI,QAAQ,IAAI,OAAO,KAAK,KAAK,IAAI;AAErC,OAAI,IAAI,YAAY,CAAC,IAAI,YACrB,UAAS,KAAK,KAAK;YACZ,IAAI,YACX,UAAS,MAAM,IAAI;GAGvB,IAAI,OAAO,IAAI,OAAO,OAAO,YAAY,CAAC,QAAQ,IAAI,aAAa;AACnE,OAAI,IAAI,WAAW,IAAI,QAAQ,OAC3B,QAAO,KAAK,QAAQ,IAAI,WAAW,EAAE,CAAC;AAE1C,OAAI,UAAU,KAAK;;OAEpB;GACH,IAAI,OAAO,IAAI;AACf,OAAI,CAAC,KACD,QAAO,IAAI,WAAW,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK;GAGzD,IAAI,MAAM,IAAI,SAAS,MAAM,YAAY;AACzC,OAAI,IAAI,WAAW,IAAI,QAAQ,OAC3B,OAAM,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;AAExC,OAAI,IAAI,aAAc,KAAI,QAAQ,IAAI,aAAa;AACnD,OAAI,YAAY,IAAI;;;CAI5B,MAAc,OAAQ,KAAc;AAEhC,QAAM,IAAI,kBAAkB,KAAK,IAAI,CAAC,oBAAoB,KAAK,SAAS;;CAG5E,aAAa,MAAO,QAAgB;AAChC,UAAQ,MAAM,IAAI,OAAO,OAAO,KAAK,OAAO,CAAC,OAAO,EAC/C,mBAAmB;AAChB,UAAO,IAAI,gCAAgC,QAAQ;AACnD,UAAO,IAAI;IACP,CAAC,OAAO,QAAQ;IAChB,CAAC,mBAAmB,CAAC,QAAQ,SAAS,CAAC;IACvC,CAAC,8BAA8B,QAAQ;IAC1C,EAAE,IAAI;IACT,CACD,WAAW,QAAQ,KAAK,CACxB,OAAM,MAAK,EAAE;;;;;;ACjV1B,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,gBAAgB;CAC9B,AAAO,gBAAgB;CAEvB,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.8.0",
3
+ "version": "11.9.0",
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
  "laravel"
52
52
  ],
53
53
  "peerDependencies": {
54
- "@h3ravel/core": "^1.15.0",
55
- "@h3ravel/support": "^0.14.0"
54
+ "@h3ravel/core": "^1.16.0",
55
+ "@h3ravel/support": "^0.14.1"
56
56
  },
57
57
  "devDependencies": {
58
58
  "typescript": "^5.9.2"
@@ -66,7 +66,7 @@
66
66
  "radashi": "^12.6.2",
67
67
  "resolve-from": "^5.0.0",
68
68
  "tsx": "^4.20.5",
69
- "@h3ravel/shared": "^0.22.1"
69
+ "@h3ravel/shared": "^0.22.2"
70
70
  },
71
71
  "scripts": {
72
72
  "barrelx": "barrelsby --directory src --delete --singleQuotes",
@@ -1 +0,0 @@
1
- import{FileSystem as e,mainTsconfig as t}from"@h3ravel/shared";import{execa as n}from"execa";import r from"preferred-pm";import{mkdir as i,writeFile as a}from"node:fs/promises";import o,{join as s}from"node:path";var c=class{async spawn(c=`.h3ravel/serve`){let l=(await r(process.cwd()))?.name??`npm`,u=s(process.env.DIST_DIR??c);if(await e.fileExists(u))return;await e.fileExists(o.join(u,`tsconfig.json`))||(await i(o.join(u.replace(`/serve`,``)),{recursive:!0}),await a(o.join(u.replace(`/serve`,``),`tsconfig.json`),JSON.stringify(t,null,2)));let d={EXTENDED_DEBUG:`false`,CLI_BUILD:`true`,NODE_ENV:`production`,DIST_DIR:u,LOG_LEVEL:`silent`};await n(l,[`tsdown`,`--silent`,`--config-loader`,`unconfig`,`-c`,`tsdown.default.config.ts`].filter(e=>e!==null),{stdout:`inherit`,stderr:`inherit`,cwd:s(process.cwd()),env:Object.assign({},process.env,d)})}};export{c as zero_default};