@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 +44 -40
- package/dist/index.js.map +20 -0
- package/package.json +3 -3
- package/src/console.ts +1 -1
- package/src/exec.ts +2 -1
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
197
|
+
}
|
|
198
|
+
function init(open, close, replace) {
|
|
198
199
|
return filterEmpty(`\x1B[${open}m`, `\x1B[${close}m`, replace);
|
|
199
|
-
}
|
|
200
|
-
|
|
200
|
+
}
|
|
201
|
+
function createColors(useColor = isColorSupported) {
|
|
201
202
|
return useColor ? colorDefs : Object.fromEntries(Object.keys(colorDefs).map((key) => [key, String]));
|
|
202
|
-
}
|
|
203
|
-
|
|
203
|
+
}
|
|
204
|
+
function getColor(color, fallback = "reset") {
|
|
204
205
|
return colors[color] || colors[fallback];
|
|
205
|
-
}
|
|
206
|
-
|
|
206
|
+
}
|
|
207
|
+
function colorize(color, text) {
|
|
207
208
|
return getColor(color)(text);
|
|
208
|
-
}
|
|
209
|
-
|
|
209
|
+
}
|
|
210
|
+
function stripAnsi(text) {
|
|
210
211
|
return text.replace(new RegExp(ansiRegex, "g"), "");
|
|
211
|
-
}
|
|
212
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
626
|
+
function isLongOption(arg) {
|
|
626
627
|
if (!arg)
|
|
627
628
|
return false;
|
|
628
629
|
return arg.startsWith("--");
|
|
629
|
-
}
|
|
630
|
-
|
|
630
|
+
}
|
|
631
|
+
function isShortOption(arg) {
|
|
631
632
|
return arg.startsWith("-") && !isLongOption(arg);
|
|
632
|
-
}
|
|
633
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
43
|
+
cwd,
|
|
43
44
|
// env: { ...e, ...options?.env },
|
|
44
45
|
onExit(subprocess, exitCode, signalCode, error) {
|
|
45
46
|
exitHandler('spawn', subprocess, exitCode, signalCode, error)
|