@decipher-sdk/decipher-qa 0.1.1 → 0.1.2
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 +17 -17
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var bi=Object.create;var Me=Object.defineProperty;var wi=Object.getOwnPropertyDescriptor;var ki=Object.getOwnPropertyNames;var Ci=Object.getPrototypeOf,vi=Object.prototype.hasOwnProperty;var
|
|
3
|
-
`).replace(/^/gm," ".repeat(r))}let c=[`Usage: ${t.commandUsage(e)}`,""],
|
|
2
|
+
"use strict";var bi=Object.create;var Me=Object.defineProperty;var wi=Object.getOwnPropertyDescriptor;var ki=Object.getOwnPropertyNames;var Ci=Object.getPrototypeOf,vi=Object.prototype.hasOwnProperty;var w=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var _i=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ki(e))!vi.call(n,s)&&s!==t&&Me(n,s,{get:()=>e[s],enumerable:!(i=wi(e,s))||i.enumerable});return n};var k=(n,e,t)=>(t=n!=null?bi(Ci(n)):{},_i(e||!n||!n.__esModule?Me(t,"default",{value:n,enumerable:!0}):t,n));var G=w(ae=>{"use strict";var J=class extends Error{constructor(e,t,i){super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},oe=class extends J{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};ae.CommanderError=J;ae.InvalidArgumentError=oe});var z=w(ce=>{"use strict";var{InvalidArgumentError:Ai}=G(),le=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,i)=>{if(!this.argChoices.includes(t))throw new Ai(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,i):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Oi(n){let e=n.name()+(n.variadic===!0?"...":"");return n.required?"<"+e+">":"["+e+"]"}ce.Argument=le;ce.humanReadableArgName=Oi});var he=w(Fe=>{"use strict";var{humanReadableArgName:Si}=z(),de=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(s=>!s._hidden),i=e._getHelpCommand();return i&&!i._hidden&&t.push(i),this.sortSubcommands&&t.sort((s,r)=>s.name().localeCompare(r.name())),t}compareOptions(e,t){let i=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return i(e).localeCompare(i(t))}visibleOptions(e){let t=e.options.filter(s=>!s.hidden),i=e._getHelpOption();if(i&&!i.hidden){let s=i.short&&e._findOption(i.short),r=i.long&&e._findOption(i.long);!s&&!r?t.push(i):i.long&&!r?t.push(e.createOption(i.long,i.description)):i.short&&!s&&t.push(e.createOption(i.short,i.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let i=e.parent;i;i=i.parent){let s=i.options.filter(r=>!r.hidden);t.push(...s)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(i=>Si(i)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((i,s)=>Math.max(i,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((i,s)=>Math.max(i,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((i,s)=>Math.max(i,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((i,s)=>Math.max(i,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let i="";for(let s=e.parent;s;s=s.parent)i=s.name()+" "+i;return i+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let i=`(${t.join(", ")})`;return e.description?`${e.description} ${i}`:i}return e.description}formatHelp(e,t){let i=t.padWidth(e,t),s=t.helpWidth||80,r=2,o=2;function a(y,N){if(N){let re=`${y.padEnd(i+o)}${N}`;return t.wrap(re,s-r,i+o)}return y}function l(y){return y.join(`
|
|
3
|
+
`).replace(/^/gm," ".repeat(r))}let c=[`Usage: ${t.commandUsage(e)}`,""],d=t.commandDescription(e);d.length>0&&(c=c.concat([t.wrap(d,s,0),""]));let p=t.visibleArguments(e).map(y=>a(t.argumentTerm(y),t.argumentDescription(y)));p.length>0&&(c=c.concat(["Arguments:",l(p),""]));let g=t.visibleOptions(e).map(y=>a(t.optionTerm(y),t.optionDescription(y)));if(g.length>0&&(c=c.concat(["Options:",l(g),""])),this.showGlobalOptions){let y=t.visibleGlobalOptions(e).map(N=>a(t.optionTerm(N),t.optionDescription(N)));y.length>0&&(c=c.concat(["Global Options:",l(y),""]))}let U=t.visibleCommands(e).map(y=>a(t.subcommandTerm(y),t.subcommandDescription(y)));return U.length>0&&(c=c.concat(["Commands:",l(U),""])),c.join(`
|
|
4
4
|
`)}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}wrap(e,t,i,s=40){let r=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",o=new RegExp(`[\\n][${r}]+`);if(e.match(o))return e;let a=t-i;if(a<s)return e;let l=e.slice(0,i),c=e.slice(i).replace(`\r
|
|
5
5
|
`,`
|
|
6
|
-
`),
|
|
7
|
-
|.{1,${a-1}}([${
|
|
8
|
-
`?"":(
|
|
9
|
-
`)}};Fe.Help=
|
|
6
|
+
`),d=" ".repeat(i),g="\\s\u200B",U=new RegExp(`
|
|
7
|
+
|.{1,${a-1}}([${g}]|$)|[^${g}]+?([${g}]|$)`,"g"),y=c.match(U)||[];return l+y.map((N,re)=>N===`
|
|
8
|
+
`?"":(re>0?d:"")+N.trimEnd()).join(`
|
|
9
|
+
`)}};Fe.Help=de});var fe=w(me=>{"use strict";var{InvalidArgumentError:xi}=G(),ue=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let i=Ei(e);this.short=i.shortFlag,this.long=i.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,i)=>{if(!this.argChoices.includes(t))throw new xi(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,i):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return Ii(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},pe=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,i)=>{this.positiveOptions.has(i)&&this.dualOptions.add(i)})}valueFromOption(e,t){let i=t.attributeName();if(!this.dualOptions.has(i))return!0;let s=this.negativeOptions.get(i).presetArg,r=s!==void 0?s:!1;return t.negate===(r===e)}};function Ii(n){return n.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Ei(n){let e,t,i=n.split(/[ |,]+/);return i.length>1&&!/^[[<]/.test(i[1])&&(e=i.shift()),t=i.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}me.Option=ue;me.DualOptions=pe});var Ve=w(je=>{"use strict";function qi(n,e){if(Math.abs(n.length-e.length)>3)return Math.max(n.length,e.length);let t=[];for(let i=0;i<=n.length;i++)t[i]=[i];for(let i=0;i<=e.length;i++)t[0][i]=i;for(let i=1;i<=e.length;i++)for(let s=1;s<=n.length;s++){let r=1;n[s-1]===e[i-1]?r=0:r=1,t[s][i]=Math.min(t[s-1][i]+1,t[s][i-1]+1,t[s-1][i-1]+r),s>1&&i>1&&n[s-1]===e[i-2]&&n[s-2]===e[i-1]&&(t[s][i]=Math.min(t[s][i],t[s-2][i-2]+1))}return t[n.length][e.length]}function Ti(n,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=n.startsWith("--");t&&(n=n.slice(2),e=e.map(o=>o.slice(2)));let i=[],s=3,r=.4;return e.forEach(o=>{if(o.length<=1)return;let a=qi(n,o),l=Math.max(n.length,o.length);(l-a)/l>r&&(a<s?(s=a,i=[o]):a===s&&i.push(o))}),i.sort((o,a)=>o.localeCompare(a)),t&&(i=i.map(o=>`--${o}`)),i.length>1?`
|
|
10
10
|
(Did you mean one of ${i.join(", ")}?)`:i.length===1?`
|
|
11
|
-
(Did you mean ${i[0]}?)`:""}je.suggestSimilar=Ti});var Je=
|
|
11
|
+
(Did you mean ${i[0]}?)`:""}je.suggestSimilar=Ti});var Je=w(We=>{"use strict";var Ni=require("events").EventEmitter,ge=require("child_process"),I=require("path"),ye=require("fs"),f=require("process"),{Argument:Ri,humanReadableArgName:Pi}=z(),{CommanderError:be}=G(),{Help:Di}=he(),{Option:He,DualOptions:Ui}=fe(),{suggestSimilar:Ge}=Ve(),we=class n extends Ni{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:t=>f.stdout.write(t),writeErr:t=>f.stderr.write(t),getOutHelpWidth:()=>f.stdout.isTTY?f.stdout.columns:void 0,getErrHelpWidth:()=>f.stderr.isTTY?f.stderr.columns:void 0,outputError:(t,i)=>i(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,i){let s=t,r=i;typeof s=="object"&&s!==null&&(r=s,s=null),r=r||{};let[,o,a]=e.match(/([^ ]+) *(.*)/),l=this.createCommand(o);return s&&(l.description(s),l._executableHandler=!0),r.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(r.noHelp||r.hidden),l._executableFile=r.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),s?this:l}createCommand(e){return new n(e)}createHelp(){return Object.assign(new Di,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
12
12
|
- specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new Ri(e,t)}argument(e,t,i,s){let r=this.createArgument(e,t);return typeof i=="function"?r.default(s).argParser(i):r.default(i),this.addArgument(r),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,i,s]=e.match(/([^ ]+) *(.*)/),r=t??"display help for command",o=this.createCommand(i);return o.helpOption(!1),s&&o.arguments(s),r&&o.description(r),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let i=["preSubcommand","preAction","postAction"];if(!i.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
|
|
13
|
-
Expecting one of '${i.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,i){this._exitCallback&&this._exitCallback(new
|
|
14
|
-
- already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),i=t(e).find(s=>this._findCommand(s));if(i){let s=t(this._findCommand(i)).join("|"),r=t(e).join("|");throw new Error(`cannot add command '${r}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),i=e.attributeName();if(e.negate){let r=e.long.replace(/^--no-/,"--");this._findOption(r)||this.setOptionValueWithSource(i,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(i,e.defaultValue,"default");let s=(r,o,a)=>{r==null&&e.presetArg!==void 0&&(r=e.presetArg);let l=this.getOptionValue(i);r!==null&&e.parseArg?r=this._callParseArg(e,r,l,o):r!==null&&e.variadic&&(r=e._concatValue(r,l)),r==null&&(e.negate?r=!1:e.isBoolean()||e.optional?r=!0:r=""),this.setOptionValueWithSource(i,r,a)};return this.on("option:"+t,r=>{let o=`error: option '${e.flags}' argument '${r}' is invalid.`;s(r,o,"cli")}),e.envVar&&this.on("optionEnv:"+t,r=>{let o=`error: option '${e.flags}' value '${r}' from env '${e.envVar}' is invalid.`;s(r,o,"env")}),this}_optionEx(e,t,i,s,r){if(typeof t=="object"&&t instanceof He)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,i);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(r).argParser(s);else if(s instanceof RegExp){let a=s;s=(l,c)=>{let
|
|
13
|
+
Expecting one of '${i.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,i){this._exitCallback&&this._exitCallback(new be(e,t,i)),f.exit(e)}action(e){let t=i=>{let s=this.registeredArguments.length,r=i.slice(0,s);return this._storeOptionsAsProperties?r[s]=this:r[s]=this.opts(),r.push(this),e.apply(this,r)};return this._actionHandler=t,this}createOption(e,t){return new He(e,t)}_callParseArg(e,t,i,s){try{return e.parseArg(t,i)}catch(r){if(r.code==="commander.invalidArgument"){let o=`${s} ${r.message}`;this.error(o,{exitCode:r.exitCode,code:r.code})}throw r}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let i=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${i}'
|
|
14
|
+
- already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),i=t(e).find(s=>this._findCommand(s));if(i){let s=t(this._findCommand(i)).join("|"),r=t(e).join("|");throw new Error(`cannot add command '${r}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),i=e.attributeName();if(e.negate){let r=e.long.replace(/^--no-/,"--");this._findOption(r)||this.setOptionValueWithSource(i,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(i,e.defaultValue,"default");let s=(r,o,a)=>{r==null&&e.presetArg!==void 0&&(r=e.presetArg);let l=this.getOptionValue(i);r!==null&&e.parseArg?r=this._callParseArg(e,r,l,o):r!==null&&e.variadic&&(r=e._concatValue(r,l)),r==null&&(e.negate?r=!1:e.isBoolean()||e.optional?r=!0:r=""),this.setOptionValueWithSource(i,r,a)};return this.on("option:"+t,r=>{let o=`error: option '${e.flags}' argument '${r}' is invalid.`;s(r,o,"cli")}),e.envVar&&this.on("optionEnv:"+t,r=>{let o=`error: option '${e.flags}' value '${r}' from env '${e.envVar}' is invalid.`;s(r,o,"env")}),this}_optionEx(e,t,i,s,r){if(typeof t=="object"&&t instanceof He)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,i);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(r).argParser(s);else if(s instanceof RegExp){let a=s;s=(l,c)=>{let d=a.exec(l);return d?d[0]:c},o.default(r).argParser(s)}else o.default(s);return this.addOption(o)}option(e,t,i,s){return this._optionEx({},e,t,i,s)}requiredOption(e,t,i,s){return this._optionEx({mandatory:!0},e,t,i,s)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,i){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=i,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(i=>{i.getOptionValueSource(e)!==void 0&&(t=i.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){f.versions?.electron&&(t.from="electron");let s=f.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=f.argv),this.rawArgs=e.slice();let i;switch(t.from){case void 0:case"node":this._scriptPath=e[1],i=e.slice(2);break;case"electron":f.defaultApp?(this._scriptPath=e[1],i=e.slice(2)):i=e.slice(1);break;case"user":i=e.slice(0);break;case"eval":i=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",i}parse(e,t){let i=this._prepareUserArgs(e,t);return this._parseCommand([],i),this}async parseAsync(e,t){let i=this._prepareUserArgs(e,t);return await this._parseCommand([],i),this}_executeSubCommand(e,t){t=t.slice();let i=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function r(d,p){let g=I.resolve(d,p);if(ye.existsSync(g))return g;if(s.includes(I.extname(p)))return;let U=s.find(y=>ye.existsSync(`${g}${y}`));if(U)return`${g}${U}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let d;try{d=ye.realpathSync(this._scriptPath)}catch{d=this._scriptPath}a=I.resolve(I.dirname(d),a)}if(a){let d=r(a,o);if(!d&&!e._executableFile&&this._scriptPath){let p=I.basename(this._scriptPath,I.extname(this._scriptPath));p!==this._name&&(d=r(a,`${p}-${e._name}`))}o=d||o}i=s.includes(I.extname(o));let l;f.platform!=="win32"?i?(t.unshift(o),t=Be(f.execArgv).concat(t),l=ge.spawn(f.argv[0],t,{stdio:"inherit"})):l=ge.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=Be(f.execArgv).concat(t),l=ge.spawn(f.execPath,t,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(p=>{f.on(p,()=>{l.killed===!1&&l.exitCode===null&&l.kill(p)})});let c=this._exitCallback;l.on("close",d=>{d=d??1,c?c(new be(d,"commander.executeSubCommandAsync","(close)")):f.exit(d)}),l.on("error",d=>{if(d.code==="ENOENT"){let p=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",g=`'${o}' does not exist
|
|
15
15
|
- if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
16
16
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
17
|
-
- ${p}`;throw new Error(
|
|
17
|
+
- ${p}`;throw new Error(g)}else if(d.code==="EACCES")throw new Error(`'${o}' not executable`);if(!c)f.exit(1);else{let p=new be(1,"commander.executeSubCommandAsync","(error)");p.nestedError=d,c(p)}}),this.runningCommand=l}_dispatchSubcommand(e,t,i){let s=this._findCommand(e);s||this.help({error:!0});let r;return r=this._chainOrCallSubCommandHook(r,s,"preSubcommand"),r=this._chainOrCall(r,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(i));else return s._parseCommand(t,i)}),r}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(i,s,r)=>{let o=s;if(s!==null&&i.parseArg){let a=`error: command-argument value '${s}' is invalid for argument '${i.name()}'.`;o=this._callParseArg(i,s,r,a)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((i,s)=>{let r=i.defaultValue;i.variadic?s<this.args.length?(r=this.args.slice(s),i.parseArg&&(r=r.reduce((o,a)=>e(i,a,o),i.defaultValue))):r===void 0&&(r=[]):s<this.args.length&&(r=this.args[s],i.parseArg&&(r=e(i,r,i.defaultValue))),t[s]=r}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let i=e,s=[];return this._getCommandAndAncestors().reverse().filter(r=>r._lifeCycleHooks[t]!==void 0).forEach(r=>{r._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:r,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(r=>{i=this._chainOrCall(i,()=>r.callback(r.hookedCommand,this))}),i}_chainOrCallSubCommandHook(e,t,i){let s=e;return this._lifeCycleHooks[i]!==void 0&&this._lifeCycleHooks[i].forEach(r=>{s=this._chainOrCall(s,()=>r(this,t))}),s}_parseCommand(e,t){let i=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(i.operands),t=i.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(i.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{i.unknown.length>0&&this.unknownOption(i.unknown[0])},r=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(r,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(r))s(),this._processArguments(),this.parent.emit(r,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(i=>{let s=i.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(i=>i.conflictsWith.length>0).forEach(i=>{let s=e.find(r=>i.conflictsWith.includes(r.attributeName()));s&&this._conflictingOption(i,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],i=[],s=t,r=e.slice();function o(l){return l.length>1&&l[0]==="-"}let a=null;for(;r.length;){let l=r.shift();if(l==="--"){s===i&&s.push(l),s.push(...r);break}if(a&&!o(l)){this.emit(`option:${a.name()}`,l);continue}if(a=null,o(l)){let c=this._findOption(l);if(c){if(c.required){let d=r.shift();d===void 0&&this.optionMissingArgument(c),this.emit(`option:${c.name()}`,d)}else if(c.optional){let d=null;r.length>0&&!o(r[0])&&(d=r.shift()),this.emit(`option:${c.name()}`,d)}else this.emit(`option:${c.name()}`);a=c.variadic?c:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let c=this._findOption(`-${l[1]}`);if(c){c.required||c.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${c.name()}`,l.slice(2)):(this.emit(`option:${c.name()}`),r.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let c=l.indexOf("="),d=this._findOption(l.slice(0,c));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,l.slice(c+1));continue}}if(o(l)&&(s=i),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&i.length===0){if(this._findCommand(l)){t.push(l),r.length>0&&i.push(...r);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l),r.length>0&&t.push(...r);break}else if(this._defaultCommandName){i.push(l),r.length>0&&i.push(...r);break}}if(this._passThroughOptions){s.push(l),r.length>0&&s.push(...r);break}s.push(l)}return{operands:t,unknown:i}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let i=0;i<t;i++){let s=this.options[i].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
|
|
18
18
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
19
19
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
20
|
-
`),this.outputHelp({error:!0}));let i=t||{},s=i.exitCode||1,r=i.code||"commander.error";this._exit(s,r,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in f.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,f.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Ui(this.options),t=i=>this.getOptionValue(i)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(i));this.options.filter(i=>i.implied!==void 0&&t(i.attributeName())&&e.valueFromOption(this.getOptionValue(i.attributeName()),i)).forEach(i=>{Object.keys(i.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,i.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let i=o=>{let a=o.attributeName(),l=this.getOptionValue(a),c=this.options.find(p=>p.negate&&a===p.attributeName()),
|
|
20
|
+
`),this.outputHelp({error:!0}));let i=t||{},s=i.exitCode||1,r=i.code||"commander.error";this._exit(s,r,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in f.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,f.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Ui(this.options),t=i=>this.getOptionValue(i)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(i));this.options.filter(i=>i.implied!==void 0&&t(i.attributeName())&&e.valueFromOption(this.getOptionValue(i.attributeName()),i)).forEach(i=>{Object.keys(i.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,i.implied[s],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let i=o=>{let a=o.attributeName(),l=this.getOptionValue(a),c=this.options.find(p=>p.negate&&a===p.attributeName()),d=this.options.find(p=>!p.negate&&a===p.attributeName());return c&&(c.presetArg===void 0&&l===!1||c.presetArg!==void 0&&l===c.presetArg)?c:d||o},s=o=>{let a=i(o),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},r=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(r,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],r=this;do{let o=r.createHelp().visibleOptions(r).filter(a=>a.long).map(a=>a.long);s=s.concat(o),r=r.parent}while(r&&!r._enablePositionalOptions);t=Ge(e,s)}let i=`error: unknown option '${e}'${t}`;this.error(i,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,i=t===1?"":"s",r=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${i} but got ${e.length}.`;this.error(r,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(r=>{s.push(r.name()),r.alias()&&s.push(r.alias())}),t=Ge(e,s)}let i=`error: unknown command '${e}'${t}`;this.error(i,{code:"commander.unknownCommand"})}version(e,t,i){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",i=i||"output the version number";let s=this.createOption(t,i);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
21
21
|
`),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let i=this.parent?._findCommand(e);if(i){let s=[i.name()].concat(i.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(i=>Pi(i));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=I.basename(e,I.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},i;return t.error?i=s=>this._outputConfiguration.writeErr(s):i=s=>this._outputConfiguration.writeOut(s),t.write=e.write||i,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let i=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(r=>r.emit("beforeAllHelp",i)),this.emit("beforeHelp",i);let s=this.helpInformation(i);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");i.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",i),this._getCommandAndAncestors().forEach(r=>r.emit("afterAllHelp",i))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=f.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let i=["beforeAll","before","after","afterAll"];if(!i.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
22
22
|
Expecting one of '${i.join("', '")}'`);let s=`${e}Help`;return this.on(s,r=>{let o;typeof t=="function"?o=t({error:r.error,command:r.command}):o=t,o&&r.write(`${o}
|
|
23
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Be(n){return n.map(e=>{if(!e.startsWith("--inspect"))return e;let t,i="127.0.0.1",s="9229",r;return(r=e.match(/^(--inspect(-brk)?)$/))!==null?t=r[1]:(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=r[1],/^\d+$/.test(r[3])?s=r[3]:i=r[3]):(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=r[1],i=r[3],s=r[4]),t&&s!=="0"?`${t}=${i}:${parseInt(s)+1}`:e})}We.Command=ke});var Ke=b(O=>{"use strict";var{Argument:ze}=z(),{Command:Ce}=Je(),{CommanderError:Li,InvalidArgumentError:Ye}=G(),{Help:$i}=ue(),{Option:Qe}=ge();O.program=new Ce;O.createCommand=n=>new Ce(n);O.createOption=(n,e)=>new Qe(n,e);O.createArgument=(n,e)=>new ze(n,e);O.Command=Ce;O.Option=Qe;O.Argument=ze;O.Help=$i;O.CommanderError=Li;O.InvalidArgumentError=Ye;O.InvalidOptionArgumentError=Ye});var at=b((Hn,ot)=>{"use strict";ot.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var ve=b((Gn,ct)=>{"use strict";var B=at(),lt={};for(let n of Object.keys(B))lt[B[n]]=n;var d={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};ct.exports=d;for(let n of Object.keys(d)){if(!("channels"in d[n]))throw new Error("missing channels property: "+n);if(!("labels"in d[n]))throw new Error("missing channel labels property: "+n);if(d[n].labels.length!==d[n].channels)throw new Error("channel and label counts mismatch: "+n);let{channels:e,labels:t}=d[n];delete d[n].channels,delete d[n].labels,Object.defineProperty(d[n],"channels",{value:e}),Object.defineProperty(d[n],"labels",{value:t})}d.rgb.hsl=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.min(e,t,i),r=Math.max(e,t,i),o=r-s,a,l;r===s?a=0:e===r?a=(t-i)/o:t===r?a=2+(i-e)/o:i===r&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(s+r)/2;return r===s?l=0:c<=.5?l=o/(r+s):l=o/(2-r-s),[a,l*100,c*100]};d.rgb.hsv=function(n){let e,t,i,s,r,o=n[0]/255,a=n[1]/255,l=n[2]/255,c=Math.max(o,a,l),h=c-Math.min(o,a,l),p=function(C){return(c-C)/6/h+1/2};return h===0?(s=0,r=0):(r=h/c,e=p(o),t=p(a),i=p(l),o===c?s=i-t:a===c?s=1/3+e-i:l===c&&(s=2/3+t-e),s<0?s+=1:s>1&&(s-=1)),[s*360,r*100,c*100]};d.rgb.hwb=function(n){let e=n[0],t=n[1],i=n[2],s=d.rgb.hsl(n)[0],r=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[s,r*100,i*100]};d.rgb.cmyk=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.min(1-e,1-t,1-i),r=(1-e-s)/(1-s)||0,o=(1-t-s)/(1-s)||0,a=(1-i-s)/(1-s)||0;return[r*100,o*100,a*100,s*100]};function Mi(n,e){return(n[0]-e[0])**2+(n[1]-e[1])**2+(n[2]-e[2])**2}d.rgb.keyword=function(n){let e=lt[n];if(e)return e;let t=1/0,i;for(let s of Object.keys(B)){let r=B[s],o=Mi(n,r);o<t&&(t=o,i=s)}return i};d.keyword.rgb=function(n){return B[n]};d.rgb.xyz=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let s=e*.4124+t*.3576+i*.1805,r=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[s*100,r*100,o*100]};d.rgb.lab=function(n){let e=d.rgb.xyz(n),t=e[0],i=e[1],s=e[2];t/=95.047,i/=100,s/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let r=116*i-16,o=500*(t-i),a=200*(i-s);return[r,o,a]};d.hsl.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100,s,r,o;if(t===0)return o=i*255,[o,o,o];i<.5?s=i*(1+t):s=i+t-i*t;let a=2*i-s,l=[0,0,0];for(let c=0;c<3;c++)r=e+1/3*-(c-1),r<0&&r++,r>1&&r--,6*r<1?o=a+(s-a)*6*r:2*r<1?o=s:3*r<2?o=a+(s-a)*(2/3-r)*6:o=a,l[c]=o*255;return l};d.hsl.hsv=function(n){let e=n[0],t=n[1]/100,i=n[2]/100,s=t,r=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,s*=r<=1?r:2-r;let o=(i+t)/2,a=i===0?2*s/(r+s):2*t/(i+t);return[e,a*100,o*100]};d.hsv.rgb=function(n){let e=n[0]/60,t=n[1]/100,i=n[2]/100,s=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*r),l=255*i*(1-t*(1-r));switch(i*=255,s){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};d.hsv.hsl=function(n){let e=n[0],t=n[1]/100,i=n[2]/100,s=Math.max(i,.01),r,o;o=(2-t)*i;let a=(2-t)*s;return r=t*s,r/=a<=1?a:2-a,r=r||0,o/=2,[e,r*100,o*100]};d.hwb.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100,s=t+i,r;s>1&&(t/=s,i/=s);let o=Math.floor(6*e),a=1-i;r=6*e-o,(o&1)!==0&&(r=1-r);let l=t+r*(a-t),c,h,p;switch(o){default:case 6:case 0:c=a,h=l,p=t;break;case 1:c=l,h=a,p=t;break;case 2:c=t,h=a,p=l;break;case 3:c=t,h=l,p=a;break;case 4:c=l,h=t,p=a;break;case 5:c=a,h=t,p=l;break}return[c*255,h*255,p*255]};d.cmyk.rgb=function(n){let e=n[0]/100,t=n[1]/100,i=n[2]/100,s=n[3]/100,r=1-Math.min(1,e*(1-s)+s),o=1-Math.min(1,t*(1-s)+s),a=1-Math.min(1,i*(1-s)+s);return[r*255,o*255,a*255]};d.xyz.rgb=function(n){let e=n[0]/100,t=n[1]/100,i=n[2]/100,s,r,o;return s=e*3.2406+t*-1.5372+i*-.4986,r=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,r=r>.0031308?1.055*r**(1/2.4)-.055:r*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,s=Math.min(Math.max(0,s),1),r=Math.min(Math.max(0,r),1),o=Math.min(Math.max(0,o),1),[s*255,r*255,o*255]};d.xyz.lab=function(n){let e=n[0],t=n[1],i=n[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*t-16,r=500*(e-t),o=200*(t-i);return[s,r,o]};d.lab.xyz=function(n){let e=n[0],t=n[1],i=n[2],s,r,o;r=(e+16)/116,s=t/500+r,o=r-i/200;let a=r**3,l=s**3,c=o**3;return r=a>.008856?a:(r-16/116)/7.787,s=l>.008856?l:(s-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,s*=95.047,r*=100,o*=108.883,[s,r,o]};d.lab.lch=function(n){let e=n[0],t=n[1],i=n[2],s;s=Math.atan2(i,t)*360/2/Math.PI,s<0&&(s+=360);let o=Math.sqrt(t*t+i*i);return[e,o,s]};d.lch.lab=function(n){let e=n[0],t=n[1],s=n[2]/360*2*Math.PI,r=t*Math.cos(s),o=t*Math.sin(s);return[e,r,o]};d.rgb.ansi16=function(n,e=null){let[t,i,s]=n,r=e===null?d.rgb.hsv(n)[2]:e;if(r=Math.round(r/50),r===0)return 30;let o=30+(Math.round(s/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return r===2&&(o+=60),o};d.hsv.ansi16=function(n){return d.rgb.ansi16(d.hsv.rgb(n),n[2])};d.rgb.ansi256=function(n){let e=n[0],t=n[1],i=n[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};d.ansi16.rgb=function(n){let e=n%10;if(e===0||e===7)return n>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(n>50)+1)*.5,i=(e&1)*t*255,s=(e>>1&1)*t*255,r=(e>>2&1)*t*255;return[i,s,r]};d.ansi256.rgb=function(n){if(n>=232){let r=(n-232)*10+8;return[r,r,r]}n-=16;let e,t=Math.floor(n/36)/5*255,i=Math.floor((e=n%36)/6)/5*255,s=e%6/5*255;return[t,i,s]};d.rgb.hex=function(n){let t=(((Math.round(n[0])&255)<<16)+((Math.round(n[1])&255)<<8)+(Math.round(n[2])&255)).toString(16).toUpperCase();return"000000".substring(t.length)+t};d.hex.rgb=function(n){let e=n.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split("").map(a=>a+a).join(""));let i=parseInt(t,16),s=i>>16&255,r=i>>8&255,o=i&255;return[s,r,o]};d.rgb.hcg=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.max(Math.max(e,t),i),r=Math.min(Math.min(e,t),i),o=s-r,a,l;return o<1?a=r/(1-o):a=0,o<=0?l=0:s===e?l=(t-i)/o%6:s===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};d.hsl.hcg=function(n){let e=n[1]/100,t=n[2]/100,i=t<.5?2*e*t:2*e*(1-t),s=0;return i<1&&(s=(t-.5*i)/(1-i)),[n[0],i*100,s*100]};d.hsv.hcg=function(n){let e=n[1]/100,t=n[2]/100,i=e*t,s=0;return i<1&&(s=(t-i)/(1-i)),[n[0],i*100,s*100]};d.hcg.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100;if(t===0)return[i*255,i*255,i*255];let s=[0,0,0],r=e%1*6,o=r%1,a=1-o,l=0;switch(Math.floor(r)){case 0:s[0]=1,s[1]=o,s[2]=0;break;case 1:s[0]=a,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=o;break;case 3:s[0]=0,s[1]=a,s[2]=1;break;case 4:s[0]=o,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=a}return l=(1-t)*i,[(t*s[0]+l)*255,(t*s[1]+l)*255,(t*s[2]+l)*255]};d.hcg.hsv=function(n){let e=n[1]/100,t=n[2]/100,i=e+t*(1-e),s=0;return i>0&&(s=e/i),[n[0],s*100,i*100]};d.hcg.hsl=function(n){let e=n[1]/100,i=n[2]/100*(1-e)+.5*e,s=0;return i>0&&i<.5?s=e/(2*i):i>=.5&&i<1&&(s=e/(2*(1-i))),[n[0],s*100,i*100]};d.hcg.hwb=function(n){let e=n[1]/100,t=n[2]/100,i=e+t*(1-e);return[n[0],(i-e)*100,(1-i)*100]};d.hwb.hcg=function(n){let e=n[1]/100,i=1-n[2]/100,s=i-e,r=0;return s<1&&(r=(i-s)/(1-s)),[n[0],s*100,r*100]};d.apple.rgb=function(n){return[n[0]/65535*255,n[1]/65535*255,n[2]/65535*255]};d.rgb.apple=function(n){return[n[0]/255*65535,n[1]/255*65535,n[2]/255*65535]};d.gray.rgb=function(n){return[n[0]/100*255,n[0]/100*255,n[0]/100*255]};d.gray.hsl=function(n){return[0,0,n[0]]};d.gray.hsv=d.gray.hsl;d.gray.hwb=function(n){return[0,100,n[0]]};d.gray.cmyk=function(n){return[0,0,0,n[0]]};d.gray.lab=function(n){return[n[0],0,0]};d.gray.hex=function(n){let e=Math.round(n[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(i.length)+i};d.rgb.gray=function(n){return[(n[0]+n[1]+n[2])/3/255*100]}});var ht=b((Bn,dt)=>{"use strict";var Y=ve();function Fi(){let n={},e=Object.keys(Y);for(let t=e.length,i=0;i<t;i++)n[e[i]]={distance:-1,parent:null};return n}function ji(n){let e=Fi(),t=[n];for(e[n].distance=0;t.length;){let i=t.pop(),s=Object.keys(Y[i]);for(let r=s.length,o=0;o<r;o++){let a=s[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Vi(n,e){return function(t){return e(n(t))}}function Hi(n,e){let t=[e[n].parent,n],i=Y[e[n].parent][n],s=e[n].parent;for(;e[s].parent;)t.unshift(e[s].parent),i=Vi(Y[e[s].parent][s],i),s=e[s].parent;return i.conversion=t,i}dt.exports=function(n){let e=ji(n),t={},i=Object.keys(e);for(let s=i.length,r=0;r<s;r++){let o=i[r];e[o].parent!==null&&(t[o]=Hi(o,e))}return t}});var pt=b((Wn,ut)=>{"use strict";var _e=ve(),Gi=ht(),M={},Bi=Object.keys(_e);function Wi(n){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),n(t))};return"conversion"in n&&(e.conversion=n.conversion),e}function Ji(n){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let s=n(t);if(typeof s=="object")for(let r=s.length,o=0;o<r;o++)s[o]=Math.round(s[o]);return s};return"conversion"in n&&(e.conversion=n.conversion),e}Bi.forEach(n=>{M[n]={},Object.defineProperty(M[n],"channels",{value:_e[n].channels}),Object.defineProperty(M[n],"labels",{value:_e[n].labels});let e=Gi(n);Object.keys(e).forEach(i=>{let s=e[i];M[n][i]=Ji(s),M[n][i].raw=Wi(s)})});ut.exports=M});var wt=b((Jn,bt)=>{"use strict";var mt=(n,e)=>(...t)=>`\x1B[${n(...t)+e}m`,ft=(n,e)=>(...t)=>{let i=n(...t);return`\x1B[${38+e};5;${i}m`},gt=(n,e)=>(...t)=>{let i=n(...t);return`\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},Q=n=>n,yt=(n,e,t)=>[n,e,t],F=(n,e,t)=>{Object.defineProperty(n,e,{get:()=>{let i=t();return Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},Ae,j=(n,e,t,i)=>{Ae===void 0&&(Ae=pt());let s=i?10:0,r={};for(let[o,a]of Object.entries(Ae)){let l=o==="ansi16"?"ansi":o;o===e?r[l]=n(t,s):typeof a=="object"&&(r[l]=n(a[e],s))}return r};function zi(){let n=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[s,r]of Object.entries(i))e[s]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},i[s]=e[s],n.set(r[0],r[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,"codes",{value:n,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",F(e.color,"ansi",()=>j(mt,"ansi16",Q,!1)),F(e.color,"ansi256",()=>j(ft,"ansi256",Q,!1)),F(e.color,"ansi16m",()=>j(gt,"rgb",yt,!1)),F(e.bgColor,"ansi",()=>j(mt,"ansi16",Q,!0)),F(e.bgColor,"ansi256",()=>j(ft,"ansi256",Q,!0)),F(e.bgColor,"ansi16m",()=>j(gt,"rgb",yt,!0)),e}Object.defineProperty(bt,"exports",{enumerable:!0,get:zi})});var Ct=b((zn,kt)=>{"use strict";kt.exports=(n,e=process.argv)=>{let t=n.startsWith("-")?"":n.length===1?"-":"--",i=e.indexOf(t+n),s=e.indexOf("--");return i!==-1&&(s===-1||i<s)}});var At=b((Yn,_t)=>{"use strict";var Yi=require("os"),vt=require("tty"),S=Ct(),{env:y}=process,R;S("no-color")||S("no-colors")||S("color=false")||S("color=never")?R=0:(S("color")||S("colors")||S("color=true")||S("color=always"))&&(R=1);"FORCE_COLOR"in y&&(y.FORCE_COLOR==="true"?R=1:y.FORCE_COLOR==="false"?R=0:R=y.FORCE_COLOR.length===0?1:Math.min(parseInt(y.FORCE_COLOR,10),3));function Oe(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function Se(n,e){if(R===0)return 0;if(S("color=16m")||S("color=full")||S("color=truecolor"))return 3;if(S("color=256"))return 2;if(n&&!e&&R===void 0)return 0;let t=R||0;if(y.TERM==="dumb")return t;if(process.platform==="win32"){let i=Yi.release().split(".");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if("CI"in y)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(i=>i in y)||y.CI_NAME==="codeship"?1:t;if("TEAMCITY_VERSION"in y)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(y.TEAMCITY_VERSION)?1:0;if(y.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in y){let i=parseInt((y.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(y.TERM_PROGRAM){case"iTerm.app":return i>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(y.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(y.TERM)||"COLORTERM"in y?1:t}function Qi(n){let e=Se(n,n&&n.isTTY);return Oe(e)}_t.exports={supportsColor:Qi,stdout:Oe(Se(!0,vt.isatty(1))),stderr:Oe(Se(!0,vt.isatty(2)))}});var St=b((Qn,Ot)=>{"use strict";var Ki=(n,e,t)=>{let i=n.indexOf(e);if(i===-1)return n;let s=e.length,r=0,o="";do o+=n.substr(r,i-r)+e+t,r=i+s,i=n.indexOf(e,r);while(i!==-1);return o+=n.substr(r),o},Xi=(n,e,t,i)=>{let s=0,r="";do{let o=n[i-1]==="\r";r+=n.substr(s,(o?i-1:i)-s)+e+(o?`\r
|
|
23
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Be(n){return n.map(e=>{if(!e.startsWith("--inspect"))return e;let t,i="127.0.0.1",s="9229",r;return(r=e.match(/^(--inspect(-brk)?)$/))!==null?t=r[1]:(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=r[1],/^\d+$/.test(r[3])?s=r[3]:i=r[3]):(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=r[1],i=r[3],s=r[4]),t&&s!=="0"?`${t}=${i}:${parseInt(s)+1}`:e})}We.Command=we});var Ke=w(S=>{"use strict";var{Argument:ze}=z(),{Command:ke}=Je(),{CommanderError:Li,InvalidArgumentError:Ye}=G(),{Help:$i}=he(),{Option:Qe}=fe();S.program=new ke;S.createCommand=n=>new ke(n);S.createOption=(n,e)=>new Qe(n,e);S.createArgument=(n,e)=>new ze(n,e);S.Command=ke;S.Option=Qe;S.Argument=ze;S.Help=$i;S.CommanderError=Li;S.InvalidArgumentError=Ye;S.InvalidOptionArgumentError=Ye});var at=w((Hn,ot)=>{"use strict";ot.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var Ce=w((Gn,ct)=>{"use strict";var B=at(),lt={};for(let n of Object.keys(B))lt[B[n]]=n;var h={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};ct.exports=h;for(let n of Object.keys(h)){if(!("channels"in h[n]))throw new Error("missing channels property: "+n);if(!("labels"in h[n]))throw new Error("missing channel labels property: "+n);if(h[n].labels.length!==h[n].channels)throw new Error("channel and label counts mismatch: "+n);let{channels:e,labels:t}=h[n];delete h[n].channels,delete h[n].labels,Object.defineProperty(h[n],"channels",{value:e}),Object.defineProperty(h[n],"labels",{value:t})}h.rgb.hsl=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.min(e,t,i),r=Math.max(e,t,i),o=r-s,a,l;r===s?a=0:e===r?a=(t-i)/o:t===r?a=2+(i-e)/o:i===r&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(s+r)/2;return r===s?l=0:c<=.5?l=o/(r+s):l=o/(2-r-s),[a,l*100,c*100]};h.rgb.hsv=function(n){let e,t,i,s,r,o=n[0]/255,a=n[1]/255,l=n[2]/255,c=Math.max(o,a,l),d=c-Math.min(o,a,l),p=function(g){return(c-g)/6/d+1/2};return d===0?(s=0,r=0):(r=d/c,e=p(o),t=p(a),i=p(l),o===c?s=i-t:a===c?s=1/3+e-i:l===c&&(s=2/3+t-e),s<0?s+=1:s>1&&(s-=1)),[s*360,r*100,c*100]};h.rgb.hwb=function(n){let e=n[0],t=n[1],i=n[2],s=h.rgb.hsl(n)[0],r=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[s,r*100,i*100]};h.rgb.cmyk=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.min(1-e,1-t,1-i),r=(1-e-s)/(1-s)||0,o=(1-t-s)/(1-s)||0,a=(1-i-s)/(1-s)||0;return[r*100,o*100,a*100,s*100]};function Mi(n,e){return(n[0]-e[0])**2+(n[1]-e[1])**2+(n[2]-e[2])**2}h.rgb.keyword=function(n){let e=lt[n];if(e)return e;let t=1/0,i;for(let s of Object.keys(B)){let r=B[s],o=Mi(n,r);o<t&&(t=o,i=s)}return i};h.keyword.rgb=function(n){return B[n]};h.rgb.xyz=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let s=e*.4124+t*.3576+i*.1805,r=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[s*100,r*100,o*100]};h.rgb.lab=function(n){let e=h.rgb.xyz(n),t=e[0],i=e[1],s=e[2];t/=95.047,i/=100,s/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let r=116*i-16,o=500*(t-i),a=200*(i-s);return[r,o,a]};h.hsl.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100,s,r,o;if(t===0)return o=i*255,[o,o,o];i<.5?s=i*(1+t):s=i+t-i*t;let a=2*i-s,l=[0,0,0];for(let c=0;c<3;c++)r=e+1/3*-(c-1),r<0&&r++,r>1&&r--,6*r<1?o=a+(s-a)*6*r:2*r<1?o=s:3*r<2?o=a+(s-a)*(2/3-r)*6:o=a,l[c]=o*255;return l};h.hsl.hsv=function(n){let e=n[0],t=n[1]/100,i=n[2]/100,s=t,r=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,s*=r<=1?r:2-r;let o=(i+t)/2,a=i===0?2*s/(r+s):2*t/(i+t);return[e,a*100,o*100]};h.hsv.rgb=function(n){let e=n[0]/60,t=n[1]/100,i=n[2]/100,s=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*r),l=255*i*(1-t*(1-r));switch(i*=255,s){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};h.hsv.hsl=function(n){let e=n[0],t=n[1]/100,i=n[2]/100,s=Math.max(i,.01),r,o;o=(2-t)*i;let a=(2-t)*s;return r=t*s,r/=a<=1?a:2-a,r=r||0,o/=2,[e,r*100,o*100]};h.hwb.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100,s=t+i,r;s>1&&(t/=s,i/=s);let o=Math.floor(6*e),a=1-i;r=6*e-o,(o&1)!==0&&(r=1-r);let l=t+r*(a-t),c,d,p;switch(o){default:case 6:case 0:c=a,d=l,p=t;break;case 1:c=l,d=a,p=t;break;case 2:c=t,d=a,p=l;break;case 3:c=t,d=l,p=a;break;case 4:c=l,d=t,p=a;break;case 5:c=a,d=t,p=l;break}return[c*255,d*255,p*255]};h.cmyk.rgb=function(n){let e=n[0]/100,t=n[1]/100,i=n[2]/100,s=n[3]/100,r=1-Math.min(1,e*(1-s)+s),o=1-Math.min(1,t*(1-s)+s),a=1-Math.min(1,i*(1-s)+s);return[r*255,o*255,a*255]};h.xyz.rgb=function(n){let e=n[0]/100,t=n[1]/100,i=n[2]/100,s,r,o;return s=e*3.2406+t*-1.5372+i*-.4986,r=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,r=r>.0031308?1.055*r**(1/2.4)-.055:r*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,s=Math.min(Math.max(0,s),1),r=Math.min(Math.max(0,r),1),o=Math.min(Math.max(0,o),1),[s*255,r*255,o*255]};h.xyz.lab=function(n){let e=n[0],t=n[1],i=n[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*t-16,r=500*(e-t),o=200*(t-i);return[s,r,o]};h.lab.xyz=function(n){let e=n[0],t=n[1],i=n[2],s,r,o;r=(e+16)/116,s=t/500+r,o=r-i/200;let a=r**3,l=s**3,c=o**3;return r=a>.008856?a:(r-16/116)/7.787,s=l>.008856?l:(s-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,s*=95.047,r*=100,o*=108.883,[s,r,o]};h.lab.lch=function(n){let e=n[0],t=n[1],i=n[2],s;s=Math.atan2(i,t)*360/2/Math.PI,s<0&&(s+=360);let o=Math.sqrt(t*t+i*i);return[e,o,s]};h.lch.lab=function(n){let e=n[0],t=n[1],s=n[2]/360*2*Math.PI,r=t*Math.cos(s),o=t*Math.sin(s);return[e,r,o]};h.rgb.ansi16=function(n,e=null){let[t,i,s]=n,r=e===null?h.rgb.hsv(n)[2]:e;if(r=Math.round(r/50),r===0)return 30;let o=30+(Math.round(s/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return r===2&&(o+=60),o};h.hsv.ansi16=function(n){return h.rgb.ansi16(h.hsv.rgb(n),n[2])};h.rgb.ansi256=function(n){let e=n[0],t=n[1],i=n[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};h.ansi16.rgb=function(n){let e=n%10;if(e===0||e===7)return n>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(n>50)+1)*.5,i=(e&1)*t*255,s=(e>>1&1)*t*255,r=(e>>2&1)*t*255;return[i,s,r]};h.ansi256.rgb=function(n){if(n>=232){let r=(n-232)*10+8;return[r,r,r]}n-=16;let e,t=Math.floor(n/36)/5*255,i=Math.floor((e=n%36)/6)/5*255,s=e%6/5*255;return[t,i,s]};h.rgb.hex=function(n){let t=(((Math.round(n[0])&255)<<16)+((Math.round(n[1])&255)<<8)+(Math.round(n[2])&255)).toString(16).toUpperCase();return"000000".substring(t.length)+t};h.hex.rgb=function(n){let e=n.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split("").map(a=>a+a).join(""));let i=parseInt(t,16),s=i>>16&255,r=i>>8&255,o=i&255;return[s,r,o]};h.rgb.hcg=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.max(Math.max(e,t),i),r=Math.min(Math.min(e,t),i),o=s-r,a,l;return o<1?a=r/(1-o):a=0,o<=0?l=0:s===e?l=(t-i)/o%6:s===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};h.hsl.hcg=function(n){let e=n[1]/100,t=n[2]/100,i=t<.5?2*e*t:2*e*(1-t),s=0;return i<1&&(s=(t-.5*i)/(1-i)),[n[0],i*100,s*100]};h.hsv.hcg=function(n){let e=n[1]/100,t=n[2]/100,i=e*t,s=0;return i<1&&(s=(t-i)/(1-i)),[n[0],i*100,s*100]};h.hcg.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100;if(t===0)return[i*255,i*255,i*255];let s=[0,0,0],r=e%1*6,o=r%1,a=1-o,l=0;switch(Math.floor(r)){case 0:s[0]=1,s[1]=o,s[2]=0;break;case 1:s[0]=a,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=o;break;case 3:s[0]=0,s[1]=a,s[2]=1;break;case 4:s[0]=o,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=a}return l=(1-t)*i,[(t*s[0]+l)*255,(t*s[1]+l)*255,(t*s[2]+l)*255]};h.hcg.hsv=function(n){let e=n[1]/100,t=n[2]/100,i=e+t*(1-e),s=0;return i>0&&(s=e/i),[n[0],s*100,i*100]};h.hcg.hsl=function(n){let e=n[1]/100,i=n[2]/100*(1-e)+.5*e,s=0;return i>0&&i<.5?s=e/(2*i):i>=.5&&i<1&&(s=e/(2*(1-i))),[n[0],s*100,i*100]};h.hcg.hwb=function(n){let e=n[1]/100,t=n[2]/100,i=e+t*(1-e);return[n[0],(i-e)*100,(1-i)*100]};h.hwb.hcg=function(n){let e=n[1]/100,i=1-n[2]/100,s=i-e,r=0;return s<1&&(r=(i-s)/(1-s)),[n[0],s*100,r*100]};h.apple.rgb=function(n){return[n[0]/65535*255,n[1]/65535*255,n[2]/65535*255]};h.rgb.apple=function(n){return[n[0]/255*65535,n[1]/255*65535,n[2]/255*65535]};h.gray.rgb=function(n){return[n[0]/100*255,n[0]/100*255,n[0]/100*255]};h.gray.hsl=function(n){return[0,0,n[0]]};h.gray.hsv=h.gray.hsl;h.gray.hwb=function(n){return[0,100,n[0]]};h.gray.cmyk=function(n){return[0,0,0,n[0]]};h.gray.lab=function(n){return[n[0],0,0]};h.gray.hex=function(n){let e=Math.round(n[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(i.length)+i};h.rgb.gray=function(n){return[(n[0]+n[1]+n[2])/3/255*100]}});var ht=w((Bn,dt)=>{"use strict";var Y=Ce();function Fi(){let n={},e=Object.keys(Y);for(let t=e.length,i=0;i<t;i++)n[e[i]]={distance:-1,parent:null};return n}function ji(n){let e=Fi(),t=[n];for(e[n].distance=0;t.length;){let i=t.pop(),s=Object.keys(Y[i]);for(let r=s.length,o=0;o<r;o++){let a=s[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Vi(n,e){return function(t){return e(n(t))}}function Hi(n,e){let t=[e[n].parent,n],i=Y[e[n].parent][n],s=e[n].parent;for(;e[s].parent;)t.unshift(e[s].parent),i=Vi(Y[e[s].parent][s],i),s=e[s].parent;return i.conversion=t,i}dt.exports=function(n){let e=ji(n),t={},i=Object.keys(e);for(let s=i.length,r=0;r<s;r++){let o=i[r];e[o].parent!==null&&(t[o]=Hi(o,e))}return t}});var pt=w((Wn,ut)=>{"use strict";var ve=Ce(),Gi=ht(),M={},Bi=Object.keys(ve);function Wi(n){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),n(t))};return"conversion"in n&&(e.conversion=n.conversion),e}function Ji(n){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let s=n(t);if(typeof s=="object")for(let r=s.length,o=0;o<r;o++)s[o]=Math.round(s[o]);return s};return"conversion"in n&&(e.conversion=n.conversion),e}Bi.forEach(n=>{M[n]={},Object.defineProperty(M[n],"channels",{value:ve[n].channels}),Object.defineProperty(M[n],"labels",{value:ve[n].labels});let e=Gi(n);Object.keys(e).forEach(i=>{let s=e[i];M[n][i]=Ji(s),M[n][i].raw=Wi(s)})});ut.exports=M});var wt=w((Jn,bt)=>{"use strict";var mt=(n,e)=>(...t)=>`\x1B[${n(...t)+e}m`,ft=(n,e)=>(...t)=>{let i=n(...t);return`\x1B[${38+e};5;${i}m`},gt=(n,e)=>(...t)=>{let i=n(...t);return`\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},Q=n=>n,yt=(n,e,t)=>[n,e,t],F=(n,e,t)=>{Object.defineProperty(n,e,{get:()=>{let i=t();return Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},_e,j=(n,e,t,i)=>{_e===void 0&&(_e=pt());let s=i?10:0,r={};for(let[o,a]of Object.entries(_e)){let l=o==="ansi16"?"ansi":o;o===e?r[l]=n(t,s):typeof a=="object"&&(r[l]=n(a[e],s))}return r};function zi(){let n=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[s,r]of Object.entries(i))e[s]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},i[s]=e[s],n.set(r[0],r[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,"codes",{value:n,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",F(e.color,"ansi",()=>j(mt,"ansi16",Q,!1)),F(e.color,"ansi256",()=>j(ft,"ansi256",Q,!1)),F(e.color,"ansi16m",()=>j(gt,"rgb",yt,!1)),F(e.bgColor,"ansi",()=>j(mt,"ansi16",Q,!0)),F(e.bgColor,"ansi256",()=>j(ft,"ansi256",Q,!0)),F(e.bgColor,"ansi16m",()=>j(gt,"rgb",yt,!0)),e}Object.defineProperty(bt,"exports",{enumerable:!0,get:zi})});var Ct=w((zn,kt)=>{"use strict";kt.exports=(n,e=process.argv)=>{let t=n.startsWith("-")?"":n.length===1?"-":"--",i=e.indexOf(t+n),s=e.indexOf("--");return i!==-1&&(s===-1||i<s)}});var At=w((Yn,_t)=>{"use strict";var Yi=require("os"),vt=require("tty"),x=Ct(),{env:b}=process,R;x("no-color")||x("no-colors")||x("color=false")||x("color=never")?R=0:(x("color")||x("colors")||x("color=true")||x("color=always"))&&(R=1);"FORCE_COLOR"in b&&(b.FORCE_COLOR==="true"?R=1:b.FORCE_COLOR==="false"?R=0:R=b.FORCE_COLOR.length===0?1:Math.min(parseInt(b.FORCE_COLOR,10),3));function Ae(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function Oe(n,e){if(R===0)return 0;if(x("color=16m")||x("color=full")||x("color=truecolor"))return 3;if(x("color=256"))return 2;if(n&&!e&&R===void 0)return 0;let t=R||0;if(b.TERM==="dumb")return t;if(process.platform==="win32"){let i=Yi.release().split(".");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if("CI"in b)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(i=>i in b)||b.CI_NAME==="codeship"?1:t;if("TEAMCITY_VERSION"in b)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(b.TEAMCITY_VERSION)?1:0;if(b.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in b){let i=parseInt((b.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(b.TERM_PROGRAM){case"iTerm.app":return i>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(b.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(b.TERM)||"COLORTERM"in b?1:t}function Qi(n){let e=Oe(n,n&&n.isTTY);return Ae(e)}_t.exports={supportsColor:Qi,stdout:Ae(Oe(!0,vt.isatty(1))),stderr:Ae(Oe(!0,vt.isatty(2)))}});var St=w((Qn,Ot)=>{"use strict";var Ki=(n,e,t)=>{let i=n.indexOf(e);if(i===-1)return n;let s=e.length,r=0,o="";do o+=n.substr(r,i-r)+e+t,r=i+s,i=n.indexOf(e,r);while(i!==-1);return o+=n.substr(r),o},Xi=(n,e,t,i)=>{let s=0,r="";do{let o=n[i-1]==="\r";r+=n.substr(s,(o?i-1:i)-s)+e+(o?`\r
|
|
24
24
|
`:`
|
|
25
25
|
`)+t,s=i+1,i=n.indexOf(`
|
|
26
|
-
`,s)}while(i!==-1);return r+=n.substr(s),r};Ot.exports={stringReplaceAll:Ki,stringEncaseCRLFWithFirstIndex:Xi}});var Tt=
|
|
27
|
-
`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function Et(n){let e=n[0]==="u",t=n[1]==="{";return e&&!t&&n.length===5||n[0]==="x"&&n.length===3?String.fromCharCode(parseInt(n.slice(1),16)):e&&t?String.fromCodePoint(parseInt(n.slice(2,-1),16)):nn.get(n)||n}function sn(n,e){let t=[],i=e.trim().split(/\s*,\s*/g),s;for(let r of i){let o=Number(r);if(!Number.isNaN(o))t.push(o);else if(s=r.match(en))t.push(s[2].replace(tn,(a,l,c)=>l?Et(l):c));else throw new Error(`Invalid Chalk template style argument: ${r} (in style '${n}')`)}return t}function rn(n){xt.lastIndex=0;let e=[],t;for(;(t=xt.exec(n))!==null;){let i=t[1];if(t[2]){let s=sn(i,t[2]);e.push([i].concat(s))}else e.push([i])}return e}function It(n,e){let t={};for(let s of e)for(let r of s.styles)t[r[0]]=s.inverse?null:r.slice(1);let i=n;for(let[s,r]of Object.entries(t))if(Array.isArray(r)){if(!(s in i))throw new Error(`Unknown Chalk style: ${s}`);i=r.length>0?i[s](...r):i[s]}return i}qt.exports=(n,e)=>{let t=[],i=[],s=[];if(e.replace(Zi,(r,o,a,l,c,
|
|
28
|
-
`);return r!==-1&&(e=an(e,s,i,r)),i+e+s},
|
|
26
|
+
`,s)}while(i!==-1);return r+=n.substr(s),r};Ot.exports={stringReplaceAll:Ki,stringEncaseCRLFWithFirstIndex:Xi}});var Tt=w((Kn,qt)=>{"use strict";var Zi=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,xt=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,en=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,tn=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,nn=new Map([["n",`
|
|
27
|
+
`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function Et(n){let e=n[0]==="u",t=n[1]==="{";return e&&!t&&n.length===5||n[0]==="x"&&n.length===3?String.fromCharCode(parseInt(n.slice(1),16)):e&&t?String.fromCodePoint(parseInt(n.slice(2,-1),16)):nn.get(n)||n}function sn(n,e){let t=[],i=e.trim().split(/\s*,\s*/g),s;for(let r of i){let o=Number(r);if(!Number.isNaN(o))t.push(o);else if(s=r.match(en))t.push(s[2].replace(tn,(a,l,c)=>l?Et(l):c));else throw new Error(`Invalid Chalk template style argument: ${r} (in style '${n}')`)}return t}function rn(n){xt.lastIndex=0;let e=[],t;for(;(t=xt.exec(n))!==null;){let i=t[1];if(t[2]){let s=sn(i,t[2]);e.push([i].concat(s))}else e.push([i])}return e}function It(n,e){let t={};for(let s of e)for(let r of s.styles)t[r[0]]=s.inverse?null:r.slice(1);let i=n;for(let[s,r]of Object.entries(t))if(Array.isArray(r)){if(!(s in i))throw new Error(`Unknown Chalk style: ${s}`);i=r.length>0?i[s](...r):i[s]}return i}qt.exports=(n,e)=>{let t=[],i=[],s=[];if(e.replace(Zi,(r,o,a,l,c,d)=>{if(o)s.push(Et(o));else if(l){let p=s.join("");s=[],i.push(t.length===0?p:It(n,t)(p)),t.push({inverse:a,styles:rn(l)})}else if(c){if(t.length===0)throw new Error("Found extraneous } in Chalk template literal");i.push(It(n,t)(s.join(""))),s=[],t.pop()}else s.push(d)}),i.push(s.join("")),t.length>0){let r=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?"":"s"} (\`}\`)`;throw new Error(r)}return i.join("")}});var $t=w((Xn,Lt)=>{"use strict";var W=wt(),{stdout:xe,stderr:Ie}=At(),{stringReplaceAll:on,stringEncaseCRLFWithFirstIndex:an}=St(),{isArray:K}=Array,Rt=["ansi","ansi","ansi256","ansi16m"],V=Object.create(null),ln=(n,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=xe?xe.level:0;n.level=e.level===void 0?t:e.level},Ee=class{constructor(e){return Pt(e)}},Pt=n=>{let e={};return ln(e,n),e.template=(...t)=>Ut(e.template,...t),Object.setPrototypeOf(e,X.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=Ee,e.template};function X(n){return Pt(n)}for(let[n,e]of Object.entries(W))V[n]={get(){let t=Z(this,qe(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,n,{value:t}),t}};V.visible={get(){let n=Z(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:n}),n}};var Dt=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let n of Dt)V[n]={get(){let{level:e}=this;return function(...t){let i=qe(W.color[Rt[e]][n](...t),W.color.close,this._styler);return Z(this,i,this._isEmpty)}}};for(let n of Dt){let e="bg"+n[0].toUpperCase()+n.slice(1);V[e]={get(){let{level:t}=this;return function(...i){let s=qe(W.bgColor[Rt[t]][n](...i),W.bgColor.close,this._styler);return Z(this,s,this._isEmpty)}}}}var cn=Object.defineProperties(()=>{},{...V,level:{enumerable:!0,get(){return this._generator.level},set(n){this._generator.level=n}}}),qe=(n,e,t)=>{let i,s;return t===void 0?(i=n,s=e):(i=t.openAll+n,s=e+t.closeAll),{open:n,close:e,openAll:i,closeAll:s,parent:t}},Z=(n,e,t)=>{let i=(...s)=>K(s[0])&&K(s[0].raw)?Nt(i,Ut(i,...s)):Nt(i,s.length===1?""+s[0]:s.join(" "));return Object.setPrototypeOf(i,cn),i._generator=n,i._styler=e,i._isEmpty=t,i},Nt=(n,e)=>{if(n.level<=0||!e)return n._isEmpty?"":e;let t=n._styler;if(t===void 0)return e;let{openAll:i,closeAll:s}=t;if(e.indexOf("\x1B")!==-1)for(;t!==void 0;)e=on(e,t.close,t.open),t=t.parent;let r=e.indexOf(`
|
|
28
|
+
`);return r!==-1&&(e=an(e,s,i,r)),i+e+s},Se,Ut=(n,...e)=>{let[t]=e;if(!K(t)||!K(t.raw))return e.join(" ");let i=e.slice(1),s=[t.raw[0]];for(let r=1;r<t.length;r++)s.push(String(i[r-1]).replace(/[{}\\]/g,"\\$&"),String(t.raw[r]));return Se===void 0&&(Se=Tt()),Se(n,s.join(""))};Object.defineProperties(X.prototype,V);var ee=X();ee.supportsColor=xe;ee.stderr=X({level:Ie?Ie.level:0});ee.stderr.supportsColor=Ie;Lt.exports=ee});var Xe=k(Ke(),1),{program:qn,createCommand:Tn,createArgument:Nn,createOption:Rn,CommanderError:Pn,InvalidArgumentError:Dn,InvalidOptionArgumentError:Un,Command:u,Argument:Ln,Option:$n,Help:Mn}=Xe.default;var Ze="decipher-qa",L=process.env.SECRET_MODE_URL||"https://api.getdecipher.com";var v=k(require("fs")),$=k(require("path")),Vt=k(require("readline"));var et='---\nname: decipher-qa\ndescription: >-\n Creates QA tests by exploring your frontend codebase to understand pages, components, and UI flows,\n then generates step-by-step test instructions based on what it finds in the code.\n Handles the full lifecycle: create test, link login identity, generate steps, save, and run generation.\n Also manages tests and identities (CRUD) and provides CLI reference.\n---\n\n# /decipher-qa \u2014 Decipher QA Agent\n\nRoute based on the first word(s) of `$ARGUMENTS`:\n\n- **"create-test"** or **"create test"** \u2192 Read `create-test.md` in this skill directory and follow its instructions. Pass the remaining arguments.\n- **"validate"** \u2192 Read `create-test.md` in this skill directory and jump to Phase 6 (Run Generation). The user must provide a test ID. Initialize attemptNumber=1, maxAttempts=3, failureHistory=[].\n- **"test"** \u2192 Read `test.md` in this skill directory and follow its instructions. Pass the remaining arguments after "test".\n- **"identity"** \u2192 Read `identity.md` in this skill directory and follow its instructions. Pass the remaining arguments after "identity".\n- **"steps"** \u2192 Read `steps.md` in this skill directory and follow its instructions. Pass the remaining arguments after "steps".\n- **"cli"** \u2192 Read `cli.md` in this skill directory and follow its instructions.\n- **Natural language test request** (e.g. "make a test for checkout", "test the alert flow", "create a test for login") \u2192 Treat as `create-test`. Read `create-test.md` and follow its instructions. Use the user\'s description as the test description.\n- **Empty or unrecognized** \u2192 Show available commands:\n - `/decipher-qa create-test` \u2014 Create a new test end-to-end (name, identity, steps, generation)\n - `/decipher-qa validate` \u2014 Run generation on an existing test\n - `/decipher-qa test` \u2014 Manage QA tests (create, delete, list)\n - `/decipher-qa identity` \u2014 Manage login identities (create, delete, list)\n - `/decipher-qa steps` \u2014 Generate QA test steps by exploring your codebase\n - `/decipher-qa cli` \u2014 CLI command reference and error handling guide\n\nAll data is managed via the Decipher API through CLI commands.\n\n**IMPORTANT:** Always invoke the CLI as `decipher-qa` (it should be installed locally). If the command is not found, fall back to `npx @decipher-sdk/decipher-qa` \u2014 never use `npx decipher-qa` (the npm package name is `@decipher-sdk/decipher-qa`).\n',tt=`# Test \u2014 Manage QA Tests
|
|
29
29
|
|
|
30
30
|
**IMPORTANT:** Always invoke the CLI as \`decipher-qa\` (it should be installed locally). If the command is not found, fall back to \`npx @decipher-sdk/decipher-qa\` \u2014 never use \`npx decipher-qa\` (the npm package name is \`@decipher-sdk/decipher-qa\`).
|
|
31
31
|
|
|
@@ -872,9 +872,9 @@ Next actions:
|
|
|
872
872
|
/decipher-qa validate <id> \u2014 Re-run generation
|
|
873
873
|
/decipher-qa create-test \u2014 Create another test end-to-end
|
|
874
874
|
\`\`\`
|
|
875
|
-
`;var P=
|
|
875
|
+
`;var P=k($t()),Mt=P.default.hex("#6C5CE7"),Te=P.default.dim,Ft=P.default.bold,O=n=>console.log(P.default.green(" + ")+n),D=n=>console.error(P.default.red(" x ")+n),C=n=>console.log(P.default.cyan(" * ")+n),_=n=>console.log(P.default.yellow(" ! ")+n),E=(n,e)=>console.log(Te(" "+n.padEnd(14))+Ft(e));function H(n){console.log(),console.log(" "+Mt(">>")+Ft(" Decipher QA ")+Mt("<<")+" "+Te(n)),console.log()}function Ne(){console.log(Te(" "+"-".repeat(46)))}var te=k(require("fs")),jt=k(require("os")),ie=k(require("path")),A=ie.default.join(jt.default.homedir(),".decipher","qa-config.json");function q(){te.default.existsSync(A)||(console.error(JSON.stringify({error:`Config not found at ${A}. Run \`decipher-qa login\` first.`})),process.exit(1));let n=te.default.readFileSync(A,"utf-8"),e=JSON.parse(n);return e.token||(console.error(JSON.stringify({error:`No token found in ${A}. Run \`decipher-qa login\` to authenticate.`})),process.exit(1)),e}function ne(n){let e=n;for(;;){if(te.default.existsSync(ie.default.join(e,".git")))return e;let t=ie.default.dirname(e);if(t===e)return null;e=t}}var dn=[{relPath:".claude/skills/decipher-qa/SKILL.md",content:et},{relPath:".claude/skills/decipher-qa/test.md",content:tt},{relPath:".claude/skills/decipher-qa/identity.md",content:it},{relPath:".claude/skills/decipher-qa/steps.md",content:nt},{relPath:".claude/skills/decipher-qa/cli.md",content:st},{relPath:".claude/skills/decipher-qa/create-test.md",content:rt}],hn=["Bash(decipher-qa:*)","Bash(npx @decipher-sdk/decipher-qa:*)","Bash(sleep:*)","Read(.decipher/**)"];function un(n){let e=$.default.join(n,".claude","settings.json"),t={};if(v.default.existsSync(e))try{t=JSON.parse(v.default.readFileSync(e,"utf-8"))}catch{_(" .claude/settings.json was malformed, re-creating it"),t={}}t.permissions||(t.permissions={}),Array.isArray(t.permissions.allow)||(t.permissions.allow=[]);let i=new Set(t.permissions.allow),s=[];for(let r of hn)i.has(r)||(t.permissions.allow.push(r),s.push(r));return s.length>0&&(v.default.mkdirSync($.default.dirname(e),{recursive:!0}),v.default.writeFileSync(e,JSON.stringify(t,null,2)+`
|
|
876
876
|
`,"utf-8")),{added:s}}function pn(n){let e=$.default.join(n,".gitignore"),t="";if(v.default.existsSync(e)&&(t=v.default.readFileSync(e,"utf-8")),t.split(`
|
|
877
877
|
`).some(r=>r.trim()===".decipher/"||r.trim()===".decipher"))return!1;let s=t.length>0&&!t.endsWith(`
|
|
878
878
|
`)?`
|
|
879
879
|
`:"";return v.default.writeFileSync(e,t+s+`.decipher/
|
|
880
|
-
`,"utf-8"),!0}async function mn(n){H("Initialize"),k("Looking for git repository...");let e=ne(process.cwd());e||(D("No git repository found. Run this command inside a git repo."),process.exit(1)),A("Found: "+e),console.log(),k("Creating skill files...");let t=0;for(let r of dn){let o=$.default.join(e,r.relPath);if(v.default.existsSync(o)&&!n.force){x(` ${r.relPath} (exists, use --force to overwrite)`),t++;continue}v.default.mkdirSync($.default.dirname(o),{recursive:!0}),v.default.writeFileSync(o,r.content,"utf-8"),console.log(` ${r.relPath}`)}console.log(),t>0&&!n.force&&(k(`${t} file(s) skipped. Use --force to overwrite skill files.`),console.log()),k("Configuring Claude Code permissions (.claude/settings.json)..."),console.log(" Decipher QA runs background agents to monitor test generation runs."),console.log(" These permissions let those agents run CLI commands and read"),console.log(" screenshots without prompting you for approval each time.");let{added:i}=un(e);if(i.length>0){console.log();for(let r of i)console.log(` + ${r}`);console.log(),A("Permissions added.")}else A("Permissions already configured.");console.log(),k("Checking .gitignore..."),console.log(" Decipher QA stores temporary screenshots in .decipher/ for"),console.log(" failure analysis. Adding it to .gitignore keeps these out of"),console.log(" your repo."),pn(e)?(console.log(),console.log(" + .decipher/"),console.log(),A("Added .decipher/ to .gitignore.")):A(".decipher/ already in .gitignore."),console.log(),k("Checking authentication...");let s=!0;if(v.default.existsSync(_))try{let r=v.default.readFileSync(_,"utf-8"),o=JSON.parse(r);if(o.token)try{(await fetch(`${L}/api/v1/whoami`,{headers:{Authorization:`Bearer ${o.token}`}})).ok?(A("Already authenticated."),s=!1):x(" Existing token is invalid or expired.")}catch{x(" Could not reach Decipher API to verify token.")}}catch{}if(s){console.log(),k("To authenticate, grab your API token from:"),console.log(" https://www.app.getdecipher.com/settings?tab=testing"),console.log();let r=Vt.default.createInterface({input:process.stdin,output:process.stdout}),o=await new Promise(a=>{r.question(" Paste your API token: ",l=>{r.close(),a(l.trim())})});if(!o)x(" No token provided. You can run `decipher-qa login` later.");else{let a=$.default.dirname(_);v.default.mkdirSync(a,{recursive:!0}),v.default.writeFileSync(_,JSON.stringify({token:o},null,2),"utf-8"),A("Token saved to "+_)}}console.log(),A("Decipher QA skills installed!"),console.log(),k("Available commands in Claude Code:"),console.log(" /decipher-qa create-test Create a new test end-to-end (name, identity, steps, generation)"),console.log(" /decipher-qa validate Run generation on an existing test"),console.log(" /decipher-qa test Manage QA tests (create, delete, list)"),console.log(" /decipher-qa identity Manage login identities (create, delete, list)"),console.log(" /decipher-qa steps Generate QA test steps by exploring your codebase"),console.log(" /decipher-qa cli CLI command reference and error handling guide"),console.log()}var Ht=new u("init").description("Scaffold Decipher QA skills into the nearest git repository").option("-f, --force","Overwrite existing skill files",!1).action(mn);var De=w(require("crypto")),se=w(require("fs")),re=w(require("path"));async function m(n,e){let t=q(),i=e?.method??"GET",s=new URL(n,L);if(e?.query)for(let[o,a]of Object.entries(e.query))a!==void 0&&s.searchParams.set(o,a);let r;try{r=await fetch(s.toString(),{method:i,headers:{Authorization:`Bearer ${t.token}`,...e?.body!==void 0?{"Content-Type":"application/json"}:{}},body:e?.body!==void 0?JSON.stringify(e.body):void 0})}catch{console.error(JSON.stringify({error:"Could not connect to Decipher API. Check your network connection."})),process.exit(1)}if(!r.ok){let o;try{o=await r.json()}catch{o={error:{message:`HTTP ${r.status} ${r.statusText}`}}}console.error(JSON.stringify(o,null,2)),process.exit(1)}return await r.json()}async function Gt(n,e){let t=q(),i=new URL(n,L),s;try{s=await fetch(i.toString(),{method:"POST",headers:{Authorization:`Bearer ${t.token}`},body:e})}catch{console.error(JSON.stringify({error:"Could not connect to Decipher API. Check your network connection."})),process.exit(1)}if(!s.ok){let r;try{r=await s.json()}catch{r={error:{message:`HTTP ${s.status} ${s.statusText}`}}}console.error(JSON.stringify(r,null,2)),process.exit(1)}return await s.json()}var Pe=["goto","default","wait","assert","conditional","auth","refresh","upload"];function fn(n){let{type:e,description:t,data:i,metadata:s}=n;e==="goto"&&i&&!/^https?:\/\//i.test(i)&&x(`Data "${i}" doesn't look like a URL for a goto step`),e==="wait"&&i&&isNaN(Number(i))&&x(`Data "${i}" doesn't look numeric for a wait step`),e==="auth"&&i!=="magic_link"&&i!=="code"&&x(`Data for auth step should be "magic_link" or "code", got "${i}"`);let r={id:De.default.randomUUID(),type:e,description:e==="goto"&&!t?i:e==="wait"?"":t,data:e==="upload"?i.split(",").map(o=>o.trim()):i,setByUser:!0,originFrom:"agent"};if(s)try{r.metadata=JSON.parse(s)}catch{x(`Could not parse --metadata as JSON: ${s}`),r.metadata=s}console.log(JSON.stringify(r,null,2))}var gn=new u("format").description("Generate a validated JSON step object").requiredOption("--type <type>",`Step type: ${Pe.join(", ")}`).option("--description <text>","Step description","").option("--data <value>","Step data","").option("--metadata <json>","Optional JSON metadata").action(n=>{let e=n.type;Pe.includes(e)||(console.error(`Invalid step type "${e}". Must be one of: ${Pe.join(", ")}`),process.exit(1)),fn({type:e,description:n.description,data:n.data,metadata:n.metadata})}),yn=new u("upload").description("Upload local files and generate an upload step").requiredOption("--test-id <id>","Test ID (required)").requiredOption("--description <text>","Step description").requiredOption("--data <paths>","Comma-separated local file paths").action(async n=>{let e=n.testId,t=n.description,i=n.data.split(",").map(a=>a.trim());for(let a of i){let l=re.default.resolve(a);se.default.existsSync(l)||(console.error(`File not found: ${l}`),process.exit(1)),se.default.statSync(l).isFile()||(console.error(`Not a file (is it a directory?): ${l}`),process.exit(1))}let s=new FormData;for(let a of i){let l=re.default.resolve(a),c=se.default.readFileSync(l),h=new Blob([c]);s.append("files",h,re.default.basename(l))}let r=await Gt(`/api/v1/tests/${e}/upload-files`,s),o={id:De.default.randomUUID(),type:"upload",description:t,data:r.files.map(a=>a.gcsUrl),setByUser:!0,originFrom:"agent"};console.log(JSON.stringify(o,null,2))}),Bt=new u("steps").description("QA test step utilities").addCommand(gn).addCommand(yn);var Wt=new u("create").description("Create a new test").requiredOption("--name <name>","Test name").requiredOption("--url <url>","URL the test runs against").requiredOption("--description <text>","Test description").option("--identity-id <id>","Identity ID for authentication").option("--tags <tags>","Comma-separated tags").action(async n=>{let e={name:n.name,url:n.url,description:n.description};n.identityId!==void 0&&(e.identityId=Number(n.identityId)),n.tags!==void 0&&(e.tags=n.tags.split(",").map(i=>i.trim()));let t=await m("/api/v1/tests",{method:"POST",body:e});console.log(JSON.stringify(t,null,2))});var Jt=new u("get").description("Get a test by ID").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}`,{query:{include:"steps,screenshots"}});console.log(JSON.stringify(e,null,2))});var zt=new u("update").description("Update a test by ID").requiredOption("--id <id>","Test ID").option("--name <name>","New test name").option("--url <url>","New URL").option("--identity-id <id>","New identity ID (use 'null' to clear)").option("--description <text>","New description").option("--tags <tags>","Comma-separated tags").action(async n=>{let e={};n.name!==void 0&&(e.name=n.name),n.url!==void 0&&(e.url=n.url),n.identityId!==void 0&&(e.identityId=n.identityId==="null"?null:Number(n.identityId)),n.description!==void 0&&(e.description=n.description),n.tags!==void 0&&(e.tags=n.tags.split(",").map(i=>i.trim()));let t=await m(`/api/v1/tests/${n.id}`,{method:"PATCH",body:e});console.log(JSON.stringify(t,null,2))});var Yt=new u("delete").description("Delete a test by ID").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}`,{method:"DELETE"});console.log(JSON.stringify(e,null,2))});var Qt=new u("list").description("List all tests").option("--name <search>","Filter by name").action(async n=>{let e=await m("/api/v1/tests",{query:{name:n.name,include:"steps"}});console.log(JSON.stringify(e,null,2))});var Kt=new u("set-steps").description("Set the steps array for a test by ID").requiredOption("--id <id>","Test ID").requiredOption("--steps <json>","Steps as a JSON array string").action(async n=>{let e;try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(i){console.error(JSON.stringify({error:`Invalid steps JSON: ${i.message}`})),process.exit(1)}let t=await m(`/api/v1/tests/${n.id}/steps`,{method:"PUT",body:{steps:e}});console.log(JSON.stringify(t,null,2))});var Xt=new u("run-generation").description("Trigger a generation run for a test").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/run-validation`,{method:"POST"});console.log(JSON.stringify(e,null,2))});var Zt=new u("generation-progress").description("Check generation progress for a test").requiredOption("--id <id>","Test ID").option("--include-steps","Include steps and screenshot URLs in the response").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/validation-progress`,{query:n.includeSteps?{include:"steps"}:void 0});console.log(JSON.stringify(e,null,2))});var ei=new u("start-run").description("Start a test run").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/runs`,{method:"POST"});console.log(JSON.stringify(e,null,2))});var ti=new u("check-resumability").description("Check if a paused generation run can be resumed or must be restarted").requiredOption("--id <id>","Test ID").requiredOption("--steps <json>","Steps as a JSON array string (with step IDs)").option("--edited-step-ids <ids>","Comma-separated UUIDs of edited steps").action(async n=>{let e;try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(s){console.error(JSON.stringify({error:`Invalid steps JSON: ${s.message}`})),process.exit(1)}let t=n.editedStepIds?n.editedStepIds.split(",").map(s=>s.trim()):void 0,i=await m(`/api/v1/tests/${n.id}/check-resumability`,{method:"POST",body:{steps:e,...t?{editedStepIds:t}:{}}});console.log(JSON.stringify(i,null,2))});var ii=new u("resume-generation").description("Resume a paused generation run with optional edited steps").requiredOption("--id <id>","Test ID").option("--steps <json>","Edited steps as a JSON array string (with step IDs preserved)").option("--edited-step-ids <ids>","Comma-separated UUIDs of edited steps").action(async n=>{let e;if(n.steps)try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(s){console.error(JSON.stringify({error:`Invalid steps JSON: ${s.message}`})),process.exit(1)}let t=n.editedStepIds?n.editedStepIds.split(",").map(s=>s.trim()):void 0,i=await m(`/api/v1/tests/${n.id}/resume-validation`,{method:"POST",body:{...e?{editedSteps:e}:{},...t?{editedStepIds:t}:{}}});console.log(JSON.stringify(i,null,2))});var ni=new u("step-logs").description("Get step logs with IDs, selectors, and execution metadata").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/step-logs`);console.log(JSON.stringify(e,null,2))});var si=new u("test").description("Manage QA tests (create, get, update, delete, list, set-steps, run-generation, generation-progress, start-run, step-logs, check-resumability, resume-generation)").hook("preAction",()=>{q()}).addCommand(Wt).addCommand(Jt).addCommand(zt).addCommand(Yt).addCommand(Qt).addCommand(Kt).addCommand(Xt).addCommand(Zt).addCommand(ei).addCommand(ti).addCommand(ii).addCommand(ni);var ri=new u("create").description("Create a new identity").requiredOption("--name <name>","Identity name").requiredOption("--username <username>","Login username or email").requiredOption("--password <password>","Login password").requiredOption("--url <url>","Login page URL").option("--description <text>","Identity description").action(async n=>{let e={name:n.name,username:n.username,password:n.password,url:n.url};n.description!==void 0&&(e.description=n.description);let t=await m("/api/v1/identities",{method:"POST",body:e});console.log(JSON.stringify(t,null,2))});var oi=new u("get").description("Get an identity by ID").requiredOption("--id <id>","Identity ID").action(async n=>{let e=await m(`/api/v1/identities/${n.id}`);console.log(JSON.stringify(e,null,2))});var ai=new u("update").description("Update an identity by ID").requiredOption("--id <id>","Identity ID").option("--name <name>","New identity name").option("--username <username>","New username").option("--password <password>","New password").option("--url <url>","New login URL").option("--description <text>","New description").action(async n=>{let e={};n.name!==void 0&&(e.name=n.name),n.username!==void 0&&(e.username=n.username),n.password!==void 0&&(e.password=n.password),n.url!==void 0&&(e.url=n.url),n.description!==void 0&&(e.description=n.description);let t=await m(`/api/v1/identities/${n.id}`,{method:"PATCH",body:e});console.log(JSON.stringify(t,null,2))});var li=new u("delete").description("Delete an identity by ID").requiredOption("--id <id>","Identity ID").action(async n=>{let e=await m(`/api/v1/identities/${n.id}`,{method:"DELETE"});console.log(JSON.stringify(e,null,2))});var ci=new u("list").description("List all identities").option("--name <search>","Filter by name").action(async n=>{let e=await m("/api/v1/identities",{query:{name:n.name}});console.log(JSON.stringify(e,null,2))});var di=new u("identity").description("Manage login identities (create, get, update, delete, list)").hook("preAction",()=>{q()}).addCommand(ri).addCommand(oi).addCommand(ai).addCommand(li).addCommand(ci);var Ue=w(require("fs")),hi=w(require("path")),ui=w(require("readline"));var bn="https://www.app.getdecipher.com/settings?tab=testing";async function wn(){H("Login"),k("To authenticate, grab your API token from:"),console.log(` ${bn}`),console.log();let n=ui.default.createInterface({input:process.stdin,output:process.stdout}),e=await new Promise(i=>{n.question(" Paste your API token: ",s=>{n.close(),i(s.trim())})});e||(D("No token provided. Aborting."),process.exit(1));let t=hi.default.dirname(_);Ue.default.mkdirSync(t,{recursive:!0}),Ue.default.writeFileSync(_,JSON.stringify({token:e},null,2),"utf-8"),console.log(),A("Token saved to "+_),k("You can now use `decipher-qa test`, `decipher-qa steps`, etc."),console.log()}var pi=new u("login").description("Authenticate with Decipher by saving your API token").action(wn);async function kn(){H("Who Am I");let n=q();k("Verifying token..."),console.log();let e;try{e=await fetch(`${L}/api/v1/whoami`,{headers:{Authorization:`Bearer ${n.token}`}})}catch{D("Could not connect to Decipher API."),k("Check your network connection and try again."),process.exit(1)}e.ok||(e.status===401?(D("Token is invalid, revoked, or expired."),k("Run `decipher-qa login` to re-authenticate.")):D(`Unexpected response: ${e.status} ${e.statusText}`),process.exit(1));let t=await e.json();A("Token is valid!"),console.log(),Re(),E("Key Name",t.key_name),E("Key Prefix",t.key_prefix),E("Organization",t.organization??"\u2014"),E("Scopes",t.scopes.join(", ")||"none"),E("Created By",t.created_by??"\u2014"),E("Created At",t.created_at),E("Expires At",t.expires_at??"never"),E("Last Used",t.last_used_at??"\u2014"),Re(),console.log()}var mi=new u("whoami").description("Display information about the current API token").action(kn);var Le=w(require("fs")),$e=w(require("path")),fi=w(require("crypto"));var gi=new u("screenshot").description("Download a Decipher screenshot to a temp file for viewing").requiredOption("--url <url>","The screenshot URL from decipher-qa CLI responses").action(async n=>{let e=n.url;try{let t=new URL(e);t.searchParams.set("format","raw");let i=await fetch(t.toString());i.ok||(console.error(JSON.stringify({error:`Failed to fetch screenshot: HTTP ${i.status} ${i.statusText}`})),process.exit(1));let s=i.headers.get("content-type")||"image/png",r=s.includes("webp")?".webp":s.includes("jpeg")||s.includes("jpg")?".jpg":".png",o=fi.default.createHash("md5").update(e).digest("hex").slice(0,8),a=ne(process.cwd())||process.cwd(),l=$e.default.join(a,".decipher","screenshots");Le.default.mkdirSync(l,{recursive:!0});let c=$e.default.join(l,`decipher-screenshot-${o}${r}`),h=Buffer.from(await i.arrayBuffer());Le.default.writeFileSync(c,h),console.log(c)}catch(t){let i=t instanceof Error?t.message:String(t);console.error(JSON.stringify({error:`Error fetching screenshot: ${i}`})),process.exit(1)}});var yi={name:"@decipher-sdk/decipher-qa",version:"0.1.1",bin:{"decipher-qa":"dist/index.js"},main:"./dist/index.js",files:["dist"],scripts:{build:"tsup","check-types":"tsc -p tsconfig.json --noEmit",clean:"rm -rf dist tsconfig.tsbuildinfo",dev:"tsup --watch",prepublishOnly:"npm run build"},author:"Decipher AI",license:"UNLICENSED",description:"Decipher QA Agent CLI \u2014 scaffolds Claude Code skills for QA test management",engines:{node:">=18"},dependencies:{chalk:"^4.1.2",commander:"^12.1.0"},devDependencies:{"@types/node":"^22.0.0",tsup:"^8.0.0",typescript:"^5.4.3"},keywords:[]};var T=new u;T.name(Ze).description("Decipher QA Agent CLI").version(yi.version,"-v, --version");T.addCommand(Ht);T.addCommand(Bt);T.addCommand(si);T.addCommand(di);T.addCommand(pi);T.addCommand(mi);T.addCommand(gi);T.parse();
|
|
880
|
+
`,"utf-8"),!0}async function mn(n){H("Initialize"),C("Looking for git repository...");let e=ne(process.cwd());e||(D("No git repository found. Run this command inside a git repo."),process.exit(1)),O("Found: "+e),console.log(),C("Creating skill files...");let t=0;for(let r of dn){let o=$.default.join(e,r.relPath);if(v.default.existsSync(o)&&!n.force){_(` ${r.relPath} (exists, use --force to overwrite)`),t++;continue}v.default.mkdirSync($.default.dirname(o),{recursive:!0}),v.default.writeFileSync(o,r.content,"utf-8"),console.log(` ${r.relPath}`)}console.log(),t>0&&!n.force&&(C(`${t} file(s) skipped. Use --force to overwrite skill files.`),console.log()),C("Configuring Claude Code permissions (.claude/settings.json)..."),console.log(" Decipher QA runs background agents to monitor test generation runs."),console.log(" These permissions let those agents run CLI commands and read"),console.log(" screenshots without prompting you for approval each time.");let{added:i}=un(e);if(i.length>0){console.log();for(let r of i)console.log(` + ${r}`);console.log(),O("Permissions added.")}else O("Permissions already configured.");console.log(),C("Checking .gitignore..."),console.log(" Decipher QA stores temporary screenshots in .decipher/ for"),console.log(" failure analysis. Adding it to .gitignore keeps these out of"),console.log(" your repo."),pn(e)?(console.log(),console.log(" + .decipher/"),console.log(),O("Added .decipher/ to .gitignore.")):O(".decipher/ already in .gitignore."),console.log(),C("Checking authentication...");let s=!0;if(v.default.existsSync(A))try{let r=v.default.readFileSync(A,"utf-8"),o=JSON.parse(r);if(o.token)try{(await fetch(`${L}/api/v1/whoami`,{headers:{Authorization:`Bearer ${o.token}`}})).ok?(O("Already authenticated."),s=!1):_(" Existing token is invalid or expired.")}catch{_(" Could not reach Decipher API to verify token.")}}catch{}if(s){console.log(),C("To authenticate, grab your API token from:"),console.log(" https://www.app.getdecipher.com/settings?tab=testing"),console.log();let r=Vt.default.createInterface({input:process.stdin,output:process.stdout}),o=await new Promise(a=>{r.question(" Paste your API token: ",l=>{r.close(),a(l.trim())})});if(!o)_(" No token provided. You can run `decipher-qa login` later.");else{let a=$.default.dirname(A);v.default.mkdirSync(a,{recursive:!0}),v.default.writeFileSync(A,JSON.stringify({token:o},null,2),"utf-8"),O("Token saved to "+A)}}console.log(),O("Decipher QA skills installed!"),console.log(),C("Available commands in Claude Code:"),console.log(" /decipher-qa create-test Create a new test end-to-end (name, identity, steps, generation)"),console.log(" /decipher-qa validate Run generation on an existing test"),console.log(" /decipher-qa test Manage QA tests (create, delete, list)"),console.log(" /decipher-qa identity Manage login identities (create, delete, list)"),console.log(" /decipher-qa steps Generate QA test steps by exploring your codebase"),console.log(" /decipher-qa cli CLI command reference and error handling guide"),console.log()}var Ht=new u("init").description("Scaffold Decipher QA skills into the nearest git repository").option("-f, --force","Overwrite existing skill files",!1).action(mn);var De=k(require("crypto")),Pe=k(require("fs/promises")),se=k(require("path"));async function m(n,e){let t=q(),i=e?.method??"GET",s=new URL(n,L);if(e?.query)for(let[o,a]of Object.entries(e.query))a!==void 0&&s.searchParams.set(o,a);let r;try{r=await fetch(s.toString(),{method:i,headers:{Authorization:`Bearer ${t.token}`,...e?.body!==void 0?{"Content-Type":"application/json"}:{}},body:e?.body!==void 0?JSON.stringify(e.body):void 0})}catch{console.error(JSON.stringify({error:"Could not connect to Decipher API. Check your network connection."})),process.exit(1)}if(!r.ok){let o;try{o=await r.json()}catch{o={error:{message:`HTTP ${r.status} ${r.statusText}`}}}console.error(JSON.stringify(o,null,2)),process.exit(1)}return await r.json()}async function Gt(n,e){let t=q(),i=new URL(n,L),s;try{s=await fetch(i.toString(),{method:"POST",headers:{Authorization:`Bearer ${t.token}`},body:e})}catch{console.error(JSON.stringify({error:"Could not connect to Decipher API. Check your network connection."})),process.exit(1)}if(!s.ok){let r;try{r=await s.json()}catch{r={error:{message:`HTTP ${s.status} ${s.statusText}`}}}console.error(JSON.stringify(r,null,2)),process.exit(1)}return await s.json()}var Re=["goto","default","wait","assert","conditional","auth","refresh","upload"];function fn(n){let{type:e,description:t,data:i,metadata:s}=n;e==="goto"&&i&&!/^https?:\/\//i.test(i)&&_(`Data "${i}" doesn't look like a URL for a goto step`),e==="wait"&&i&&isNaN(Number(i))&&_(`Data "${i}" doesn't look numeric for a wait step`),e==="auth"&&i!=="magic_link"&&i!=="code"&&_(`Data for auth step should be "magic_link" or "code", got "${i}"`);let r={id:De.default.randomUUID(),type:e,description:e==="goto"&&!t?i:e==="wait"?"":t,data:e==="upload"?i.split(",").map(o=>o.trim()):i,setByUser:!0,originFrom:"agent"};if(s)try{r.metadata=JSON.parse(s)}catch{_(`Could not parse --metadata as JSON: ${s}`),r.metadata=s}console.log(JSON.stringify(r,null,2))}var gn=new u("format").description("Generate a validated JSON step object").requiredOption("--type <type>",`Step type: ${Re.join(", ")}`).option("--description <text>","Step description","").option("--data <value>","Step data","").option("--metadata <json>","Optional JSON metadata").action(n=>{let e=n.type;Re.includes(e)||(console.error(`Invalid step type "${e}". Must be one of: ${Re.join(", ")}`),process.exit(1)),fn({type:e,description:n.description,data:n.data,metadata:n.metadata})}),yn=new u("upload").description("Upload local files and generate an upload step").requiredOption("--test-id <id>","Test ID (required)").requiredOption("--description <text>","Step description").requiredOption("--data <paths>","Comma-separated local file paths").action(async n=>{let e=n.testId,t=n.description,i=n.data.split(",").map(c=>c.trim()),s=await Promise.allSettled(i.map(async c=>{let d=se.default.resolve(c);if(!(await Pe.default.stat(d)).isFile())throw new Error(`Not a file (is it a directory?): ${d}`);let g=await Pe.default.readFile(d);return{resolved:d,buffer:g}})),r=[];for(let c=0;c<s.length;c++){let d=s[c],p=se.default.resolve(i[c]);if(d.status==="rejected"){let g=d.reason instanceof Error?d.reason.message:String(d.reason);g.includes("ENOENT")?_(`File not found: ${p}`):_(g)}else r.push(d.value)}r.length===0&&(console.error("All file paths failed validation. No files to upload."),process.exit(1)),r.length<i.length&&_(`Skipping ${i.length-r.length} failed path(s), uploading ${r.length} file(s).`);let o=new FormData;for(let{resolved:c,buffer:d}of r){let p=new Blob([d]);o.append("files",p,se.default.basename(c))}let a=await Gt(`/api/v1/tests/${e}/upload-files`,o),l={id:De.default.randomUUID(),type:"upload",description:t,data:a.files.map(c=>c.gcsUrl),setByUser:!0,originFrom:"agent"};console.log(JSON.stringify(l,null,2))}),Bt=new u("steps").description("QA test step utilities").addCommand(gn).addCommand(yn);var Wt=new u("create").description("Create a new test").requiredOption("--name <name>","Test name").requiredOption("--url <url>","URL the test runs against").requiredOption("--description <text>","Test description").option("--identity-id <id>","Identity ID for authentication").option("--tags <tags>","Comma-separated tags").action(async n=>{let e={name:n.name,url:n.url,description:n.description};n.identityId!==void 0&&(e.identityId=Number(n.identityId)),n.tags!==void 0&&(e.tags=n.tags.split(",").map(i=>i.trim()));let t=await m("/api/v1/tests",{method:"POST",body:e});console.log(JSON.stringify(t,null,2))});var Jt=new u("get").description("Get a test by ID").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}`,{query:{include:"steps,screenshots"}});console.log(JSON.stringify(e,null,2))});var zt=new u("update").description("Update a test by ID").requiredOption("--id <id>","Test ID").option("--name <name>","New test name").option("--url <url>","New URL").option("--identity-id <id>","New identity ID (use 'null' to clear)").option("--description <text>","New description").option("--tags <tags>","Comma-separated tags").action(async n=>{let e={};n.name!==void 0&&(e.name=n.name),n.url!==void 0&&(e.url=n.url),n.identityId!==void 0&&(e.identityId=n.identityId==="null"?null:Number(n.identityId)),n.description!==void 0&&(e.description=n.description),n.tags!==void 0&&(e.tags=n.tags.split(",").map(i=>i.trim()));let t=await m(`/api/v1/tests/${n.id}`,{method:"PATCH",body:e});console.log(JSON.stringify(t,null,2))});var Yt=new u("delete").description("Delete a test by ID").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}`,{method:"DELETE"});console.log(JSON.stringify(e,null,2))});var Qt=new u("list").description("List all tests").option("--name <search>","Filter by name").action(async n=>{let e=await m("/api/v1/tests",{query:{name:n.name,include:"steps"}});console.log(JSON.stringify(e,null,2))});var Kt=new u("set-steps").description("Set the steps array for a test by ID").requiredOption("--id <id>","Test ID").requiredOption("--steps <json>","Steps as a JSON array string").action(async n=>{let e;try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(i){console.error(JSON.stringify({error:`Invalid steps JSON: ${i.message}`})),process.exit(1)}let t=await m(`/api/v1/tests/${n.id}/steps`,{method:"PUT",body:{steps:e}});console.log(JSON.stringify(t,null,2))});var Xt=new u("run-generation").description("Trigger a generation run for a test").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/run-validation`,{method:"POST"});console.log(JSON.stringify(e,null,2))});var Zt=new u("generation-progress").description("Check generation progress for a test").requiredOption("--id <id>","Test ID").option("--include-steps","Include steps and screenshot URLs in the response").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/validation-progress`,{query:n.includeSteps?{include:"steps"}:void 0});console.log(JSON.stringify(e,null,2))});var ei=new u("start-run").description("Start a test run").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/runs`,{method:"POST"});console.log(JSON.stringify(e,null,2))});var ti=new u("check-resumability").description("Check if a paused generation run can be resumed or must be restarted").requiredOption("--id <id>","Test ID").requiredOption("--steps <json>","Steps as a JSON array string (with step IDs)").option("--edited-step-ids <ids>","Comma-separated UUIDs of edited steps").action(async n=>{let e;try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(s){console.error(JSON.stringify({error:`Invalid steps JSON: ${s.message}`})),process.exit(1)}let t=n.editedStepIds?n.editedStepIds.split(",").map(s=>s.trim()):void 0,i=await m(`/api/v1/tests/${n.id}/check-resumability`,{method:"POST",body:{steps:e,...t?{editedStepIds:t}:{}}});console.log(JSON.stringify(i,null,2))});var ii=new u("resume-generation").description("Resume a paused generation run with optional edited steps").requiredOption("--id <id>","Test ID").option("--steps <json>","Edited steps as a JSON array string (with step IDs preserved)").option("--edited-step-ids <ids>","Comma-separated UUIDs of edited steps").action(async n=>{let e;if(n.steps)try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(s){console.error(JSON.stringify({error:`Invalid steps JSON: ${s.message}`})),process.exit(1)}let t=n.editedStepIds?n.editedStepIds.split(",").map(s=>s.trim()):void 0,i=await m(`/api/v1/tests/${n.id}/resume-validation`,{method:"POST",body:{...e?{editedSteps:e}:{},...t?{editedStepIds:t}:{}}});console.log(JSON.stringify(i,null,2))});var ni=new u("step-logs").description("Get step logs with IDs, selectors, and execution metadata").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/step-logs`);console.log(JSON.stringify(e,null,2))});var si=new u("test").description("Manage QA tests (create, get, update, delete, list, set-steps, run-generation, generation-progress, start-run, step-logs, check-resumability, resume-generation)").hook("preAction",()=>{q()}).addCommand(Wt).addCommand(Jt).addCommand(zt).addCommand(Yt).addCommand(Qt).addCommand(Kt).addCommand(Xt).addCommand(Zt).addCommand(ei).addCommand(ti).addCommand(ii).addCommand(ni);var ri=new u("create").description("Create a new identity").requiredOption("--name <name>","Identity name").requiredOption("--username <username>","Login username or email").requiredOption("--password <password>","Login password").requiredOption("--url <url>","Login page URL").option("--description <text>","Identity description").action(async n=>{let e={name:n.name,username:n.username,password:n.password,url:n.url};n.description!==void 0&&(e.description=n.description);let t=await m("/api/v1/identities",{method:"POST",body:e});console.log(JSON.stringify(t,null,2))});var oi=new u("get").description("Get an identity by ID").requiredOption("--id <id>","Identity ID").action(async n=>{let e=await m(`/api/v1/identities/${n.id}`);console.log(JSON.stringify(e,null,2))});var ai=new u("update").description("Update an identity by ID").requiredOption("--id <id>","Identity ID").option("--name <name>","New identity name").option("--username <username>","New username").option("--password <password>","New password").option("--url <url>","New login URL").option("--description <text>","New description").action(async n=>{let e={};n.name!==void 0&&(e.name=n.name),n.username!==void 0&&(e.username=n.username),n.password!==void 0&&(e.password=n.password),n.url!==void 0&&(e.url=n.url),n.description!==void 0&&(e.description=n.description);let t=await m(`/api/v1/identities/${n.id}`,{method:"PATCH",body:e});console.log(JSON.stringify(t,null,2))});var li=new u("delete").description("Delete an identity by ID").requiredOption("--id <id>","Identity ID").action(async n=>{let e=await m(`/api/v1/identities/${n.id}`,{method:"DELETE"});console.log(JSON.stringify(e,null,2))});var ci=new u("list").description("List all identities").option("--name <search>","Filter by name").action(async n=>{let e=await m("/api/v1/identities",{query:{name:n.name}});console.log(JSON.stringify(e,null,2))});var di=new u("identity").description("Manage login identities (create, get, update, delete, list)").hook("preAction",()=>{q()}).addCommand(ri).addCommand(oi).addCommand(ai).addCommand(li).addCommand(ci);var Ue=k(require("fs")),hi=k(require("path")),ui=k(require("readline"));var bn="https://www.app.getdecipher.com/settings?tab=testing";async function wn(){H("Login"),C("To authenticate, grab your API token from:"),console.log(` ${bn}`),console.log();let n=ui.default.createInterface({input:process.stdin,output:process.stdout}),e=await new Promise(i=>{n.question(" Paste your API token: ",s=>{n.close(),i(s.trim())})});e||(D("No token provided. Aborting."),process.exit(1));let t=hi.default.dirname(A);Ue.default.mkdirSync(t,{recursive:!0}),Ue.default.writeFileSync(A,JSON.stringify({token:e},null,2),"utf-8"),console.log(),O("Token saved to "+A),C("You can now use `decipher-qa test`, `decipher-qa steps`, etc."),console.log()}var pi=new u("login").description("Authenticate with Decipher by saving your API token").action(wn);async function kn(){H("Who Am I");let n=q();C("Verifying token..."),console.log();let e;try{e=await fetch(`${L}/api/v1/whoami`,{headers:{Authorization:`Bearer ${n.token}`}})}catch{D("Could not connect to Decipher API."),C("Check your network connection and try again."),process.exit(1)}e.ok||(e.status===401?(D("Token is invalid, revoked, or expired."),C("Run `decipher-qa login` to re-authenticate.")):D(`Unexpected response: ${e.status} ${e.statusText}`),process.exit(1));let t=await e.json();O("Token is valid!"),console.log(),Ne(),E("Key Name",t.key_name),E("Key Prefix",t.key_prefix),E("Organization",t.organization??"\u2014"),E("Scopes",t.scopes.join(", ")||"none"),E("Created By",t.created_by??"\u2014"),E("Created At",t.created_at),E("Expires At",t.expires_at??"never"),E("Last Used",t.last_used_at??"\u2014"),Ne(),console.log()}var mi=new u("whoami").description("Display information about the current API token").action(kn);var Le=k(require("fs")),$e=k(require("path")),fi=k(require("crypto"));var gi=new u("screenshot").description("Download a Decipher screenshot to a temp file for viewing").requiredOption("--url <url>","The screenshot URL from decipher-qa CLI responses").action(async n=>{let e=n.url;try{let t=new URL(e);t.searchParams.set("format","raw");let i=await fetch(t.toString());i.ok||(console.error(JSON.stringify({error:`Failed to fetch screenshot: HTTP ${i.status} ${i.statusText}`})),process.exit(1));let s=i.headers.get("content-type")||"image/png",r=s.includes("webp")?".webp":s.includes("jpeg")||s.includes("jpg")?".jpg":".png",o=fi.default.createHash("md5").update(e).digest("hex").slice(0,8),a=ne(process.cwd())||process.cwd(),l=$e.default.join(a,".decipher","screenshots");Le.default.mkdirSync(l,{recursive:!0});let c=$e.default.join(l,`decipher-screenshot-${o}${r}`),d=Buffer.from(await i.arrayBuffer());Le.default.writeFileSync(c,d),console.log(c)}catch(t){let i=t instanceof Error?t.message:String(t);console.error(JSON.stringify({error:`Error fetching screenshot: ${i}`})),process.exit(1)}});var yi={name:"@decipher-sdk/decipher-qa",version:"0.1.2",bin:{"decipher-qa":"dist/index.js"},main:"./dist/index.js",files:["dist"],scripts:{build:"tsup","check-types":"tsc -p tsconfig.json --noEmit",clean:"rm -rf dist tsconfig.tsbuildinfo",dev:"tsup --watch",prepublishOnly:"npm run build"},author:"Decipher AI",license:"UNLICENSED",description:"Decipher QA Agent CLI \u2014 scaffolds Claude Code skills for QA test management",engines:{node:">=18"},dependencies:{chalk:"^4.1.2",commander:"^12.1.0"},devDependencies:{"@types/node":"^22.0.0",tsup:"^8.0.0",typescript:"^5.4.3"},keywords:[]};var T=new u;T.name(Ze).description("Decipher QA Agent CLI").version(yi.version,"-v, --version");T.addCommand(Ht);T.addCommand(Bt);T.addCommand(si);T.addCommand(di);T.addCommand(pi);T.addCommand(mi);T.addCommand(gi);T.parse();
|