@stacksjs/cli 0.62.0 → 0.63.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
@@ -125,12 +125,13 @@ async function exec(command, options) {
125
125
  log.debug("exec:", Array.isArray(command) ? command.join(" ") : command);
126
126
  log.debug("cmd:", cmd);
127
127
  log.debug("exec options:", options);
128
+ const cwd = options?.cwd || process2.cwd();
128
129
  const proc = Bun.spawn(cmd, {
129
130
  ...options,
130
131
  stdout: options?.silent || options?.quiet ? "ignore" : options?.stdin ? options.stdin : options?.stdout || "inherit",
131
132
  stderr: options?.silent || options?.quiet ? "ignore" : options?.stderr || "inherit",
132
133
  detached: options?.background || false,
133
- cwd: options?.cwd || process2.cwd(),
134
+ cwd,
134
135
  onExit(subprocess, exitCode, signalCode, error) {
135
136
  exitHandler("spawn", subprocess, exitCode, signalCode, error);
136
137
  }
@@ -166,7 +167,7 @@ async function execSync(command, options) {
166
167
  });
167
168
  return proc.stdout.toString();
168
169
  }
169
- var exitHandler = function(type, subprocess, exitCode, signalCode, error) {
170
+ function exitHandler(type, subprocess, exitCode, signalCode, error) {
170
171
  log.debug(`exitHandler: ${type}`);
171
172
  log.debug("subprocess", subprocess);
172
173
  log.debug("exitCode", exitCode);
@@ -177,7 +178,7 @@ var exitHandler = function(type, subprocess, exitCode, signalCode, error) {
177
178
  }
178
179
  if (exitCode !== ExitCode.Success && exitCode)
179
180
  process2.exit(exitCode);
180
- };
181
+ }
181
182
 
182
183
  // src/utils.ts
183
184
  import {collect} from "@stacksjs/collections";
@@ -185,31 +186,31 @@ import * as kolorist from "kolorist";
185
186
 
186
187
  // ../../../../node_modules/consola/dist/utils.mjs
187
188
  import * as tty from "tty";
188
- var replaceClose = function(index, string, close, replace, head = string.slice(0, Math.max(0, index)) + replace, tail = string.slice(Math.max(0, index + close.length)), next = tail.indexOf(close)) {
189
+ function replaceClose(index, string, close, replace, head = string.slice(0, Math.max(0, index)) + replace, tail = string.slice(Math.max(0, index + close.length)), next = tail.indexOf(close)) {
189
190
  return head + (next < 0 ? tail : replaceClose(next, tail, close, replace));
190
- };
191
- var clearBleed = function(index, string, open, close, replace) {
191
+ }
192
+ function clearBleed(index, string, open, close, replace) {
192
193
  return index < 0 ? open + string + close : open + replaceClose(index, string, close, replace) + close;
193
- };
194
- var filterEmpty = function(open, close, replace = open, at = open.length + 1) {
194
+ }
195
+ function filterEmpty(open, close, replace = open, at = open.length + 1) {
195
196
  return (string) => string || !(string === "" || string === undefined) ? clearBleed(("" + string).indexOf(close, at), string, open, close, replace) : "";
196
- };
197
- var init = function(open, close, replace) {
197
+ }
198
+ function init(open, close, replace) {
198
199
  return filterEmpty(`\x1B[${open}m`, `\x1B[${close}m`, replace);
199
- };
200
- var createColors = function(useColor = isColorSupported) {
200
+ }
201
+ function createColors(useColor = isColorSupported) {
201
202
  return useColor ? colorDefs : Object.fromEntries(Object.keys(colorDefs).map((key) => [key, String]));
202
- };
203
- var getColor = function(color, fallback = "reset") {
203
+ }
204
+ function getColor(color, fallback = "reset") {
204
205
  return colors[color] || colors[fallback];
205
- };
206
- var colorize = function(color, text) {
206
+ }
207
+ function colorize(color, text) {
207
208
  return getColor(color)(text);
208
- };
209
- var stripAnsi = function(text) {
209
+ }
210
+ function stripAnsi(text) {
210
211
  return text.replace(new RegExp(ansiRegex, "g"), "");
211
- };
212
- var centerAlign = function(str, len, space = " ") {
212
+ }
213
+ function centerAlign(str, len, space = " ") {
213
214
  const free = len - str.length;
214
215
  if (free <= 0) {
215
216
  return str;
@@ -220,8 +221,8 @@ var centerAlign = function(str, len, space = " ") {
220
221
  _str += i < freeLeft || i >= freeLeft + str.length ? space : str[i - freeLeft];
221
222
  }
222
223
  return _str;
223
- };
224
- var rightAlign = function(str, len, space = " ") {
224
+ }
225
+ function rightAlign(str, len, space = " ") {
225
226
  const free = len - str.length;
226
227
  if (free <= 0) {
227
228
  return str;
@@ -231,15 +232,15 @@ var rightAlign = function(str, len, space = " ") {
231
232
  _str += i < free ? space : str[i - free];
232
233
  }
233
234
  return _str;
234
- };
235
- var leftAlign = function(str, len, space = " ") {
235
+ }
236
+ function leftAlign(str, len, space = " ") {
236
237
  let _str = "";
237
238
  for (let i = 0;i < len; i++) {
238
239
  _str += i < str.length ? str[i] : space;
239
240
  }
240
241
  return _str;
241
- };
242
- var align = function(alignment, str, len, space = " ") {
242
+ }
243
+ function align(alignment, str, len, space = " ") {
243
244
  switch (alignment) {
244
245
  case "left": {
245
246
  return leftAlign(str, len, space);
@@ -254,8 +255,8 @@ var align = function(alignment, str, len, space = " ") {
254
255
  return str;
255
256
  }
256
257
  }
257
- };
258
- var box = function(text, _opts = {}) {
258
+ }
259
+ function box(text, _opts = {}) {
259
260
  const opts = {
260
261
  ..._opts,
261
262
  style: {
@@ -305,7 +306,7 @@ var box = function(text, _opts = {}) {
305
306
  boxLines.push("".repeat(opts.style.marginBottom));
306
307
  }
307
308
  return boxLines.join("\n");
308
- };
309
+ }
309
310
  var {
310
311
  env = {},
311
312
  argv = [],
@@ -570,7 +571,7 @@ import {log as log2} from "@stacksjs/logging";
570
571
  import {ExitCode as ExitCode3} from "@stacksjs/types";
571
572
  import {bgCyan as bgCyan2, bold as bold2, cyan as cyan2, dim as dim2, gray as gray2, green as green2, italic as italic2} from "kolorist";
572
573
  // package.json
573
- var version = "0.62.0";
574
+ var version = "0.63.0";
574
575
 
575
576
  // src/helpers.ts
576
577
  async function intro(command2, options) {
@@ -622,15 +623,15 @@ function outro(text, options, error) {
622
623
  // src/parse.ts
623
624
  import process3 from "process";
624
625
  import {log as log3} from "@stacksjs/logging";
625
- var isLongOption = function(arg) {
626
+ function isLongOption(arg) {
626
627
  if (!arg)
627
628
  return false;
628
629
  return arg.startsWith("--");
629
- };
630
- var isShortOption = function(arg) {
630
+ }
631
+ function isShortOption(arg) {
631
632
  return arg.startsWith("-") && !isLongOption(arg);
632
- };
633
- var parseValue = function(value) {
633
+ }
634
+ function parseValue(value) {
634
635
  if (value === "true")
635
636
  return true;
636
637
  if (value === "false")
@@ -639,8 +640,8 @@ var parseValue = function(value) {
639
640
  if (!Number.isNaN(numberValue))
640
641
  return numberValue;
641
642
  return value.replace(/"/g, "");
642
- };
643
- var parseLongOption = function(arg, argv2, index, options) {
643
+ }
644
+ function parseLongOption(arg, argv2, index, options) {
644
645
  const [key, value] = arg.slice(2).split("=");
645
646
  if (value !== undefined) {
646
647
  options[key] = parseValue(value);
@@ -651,8 +652,8 @@ var parseLongOption = function(arg, argv2, index, options) {
651
652
  options[key] = true;
652
653
  }
653
654
  return index;
654
- };
655
- var parseShortOption = function(arg, argv2, index, options) {
655
+ }
656
+ function parseShortOption(arg, argv2, index, options) {
656
657
  const [key, value] = arg.slice(1).split("=");
657
658
  if (key === undefined)
658
659
  return index;
@@ -670,7 +671,7 @@ var parseShortOption = function(arg, argv2, index, options) {
670
671
  }
671
672
  }
672
673
  return index;
673
- };
674
+ }
674
675
  function parseArgv(argv2) {
675
676
  if (argv2 === undefined)
676
677
  argv2 = process3.argv.slice(2);
@@ -826,3 +827,6 @@ export {
826
827
  Command,
827
828
  CAC
828
829
  };
830
+
831
+ //# debugId=1F7BAC6072E4FA6E64756E2164756E21
832
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,20 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/actions/install.ts", "../src/cli.ts", "../src/run.ts", "../src/console.ts", "../src/exec.ts", "../src/utils.ts", "../../../../../node_modules/consola/dist/utils.mjs", "../src/command.ts", "../src/helpers.ts", "../src/parse.ts", "../src/spinner.ts"],
4
+ "sourcesContent": [
5
+ "import { installPackage as installPkg } from '@antfu/install-pkg'\nimport type { ExecaReturnValue } from 'execa'\n\ninterface InstallPackageOptions {\n cwd?: string\n dev?: boolean\n silent?: boolean\n packageManager?: string\n packageManagerVersion?: string\n preferOffline?: boolean\n additionalArgs?: string[]\n}\n\n/**\n * Install an npm package.\n *\n * @param name - The package name to install.\n * @param options - The options to pass to the install.The options to pass to the install.\n * @returns The result of the install.\n */\nexport async function installPackage(name: string, options?: InstallPackageOptions) {\n if (options) return await installPkg(name, options)\n\n return await installPkg(name, { silent: true })\n}\n\n/**\n * Install a Stack into your project.\n *\n * @param name - The Stack name to install.\n * @param options - The options to pass to the install.\n * @returns The result of the install.\n */\nexport async function installStack(name: string, options?: InstallPackageOptions) {\n if (options) return await installPkg(`@stacksjs/${name}`, options)\n\n return await installPkg(`@stacksjs/${name}`, { silent: true })\n}\n",
6
+ "// import type { CliOptions } from '@stacksjs/types'\nimport { CAC } from 'cac'\n\nexport interface ParsedArgv {\n args: ReadonlyArray<string>\n options: {\n [k: string]: any\n }\n}\n\ninterface CliOptions {\n name?: string\n // version: string\n // description: string\n}\n\nexport function cli(name?: string | CliOptions, options?: CliOptions) {\n if (typeof name === 'object') {\n options = name\n name = options.name\n }\n\n return new CAC(name || 'buddy')\n}\n\nexport { CAC }\n\n// export function command(name: string, description: string, options?: CliOptions) {\n// return cli(options).command(name, description)\n// }\n",
7
+ "import type { Result } from '@stacksjs/error-handling'\nimport type { CliOptions, CommandError, Subprocess } from '@stacksjs/types'\nimport { ExitCode } from '@stacksjs/types'\nimport { log } from './console'\nimport { exec, execSync } from './exec'\nimport { italic } from './utils'\n\n/**\n * Run a command.\n *\n * @param command The command to run.\n * @param options The options to pass to the command.\n * @returns The result of the command.\n * @example\n * ```ts\n * const result = await runCommand('ls')\n *\n * if (result.isErr())\n * console.error(result.error)\n * else\n * console.log(result)\n * ```\n * @example\n * ```ts\n * const result = await runCommand('ls', { cwd: '/home' })\n *\n * if (result.isErr())\n * console.error(result.error)\n * else\n * console.log(result)\n * ```\n */\nexport async function runCommand(command: string, options?: CliOptions): Promise<Result<Subprocess, CommandError>> {\n log.debug('runCommand:', command)\n log.debug('options:', options)\n\n return await exec(command, options)\n}\n\nexport async function runProcess(command: string, options?: CliOptions): Promise<Result<Subprocess, CommandError>> {\n log.debug('runProcess:', italic(command))\n log.debug('runProcess Options:', options)\n\n return await exec(command, options)\n}\n\n/**\n * Run a command.\n *\n * @param command The command to run.\n * @param options The options to pass to the command.\n * @returns The result of the command.\n * @example\n * ```ts\n * const result = runCommandSync('ls')\n *\n * if (result.isErr())\n * console.error(result.error)\n * else\n * console.log(result)\n * ```\n * @example\n * ```ts\n * const result = runCommandSync('ls', { cwd: '/home' })\n *\n * if (result.isErr())\n * console.error(result.error)\n * else\n * console.log(result)\n * ```\n */\nexport async function runCommandSync(command: string, options?: CliOptions): Promise<string> {\n log.debug('runCommandSync:', italic(command))\n log.debug('runCommandSync Options:', options)\n\n const result = await execSync(command, options)\n\n // if (result.isErr())\n // return err(result.error)\n\n // return ok(result.value)\n\n return result\n}\n\n/**\n * Run many commands.\n *\n * @param commands The command to run.\n * @param options The options to pass to the command.\n * @returns The result of the command.\n */\nexport async function runCommands(commands: string[], options?: CliOptions) {\n const results = []\n\n for (const command of commands) {\n const result = await runCommand(command, options)\n\n if (result.isErr()) {\n log.error(result.error)\n process.exit(ExitCode.FatalError)\n }\n\n results.push(result)\n }\n\n return results\n}\n",
8
+ "import { log, logger } from '@stacksjs/logging'\nimport prompts from 'prompts'\n\nexport class Prompt {\n private required: boolean\n\n constructor() {\n this.required = false\n }\n\n require() {\n this.required = true\n return this\n }\n\n isRequired() {\n return this.required\n }\n\n async select(message: any, options: any) {\n if (this.isRequired())\n return logger.prompt(message, {\n ...options,\n type: 'select',\n required: true,\n })\n\n return logger.prompt(message, { ...options, type: 'select' })\n }\n\n async checkbox(message: any, options: any) {\n if (this.isRequired())\n return logger.prompt(message, {\n ...options,\n type: 'multiselect',\n required: true,\n })\n\n return logger.prompt(message, { ...options, type: 'multiselect' })\n }\n\n async confirm(message: any, options?: any) {\n if (this.isRequired())\n return logger.prompt(message, {\n ...options,\n type: 'confirm',\n required: true,\n })\n\n return logger.prompt(message, { ...options, type: 'confirm' })\n }\n\n async input(message: any, options: any) {\n if (this.isRequired())\n return logger.prompt(message, {\n ...options,\n type: 'text',\n required: true,\n })\n\n return logger.prompt(message, { ...options, type: 'text' })\n }\n\n async password(message: any, options: any) {\n if (this.isRequired())\n return logger.prompt(message, {\n ...options,\n type: 'password',\n required: true,\n })\n\n return logger.prompt(message, { ...options, type: 'password' })\n }\n\n async number(message: any, options: any) {\n if (this.isRequired())\n return logger.prompt(message, {\n ...options,\n type: 'numeral',\n required: true,\n })\n\n return logger.prompt(message, { ...options, type: 'numeral' })\n }\n\n async multiselect(message: any, options: any) {\n if (this.isRequired())\n return logger.prompt(message, {\n ...options,\n type: 'multiselect',\n required: true,\n })\n\n return logger.prompt(message, { ...options, type: 'multiselect' })\n }\n\n async autocomplete(message: any, options: any) {\n if (this.isRequired())\n return logger.prompt(message, {\n ...options,\n type: 'autocomplete',\n required: true,\n })\n\n return logger.prompt(message, { ...options, type: 'autocomplete' })\n }\n}\n\nexport { prompts, logger, log }\n\nexport const prompt = () => new Prompt()\n",
9
+ "import process from 'node:process'\nimport { type Result, err, handleError, ok } from '@stacksjs/error-handling'\nimport type { CliOptions, Subprocess } from '@stacksjs/types'\nimport { ExitCode } from '@stacksjs/types'\nimport { log } from './'\n\n/**\n * Execute a command.\n *\n * @param command The command to execute.\n * @param options The options to pass to the command.\n * @returns The result of the command.\n * @example\n * ```ts\n * const result = await exec('ls')\n *\n * if (result.isErr())\n * console.error(result.error)\n * else\n * console.log(result)\n * ```\n * @example\n * ```ts\n * const result = await exec('ls', { cwd: '/home' })\n * ```\n */\nexport async function exec(command: string | string[], options?: CliOptions): Promise<Result<Subprocess, Error>> {\n const cmd = Array.isArray(command) ? command : command.match(/(?:[^\\s\"]+|\"[^\"]*\")+/g)\n\n if (!cmd) return err(handleError(`Failed to parse command: ${cmd}`, options))\n\n log.debug('exec:', Array.isArray(command) ? command.join(' ') : command)\n log.debug('cmd:', cmd)\n log.debug('exec options:', options)\n const cwd = options?.cwd || process.cwd()\n\n const proc = Bun.spawn(cmd, {\n ...options,\n stdout:\n options?.silent || options?.quiet ? 'ignore' : options?.stdin ? options.stdin : options?.stdout || 'inherit',\n stderr: options?.silent || options?.quiet ? 'ignore' : options?.stderr || 'inherit',\n detached: options?.background || false,\n cwd,\n // env: { ...e, ...options?.env },\n onExit(subprocess, exitCode, signalCode, error) {\n exitHandler('spawn', subprocess, exitCode, signalCode, error)\n },\n })\n\n // Check if we need to write to stdin\n // this is currently only used for `buddy aws:configure`\n if (options?.stdin === 'pipe' && options.input) {\n if (proc.stdin) {\n // @ts-expect-error - this works even though there is a type error\n proc.stdin.write(options.input)\n // @ts-expect-error - this works even though there is a type error\n proc.stdin.end()\n }\n }\n\n const exited = await proc.exited\n if (exited === ExitCode.Success) return ok(proc)\n\n return err(handleError(`Failed to execute command: ${cmd.join(' ')}`))\n}\n\n/**\n * Execute a command and return result.\n *\n * @param command The command to execute.\n * @returns The result of the command.\n * @example\n * ```ts\n * const output = execSync('ls')\n *\n * console.log(output)\n * ```\n * @example\n * ```ts\n * const output = execSync('ls', { cwd: '/home' })\n * ```\n */\nexport async function execSync(command: string | string[], options?: CliOptions): Promise<string> {\n log.debug('Running ExecSync:', command)\n log.debug('ExecSync Options:', options)\n\n const cmd = Array.isArray(command) ? command : command.match(/(?:[^\\s\"]+|\"[^\"]*\")+/g)\n\n if (!cmd) {\n log.error(`Failed to parse command: ${cmd}`, options)\n process.exit(ExitCode.FatalError)\n }\n\n const proc = Bun.spawnSync(cmd, {\n ...options,\n stdin: options?.stdin ?? 'inherit',\n stdout: options?.stdout ?? 'pipe',\n stderr: options?.stderr ?? 'inherit',\n cwd: options?.cwd ?? process.cwd(),\n // env: { ...Bun.env, ...options?.env },\n onExit(subprocess, exitCode, signalCode, error) {\n exitHandler('spawnSync', subprocess, exitCode, signalCode, error)\n },\n })\n\n return proc.stdout.toString()\n}\n\n// @ts-expect-error - missing types is okay here but can be improved later on\nfunction exitHandler(type: 'spawn' | 'spawnSync', subprocess, exitCode, signalCode, error) {\n log.debug(`exitHandler: ${type}`)\n log.debug('subprocess', subprocess)\n log.debug('exitCode', exitCode)\n log.debug('signalCode', signalCode)\n\n if (error) {\n log.error(error)\n process.exit(ExitCode.FatalError)\n }\n\n if (exitCode !== ExitCode.Success && exitCode) process.exit(exitCode)\n}\n",
10
+ "import { collect } from '@stacksjs/collections'\n\nexport * as kolorist from 'kolorist'\n\nexport {\n stripAnsi,\n centerAlign,\n rightAlign,\n leftAlign,\n align,\n box,\n colors,\n getColor,\n colorize,\n} from 'consola/utils'\n\nexport {\n ansi256Bg,\n bgBlack,\n bgBlue,\n bgCyan,\n bgGray,\n bgGreen,\n bgLightBlue,\n bgLightCyan,\n bgLightGray,\n bgLightGreen,\n bgLightMagenta,\n bgLightRed,\n bgLightYellow,\n bgMagenta,\n bgRed,\n bgWhite,\n bgYellow,\n black,\n blue,\n bold,\n cyan,\n dim,\n gray,\n green,\n hidden,\n inverse,\n italic,\n lightBlue,\n lightCyan,\n lightGray,\n lightGreen,\n lightMagenta,\n lightRed,\n lightYellow,\n link,\n magenta,\n red,\n reset,\n strikethrough,\n underline,\n white,\n yellow,\n ansi256,\n trueColor,\n trueColorBg,\n stripColors,\n} from 'kolorist'\n\nexport const quotes = collect([\n // could be queried from any API or database\n 'The best way to get started is to quit talking and begin doing.',\n 'The pessimist sees difficulty in every opportunity. The optimist sees opportunity in every difficulty.',\n 'Don’t let yesterday take up too much of today.',\n 'You learn more from failure than from success. Don’t let it stop you. Failure builds character.',\n 'It’s not whether you get knocked down, it’s whether you get up.',\n 'If you are working on something that you really care about, you don’t have to be pushed. The vision pulls you.',\n 'People who are crazy enough to think they can change the world, are the ones who do.',\n 'Failure will never overtake me if my determination to succeed is strong enough.',\n 'Entrepreneurs are great at dealing with uncertainty and also very good at minimizing risk. That’s the classic entrepreneur.',\n 'We may encounter many defeats but we must not be defeated.',\n 'Knowing is not enough; we must apply. Wishing is not enough; we must do.',\n 'Imagine your life is perfect in every respect; what would it look like?',\n 'We generate fears while we sit. We overcome them by action.',\n 'Whether you think you can or think you can’t, you’re right.',\n 'Security is mostly a superstition. Life is either a daring adventure or nothing.',\n])\n",
11
+ "import * as tty from 'node:tty';\n\nconst {\n env = {},\n argv = [],\n platform = \"\"\n} = typeof process === \"undefined\" ? {} : process;\nconst isDisabled = \"NO_COLOR\" in env || argv.includes(\"--no-color\");\nconst isForced = \"FORCE_COLOR\" in env || argv.includes(\"--color\");\nconst isWindows = platform === \"win32\";\nconst isDumbTerminal = env.TERM === \"dumb\";\nconst isCompatibleTerminal = tty && tty.isatty && tty.isatty(1) && env.TERM && !isDumbTerminal;\nconst isCI = \"CI\" in env && (\"GITHUB_ACTIONS\" in env || \"GITLAB_CI\" in env || \"CIRCLECI\" in env);\nconst isColorSupported = !isDisabled && (isForced || isWindows && !isDumbTerminal || isCompatibleTerminal || isCI);\nfunction replaceClose(index, string, close, replace, head = string.slice(0, Math.max(0, index)) + replace, tail = string.slice(Math.max(0, index + close.length)), next = tail.indexOf(close)) {\n return head + (next < 0 ? tail : replaceClose(next, tail, close, replace));\n}\nfunction clearBleed(index, string, open, close, replace) {\n return index < 0 ? open + string + close : open + replaceClose(index, string, close, replace) + close;\n}\nfunction filterEmpty(open, close, replace = open, at = open.length + 1) {\n return (string) => string || !(string === \"\" || string === void 0) ? clearBleed(\n (\"\" + string).indexOf(close, at),\n string,\n open,\n close,\n replace\n ) : \"\";\n}\nfunction init(open, close, replace) {\n return filterEmpty(`\\x1B[${open}m`, `\\x1B[${close}m`, replace);\n}\nconst colorDefs = {\n reset: init(0, 0),\n bold: init(1, 22, \"\\x1B[22m\\x1B[1m\"),\n dim: init(2, 22, \"\\x1B[22m\\x1B[2m\"),\n italic: init(3, 23),\n underline: init(4, 24),\n inverse: init(7, 27),\n hidden: init(8, 28),\n strikethrough: init(9, 29),\n black: init(30, 39),\n red: init(31, 39),\n green: init(32, 39),\n yellow: init(33, 39),\n blue: init(34, 39),\n magenta: init(35, 39),\n cyan: init(36, 39),\n white: init(37, 39),\n gray: init(90, 39),\n bgBlack: init(40, 49),\n bgRed: init(41, 49),\n bgGreen: init(42, 49),\n bgYellow: init(43, 49),\n bgBlue: init(44, 49),\n bgMagenta: init(45, 49),\n bgCyan: init(46, 49),\n bgWhite: init(47, 49),\n blackBright: init(90, 39),\n redBright: init(91, 39),\n greenBright: init(92, 39),\n yellowBright: init(93, 39),\n blueBright: init(94, 39),\n magentaBright: init(95, 39),\n cyanBright: init(96, 39),\n whiteBright: init(97, 39),\n bgBlackBright: init(100, 49),\n bgRedBright: init(101, 49),\n bgGreenBright: init(102, 49),\n bgYellowBright: init(103, 49),\n bgBlueBright: init(104, 49),\n bgMagentaBright: init(105, 49),\n bgCyanBright: init(106, 49),\n bgWhiteBright: init(107, 49)\n};\nfunction createColors(useColor = isColorSupported) {\n return useColor ? colorDefs : Object.fromEntries(Object.keys(colorDefs).map((key) => [key, String]));\n}\nconst colors = createColors();\nfunction getColor(color, fallback = \"reset\") {\n return colors[color] || colors[fallback];\n}\nfunction colorize(color, text) {\n return getColor(color)(text);\n}\n\nconst ansiRegex = [\n \"[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)\",\n \"(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))\"\n].join(\"|\");\nfunction stripAnsi(text) {\n return text.replace(new RegExp(ansiRegex, \"g\"), \"\");\n}\nfunction centerAlign(str, len, space = \" \") {\n const free = len - str.length;\n if (free <= 0) {\n return str;\n }\n const freeLeft = Math.floor(free / 2);\n let _str = \"\";\n for (let i = 0; i < len; i++) {\n _str += i < freeLeft || i >= freeLeft + str.length ? space : str[i - freeLeft];\n }\n return _str;\n}\nfunction rightAlign(str, len, space = \" \") {\n const free = len - str.length;\n if (free <= 0) {\n return str;\n }\n let _str = \"\";\n for (let i = 0; i < len; i++) {\n _str += i < free ? space : str[i - free];\n }\n return _str;\n}\nfunction leftAlign(str, len, space = \" \") {\n let _str = \"\";\n for (let i = 0; i < len; i++) {\n _str += i < str.length ? str[i] : space;\n }\n return _str;\n}\nfunction align(alignment, str, len, space = \" \") {\n switch (alignment) {\n case \"left\": {\n return leftAlign(str, len, space);\n }\n case \"right\": {\n return rightAlign(str, len, space);\n }\n case \"center\": {\n return centerAlign(str, len, space);\n }\n default: {\n return str;\n }\n }\n}\n\nconst boxStylePresets = {\n solid: {\n tl: \"\\u250C\",\n tr: \"\\u2510\",\n bl: \"\\u2514\",\n br: \"\\u2518\",\n h: \"\\u2500\",\n v: \"\\u2502\"\n },\n double: {\n tl: \"\\u2554\",\n tr: \"\\u2557\",\n bl: \"\\u255A\",\n br: \"\\u255D\",\n h: \"\\u2550\",\n v: \"\\u2551\"\n },\n doubleSingle: {\n tl: \"\\u2553\",\n tr: \"\\u2556\",\n bl: \"\\u2559\",\n br: \"\\u255C\",\n h: \"\\u2500\",\n v: \"\\u2551\"\n },\n doubleSingleRounded: {\n tl: \"\\u256D\",\n tr: \"\\u256E\",\n bl: \"\\u2570\",\n br: \"\\u256F\",\n h: \"\\u2500\",\n v: \"\\u2551\"\n },\n singleThick: {\n tl: \"\\u250F\",\n tr: \"\\u2513\",\n bl: \"\\u2517\",\n br: \"\\u251B\",\n h: \"\\u2501\",\n v: \"\\u2503\"\n },\n singleDouble: {\n tl: \"\\u2552\",\n tr: \"\\u2555\",\n bl: \"\\u2558\",\n br: \"\\u255B\",\n h: \"\\u2550\",\n v: \"\\u2502\"\n },\n singleDoubleRounded: {\n tl: \"\\u256D\",\n tr: \"\\u256E\",\n bl: \"\\u2570\",\n br: \"\\u256F\",\n h: \"\\u2550\",\n v: \"\\u2502\"\n },\n rounded: {\n tl: \"\\u256D\",\n tr: \"\\u256E\",\n bl: \"\\u2570\",\n br: \"\\u256F\",\n h: \"\\u2500\",\n v: \"\\u2502\"\n }\n};\nconst defaultStyle = {\n borderColor: \"white\",\n borderStyle: \"rounded\",\n valign: \"center\",\n padding: 2,\n marginLeft: 1,\n marginTop: 1,\n marginBottom: 1\n};\nfunction box(text, _opts = {}) {\n const opts = {\n ..._opts,\n style: {\n ...defaultStyle,\n ..._opts.style\n }\n };\n const textLines = text.split(\"\\n\");\n const boxLines = [];\n const _color = getColor(opts.style.borderColor);\n const borderStyle = {\n ...typeof opts.style.borderStyle === \"string\" ? boxStylePresets[opts.style.borderStyle] || boxStylePresets.solid : opts.style.borderStyle\n };\n if (_color) {\n for (const key in borderStyle) {\n borderStyle[key] = _color(\n borderStyle[key]\n );\n }\n }\n const paddingOffset = opts.style.padding % 2 === 0 ? opts.style.padding : opts.style.padding + 1;\n const height = textLines.length + paddingOffset;\n const width = Math.max(...textLines.map((line) => line.length)) + paddingOffset;\n const widthOffset = width + paddingOffset;\n const leftSpace = opts.style.marginLeft > 0 ? \" \".repeat(opts.style.marginLeft) : \"\";\n if (opts.style.marginTop > 0) {\n boxLines.push(\"\".repeat(opts.style.marginTop));\n }\n if (opts.title) {\n const left = borderStyle.h.repeat(\n Math.floor((width - stripAnsi(opts.title).length) / 2)\n );\n const right = borderStyle.h.repeat(\n width - stripAnsi(opts.title).length - stripAnsi(left).length + paddingOffset\n );\n boxLines.push(\n `${leftSpace}${borderStyle.tl}${left}${opts.title}${right}${borderStyle.tr}`\n );\n } else {\n boxLines.push(\n `${leftSpace}${borderStyle.tl}${borderStyle.h.repeat(widthOffset)}${borderStyle.tr}`\n );\n }\n const valignOffset = opts.style.valign === \"center\" ? Math.floor((height - textLines.length) / 2) : opts.style.valign === \"top\" ? height - textLines.length - paddingOffset : height - textLines.length;\n for (let i = 0; i < height; i++) {\n if (i < valignOffset || i >= valignOffset + textLines.length) {\n boxLines.push(\n `${leftSpace}${borderStyle.v}${\" \".repeat(widthOffset)}${borderStyle.v}`\n );\n } else {\n const line = textLines[i - valignOffset];\n const left = \" \".repeat(paddingOffset);\n const right = \" \".repeat(width - stripAnsi(line).length);\n boxLines.push(\n `${leftSpace}${borderStyle.v}${left}${line}${right}${borderStyle.v}`\n );\n }\n }\n boxLines.push(\n `${leftSpace}${borderStyle.bl}${borderStyle.h.repeat(widthOffset)}${borderStyle.br}`\n );\n if (opts.style.marginBottom > 0) {\n boxLines.push(\"\".repeat(opts.style.marginBottom));\n }\n return boxLines.join(\"\\n\");\n}\n\nexport { align, box, centerAlign, colorize, colors, getColor, leftAlign, rightAlign, stripAnsi };\n",
12
+ "import type { CliOptions } from '@stacksjs/types'\nimport { runCommand } from './run'\n\ntype CommandOptionTuple = [string, string, { default: boolean }]\ninterface CommandOptionObject {\n name: string\n description: string\n default: boolean | string\n}\ntype CommandOptions = CommandOptionTuple | CommandOptionObject[]\ninterface Options {\n name: string\n description: string\n active: boolean\n options: CommandOptions\n run: (options?: CliOptions) => Promise<any>\n onFail: (error: Error) => void\n onSuccess: () => void\n}\n\nexport class Command {\n name: Options['name']\n description: Options['description']\n options: Options['options']\n run: Options['run']\n onFail: Options['onFail']\n onSuccess: Options['onSuccess']\n\n constructor({ name, description, options, run, onFail, onSuccess }: Options) {\n this.name = name\n this.description = description\n this.options = options\n this.run = run\n this.onFail = onFail\n this.onSuccess = onSuccess\n }\n}\n\nexport const command = {\n run: async (command: string, options?: CliOptions) => {\n return await runCommand(command, options)\n },\n\n runSync: async (command: string, options?: CliOptions) => {\n return await runCommand(command, options)\n },\n}\n",
13
+ "import { handleError } from '@stacksjs/error-handling'\nimport { log } from '@stacksjs/logging'\nimport type { IntroOptions, OutroOptions } from '@stacksjs/types'\nimport { ExitCode } from '@stacksjs/types'\nimport { bgCyan, bold, cyan, dim, gray, green, italic } from 'kolorist'\nimport { version } from '../package.json'\n\n/**\n * Prints the intro message.\n */\nexport async function intro(command: string, options?: IntroOptions): Promise<number> {\n return new Promise((resolve) => {\n if (options?.quiet === false) {\n console.log()\n console.log(cyan(bold('Stacks CLI')) + dim(` v${version}`))\n console.log()\n }\n\n log.info(`Running ${bgCyan(italic(bold(` ${command} `)))}`)\n\n if (options?.showPerformance === false || options?.quiet) return resolve(0)\n\n return resolve(performance.now())\n })\n}\n\n/**\n * Prints the outro message.\n */\nexport function outro(text: string, options?: OutroOptions, error?: Error | string) {\n const opts = {\n type: 'success',\n useSeconds: true,\n ...options,\n }\n\n opts.message = options?.message || text\n\n return new Promise((resolve) => {\n if (error) return handleError(error)\n\n if (opts?.startTime) {\n let time = performance.now() - opts.startTime\n\n if (opts.useSeconds) {\n time = time / 1000\n time = Math.round(time * 100) / 100 // https://stackoverflow.com/a/11832950/7811162\n }\n\n if (opts.quiet === true) return resolve(ExitCode.Success)\n\n if (error) log.error(`[${time.toFixed(2)}${opts.useSeconds ? 's' : 'ms'}] Failed`)\n else if (opts.type === 'info')\n log.info(`${dim(gray(`[${time.toFixed(2)}${opts.useSeconds ? 's' : 'ms'}]`))} ${opts.message ?? 'Complete'}`)\n else\n log.success(\n `${dim(gray(bold(`[${time.toFixed(2)}${opts.useSeconds ? 's' : 'ms'}]`)))} ${bold(\n green(opts.message ?? 'Complete'),\n )}`,\n )\n } else {\n if (opts?.type === 'info') log.info(text)\n // the following condition triggers in the case of \"Cleaned up\" messages\n else if (opts?.type === 'success' && opts?.quiet !== true) log.success(text)\n }\n\n return resolve(ExitCode.Success)\n })\n}\n",
14
+ "import process from 'node:process'\nimport { log } from '@stacksjs/logging'\n\ninterface ParsedArgv {\n args: string[]\n options: {\n [k: string]: string | boolean | number\n }\n}\n\nfunction isLongOption(arg?: string): boolean {\n if (!arg) return false\n\n return arg.startsWith('--')\n}\n\nfunction isShortOption(arg: string): boolean {\n return arg.startsWith('-') && !isLongOption(arg)\n}\n\nfunction parseValue(value: string): string | boolean | number {\n if (value === 'true') return true\n\n if (value === 'false') return false\n\n const numberValue = Number.parseFloat(value)\n if (!Number.isNaN(numberValue)) return numberValue\n\n return value.replace(/\"/g, '')\n}\n\nfunction parseLongOption(\n arg: string,\n argv: string[],\n index: number,\n options: { [k: string]: string | boolean | number },\n): number {\n const [key, value] = arg.slice(2).split('=')\n if (value !== undefined) {\n options[key as string] = parseValue(value)\n } else if (index + 1 < argv.length && !argv[index + 1]?.startsWith('-')) {\n options[key as string] = argv[index + 1] as string\n index++\n } else {\n options[key as string] = true\n }\n return index\n}\n\nfunction parseShortOption(\n arg: string,\n argv: string[],\n index: number,\n options: { [k: string]: string | boolean | number },\n): number {\n const [key, value] = arg.slice(1).split('=')\n\n // Check if key is undefined and handle it\n if (key === undefined) return index\n\n if (value !== undefined && key !== undefined) {\n for (let j = 0; j < key.length; j++) options[key[j] as string] = parseValue(value)\n } else {\n for (let j = 0; j < key.length; j++) {\n if (index + 1 < argv.length && j === key.length - 1 && !argv[index + 1]?.startsWith('-')) {\n options[key[j] as string] = parseValue(argv[index + 1] as string)\n index++\n } else {\n options[key[j] as string] = true\n }\n }\n }\n\n return index\n}\n\nexport function parseArgv(argv?: string[]): ParsedArgv {\n if (argv === undefined) argv = process.argv.slice(2)\n\n const args: string[] = []\n const options: { [k: string]: string | boolean | number } = {}\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]\n if (!arg) continue\n if (isLongOption(arg)) i = parseLongOption(arg, argv, i, options)\n else if (isShortOption(arg)) i = parseShortOption(arg, argv, i, options)\n else args.push(arg)\n }\n\n return { args, options }\n}\n\nexport function parseArgs(argv?: string[]): string[] {\n if (argv === undefined) argv = process.argv.slice(2)\n\n return parseArgv(argv).args\n}\n\ninterface CliOptions {\n dryRun?: boolean\n quiet?: boolean\n verbose?: boolean\n [k: string]: string | boolean | number | undefined\n}\n\nexport function parseOptions(options?: CliOptions): CliOptions {\n options = options || {}\n const args = process.argv.slice(2)\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i]\n if (arg?.startsWith('--')) {\n const key = arg.substring(2) // remove the --\n const camelCaseKey = key.replace(\n /-([a-z])/gi,\n (g) => (g[1] ? g[1].toUpperCase() : ''), // convert kebab-case to camelCase\n )\n\n if (i + 1 < args.length) {\n // if the next arg exists\n if (args[i + 1] === 'true' || args[i + 1] === 'false') {\n // if the next arg is a boolean\n options[camelCaseKey] = args[i + 1] === 'true' // set the value to the boolean\n i++\n } else {\n options[camelCaseKey] = args[i + 1]\n i++\n }\n } else {\n options[camelCaseKey] = true\n }\n }\n }\n\n // if options has no keys, return undefined, e.g. `buddy release`\n if (Object.keys(options).length === 0) return { dryRun: false, quiet: false, verbose: false }\n\n // convert the string 'true' or 'false' to a boolean\n Object.keys(options).forEach((key) => {\n if (!options) return { dryRun: false, quiet: false, verbose: false }\n\n const value = options[key]\n\n if (value === 'true' || value === 'false') options[key] = value === 'true'\n })\n\n return options\n}\n// interface BuddyOptions {\n// dryRun?: boolean\n// verbose?: boolean\n// }\nexport function buddyOptions(options?: any): string {\n if (!options) {\n options = process.argv.slice(2)\n options = Array.from(new Set(options))\n // delete the 0 element if it does not start with a -\n // e.g. is used when buddy changelog --dry-run is used\n if (options[0] && !options[0].startsWith('-')) options.shift()\n }\n\n if (options?.verbose) {\n log.debug('process.argv', process.argv)\n log.debug('process.argv.slice(2)', process.argv.slice(2))\n log.debug('options inside buddyOptions', options)\n }\n\n return options.join(' ')\n}\n",
15
+ "import ora from 'ora'\n\nexport const spinner = ora\n"
16
+ ],
17
+ "mappings": ";;AAAA,0BAAS;AAoBT,eAAsB,cAAc,CAAC,MAAc,SAAiC;AAClF,MAAI;AAAS,WAAO,MAAM,WAAW,MAAM,OAAO;AAElD,SAAO,MAAM,WAAW,MAAM,EAAE,QAAQ,KAAK,CAAC;AAAA;AAUhD,eAAsB,YAAY,CAAC,MAAc,SAAiC;AAChF,MAAI;AAAS,WAAO,MAAM,WAAW,aAAa,QAAQ,OAAO;AAEjE,SAAO,MAAM,WAAW,aAAa,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAAA;;ACnC/D;AAeO,SAAS,GAAG,CAAC,MAA4B,SAAsB;AACpE,aAAW,SAAS,UAAU;AAC5B,cAAU;AACV,WAAO,QAAQ;AAAA,EACjB;AAEA,SAAO,IAAI,IAAI,QAAQ,OAAO;AAAA;;ACpBhC,oBAAS;;;ACFT;AACA;AAEO;AAAA,MAAM,OAAO;AAAA,EACV;AAAA,EAER,WAAW,GAAG;AACZ,SAAK,WAAW;AAAA;AAAA,EAGlB,OAAO,GAAG;AACR,SAAK,WAAW;AAChB,WAAO;AAAA;AAAA,EAGT,UAAU,GAAG;AACX,WAAO,KAAK;AAAA;AAAA,OAGR,OAAM,CAAC,SAAc,SAAc;AACvC,QAAI,KAAK,WAAW;AAClB,aAAO,OAAO,OAAO,SAAS;AAAA,WACzB;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAEH,WAAO,OAAO,OAAO,SAAS,KAAK,SAAS,MAAM,SAAS,CAAC;AAAA;AAAA,OAGxD,SAAQ,CAAC,SAAc,SAAc;AACzC,QAAI,KAAK,WAAW;AAClB,aAAO,OAAO,OAAO,SAAS;AAAA,WACzB;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAEH,WAAO,OAAO,OAAO,SAAS,KAAK,SAAS,MAAM,cAAc,CAAC;AAAA;AAAA,OAG7D,QAAO,CAAC,SAAc,SAAe;AACzC,QAAI,KAAK,WAAW;AAClB,aAAO,OAAO,OAAO,SAAS;AAAA,WACzB;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAEH,WAAO,OAAO,OAAO,SAAS,KAAK,SAAS,MAAM,UAAU,CAAC;AAAA;AAAA,OAGzD,MAAK,CAAC,SAAc,SAAc;AACtC,QAAI,KAAK,WAAW;AAClB,aAAO,OAAO,OAAO,SAAS;AAAA,WACzB;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAEH,WAAO,OAAO,OAAO,SAAS,KAAK,SAAS,MAAM,OAAO,CAAC;AAAA;AAAA,OAGtD,SAAQ,CAAC,SAAc,SAAc;AACzC,QAAI,KAAK,WAAW;AAClB,aAAO,OAAO,OAAO,SAAS;AAAA,WACzB;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAEH,WAAO,OAAO,OAAO,SAAS,KAAK,SAAS,MAAM,WAAW,CAAC;AAAA;AAAA,OAG1D,OAAM,CAAC,SAAc,SAAc;AACvC,QAAI,KAAK,WAAW;AAClB,aAAO,OAAO,OAAO,SAAS;AAAA,WACzB;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAEH,WAAO,OAAO,OAAO,SAAS,KAAK,SAAS,MAAM,UAAU,CAAC;AAAA;AAAA,OAGzD,YAAW,CAAC,SAAc,SAAc;AAC5C,QAAI,KAAK,WAAW;AAClB,aAAO,OAAO,OAAO,SAAS;AAAA,WACzB;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAEH,WAAO,OAAO,OAAO,SAAS,KAAK,SAAS,MAAM,cAAc,CAAC;AAAA;AAAA,OAG7D,aAAY,CAAC,SAAc,SAAc;AAC7C,QAAI,KAAK,WAAW;AAClB,aAAO,OAAO,OAAO,SAAS;AAAA,WACzB;AAAA,QACH,MAAM;AAAA,QACN,UAAU;AAAA,MACZ,CAAC;AAEH,WAAO,OAAO,OAAO,SAAS,KAAK,SAAS,MAAM,eAAe,CAAC;AAAA;AAEtE;AAIO,IAAM,SAAS,MAAM,IAAI;;;AC9GhC;AACA;AAEA;AAuBA,eAAsB,IAAI,CAAC,SAA4B,SAA0D;AAC/G,QAAM,MAAM,MAAM,QAAQ,OAAO,IAAI,UAAU,QAAQ,MAAM,uBAAuB;AAEpF,OAAK;AAAK,WAAO,IAAI,YAAY,4BAA4B,OAAO,OAAO,CAAC;AAE5E,MAAI,MAAM,SAAS,MAAM,QAAQ,OAAO,IAAI,QAAQ,KAAK,GAAG,IAAI,OAAO;AACvE,MAAI,MAAM,QAAQ,GAAG;AACrB,MAAI,MAAM,iBAAiB,OAAO;AAClC,QAAM,MAAM,SAAS,OAAO,SAAQ,IAAI;AAExC,QAAM,OAAO,IAAI,MAAM,KAAK;AAAA,OACvB;AAAA,IACH,QACE,SAAS,UAAU,SAAS,QAAQ,WAAW,SAAS,QAAQ,QAAQ,QAAQ,SAAS,UAAU;AAAA,IACrG,QAAQ,SAAS,UAAU,SAAS,QAAQ,WAAW,SAAS,UAAU;AAAA,IAC1E,UAAU,SAAS,cAAc;AAAA,IACjC;AAAA,IAEA,MAAM,CAAC,YAAY,UAAU,YAAY,OAAO;AAC9C,kBAAY,SAAS,YAAY,UAAU,YAAY,KAAK;AAAA;AAAA,EAEhE,CAAC;AAID,MAAI,SAAS,UAAU,UAAU,QAAQ,OAAO;AAC9C,QAAI,KAAK,OAAO;AAEd,WAAK,MAAM,MAAM,QAAQ,KAAK;AAE9B,WAAK,MAAM,IAAI;AAAA,IACjB;AAAA,EACF;AAEA,QAAM,SAAS,MAAM,KAAK;AAC1B,MAAI,WAAW,SAAS;AAAS,WAAO,GAAG,IAAI;AAE/C,SAAO,IAAI,YAAY,8BAA8B,IAAI,KAAK,GAAG,GAAG,CAAC;AAAA;AAmBvE,eAAsB,QAAQ,CAAC,SAA4B,SAAuC;AAChG,MAAI,MAAM,qBAAqB,OAAO;AACtC,MAAI,MAAM,qBAAqB,OAAO;AAEtC,QAAM,MAAM,MAAM,QAAQ,OAAO,IAAI,UAAU,QAAQ,MAAM,uBAAuB;AAEpF,OAAK,KAAK;AACR,QAAI,MAAM,4BAA4B,OAAO,OAAO;AACpD,aAAQ,KAAK,SAAS,UAAU;AAAA,EAClC;AAEA,QAAM,OAAO,IAAI,UAAU,KAAK;AAAA,OAC3B;AAAA,IACH,OAAO,SAAS,SAAS;AAAA,IACzB,QAAQ,SAAS,UAAU;AAAA,IAC3B,QAAQ,SAAS,UAAU;AAAA,IAC3B,KAAK,SAAS,OAAO,SAAQ,IAAI;AAAA,IAEjC,MAAM,CAAC,YAAY,UAAU,YAAY,OAAO;AAC9C,kBAAY,aAAa,YAAY,UAAU,YAAY,KAAK;AAAA;AAAA,EAEpE,CAAC;AAED,SAAO,KAAK,OAAO,SAAS;AAAA;AAI9B,SAAS,WAAW,CAAC,MAA6B,YAAY,UAAU,YAAY,OAAO;AACzF,MAAI,MAAM,gBAAgB,MAAM;AAChC,MAAI,MAAM,cAAc,UAAU;AAClC,MAAI,MAAM,YAAY,QAAQ;AAC9B,MAAI,MAAM,cAAc,UAAU;AAElC,MAAI,OAAO;AACT,QAAI,MAAM,KAAK;AACf,aAAQ,KAAK,SAAS,UAAU;AAAA,EAClC;AAEA,MAAI,aAAa,SAAS,WAAW;AAAU,aAAQ,KAAK,QAAQ;AAAA;;;ACxHtE;AAEA;;;ACFA;AAcA,SAAS,YAAY,CAAC,OAAO,QAAQ,OAAO,SAAS,OAAO,OAAO,MAAM,GAAG,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,SAAS,OAAO,OAAO,MAAM,KAAK,IAAI,GAAG,QAAQ,MAAM,MAAM,CAAC,GAAG,OAAO,KAAK,QAAQ,KAAK,GAAG;AAC7L,SAAO,QAAQ,OAAO,IAAI,OAAO,aAAa,MAAM,MAAM,OAAO,OAAO;AAAA;AAE1E,SAAS,UAAU,CAAC,OAAO,QAAQ,MAAM,OAAO,SAAS;AACvD,SAAO,QAAQ,IAAI,OAAO,SAAS,QAAQ,OAAO,aAAa,OAAO,QAAQ,OAAO,OAAO,IAAI;AAAA;AAElG,SAAS,WAAW,CAAC,MAAM,OAAO,UAAU,MAAM,KAAK,KAAK,SAAS,GAAG;AACtE,SAAO,CAAC,WAAW,YAAY,WAAW,MAAM,WAAgB,aAAK,YAClE,KAAK,QAAQ,QAAQ,OAAO,EAAE,GAC/B,QACA,MACA,OACA,OACF,IAAI;AAAA;AAEN,SAAS,IAAI,CAAC,MAAM,OAAO,SAAS;AAClC,SAAO,YAAY,QAAQ,SAAS,QAAQ,UAAU,OAAO;AAAA;AA6C/D,SAAS,YAAY,CAAC,WAAW,kBAAkB;AACjD,SAAO,WAAW,YAAY,OAAO,YAAY,OAAO,KAAK,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,CAAC;AAAA;AAGrG,SAAS,QAAQ,CAAC,OAAO,WAAW,SAAS;AAC3C,SAAO,OAAO,UAAU,OAAO;AAAA;AAEjC,SAAS,QAAQ,CAAC,OAAO,MAAM;AAC7B,SAAO,SAAS,KAAK,EAAE,IAAI;AAAA;AAO7B,SAAS,SAAS,CAAC,MAAM;AACvB,SAAO,KAAK,QAAQ,IAAI,OAAO,WAAW,GAAG,GAAG,EAAE;AAAA;AAEpD,SAAS,WAAW,CAAC,KAAK,KAAK,QAAQ,KAAK;AAC1C,QAAM,OAAO,MAAM,IAAI;AACvB,MAAI,QAAQ,GAAG;AACb,WAAO;AAAA,EACT;AACA,QAAM,WAAW,KAAK,MAAM,OAAO,CAAC;AACpC,MAAI,OAAO;AACX,WAAS,IAAI,EAAG,IAAI,KAAK,KAAK;AAC5B,YAAQ,IAAI,YAAY,KAAK,WAAW,IAAI,SAAS,QAAQ,IAAI,IAAI;AAAA,EACvE;AACA,SAAO;AAAA;AAET,SAAS,UAAU,CAAC,KAAK,KAAK,QAAQ,KAAK;AACzC,QAAM,OAAO,MAAM,IAAI;AACvB,MAAI,QAAQ,GAAG;AACb,WAAO;AAAA,EACT;AACA,MAAI,OAAO;AACX,WAAS,IAAI,EAAG,IAAI,KAAK,KAAK;AAC5B,YAAQ,IAAI,OAAO,QAAQ,IAAI,IAAI;AAAA,EACrC;AACA,SAAO;AAAA;AAET,SAAS,SAAS,CAAC,KAAK,KAAK,QAAQ,KAAK;AACxC,MAAI,OAAO;AACX,WAAS,IAAI,EAAG,IAAI,KAAK,KAAK;AAC5B,YAAQ,IAAI,IAAI,SAAS,IAAI,KAAK;AAAA,EACpC;AACA,SAAO;AAAA;AAET,SAAS,KAAK,CAAC,WAAW,KAAK,KAAK,QAAQ,KAAK;AAC/C,UAAQ;AAAA,SACD,QAAQ;AACX,aAAO,UAAU,KAAK,KAAK,KAAK;AAAA,IAClC;AAAA,SACK,SAAS;AACZ,aAAO,WAAW,KAAK,KAAK,KAAK;AAAA,IACnC;AAAA,SACK,UAAU;AACb,aAAO,YAAY,KAAK,KAAK,KAAK;AAAA,IACpC;AAAA,aACS;AACP,aAAO;AAAA,IACT;AAAA;AAAA;AA+EJ,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,GAAG;AAC7B,QAAM,OAAO;AAAA,OACR;AAAA,IACH,OAAO;AAAA,SACF;AAAA,SACA,MAAM;AAAA,IACX;AAAA,EACF;AACA,QAAM,YAAY,KAAK,MAAM,IAAI;AACjC,QAAM,WAAW,CAAC;AAClB,QAAM,SAAS,SAAS,KAAK,MAAM,WAAW;AAC9C,QAAM,cAAc;AAAA,cACR,KAAK,MAAM,gBAAgB,WAAW,gBAAgB,KAAK,MAAM,gBAAgB,gBAAgB,QAAQ,KAAK,MAAM;AAAA,EAChI;AACA,MAAI,QAAQ;AACV,eAAW,OAAO,aAAa;AAC7B,kBAAY,OAAO,OACjB,YAAY,IACd;AAAA,IACF;AAAA,EACF;AACA,QAAM,gBAAgB,KAAK,MAAM,UAAU,MAAM,IAAI,KAAK,MAAM,UAAU,KAAK,MAAM,UAAU;AAC/F,QAAM,SAAS,UAAU,SAAS;AAClC,QAAM,QAAQ,KAAK,IAAI,GAAG,UAAU,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,IAAI;AAClE,QAAM,cAAc,QAAQ;AAC5B,QAAM,YAAY,KAAK,MAAM,aAAa,IAAI,IAAI,OAAO,KAAK,MAAM,UAAU,IAAI;AAClF,MAAI,KAAK,MAAM,YAAY,GAAG;AAC5B,aAAS,KAAK,GAAG,OAAO,KAAK,MAAM,SAAS,CAAC;AAAA,EAC/C;AACA,MAAI,KAAK,OAAO;AACd,UAAM,OAAO,YAAY,EAAE,OACzB,KAAK,OAAO,QAAQ,UAAU,KAAK,KAAK,EAAE,UAAU,CAAC,CACvD;AACA,UAAM,QAAQ,YAAY,EAAE,OAC1B,QAAQ,UAAU,KAAK,KAAK,EAAE,SAAS,UAAU,IAAI,EAAE,SAAS,aAClE;AACA,aAAS,KACP,GAAG,YAAY,YAAY,KAAK,OAAO,KAAK,QAAQ,QAAQ,YAAY,IAC1E;AAAA,EACF,OAAO;AACL,aAAS,KACP,GAAG,YAAY,YAAY,KAAK,YAAY,EAAE,OAAO,WAAW,IAAI,YAAY,IAClF;AAAA;AAEF,QAAM,eAAe,KAAK,MAAM,WAAW,WAAW,KAAK,OAAO,SAAS,UAAU,UAAU,CAAC,IAAI,KAAK,MAAM,WAAW,QAAQ,SAAS,UAAU,SAAS,gBAAgB,SAAS,UAAU;AACjM,WAAS,IAAI,EAAG,IAAI,QAAQ,KAAK;AAC/B,QAAI,IAAI,gBAAgB,KAAK,eAAe,UAAU,QAAQ;AAC5D,eAAS,KACP,GAAG,YAAY,YAAY,IAAI,IAAI,OAAO,WAAW,IAAI,YAAY,GACvE;AAAA,IACF,OAAO;AACL,YAAM,OAAO,UAAU,IAAI;AAC3B,YAAM,OAAO,IAAI,OAAO,aAAa;AACrC,YAAM,QAAQ,IAAI,OAAO,QAAQ,UAAU,IAAI,EAAE,MAAM;AACvD,eAAS,KACP,GAAG,YAAY,YAAY,IAAI,OAAO,OAAO,QAAQ,YAAY,GACnE;AAAA;AAAA,EAEJ;AACA,WAAS,KACP,GAAG,YAAY,YAAY,KAAK,YAAY,EAAE,OAAO,WAAW,IAAI,YAAY,IAClF;AACA,MAAI,KAAK,MAAM,eAAe,GAAG;AAC/B,aAAS,KAAK,GAAG,OAAO,KAAK,MAAM,YAAY,CAAC;AAAA,EAClD;AACA,SAAO,SAAS,KAAK,IAAI;AAAA;AAtR3B;AAAA,EACE,MAAM,CAAC;AAAA,EACP,OAAO,CAAC;AAAA,EACR,WAAW;AAAA,WACF,YAAY,cAAc,CAAC,IAAI;AAC1C,IAAM,aAAa,cAAc,OAAO,KAAK,SAAS,YAAY;AAClE,IAAM,WAAW,iBAAiB,OAAO,KAAK,SAAS,SAAS;AAChE,IAAM,YAAY,aAAa;AAC/B,IAAM,iBAAiB,IAAI,SAAS;AACpC,IAAM,uBAAuB,OAAW,cAAc,WAAO,CAAC,KAAK,IAAI,SAAS;AAChF,IAAM,OAAO,QAAQ,SAAQ,oBAAoB,SAAO,eAAe,SAAO,cAAc;AAC5F,IAAM,oBAAoB,eAAe,YAAY,cAAc,kBAAkB,wBAAwB;AAmB7G,IAAM,YAAY;AAAA,EAChB,OAAO,KAAK,GAAG,CAAC;AAAA,EAChB,MAAM,KAAK,GAAG,IAAI,iBAAiB;AAAA,EACnC,KAAK,KAAK,GAAG,IAAI,iBAAiB;AAAA,EAClC,QAAQ,KAAK,GAAG,EAAE;AAAA,EAClB,WAAW,KAAK,GAAG,EAAE;AAAA,EACrB,SAAS,KAAK,GAAG,EAAE;AAAA,EACnB,QAAQ,KAAK,GAAG,EAAE;AAAA,EAClB,eAAe,KAAK,GAAG,EAAE;AAAA,EACzB,OAAO,KAAK,IAAI,EAAE;AAAA,EAClB,KAAK,KAAK,IAAI,EAAE;AAAA,EAChB,OAAO,KAAK,IAAI,EAAE;AAAA,EAClB,QAAQ,KAAK,IAAI,EAAE;AAAA,EACnB,MAAM,KAAK,IAAI,EAAE;AAAA,EACjB,SAAS,KAAK,IAAI,EAAE;AAAA,EACpB,MAAM,KAAK,IAAI,EAAE;AAAA,EACjB,OAAO,KAAK,IAAI,EAAE;AAAA,EAClB,MAAM,KAAK,IAAI,EAAE;AAAA,EACjB,SAAS,KAAK,IAAI,EAAE;AAAA,EACpB,OAAO,KAAK,IAAI,EAAE;AAAA,EAClB,SAAS,KAAK,IAAI,EAAE;AAAA,EACpB,UAAU,KAAK,IAAI,EAAE;AAAA,EACrB,QAAQ,KAAK,IAAI,EAAE;AAAA,EACnB,WAAW,KAAK,IAAI,EAAE;AAAA,EACtB,QAAQ,KAAK,IAAI,EAAE;AAAA,EACnB,SAAS,KAAK,IAAI,EAAE;AAAA,EACpB,aAAa,KAAK,IAAI,EAAE;AAAA,EACxB,WAAW,KAAK,IAAI,EAAE;AAAA,EACtB,aAAa,KAAK,IAAI,EAAE;AAAA,EACxB,cAAc,KAAK,IAAI,EAAE;AAAA,EACzB,YAAY,KAAK,IAAI,EAAE;AAAA,EACvB,eAAe,KAAK,IAAI,EAAE;AAAA,EAC1B,YAAY,KAAK,IAAI,EAAE;AAAA,EACvB,aAAa,KAAK,IAAI,EAAE;AAAA,EACxB,eAAe,KAAK,KAAK,EAAE;AAAA,EAC3B,aAAa,KAAK,KAAK,EAAE;AAAA,EACzB,eAAe,KAAK,KAAK,EAAE;AAAA,EAC3B,gBAAgB,KAAK,KAAK,EAAE;AAAA,EAC5B,cAAc,KAAK,KAAK,EAAE;AAAA,EAC1B,iBAAiB,KAAK,KAAK,EAAE;AAAA,EAC7B,cAAc,KAAK,KAAK,EAAE;AAAA,EAC1B,eAAe,KAAK,KAAK,EAAE;AAC7B;AAIA,IAAM,SAAS,aAAa;AAQ5B,IAAM,YAAY;AAAA,EAChB;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAmDV,IAAM,kBAAkB;AAAA,EACtB,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EACA,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EACA,qBAAqB;AAAA,IACnB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EACA,aAAa;AAAA,IACX,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EACA,cAAc;AAAA,IACZ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EACA,qBAAqB;AAAA,IACnB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AAAA,EACA,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,GAAG;AAAA,EACL;AACF;AACA,IAAM,eAAe;AAAA,EACnB,aAAa;AAAA,EACb,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,cAAc;AAChB;;;ADtMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiDO,IAAM,SAAS,QAAQ;AAAA,EAE5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;AHlDD,eAAsB,UAAU,CAAC,SAAiB,SAAiE;AACjH,MAAI,MAAM,eAAe,OAAO;AAChC,MAAI,MAAM,YAAY,OAAO;AAE7B,SAAO,MAAM,KAAK,SAAS,OAAO;AAAA;AAGpC,eAAsB,UAAU,CAAC,SAAiB,SAAiE;AACjH,MAAI,MAAM,eAAe,OAAO,OAAO,CAAC;AACxC,MAAI,MAAM,uBAAuB,OAAO;AAExC,SAAO,MAAM,KAAK,SAAS,OAAO;AAAA;AA4BpC,eAAsB,cAAc,CAAC,SAAiB,SAAuC;AAC3F,MAAI,MAAM,mBAAmB,OAAO,OAAO,CAAC;AAC5C,MAAI,MAAM,2BAA2B,OAAO;AAE5C,QAAM,SAAS,MAAM,SAAS,SAAS,OAAO;AAO9C,SAAO;AAAA;AAUT,eAAsB,WAAW,CAAC,UAAoB,SAAsB;AAC1E,QAAM,UAAU,CAAC;AAEjB,aAAW,WAAW,UAAU;AAC9B,UAAM,SAAS,MAAM,WAAW,SAAS,OAAO;AAEhD,QAAI,OAAO,MAAM,GAAG;AAClB,UAAI,MAAM,OAAO,KAAK;AACtB,cAAQ,KAAK,UAAS,UAAU;AAAA,IAClC;AAEA,YAAQ,KAAK,MAAM;AAAA,EACrB;AAEA,SAAO;AAAA;;;AKtFF,MAAM,QAAQ;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,WAAW,GAAG,MAAM,aAAa,SAAS,WAAK,QAAQ,aAAsB;AAC3E,SAAK,OAAO;AACZ,SAAK,cAAc;AACnB,SAAK,UAAU;AACf,SAAK,MAAM;AACX,SAAK,SAAS;AACd,SAAK,YAAY;AAAA;AAErB;AAEO,IAAM,UAAU;AAAA,EACrB,KAAK,OAAO,UAAiB,YAAyB;AACpD,WAAO,MAAM,WAAW,UAAS,OAAO;AAAA;AAAA,EAG1C,SAAS,OAAO,UAAiB,YAAyB;AACxD,WAAO,MAAM,WAAW,UAAS,OAAO;AAAA;AAE5C;;AC9CA,uBAAS;AACT,eAAS;AAET,oBAAS;AACT,kBAAS,iBAAQ,eAAM,cAAM,cAAK,gBAAM,kBAAO;;;;;AAM/C,eAAsB,KAAK,CAAC,UAAiB,SAAyC;AACpF,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI,SAAS,UAAU,OAAO;AAC5B,cAAQ,IAAI;AACZ,cAAQ,IAAI,MAAK,MAAK,YAAY,CAAC,IAAI,KAAI,KAAK,SAAS,CAAC;AAC1D,cAAQ,IAAI;AAAA,IACd;AAEA,SAAI,KAAK,YAAY,QAAO,QAAO,MAAK,IAAI,WAAU,CAAC,CAAC,GAAG;AAE3D,QAAI,SAAS,oBAAoB,SAAS,SAAS;AAAO,aAAO,QAAQ,CAAC;AAE1E,WAAO,QAAQ,YAAY,IAAI,CAAC;AAAA,GACjC;AAAA;AAMI,SAAS,KAAK,CAAC,MAAc,SAAwB,OAAwB;AAClF,QAAM,OAAO;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,OACT;AAAA,EACL;AAEA,OAAK,UAAU,SAAS,WAAW;AAEnC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,QAAI;AAAO,aAAO,aAAY,KAAK;AAEnC,QAAI,MAAM,WAAW;AACnB,UAAI,OAAO,YAAY,IAAI,IAAI,KAAK;AAEpC,UAAI,KAAK,YAAY;AACnB,eAAO,OAAO;AACd,eAAO,KAAK,MAAM,OAAO,GAAG,IAAI;AAAA,MAClC;AAEA,UAAI,KAAK,UAAU;AAAM,eAAO,QAAQ,UAAS,OAAO;AAExD,UAAI;AAAO,aAAI,MAAM,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,aAAa,MAAM,cAAc;AAAA,eACxE,KAAK,SAAS;AACrB,aAAI,KAAK,GAAG,KAAI,MAAK,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,aAAa,MAAM,OAAO,CAAC,KAAK,KAAK,WAAW,YAAY;AAAA;AAE5G,aAAI,QACF,GAAG,KAAI,MAAK,MAAK,IAAI,KAAK,QAAQ,CAAC,IAAI,KAAK,aAAa,MAAM,OAAO,CAAC,CAAC,KAAK,MAC3E,OAAM,KAAK,WAAW,UAAU,CAClC,GACF;AAAA,IACJ,OAAO;AACL,UAAI,MAAM,SAAS;AAAQ,aAAI,KAAK,IAAI;AAAA,eAE/B,MAAM,SAAS,aAAa,MAAM,UAAU;AAAM,aAAI,QAAQ,IAAI;AAAA;AAG7E,WAAO,QAAQ,UAAS,OAAO;AAAA,GAChC;AAAA;;ACnEH;AACA,eAAS;AAST,SAAS,YAAY,CAAC,KAAuB;AAC3C,OAAK;AAAK,WAAO;AAEjB,SAAO,IAAI,WAAW,IAAI;AAAA;AAG5B,SAAS,aAAa,CAAC,KAAsB;AAC3C,SAAO,IAAI,WAAW,GAAG,MAAM,aAAa,GAAG;AAAA;AAGjD,SAAS,UAAU,CAAC,OAA0C;AAC5D,MAAI,UAAU;AAAQ,WAAO;AAE7B,MAAI,UAAU;AAAS,WAAO;AAE9B,QAAM,cAAc,OAAO,WAAW,KAAK;AAC3C,OAAK,OAAO,MAAM,WAAW;AAAG,WAAO;AAEvC,SAAO,MAAM,QAAQ,MAAM,EAAE;AAAA;AAG/B,SAAS,eAAe,CACtB,KACA,OACA,OACA,SACQ;AACR,SAAO,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,MAAM,GAAG;AAC3C,MAAI,UAAU,WAAW;AACvB,YAAQ,OAAiB,WAAW,KAAK;AAAA,EAC3C,WAAW,QAAQ,IAAI,MAAK,WAAW,MAAK,QAAQ,IAAI,WAAW,GAAG,GAAG;AACvE,YAAQ,OAAiB,MAAK,QAAQ;AACtC;AAAA,EACF,OAAO;AACL,YAAQ,OAAiB;AAAA;AAE3B,SAAO;AAAA;AAGT,SAAS,gBAAgB,CACvB,KACA,OACA,OACA,SACQ;AACR,SAAO,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,MAAM,GAAG;AAG3C,MAAI,QAAQ;AAAW,WAAO;AAE9B,MAAI,UAAU,aAAa,QAAQ,WAAW;AAC5C,aAAS,IAAI,EAAG,IAAI,IAAI,QAAQ;AAAK,cAAQ,IAAI,MAAgB,WAAW,KAAK;AAAA,EACnF,OAAO;AACL,aAAS,IAAI,EAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAI,QAAQ,IAAI,MAAK,UAAU,MAAM,IAAI,SAAS,MAAM,MAAK,QAAQ,IAAI,WAAW,GAAG,GAAG;AACxF,gBAAQ,IAAI,MAAgB,WAAW,MAAK,QAAQ,EAAY;AAChE;AAAA,MACF,OAAO;AACL,gBAAQ,IAAI,MAAgB;AAAA;AAAA,IAEhC;AAAA;AAGF,SAAO;AAAA;AAGF,SAAS,SAAS,CAAC,OAA6B;AACrD,MAAI,UAAS;AAAW,YAAO,SAAQ,KAAK,MAAM,CAAC;AAEnD,QAAM,OAAiB,CAAC;AACxB,QAAM,UAAsD,CAAC;AAE7D,WAAS,IAAI,EAAG,IAAI,MAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,MAAK;AACjB,SAAK;AAAK;AACV,QAAI,aAAa,GAAG;AAAG,UAAI,gBAAgB,KAAK,OAAM,GAAG,OAAO;AAAA,aACvD,cAAc,GAAG;AAAG,UAAI,iBAAiB,KAAK,OAAM,GAAG,OAAO;AAAA;AAClE,WAAK,KAAK,GAAG;AAAA,EACpB;AAEA,SAAO,EAAE,MAAM,QAAQ;AAAA;AAGlB,SAAS,SAAS,CAAC,OAA2B;AACnD,MAAI,UAAS;AAAW,YAAO,SAAQ,KAAK,MAAM,CAAC;AAEnD,SAAO,UAAU,KAAI,EAAE;AAAA;AAUlB,SAAS,YAAY,CAAC,SAAkC;AAC7D,YAAU,WAAW,CAAC;AACtB,QAAM,OAAO,SAAQ,KAAK,MAAM,CAAC;AAEjC,WAAS,IAAI,EAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK;AACjB,QAAI,KAAK,WAAW,IAAI,GAAG;AACzB,YAAM,MAAM,IAAI,UAAU,CAAC;AAC3B,YAAM,eAAe,IAAI,QACvB,cACA,CAAC,MAAO,EAAE,KAAK,EAAE,GAAG,YAAY,IAAI,EACtC;AAEA,UAAI,IAAI,IAAI,KAAK,QAAQ;AAEvB,YAAI,KAAK,IAAI,OAAO,UAAU,KAAK,IAAI,OAAO,SAAS;AAErD,kBAAQ,gBAAgB,KAAK,IAAI,OAAO;AACxC;AAAA,QACF,OAAO;AACL,kBAAQ,gBAAgB,KAAK,IAAI;AACjC;AAAA;AAAA,MAEJ,OAAO;AACL,gBAAQ,gBAAgB;AAAA;AAAA,IAE5B;AAAA,EACF;AAGA,MAAI,OAAO,KAAK,OAAO,EAAE,WAAW;AAAG,WAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS,MAAM;AAG5F,SAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,QAAQ;AACpC,SAAK;AAAS,aAAO,EAAE,QAAQ,OAAO,OAAO,OAAO,SAAS,MAAM;AAEnE,UAAM,QAAQ,QAAQ;AAEtB,QAAI,UAAU,UAAU,UAAU;AAAS,cAAQ,OAAO,UAAU;AAAA,GACrE;AAED,SAAO;AAAA;AAMF,SAAS,YAAY,CAAC,SAAuB;AAClD,OAAK,SAAS;AACZ,cAAU,SAAQ,KAAK,MAAM,CAAC;AAC9B,cAAU,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC;AAGrC,QAAI,QAAQ,OAAO,QAAQ,GAAG,WAAW,GAAG;AAAG,cAAQ,MAAM;AAAA,EAC/D;AAEA,MAAI,SAAS,SAAS;AACpB,SAAI,MAAM,gBAAgB,SAAQ,IAAI;AACtC,SAAI,MAAM,yBAAyB,SAAQ,KAAK,MAAM,CAAC,CAAC;AACxD,SAAI,MAAM,+BAA+B,OAAO;AAAA,EAClD;AAEA,SAAO,QAAQ,KAAK,GAAG;AAAA;;ACxKzB;AAEO,IAAM,UAAU;",
18
+ "debugId": "1F7BAC6072E4FA6E64756E2164756E21",
19
+ "names": []
20
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/cli",
3
3
  "type": "module",
4
- "version": "0.62.0",
4
+ "version": "0.63.0",
5
5
  "description": "TypeScript framework for CLI artisans. Build beautiful console apps with ease.",
6
6
  "author": "Chris Breuer",
7
7
  "license": "MIT",
@@ -57,7 +57,7 @@
57
57
  "prepublishOnly": "bun run build"
58
58
  },
59
59
  "peerDependencies": {
60
- "@antfu/install-pkg": "^0.3.3",
60
+ "@antfu/install-pkg": "^0.3.5",
61
61
  "@clack/prompts": "^0.7.0",
62
62
  "@stacksjs/config": "latest",
63
63
  "@stacksjs/error-handling": "latest",
@@ -72,7 +72,7 @@
72
72
  "prompts": "^2.4.2"
73
73
  },
74
74
  "dependencies": {
75
- "@antfu/install-pkg": "^0.3.3",
75
+ "@antfu/install-pkg": "^0.3.5",
76
76
  "@clack/prompts": "^0.7.0",
77
77
  "@stacksjs/collections": "latest",
78
78
  "@stacksjs/config": "latest",
package/src/console.ts CHANGED
@@ -39,7 +39,7 @@ export class Prompt {
39
39
  return logger.prompt(message, { ...options, type: 'multiselect' })
40
40
  }
41
41
 
42
- async confirm(message: any, options: any) {
42
+ async confirm(message: any, options?: any) {
43
43
  if (this.isRequired())
44
44
  return logger.prompt(message, {
45
45
  ...options,
package/src/exec.ts CHANGED
@@ -32,6 +32,7 @@ export async function exec(command: string | string[], options?: CliOptions): Pr
32
32
  log.debug('exec:', Array.isArray(command) ? command.join(' ') : command)
33
33
  log.debug('cmd:', cmd)
34
34
  log.debug('exec options:', options)
35
+ const cwd = options?.cwd || process.cwd()
35
36
 
36
37
  const proc = Bun.spawn(cmd, {
37
38
  ...options,
@@ -39,7 +40,7 @@ export async function exec(command: string | string[], options?: CliOptions): Pr
39
40
  options?.silent || options?.quiet ? 'ignore' : options?.stdin ? options.stdin : options?.stdout || 'inherit',
40
41
  stderr: options?.silent || options?.quiet ? 'ignore' : options?.stderr || 'inherit',
41
42
  detached: options?.background || false,
42
- cwd: options?.cwd || process.cwd(),
43
+ cwd,
43
44
  // env: { ...e, ...options?.env },
44
45
  onExit(subprocess, exitCode, signalCode, error) {
45
46
  exitHandler('spawn', subprocess, exitCode, signalCode, error)