@spree/cli 2.4.7 → 2.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
- var ty=Object.create;var $a=Object.defineProperty;var ry=Object.getOwnPropertyDescriptor;var iy=Object.getOwnPropertyNames;var ny=Object.getPrototypeOf,sy=Object.prototype.hasOwnProperty;var he=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var A=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}};var oy=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of iy(t))!sy.call(e,n)&&n!==r&&$a(e,n,{get:()=>t[n],enumerable:!(i=ry(t,n))||i.enumerable});return e};var D=(e,t,r)=>(r=e!=null?ty(ny(e)):{},oy(t||!e||!e.__esModule?$a(r,"default",{value:e,enumerable:!0}):r,e));var sr=A(Nn=>{"use strict";var Jr=class extends Error{constructor(t,r,i){super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=r,this.exitCode=t,this.nestedError=void 0}},Un=class extends Jr{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Nn.CommanderError=Jr;Nn.InvalidArgumentError=Un});var Xr=A(zn=>{"use strict";var{InvalidArgumentError:ay}=sr(),Gn=class{constructor(t,r){switch(this.description=r||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,t[0]){case"<":this.required=!0,this._name=t.slice(1,-1);break;case"[":this.required=!1,this._name=t.slice(1,-1);break;default:this.required=!0,this._name=t;break}this._name.endsWith("...")&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(t,r){return r===this.defaultValue||!Array.isArray(r)?[t]:(r.push(t),r)}default(t,r){return this.defaultValue=t,this.defaultValueDescription=r,this}argParser(t){return this.parseArg=t,this}choices(t){return this.argChoices=t.slice(),this.parseArg=(r,i)=>{if(!this.argChoices.includes(r))throw new ay(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(r,i):r},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function cy(e){let t=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+t+">":"["+t+"]"}zn.Argument=Gn;zn.humanReadableArgName=cy});var Hn=A(Wn=>{"use strict";var{humanReadableArgName:py}=Xr(),Vn=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(t){this.helpWidth=this.helpWidth??t.helpWidth??80}visibleCommands(t){let r=t.commands.filter(n=>!n._hidden),i=t._getHelpCommand();return i&&!i._hidden&&r.push(i),this.sortSubcommands&&r.sort((n,s)=>n.name().localeCompare(s.name())),r}compareOptions(t,r){let i=n=>n.short?n.short.replace(/^-/,""):n.long.replace(/^--/,"");return i(t).localeCompare(i(r))}visibleOptions(t){let r=t.options.filter(n=>!n.hidden),i=t._getHelpOption();if(i&&!i.hidden){let n=i.short&&t._findOption(i.short),s=i.long&&t._findOption(i.long);!n&&!s?r.push(i):i.long&&!s?r.push(t.createOption(i.long,i.description)):i.short&&!n&&r.push(t.createOption(i.short,i.description))}return this.sortOptions&&r.sort(this.compareOptions),r}visibleGlobalOptions(t){if(!this.showGlobalOptions)return[];let r=[];for(let i=t.parent;i;i=i.parent){let n=i.options.filter(s=>!s.hidden);r.push(...n)}return this.sortOptions&&r.sort(this.compareOptions),r}visibleArguments(t){return t._argsDescription&&t.registeredArguments.forEach(r=>{r.description=r.description||t._argsDescription[r.name()]||""}),t.registeredArguments.find(r=>r.description)?t.registeredArguments:[]}subcommandTerm(t){let r=t.registeredArguments.map(i=>py(i)).join(" ");return t._name+(t._aliases[0]?"|"+t._aliases[0]:"")+(t.options.length?" [options]":"")+(r?" "+r:"")}optionTerm(t){return t.flags}argumentTerm(t){return t.name()}longestSubcommandTermLength(t,r){return r.visibleCommands(t).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleSubcommandTerm(r.subcommandTerm(n)))),0)}longestOptionTermLength(t,r){return r.visibleOptions(t).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleOptionTerm(r.optionTerm(n)))),0)}longestGlobalOptionTermLength(t,r){return r.visibleGlobalOptions(t).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleOptionTerm(r.optionTerm(n)))),0)}longestArgumentTermLength(t,r){return r.visibleArguments(t).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleArgumentTerm(r.argumentTerm(n)))),0)}commandUsage(t){let r=t._name;t._aliases[0]&&(r=r+"|"+t._aliases[0]);let i="";for(let n=t.parent;n;n=n.parent)i=n.name()+" "+i;return i+r+" "+t.usage()}commandDescription(t){return t.description()}subcommandDescription(t){return t.summary()||t.description()}optionDescription(t){let r=[];if(t.argChoices&&r.push(`choices: ${t.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),t.defaultValue!==void 0&&(t.required||t.optional||t.isBoolean()&&typeof t.defaultValue=="boolean")&&r.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),t.presetArg!==void 0&&t.optional&&r.push(`preset: ${JSON.stringify(t.presetArg)}`),t.envVar!==void 0&&r.push(`env: ${t.envVar}`),r.length>0){let i=`(${r.join(", ")})`;return t.description?`${t.description} ${i}`:i}return t.description}argumentDescription(t){let r=[];if(t.argChoices&&r.push(`choices: ${t.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),t.defaultValue!==void 0&&r.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),r.length>0){let i=`(${r.join(", ")})`;return t.description?`${t.description} ${i}`:i}return t.description}formatItemList(t,r,i){return r.length===0?[]:[i.styleTitle(t),...r,""]}groupItems(t,r,i){let n=new Map;return t.forEach(s=>{let o=i(s);n.has(o)||n.set(o,[])}),r.forEach(s=>{let o=i(s);n.has(o)||n.set(o,[]),n.get(o).push(s)}),n}formatHelp(t,r){let i=r.padWidth(t,r),n=r.helpWidth??80;function s(u,l){return r.formatItem(u,i,l,r)}let o=[`${r.styleTitle("Usage:")} ${r.styleUsage(r.commandUsage(t))}`,""],a=r.commandDescription(t);a.length>0&&(o=o.concat([r.boxWrap(r.styleCommandDescription(a),n),""]));let c=r.visibleArguments(t).map(u=>s(r.styleArgumentTerm(r.argumentTerm(u)),r.styleArgumentDescription(r.argumentDescription(u))));if(o=o.concat(this.formatItemList("Arguments:",c,r)),this.groupItems(t.options,r.visibleOptions(t),u=>u.helpGroupHeading??"Options:").forEach((u,l)=>{let m=u.map(h=>s(r.styleOptionTerm(r.optionTerm(h)),r.styleOptionDescription(r.optionDescription(h))));o=o.concat(this.formatItemList(l,m,r))}),r.showGlobalOptions){let u=r.visibleGlobalOptions(t).map(l=>s(r.styleOptionTerm(r.optionTerm(l)),r.styleOptionDescription(r.optionDescription(l))));o=o.concat(this.formatItemList("Global Options:",u,r))}return this.groupItems(t.commands,r.visibleCommands(t),u=>u.helpGroup()||"Commands:").forEach((u,l)=>{let m=u.map(h=>s(r.styleSubcommandTerm(r.subcommandTerm(h)),r.styleSubcommandDescription(r.subcommandDescription(h))));o=o.concat(this.formatItemList(l,m,r))}),o.join(`
4
+ var ty=Object.create;var $a=Object.defineProperty;var ry=Object.getOwnPropertyDescriptor;var iy=Object.getOwnPropertyNames;var ny=Object.getPrototypeOf,sy=Object.prototype.hasOwnProperty;var he=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var A=(e,t)=>()=>{try{return t||e((t={exports:{}}).exports,t),t.exports}catch(r){throw t=0,r}};var oy=(e,t,r,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of iy(t))!sy.call(e,n)&&n!==r&&$a(e,n,{get:()=>t[n],enumerable:!(i=ry(t,n))||i.enumerable});return e};var D=(e,t,r)=>(r=e!=null?ty(ny(e)):{},oy(t||!e||!e.__esModule?$a(r,"default",{value:e,enumerable:!0}):r,e));var or=A(Nn=>{"use strict";var Xr=class extends Error{constructor(t,r,i){super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=r,this.exitCode=t,this.nestedError=void 0}},Un=class extends Xr{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Nn.CommanderError=Xr;Nn.InvalidArgumentError=Un});var Zr=A(zn=>{"use strict";var{InvalidArgumentError:ay}=or(),Gn=class{constructor(t,r){switch(this.description=r||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,t[0]){case"<":this.required=!0,this._name=t.slice(1,-1);break;case"[":this.required=!1,this._name=t.slice(1,-1);break;default:this.required=!0,this._name=t;break}this._name.endsWith("...")&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_collectValue(t,r){return r===this.defaultValue||!Array.isArray(r)?[t]:(r.push(t),r)}default(t,r){return this.defaultValue=t,this.defaultValueDescription=r,this}argParser(t){return this.parseArg=t,this}choices(t){return this.argChoices=t.slice(),this.parseArg=(r,i)=>{if(!this.argChoices.includes(r))throw new ay(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(r,i):r},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function cy(e){let t=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+t+">":"["+t+"]"}zn.Argument=Gn;zn.humanReadableArgName=cy});var Hn=A(Wn=>{"use strict";var{humanReadableArgName:py}=Zr(),Vn=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(t){this.helpWidth=this.helpWidth??t.helpWidth??80}visibleCommands(t){let r=t.commands.filter(n=>!n._hidden),i=t._getHelpCommand();return i&&!i._hidden&&r.push(i),this.sortSubcommands&&r.sort((n,s)=>n.name().localeCompare(s.name())),r}compareOptions(t,r){let i=n=>n.short?n.short.replace(/^-/,""):n.long.replace(/^--/,"");return i(t).localeCompare(i(r))}visibleOptions(t){let r=t.options.filter(n=>!n.hidden),i=t._getHelpOption();if(i&&!i.hidden){let n=i.short&&t._findOption(i.short),s=i.long&&t._findOption(i.long);!n&&!s?r.push(i):i.long&&!s?r.push(t.createOption(i.long,i.description)):i.short&&!n&&r.push(t.createOption(i.short,i.description))}return this.sortOptions&&r.sort(this.compareOptions),r}visibleGlobalOptions(t){if(!this.showGlobalOptions)return[];let r=[];for(let i=t.parent;i;i=i.parent){let n=i.options.filter(s=>!s.hidden);r.push(...n)}return this.sortOptions&&r.sort(this.compareOptions),r}visibleArguments(t){return t._argsDescription&&t.registeredArguments.forEach(r=>{r.description=r.description||t._argsDescription[r.name()]||""}),t.registeredArguments.find(r=>r.description)?t.registeredArguments:[]}subcommandTerm(t){let r=t.registeredArguments.map(i=>py(i)).join(" ");return t._name+(t._aliases[0]?"|"+t._aliases[0]:"")+(t.options.length?" [options]":"")+(r?" "+r:"")}optionTerm(t){return t.flags}argumentTerm(t){return t.name()}longestSubcommandTermLength(t,r){return r.visibleCommands(t).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleSubcommandTerm(r.subcommandTerm(n)))),0)}longestOptionTermLength(t,r){return r.visibleOptions(t).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleOptionTerm(r.optionTerm(n)))),0)}longestGlobalOptionTermLength(t,r){return r.visibleGlobalOptions(t).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleOptionTerm(r.optionTerm(n)))),0)}longestArgumentTermLength(t,r){return r.visibleArguments(t).reduce((i,n)=>Math.max(i,this.displayWidth(r.styleArgumentTerm(r.argumentTerm(n)))),0)}commandUsage(t){let r=t._name;t._aliases[0]&&(r=r+"|"+t._aliases[0]);let i="";for(let n=t.parent;n;n=n.parent)i=n.name()+" "+i;return i+r+" "+t.usage()}commandDescription(t){return t.description()}subcommandDescription(t){return t.summary()||t.description()}optionDescription(t){let r=[];if(t.argChoices&&r.push(`choices: ${t.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),t.defaultValue!==void 0&&(t.required||t.optional||t.isBoolean()&&typeof t.defaultValue=="boolean")&&r.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),t.presetArg!==void 0&&t.optional&&r.push(`preset: ${JSON.stringify(t.presetArg)}`),t.envVar!==void 0&&r.push(`env: ${t.envVar}`),r.length>0){let i=`(${r.join(", ")})`;return t.description?`${t.description} ${i}`:i}return t.description}argumentDescription(t){let r=[];if(t.argChoices&&r.push(`choices: ${t.argChoices.map(i=>JSON.stringify(i)).join(", ")}`),t.defaultValue!==void 0&&r.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),r.length>0){let i=`(${r.join(", ")})`;return t.description?`${t.description} ${i}`:i}return t.description}formatItemList(t,r,i){return r.length===0?[]:[i.styleTitle(t),...r,""]}groupItems(t,r,i){let n=new Map;return t.forEach(s=>{let o=i(s);n.has(o)||n.set(o,[])}),r.forEach(s=>{let o=i(s);n.has(o)||n.set(o,[]),n.get(o).push(s)}),n}formatHelp(t,r){let i=r.padWidth(t,r),n=r.helpWidth??80;function s(u,l){return r.formatItem(u,i,l,r)}let o=[`${r.styleTitle("Usage:")} ${r.styleUsage(r.commandUsage(t))}`,""],a=r.commandDescription(t);a.length>0&&(o=o.concat([r.boxWrap(r.styleCommandDescription(a),n),""]));let c=r.visibleArguments(t).map(u=>s(r.styleArgumentTerm(r.argumentTerm(u)),r.styleArgumentDescription(r.argumentDescription(u))));if(o=o.concat(this.formatItemList("Arguments:",c,r)),this.groupItems(t.options,r.visibleOptions(t),u=>u.helpGroupHeading??"Options:").forEach((u,l)=>{let m=u.map(h=>s(r.styleOptionTerm(r.optionTerm(h)),r.styleOptionDescription(r.optionDescription(h))));o=o.concat(this.formatItemList(l,m,r))}),r.showGlobalOptions){let u=r.visibleGlobalOptions(t).map(l=>s(r.styleOptionTerm(r.optionTerm(l)),r.styleOptionDescription(r.optionDescription(l))));o=o.concat(this.formatItemList("Global Options:",u,r))}return this.groupItems(t.commands,r.visibleCommands(t),u=>u.helpGroup()||"Commands:").forEach((u,l)=>{let m=u.map(h=>s(r.styleSubcommandTerm(r.subcommandTerm(h)),r.styleSubcommandDescription(r.subcommandDescription(h))));o=o.concat(this.formatItemList(l,m,r))}),o.join(`
5
5
  `)}displayWidth(t){return Aa(t).length}styleTitle(t){return t}styleUsage(t){return t.split(" ").map(r=>r==="[options]"?this.styleOptionText(r):r==="[command]"?this.styleSubcommandText(r):r[0]==="["||r[0]==="<"?this.styleArgumentText(r):this.styleCommandText(r)).join(" ")}styleCommandDescription(t){return this.styleDescriptionText(t)}styleOptionDescription(t){return this.styleDescriptionText(t)}styleSubcommandDescription(t){return this.styleDescriptionText(t)}styleArgumentDescription(t){return this.styleDescriptionText(t)}styleDescriptionText(t){return t}styleOptionTerm(t){return this.styleOptionText(t)}styleSubcommandTerm(t){return t.split(" ").map(r=>r==="[options]"?this.styleOptionText(r):r[0]==="["||r[0]==="<"?this.styleArgumentText(r):this.styleSubcommandText(r)).join(" ")}styleArgumentTerm(t){return this.styleArgumentText(t)}styleOptionText(t){return t}styleArgumentText(t){return t}styleSubcommandText(t){return t}styleCommandText(t){return t}padWidth(t,r){return Math.max(r.longestOptionTermLength(t,r),r.longestGlobalOptionTermLength(t,r),r.longestSubcommandTermLength(t,r),r.longestArgumentTermLength(t,r))}preformatted(t){return/\n[^\S\r\n]/.test(t)}formatItem(t,r,i,n){let o=" ".repeat(2);if(!i)return o+t;let a=t.padEnd(r+t.length-n.displayWidth(t)),c=2,p=(this.helpWidth??80)-r-c-2,u;return p<this.minWidthToWrap||n.preformatted(i)?u=i:u=n.boxWrap(i,p).replace(/\n/g,`
6
6
  `+" ".repeat(r+c)),o+a+" ".repeat(c)+u.replace(/\n/g,`
7
7
  ${o}`)}boxWrap(t,r){if(r<this.minWidthToWrap)return t;let i=t.split(/\r\n|\n/),n=/[\s]*[^\s]+/g,s=[];return i.forEach(o=>{let a=o.match(n);if(a===null){s.push("");return}let c=[a.shift()],d=this.displayWidth(c[0]);a.forEach(p=>{let u=this.displayWidth(p);if(d+u<=r){c.push(p),d+=u;return}s.push(c.join(""));let l=p.trimStart();c=[l],d=this.displayWidth(l)}),s.push(c.join(""))}),s.join(`
8
- `)}};function Aa(e){let t=/\x1b\[\d*(;\d*)*m/g;return e.replace(t,"")}Wn.Help=Vn;Wn.stripColor=Aa});var Xn=A(Jn=>{"use strict";var{InvalidArgumentError:dy}=sr(),Kn=class{constructor(t,r){this.flags=t,this.description=r||"",this.required=t.includes("<"),this.optional=t.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(t),this.mandatory=!1;let i=uy(t);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,this.helpGroupHeading=void 0}default(t,r){return this.defaultValue=t,this.defaultValueDescription=r,this}preset(t){return this.presetArg=t,this}conflicts(t){return this.conflictsWith=this.conflictsWith.concat(t),this}implies(t){let r=t;return typeof t=="string"&&(r={[t]:!0}),this.implied=Object.assign(this.implied||{},r),this}env(t){return this.envVar=t,this}argParser(t){return this.parseArg=t,this}makeOptionMandatory(t=!0){return this.mandatory=!!t,this}hideHelp(t=!0){return this.hidden=!!t,this}_collectValue(t,r){return r===this.defaultValue||!Array.isArray(r)?[t]:(r.push(t),r)}choices(t){return this.argChoices=t.slice(),this.parseArg=(r,i)=>{if(!this.argChoices.includes(r))throw new dy(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(r,i):r},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?Ca(this.name().replace(/^no-/,"")):Ca(this.name())}helpGroup(t){return this.helpGroupHeading=t,this}is(t){return this.short===t||this.long===t}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Yn=class{constructor(t){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,t.forEach(r=>{r.negate?this.negativeOptions.set(r.attributeName(),r):this.positiveOptions.set(r.attributeName(),r)}),this.negativeOptions.forEach((r,i)=>{this.positiveOptions.has(i)&&this.dualOptions.add(i)})}valueFromOption(t,r){let i=r.attributeName();if(!this.dualOptions.has(i))return!0;let n=this.negativeOptions.get(i).presetArg,s=n!==void 0?n:!1;return r.negate===(s===t)}};function Ca(e){return e.split("-").reduce((t,r)=>t+r[0].toUpperCase()+r.slice(1))}function uy(e){let t,r,i=/^-[^-]$/,n=/^--[^-]/,s=e.split(/[ |,]+/).concat("guard");if(i.test(s[0])&&(t=s.shift()),n.test(s[0])&&(r=s.shift()),!t&&i.test(s[0])&&(t=s.shift()),!t&&n.test(s[0])&&(t=r,r=s.shift()),s[0].startsWith("-")){let o=s[0],a=`option creation failed due to '${o}' in option flags '${e}'`;throw/^-[^-][^-]/.test(o)?new Error(`${a}
8
+ `)}};function Aa(e){let t=/\x1b\[\d*(;\d*)*m/g;return e.replace(t,"")}Wn.Help=Vn;Wn.stripColor=Aa});var Xn=A(Jn=>{"use strict";var{InvalidArgumentError:dy}=or(),Kn=class{constructor(t,r){this.flags=t,this.description=r||"",this.required=t.includes("<"),this.optional=t.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(t),this.mandatory=!1;let i=uy(t);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,this.helpGroupHeading=void 0}default(t,r){return this.defaultValue=t,this.defaultValueDescription=r,this}preset(t){return this.presetArg=t,this}conflicts(t){return this.conflictsWith=this.conflictsWith.concat(t),this}implies(t){let r=t;return typeof t=="string"&&(r={[t]:!0}),this.implied=Object.assign(this.implied||{},r),this}env(t){return this.envVar=t,this}argParser(t){return this.parseArg=t,this}makeOptionMandatory(t=!0){return this.mandatory=!!t,this}hideHelp(t=!0){return this.hidden=!!t,this}_collectValue(t,r){return r===this.defaultValue||!Array.isArray(r)?[t]:(r.push(t),r)}choices(t){return this.argChoices=t.slice(),this.parseArg=(r,i)=>{if(!this.argChoices.includes(r))throw new dy(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(r,i):r},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?Ca(this.name().replace(/^no-/,"")):Ca(this.name())}helpGroup(t){return this.helpGroupHeading=t,this}is(t){return this.short===t||this.long===t}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Yn=class{constructor(t){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,t.forEach(r=>{r.negate?this.negativeOptions.set(r.attributeName(),r):this.positiveOptions.set(r.attributeName(),r)}),this.negativeOptions.forEach((r,i)=>{this.positiveOptions.has(i)&&this.dualOptions.add(i)})}valueFromOption(t,r){let i=r.attributeName();if(!this.dualOptions.has(i))return!0;let n=this.negativeOptions.get(i).presetArg,s=n!==void 0?n:!1;return r.negate===(s===t)}};function Ca(e){return e.split("-").reduce((t,r)=>t+r[0].toUpperCase()+r.slice(1))}function uy(e){let t,r,i=/^-[^-]$/,n=/^--[^-]/,s=e.split(/[ |,]+/).concat("guard");if(i.test(s[0])&&(t=s.shift()),n.test(s[0])&&(r=s.shift()),!t&&i.test(s[0])&&(t=s.shift()),!t&&n.test(s[0])&&(t=r,r=s.shift()),s[0].startsWith("-")){let o=s[0],a=`option creation failed due to '${o}' in option flags '${e}'`;throw/^-[^-][^-]/.test(o)?new Error(`${a}
9
9
  - a short flag is a single dash and a single character
10
10
  - either use a single dash and a single character (for a short flag)
11
11
  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`):i.test(o)?new Error(`${a}
@@ -13,159 +13,159 @@ ${o}`)}boxWrap(t,r){if(r<this.minWidthToWrap)return t;let i=t.split(/\r\n|\n/),n
13
13
  - too many long flags`):new Error(`${a}
14
14
  - unrecognised flag format`)}if(t===void 0&&r===void 0)throw new Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:r}}Jn.Option=Kn;Jn.DualOptions=Yn});var Pa=A(Ea=>{"use strict";function ly(e,t){if(Math.abs(e.length-t.length)>3)return Math.max(e.length,t.length);let r=[];for(let i=0;i<=e.length;i++)r[i]=[i];for(let i=0;i<=t.length;i++)r[0][i]=i;for(let i=1;i<=t.length;i++)for(let n=1;n<=e.length;n++){let s=1;e[n-1]===t[i-1]?s=0:s=1,r[n][i]=Math.min(r[n-1][i]+1,r[n][i-1]+1,r[n-1][i-1]+s),n>1&&i>1&&e[n-1]===t[i-2]&&e[n-2]===t[i-1]&&(r[n][i]=Math.min(r[n][i],r[n-2][i-2]+1))}return r[e.length][t.length]}function my(e,t){if(!t||t.length===0)return"";t=Array.from(new Set(t));let r=e.startsWith("--");r&&(e=e.slice(2),t=t.map(o=>o.slice(2)));let i=[],n=3,s=.4;return t.forEach(o=>{if(o.length<=1)return;let a=ly(e,o),c=Math.max(e.length,o.length);(c-a)/c>s&&(a<n?(n=a,i=[o]):a===n&&i.push(o))}),i.sort((o,a)=>o.localeCompare(a)),r&&(i=i.map(o=>`--${o}`)),i.length>1?`
15
15
  (Did you mean one of ${i.join(", ")}?)`:i.length===1?`
16
- (Did you mean ${i[0]}?)`:""}Ea.suggestSimilar=my});var Oa=A(rs=>{"use strict";var hy=he("events").EventEmitter,Zn=he("child_process"),Ye=he("path"),Zr=he("fs"),I=he("process"),{Argument:yy,humanReadableArgName:fy}=Xr(),{CommanderError:Qn}=sr(),{Help:gy,stripColor:_y}=Hn(),{Option:Ta,DualOptions:by}=Xn(),{suggestSimilar:Ra}=Pa(),es=class e extends hy{constructor(t){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=t||"",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._savedState=null,this._outputConfiguration={writeOut:r=>I.stdout.write(r),writeErr:r=>I.stderr.write(r),outputError:(r,i)=>i(r),getOutHelpWidth:()=>I.stdout.isTTY?I.stdout.columns:void 0,getErrHelpWidth:()=>I.stderr.isTTY?I.stderr.columns:void 0,getOutHasColors:()=>ts()??(I.stdout.isTTY&&I.stdout.hasColors?.()),getErrHasColors:()=>ts()??(I.stderr.isTTY&&I.stderr.hasColors?.()),stripColor:r=>_y(r)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(t){return this._outputConfiguration=t._outputConfiguration,this._helpOption=t._helpOption,this._helpCommand=t._helpCommand,this._helpConfiguration=t._helpConfiguration,this._exitCallback=t._exitCallback,this._storeOptionsAsProperties=t._storeOptionsAsProperties,this._combineFlagAndOptionalValue=t._combineFlagAndOptionalValue,this._allowExcessArguments=t._allowExcessArguments,this._enablePositionalOptions=t._enablePositionalOptions,this._showHelpAfterError=t._showHelpAfterError,this._showSuggestionAfterError=t._showSuggestionAfterError,this}_getCommandAndAncestors(){let t=[];for(let r=this;r;r=r.parent)t.push(r);return t}command(t,r,i){let n=r,s=i;typeof n=="object"&&n!==null&&(s=n,n=null),s=s||{};let[,o,a]=t.match(/([^ ]+) *(.*)/),c=this.createCommand(o);return n&&(c.description(n),c._executableHandler=!0),s.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(s.noHelp||s.hidden),c._executableFile=s.executableFile||null,a&&c.arguments(a),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),n?this:c}createCommand(t){return new e(t)}createHelp(){return Object.assign(new gy,this.configureHelp())}configureHelp(t){return t===void 0?this._helpConfiguration:(this._helpConfiguration=t,this)}configureOutput(t){return t===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...t},this)}showHelpAfterError(t=!0){return typeof t!="string"&&(t=!!t),this._showHelpAfterError=t,this}showSuggestionAfterError(t=!0){return this._showSuggestionAfterError=!!t,this}addCommand(t,r){if(!t._name)throw new Error(`Command passed to .addCommand() must have a name
16
+ (Did you mean ${i[0]}?)`:""}Ea.suggestSimilar=my});var Oa=A(rs=>{"use strict";var hy=he("events").EventEmitter,Zn=he("child_process"),Ye=he("path"),Qr=he("fs"),I=he("process"),{Argument:yy,humanReadableArgName:fy}=Zr(),{CommanderError:Qn}=or(),{Help:gy,stripColor:_y}=Hn(),{Option:Ta,DualOptions:by}=Xn(),{suggestSimilar:Ra}=Pa(),es=class e extends hy{constructor(t){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=t||"",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._savedState=null,this._outputConfiguration={writeOut:r=>I.stdout.write(r),writeErr:r=>I.stderr.write(r),outputError:(r,i)=>i(r),getOutHelpWidth:()=>I.stdout.isTTY?I.stdout.columns:void 0,getErrHelpWidth:()=>I.stderr.isTTY?I.stderr.columns:void 0,getOutHasColors:()=>ts()??(I.stdout.isTTY&&I.stdout.hasColors?.()),getErrHasColors:()=>ts()??(I.stderr.isTTY&&I.stderr.hasColors?.()),stripColor:r=>_y(r)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={},this._helpGroupHeading=void 0,this._defaultCommandGroup=void 0,this._defaultOptionGroup=void 0}copyInheritedSettings(t){return this._outputConfiguration=t._outputConfiguration,this._helpOption=t._helpOption,this._helpCommand=t._helpCommand,this._helpConfiguration=t._helpConfiguration,this._exitCallback=t._exitCallback,this._storeOptionsAsProperties=t._storeOptionsAsProperties,this._combineFlagAndOptionalValue=t._combineFlagAndOptionalValue,this._allowExcessArguments=t._allowExcessArguments,this._enablePositionalOptions=t._enablePositionalOptions,this._showHelpAfterError=t._showHelpAfterError,this._showSuggestionAfterError=t._showSuggestionAfterError,this}_getCommandAndAncestors(){let t=[];for(let r=this;r;r=r.parent)t.push(r);return t}command(t,r,i){let n=r,s=i;typeof n=="object"&&n!==null&&(s=n,n=null),s=s||{};let[,o,a]=t.match(/([^ ]+) *(.*)/),c=this.createCommand(o);return n&&(c.description(n),c._executableHandler=!0),s.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(s.noHelp||s.hidden),c._executableFile=s.executableFile||null,a&&c.arguments(a),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),n?this:c}createCommand(t){return new e(t)}createHelp(){return Object.assign(new gy,this.configureHelp())}configureHelp(t){return t===void 0?this._helpConfiguration:(this._helpConfiguration=t,this)}configureOutput(t){return t===void 0?this._outputConfiguration:(this._outputConfiguration={...this._outputConfiguration,...t},this)}showHelpAfterError(t=!0){return typeof t!="string"&&(t=!!t),this._showHelpAfterError=t,this}showSuggestionAfterError(t=!0){return this._showSuggestionAfterError=!!t,this}addCommand(t,r){if(!t._name)throw new Error(`Command passed to .addCommand() must have a name
17
17
  - specify the name in Command constructor or using .name()`);return r=r||{},r.isDefault&&(this._defaultCommandName=t._name),(r.noHelp||r.hidden)&&(t._hidden=!0),this._registerCommand(t),t.parent=this,t._checkForBrokenPassThrough(),this}createArgument(t,r){return new yy(t,r)}argument(t,r,i,n){let s=this.createArgument(t,r);return typeof i=="function"?s.default(n).argParser(i):s.default(i),this.addArgument(s),this}arguments(t){return t.trim().split(/ +/).forEach(r=>{this.argument(r)}),this}addArgument(t){let r=this.registeredArguments.slice(-1)[0];if(r?.variadic)throw new Error(`only the last argument can be variadic '${r.name()}'`);if(t.required&&t.defaultValue!==void 0&&t.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${t.name()}'`);return this.registeredArguments.push(t),this}helpCommand(t,r){if(typeof t=="boolean")return this._addImplicitHelpCommand=t,t&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;let i=t??"help [command]",[,n,s]=i.match(/([^ ]+) *(.*)/),o=r??"display help for command",a=this.createCommand(n);return a.helpOption(!1),s&&a.arguments(s),o&&a.description(o),this._addImplicitHelpCommand=!0,this._helpCommand=a,(t||r)&&this._initCommandGroup(a),this}addHelpCommand(t,r){return typeof t!="object"?(this.helpCommand(t,r),this):(this._addImplicitHelpCommand=!0,this._helpCommand=t,this._initCommandGroup(t),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(t,r){let i=["preSubcommand","preAction","postAction"];if(!i.includes(t))throw new Error(`Unexpected value for event passed to hook : '${t}'.
18
18
  Expecting one of '${i.join("', '")}'`);return this._lifeCycleHooks[t]?this._lifeCycleHooks[t].push(r):this._lifeCycleHooks[t]=[r],this}exitOverride(t){return t?this._exitCallback=t:this._exitCallback=r=>{if(r.code!=="commander.executeSubCommandAsync")throw r},this}_exit(t,r,i){this._exitCallback&&this._exitCallback(new Qn(t,r,i)),I.exit(t)}action(t){let r=i=>{let n=this.registeredArguments.length,s=i.slice(0,n);return this._storeOptionsAsProperties?s[n]=this:s[n]=this.opts(),s.push(this),t.apply(this,s)};return this._actionHandler=r,this}createOption(t,r){return new Ta(t,r)}_callParseArg(t,r,i,n){try{return t.parseArg(r,i)}catch(s){if(s.code==="commander.invalidArgument"){let o=`${n} ${s.message}`;this.error(o,{exitCode:s.exitCode,code:s.code})}throw s}}_registerOption(t){let r=t.short&&this._findOption(t.short)||t.long&&this._findOption(t.long);if(r){let i=t.long&&this._findOption(t.long)?t.long:t.short;throw new Error(`Cannot add option '${t.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${i}'
19
19
  - already used by option '${r.flags}'`)}this._initOptionGroup(t),this.options.push(t)}_registerCommand(t){let r=n=>[n.name()].concat(n.aliases()),i=r(t).find(n=>this._findCommand(n));if(i){let n=r(this._findCommand(i)).join("|"),s=r(t).join("|");throw new Error(`cannot add command '${s}' as already have command '${n}'`)}this._initCommandGroup(t),this.commands.push(t)}addOption(t){this._registerOption(t);let r=t.name(),i=t.attributeName();if(t.negate){let s=t.long.replace(/^--no-/,"--");this._findOption(s)||this.setOptionValueWithSource(i,t.defaultValue===void 0?!0:t.defaultValue,"default")}else t.defaultValue!==void 0&&this.setOptionValueWithSource(i,t.defaultValue,"default");let n=(s,o,a)=>{s==null&&t.presetArg!==void 0&&(s=t.presetArg);let c=this.getOptionValue(i);s!==null&&t.parseArg?s=this._callParseArg(t,s,c,o):s!==null&&t.variadic&&(s=t._collectValue(s,c)),s==null&&(t.negate?s=!1:t.isBoolean()||t.optional?s=!0:s=""),this.setOptionValueWithSource(i,s,a)};return this.on("option:"+r,s=>{let o=`error: option '${t.flags}' argument '${s}' is invalid.`;n(s,o,"cli")}),t.envVar&&this.on("optionEnv:"+r,s=>{let o=`error: option '${t.flags}' value '${s}' from env '${t.envVar}' is invalid.`;n(s,o,"env")}),this}_optionEx(t,r,i,n,s){if(typeof r=="object"&&r instanceof Ta)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(r,i);if(o.makeOptionMandatory(!!t.mandatory),typeof n=="function")o.default(s).argParser(n);else if(n instanceof RegExp){let a=n;n=(c,d)=>{let p=a.exec(c);return p?p[0]:d},o.default(s).argParser(n)}else o.default(n);return this.addOption(o)}option(t,r,i,n){return this._optionEx({},t,r,i,n)}requiredOption(t,r,i,n){return this._optionEx({mandatory:!0},t,r,i,n)}combineFlagAndOptionalValue(t=!0){return this._combineFlagAndOptionalValue=!!t,this}allowUnknownOption(t=!0){return this._allowUnknownOption=!!t,this}allowExcessArguments(t=!0){return this._allowExcessArguments=!!t,this}enablePositionalOptions(t=!0){return this._enablePositionalOptions=!!t,this}passThroughOptions(t=!0){return this._passThroughOptions=!!t,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(t=!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=!!t,this}getOptionValue(t){return this._storeOptionsAsProperties?this[t]:this._optionValues[t]}setOptionValue(t,r){return this.setOptionValueWithSource(t,r,void 0)}setOptionValueWithSource(t,r,i){return this._storeOptionsAsProperties?this[t]=r:this._optionValues[t]=r,this._optionValueSources[t]=i,this}getOptionValueSource(t){return this._optionValueSources[t]}getOptionValueSourceWithGlobals(t){let r;return this._getCommandAndAncestors().forEach(i=>{i.getOptionValueSource(t)!==void 0&&(r=i.getOptionValueSource(t))}),r}_prepareUserArgs(t,r){if(t!==void 0&&!Array.isArray(t))throw new Error("first parameter to parse must be array or undefined");if(r=r||{},t===void 0&&r.from===void 0){I.versions?.electron&&(r.from="electron");let n=I.execArgv??[];(n.includes("-e")||n.includes("--eval")||n.includes("-p")||n.includes("--print"))&&(r.from="eval")}t===void 0&&(t=I.argv),this.rawArgs=t.slice();let i;switch(r.from){case void 0:case"node":this._scriptPath=t[1],i=t.slice(2);break;case"electron":I.defaultApp?(this._scriptPath=t[1],i=t.slice(2)):i=t.slice(1);break;case"user":i=t.slice(0);break;case"eval":i=t.slice(1);break;default:throw new Error(`unexpected parse option { from: '${r.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",i}parse(t,r){this._prepareForParse();let i=this._prepareUserArgs(t,r);return this._parseCommand([],i),this}async parseAsync(t,r){this._prepareForParse();let i=this._prepareUserArgs(t,r);return await this._parseCommand([],i),this}_prepareForParse(){this._savedState===null?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
20
- - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(t,r,i){if(Zr.existsSync(t))return;let n=r?`searched for local subcommand relative to directory '${r}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",s=`'${t}' does not exist
20
+ - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(t,r,i){if(Qr.existsSync(t))return;let n=r?`searched for local subcommand relative to directory '${r}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",s=`'${t}' does not exist
21
21
  - if '${i}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
22
22
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
23
- - ${n}`;throw new Error(s)}_executeSubCommand(t,r){r=r.slice();let i=!1,n=[".js",".ts",".tsx",".mjs",".cjs"];function s(p,u){let l=Ye.resolve(p,u);if(Zr.existsSync(l))return l;if(n.includes(Ye.extname(u)))return;let m=n.find(h=>Zr.existsSync(`${l}${h}`));if(m)return`${l}${m}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=t._executableFile||`${this._name}-${t._name}`,a=this._executableDir||"";if(this._scriptPath){let p;try{p=Zr.realpathSync(this._scriptPath)}catch{p=this._scriptPath}a=Ye.resolve(Ye.dirname(p),a)}if(a){let p=s(a,o);if(!p&&!t._executableFile&&this._scriptPath){let u=Ye.basename(this._scriptPath,Ye.extname(this._scriptPath));u!==this._name&&(p=s(a,`${u}-${t._name}`))}o=p||o}i=n.includes(Ye.extname(o));let c;I.platform!=="win32"?i?(r.unshift(o),r=Ia(I.execArgv).concat(r),c=Zn.spawn(I.argv[0],r,{stdio:"inherit"})):c=Zn.spawn(o,r,{stdio:"inherit"}):(this._checkForMissingExecutable(o,a,t._name),r.unshift(o),r=Ia(I.execArgv).concat(r),c=Zn.spawn(I.execPath,r,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(u=>{I.on(u,()=>{c.killed===!1&&c.exitCode===null&&c.kill(u)})});let d=this._exitCallback;c.on("close",p=>{p=p??1,d?d(new Qn(p,"commander.executeSubCommandAsync","(close)")):I.exit(p)}),c.on("error",p=>{if(p.code==="ENOENT")this._checkForMissingExecutable(o,a,t._name);else if(p.code==="EACCES")throw new Error(`'${o}' not executable`);if(!d)I.exit(1);else{let u=new Qn(1,"commander.executeSubCommandAsync","(error)");u.nestedError=p,d(u)}}),this.runningCommand=c}_dispatchSubcommand(t,r,i){let n=this._findCommand(t);n||this.help({error:!0}),n._prepareForParse();let s;return s=this._chainOrCallSubCommandHook(s,n,"preSubcommand"),s=this._chainOrCall(s,()=>{if(n._executableHandler)this._executeSubCommand(n,r.concat(i));else return n._parseCommand(r,i)}),s}_dispatchHelpCommand(t){t||this.help();let r=this._findCommand(t);return r&&!r._executableHandler&&r.help(),this._dispatchSubcommand(t,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((t,r)=>{t.required&&this.args[r]==null&&this.missingArgument(t.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let t=(i,n,s)=>{let o=n;if(n!==null&&i.parseArg){let a=`error: command-argument value '${n}' is invalid for argument '${i.name()}'.`;o=this._callParseArg(i,n,s,a)}return o};this._checkNumberOfArguments();let r=[];this.registeredArguments.forEach((i,n)=>{let s=i.defaultValue;i.variadic?n<this.args.length?(s=this.args.slice(n),i.parseArg&&(s=s.reduce((o,a)=>t(i,a,o),i.defaultValue))):s===void 0&&(s=[]):n<this.args.length&&(s=this.args[n],i.parseArg&&(s=t(i,s,i.defaultValue))),r[n]=s}),this.processedArgs=r}_chainOrCall(t,r){return t?.then&&typeof t.then=="function"?t.then(()=>r()):r()}_chainOrCallHooks(t,r){let i=t,n=[];return this._getCommandAndAncestors().reverse().filter(s=>s._lifeCycleHooks[r]!==void 0).forEach(s=>{s._lifeCycleHooks[r].forEach(o=>{n.push({hookedCommand:s,callback:o})})}),r==="postAction"&&n.reverse(),n.forEach(s=>{i=this._chainOrCall(i,()=>s.callback(s.hookedCommand,this))}),i}_chainOrCallSubCommandHook(t,r,i){let n=t;return this._lifeCycleHooks[i]!==void 0&&this._lifeCycleHooks[i].forEach(s=>{n=this._chainOrCall(n,()=>s(this,r))}),n}_parseCommand(t,r){let i=this.parseOptions(r);if(this._parseOptionsEnv(),this._parseOptionsImplied(),t=t.concat(i.operands),r=i.unknown,this.args=t.concat(r),t&&this._findCommand(t[0]))return this._dispatchSubcommand(t[0],t.slice(1),r);if(this._getHelpCommand()&&t[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(t[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(r),this._dispatchSubcommand(this._defaultCommandName,t,r);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(i.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let n=()=>{i.unknown.length>0&&this.unknownOption(i.unknown[0])},s=`command:${this.name()}`;if(this._actionHandler){n(),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(s,t,r)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent?.listenerCount(s))n(),this._processArguments(),this.parent.emit(s,t,r);else if(t.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",t,r);this.listenerCount("command:*")?this.emit("command:*",t,r):this.commands.length?this.unknownCommand():(n(),this._processArguments())}else this.commands.length?(n(),this.help({error:!0})):(n(),this._processArguments())}_findCommand(t){if(t)return this.commands.find(r=>r._name===t||r._aliases.includes(t))}_findOption(t){return this.options.find(r=>r.is(t))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(t=>{t.options.forEach(r=>{r.mandatory&&t.getOptionValue(r.attributeName())===void 0&&t.missingMandatoryOptionValue(r)})})}_checkForConflictingLocalOptions(){let t=this.options.filter(i=>{let n=i.attributeName();return this.getOptionValue(n)===void 0?!1:this.getOptionValueSource(n)!=="default"});t.filter(i=>i.conflictsWith.length>0).forEach(i=>{let n=t.find(s=>i.conflictsWith.includes(s.attributeName()));n&&this._conflictingOption(i,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(t=>{t._checkForConflictingLocalOptions()})}parseOptions(t){let r=[],i=[],n=r;function s(p){return p.length>1&&p[0]==="-"}let o=p=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(p)?!this._getCommandAndAncestors().some(u=>u.options.map(l=>l.short).some(l=>/^-\d$/.test(l))):!1,a=null,c=null,d=0;for(;d<t.length||c;){let p=c??t[d++];if(c=null,p==="--"){n===i&&n.push(p),n.push(...t.slice(d));break}if(a&&(!s(p)||o(p))){this.emit(`option:${a.name()}`,p);continue}if(a=null,s(p)){let u=this._findOption(p);if(u){if(u.required){let l=t[d++];l===void 0&&this.optionMissingArgument(u),this.emit(`option:${u.name()}`,l)}else if(u.optional){let l=null;d<t.length&&(!s(t[d])||o(t[d]))&&(l=t[d++]),this.emit(`option:${u.name()}`,l)}else this.emit(`option:${u.name()}`);a=u.variadic?u:null;continue}}if(p.length>2&&p[0]==="-"&&p[1]!=="-"){let u=this._findOption(`-${p[1]}`);if(u){u.required||u.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${u.name()}`,p.slice(2)):(this.emit(`option:${u.name()}`),c=`-${p.slice(2)}`);continue}}if(/^--[^=]+=/.test(p)){let u=p.indexOf("="),l=this._findOption(p.slice(0,u));if(l&&(l.required||l.optional)){this.emit(`option:${l.name()}`,p.slice(u+1));continue}}if(n===r&&s(p)&&!(this.commands.length===0&&o(p))&&(n=i),(this._enablePositionalOptions||this._passThroughOptions)&&r.length===0&&i.length===0){if(this._findCommand(p)){r.push(p),i.push(...t.slice(d));break}else if(this._getHelpCommand()&&p===this._getHelpCommand().name()){r.push(p,...t.slice(d));break}else if(this._defaultCommandName){i.push(p,...t.slice(d));break}}if(this._passThroughOptions){n.push(p,...t.slice(d));break}n.push(p)}return{operands:r,unknown:i}}opts(){if(this._storeOptionsAsProperties){let t={},r=this.options.length;for(let i=0;i<r;i++){let n=this.options[i].attributeName();t[n]=n===this._versionOptionName?this._version:this[n]}return t}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((t,r)=>Object.assign(t,r.opts()),{})}error(t,r){this._outputConfiguration.outputError(`${t}
23
+ - ${n}`;throw new Error(s)}_executeSubCommand(t,r){r=r.slice();let i=!1,n=[".js",".ts",".tsx",".mjs",".cjs"];function s(p,u){let l=Ye.resolve(p,u);if(Qr.existsSync(l))return l;if(n.includes(Ye.extname(u)))return;let m=n.find(h=>Qr.existsSync(`${l}${h}`));if(m)return`${l}${m}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=t._executableFile||`${this._name}-${t._name}`,a=this._executableDir||"";if(this._scriptPath){let p;try{p=Qr.realpathSync(this._scriptPath)}catch{p=this._scriptPath}a=Ye.resolve(Ye.dirname(p),a)}if(a){let p=s(a,o);if(!p&&!t._executableFile&&this._scriptPath){let u=Ye.basename(this._scriptPath,Ye.extname(this._scriptPath));u!==this._name&&(p=s(a,`${u}-${t._name}`))}o=p||o}i=n.includes(Ye.extname(o));let c;I.platform!=="win32"?i?(r.unshift(o),r=Ia(I.execArgv).concat(r),c=Zn.spawn(I.argv[0],r,{stdio:"inherit"})):c=Zn.spawn(o,r,{stdio:"inherit"}):(this._checkForMissingExecutable(o,a,t._name),r.unshift(o),r=Ia(I.execArgv).concat(r),c=Zn.spawn(I.execPath,r,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(u=>{I.on(u,()=>{c.killed===!1&&c.exitCode===null&&c.kill(u)})});let d=this._exitCallback;c.on("close",p=>{p=p??1,d?d(new Qn(p,"commander.executeSubCommandAsync","(close)")):I.exit(p)}),c.on("error",p=>{if(p.code==="ENOENT")this._checkForMissingExecutable(o,a,t._name);else if(p.code==="EACCES")throw new Error(`'${o}' not executable`);if(!d)I.exit(1);else{let u=new Qn(1,"commander.executeSubCommandAsync","(error)");u.nestedError=p,d(u)}}),this.runningCommand=c}_dispatchSubcommand(t,r,i){let n=this._findCommand(t);n||this.help({error:!0}),n._prepareForParse();let s;return s=this._chainOrCallSubCommandHook(s,n,"preSubcommand"),s=this._chainOrCall(s,()=>{if(n._executableHandler)this._executeSubCommand(n,r.concat(i));else return n._parseCommand(r,i)}),s}_dispatchHelpCommand(t){t||this.help();let r=this._findCommand(t);return r&&!r._executableHandler&&r.help(),this._dispatchSubcommand(t,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((t,r)=>{t.required&&this.args[r]==null&&this.missingArgument(t.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let t=(i,n,s)=>{let o=n;if(n!==null&&i.parseArg){let a=`error: command-argument value '${n}' is invalid for argument '${i.name()}'.`;o=this._callParseArg(i,n,s,a)}return o};this._checkNumberOfArguments();let r=[];this.registeredArguments.forEach((i,n)=>{let s=i.defaultValue;i.variadic?n<this.args.length?(s=this.args.slice(n),i.parseArg&&(s=s.reduce((o,a)=>t(i,a,o),i.defaultValue))):s===void 0&&(s=[]):n<this.args.length&&(s=this.args[n],i.parseArg&&(s=t(i,s,i.defaultValue))),r[n]=s}),this.processedArgs=r}_chainOrCall(t,r){return t?.then&&typeof t.then=="function"?t.then(()=>r()):r()}_chainOrCallHooks(t,r){let i=t,n=[];return this._getCommandAndAncestors().reverse().filter(s=>s._lifeCycleHooks[r]!==void 0).forEach(s=>{s._lifeCycleHooks[r].forEach(o=>{n.push({hookedCommand:s,callback:o})})}),r==="postAction"&&n.reverse(),n.forEach(s=>{i=this._chainOrCall(i,()=>s.callback(s.hookedCommand,this))}),i}_chainOrCallSubCommandHook(t,r,i){let n=t;return this._lifeCycleHooks[i]!==void 0&&this._lifeCycleHooks[i].forEach(s=>{n=this._chainOrCall(n,()=>s(this,r))}),n}_parseCommand(t,r){let i=this.parseOptions(r);if(this._parseOptionsEnv(),this._parseOptionsImplied(),t=t.concat(i.operands),r=i.unknown,this.args=t.concat(r),t&&this._findCommand(t[0]))return this._dispatchSubcommand(t[0],t.slice(1),r);if(this._getHelpCommand()&&t[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(t[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(r),this._dispatchSubcommand(this._defaultCommandName,t,r);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(i.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let n=()=>{i.unknown.length>0&&this.unknownOption(i.unknown[0])},s=`command:${this.name()}`;if(this._actionHandler){n(),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(s,t,r)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent?.listenerCount(s))n(),this._processArguments(),this.parent.emit(s,t,r);else if(t.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",t,r);this.listenerCount("command:*")?this.emit("command:*",t,r):this.commands.length?this.unknownCommand():(n(),this._processArguments())}else this.commands.length?(n(),this.help({error:!0})):(n(),this._processArguments())}_findCommand(t){if(t)return this.commands.find(r=>r._name===t||r._aliases.includes(t))}_findOption(t){return this.options.find(r=>r.is(t))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(t=>{t.options.forEach(r=>{r.mandatory&&t.getOptionValue(r.attributeName())===void 0&&t.missingMandatoryOptionValue(r)})})}_checkForConflictingLocalOptions(){let t=this.options.filter(i=>{let n=i.attributeName();return this.getOptionValue(n)===void 0?!1:this.getOptionValueSource(n)!=="default"});t.filter(i=>i.conflictsWith.length>0).forEach(i=>{let n=t.find(s=>i.conflictsWith.includes(s.attributeName()));n&&this._conflictingOption(i,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(t=>{t._checkForConflictingLocalOptions()})}parseOptions(t){let r=[],i=[],n=r;function s(p){return p.length>1&&p[0]==="-"}let o=p=>/^-(\d+|\d*\.\d+)(e[+-]?\d+)?$/.test(p)?!this._getCommandAndAncestors().some(u=>u.options.map(l=>l.short).some(l=>/^-\d$/.test(l))):!1,a=null,c=null,d=0;for(;d<t.length||c;){let p=c??t[d++];if(c=null,p==="--"){n===i&&n.push(p),n.push(...t.slice(d));break}if(a&&(!s(p)||o(p))){this.emit(`option:${a.name()}`,p);continue}if(a=null,s(p)){let u=this._findOption(p);if(u){if(u.required){let l=t[d++];l===void 0&&this.optionMissingArgument(u),this.emit(`option:${u.name()}`,l)}else if(u.optional){let l=null;d<t.length&&(!s(t[d])||o(t[d]))&&(l=t[d++]),this.emit(`option:${u.name()}`,l)}else this.emit(`option:${u.name()}`);a=u.variadic?u:null;continue}}if(p.length>2&&p[0]==="-"&&p[1]!=="-"){let u=this._findOption(`-${p[1]}`);if(u){u.required||u.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${u.name()}`,p.slice(2)):(this.emit(`option:${u.name()}`),c=`-${p.slice(2)}`);continue}}if(/^--[^=]+=/.test(p)){let u=p.indexOf("="),l=this._findOption(p.slice(0,u));if(l&&(l.required||l.optional)){this.emit(`option:${l.name()}`,p.slice(u+1));continue}}if(n===r&&s(p)&&!(this.commands.length===0&&o(p))&&(n=i),(this._enablePositionalOptions||this._passThroughOptions)&&r.length===0&&i.length===0){if(this._findCommand(p)){r.push(p),i.push(...t.slice(d));break}else if(this._getHelpCommand()&&p===this._getHelpCommand().name()){r.push(p,...t.slice(d));break}else if(this._defaultCommandName){i.push(p,...t.slice(d));break}}if(this._passThroughOptions){n.push(p,...t.slice(d));break}n.push(p)}return{operands:r,unknown:i}}opts(){if(this._storeOptionsAsProperties){let t={},r=this.options.length;for(let i=0;i<r;i++){let n=this.options[i].attributeName();t[n]=n===this._versionOptionName?this._version:this[n]}return t}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((t,r)=>Object.assign(t,r.opts()),{})}error(t,r){this._outputConfiguration.outputError(`${t}
24
24
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
25
25
  `):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
26
26
  `),this.outputHelp({error:!0}));let i=r||{},n=i.exitCode||1,s=i.code||"commander.error";this._exit(n,s,t)}_parseOptionsEnv(){this.options.forEach(t=>{if(t.envVar&&t.envVar in I.env){let r=t.attributeName();(this.getOptionValue(r)===void 0||["default","config","env"].includes(this.getOptionValueSource(r)))&&(t.required||t.optional?this.emit(`optionEnv:${t.name()}`,I.env[t.envVar]):this.emit(`optionEnv:${t.name()}`))}})}_parseOptionsImplied(){let t=new by(this.options),r=i=>this.getOptionValue(i)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(i));this.options.filter(i=>i.implied!==void 0&&r(i.attributeName())&&t.valueFromOption(this.getOptionValue(i.attributeName()),i)).forEach(i=>{Object.keys(i.implied).filter(n=>!r(n)).forEach(n=>{this.setOptionValueWithSource(n,i.implied[n],"implied")})})}missingArgument(t){let r=`error: missing required argument '${t}'`;this.error(r,{code:"commander.missingArgument"})}optionMissingArgument(t){let r=`error: option '${t.flags}' argument missing`;this.error(r,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(t){let r=`error: required option '${t.flags}' not specified`;this.error(r,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(t,r){let i=o=>{let a=o.attributeName(),c=this.getOptionValue(a),d=this.options.find(u=>u.negate&&a===u.attributeName()),p=this.options.find(u=>!u.negate&&a===u.attributeName());return d&&(d.presetArg===void 0&&c===!1||d.presetArg!==void 0&&c===d.presetArg)?d:p||o},n=o=>{let a=i(o),c=a.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},s=`error: ${n(t)} cannot be used with ${n(r)}`;this.error(s,{code:"commander.conflictingOption"})}unknownOption(t){if(this._allowUnknownOption)return;let r="";if(t.startsWith("--")&&this._showSuggestionAfterError){let n=[],s=this;do{let o=s.createHelp().visibleOptions(s).filter(a=>a.long).map(a=>a.long);n=n.concat(o),s=s.parent}while(s&&!s._enablePositionalOptions);r=Ra(t,n)}let i=`error: unknown option '${t}'${r}`;this.error(i,{code:"commander.unknownOption"})}_excessArguments(t){if(this._allowExcessArguments)return;let r=this.registeredArguments.length,i=r===1?"":"s",s=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${r} argument${i} but got ${t.length}.`;this.error(s,{code:"commander.excessArguments"})}unknownCommand(){let t=this.args[0],r="";if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach(s=>{n.push(s.name()),s.alias()&&n.push(s.alias())}),r=Ra(t,n)}let i=`error: unknown command '${t}'${r}`;this.error(i,{code:"commander.unknownCommand"})}version(t,r,i){if(t===void 0)return this._version;this._version=t,r=r||"-V, --version",i=i||"output the version number";let n=this.createOption(r,i);return this._versionOptionName=n.attributeName(),this._registerOption(n),this.on("option:"+n.name(),()=>{this._outputConfiguration.writeOut(`${t}
27
27
  `),this._exit(0,"commander.version",t)}),this}description(t,r){return t===void 0&&r===void 0?this._description:(this._description=t,r&&(this._argsDescription=r),this)}summary(t){return t===void 0?this._summary:(this._summary=t,this)}alias(t){if(t===void 0)return this._aliases[0];let r=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(r=this.commands[this.commands.length-1]),t===r._name)throw new Error("Command alias can't be the same as its name");let i=this.parent?._findCommand(t);if(i){let n=[i.name()].concat(i.aliases()).join("|");throw new Error(`cannot add alias '${t}' to command '${this.name()}' as already have command '${n}'`)}return r._aliases.push(t),this}aliases(t){return t===void 0?this._aliases:(t.forEach(r=>this.alias(r)),this)}usage(t){if(t===void 0){if(this._usage)return this._usage;let r=this.registeredArguments.map(i=>fy(i));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?r:[]).join(" ")}return this._usage=t,this}name(t){return t===void 0?this._name:(this._name=t,this)}helpGroup(t){return t===void 0?this._helpGroupHeading??"":(this._helpGroupHeading=t,this)}commandsGroup(t){return t===void 0?this._defaultCommandGroup??"":(this._defaultCommandGroup=t,this)}optionsGroup(t){return t===void 0?this._defaultOptionGroup??"":(this._defaultOptionGroup=t,this)}_initOptionGroup(t){this._defaultOptionGroup&&!t.helpGroupHeading&&t.helpGroup(this._defaultOptionGroup)}_initCommandGroup(t){this._defaultCommandGroup&&!t.helpGroup()&&t.helpGroup(this._defaultCommandGroup)}nameFromFilename(t){return this._name=Ye.basename(t,Ye.extname(t)),this}executableDir(t){return t===void 0?this._executableDir:(this._executableDir=t,this)}helpInformation(t){let r=this.createHelp(),i=this._getOutputContext(t);r.prepareContext({error:i.error,helpWidth:i.helpWidth,outputHasColors:i.hasColors});let n=r.formatHelp(this,r);return i.hasColors?n:this._outputConfiguration.stripColor(n)}_getOutputContext(t){t=t||{};let r=!!t.error,i,n,s;return r?(i=a=>this._outputConfiguration.writeErr(a),n=this._outputConfiguration.getErrHasColors(),s=this._outputConfiguration.getErrHelpWidth()):(i=a=>this._outputConfiguration.writeOut(a),n=this._outputConfiguration.getOutHasColors(),s=this._outputConfiguration.getOutHelpWidth()),{error:r,write:a=>(n||(a=this._outputConfiguration.stripColor(a)),i(a)),hasColors:n,helpWidth:s}}outputHelp(t){let r;typeof t=="function"&&(r=t,t=void 0);let i=this._getOutputContext(t),n={error:i.error,write:i.write,command:this};this._getCommandAndAncestors().reverse().forEach(o=>o.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let s=this.helpInformation({error:i.error});if(r&&(s=r(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",n),this._getCommandAndAncestors().forEach(o=>o.emit("afterAllHelp",n))}helpOption(t,r){return typeof t=="boolean"?(t?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(t??"-h, --help",r??"display help for command"),(t||r)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(t){return this._helpOption=t,this._initOptionGroup(t),this}help(t){this.outputHelp(t);let r=Number(I.exitCode??0);r===0&&t&&typeof t!="function"&&t.error&&(r=1),this._exit(r,"commander.help","(outputHelp)")}addHelpText(t,r){let i=["beforeAll","before","after","afterAll"];if(!i.includes(t))throw new Error(`Unexpected value for position to addHelpText.
28
28
  Expecting one of '${i.join("', '")}'`);let n=`${t}Help`;return this.on(n,s=>{let o;typeof r=="function"?o=r({error:s.error,command:s.command}):o=r,o&&s.write(`${o}
29
- `)}),this}_outputHelpIfRequested(t){let r=this._getHelpOption();r&&t.find(n=>r.is(n))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Ia(e){return e.map(t=>{if(!t.startsWith("--inspect"))return t;let r,i="127.0.0.1",n="9229",s;return(s=t.match(/^(--inspect(-brk)?)$/))!==null?r=s[1]:(s=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(r=s[1],/^\d+$/.test(s[3])?n=s[3]:i=s[3]):(s=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(r=s[1],i=s[3],n=s[4]),r&&n!=="0"?`${r}=${i}:${parseInt(n)+1}`:t})}function ts(){if(I.env.NO_COLOR||I.env.FORCE_COLOR==="0"||I.env.FORCE_COLOR==="false")return!1;if(I.env.FORCE_COLOR||I.env.CLICOLOR_FORCE!==void 0)return!0}rs.Command=es;rs.useColor=ts});var Ma=A(be=>{"use strict";var{Argument:ja}=Xr(),{Command:is}=Oa(),{CommanderError:wy,InvalidArgumentError:Da}=sr(),{Help:xy}=Hn(),{Option:La}=Xn();be.program=new is;be.createCommand=e=>new is(e);be.createOption=(e,t)=>new La(e,t);be.createArgument=(e,t)=>new ja(e,t);be.Command=is;be.Option=La;be.Argument=ja;be.Help=xy;be.CommanderError=wy;be.InvalidArgumentError=Da;be.InvalidOptionArgumentError=Da});var K=A((vq,ns)=>{"use strict";var ei=process||{},Na=ei.argv||[],Qr=ei.env||{},ky=!(Qr.NO_COLOR||Na.includes("--no-color"))&&(!!Qr.FORCE_COLOR||Na.includes("--color")||ei.platform==="win32"||(ei.stdout||{}).isTTY&&Qr.TERM!=="dumb"||!!Qr.CI),vy=(e,t,r=e)=>i=>{let n=""+i,s=n.indexOf(t,e.length);return~s?e+Sy(n,t,r,s)+t:e+n+t},Sy=(e,t,r,i)=>{let n="",s=0;do n+=e.substring(s,i)+r,s=i+t.length,i=e.indexOf(t,s);while(~i);return n+e.substring(s)},Ga=(e=ky)=>{let t=e?vy:()=>String;return{isColorSupported:e,reset:t("\x1B[0m","\x1B[0m"),bold:t("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:t("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:t("\x1B[3m","\x1B[23m"),underline:t("\x1B[4m","\x1B[24m"),inverse:t("\x1B[7m","\x1B[27m"),hidden:t("\x1B[8m","\x1B[28m"),strikethrough:t("\x1B[9m","\x1B[29m"),black:t("\x1B[30m","\x1B[39m"),red:t("\x1B[31m","\x1B[39m"),green:t("\x1B[32m","\x1B[39m"),yellow:t("\x1B[33m","\x1B[39m"),blue:t("\x1B[34m","\x1B[39m"),magenta:t("\x1B[35m","\x1B[39m"),cyan:t("\x1B[36m","\x1B[39m"),white:t("\x1B[37m","\x1B[39m"),gray:t("\x1B[90m","\x1B[39m"),bgBlack:t("\x1B[40m","\x1B[49m"),bgRed:t("\x1B[41m","\x1B[49m"),bgGreen:t("\x1B[42m","\x1B[49m"),bgYellow:t("\x1B[43m","\x1B[49m"),bgBlue:t("\x1B[44m","\x1B[49m"),bgMagenta:t("\x1B[45m","\x1B[49m"),bgCyan:t("\x1B[46m","\x1B[49m"),bgWhite:t("\x1B[47m","\x1B[49m"),blackBright:t("\x1B[90m","\x1B[39m"),redBright:t("\x1B[91m","\x1B[39m"),greenBright:t("\x1B[92m","\x1B[39m"),yellowBright:t("\x1B[93m","\x1B[39m"),blueBright:t("\x1B[94m","\x1B[39m"),magentaBright:t("\x1B[95m","\x1B[39m"),cyanBright:t("\x1B[96m","\x1B[39m"),whiteBright:t("\x1B[97m","\x1B[39m"),bgBlackBright:t("\x1B[100m","\x1B[49m"),bgRedBright:t("\x1B[101m","\x1B[49m"),bgGreenBright:t("\x1B[102m","\x1B[49m"),bgYellowBright:t("\x1B[103m","\x1B[49m"),bgBlueBright:t("\x1B[104m","\x1B[49m"),bgMagentaBright:t("\x1B[105m","\x1B[49m"),bgCyanBright:t("\x1B[106m","\x1B[49m"),bgWhiteBright:t("\x1B[107m","\x1B[49m")}};ns.exports=Ga();ns.exports.createColors=Ga});var ps=A((Tq,nc)=>{"use strict";var cs={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let r="";return e<0?r+=`\x1B[${-e}D`:e>0&&(r+=`\x1B[${e}C`),t<0?r+=`\x1B[${-t}A`:t>0&&(r+=`\x1B[${t}B`),r},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},My={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},Fy={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let r=0;r<e;r++)t+=this.line+(r<e-1?cs.up():"");return e&&(t+=cs.left),t}};nc.exports={cursor:cs,scroll:My,erase:Fy,beep:"\x07"}});var Nc=A((JA,Uc)=>{"use strict";Uc.exports=Bc;Bc.sync=ug;var Mc=he("fs");function dg(e,t){var r=t.pathExt!==void 0?t.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var i=0;i<r.length;i++){var n=r[i].toLowerCase();if(n&&e.substr(-n.length).toLowerCase()===n)return!0}return!1}function Fc(e,t,r){return!e.isSymbolicLink()&&!e.isFile()?!1:dg(t,r)}function Bc(e,t,r){Mc.stat(e,function(i,n){r(i,i?!1:Fc(n,e,t))})}function ug(e,t){return Fc(Mc.statSync(e),e,t)}});var Hc=A((XA,Wc)=>{"use strict";Wc.exports=zc;zc.sync=lg;var Gc=he("fs");function zc(e,t,r){Gc.stat(e,function(i,n){r(i,i?!1:Vc(n,t))})}function lg(e,t){return Vc(Gc.statSync(e),t)}function Vc(e,t){return e.isFile()&&mg(e,t)}function mg(e,t){var r=e.mode,i=e.uid,n=e.gid,s=t.uid!==void 0?t.uid:process.getuid&&process.getuid(),o=t.gid!==void 0?t.gid:process.getgid&&process.getgid(),a=parseInt("100",8),c=parseInt("010",8),d=parseInt("001",8),p=a|c,u=r&d||r&c&&n===o||r&a&&i===s||r&p&&s===0;return u}});var Yc=A((QA,Kc)=>{"use strict";var ZA=he("fs"),Ci;process.platform==="win32"||global.TESTING_WINDOWS?Ci=Nc():Ci=Hc();Kc.exports=As;As.sync=hg;function As(e,t,r){if(typeof t=="function"&&(r=t,t={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){As(e,t||{},function(s,o){s?n(s):i(o)})})}Ci(e,t||{},function(i,n){i&&(i.code==="EACCES"||t&&t.ignoreErrors)&&(i=null,n=!1),r(i,n)})}function hg(e,t){try{return Ci.sync(e,t||{})}catch(r){if(t&&t.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var rp=A((eC,tp)=>{"use strict";var Ot=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",Jc=he("path"),yg=Ot?";":":",Xc=Yc(),Zc=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"}),Qc=(e,t)=>{let r=t.colon||yg,i=e.match(/\//)||Ot&&e.match(/\\/)?[""]:[...Ot?[process.cwd()]:[],...(t.path||process.env.PATH||"").split(r)],n=Ot?t.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=Ot?n.split(r):[""];return Ot&&e.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},ep=(e,t,r)=>{typeof t=="function"&&(r=t,t={}),t||(t={});let{pathEnv:i,pathExt:n,pathExtExe:s}=Qc(e,t),o=[],a=d=>new Promise((p,u)=>{if(d===i.length)return t.all&&o.length?p(o):u(Zc(e));let l=i[d],m=/^".*"$/.test(l)?l.slice(1,-1):l,h=Jc.join(m,e),f=!m&&/^\.[\\\/]/.test(e)?e.slice(0,2)+h:h;p(c(f,d,0))}),c=(d,p,u)=>new Promise((l,m)=>{if(u===n.length)return l(a(p+1));let h=n[u];Xc(d+h,{pathExt:s},(f,x)=>{if(!f&&x)if(t.all)o.push(d+h);else return l(d+h);return l(c(d,p,u+1))})});return r?a(0).then(d=>r(null,d),r):a(0)},fg=(e,t)=>{t=t||{};let{pathEnv:r,pathExt:i,pathExtExe:n}=Qc(e,t),s=[];for(let o=0;o<r.length;o++){let a=r[o],c=/^".*"$/.test(a)?a.slice(1,-1):a,d=Jc.join(c,e),p=!c&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;for(let u=0;u<i.length;u++){let l=p+i[u];try{if(Xc.sync(l,{pathExt:n}))if(t.all)s.push(l);else return l}catch{}}}if(t.all&&s.length)return s;if(t.nothrow)return null;throw Zc(e)};tp.exports=ep;ep.sync=fg});var np=A((tC,Cs)=>{"use strict";var ip=(e={})=>{let t=e.env||process.env;return(e.platform||process.platform)!=="win32"?"PATH":Object.keys(t).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};Cs.exports=ip;Cs.exports.default=ip});var cp=A((rC,ap)=>{"use strict";var sp=he("path"),gg=rp(),_g=np();function op(e,t){let r=e.options.env||process.env,i=process.cwd(),n=e.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(e.options.cwd)}catch{}let o;try{o=gg.sync(e.command,{path:r[_g({env:r})],pathExt:t?sp.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=sp.resolve(n?e.options.cwd:"",o)),o}function bg(e){return op(e)||op(e,!0)}ap.exports=bg});var pp=A((iC,Ps)=>{"use strict";var Es=/([()\][%!^"`<>&|;, *?])/g;function wg(e){return e=e.replace(Es,"^$1"),e}function xg(e,t){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),e=e.replace(/(?=(\\+?)?)\1$/,"$1$1"),e=`"${e}"`,e=e.replace(Es,"^$1"),t&&(e=e.replace(Es,"^$1")),e}Ps.exports.command=wg;Ps.exports.argument=xg});var up=A((nC,dp)=>{"use strict";dp.exports=/^#!(.*)/});var mp=A((sC,lp)=>{"use strict";var kg=up();lp.exports=(e="")=>{let t=e.match(kg);if(!t)return null;let[r,i]=t[0].replace(/#! ?/,"").split(" "),n=r.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var yp=A((oC,hp)=>{"use strict";var Ts=he("fs"),vg=mp();function Sg(e){let r=Buffer.alloc(150),i;try{i=Ts.openSync(e,"r"),Ts.readSync(i,r,0,150,0),Ts.closeSync(i)}catch{}return vg(r.toString())}hp.exports=Sg});var bp=A((aC,_p)=>{"use strict";var qg=he("path"),fp=cp(),gp=pp(),$g=yp(),Ag=process.platform==="win32",Cg=/\.(?:com|exe)$/i,Eg=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function Pg(e){e.file=fp(e);let t=e.file&&$g(e.file);return t?(e.args.unshift(e.file),e.command=t,fp(e)):e.file}function Tg(e){if(!Ag)return e;let t=Pg(e),r=!Cg.test(t);if(e.options.forceShell||r){let i=Eg.test(t);e.command=qg.normalize(e.command),e.command=gp.command(e.command),e.args=e.args.map(s=>gp.argument(s,i));let n=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${n}"`],e.command=process.env.comspec||"cmd.exe",e.options.windowsVerbatimArguments=!0}return e}function Rg(e,t,r){t&&!Array.isArray(t)&&(r=t,t=null),t=t?t.slice(0):[],r=Object.assign({},r);let i={command:e,args:t,options:r,file:void 0,original:{command:e,args:t}};return r.shell?i:Tg(i)}_p.exports=Rg});var kp=A((cC,xp)=>{"use strict";var Rs=process.platform==="win32";function Is(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function Ig(e,t){if(!Rs)return;let r=e.emit;e.emit=function(i,n){if(i==="exit"){let s=wp(n,t);if(s)return r.call(e,"error",s)}return r.apply(e,arguments)}}function wp(e,t){return Rs&&e===1&&!t.file?Is(t.original,"spawn"):null}function Og(e,t){return Rs&&e===1&&!t.file?Is(t.original,"spawnSync"):null}xp.exports={hookChildProcess:Ig,verifyENOENT:wp,verifyENOENTSync:Og,notFoundError:Is}});var qp=A((pC,jt)=>{"use strict";var vp=he("child_process"),Os=bp(),js=kp();function Sp(e,t,r){let i=Os(e,t,r),n=vp.spawn(i.command,i.args,i.options);return js.hookChildProcess(n,i),n}function jg(e,t,r){let i=Os(e,t,r),n=vp.spawnSync(i.command,i.args,i.options);return n.error=n.error||js.verifyENOENTSync(n.status,i),n}jt.exports=Sp;jt.exports.spawn=Sp;jt.exports.sync=jg;jt.exports._parse=Os;jt.exports._enoent=js});var ra=A(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.DEFAULT_COLOR_MAP=void 0;Jt.DEFAULT_COLOR_MAP={red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",white_bold:"\x1B[01m",reset:"\x1B[0m"};var ta=class{constructor(t=Jt.DEFAULT_COLOR_MAP){this.text="",this.colorMap=t}addCharsWithColor(t,r){let i=this.colorMap[t];this.text+=i!==void 0?`${i}${r}${this.colorMap.reset}`:r}renderConsole(){return this.text}};Jt.default=ta});var Ir=A(Z=>{"use strict";Object.defineProperty(Z,"__esModule",{value:!0});Z.DEFAULT_HEADER_ALIGNMENT=Z.DEFAULT_ROW_ALIGNMENT=Z.DEFAULT_HEADER_FONT_COLOR=Z.DEFAULT_ROW_FONT_COLOR=Z.COLORS=Z.ALIGNMENTS=Z.DEFAULT_TABLE_STYLE=Z.DEFAULT_ROW_SEPARATOR=Z.DEFAULT_COLUMN_LEN=void 0;Z.DEFAULT_COLUMN_LEN=20;Z.DEFAULT_ROW_SEPARATOR=!1;Z.DEFAULT_TABLE_STYLE={headerTop:{left:"\u250C",mid:"\u252C",right:"\u2510",other:"\u2500"},headerBottom:{left:"\u251C",mid:"\u253C",right:"\u2524",other:"\u2500"},tableBottom:{left:"\u2514",mid:"\u2534",right:"\u2518",other:"\u2500"},vertical:"\u2502",rowSeparator:{left:"\u251C",mid:"\u253C",right:"\u2524",other:"\u2500"}};Z.ALIGNMENTS=["right","left","center"];Z.COLORS=["red","green","yellow","white","blue","magenta","cyan","white_bold","reset"];Z.DEFAULT_ROW_FONT_COLOR="white";Z.DEFAULT_HEADER_FONT_COLOR="white_bold";Z.DEFAULT_ROW_ALIGNMENT="right";Z.DEFAULT_HEADER_ALIGNMENT="center"});var Cm=A(ia=>{"use strict";Object.defineProperty(ia,"__esModule",{value:!0});var Qk=[{first:768,last:879},{first:1155,last:1158},{first:1160,last:1161},{first:1425,last:1469},{first:1471,last:1471},{first:1473,last:1474},{first:1476,last:1477},{first:1479,last:1479},{first:1536,last:1539},{first:1552,last:1557},{first:1611,last:1630},{first:1648,last:1648},{first:1750,last:1764},{first:1767,last:1768},{first:1770,last:1773},{first:1807,last:1807},{first:1809,last:1809},{first:1840,last:1866},{first:1958,last:1968},{first:2027,last:2035},{first:2305,last:2306},{first:2364,last:2364},{first:2369,last:2376},{first:2381,last:2381},{first:2385,last:2388},{first:2402,last:2403},{first:2433,last:2433},{first:2492,last:2492},{first:2497,last:2500},{first:2509,last:2509},{first:2530,last:2531},{first:2561,last:2562},{first:2620,last:2620},{first:2625,last:2626},{first:2631,last:2632},{first:2635,last:2637},{first:2672,last:2673},{first:2689,last:2690},{first:2748,last:2748},{first:2753,last:2757},{first:2759,last:2760},{first:2765,last:2765},{first:2786,last:2787},{first:2817,last:2817},{first:2876,last:2876},{first:2879,last:2879},{first:2881,last:2883},{first:2893,last:2893},{first:2902,last:2902},{first:2946,last:2946},{first:3008,last:3008},{first:3021,last:3021},{first:3134,last:3136},{first:3142,last:3144},{first:3146,last:3149},{first:3157,last:3158},{first:3260,last:3260},{first:3263,last:3263},{first:3270,last:3270},{first:3276,last:3277},{first:3298,last:3299},{first:3393,last:3395},{first:3405,last:3405},{first:3530,last:3530},{first:3538,last:3540},{first:3542,last:3542},{first:3633,last:3633},{first:3636,last:3642},{first:3655,last:3662},{first:3761,last:3761},{first:3764,last:3769},{first:3771,last:3772},{first:3784,last:3789},{first:3864,last:3865},{first:3893,last:3893},{first:3895,last:3895},{first:3897,last:3897},{first:3953,last:3966},{first:3968,last:3972},{first:3974,last:3975},{first:3984,last:3991},{first:3993,last:4028},{first:4038,last:4038},{first:4141,last:4144},{first:4146,last:4146},{first:4150,last:4151},{first:4153,last:4153},{first:4184,last:4185},{first:4448,last:4607},{first:4959,last:4959},{first:5906,last:5908},{first:5938,last:5940},{first:5970,last:5971},{first:6002,last:6003},{first:6068,last:6069},{first:6071,last:6077},{first:6086,last:6086},{first:6089,last:6099},{first:6109,last:6109},{first:6155,last:6157},{first:6313,last:6313},{first:6432,last:6434},{first:6439,last:6440},{first:6450,last:6450},{first:6457,last:6459},{first:6679,last:6680},{first:6912,last:6915},{first:6964,last:6964},{first:6966,last:6970},{first:6972,last:6972},{first:6978,last:6978},{first:7019,last:7027},{first:7616,last:7626},{first:7678,last:7679},{first:8203,last:8207},{first:8234,last:8238},{first:8288,last:8291},{first:8298,last:8303},{first:8400,last:8431},{first:12330,last:12335},{first:12441,last:12442},{first:43014,last:43014},{first:43019,last:43019},{first:43045,last:43046},{first:64286,last:64286},{first:65024,last:65039},{first:65056,last:65059},{first:65279,last:65279},{first:65529,last:65531},{first:68097,last:68099},{first:68101,last:68102},{first:68108,last:68111},{first:68152,last:68154},{first:68159,last:68159},{first:119143,last:119145},{first:119155,last:119170},{first:119173,last:119179},{first:119210,last:119213},{first:119362,last:119364},{first:917505,last:917505},{first:917536,last:917631},{first:917760,last:917999}];ia.default=Qk});var Em=A(na=>{"use strict";Object.defineProperty(na,"__esModule",{value:!0});var ev=(e,t,r)=>{let i=0,n,s=r;if(e<t[0].first||e>t[s].last)return 0;for(;s>=i;)if(n=Math.floor((i+s)/2),e>t[n].last)i=n+1;else if(e<t[n].first)s=n-1;else return 1;return 0};na.default=ev});var sa=A(Or=>{"use strict";var Tm=Or&&Or.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Or,"__esModule",{value:!0});var Pm=Tm(Cm()),tv=Tm(Em()),rv=e=>e===0?0:e<32||e>=127&&e<160?-1:(0,tv.default)(e,Pm.default,Pm.default.length-1)?0:1+ +(e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=131072&&e<=196605||e>=196608&&e<=262141));Or.default=rv});var Rm=A(jr=>{"use strict";var iv=jr&&jr.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(jr,"__esModule",{value:!0});var nv=iv(sa()),sv=e=>{let t=0;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r),n=(0,nv.default)(i);if(n<0)return-1;t+=n}return t};jr.default=sv});var Om=A(yt=>{"use strict";var Im=yt&&yt.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(yt,"__esModule",{value:!0});yt.wcswidth=yt.wcwidth=void 0;var ov=Im(Rm());yt.wcswidth=ov.default;var av=Im(sa());yt.wcwidth=av.default});var oa=A(Ct=>{"use strict";Object.defineProperty(Ct,"__esModule",{value:!0});Ct.findWidthInConsole=Ct.stripAnsi=void 0;var cv=Om(),pv=/\x1b\[\d{1,3}(;\d{1,3})*m/g,dv=e=>e.replace(pv,"");Ct.stripAnsi=dv;var uv=(e,t)=>{let r=0;return e=(0,Ct.stripAnsi)(e),t&&Object.entries(t).forEach(([i,n])=>{let s=new RegExp(i,"g");r+=(e.match(s)||[]).length*n,e=e.replace(i,"")}),r+=(0,cv.wcswidth)(e),r};Ct.findWidthInConsole=uv});var ca=A(Ge=>{"use strict";Object.defineProperty(Ge,"__esModule",{value:!0});Ge.biggestWordInSentence=Ge.textWithPadding=Ge.splitTextIntoTextsOfMinLen=void 0;var aa=oa(),lv=(e,t,r)=>{let i=[];return e.split(/[\n\r]/).forEach(s=>{let o=s.split(" "),a=[],c=0;o.forEach(d=>{let p=(0,aa.findWidthInConsole)(d,r);c+p<=t?(c+=p+1,a.push(d)):(a.length>0&&i.push(a.join(" ")),a=[d],c=p+1)}),i.push(a.join(" "))}),i};Ge.splitTextIntoTextsOfMinLen=lv;var mv=(e,t,r,i)=>{let n=(0,aa.findWidthInConsole)(e,i),s=Math.floor((r-n)/2),o=r-s-n;if(r<n){let a=(0,Ge.splitTextIntoTextsOfMinLen)(e,r);return a.length===1?e:a.map(c=>(0,Ge.textWithPadding)(c,t,r,i)).join(`
30
- `)}switch(t){case"left":return e.concat(" ".repeat(r-n));case"center":return" ".repeat(s).concat(e).concat(" ".repeat(o));default:return" ".repeat(r-n).concat(e)}};Ge.textWithPadding=mv;var hv=(e,t)=>e.split(" ").reduce((r,i)=>Math.max(r,(0,aa.findWidthInConsole)(i,t)),0);Ge.biggestWordInSentence=hv});var Dr=A(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.getWidthLimitedColumnsArray=N.createHeaderAsRow=N.renderTableHorizontalBorders=N.findLenOfColumn=N.createRow=N.createColumFromOnlyName=N.createTableHorizontalBorders=N.convertRawRowOptionsToStandard=N.evaluateCellText=N.cellText=void 0;var jm=oa(),pa=ca(),da=Ir(),Xt=(e,t)=>Math.max(e,t),yv=e=>e==null?"":`${e}`;N.cellText=yv;var fv=(e,t)=>t?`${t(e)}`:(0,N.cellText)(e);N.evaluateCellText=fv;var gv=e=>{if(e)return{color:e.color,separator:e.separator||da.DEFAULT_ROW_SEPARATOR}};N.convertRawRowOptionsToStandard=gv;var _v=({left:e,mid:t,right:r,other:i},n)=>{let s=e;return n.forEach(o=>{s+=i.repeat(o+2),s+=t}),s=s.slice(0,-t.length),s+=r,s};N.createTableHorizontalBorders=_v;var bv=e=>({name:e,title:e});N.createColumFromOnlyName=bv;var wv=(e,t,r)=>({color:e,separator:r,text:t});N.createRow=wv;var xv=(e,t,r)=>{let i=e.name,n=e.title,s=e.transform,o=Xt(0,e?.minLen||0);return e.maxLen?(o=Xt(o,Xt(e.maxLen,(0,pa.biggestWordInSentence)(n,r))),o=t.reduce((a,c)=>Xt(a,(0,pa.biggestWordInSentence)((0,N.evaluateCellText)(c.text[i],s),r)),o),o):(o=Xt(o,(0,jm.findWidthInConsole)(n,r)),t.forEach(a=>{o=Xt(o,(0,jm.findWidthInConsole)((0,N.evaluateCellText)(a.text[i],s),r))}),o)};N.findLenOfColumn=xv;var kv=(e,t)=>(0,N.createTableHorizontalBorders)(e,t);N.renderTableHorizontalBorders=kv;var vv=(e,t)=>{let r=da.DEFAULT_HEADER_FONT_COLOR,i=e(r,{},!1);return t.forEach(n=>{i.text[n.name]=n.title}),i};N.createHeaderAsRow=vv;var Sv=(e,t,r)=>{let i={};return e.forEach(n=>{i[n.name]=(0,pa.splitTextIntoTextsOfMinLen)((0,N.cellText)(t.text[n.name]),n.length||da.DEFAULT_COLUMN_LEN,r)}),i};N.getWidthLimitedColumnsArray=Sv});var Dm=A(tt=>{"use strict";Object.defineProperty(tt,"__esModule",{value:!0});tt.rawColumnToInternalColumn=tt.objIfExists=void 0;var qv=Ir(),$v=(e,t)=>t?{[e]:t}:{};tt.objIfExists=$v;var Av=(e,t)=>{var r;return Object.assign(Object.assign(Object.assign(Object.assign({name:e.name,title:(r=e.title)!==null&&r!==void 0?r:e.name},(0,tt.objIfExists)("color",e.color||t?.color)),(0,tt.objIfExists)("maxLen",e.maxLen||t?.maxLen)),(0,tt.objIfExists)("minLen",e.minLen||t?.minLen)),{alignment:e.alignment||t?.alignment||qv.DEFAULT_ROW_ALIGNMENT,transform:e.transform})};tt.rawColumnToInternalColumn=Av});var Lm=A(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.preProcessRows=Zt.preProcessColumns=void 0;var Cv=Dr(),Ev=e=>{e.computedColumns.length&&e.computedColumns.forEach(t=>{e.columns.some(i=>i.name===t.name)||(e.addColumn(Object.assign(Object.assign({},t),e.defaultColumnOptions)),e.rows.forEach((i,n,s)=>{let o=s.map(a=>a.text);i.text[t.name]=t.function(i.text,n,o)}))})},Pv=e=>{e.enabledColumns.length&&(e.columns=e.columns.filter(t=>e.enabledColumns.includes(t.name)))},Tv=e=>{e.disabledColumns.length&&(e.columns=e.columns.filter(t=>!e.disabledColumns.includes(t.name)))},Rv=e=>{e.columns.forEach(t=>{t.length=(0,Cv.findLenOfColumn)(t,e.rows,e.charLength)})},Iv=e=>{Ev(e),Tv(e),Pv(e),Rv(e)};Zt.preProcessColumns=Iv;var Ov=e=>{let t=e.rows.filter(r=>e.filterFunction(r.text)).sort((r,i)=>e.sortFunction(r.text,i.text));e.rows=t};Zt.preProcessRows=Ov});var ua=A(ve=>{"use strict";var Fm=ve&&ve.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(ve,"__esModule",{value:!0});ve.printSimpleTable=ve.renderSimpleTable=ve.renderTable=void 0;var Bm=Fm(ra()),Um=ca(),Ee=Ir(),ft=Dr(),jv=Fm(la()),Mm=Lm(),Dv=(e,t,r,i,n,s,o,a)=>{let c=new Bm.default(o);return c.addCharsWithColor("",e.vertical),t.forEach(d=>{let u=r<i[d.name].length?(0,ft.cellText)(i[d.name][r]):"";c.addCharsWithColor(Ee.DEFAULT_ROW_FONT_COLOR," "),c.addCharsWithColor(n&&Ee.DEFAULT_HEADER_FONT_COLOR||d.color||s.color,(0,Um.textWithPadding)(u,d.alignment||Ee.DEFAULT_ROW_ALIGNMENT,d.length||Ee.DEFAULT_COLUMN_LEN,a)),c.addCharsWithColor("",` ${e.vertical}`)}),c.renderConsole()},Nm=(e,t,r,i,n,s)=>{let o=(0,ft.getWidthLimitedColumnsArray)(t,r,s),a=Object.values(o).reduce((d,p)=>Math.max(d,p.length),0),c=[];for(let d=0;d<a;d+=1){let p=Dv(e,t,d,o,n,r,i,s);c.push(p)}return c},Lv=(e,t)=>{let r=JSON.parse(JSON.stringify(e)),i={};return t.filter(n=>!!n.transform).forEach(n=>{i[n.name]=n.transform}),Object.keys(i).forEach(n=>{r.text[n]=i[n](r.text[n])}),r},Mv=(e,t)=>{let r=[],i=Lv(t,e.columns);return r=r.concat(Nm(e.tableStyle,e.columns,i,e.colorMap,void 0,e.charLength)),r},Fv=e=>{let t=[];if(e.title===void 0)return t;let r=()=>{let s=(o,a)=>o+a+2+1;return e.columns.map(o=>o.length||Ee.DEFAULT_COLUMN_LEN).reduce(s,1)},i=(0,Um.textWithPadding)(e.title,Ee.DEFAULT_HEADER_ALIGNMENT,r()),n=new Bm.default(e.colorMap);return n.addCharsWithColor(Ee.DEFAULT_HEADER_FONT_COLOR,i),t.push(n.renderConsole()),t},Bv=e=>{let t=[];t.push((0,ft.renderTableHorizontalBorders)(e.tableStyle.headerTop,e.columns.map(i=>i.length||Ee.DEFAULT_COLUMN_LEN)));let r=(0,ft.createHeaderAsRow)(ft.createRow,e.columns);return t=t.concat(Nm(e.tableStyle,e.columns,r,e.colorMap,!0)),t.push((0,ft.renderTableHorizontalBorders)(e.tableStyle.headerBottom,e.columns.map(i=>i.length||Ee.DEFAULT_COLUMN_LEN))),t},Uv=e=>{let t=[];return t.push((0,ft.renderTableHorizontalBorders)(e.tableStyle.tableBottom,e.columns.map(r=>r.length||Ee.DEFAULT_COLUMN_LEN))),t},Nv=(e,t)=>{let r=[],i=e.rows.length-1;return e.rows.indexOf(t)!==i&&t.separator&&r.push((0,ft.renderTableHorizontalBorders)(e.tableStyle.rowSeparator,e.columns.map(s=>s.length||Ee.DEFAULT_COLUMN_LEN))),r},Gv=e=>{(0,Mm.preProcessColumns)(e),(0,Mm.preProcessRows)(e);let t=[];return Fv(e).forEach(r=>t.push(r)),Bv(e).forEach(r=>t.push(r)),e.rows.forEach(r=>{Mv(e,r).forEach(i=>t.push(i)),Nv(e,r).forEach(i=>t.push(i))}),Uv(e).forEach(r=>t.push(r)),t.join(`
31
- `)};ve.renderTable=Gv;var zv=(e,t)=>{let r=new jv.default(t);return r.addRows(e),(0,ve.renderTable)(r)};ve.renderSimpleTable=zv;var Vv=(e,t)=>{console.log((0,ve.renderSimpleTable)(e,t))};ve.printSimpleTable=Vv});var la=A(fa=>{"use strict";Object.defineProperty(fa,"__esModule",{value:!0});var Wv=ra(),Pn=Ir(),ma=Dr(),ha=Dm(),Hv=ua(),Kv=()=>0,Yv=()=>!0,ya=class{initSimple(t){this.columns=t.map(r=>({name:r,title:r,alignment:Pn.DEFAULT_ROW_ALIGNMENT}))}initDetailed(t){var r;this.title=t?.title||this.title,this.tableStyle=Object.assign(Object.assign({},this.tableStyle),t?.style),this.sortFunction=t?.sort||this.sortFunction,this.filterFunction=t?.filter||this.filterFunction,this.enabledColumns=t?.enabledColumns||this.enabledColumns,this.disabledColumns=t?.disabledColumns||this.disabledColumns,this.computedColumns=t?.computedColumns||this.computedColumns,this.columns=((r=t?.columns)===null||r===void 0?void 0:r.map(i=>(0,ha.rawColumnToInternalColumn)(i,t?.defaultColumnOptions)))||this.columns,this.rowSeparator=t?.rowSeparator||this.rowSeparator,this.charLength=t?.charLength||this.charLength,this.defaultColumnOptions=t?.defaultColumnOptions||this.defaultColumnOptions,t?.shouldDisableColors?this.colorMap={}:t?.colorMap&&(this.colorMap=Object.assign(Object.assign({},this.colorMap),t.colorMap)),t.rows!==void 0&&this.addRows(t.rows)}constructor(t){this.rows=[],this.columns=[],this.title=void 0,this.tableStyle=Pn.DEFAULT_TABLE_STYLE,this.filterFunction=Yv,this.sortFunction=Kv,this.enabledColumns=[],this.disabledColumns=[],this.computedColumns=[],this.rowSeparator=Pn.DEFAULT_ROW_SEPARATOR,this.colorMap=Wv.DEFAULT_COLOR_MAP,this.charLength={},this.defaultColumnOptions=void 0,this.transforms={},t instanceof Array?this.initSimple(t):typeof t=="object"&&this.initDetailed(t)}createColumnFromRow(t){let r=this.columns.map(i=>i.name);Object.keys(t).forEach(i=>{r.includes(i)||this.columns.push((0,ha.rawColumnToInternalColumn)((0,ma.createColumFromOnlyName)(i),this.defaultColumnOptions))})}addColumn(t){let r=typeof t=="string"?(0,ma.createColumFromOnlyName)(t):t;this.columns.push((0,ha.rawColumnToInternalColumn)(r,this.defaultColumnOptions))}addColumns(t){t.forEach(r=>{this.addColumn(r)})}addRow(t,r){this.createColumnFromRow(t),this.rows.push((0,ma.createRow)(r?.color||Pn.DEFAULT_ROW_FONT_COLOR,t,r?.separator!==void 0?r?.separator:this.rowSeparator))}addRows(t,r){t.forEach(i=>{this.addRow(i,r)})}renderTable(){return(0,Hv.renderTable)(this)}};fa.default=ya});var zm=A(Lr=>{"use strict";var Jv=Lr&&Lr.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Lr,"__esModule",{value:!0});var Xv=Jv(la()),Gm=Dr(),ga=class{constructor(t){this.table=new Xv.default(t)}addColumn(t){return this.table.addColumn(t),this}addColumns(t){return this.table.addColumns(t),this}addRow(t,r){return this.table.addRow(t,(0,Gm.convertRawRowOptionsToStandard)(r)),this}addRows(t,r){return this.table.addRows(t,(0,Gm.convertRawRowOptionsToStandard)(r)),this}printTable(){let t=this.table.renderTable();console.log(t)}render(){return this.table.renderTable()}};Lr.default=ga});var Mr=A(ze=>{"use strict";var Zv=ze&&ze.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(ze,"__esModule",{value:!0});ze.renderTable=ze.printTable=ze.Table=void 0;var Qv=Zv(zm());ze.Table=Qv.default;var Vm=ua();Object.defineProperty(ze,"printTable",{enumerable:!0,get:function(){return Vm.printSimpleTable}});Object.defineProperty(ze,"renderTable",{enumerable:!0,get:function(){return Vm.renderSimpleTable}})});var Fa=D(Ma(),1),{program:mq,createCommand:hq,createArgument:yq,createOption:fq,CommanderError:gq,InvalidArgumentError:_q,InvalidOptionArgumentError:bq,Command:Ba,Argument:wq,Option:Ua,Help:xq}=Fa.default;var Zh=D(K(),1);import ce from"fs";import se from"path";import{fileURLToPath as Uk}from"url";import{styleText as ds}from"util";import{stdout as ls,stdin as oc}from"process";import*as nt from"readline";import By from"readline";var za=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let r=0;for(e.lastIndex=0;e.test(t);)r+=1;return t.length-r}})(),Va=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Wa=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141;var qy=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,$y=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Ha=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Ay=/\t{1,1000}/y,Ka=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),Cy=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Ey=new RegExp("\\p{M}+","gu"),Py={limit:1/0,ellipsis:""},Ya=(e,t={},r={})=>{let i=t.limit??1/0,n=t.ellipsis??"",s=t?.ellipsisWidth??(n?Ya(n,Py,r).width:0),o=0,a=r.controlWidth??0,c=r.tabWidth??8,d=r.emojiWidth??2,p=2,u=r.regularWidth??1,l=r.wideWidth??p,m=[[Cy,u],[qy,o],[$y,a],[Ay,c],[Ka,d],[Ha,l]],h=0,f=0,x=e.length,w=0,v=!1,g=x,R=Math.max(0,i-s),S=0,U=0,j=0,M=0;e:for(;;){if(U>S||f>=x&&f>h){let G=e.slice(S,U)||e.slice(h,f);w=0;for(let H of G.replaceAll(Ey,"")){let $=H.codePointAt(0)||0;if(Va($)?M=p:Wa($)?M=l:M=u,j+M>R&&(g=Math.min(g,Math.max(S,h)+w)),j+M>i){v=!0;break e}w+=H.length,j+=M}S=U=0}if(f>=x)break e;for(let G=0,H=m.length;G<H;G++){let[$,Ve]=m[G];if($.lastIndex=f,$.test(e)){if(w=$===Ha?za(e.slice(f,$.lastIndex)):$===Ka?1:$.lastIndex-f,M=w*Ve,j+M>R&&(g=Math.min(g,f+Math.floor((R-j)/Ve))),j+M>i){v=!0;break e}j+=M,S=h,U=f,f=h=$.lastIndex;continue e}}f+=1}return{width:v?R:j,index:v?g:x,truncated:v,ellipsed:v&&i>=s}},Ja=Ya;var Ty={limit:1/0,ellipsis:"",ellipsisWidth:0},Ry=(e,t={})=>Ja(e,Ty,t).width,ae=Ry;var ti="\x1B",tc="\x9B",Iy=39,os="\x07",rc="[",Oy="]",ic="m",as=`${Oy}8;;`,Xa=new RegExp(`(?:\\${rc}(?<code>\\d+)m|\\${as}(?<uri>.*)${os})`,"y"),Za=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},Qa=e=>`${ti}${rc}${e}${ic}`,ec=e=>`${ti}${as}${e}${os}`,ss=(e,t,r)=>{let i=t[Symbol.iterator](),n=!1,s=!1,o=e.at(-1),a=o===void 0?0:ae(o),c=i.next(),d=i.next(),p=0;for(;!c.done;){let u=c.value,l=ae(u);a+l<=r?e[e.length-1]+=u:(e.push(u),a=0),(u===ti||u===tc)&&(n=!0,s=t.startsWith(as,p+1)),n?s?u===os&&(n=!1,s=!1):u===ic&&(n=!1):(a+=l,a===r&&!d.done&&(e.push(""),a=0)),c=d,d=i.next(),p+=u.length}o=e.at(-1),!a&&o!==void 0&&o.length&&e.length>1&&(e[e.length-2]+=e.pop())},jy=e=>{let t=e.split(" "),r=t.length;for(;r&&!ae(t[r-1]);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},Dy=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let i="",n,s,o=e.split(" "),a=[""],c=0;for(let u=0;u<o.length;u++){let l=o[u];if(r.trim!==!1){let h=a.at(-1)??"",f=h.trimStart();h.length!==f.length&&(a[a.length-1]=f,c=ae(f))}u!==0&&(c>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c||r.trim===!1)&&(a[a.length-1]+=" ",c++));let m=ae(l);if(r.hard&&m>t){let h=t-c,f=1+Math.floor((m-h-1)/t);Math.floor((m-1)/t)<f&&a.push(""),ss(a,l,t),c=ae(a.at(-1)??"");continue}if(c+m>t&&c&&m){if(r.wordWrap===!1&&c<t){ss(a,l,t),c=ae(a.at(-1)??"");continue}a.push(""),c=0}if(c+m>t&&r.wordWrap===!1){ss(a,l,t),c=ae(a.at(-1)??"");continue}a[a.length-1]+=l,c+=m}r.trim!==!1&&(a=a.map(u=>jy(u)));let d=a.join(`
32
- `),p=!1;for(let u=0;u<d.length;u++){let l=d[u];if(i+=l,p)p=!1;else if(p=l>="\uD800"&&l<="\uDBFF",p)continue;if(l===ti||l===tc){Xa.lastIndex=u+1;let h=Xa.exec(d)?.groups;if(h?.code!==void 0){let f=Number.parseFloat(h.code);n=f===Iy?void 0:f}else h?.uri!==void 0&&(s=h.uri.length===0?void 0:h.uri)}if(d[u+1]===`
29
+ `)}),this}_outputHelpIfRequested(t){let r=this._getHelpOption();r&&t.find(n=>r.is(n))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Ia(e){return e.map(t=>{if(!t.startsWith("--inspect"))return t;let r,i="127.0.0.1",n="9229",s;return(s=t.match(/^(--inspect(-brk)?)$/))!==null?r=s[1]:(s=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(r=s[1],/^\d+$/.test(s[3])?n=s[3]:i=s[3]):(s=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(r=s[1],i=s[3],n=s[4]),r&&n!=="0"?`${r}=${i}:${parseInt(n)+1}`:t})}function ts(){if(I.env.NO_COLOR||I.env.FORCE_COLOR==="0"||I.env.FORCE_COLOR==="false")return!1;if(I.env.FORCE_COLOR||I.env.CLICOLOR_FORCE!==void 0)return!0}rs.Command=es;rs.useColor=ts});var Ma=A(be=>{"use strict";var{Argument:ja}=Zr(),{Command:is}=Oa(),{CommanderError:wy,InvalidArgumentError:Da}=or(),{Help:xy}=Hn(),{Option:La}=Xn();be.program=new is;be.createCommand=e=>new is(e);be.createOption=(e,t)=>new La(e,t);be.createArgument=(e,t)=>new ja(e,t);be.Command=is;be.Option=La;be.Argument=ja;be.Help=xy;be.CommanderError=wy;be.InvalidArgumentError=Da;be.InvalidOptionArgumentError=Da});var K=A((qq,ns)=>{"use strict";var ti=process||{},Na=ti.argv||[],ei=ti.env||{},ky=!(ei.NO_COLOR||Na.includes("--no-color"))&&(!!ei.FORCE_COLOR||Na.includes("--color")||ti.platform==="win32"||(ti.stdout||{}).isTTY&&ei.TERM!=="dumb"||!!ei.CI),vy=(e,t,r=e)=>i=>{let n=""+i,s=n.indexOf(t,e.length);return~s?e+Sy(n,t,r,s)+t:e+n+t},Sy=(e,t,r,i)=>{let n="",s=0;do n+=e.substring(s,i)+r,s=i+t.length,i=e.indexOf(t,s);while(~i);return n+e.substring(s)},Ga=(e=ky)=>{let t=e?vy:()=>String;return{isColorSupported:e,reset:t("\x1B[0m","\x1B[0m"),bold:t("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:t("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:t("\x1B[3m","\x1B[23m"),underline:t("\x1B[4m","\x1B[24m"),inverse:t("\x1B[7m","\x1B[27m"),hidden:t("\x1B[8m","\x1B[28m"),strikethrough:t("\x1B[9m","\x1B[29m"),black:t("\x1B[30m","\x1B[39m"),red:t("\x1B[31m","\x1B[39m"),green:t("\x1B[32m","\x1B[39m"),yellow:t("\x1B[33m","\x1B[39m"),blue:t("\x1B[34m","\x1B[39m"),magenta:t("\x1B[35m","\x1B[39m"),cyan:t("\x1B[36m","\x1B[39m"),white:t("\x1B[37m","\x1B[39m"),gray:t("\x1B[90m","\x1B[39m"),bgBlack:t("\x1B[40m","\x1B[49m"),bgRed:t("\x1B[41m","\x1B[49m"),bgGreen:t("\x1B[42m","\x1B[49m"),bgYellow:t("\x1B[43m","\x1B[49m"),bgBlue:t("\x1B[44m","\x1B[49m"),bgMagenta:t("\x1B[45m","\x1B[49m"),bgCyan:t("\x1B[46m","\x1B[49m"),bgWhite:t("\x1B[47m","\x1B[49m"),blackBright:t("\x1B[90m","\x1B[39m"),redBright:t("\x1B[91m","\x1B[39m"),greenBright:t("\x1B[92m","\x1B[39m"),yellowBright:t("\x1B[93m","\x1B[39m"),blueBright:t("\x1B[94m","\x1B[39m"),magentaBright:t("\x1B[95m","\x1B[39m"),cyanBright:t("\x1B[96m","\x1B[39m"),whiteBright:t("\x1B[97m","\x1B[39m"),bgBlackBright:t("\x1B[100m","\x1B[49m"),bgRedBright:t("\x1B[101m","\x1B[49m"),bgGreenBright:t("\x1B[102m","\x1B[49m"),bgYellowBright:t("\x1B[103m","\x1B[49m"),bgBlueBright:t("\x1B[104m","\x1B[49m"),bgMagentaBright:t("\x1B[105m","\x1B[49m"),bgCyanBright:t("\x1B[106m","\x1B[49m"),bgWhiteBright:t("\x1B[107m","\x1B[49m")}};ns.exports=Ga();ns.exports.createColors=Ga});var ps=A((Iq,nc)=>{"use strict";var cs={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let r="";return e<0?r+=`\x1B[${-e}D`:e>0&&(r+=`\x1B[${e}C`),t<0?r+=`\x1B[${-t}A`:t>0&&(r+=`\x1B[${t}B`),r},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},My={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},Fy={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let r=0;r<e;r++)t+=this.line+(r<e-1?cs.up():"");return e&&(t+=cs.left),t}};nc.exports={cursor:cs,scroll:My,erase:Fy,beep:"\x07"}});var Nc=A((ZA,Uc)=>{"use strict";Uc.exports=Bc;Bc.sync=ug;var Mc=he("fs");function dg(e,t){var r=t.pathExt!==void 0?t.pathExt:process.env.PATHEXT;if(!r||(r=r.split(";"),r.indexOf("")!==-1))return!0;for(var i=0;i<r.length;i++){var n=r[i].toLowerCase();if(n&&e.substr(-n.length).toLowerCase()===n)return!0}return!1}function Fc(e,t,r){return!e.isSymbolicLink()&&!e.isFile()?!1:dg(t,r)}function Bc(e,t,r){Mc.stat(e,function(i,n){r(i,i?!1:Fc(n,e,t))})}function ug(e,t){return Fc(Mc.statSync(e),e,t)}});var Hc=A((QA,Wc)=>{"use strict";Wc.exports=zc;zc.sync=lg;var Gc=he("fs");function zc(e,t,r){Gc.stat(e,function(i,n){r(i,i?!1:Vc(n,t))})}function lg(e,t){return Vc(Gc.statSync(e),t)}function Vc(e,t){return e.isFile()&&mg(e,t)}function mg(e,t){var r=e.mode,i=e.uid,n=e.gid,s=t.uid!==void 0?t.uid:process.getuid&&process.getuid(),o=t.gid!==void 0?t.gid:process.getgid&&process.getgid(),a=parseInt("100",8),c=parseInt("010",8),d=parseInt("001",8),p=a|c,u=r&d||r&c&&n===o||r&a&&i===s||r&p&&s===0;return u}});var Yc=A((tC,Kc)=>{"use strict";var eC=he("fs"),Ei;process.platform==="win32"||global.TESTING_WINDOWS?Ei=Nc():Ei=Hc();Kc.exports=As;As.sync=hg;function As(e,t,r){if(typeof t=="function"&&(r=t,t={}),!r){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){As(e,t||{},function(s,o){s?n(s):i(o)})})}Ei(e,t||{},function(i,n){i&&(i.code==="EACCES"||t&&t.ignoreErrors)&&(i=null,n=!1),r(i,n)})}function hg(e,t){try{return Ei.sync(e,t||{})}catch(r){if(t&&t.ignoreErrors||r.code==="EACCES")return!1;throw r}}});var rp=A((rC,tp)=>{"use strict";var Ot=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",Jc=he("path"),yg=Ot?";":":",Xc=Yc(),Zc=e=>Object.assign(new Error(`not found: ${e}`),{code:"ENOENT"}),Qc=(e,t)=>{let r=t.colon||yg,i=e.match(/\//)||Ot&&e.match(/\\/)?[""]:[...Ot?[process.cwd()]:[],...(t.path||process.env.PATH||"").split(r)],n=Ot?t.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=Ot?n.split(r):[""];return Ot&&e.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},ep=(e,t,r)=>{typeof t=="function"&&(r=t,t={}),t||(t={});let{pathEnv:i,pathExt:n,pathExtExe:s}=Qc(e,t),o=[],a=d=>new Promise((p,u)=>{if(d===i.length)return t.all&&o.length?p(o):u(Zc(e));let l=i[d],m=/^".*"$/.test(l)?l.slice(1,-1):l,h=Jc.join(m,e),f=!m&&/^\.[\\\/]/.test(e)?e.slice(0,2)+h:h;p(c(f,d,0))}),c=(d,p,u)=>new Promise((l,m)=>{if(u===n.length)return l(a(p+1));let h=n[u];Xc(d+h,{pathExt:s},(f,x)=>{if(!f&&x)if(t.all)o.push(d+h);else return l(d+h);return l(c(d,p,u+1))})});return r?a(0).then(d=>r(null,d),r):a(0)},fg=(e,t)=>{t=t||{};let{pathEnv:r,pathExt:i,pathExtExe:n}=Qc(e,t),s=[];for(let o=0;o<r.length;o++){let a=r[o],c=/^".*"$/.test(a)?a.slice(1,-1):a,d=Jc.join(c,e),p=!c&&/^\.[\\\/]/.test(e)?e.slice(0,2)+d:d;for(let u=0;u<i.length;u++){let l=p+i[u];try{if(Xc.sync(l,{pathExt:n}))if(t.all)s.push(l);else return l}catch{}}}if(t.all&&s.length)return s;if(t.nothrow)return null;throw Zc(e)};tp.exports=ep;ep.sync=fg});var np=A((iC,Cs)=>{"use strict";var ip=(e={})=>{let t=e.env||process.env;return(e.platform||process.platform)!=="win32"?"PATH":Object.keys(t).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};Cs.exports=ip;Cs.exports.default=ip});var cp=A((nC,ap)=>{"use strict";var sp=he("path"),gg=rp(),_g=np();function op(e,t){let r=e.options.env||process.env,i=process.cwd(),n=e.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(e.options.cwd)}catch{}let o;try{o=gg.sync(e.command,{path:r[_g({env:r})],pathExt:t?sp.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=sp.resolve(n?e.options.cwd:"",o)),o}function bg(e){return op(e)||op(e,!0)}ap.exports=bg});var pp=A((sC,Ps)=>{"use strict";var Es=/([()\][%!^"`<>&|;, *?])/g;function wg(e){return e=e.replace(Es,"^$1"),e}function xg(e,t){return e=`${e}`,e=e.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),e=e.replace(/(?=(\\+?)?)\1$/,"$1$1"),e=`"${e}"`,e=e.replace(Es,"^$1"),t&&(e=e.replace(Es,"^$1")),e}Ps.exports.command=wg;Ps.exports.argument=xg});var up=A((oC,dp)=>{"use strict";dp.exports=/^#!(.*)/});var mp=A((aC,lp)=>{"use strict";var kg=up();lp.exports=(e="")=>{let t=e.match(kg);if(!t)return null;let[r,i]=t[0].replace(/#! ?/,"").split(" "),n=r.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var yp=A((cC,hp)=>{"use strict";var Ts=he("fs"),vg=mp();function Sg(e){let r=Buffer.alloc(150),i;try{i=Ts.openSync(e,"r"),Ts.readSync(i,r,0,150,0),Ts.closeSync(i)}catch{}return vg(r.toString())}hp.exports=Sg});var bp=A((pC,_p)=>{"use strict";var qg=he("path"),fp=cp(),gp=pp(),$g=yp(),Ag=process.platform==="win32",Cg=/\.(?:com|exe)$/i,Eg=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function Pg(e){e.file=fp(e);let t=e.file&&$g(e.file);return t?(e.args.unshift(e.file),e.command=t,fp(e)):e.file}function Tg(e){if(!Ag)return e;let t=Pg(e),r=!Cg.test(t);if(e.options.forceShell||r){let i=Eg.test(t);e.command=qg.normalize(e.command),e.command=gp.command(e.command),e.args=e.args.map(s=>gp.argument(s,i));let n=[e.command].concat(e.args).join(" ");e.args=["/d","/s","/c",`"${n}"`],e.command=process.env.comspec||"cmd.exe",e.options.windowsVerbatimArguments=!0}return e}function Rg(e,t,r){t&&!Array.isArray(t)&&(r=t,t=null),t=t?t.slice(0):[],r=Object.assign({},r);let i={command:e,args:t,options:r,file:void 0,original:{command:e,args:t}};return r.shell?i:Tg(i)}_p.exports=Rg});var kp=A((dC,xp)=>{"use strict";var Rs=process.platform==="win32";function Is(e,t){return Object.assign(new Error(`${t} ${e.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${t} ${e.command}`,path:e.command,spawnargs:e.args})}function Ig(e,t){if(!Rs)return;let r=e.emit;e.emit=function(i,n){if(i==="exit"){let s=wp(n,t);if(s)return r.call(e,"error",s)}return r.apply(e,arguments)}}function wp(e,t){return Rs&&e===1&&!t.file?Is(t.original,"spawn"):null}function Og(e,t){return Rs&&e===1&&!t.file?Is(t.original,"spawnSync"):null}xp.exports={hookChildProcess:Ig,verifyENOENT:wp,verifyENOENTSync:Og,notFoundError:Is}});var qp=A((uC,jt)=>{"use strict";var vp=he("child_process"),Os=bp(),js=kp();function Sp(e,t,r){let i=Os(e,t,r),n=vp.spawn(i.command,i.args,i.options);return js.hookChildProcess(n,i),n}function jg(e,t,r){let i=Os(e,t,r),n=vp.spawnSync(i.command,i.args,i.options);return n.error=n.error||js.verifyENOENTSync(n.status,i),n}jt.exports=Sp;jt.exports.spawn=Sp;jt.exports.sync=jg;jt.exports._parse=Os;jt.exports._enoent=js});var ra=A(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.DEFAULT_COLOR_MAP=void 0;Jt.DEFAULT_COLOR_MAP={red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",cyan:"\x1B[36m",white:"\x1B[37m",white_bold:"\x1B[01m",reset:"\x1B[0m"};var ta=class{constructor(t=Jt.DEFAULT_COLOR_MAP){this.text="",this.colorMap=t}addCharsWithColor(t,r){let i=this.colorMap[t];this.text+=i!==void 0?`${i}${r}${this.colorMap.reset}`:r}renderConsole(){return this.text}};Jt.default=ta});var Or=A(Z=>{"use strict";Object.defineProperty(Z,"__esModule",{value:!0});Z.DEFAULT_HEADER_ALIGNMENT=Z.DEFAULT_ROW_ALIGNMENT=Z.DEFAULT_HEADER_FONT_COLOR=Z.DEFAULT_ROW_FONT_COLOR=Z.COLORS=Z.ALIGNMENTS=Z.DEFAULT_TABLE_STYLE=Z.DEFAULT_ROW_SEPARATOR=Z.DEFAULT_COLUMN_LEN=void 0;Z.DEFAULT_COLUMN_LEN=20;Z.DEFAULT_ROW_SEPARATOR=!1;Z.DEFAULT_TABLE_STYLE={headerTop:{left:"\u250C",mid:"\u252C",right:"\u2510",other:"\u2500"},headerBottom:{left:"\u251C",mid:"\u253C",right:"\u2524",other:"\u2500"},tableBottom:{left:"\u2514",mid:"\u2534",right:"\u2518",other:"\u2500"},vertical:"\u2502",rowSeparator:{left:"\u251C",mid:"\u253C",right:"\u2524",other:"\u2500"}};Z.ALIGNMENTS=["right","left","center"];Z.COLORS=["red","green","yellow","white","blue","magenta","cyan","white_bold","reset"];Z.DEFAULT_ROW_FONT_COLOR="white";Z.DEFAULT_HEADER_FONT_COLOR="white_bold";Z.DEFAULT_ROW_ALIGNMENT="right";Z.DEFAULT_HEADER_ALIGNMENT="center"});var Cm=A(ia=>{"use strict";Object.defineProperty(ia,"__esModule",{value:!0});var Qk=[{first:768,last:879},{first:1155,last:1158},{first:1160,last:1161},{first:1425,last:1469},{first:1471,last:1471},{first:1473,last:1474},{first:1476,last:1477},{first:1479,last:1479},{first:1536,last:1539},{first:1552,last:1557},{first:1611,last:1630},{first:1648,last:1648},{first:1750,last:1764},{first:1767,last:1768},{first:1770,last:1773},{first:1807,last:1807},{first:1809,last:1809},{first:1840,last:1866},{first:1958,last:1968},{first:2027,last:2035},{first:2305,last:2306},{first:2364,last:2364},{first:2369,last:2376},{first:2381,last:2381},{first:2385,last:2388},{first:2402,last:2403},{first:2433,last:2433},{first:2492,last:2492},{first:2497,last:2500},{first:2509,last:2509},{first:2530,last:2531},{first:2561,last:2562},{first:2620,last:2620},{first:2625,last:2626},{first:2631,last:2632},{first:2635,last:2637},{first:2672,last:2673},{first:2689,last:2690},{first:2748,last:2748},{first:2753,last:2757},{first:2759,last:2760},{first:2765,last:2765},{first:2786,last:2787},{first:2817,last:2817},{first:2876,last:2876},{first:2879,last:2879},{first:2881,last:2883},{first:2893,last:2893},{first:2902,last:2902},{first:2946,last:2946},{first:3008,last:3008},{first:3021,last:3021},{first:3134,last:3136},{first:3142,last:3144},{first:3146,last:3149},{first:3157,last:3158},{first:3260,last:3260},{first:3263,last:3263},{first:3270,last:3270},{first:3276,last:3277},{first:3298,last:3299},{first:3393,last:3395},{first:3405,last:3405},{first:3530,last:3530},{first:3538,last:3540},{first:3542,last:3542},{first:3633,last:3633},{first:3636,last:3642},{first:3655,last:3662},{first:3761,last:3761},{first:3764,last:3769},{first:3771,last:3772},{first:3784,last:3789},{first:3864,last:3865},{first:3893,last:3893},{first:3895,last:3895},{first:3897,last:3897},{first:3953,last:3966},{first:3968,last:3972},{first:3974,last:3975},{first:3984,last:3991},{first:3993,last:4028},{first:4038,last:4038},{first:4141,last:4144},{first:4146,last:4146},{first:4150,last:4151},{first:4153,last:4153},{first:4184,last:4185},{first:4448,last:4607},{first:4959,last:4959},{first:5906,last:5908},{first:5938,last:5940},{first:5970,last:5971},{first:6002,last:6003},{first:6068,last:6069},{first:6071,last:6077},{first:6086,last:6086},{first:6089,last:6099},{first:6109,last:6109},{first:6155,last:6157},{first:6313,last:6313},{first:6432,last:6434},{first:6439,last:6440},{first:6450,last:6450},{first:6457,last:6459},{first:6679,last:6680},{first:6912,last:6915},{first:6964,last:6964},{first:6966,last:6970},{first:6972,last:6972},{first:6978,last:6978},{first:7019,last:7027},{first:7616,last:7626},{first:7678,last:7679},{first:8203,last:8207},{first:8234,last:8238},{first:8288,last:8291},{first:8298,last:8303},{first:8400,last:8431},{first:12330,last:12335},{first:12441,last:12442},{first:43014,last:43014},{first:43019,last:43019},{first:43045,last:43046},{first:64286,last:64286},{first:65024,last:65039},{first:65056,last:65059},{first:65279,last:65279},{first:65529,last:65531},{first:68097,last:68099},{first:68101,last:68102},{first:68108,last:68111},{first:68152,last:68154},{first:68159,last:68159},{first:119143,last:119145},{first:119155,last:119170},{first:119173,last:119179},{first:119210,last:119213},{first:119362,last:119364},{first:917505,last:917505},{first:917536,last:917631},{first:917760,last:917999}];ia.default=Qk});var Em=A(na=>{"use strict";Object.defineProperty(na,"__esModule",{value:!0});var ev=(e,t,r)=>{let i=0,n,s=r;if(e<t[0].first||e>t[s].last)return 0;for(;s>=i;)if(n=Math.floor((i+s)/2),e>t[n].last)i=n+1;else if(e<t[n].first)s=n-1;else return 1;return 0};na.default=ev});var sa=A(jr=>{"use strict";var Tm=jr&&jr.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(jr,"__esModule",{value:!0});var Pm=Tm(Cm()),tv=Tm(Em()),rv=e=>e===0?0:e<32||e>=127&&e<160?-1:(0,tv.default)(e,Pm.default,Pm.default.length-1)?0:1+ +(e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=131072&&e<=196605||e>=196608&&e<=262141));jr.default=rv});var Rm=A(Dr=>{"use strict";var iv=Dr&&Dr.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Dr,"__esModule",{value:!0});var nv=iv(sa()),sv=e=>{let t=0;for(let r=0;r<e.length;r++){let i=e.charCodeAt(r),n=(0,nv.default)(i);if(n<0)return-1;t+=n}return t};Dr.default=sv});var Om=A(yt=>{"use strict";var Im=yt&&yt.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(yt,"__esModule",{value:!0});yt.wcswidth=yt.wcwidth=void 0;var ov=Im(Rm());yt.wcswidth=ov.default;var av=Im(sa());yt.wcwidth=av.default});var oa=A(Ct=>{"use strict";Object.defineProperty(Ct,"__esModule",{value:!0});Ct.findWidthInConsole=Ct.stripAnsi=void 0;var cv=Om(),pv=/\x1b\[\d{1,3}(;\d{1,3})*m/g,dv=e=>e.replace(pv,"");Ct.stripAnsi=dv;var uv=(e,t)=>{let r=0;return e=(0,Ct.stripAnsi)(e),t&&Object.entries(t).forEach(([i,n])=>{let s=new RegExp(i,"g");r+=(e.match(s)||[]).length*n,e=e.replace(i,"")}),r+=(0,cv.wcswidth)(e),r};Ct.findWidthInConsole=uv});var ca=A(Ge=>{"use strict";Object.defineProperty(Ge,"__esModule",{value:!0});Ge.biggestWordInSentence=Ge.textWithPadding=Ge.splitTextIntoTextsOfMinLen=void 0;var aa=oa(),lv=(e,t,r)=>{let i=[];return e.split(/[\n\r]/).forEach(s=>{let o=s.split(" "),a=[],c=0;o.forEach(d=>{let p=(0,aa.findWidthInConsole)(d,r);c+p<=t?(c+=p+1,a.push(d)):(a.length>0&&i.push(a.join(" ")),a=[d],c=p+1)}),i.push(a.join(" "))}),i};Ge.splitTextIntoTextsOfMinLen=lv;var mv=(e,t,r,i)=>{let n=(0,aa.findWidthInConsole)(e,i),s=Math.floor((r-n)/2),o=r-s-n;if(r<n){let a=(0,Ge.splitTextIntoTextsOfMinLen)(e,r);return a.length===1?e:a.map(c=>(0,Ge.textWithPadding)(c,t,r,i)).join(`
30
+ `)}switch(t){case"left":return e.concat(" ".repeat(r-n));case"center":return" ".repeat(s).concat(e).concat(" ".repeat(o));default:return" ".repeat(r-n).concat(e)}};Ge.textWithPadding=mv;var hv=(e,t)=>e.split(" ").reduce((r,i)=>Math.max(r,(0,aa.findWidthInConsole)(i,t)),0);Ge.biggestWordInSentence=hv});var Lr=A(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.getWidthLimitedColumnsArray=N.createHeaderAsRow=N.renderTableHorizontalBorders=N.findLenOfColumn=N.createRow=N.createColumFromOnlyName=N.createTableHorizontalBorders=N.convertRawRowOptionsToStandard=N.evaluateCellText=N.cellText=void 0;var jm=oa(),pa=ca(),da=Or(),Xt=(e,t)=>Math.max(e,t),yv=e=>e==null?"":`${e}`;N.cellText=yv;var fv=(e,t)=>t?`${t(e)}`:(0,N.cellText)(e);N.evaluateCellText=fv;var gv=e=>{if(e)return{color:e.color,separator:e.separator||da.DEFAULT_ROW_SEPARATOR}};N.convertRawRowOptionsToStandard=gv;var _v=({left:e,mid:t,right:r,other:i},n)=>{let s=e;return n.forEach(o=>{s+=i.repeat(o+2),s+=t}),s=s.slice(0,-t.length),s+=r,s};N.createTableHorizontalBorders=_v;var bv=e=>({name:e,title:e});N.createColumFromOnlyName=bv;var wv=(e,t,r)=>({color:e,separator:r,text:t});N.createRow=wv;var xv=(e,t,r)=>{let i=e.name,n=e.title,s=e.transform,o=Xt(0,e?.minLen||0);return e.maxLen?(o=Xt(o,Xt(e.maxLen,(0,pa.biggestWordInSentence)(n,r))),o=t.reduce((a,c)=>Xt(a,(0,pa.biggestWordInSentence)((0,N.evaluateCellText)(c.text[i],s),r)),o),o):(o=Xt(o,(0,jm.findWidthInConsole)(n,r)),t.forEach(a=>{o=Xt(o,(0,jm.findWidthInConsole)((0,N.evaluateCellText)(a.text[i],s),r))}),o)};N.findLenOfColumn=xv;var kv=(e,t)=>(0,N.createTableHorizontalBorders)(e,t);N.renderTableHorizontalBorders=kv;var vv=(e,t)=>{let r=da.DEFAULT_HEADER_FONT_COLOR,i=e(r,{},!1);return t.forEach(n=>{i.text[n.name]=n.title}),i};N.createHeaderAsRow=vv;var Sv=(e,t,r)=>{let i={};return e.forEach(n=>{i[n.name]=(0,pa.splitTextIntoTextsOfMinLen)((0,N.cellText)(t.text[n.name]),n.length||da.DEFAULT_COLUMN_LEN,r)}),i};N.getWidthLimitedColumnsArray=Sv});var Dm=A(tt=>{"use strict";Object.defineProperty(tt,"__esModule",{value:!0});tt.rawColumnToInternalColumn=tt.objIfExists=void 0;var qv=Or(),$v=(e,t)=>t?{[e]:t}:{};tt.objIfExists=$v;var Av=(e,t)=>{var r;return Object.assign(Object.assign(Object.assign(Object.assign({name:e.name,title:(r=e.title)!==null&&r!==void 0?r:e.name},(0,tt.objIfExists)("color",e.color||t?.color)),(0,tt.objIfExists)("maxLen",e.maxLen||t?.maxLen)),(0,tt.objIfExists)("minLen",e.minLen||t?.minLen)),{alignment:e.alignment||t?.alignment||qv.DEFAULT_ROW_ALIGNMENT,transform:e.transform})};tt.rawColumnToInternalColumn=Av});var Lm=A(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.preProcessRows=Zt.preProcessColumns=void 0;var Cv=Lr(),Ev=e=>{e.computedColumns.length&&e.computedColumns.forEach(t=>{e.columns.some(i=>i.name===t.name)||(e.addColumn(Object.assign(Object.assign({},t),e.defaultColumnOptions)),e.rows.forEach((i,n,s)=>{let o=s.map(a=>a.text);i.text[t.name]=t.function(i.text,n,o)}))})},Pv=e=>{e.enabledColumns.length&&(e.columns=e.columns.filter(t=>e.enabledColumns.includes(t.name)))},Tv=e=>{e.disabledColumns.length&&(e.columns=e.columns.filter(t=>!e.disabledColumns.includes(t.name)))},Rv=e=>{e.columns.forEach(t=>{t.length=(0,Cv.findLenOfColumn)(t,e.rows,e.charLength)})},Iv=e=>{Ev(e),Tv(e),Pv(e),Rv(e)};Zt.preProcessColumns=Iv;var Ov=e=>{let t=e.rows.filter(r=>e.filterFunction(r.text)).sort((r,i)=>e.sortFunction(r.text,i.text));e.rows=t};Zt.preProcessRows=Ov});var ua=A(ve=>{"use strict";var Fm=ve&&ve.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(ve,"__esModule",{value:!0});ve.printSimpleTable=ve.renderSimpleTable=ve.renderTable=void 0;var Bm=Fm(ra()),Um=ca(),Ee=Or(),ft=Lr(),jv=Fm(la()),Mm=Lm(),Dv=(e,t,r,i,n,s,o,a)=>{let c=new Bm.default(o);return c.addCharsWithColor("",e.vertical),t.forEach(d=>{let u=r<i[d.name].length?(0,ft.cellText)(i[d.name][r]):"";c.addCharsWithColor(Ee.DEFAULT_ROW_FONT_COLOR," "),c.addCharsWithColor(n&&Ee.DEFAULT_HEADER_FONT_COLOR||d.color||s.color,(0,Um.textWithPadding)(u,d.alignment||Ee.DEFAULT_ROW_ALIGNMENT,d.length||Ee.DEFAULT_COLUMN_LEN,a)),c.addCharsWithColor("",` ${e.vertical}`)}),c.renderConsole()},Nm=(e,t,r,i,n,s)=>{let o=(0,ft.getWidthLimitedColumnsArray)(t,r,s),a=Object.values(o).reduce((d,p)=>Math.max(d,p.length),0),c=[];for(let d=0;d<a;d+=1){let p=Dv(e,t,d,o,n,r,i,s);c.push(p)}return c},Lv=(e,t)=>{let r=JSON.parse(JSON.stringify(e)),i={};return t.filter(n=>!!n.transform).forEach(n=>{i[n.name]=n.transform}),Object.keys(i).forEach(n=>{r.text[n]=i[n](r.text[n])}),r},Mv=(e,t)=>{let r=[],i=Lv(t,e.columns);return r=r.concat(Nm(e.tableStyle,e.columns,i,e.colorMap,void 0,e.charLength)),r},Fv=e=>{let t=[];if(e.title===void 0)return t;let r=()=>{let s=(o,a)=>o+a+2+1;return e.columns.map(o=>o.length||Ee.DEFAULT_COLUMN_LEN).reduce(s,1)},i=(0,Um.textWithPadding)(e.title,Ee.DEFAULT_HEADER_ALIGNMENT,r()),n=new Bm.default(e.colorMap);return n.addCharsWithColor(Ee.DEFAULT_HEADER_FONT_COLOR,i),t.push(n.renderConsole()),t},Bv=e=>{let t=[];t.push((0,ft.renderTableHorizontalBorders)(e.tableStyle.headerTop,e.columns.map(i=>i.length||Ee.DEFAULT_COLUMN_LEN)));let r=(0,ft.createHeaderAsRow)(ft.createRow,e.columns);return t=t.concat(Nm(e.tableStyle,e.columns,r,e.colorMap,!0)),t.push((0,ft.renderTableHorizontalBorders)(e.tableStyle.headerBottom,e.columns.map(i=>i.length||Ee.DEFAULT_COLUMN_LEN))),t},Uv=e=>{let t=[];return t.push((0,ft.renderTableHorizontalBorders)(e.tableStyle.tableBottom,e.columns.map(r=>r.length||Ee.DEFAULT_COLUMN_LEN))),t},Nv=(e,t)=>{let r=[],i=e.rows.length-1;return e.rows.indexOf(t)!==i&&t.separator&&r.push((0,ft.renderTableHorizontalBorders)(e.tableStyle.rowSeparator,e.columns.map(s=>s.length||Ee.DEFAULT_COLUMN_LEN))),r},Gv=e=>{(0,Mm.preProcessColumns)(e),(0,Mm.preProcessRows)(e);let t=[];return Fv(e).forEach(r=>t.push(r)),Bv(e).forEach(r=>t.push(r)),e.rows.forEach(r=>{Mv(e,r).forEach(i=>t.push(i)),Nv(e,r).forEach(i=>t.push(i))}),Uv(e).forEach(r=>t.push(r)),t.join(`
31
+ `)};ve.renderTable=Gv;var zv=(e,t)=>{let r=new jv.default(t);return r.addRows(e),(0,ve.renderTable)(r)};ve.renderSimpleTable=zv;var Vv=(e,t)=>{console.log((0,ve.renderSimpleTable)(e,t))};ve.printSimpleTable=Vv});var la=A(fa=>{"use strict";Object.defineProperty(fa,"__esModule",{value:!0});var Wv=ra(),Tn=Or(),ma=Lr(),ha=Dm(),Hv=ua(),Kv=()=>0,Yv=()=>!0,ya=class{initSimple(t){this.columns=t.map(r=>({name:r,title:r,alignment:Tn.DEFAULT_ROW_ALIGNMENT}))}initDetailed(t){var r;this.title=t?.title||this.title,this.tableStyle=Object.assign(Object.assign({},this.tableStyle),t?.style),this.sortFunction=t?.sort||this.sortFunction,this.filterFunction=t?.filter||this.filterFunction,this.enabledColumns=t?.enabledColumns||this.enabledColumns,this.disabledColumns=t?.disabledColumns||this.disabledColumns,this.computedColumns=t?.computedColumns||this.computedColumns,this.columns=((r=t?.columns)===null||r===void 0?void 0:r.map(i=>(0,ha.rawColumnToInternalColumn)(i,t?.defaultColumnOptions)))||this.columns,this.rowSeparator=t?.rowSeparator||this.rowSeparator,this.charLength=t?.charLength||this.charLength,this.defaultColumnOptions=t?.defaultColumnOptions||this.defaultColumnOptions,t?.shouldDisableColors?this.colorMap={}:t?.colorMap&&(this.colorMap=Object.assign(Object.assign({},this.colorMap),t.colorMap)),t.rows!==void 0&&this.addRows(t.rows)}constructor(t){this.rows=[],this.columns=[],this.title=void 0,this.tableStyle=Tn.DEFAULT_TABLE_STYLE,this.filterFunction=Yv,this.sortFunction=Kv,this.enabledColumns=[],this.disabledColumns=[],this.computedColumns=[],this.rowSeparator=Tn.DEFAULT_ROW_SEPARATOR,this.colorMap=Wv.DEFAULT_COLOR_MAP,this.charLength={},this.defaultColumnOptions=void 0,this.transforms={},t instanceof Array?this.initSimple(t):typeof t=="object"&&this.initDetailed(t)}createColumnFromRow(t){let r=this.columns.map(i=>i.name);Object.keys(t).forEach(i=>{r.includes(i)||this.columns.push((0,ha.rawColumnToInternalColumn)((0,ma.createColumFromOnlyName)(i),this.defaultColumnOptions))})}addColumn(t){let r=typeof t=="string"?(0,ma.createColumFromOnlyName)(t):t;this.columns.push((0,ha.rawColumnToInternalColumn)(r,this.defaultColumnOptions))}addColumns(t){t.forEach(r=>{this.addColumn(r)})}addRow(t,r){this.createColumnFromRow(t),this.rows.push((0,ma.createRow)(r?.color||Tn.DEFAULT_ROW_FONT_COLOR,t,r?.separator!==void 0?r?.separator:this.rowSeparator))}addRows(t,r){t.forEach(i=>{this.addRow(i,r)})}renderTable(){return(0,Hv.renderTable)(this)}};fa.default=ya});var zm=A(Mr=>{"use strict";var Jv=Mr&&Mr.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Mr,"__esModule",{value:!0});var Xv=Jv(la()),Gm=Lr(),ga=class{constructor(t){this.table=new Xv.default(t)}addColumn(t){return this.table.addColumn(t),this}addColumns(t){return this.table.addColumns(t),this}addRow(t,r){return this.table.addRow(t,(0,Gm.convertRawRowOptionsToStandard)(r)),this}addRows(t,r){return this.table.addRows(t,(0,Gm.convertRawRowOptionsToStandard)(r)),this}printTable(){let t=this.table.renderTable();console.log(t)}render(){return this.table.renderTable()}};Mr.default=ga});var Fr=A(ze=>{"use strict";var Zv=ze&&ze.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(ze,"__esModule",{value:!0});ze.renderTable=ze.printTable=ze.Table=void 0;var Qv=Zv(zm());ze.Table=Qv.default;var Vm=ua();Object.defineProperty(ze,"printTable",{enumerable:!0,get:function(){return Vm.printSimpleTable}});Object.defineProperty(ze,"renderTable",{enumerable:!0,get:function(){return Vm.renderSimpleTable}})});var Fa=D(Ma(),1),{program:yq,createCommand:fq,createArgument:gq,createOption:_q,CommanderError:bq,InvalidArgumentError:wq,InvalidOptionArgumentError:xq,Command:Ba,Argument:kq,Option:Ua,Help:vq}=Fa.default;var Zh=D(K(),1);import pe from"fs";import oe from"path";import{fileURLToPath as Uk}from"url";import{styleText as ds}from"util";import{stdout as ls,stdin as oc}from"process";import*as nt from"readline";import By from"readline";var za=(()=>{let e=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return t=>{let r=0;for(e.lastIndex=0;e.test(t);)r+=1;return t.length-r}})(),Va=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Wa=e=>e===8987||e===9001||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e>=131072&&e<=196605||e>=196608&&e<=262141;var qy=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,$y=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Ha=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Ay=/\t{1,1000}/y,Ka=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),Cy=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Ey=new RegExp("\\p{M}+","gu"),Py={limit:1/0,ellipsis:""},Ya=(e,t={},r={})=>{let i=t.limit??1/0,n=t.ellipsis??"",s=t?.ellipsisWidth??(n?Ya(n,Py,r).width:0),o=0,a=r.controlWidth??0,c=r.tabWidth??8,d=r.emojiWidth??2,p=2,u=r.regularWidth??1,l=r.wideWidth??p,m=[[Cy,u],[qy,o],[$y,a],[Ay,c],[Ka,d],[Ha,l]],h=0,f=0,x=e.length,w=0,v=!1,g=x,R=Math.max(0,i-s),S=0,U=0,j=0,M=0;e:for(;;){if(U>S||f>=x&&f>h){let G=e.slice(S,U)||e.slice(h,f);w=0;for(let H of G.replaceAll(Ey,"")){let $=H.codePointAt(0)||0;if(Va($)?M=p:Wa($)?M=l:M=u,j+M>R&&(g=Math.min(g,Math.max(S,h)+w)),j+M>i){v=!0;break e}w+=H.length,j+=M}S=U=0}if(f>=x)break e;for(let G=0,H=m.length;G<H;G++){let[$,Ve]=m[G];if($.lastIndex=f,$.test(e)){if(w=$===Ha?za(e.slice(f,$.lastIndex)):$===Ka?1:$.lastIndex-f,M=w*Ve,j+M>R&&(g=Math.min(g,f+Math.floor((R-j)/Ve))),j+M>i){v=!0;break e}j+=M,S=h,U=f,f=h=$.lastIndex;continue e}}f+=1}return{width:v?R:j,index:v?g:x,truncated:v,ellipsed:v&&i>=s}},Ja=Ya;var Ty={limit:1/0,ellipsis:"",ellipsisWidth:0},Ry=(e,t={})=>Ja(e,Ty,t).width,ce=Ry;var ri="\x1B",tc="\x9B",Iy=39,os="\x07",rc="[",Oy="]",ic="m",as=`${Oy}8;;`,Xa=new RegExp(`(?:\\${rc}(?<code>\\d+)m|\\${as}(?<uri>.*)${os})`,"y"),Za=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},Qa=e=>`${ri}${rc}${e}${ic}`,ec=e=>`${ri}${as}${e}${os}`,ss=(e,t,r)=>{let i=t[Symbol.iterator](),n=!1,s=!1,o=e.at(-1),a=o===void 0?0:ce(o),c=i.next(),d=i.next(),p=0;for(;!c.done;){let u=c.value,l=ce(u);a+l<=r?e[e.length-1]+=u:(e.push(u),a=0),(u===ri||u===tc)&&(n=!0,s=t.startsWith(as,p+1)),n?s?u===os&&(n=!1,s=!1):u===ic&&(n=!1):(a+=l,a===r&&!d.done&&(e.push(""),a=0)),c=d,d=i.next(),p+=u.length}o=e.at(-1),!a&&o!==void 0&&o.length&&e.length>1&&(e[e.length-2]+=e.pop())},jy=e=>{let t=e.split(" "),r=t.length;for(;r&&!ce(t[r-1]);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},Dy=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let i="",n,s,o=e.split(" "),a=[""],c=0;for(let u=0;u<o.length;u++){let l=o[u];if(r.trim!==!1){let h=a.at(-1)??"",f=h.trimStart();h.length!==f.length&&(a[a.length-1]=f,c=ce(f))}u!==0&&(c>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c||r.trim===!1)&&(a[a.length-1]+=" ",c++));let m=ce(l);if(r.hard&&m>t){let h=t-c,f=1+Math.floor((m-h-1)/t);Math.floor((m-1)/t)<f&&a.push(""),ss(a,l,t),c=ce(a.at(-1)??"");continue}if(c+m>t&&c&&m){if(r.wordWrap===!1&&c<t){ss(a,l,t),c=ce(a.at(-1)??"");continue}a.push(""),c=0}if(c+m>t&&r.wordWrap===!1){ss(a,l,t),c=ce(a.at(-1)??"");continue}a[a.length-1]+=l,c+=m}r.trim!==!1&&(a=a.map(u=>jy(u)));let d=a.join(`
32
+ `),p=!1;for(let u=0;u<d.length;u++){let l=d[u];if(i+=l,p)p=!1;else if(p=l>="\uD800"&&l<="\uDBFF",p)continue;if(l===ri||l===tc){Xa.lastIndex=u+1;let h=Xa.exec(d)?.groups;if(h?.code!==void 0){let f=Number.parseFloat(h.code);n=f===Iy?void 0:f}else h?.uri!==void 0&&(s=h.uri.length===0?void 0:h.uri)}if(d[u+1]===`
33
33
  `){s&&(i+=ec(""));let m=n?Za(n):void 0;n&&m&&(i+=Qa(m))}else l===`
34
34
  `&&(n&&Za(n)&&(i+=Qa(n)),s&&(i+=ec(s)))}return i},Ly=/\r?\n/;function Re(e,t,r){return String(e).normalize().split(Ly).map(i=>Dy(i,t,r)).join(`
35
- `)}var ne=D(ps(),1);import{ReadStream as sc}from"tty";function ii(e,t,r){if(!r.some(o=>!o.disabled))return e;let i=e+t,n=Math.max(r.length-1,0),s=i<0?n:i>n?0:i;return r[s].disabled?ii(s,t<0?-1:1,r):s}var Uy=["up","down","left","right","space","enter","cancel"],Ny=["January","February","March","April","May","June","July","August","September","October","November","December"],te={actions:new Set(Uy),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...Ny],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};function ms(e,t){if(typeof e=="string")return te.aliases.get(e)===t;for(let r of e)if(r!==void 0&&ms(r,t))return!0;return!1}function Gy(e,t){if(e===t)return;let r=e.split(`
35
+ `)}var se=D(ps(),1);import{ReadStream as sc}from"tty";function ni(e,t,r){if(!r.some(o=>!o.disabled))return e;let i=e+t,n=Math.max(r.length-1,0),s=i<0?n:i>n?0:i;return r[s].disabled?ni(s,t<0?-1:1,r):s}var Uy=["up","down","left","right","space","enter","cancel"],Ny=["January","February","March","April","May","June","July","August","September","October","November","December"],te={actions:new Set(Uy),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...Ny],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};function ms(e,t){if(typeof e=="string")return te.aliases.get(e)===t;for(let r of e)if(r!==void 0&&ms(r,t))return!0;return!1}function Gy(e,t){if(e===t)return;let r=e.split(`
36
36
  `),i=t.split(`
37
- `),n=Math.max(r.length,i.length),s=[];for(let o=0;o<n;o++)r[o]!==i[o]&&s.push(o);return{lines:s,numLinesBefore:r.length,numLinesAfter:i.length,numLines:n}}var zy=globalThis.process.platform.startsWith("win"),us=Symbol("clack:cancel");function L(e){return e===us}function ri(e,t){let r=e;r.isTTY&&r.setRawMode(t)}function ac({input:e=oc,output:t=ls,overwrite:r=!0,hideCursor:i=!0}={}){let n=nt.createInterface({input:e,output:t,prompt:"",tabSize:1});nt.emitKeypressEvents(e,n),e instanceof sc&&e.isTTY&&e.setRawMode(!0);let s=(o,{name:a,sequence:c})=>{let d=String(o);if(ms([d,a,c],"cancel")){i&&t.write(ne.cursor.show),process.exit(0);return}if(!r)return;nt.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{nt.clearLine(t,1,()=>{e.once("keypress",s)})})};return i&&t.write(ne.cursor.hide),e.once("keypress",s),()=>{e.off("keypress",s),i&&t.write(ne.cursor.show),e instanceof sc&&e.isTTY&&!zy&&e.setRawMode(!1),n.terminal=!1,n.close()}}var or=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,hs=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;function ar(e,t,r,i=r,n){let s=or(e??ls);return Re(t,s-r.length,{hard:!0,trim:!1}).split(`
37
+ `),n=Math.max(r.length,i.length),s=[];for(let o=0;o<n;o++)r[o]!==i[o]&&s.push(o);return{lines:s,numLinesBefore:r.length,numLinesAfter:i.length,numLines:n}}var zy=globalThis.process.platform.startsWith("win"),us=Symbol("clack:cancel");function L(e){return e===us}function ii(e,t){let r=e;r.isTTY&&r.setRawMode(t)}function ac({input:e=oc,output:t=ls,overwrite:r=!0,hideCursor:i=!0}={}){let n=nt.createInterface({input:e,output:t,prompt:"",tabSize:1});nt.emitKeypressEvents(e,n),e instanceof sc&&e.isTTY&&e.setRawMode(!0);let s=(o,{name:a,sequence:c})=>{let d=String(o);if(ms([d,a,c],"cancel")){i&&t.write(se.cursor.show),process.exit(0);return}if(!r)return;nt.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{nt.clearLine(t,1,()=>{e.once("keypress",s)})})};return i&&t.write(se.cursor.hide),e.once("keypress",s),()=>{e.off("keypress",s),i&&t.write(se.cursor.show),e instanceof sc&&e.isTTY&&!zy&&e.setRawMode(!1),n.terminal=!1,n.close()}}var ar=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,hs=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;function cr(e,t,r,i=r,n){let s=ar(e??ls);return Re(t,s-r.length,{hard:!0,trim:!1}).split(`
38
38
  `).map((o,a)=>{let c=n?n(o,a):o;return`${a===0?i:r}${c}`}).join(`
39
- `)}var ci=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,t=!0){let{input:r=oc,output:i=ls,render:n,signal:s,...o}=e;this.opts=o,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=n.bind(this),this._track=t,this._abortSignal=s,this.input=r,this.output=i}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let r=this._subscribers.get(e)??[];r.push(t),this._subscribers.set(e,r)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let r=this._subscribers.get(e)??[],i=[];for(let n of r)n.cb(...t),n.once&&i.push(()=>r.splice(r.indexOf(n),1));for(let n of i)n()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(us);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=By.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),ri(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(ne.cursor.show),this.output.off("resize",this.render),ri(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(ne.cursor.show),this.output.off("resize",this.render),ri(this.input,!1),e(us)})})}_isActionKey(e,t){return e===" "}_shouldSubmit(e,t){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,t){this.userInput=e??"",this.emit("userInput",this.userInput),t&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,t){if(this._track&&t.name!=="return"&&(t.name&&this._isActionKey(e,t)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&te.aliases.has(t.name)&&this.emit("cursor",te.aliases.get(t.name)),te.actions.has(t.name)&&this.emit("cursor",t.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e?.toLowerCase(),t),t?.name==="return"&&this._shouldSubmit(e,t)){if(this.opts.validate){let r=this.opts.validate(this.value);r&&(this.error=r instanceof Error?r.message:r,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}ms([e,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
40
- `),ri(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=Re(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
41
- `).length-1;this.output.write(ne.cursor.move(-999,e*-1))}render(){let e=Re(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(ne.cursor.hide);else{let t=Gy(this._prevFrame,e),r=hs(this.output);if(this.restoreCursor(),t){let i=Math.max(0,t.numLinesAfter-r),n=Math.max(0,t.numLinesBefore-r),s=t.lines.find(o=>o>=i);if(s===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(ne.cursor.move(0,s-n)),this.output.write(ne.erase.lines(1));let o=e.split(`
42
- `);this.output.write(o[s]),this._prevFrame=e,this.output.write(ne.cursor.move(0,o.length-s-1));return}else if(t.lines.length>1){if(i<n)s=i;else{let a=s-n;a>0&&this.output.write(ne.cursor.move(0,a))}this.output.write(ne.erase.down());let o=e.split(`
39
+ `)}var pi=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,t=!0){let{input:r=oc,output:i=ls,render:n,signal:s,...o}=e;this.opts=o,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=n.bind(this),this._track=t,this._abortSignal=s,this.input=r,this.output=i}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let r=this._subscribers.get(e)??[];r.push(t),this._subscribers.set(e,r)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let r=this._subscribers.get(e)??[],i=[];for(let n of r)n.cb(...t),n.once&&i.push(()=>r.splice(r.indexOf(n),1));for(let n of i)n()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(us);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=By.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),ii(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(se.cursor.show),this.output.off("resize",this.render),ii(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(se.cursor.show),this.output.off("resize",this.render),ii(this.input,!1),e(us)})})}_isActionKey(e,t){return e===" "}_shouldSubmit(e,t){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,t){this.userInput=e??"",this.emit("userInput",this.userInput),t&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,t){if(this._track&&t.name!=="return"&&(t.name&&this._isActionKey(e,t)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&te.aliases.has(t.name)&&this.emit("cursor",te.aliases.get(t.name)),te.actions.has(t.name)&&this.emit("cursor",t.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e?.toLowerCase(),t),t?.name==="return"&&this._shouldSubmit(e,t)){if(this.opts.validate){let r=this.opts.validate(this.value);r&&(this.error=r instanceof Error?r.message:r,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}ms([e,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
40
+ `),ii(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=Re(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
41
+ `).length-1;this.output.write(se.cursor.move(-999,e*-1))}render(){let e=Re(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(se.cursor.hide);else{let t=Gy(this._prevFrame,e),r=hs(this.output);if(this.restoreCursor(),t){let i=Math.max(0,t.numLinesAfter-r),n=Math.max(0,t.numLinesBefore-r),s=t.lines.find(o=>o>=i);if(s===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(se.cursor.move(0,s-n)),this.output.write(se.erase.lines(1));let o=e.split(`
42
+ `);this.output.write(o[s]),this._prevFrame=e,this.output.write(se.cursor.move(0,o.length-s-1));return}else if(t.lines.length>1){if(i<n)s=i;else{let a=s-n;a>0&&this.output.write(se.cursor.move(0,a))}this.output.write(se.erase.down());let o=e.split(`
43
43
  `).slice(s);this.output.write(o.join(`
44
- `)),this._prevFrame=e;return}}this.output.write(ne.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};var ni=class extends ci{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(ne.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}};var si=class extends ci{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let t=this.userInput;if(this.cursor>=t.length)return`${this.masked}${ds(["inverse","hidden"],"_")}`;let r=this.masked,i=r.slice(0,this.cursor),n=r.slice(this.cursor);return`${i}${ds("inverse",n[0])}${n.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:t,...r}){super(r),this._mask=t??"\u2022",this.on("userInput",i=>{this._setValue(i)})}},oi=class extends ci{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(t){super(t,!1),this.options=t.options;let r=this.options.findIndex(({value:n})=>n===t.initialValue),i=r===-1?0:r;this.cursor=this.options[i].disabled?ii(i,1,this.options):i,this.changeValue(),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=ii(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=ii(this.cursor,1,this.options);break}this.changeValue()})}};var ai=class extends ci{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}\u2588`;let r=t.slice(0,this.cursor),[i,...n]=t.slice(this.cursor);return`${r}${ds("inverse",i)}${n.join("")}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}};import{styleText as y,stripVTControlCharacters as Kq}from"util";import we from"process";var cr=D(ps(),1);import{existsSync as Qq,lstatSync as e$,readdirSync as t$}from"fs";import{dirname as i$,join as n$}from"path";function Vy(){return we.platform!=="win32"?we.env.TERM!=="linux":!!we.env.CI||!!we.env.WT_SESSION||!!we.env.TERMINUS_SUBLIME||we.env.ConEmuTask==="{cmd::Cmder}"||we.env.TERM_PROGRAM==="Terminus-Sublime"||we.env.TERM_PROGRAM==="vscode"||we.env.TERM==="xterm-256color"||we.env.TERM==="alacritty"||we.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var ys=Vy(),Wy=()=>process.env.CI==="true";var F=(e,t)=>ys?e:t,Hy=F("\u25C6","*"),pc=F("\u25A0","x"),dc=F("\u25B2","x"),ui=F("\u25C7","o"),Ky=F("\u250C","T"),C=F("\u2502","|"),st=F("\u2514","\u2014"),s$=F("\u2510","T"),o$=F("\u2518","\u2014"),fs=F("\u25CF",">"),di=F("\u25CB"," "),a$=F("\u25FB","[\u2022]"),c$=F("\u25FC","[+]"),p$=F("\u25FB","[ ]"),Yy=F("\u25AA","\u2022"),cc=F("\u2500","-"),Jy=F("\u256E","+"),Xy=F("\u251C","+"),Zy=F("\u256F","+"),Qy=F("\u2570","+"),d$=F("\u256D","+"),ef=F("\u25CF","\u2022"),tf=F("\u25C6","*"),rf=F("\u25B2","!"),nf=F("\u25A0","x"),li=e=>{switch(e){case"initial":case"active":return y("cyan",Hy);case"cancel":return y("red",pc);case"error":return y("yellow",dc);case"submit":return y("green",ui)}},sf=e=>{switch(e){case"initial":case"active":return y("cyan",C);case"cancel":return y("red",C);case"error":return y("yellow",C);case"submit":return y("green",C)}},of=(e,t,r,i,n)=>{let s=t,o=0;for(let a=r;a<i;a++){let c=e[a];if(s=s-c.length,o++,s<=n)break}return{lineCount:s,removals:o}},af=({cursor:e,options:t,style:r,output:i=process.stdout,maxItems:n=Number.POSITIVE_INFINITY,columnPadding:s=0,rowPadding:o=4})=>{let a=or(i)-s,c=hs(i),d=y("dim","..."),p=Math.max(c-o,0),u=Math.max(Math.min(n,p),5),l=0;e>=u-3&&(l=Math.max(Math.min(e-u+3,t.length-u),0));let m=u<t.length&&l>0,h=u<t.length&&l+u<t.length,f=Math.min(l+u,t.length),x=[],w=0;m&&w++,h&&w++;let v=l+(m?1:0),g=f-(h?1:0);for(let S=v;S<g;S++){let U=Re(r(t[S],S===e),a,{hard:!0,trim:!1}).split(`
45
- `);x.push(U),w+=U.length}if(w>p){let S=0,U=0,j=w,M=e-v,G=(H,$)=>of(x,j,H,$,p);m?({lineCount:j,removals:S}=G(0,M),j>p&&({lineCount:j,removals:U}=G(M+1,x.length))):({lineCount:j,removals:U}=G(M+1,x.length),j>p&&({lineCount:j,removals:S}=G(0,M))),S>0&&(m=!0,x.splice(0,S)),U>0&&(h=!0,x.splice(x.length-U,U))}let R=[];m&&R.push(d);for(let S of x)for(let U of S)R.push(U);return h&&R.push(d),R};var Je=e=>{let t=e.active??"Yes",r=e.inactive??"No";return new ni({active:t,inactive:r,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let i=e.withGuide??te.withGuide,n=`${li(this.state)} `,s=i?`${y("gray",C)} `:"",o=ar(e.output,e.message,s,n),a=`${i?`${y("gray",C)}
44
+ `)),this._prevFrame=e;return}}this.output.write(se.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}};var si=class extends pi{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(se.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}};var oi=class extends pi{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let t=this.userInput;if(this.cursor>=t.length)return`${this.masked}${ds(["inverse","hidden"],"_")}`;let r=this.masked,i=r.slice(0,this.cursor),n=r.slice(this.cursor);return`${i}${ds("inverse",n[0])}${n.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:t,...r}){super(r),this._mask=t??"\u2022",this.on("userInput",i=>{this._setValue(i)})}},ai=class extends pi{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(t){super(t,!1),this.options=t.options;let r=this.options.findIndex(({value:n})=>n===t.initialValue),i=r===-1?0:r;this.cursor=this.options[i].disabled?ni(i,1,this.options):i,this.changeValue(),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=ni(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=ni(this.cursor,1,this.options);break}this.changeValue()})}};var ci=class extends pi{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}\u2588`;let r=t.slice(0,this.cursor),[i,...n]=t.slice(this.cursor);return`${r}${ds("inverse",i)}${n.join("")}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}};import{styleText as y,stripVTControlCharacters as Jq}from"util";import we from"process";var pr=D(ps(),1);import{existsSync as t$,lstatSync as r$,readdirSync as i$}from"fs";import{dirname as s$,join as o$}from"path";function Vy(){return we.platform!=="win32"?we.env.TERM!=="linux":!!we.env.CI||!!we.env.WT_SESSION||!!we.env.TERMINUS_SUBLIME||we.env.ConEmuTask==="{cmd::Cmder}"||we.env.TERM_PROGRAM==="Terminus-Sublime"||we.env.TERM_PROGRAM==="vscode"||we.env.TERM==="xterm-256color"||we.env.TERM==="alacritty"||we.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var ys=Vy(),Wy=()=>process.env.CI==="true";var F=(e,t)=>ys?e:t,Hy=F("\u25C6","*"),pc=F("\u25A0","x"),dc=F("\u25B2","x"),li=F("\u25C7","o"),Ky=F("\u250C","T"),C=F("\u2502","|"),st=F("\u2514","\u2014"),a$=F("\u2510","T"),c$=F("\u2518","\u2014"),fs=F("\u25CF",">"),ui=F("\u25CB"," "),p$=F("\u25FB","[\u2022]"),d$=F("\u25FC","[+]"),u$=F("\u25FB","[ ]"),Yy=F("\u25AA","\u2022"),cc=F("\u2500","-"),Jy=F("\u256E","+"),Xy=F("\u251C","+"),Zy=F("\u256F","+"),Qy=F("\u2570","+"),l$=F("\u256D","+"),ef=F("\u25CF","\u2022"),tf=F("\u25C6","*"),rf=F("\u25B2","!"),nf=F("\u25A0","x"),mi=e=>{switch(e){case"initial":case"active":return y("cyan",Hy);case"cancel":return y("red",pc);case"error":return y("yellow",dc);case"submit":return y("green",li)}},sf=e=>{switch(e){case"initial":case"active":return y("cyan",C);case"cancel":return y("red",C);case"error":return y("yellow",C);case"submit":return y("green",C)}},of=(e,t,r,i,n)=>{let s=t,o=0;for(let a=r;a<i;a++){let c=e[a];if(s=s-c.length,o++,s<=n)break}return{lineCount:s,removals:o}},af=({cursor:e,options:t,style:r,output:i=process.stdout,maxItems:n=Number.POSITIVE_INFINITY,columnPadding:s=0,rowPadding:o=4})=>{let a=ar(i)-s,c=hs(i),d=y("dim","..."),p=Math.max(c-o,0),u=Math.max(Math.min(n,p),5),l=0;e>=u-3&&(l=Math.max(Math.min(e-u+3,t.length-u),0));let m=u<t.length&&l>0,h=u<t.length&&l+u<t.length,f=Math.min(l+u,t.length),x=[],w=0;m&&w++,h&&w++;let v=l+(m?1:0),g=f-(h?1:0);for(let S=v;S<g;S++){let U=Re(r(t[S],S===e),a,{hard:!0,trim:!1}).split(`
45
+ `);x.push(U),w+=U.length}if(w>p){let S=0,U=0,j=w,M=e-v,G=(H,$)=>of(x,j,H,$,p);m?({lineCount:j,removals:S}=G(0,M),j>p&&({lineCount:j,removals:U}=G(M+1,x.length))):({lineCount:j,removals:U}=G(M+1,x.length),j>p&&({lineCount:j,removals:S}=G(0,M))),S>0&&(m=!0,x.splice(0,S)),U>0&&(h=!0,x.splice(x.length-U,U))}let R=[];m&&R.push(d);for(let S of x)for(let U of S)R.push(U);return h&&R.push(d),R};var Je=e=>{let t=e.active??"Yes",r=e.inactive??"No";return new si({active:t,inactive:r,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let i=e.withGuide??te.withGuide,n=`${mi(this.state)} `,s=i?`${y("gray",C)} `:"",o=cr(e.output,e.message,s,n),a=`${i?`${y("gray",C)}
46
46
  `:""}${o}
47
47
  `,c=this.value?t:r;switch(this.state){case"submit":{let d=i?`${y("gray",C)} `:"";return`${a}${d}${y("dim",c)}`}case"cancel":{let d=i?`${y("gray",C)} `:"";return`${a}${d}${y(["strikethrough","dim"],c)}${i?`
48
- ${y("gray",C)}`:""}`}default:{let d=i?`${y("cyan",C)} `:"",p=i?y("cyan",st):"";return`${a}${d}${this.value?`${y("green",fs)} ${t}`:`${y("dim",di)} ${y("dim",t)}`}${e.vertical?i?`
48
+ ${y("gray",C)}`:""}`}default:{let d=i?`${y("cyan",C)} `:"",p=i?y("cyan",st):"";return`${a}${d}${this.value?`${y("green",fs)} ${t}`:`${y("dim",ui)} ${y("dim",t)}`}${e.vertical?i?`
49
49
  ${y("cyan",C)} `:`
50
- `:` ${y("dim","/")} `}${this.value?`${y("dim",di)} ${y("dim",r)}`:`${y("green",fs)} ${r}`}
50
+ `:` ${y("dim","/")} `}${this.value?`${y("dim",ui)} ${y("dim",r)}`:`${y("green",fs)} ${r}`}
51
51
  ${p}
52
52
  `}}}}).prompt()};var b={message:(e=[],{symbol:t=y("gray",C),secondarySymbol:r=y("gray",C),output:i=process.stdout,spacing:n=1,withGuide:s}={})=>{let o=[],a=s??te.withGuide,c=a?r:"",d=a?`${t} `:"",p=a?`${r} `:"";for(let l=0;l<n;l++)o.push(c);let u=Array.isArray(e)?e:e.split(`
53
53
  `);if(u.length>0){let[l,...m]=u;l.length>0?o.push(`${d}${l}`):o.push(a?t:"");for(let h of m)h.length>0?o.push(`${p}${h}`):o.push(a?r:"")}i.write(`${o.join(`
54
54
  `)}
55
- `)},info:(e,t)=>{b.message(e,{...t,symbol:y("blue",ef)})},success:(e,t)=>{b.message(e,{...t,symbol:y("green",tf)})},step:(e,t)=>{b.message(e,{...t,symbol:y("green",ui)})},warn:(e,t)=>{b.message(e,{...t,symbol:y("yellow",rf)})},warning:(e,t)=>{b.warn(e,t)},error:(e,t)=>{b.message(e,{...t,symbol:y("red",nf)})}},O=(e="",t)=>{let r=t?.output??process.stdout,i=t?.withGuide??te.withGuide?`${y("gray",st)} `:"";r.write(`${i}${y("red",e)}
55
+ `)},info:(e,t)=>{b.message(e,{...t,symbol:y("blue",ef)})},success:(e,t)=>{b.message(e,{...t,symbol:y("green",tf)})},step:(e,t)=>{b.message(e,{...t,symbol:y("green",li)})},warn:(e,t)=>{b.message(e,{...t,symbol:y("yellow",rf)})},warning:(e,t)=>{b.warn(e,t)},error:(e,t)=>{b.message(e,{...t,symbol:y("red",nf)})}},O=(e="",t)=>{let r=t?.output??process.stdout,i=t?.withGuide??te.withGuide?`${y("gray",st)} `:"";r.write(`${i}${y("red",e)}
56
56
 
57
- `)},mi=(e="",t)=>{let r=t?.output??process.stdout,i=t?.withGuide??te.withGuide?`${y("gray",Ky)} `:"";r.write(`${i}${e}
57
+ `)},hi=(e="",t)=>{let r=t?.output??process.stdout,i=t?.withGuide??te.withGuide?`${y("gray",Ky)} `:"";r.write(`${i}${e}
58
58
  `)},Pt=(e="",t)=>{let r=t?.output??process.stdout,i=t?.withGuide??te.withGuide?`${y("gray",C)}
59
59
  ${y("gray",st)} `:"";r.write(`${i}${e}
60
60
 
61
61
  `)};var cf=e=>y("dim",e),pf=(e,t,r)=>{let i={hard:!0,trim:!1},n=Re(e,t,i).split(`
62
- `),s=n.reduce((c,d)=>Math.max(ae(d),c),0),o=n.map(r).reduce((c,d)=>Math.max(ae(d),c),0),a=t-(o-s);return Re(e,a,i)},W=(e="",t="",r)=>{let i=r?.output??we.stdout,n=r?.withGuide??te.withGuide,s=r?.format??cf,o=["",...pf(e,or(i)-6,s).split(`
63
- `).map(s),""],a=ae(t),c=Math.max(o.reduce((l,m)=>{let h=ae(m);return h>l?h:l},0),a)+2,d=o.map(l=>`${y("gray",C)} ${l}${" ".repeat(c-ae(l))}${y("gray",C)}`).join(`
62
+ `),s=n.reduce((c,d)=>Math.max(ce(d),c),0),o=n.map(r).reduce((c,d)=>Math.max(ce(d),c),0),a=t-(o-s);return Re(e,a,i)},W=(e="",t="",r)=>{let i=r?.output??we.stdout,n=r?.withGuide??te.withGuide,s=r?.format??cf,o=["",...pf(e,ar(i)-6,s).split(`
63
+ `).map(s),""],a=ce(t),c=Math.max(o.reduce((l,m)=>{let h=ce(m);return h>l?h:l},0),a)+2,d=o.map(l=>`${y("gray",C)} ${l}${" ".repeat(c-ce(l))}${y("gray",C)}`).join(`
64
64
  `),p=n?`${y("gray",C)}
65
- `:"",u=n?Xy:Qy;i.write(`${p}${y("green",ui)} ${y("reset",t)} ${y("gray",cc.repeat(Math.max(c-a-1,1))+Jy)}
65
+ `:"",u=n?Xy:Qy;i.write(`${p}${y("green",li)} ${y("reset",t)} ${y("gray",cc.repeat(Math.max(c-a-1,1))+Jy)}
66
66
  ${d}
67
67
  ${y("gray",u+cc.repeat(c+2)+Zy)}
68
- `)},hi=e=>new si({validate:e.validate,mask:e.mask??Yy,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??te.withGuide,r=`${t?`${y("gray",C)}
69
- `:""}${li(this.state)} ${e.message}
68
+ `)},yi=e=>new oi({validate:e.validate,mask:e.mask??Yy,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??te.withGuide,r=`${t?`${y("gray",C)}
69
+ `:""}${mi(this.state)} ${e.message}
70
70
  `,i=this.userInputWithCursor,n=this.masked;switch(this.state){case"error":{let s=t?`${y("yellow",C)} `:"",o=t?`${y("yellow",st)} `:"",a=n??"";return e.clearOnError&&this.clear(),`${r.trim()}
71
71
  ${s}${a}
72
72
  ${o}${y("yellow",this.error)}
73
73
  `}case"submit":{let s=t?`${y("gray",C)} `:"",o=n?y("dim",n):"";return`${r}${s}${o}`}case"cancel":{let s=t?`${y("gray",C)} `:"",o=n?y(["strikethrough","dim"],n):"";return`${r}${s}${o}${n&&t?`
74
74
  ${y("gray",C)}`:""}`}default:{let s=t?`${y("cyan",C)} `:"",o=t?y("cyan",st):"";return`${r}${s}${i}
75
75
  ${o}
76
- `}}}}).prompt();var df=e=>y("magenta",e),E=({indicator:e="dots",onCancel:t,output:r=process.stdout,cancelMessage:i,errorMessage:n,frames:s=ys?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:o=ys?80:120,signal:a,...c}={})=>{let d=Wy(),p,u,l=!1,m=!1,h="",f,x=performance.now(),w=or(r),v=c?.styleFrame??df,g=V=>{let pe=V>1?n??te.messages.error:i??te.messages.cancel;m=V===1,l&&(We(pe,V),m&&typeof t=="function"&&t())},R=()=>g(2),S=()=>g(1),U=()=>{process.on("uncaughtExceptionMonitor",R),process.on("unhandledRejection",R),process.on("SIGINT",S),process.on("SIGTERM",S),process.on("exit",g),a&&a.addEventListener("abort",S)},j=()=>{process.removeListener("uncaughtExceptionMonitor",R),process.removeListener("unhandledRejection",R),process.removeListener("SIGINT",S),process.removeListener("SIGTERM",S),process.removeListener("exit",g),a&&a.removeEventListener("abort",S)},M=()=>{if(f===void 0)return;d&&r.write(`
76
+ `}}}}).prompt();var df=e=>y("magenta",e),E=({indicator:e="dots",onCancel:t,output:r=process.stdout,cancelMessage:i,errorMessage:n,frames:s=ys?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:o=ys?80:120,signal:a,...c}={})=>{let d=Wy(),p,u,l=!1,m=!1,h="",f,x=performance.now(),w=ar(r),v=c?.styleFrame??df,g=V=>{let de=V>1?n??te.messages.error:i??te.messages.cancel;m=V===1,l&&(We(de,V),m&&typeof t=="function"&&t())},R=()=>g(2),S=()=>g(1),U=()=>{process.on("uncaughtExceptionMonitor",R),process.on("unhandledRejection",R),process.on("SIGINT",S),process.on("SIGTERM",S),process.on("exit",g),a&&a.addEventListener("abort",S)},j=()=>{process.removeListener("uncaughtExceptionMonitor",R),process.removeListener("unhandledRejection",R),process.removeListener("SIGINT",S),process.removeListener("SIGTERM",S),process.removeListener("exit",g),a&&a.removeEventListener("abort",S)},M=()=>{if(f===void 0)return;d&&r.write(`
77
77
  `);let V=Re(f,w,{hard:!0,trim:!1}).split(`
78
- `);V.length>1&&r.write(cr.cursor.up(V.length-1)),r.write(cr.cursor.to(0)),r.write(cr.erase.down())},G=V=>V.replace(/\.+$/,""),H=V=>{let pe=(performance.now()-V)/1e3,He=Math.floor(pe/60),Ke=Math.floor(pe%60);return He>0?`[${He}m ${Ke}s]`:`[${Ke}s]`},$=c.withGuide??te.withGuide,Ve=(V="")=>{l=!0,p=ac({output:r}),h=G(V),x=performance.now(),$&&r.write(`${y("gray",C)}
79
- `);let pe=0,He=0;U(),u=setInterval(()=>{if(d&&h===f)return;M(),f=h;let Ke=v(s[pe]),Yr;if(d)Yr=`${Ke} ${h}...`;else if(e==="timer")Yr=`${Ke} ${h} ${H(x)}`;else{let ey=".".repeat(Math.floor(He)).slice(0,3);Yr=`${Ke} ${h}${ey}`}let Qh=Re(Yr,w,{hard:!0,trim:!1});r.write(Qh),pe=pe+1<s.length?pe+1:0,He=He<4?He+.125:0},o)},We=(V="",pe=0,He=!1)=>{if(!l)return;l=!1,clearInterval(u),M();let Ke=pe===0?y("green",ui):pe===1?y("red",pc):y("red",dc);h=V??h,He||(e==="timer"?r.write(`${Ke} ${h} ${H(x)}
78
+ `);V.length>1&&r.write(pr.cursor.up(V.length-1)),r.write(pr.cursor.to(0)),r.write(pr.erase.down())},G=V=>V.replace(/\.+$/,""),H=V=>{let de=(performance.now()-V)/1e3,He=Math.floor(de/60),Ke=Math.floor(de%60);return He>0?`[${He}m ${Ke}s]`:`[${Ke}s]`},$=c.withGuide??te.withGuide,Ve=(V="")=>{l=!0,p=ac({output:r}),h=G(V),x=performance.now(),$&&r.write(`${y("gray",C)}
79
+ `);let de=0,He=0;U(),u=setInterval(()=>{if(d&&h===f)return;M(),f=h;let Ke=v(s[de]),Jr;if(d)Jr=`${Ke} ${h}...`;else if(e==="timer")Jr=`${Ke} ${h} ${H(x)}`;else{let ey=".".repeat(Math.floor(He)).slice(0,3);Jr=`${Ke} ${h}${ey}`}let Qh=Re(Jr,w,{hard:!0,trim:!1});r.write(Qh),de=de+1<s.length?de+1:0,He=He<4?He+.125:0},o)},We=(V="",de=0,He=!1)=>{if(!l)return;l=!1,clearInterval(u),M();let Ke=de===0?y("green",li):de===1?y("red",pc):y("red",dc);h=V??h,He||(e==="timer"?r.write(`${Ke} ${h} ${H(x)}
80
80
  `):r.write(`${Ke} ${h}
81
- `)),j(),p()};return{start:Ve,stop:(V="")=>We(V,0),message:(V="")=>{h=G(V??h)},cancel:(V="")=>We(V,1),error:(V="")=>We(V,2),clear:()=>We("",0,!0),get isCancelled(){return m}}},u$={light:F("\u2500","-"),heavy:F("\u2501","="),block:F("\u2588","#")};var pi=(e,t)=>e.includes(`
81
+ `)),j(),p()};return{start:Ve,stop:(V="")=>We(V,0),message:(V="")=>{h=G(V??h)},cancel:(V="")=>We(V,1),error:(V="")=>We(V,2),clear:()=>We("",0,!0),get isCancelled(){return m}}},m$={light:F("\u2500","-"),heavy:F("\u2501","="),block:F("\u2588","#")};var di=(e,t)=>e.includes(`
82
82
  `)?e.split(`
83
83
  `).map(r=>t(r)).join(`
84
- `):t(e),yi=e=>{let t=(r,i)=>{let n=r.label??String(r.value);switch(i){case"disabled":return`${y("gray",di)} ${pi(n,s=>y("gray",s))}${r.hint?` ${y("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${pi(n,s=>y("dim",s))}`;case"active":return`${y("green",fs)} ${n}${r.hint?` ${y("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${pi(n,s=>y(["strikethrough","dim"],s))}`;default:return`${y("dim",di)} ${pi(n,s=>y("dim",s))}`}};return new oi({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let r=e.withGuide??te.withGuide,i=`${li(this.state)} `,n=`${sf(this.state)} `,s=ar(e.output,e.message,n,i),o=`${r?`${y("gray",C)}
84
+ `):t(e),fi=e=>{let t=(r,i)=>{let n=r.label??String(r.value);switch(i){case"disabled":return`${y("gray",ui)} ${di(n,s=>y("gray",s))}${r.hint?` ${y("dim",`(${r.hint??"disabled"})`)}`:""}`;case"selected":return`${di(n,s=>y("dim",s))}`;case"active":return`${y("green",fs)} ${n}${r.hint?` ${y("dim",`(${r.hint})`)}`:""}`;case"cancelled":return`${di(n,s=>y(["strikethrough","dim"],s))}`;default:return`${y("dim",ui)} ${di(n,s=>y("dim",s))}`}};return new ai({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let r=e.withGuide??te.withGuide,i=`${mi(this.state)} `,n=`${sf(this.state)} `,s=cr(e.output,e.message,n,i),o=`${r?`${y("gray",C)}
85
85
  `:""}${s}
86
- `;switch(this.state){case"submit":{let a=r?`${y("gray",C)} `:"",c=ar(e.output,t(this.options[this.cursor],"selected"),a);return`${o}${c}`}case"cancel":{let a=r?`${y("gray",C)} `:"",c=ar(e.output,t(this.options[this.cursor],"cancelled"),a);return`${o}${c}${r?`
86
+ `;switch(this.state){case"submit":{let a=r?`${y("gray",C)} `:"",c=cr(e.output,t(this.options[this.cursor],"selected"),a);return`${o}${c}`}case"cancel":{let a=r?`${y("gray",C)} `:"",c=cr(e.output,t(this.options[this.cursor],"cancelled"),a);return`${o}${c}${r?`
87
87
  ${y("gray",C)}`:""}`}default:{let a=r?`${y("cyan",C)} `:"",c=r?y("cyan",st):"",d=o.split(`
88
88
  `).length,p=r?2:1;return`${o}${a}${af({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:a.length,rowPadding:d+p,style:(u,l)=>t(u,u.disabled?"disabled":l?"active":"inactive")}).join(`
89
89
  ${a}`)}
90
90
  ${c}
91
- `}}}}).prompt()};var l$=`${y("gray",C)} `;var de=e=>new ai({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??te.withGuide,r=`${`${t?`${y("gray",C)}
92
- `:""}${li(this.state)} `}${e.message}
91
+ `}}}}).prompt()};var h$=`${y("gray",C)} `;var ue=e=>new ci({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??te.withGuide,r=`${`${t?`${y("gray",C)}
92
+ `:""}${mi(this.state)} `}${e.message}
93
93
  `,i=e.placeholder?y("inverse",e.placeholder[0])+y("dim",e.placeholder.slice(1)):y(["inverse","hidden"],"_"),n=this.userInput?this.userInputWithCursor:i,s=this.value??"";switch(this.state){case"error":{let o=this.error?` ${y("yellow",this.error)}`:"",a=t?`${y("yellow",C)} `:"",c=t?y("yellow",st):"";return`${r.trim()}
94
94
  ${a}${n}
95
95
  ${c}${o}
96
96
  `}case"submit":{let o=s?` ${y("dim",s)}`:"",a=t?y("gray",C):"";return`${r}${a}${o}`}case"cancel":{let o=s?` ${y(["strikethrough","dim"],s)}`:"",a=t?y("gray",C):"";return`${r}${a}${o}${s.trim()?`
97
97
  ${a}`:""}`}default:{let o=t?`${y("cyan",C)} `:"",a=t?y("cyan",st):"";return`${r}${o}${n}
98
98
  ${a}
99
- `}}}}).prompt();function Y(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}import{fileURLToPath as uf}from"url";var Tt=(e,t)=>{let r=_s(lf(e));if(typeof r!="string")throw new TypeError(`${t} must be a string or a file URL: ${r}.`);return r},lf=e=>gs(e)?e.toString():e,gs=e=>typeof e!="string"&&e&&Object.getPrototypeOf(e)===String.prototype,_s=e=>e instanceof URL?uf(e):e;var fi=(e,t=[],r={})=>{let i=Tt(e,"First argument"),[n,s]=Y(t)?[[],t]:[t,r];if(!Array.isArray(n))throw new TypeError(`Second argument must be either an array of arguments or an options object: ${n}`);if(n.some(c=>typeof c=="object"&&c!==null))throw new TypeError(`Second argument must be an array of strings: ${n}`);let o=n.map(String),a=o.find(c=>c.includes("\0"));if(a!==void 0)throw new TypeError(`Arguments cannot contain null bytes ("\\0"): ${a}`);if(!Y(s))throw new TypeError(`Last argument must be an options object: ${s}`);return[i,o,s]};import{ChildProcess as bf}from"child_process";import{StringDecoder as mf}from"string_decoder";var{toString:uc}=Object.prototype,lc=e=>uc.call(e)==="[object ArrayBuffer]",Q=e=>uc.call(e)==="[object Uint8Array]",Xe=e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength),hf=new TextEncoder,mc=e=>hf.encode(e),yf=new TextDecoder,gi=e=>yf.decode(e),hc=(e,t)=>ff(e,t).join(""),ff=(e,t)=>{if(t==="utf8"&&e.every(s=>typeof s=="string"))return e;let r=new mf(t),i=e.map(s=>typeof s=="string"?mc(s):s).map(s=>r.write(s)),n=r.end();return n===""?i:[...i,n]},pr=e=>e.length===1&&Q(e[0])?e[0]:bs(gf(e)),gf=e=>e.map(t=>typeof t=="string"?mc(t):t),bs=e=>{let t=new Uint8Array(_f(e)),r=0;for(let i of e)t.set(i,r),r+=i.length;return t},_f=e=>{let t=0;for(let r of e)t+=r.length;return t};var _c=e=>Array.isArray(e)&&Array.isArray(e.raw),bc=(e,t)=>{let r=[];for(let[s,o]of e.entries())r=wf({templates:e,expressions:t,tokens:r,index:s,template:o});if(r.length===0)throw new TypeError("Template script must not be empty");let[i,...n]=r;return[i,n,{}]},wf=({templates:e,expressions:t,tokens:r,index:i,template:n})=>{if(n===void 0)throw new TypeError(`Invalid backslash sequence: ${e.raw[i]}`);let{nextTokens:s,leadingWhitespaces:o,trailingWhitespaces:a}=xf(n,e.raw[i]),c=fc(r,s,o);if(i===t.length)return c;let d=t[i],p=Array.isArray(d)?d.map(u=>gc(u)):[gc(d)];return fc(c,p,a)},xf=(e,t)=>{if(t.length===0)return{nextTokens:[],leadingWhitespaces:!1,trailingWhitespaces:!1};let r=[],i=0,n=yc.has(t[0]);for(let o=0,a=0;o<e.length;o+=1,a+=1){let c=t[a];if(yc.has(c))i!==o&&r.push(e.slice(i,o)),i=o+1;else if(c==="\\"){let d=t[a+1];d===`
99
+ `}}}}).prompt();function Y(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}import{fileURLToPath as uf}from"url";var Tt=(e,t)=>{let r=_s(lf(e));if(typeof r!="string")throw new TypeError(`${t} must be a string or a file URL: ${r}.`);return r},lf=e=>gs(e)?e.toString():e,gs=e=>typeof e!="string"&&e&&Object.getPrototypeOf(e)===String.prototype,_s=e=>e instanceof URL?uf(e):e;var gi=(e,t=[],r={})=>{let i=Tt(e,"First argument"),[n,s]=Y(t)?[[],t]:[t,r];if(!Array.isArray(n))throw new TypeError(`Second argument must be either an array of arguments or an options object: ${n}`);if(n.some(c=>typeof c=="object"&&c!==null))throw new TypeError(`Second argument must be an array of strings: ${n}`);let o=n.map(String),a=o.find(c=>c.includes("\0"));if(a!==void 0)throw new TypeError(`Arguments cannot contain null bytes ("\\0"): ${a}`);if(!Y(s))throw new TypeError(`Last argument must be an options object: ${s}`);return[i,o,s]};import{ChildProcess as bf}from"child_process";import{StringDecoder as mf}from"string_decoder";var{toString:uc}=Object.prototype,lc=e=>uc.call(e)==="[object ArrayBuffer]",Q=e=>uc.call(e)==="[object Uint8Array]",Xe=e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength),hf=new TextEncoder,mc=e=>hf.encode(e),yf=new TextDecoder,_i=e=>yf.decode(e),hc=(e,t)=>ff(e,t).join(""),ff=(e,t)=>{if(t==="utf8"&&e.every(s=>typeof s=="string"))return e;let r=new mf(t),i=e.map(s=>typeof s=="string"?mc(s):s).map(s=>r.write(s)),n=r.end();return n===""?i:[...i,n]},dr=e=>e.length===1&&Q(e[0])?e[0]:bs(gf(e)),gf=e=>e.map(t=>typeof t=="string"?mc(t):t),bs=e=>{let t=new Uint8Array(_f(e)),r=0;for(let i of e)t.set(i,r),r+=i.length;return t},_f=e=>{let t=0;for(let r of e)t+=r.length;return t};var _c=e=>Array.isArray(e)&&Array.isArray(e.raw),bc=(e,t)=>{let r=[];for(let[s,o]of e.entries())r=wf({templates:e,expressions:t,tokens:r,index:s,template:o});if(r.length===0)throw new TypeError("Template script must not be empty");let[i,...n]=r;return[i,n,{}]},wf=({templates:e,expressions:t,tokens:r,index:i,template:n})=>{if(n===void 0)throw new TypeError(`Invalid backslash sequence: ${e.raw[i]}`);let{nextTokens:s,leadingWhitespaces:o,trailingWhitespaces:a}=xf(n,e.raw[i]),c=fc(r,s,o);if(i===t.length)return c;let d=t[i],p=Array.isArray(d)?d.map(u=>gc(u)):[gc(d)];return fc(c,p,a)},xf=(e,t)=>{if(t.length===0)return{nextTokens:[],leadingWhitespaces:!1,trailingWhitespaces:!1};let r=[],i=0,n=yc.has(t[0]);for(let o=0,a=0;o<e.length;o+=1,a+=1){let c=t[a];if(yc.has(c))i!==o&&r.push(e.slice(i,o)),i=o+1;else if(c==="\\"){let d=t[a+1];d===`
100
100
  `?(o-=1,a+=1):d==="u"&&t[a+2]==="{"?a=t.indexOf("}",a+3):a+=kf[d]??1}}let s=i===e.length;return s||r.push(e.slice(i)),{nextTokens:r,leadingWhitespaces:n,trailingWhitespaces:s}},yc=new Set([" "," ","\r",`
101
- `]),kf={x:3,u:5},fc=(e,t,r)=>r||e.length===0||t.length===0?[...e,...t]:[...e.slice(0,-1),`${e.at(-1)}${t[0]}`,...t.slice(1)],gc=e=>{let t=typeof e;if(t==="string")return e;if(t==="number")return String(e);if(Y(e)&&("stdout"in e||"isMaxBuffer"in e))return vf(e);throw e instanceof bf||Object.prototype.toString.call(e)==="[object Promise]"?new TypeError("Unexpected subprocess in template expression. Please use ${await subprocess} instead of ${subprocess}."):new TypeError(`Unexpected "${t}" in template expression`)},vf=({stdout:e})=>{if(typeof e=="string")return e;if(Q(e))return gi(e);throw e===void 0?new TypeError(`Missing result.stdout in template expression. This is probably due to the previous subprocess' "stdout" option.`):new TypeError(`Unexpected "${typeof e}" stdout in template expression`)};import{spawnSync as Ax}from"child_process";import{debuglog as Sf}from"util";import ws from"process";var Se=e=>_i.includes(e),_i=[ws.stdin,ws.stdout,ws.stderr],xe=["stdin","stdout","stderr"],bi=e=>xe[e]??`stdio[${e}]`;var xc=e=>{let t={...e};for(let r of vs)t[r]=xs(e,r);return t},xs=(e,t)=>{let r=Array.from({length:qf(e)+1}),i=$f(e[t],r,t);return Tf(i,t)},qf=({stdio:e})=>Array.isArray(e)?Math.max(e.length,xe.length):xe.length,$f=(e,t,r)=>Y(e)?Af(e,t,r):t.fill(e),Af=(e,t,r)=>{for(let i of Object.keys(e).sort(Cf))for(let n of Ef(i,r,t))t[n]=e[i];return t},Cf=(e,t)=>wc(e)<wc(t)?1:-1,wc=e=>e==="stdout"||e==="stderr"?0:e==="all"?2:1,Ef=(e,t,r)=>{if(e==="ipc")return[r.length-1];let i=ks(e);if(i===void 0||i===0)throw new TypeError(`"${t}.${e}" is invalid.
101
+ `]),kf={x:3,u:5},fc=(e,t,r)=>r||e.length===0||t.length===0?[...e,...t]:[...e.slice(0,-1),`${e.at(-1)}${t[0]}`,...t.slice(1)],gc=e=>{let t=typeof e;if(t==="string")return e;if(t==="number")return String(e);if(Y(e)&&("stdout"in e||"isMaxBuffer"in e))return vf(e);throw e instanceof bf||Object.prototype.toString.call(e)==="[object Promise]"?new TypeError("Unexpected subprocess in template expression. Please use ${await subprocess} instead of ${subprocess}."):new TypeError(`Unexpected "${t}" in template expression`)},vf=({stdout:e})=>{if(typeof e=="string")return e;if(Q(e))return _i(e);throw e===void 0?new TypeError(`Missing result.stdout in template expression. This is probably due to the previous subprocess' "stdout" option.`):new TypeError(`Unexpected "${typeof e}" stdout in template expression`)};import{spawnSync as Ax}from"child_process";import{debuglog as Sf}from"util";import ws from"process";var Se=e=>bi.includes(e),bi=[ws.stdin,ws.stdout,ws.stderr],xe=["stdin","stdout","stderr"],wi=e=>xe[e]??`stdio[${e}]`;var xc=e=>{let t={...e};for(let r of vs)t[r]=xs(e,r);return t},xs=(e,t)=>{let r=Array.from({length:qf(e)+1}),i=$f(e[t],r,t);return Tf(i,t)},qf=({stdio:e})=>Array.isArray(e)?Math.max(e.length,xe.length):xe.length,$f=(e,t,r)=>Y(e)?Af(e,t,r):t.fill(e),Af=(e,t,r)=>{for(let i of Object.keys(e).sort(Cf))for(let n of Ef(i,r,t))t[n]=e[i];return t},Cf=(e,t)=>wc(e)<wc(t)?1:-1,wc=e=>e==="stdout"||e==="stderr"?0:e==="all"?2:1,Ef=(e,t,r)=>{if(e==="ipc")return[r.length-1];let i=ks(e);if(i===void 0||i===0)throw new TypeError(`"${t}.${e}" is invalid.
102
102
  It must be "${t}.stdout", "${t}.stderr", "${t}.all", "${t}.ipc", or "${t}.fd3", "${t}.fd4" (and so on).`);if(i>=r.length)throw new TypeError(`"${t}.${e}" is invalid: that file descriptor does not exist.
103
- Please set the "stdio" option to ensure that file descriptor exists.`);return i==="all"?[1,2]:[i]},ks=e=>{if(e==="all")return e;if(xe.includes(e))return xe.indexOf(e);let t=Pf.exec(e);if(t!==null)return Number(t[1])},Pf=/^fd(\d+)$/,Tf=(e,t)=>e.map(r=>r===void 0?If[t]:r),Rf=Sf("execa").enabled?"full":"none",If={lines:!1,buffer:!0,maxBuffer:1e3*1e3*100,verbose:Rf,stripFinalNewline:!0},vs=["lines","buffer","maxBuffer","verbose","stripFinalNewline"],Ze=(e,t)=>t==="ipc"?e.at(-1):e[t];var Rt=({verbose:e},t)=>Ss(e,t)!=="none",It=({verbose:e},t)=>!["none","short"].includes(Ss(e,t)),kc=({verbose:e},t)=>{let r=Ss(e,t);return wi(r)?r:void 0},Ss=(e,t)=>t===void 0?Of(e):Ze(e,t),Of=e=>e.find(t=>wi(t))??xi.findLast(t=>e.includes(t)),wi=e=>typeof e=="function",xi=["none","short","full"];import{inspect as rg}from"util";import{platform as jf}from"process";import{stripVTControlCharacters as Df}from"util";var vc=(e,t)=>{let r=[e,...t],i=r.join(" "),n=r.map(s=>Nf(Sc(s))).join(" ");return{command:i,escapedCommand:n}},dr=e=>Df(e).split(`
103
+ Please set the "stdio" option to ensure that file descriptor exists.`);return i==="all"?[1,2]:[i]},ks=e=>{if(e==="all")return e;if(xe.includes(e))return xe.indexOf(e);let t=Pf.exec(e);if(t!==null)return Number(t[1])},Pf=/^fd(\d+)$/,Tf=(e,t)=>e.map(r=>r===void 0?If[t]:r),Rf=Sf("execa").enabled?"full":"none",If={lines:!1,buffer:!0,maxBuffer:1e3*1e3*100,verbose:Rf,stripFinalNewline:!0},vs=["lines","buffer","maxBuffer","verbose","stripFinalNewline"],Ze=(e,t)=>t==="ipc"?e.at(-1):e[t];var Rt=({verbose:e},t)=>Ss(e,t)!=="none",It=({verbose:e},t)=>!["none","short"].includes(Ss(e,t)),kc=({verbose:e},t)=>{let r=Ss(e,t);return xi(r)?r:void 0},Ss=(e,t)=>t===void 0?Of(e):Ze(e,t),Of=e=>e.find(t=>xi(t))??ki.findLast(t=>e.includes(t)),xi=e=>typeof e=="function",ki=["none","short","full"];import{inspect as rg}from"util";import{platform as jf}from"process";import{stripVTControlCharacters as Df}from"util";var vc=(e,t)=>{let r=[e,...t],i=r.join(" "),n=r.map(s=>Nf(Sc(s))).join(" ");return{command:i,escapedCommand:n}},ur=e=>Df(e).split(`
104
104
  `).map(t=>Sc(t)).join(`
105
- `),Sc=e=>e.replaceAll(Ff,t=>Lf(t)),Lf=e=>{let t=Bf[e];if(t!==void 0)return t;let r=e.codePointAt(0),i=r.toString(16);return r<=Uf?`\\u${i.padStart(4,"0")}`:`\\U${i}`},Mf=()=>{try{return new RegExp("\\p{Separator}|\\p{Other}","gu")}catch{return/[\s\u0000-\u001F\u007F-\u009F\u00AD]/g}},Ff=Mf(),Bf={" ":" ","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},Uf=65535,Nf=e=>Gf.test(e)?e:jf==="win32"?`"${e.replaceAll('"','""')}"`:`'${e.replaceAll("'","'\\''")}'`,Gf=/^[\w./-]+$/;import qc from"process";function qs(){let{env:e}=qc,{TERM:t,TERM_PROGRAM:r}=e;return qc.platform!=="win32"?t!=="linux":!!e.WT_SESSION||!!e.TERMINUS_SUBLIME||e.ConEmuTask==="{cmd::Cmder}"||r==="Terminus-Sublime"||r==="vscode"||t==="xterm-256color"||t==="alacritty"||t==="rxvt-unicode"||t==="rxvt-unicode-256color"||e.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var $c={circleQuestionMark:"(?)",questionMarkPrefix:"(?)",square:"\u2588",squareDarkShade:"\u2593",squareMediumShade:"\u2592",squareLightShade:"\u2591",squareTop:"\u2580",squareBottom:"\u2584",squareLeft:"\u258C",squareRight:"\u2590",squareCenter:"\u25A0",bullet:"\u25CF",dot:"\u2024",ellipsis:"\u2026",pointerSmall:"\u203A",triangleUp:"\u25B2",triangleUpSmall:"\u25B4",triangleDown:"\u25BC",triangleDownSmall:"\u25BE",triangleLeftSmall:"\u25C2",triangleRightSmall:"\u25B8",home:"\u2302",heart:"\u2665",musicNote:"\u266A",musicNoteBeamed:"\u266B",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",arrowLeftRight:"\u2194",arrowUpDown:"\u2195",almostEqual:"\u2248",notEqual:"\u2260",lessOrEqual:"\u2264",greaterOrEqual:"\u2265",identical:"\u2261",infinity:"\u221E",subscriptZero:"\u2080",subscriptOne:"\u2081",subscriptTwo:"\u2082",subscriptThree:"\u2083",subscriptFour:"\u2084",subscriptFive:"\u2085",subscriptSix:"\u2086",subscriptSeven:"\u2087",subscriptEight:"\u2088",subscriptNine:"\u2089",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneEighth:"\u215B",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E",line:"\u2500",lineBold:"\u2501",lineDouble:"\u2550",lineDashed0:"\u2504",lineDashed1:"\u2505",lineDashed2:"\u2508",lineDashed3:"\u2509",lineDashed4:"\u254C",lineDashed5:"\u254D",lineDashed6:"\u2574",lineDashed7:"\u2576",lineDashed8:"\u2578",lineDashed9:"\u257A",lineDashed10:"\u257C",lineDashed11:"\u257E",lineDashed12:"\u2212",lineDashed13:"\u2013",lineDashed14:"\u2010",lineDashed15:"\u2043",lineVertical:"\u2502",lineVerticalBold:"\u2503",lineVerticalDouble:"\u2551",lineVerticalDashed0:"\u2506",lineVerticalDashed1:"\u2507",lineVerticalDashed2:"\u250A",lineVerticalDashed3:"\u250B",lineVerticalDashed4:"\u254E",lineVerticalDashed5:"\u254F",lineVerticalDashed6:"\u2575",lineVerticalDashed7:"\u2577",lineVerticalDashed8:"\u2579",lineVerticalDashed9:"\u257B",lineVerticalDashed10:"\u257D",lineVerticalDashed11:"\u257F",lineDownLeft:"\u2510",lineDownLeftArc:"\u256E",lineDownBoldLeftBold:"\u2513",lineDownBoldLeft:"\u2512",lineDownLeftBold:"\u2511",lineDownDoubleLeftDouble:"\u2557",lineDownDoubleLeft:"\u2556",lineDownLeftDouble:"\u2555",lineDownRight:"\u250C",lineDownRightArc:"\u256D",lineDownBoldRightBold:"\u250F",lineDownBoldRight:"\u250E",lineDownRightBold:"\u250D",lineDownDoubleRightDouble:"\u2554",lineDownDoubleRight:"\u2553",lineDownRightDouble:"\u2552",lineUpLeft:"\u2518",lineUpLeftArc:"\u256F",lineUpBoldLeftBold:"\u251B",lineUpBoldLeft:"\u251A",lineUpLeftBold:"\u2519",lineUpDoubleLeftDouble:"\u255D",lineUpDoubleLeft:"\u255C",lineUpLeftDouble:"\u255B",lineUpRight:"\u2514",lineUpRightArc:"\u2570",lineUpBoldRightBold:"\u2517",lineUpBoldRight:"\u2516",lineUpRightBold:"\u2515",lineUpDoubleRightDouble:"\u255A",lineUpDoubleRight:"\u2559",lineUpRightDouble:"\u2558",lineUpDownLeft:"\u2524",lineUpBoldDownBoldLeftBold:"\u252B",lineUpBoldDownBoldLeft:"\u2528",lineUpDownLeftBold:"\u2525",lineUpBoldDownLeftBold:"\u2529",lineUpDownBoldLeftBold:"\u252A",lineUpDownBoldLeft:"\u2527",lineUpBoldDownLeft:"\u2526",lineUpDoubleDownDoubleLeftDouble:"\u2563",lineUpDoubleDownDoubleLeft:"\u2562",lineUpDownLeftDouble:"\u2561",lineUpDownRight:"\u251C",lineUpBoldDownBoldRightBold:"\u2523",lineUpBoldDownBoldRight:"\u2520",lineUpDownRightBold:"\u251D",lineUpBoldDownRightBold:"\u2521",lineUpDownBoldRightBold:"\u2522",lineUpDownBoldRight:"\u251F",lineUpBoldDownRight:"\u251E",lineUpDoubleDownDoubleRightDouble:"\u2560",lineUpDoubleDownDoubleRight:"\u255F",lineUpDownRightDouble:"\u255E",lineDownLeftRight:"\u252C",lineDownBoldLeftBoldRightBold:"\u2533",lineDownLeftBoldRightBold:"\u252F",lineDownBoldLeftRight:"\u2530",lineDownBoldLeftBoldRight:"\u2531",lineDownBoldLeftRightBold:"\u2532",lineDownLeftRightBold:"\u252E",lineDownLeftBoldRight:"\u252D",lineDownDoubleLeftDoubleRightDouble:"\u2566",lineDownDoubleLeftRight:"\u2565",lineDownLeftDoubleRightDouble:"\u2564",lineUpLeftRight:"\u2534",lineUpBoldLeftBoldRightBold:"\u253B",lineUpLeftBoldRightBold:"\u2537",lineUpBoldLeftRight:"\u2538",lineUpBoldLeftBoldRight:"\u2539",lineUpBoldLeftRightBold:"\u253A",lineUpLeftRightBold:"\u2536",lineUpLeftBoldRight:"\u2535",lineUpDoubleLeftDoubleRightDouble:"\u2569",lineUpDoubleLeftRight:"\u2568",lineUpLeftDoubleRightDouble:"\u2567",lineUpDownLeftRight:"\u253C",lineUpBoldDownBoldLeftBoldRightBold:"\u254B",lineUpDownBoldLeftBoldRightBold:"\u2548",lineUpBoldDownLeftBoldRightBold:"\u2547",lineUpBoldDownBoldLeftRightBold:"\u254A",lineUpBoldDownBoldLeftBoldRight:"\u2549",lineUpBoldDownLeftRight:"\u2540",lineUpDownBoldLeftRight:"\u2541",lineUpDownLeftBoldRight:"\u253D",lineUpDownLeftRightBold:"\u253E",lineUpBoldDownBoldLeftRight:"\u2542",lineUpDownLeftBoldRightBold:"\u253F",lineUpBoldDownLeftBoldRight:"\u2543",lineUpBoldDownLeftRightBold:"\u2544",lineUpDownBoldLeftBoldRight:"\u2545",lineUpDownBoldLeftRightBold:"\u2546",lineUpDoubleDownDoubleLeftDoubleRightDouble:"\u256C",lineUpDoubleDownDoubleLeftRight:"\u256B",lineUpDownLeftDoubleRightDouble:"\u256A",lineCross:"\u2573",lineBackslash:"\u2572",lineSlash:"\u2571"},Ac={tick:"\u2714",info:"\u2139",warning:"\u26A0",cross:"\u2718",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",pointer:"\u276F",triangleUpOutline:"\u25B3",triangleLeft:"\u25C0",triangleRight:"\u25B6",lozenge:"\u25C6",lozengeOutline:"\u25C7",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",star:"\u2605",play:"\u25B6",nodejs:"\u2B22",oneSeventh:"\u2150",oneNinth:"\u2151",oneTenth:"\u2152"},zf={tick:"\u221A",info:"i",warning:"\u203C",cross:"\xD7",squareSmall:"\u25A1",squareSmallFilled:"\u25A0",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",pointer:">",triangleUpOutline:"\u2206",triangleLeft:"\u25C4",triangleRight:"\u25BA",lozenge:"\u2666",lozengeOutline:"\u25CA",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",star:"\u2736",play:"\u25BA",nodejs:"\u2666",oneSeventh:"1/7",oneNinth:"1/9",oneTenth:"1/10"},Vf={...$c,...Ac},Wf={...$c,...zf},Hf=qs(),Kf=Hf?Vf:Wf,ki=Kf,B$=Object.entries(Ac);import Yf from"tty";var Jf=Yf?.WriteStream?.prototype?.hasColors?.()??!1,q=(e,t)=>{if(!Jf)return n=>n;let r=`\x1B[${e}m`,i=`\x1B[${t}m`;return n=>{let s=n+"",o=s.indexOf(i);if(o===-1)return r+s+i;let a=r,c=0,p=(t===22?i:"")+r;for(;o!==-1;)a+=s.slice(c,o)+p,c=o+i.length,o=s.indexOf(i,c);return a+=s.slice(c)+i,a}},G$=q(0,0),Cc=q(1,22),z$=q(2,22),V$=q(3,23),W$=q(4,24),H$=q(53,55),K$=q(7,27),Y$=q(8,28),J$=q(9,29),X$=q(30,39),Z$=q(31,39),Q$=q(32,39),eA=q(33,39),tA=q(34,39),rA=q(35,39),iA=q(36,39),nA=q(37,39),vi=q(90,39),sA=q(40,49),oA=q(41,49),aA=q(42,49),cA=q(43,49),pA=q(44,49),dA=q(45,49),uA=q(46,49),lA=q(47,49),mA=q(100,49),Ec=q(91,39),hA=q(92,39),Pc=q(93,39),yA=q(94,39),fA=q(95,39),gA=q(96,39),_A=q(97,39),bA=q(101,49),wA=q(102,49),xA=q(103,49),kA=q(104,49),vA=q(105,49),SA=q(106,49),qA=q(107,49);var Ic=({type:e,message:t,timestamp:r,piped:i,commandId:n,result:{failed:s=!1}={},options:{reject:o=!0}})=>{let a=Xf(r),c=Zf[e]({failed:s,reject:o,piped:i}),d=Qf[e]({reject:o});return`${vi(`[${a}]`)} ${vi(`[${n}]`)} ${d(c)} ${d(t)}`},Xf=e=>`${Si(e.getHours(),2)}:${Si(e.getMinutes(),2)}:${Si(e.getSeconds(),2)}.${Si(e.getMilliseconds(),3)}`,Si=(e,t)=>String(e).padStart(t,"0"),Tc=({failed:e,reject:t})=>e?t?ki.cross:ki.warning:ki.tick,Zf={command:({piped:e})=>e?"|":"$",output:()=>" ",ipc:()=>"*",error:Tc,duration:Tc},Rc=e=>e,Qf={command:()=>Cc,output:()=>Rc,ipc:()=>Rc,error:({reject:e})=>e?Ec:Pc,duration:()=>vi};var Oc=(e,t,r)=>{let i=kc(t,r);return e.map(({verboseLine:n,verboseObject:s})=>eg(n,s,i)).filter(n=>n!==void 0).map(n=>tg(n)).join("")},eg=(e,t,r)=>{if(r===void 0)return e;let i=r(e,t);if(typeof i=="string")return i},tg=e=>e.endsWith(`
105
+ `),Sc=e=>e.replaceAll(Ff,t=>Lf(t)),Lf=e=>{let t=Bf[e];if(t!==void 0)return t;let r=e.codePointAt(0),i=r.toString(16);return r<=Uf?`\\u${i.padStart(4,"0")}`:`\\U${i}`},Mf=()=>{try{return new RegExp("\\p{Separator}|\\p{Other}","gu")}catch{return/[\s\u0000-\u001F\u007F-\u009F\u00AD]/g}},Ff=Mf(),Bf={" ":" ","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},Uf=65535,Nf=e=>Gf.test(e)?e:jf==="win32"?`"${e.replaceAll('"','""')}"`:`'${e.replaceAll("'","'\\''")}'`,Gf=/^[\w./-]+$/;import qc from"process";function qs(){let{env:e}=qc,{TERM:t,TERM_PROGRAM:r}=e;return qc.platform!=="win32"?t!=="linux":!!e.WT_SESSION||!!e.TERMINUS_SUBLIME||e.ConEmuTask==="{cmd::Cmder}"||r==="Terminus-Sublime"||r==="vscode"||t==="xterm-256color"||t==="alacritty"||t==="rxvt-unicode"||t==="rxvt-unicode-256color"||e.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var $c={circleQuestionMark:"(?)",questionMarkPrefix:"(?)",square:"\u2588",squareDarkShade:"\u2593",squareMediumShade:"\u2592",squareLightShade:"\u2591",squareTop:"\u2580",squareBottom:"\u2584",squareLeft:"\u258C",squareRight:"\u2590",squareCenter:"\u25A0",bullet:"\u25CF",dot:"\u2024",ellipsis:"\u2026",pointerSmall:"\u203A",triangleUp:"\u25B2",triangleUpSmall:"\u25B4",triangleDown:"\u25BC",triangleDownSmall:"\u25BE",triangleLeftSmall:"\u25C2",triangleRightSmall:"\u25B8",home:"\u2302",heart:"\u2665",musicNote:"\u266A",musicNoteBeamed:"\u266B",arrowUp:"\u2191",arrowDown:"\u2193",arrowLeft:"\u2190",arrowRight:"\u2192",arrowLeftRight:"\u2194",arrowUpDown:"\u2195",almostEqual:"\u2248",notEqual:"\u2260",lessOrEqual:"\u2264",greaterOrEqual:"\u2265",identical:"\u2261",infinity:"\u221E",subscriptZero:"\u2080",subscriptOne:"\u2081",subscriptTwo:"\u2082",subscriptThree:"\u2083",subscriptFour:"\u2084",subscriptFive:"\u2085",subscriptSix:"\u2086",subscriptSeven:"\u2087",subscriptEight:"\u2088",subscriptNine:"\u2089",oneHalf:"\xBD",oneThird:"\u2153",oneQuarter:"\xBC",oneFifth:"\u2155",oneSixth:"\u2159",oneEighth:"\u215B",twoThirds:"\u2154",twoFifths:"\u2156",threeQuarters:"\xBE",threeFifths:"\u2157",threeEighths:"\u215C",fourFifths:"\u2158",fiveSixths:"\u215A",fiveEighths:"\u215D",sevenEighths:"\u215E",line:"\u2500",lineBold:"\u2501",lineDouble:"\u2550",lineDashed0:"\u2504",lineDashed1:"\u2505",lineDashed2:"\u2508",lineDashed3:"\u2509",lineDashed4:"\u254C",lineDashed5:"\u254D",lineDashed6:"\u2574",lineDashed7:"\u2576",lineDashed8:"\u2578",lineDashed9:"\u257A",lineDashed10:"\u257C",lineDashed11:"\u257E",lineDashed12:"\u2212",lineDashed13:"\u2013",lineDashed14:"\u2010",lineDashed15:"\u2043",lineVertical:"\u2502",lineVerticalBold:"\u2503",lineVerticalDouble:"\u2551",lineVerticalDashed0:"\u2506",lineVerticalDashed1:"\u2507",lineVerticalDashed2:"\u250A",lineVerticalDashed3:"\u250B",lineVerticalDashed4:"\u254E",lineVerticalDashed5:"\u254F",lineVerticalDashed6:"\u2575",lineVerticalDashed7:"\u2577",lineVerticalDashed8:"\u2579",lineVerticalDashed9:"\u257B",lineVerticalDashed10:"\u257D",lineVerticalDashed11:"\u257F",lineDownLeft:"\u2510",lineDownLeftArc:"\u256E",lineDownBoldLeftBold:"\u2513",lineDownBoldLeft:"\u2512",lineDownLeftBold:"\u2511",lineDownDoubleLeftDouble:"\u2557",lineDownDoubleLeft:"\u2556",lineDownLeftDouble:"\u2555",lineDownRight:"\u250C",lineDownRightArc:"\u256D",lineDownBoldRightBold:"\u250F",lineDownBoldRight:"\u250E",lineDownRightBold:"\u250D",lineDownDoubleRightDouble:"\u2554",lineDownDoubleRight:"\u2553",lineDownRightDouble:"\u2552",lineUpLeft:"\u2518",lineUpLeftArc:"\u256F",lineUpBoldLeftBold:"\u251B",lineUpBoldLeft:"\u251A",lineUpLeftBold:"\u2519",lineUpDoubleLeftDouble:"\u255D",lineUpDoubleLeft:"\u255C",lineUpLeftDouble:"\u255B",lineUpRight:"\u2514",lineUpRightArc:"\u2570",lineUpBoldRightBold:"\u2517",lineUpBoldRight:"\u2516",lineUpRightBold:"\u2515",lineUpDoubleRightDouble:"\u255A",lineUpDoubleRight:"\u2559",lineUpRightDouble:"\u2558",lineUpDownLeft:"\u2524",lineUpBoldDownBoldLeftBold:"\u252B",lineUpBoldDownBoldLeft:"\u2528",lineUpDownLeftBold:"\u2525",lineUpBoldDownLeftBold:"\u2529",lineUpDownBoldLeftBold:"\u252A",lineUpDownBoldLeft:"\u2527",lineUpBoldDownLeft:"\u2526",lineUpDoubleDownDoubleLeftDouble:"\u2563",lineUpDoubleDownDoubleLeft:"\u2562",lineUpDownLeftDouble:"\u2561",lineUpDownRight:"\u251C",lineUpBoldDownBoldRightBold:"\u2523",lineUpBoldDownBoldRight:"\u2520",lineUpDownRightBold:"\u251D",lineUpBoldDownRightBold:"\u2521",lineUpDownBoldRightBold:"\u2522",lineUpDownBoldRight:"\u251F",lineUpBoldDownRight:"\u251E",lineUpDoubleDownDoubleRightDouble:"\u2560",lineUpDoubleDownDoubleRight:"\u255F",lineUpDownRightDouble:"\u255E",lineDownLeftRight:"\u252C",lineDownBoldLeftBoldRightBold:"\u2533",lineDownLeftBoldRightBold:"\u252F",lineDownBoldLeftRight:"\u2530",lineDownBoldLeftBoldRight:"\u2531",lineDownBoldLeftRightBold:"\u2532",lineDownLeftRightBold:"\u252E",lineDownLeftBoldRight:"\u252D",lineDownDoubleLeftDoubleRightDouble:"\u2566",lineDownDoubleLeftRight:"\u2565",lineDownLeftDoubleRightDouble:"\u2564",lineUpLeftRight:"\u2534",lineUpBoldLeftBoldRightBold:"\u253B",lineUpLeftBoldRightBold:"\u2537",lineUpBoldLeftRight:"\u2538",lineUpBoldLeftBoldRight:"\u2539",lineUpBoldLeftRightBold:"\u253A",lineUpLeftRightBold:"\u2536",lineUpLeftBoldRight:"\u2535",lineUpDoubleLeftDoubleRightDouble:"\u2569",lineUpDoubleLeftRight:"\u2568",lineUpLeftDoubleRightDouble:"\u2567",lineUpDownLeftRight:"\u253C",lineUpBoldDownBoldLeftBoldRightBold:"\u254B",lineUpDownBoldLeftBoldRightBold:"\u2548",lineUpBoldDownLeftBoldRightBold:"\u2547",lineUpBoldDownBoldLeftRightBold:"\u254A",lineUpBoldDownBoldLeftBoldRight:"\u2549",lineUpBoldDownLeftRight:"\u2540",lineUpDownBoldLeftRight:"\u2541",lineUpDownLeftBoldRight:"\u253D",lineUpDownLeftRightBold:"\u253E",lineUpBoldDownBoldLeftRight:"\u2542",lineUpDownLeftBoldRightBold:"\u253F",lineUpBoldDownLeftBoldRight:"\u2543",lineUpBoldDownLeftRightBold:"\u2544",lineUpDownBoldLeftBoldRight:"\u2545",lineUpDownBoldLeftRightBold:"\u2546",lineUpDoubleDownDoubleLeftDoubleRightDouble:"\u256C",lineUpDoubleDownDoubleLeftRight:"\u256B",lineUpDownLeftDoubleRightDouble:"\u256A",lineCross:"\u2573",lineBackslash:"\u2572",lineSlash:"\u2571"},Ac={tick:"\u2714",info:"\u2139",warning:"\u26A0",cross:"\u2718",squareSmall:"\u25FB",squareSmallFilled:"\u25FC",circle:"\u25EF",circleFilled:"\u25C9",circleDotted:"\u25CC",circleDouble:"\u25CE",circleCircle:"\u24DE",circleCross:"\u24E7",circlePipe:"\u24BE",radioOn:"\u25C9",radioOff:"\u25EF",checkboxOn:"\u2612",checkboxOff:"\u2610",checkboxCircleOn:"\u24E7",checkboxCircleOff:"\u24BE",pointer:"\u276F",triangleUpOutline:"\u25B3",triangleLeft:"\u25C0",triangleRight:"\u25B6",lozenge:"\u25C6",lozengeOutline:"\u25C7",hamburger:"\u2630",smiley:"\u32E1",mustache:"\u0DF4",star:"\u2605",play:"\u25B6",nodejs:"\u2B22",oneSeventh:"\u2150",oneNinth:"\u2151",oneTenth:"\u2152"},zf={tick:"\u221A",info:"i",warning:"\u203C",cross:"\xD7",squareSmall:"\u25A1",squareSmallFilled:"\u25A0",circle:"( )",circleFilled:"(*)",circleDotted:"( )",circleDouble:"( )",circleCircle:"(\u25CB)",circleCross:"(\xD7)",circlePipe:"(\u2502)",radioOn:"(*)",radioOff:"( )",checkboxOn:"[\xD7]",checkboxOff:"[ ]",checkboxCircleOn:"(\xD7)",checkboxCircleOff:"( )",pointer:">",triangleUpOutline:"\u2206",triangleLeft:"\u25C4",triangleRight:"\u25BA",lozenge:"\u2666",lozengeOutline:"\u25CA",hamburger:"\u2261",smiley:"\u263A",mustache:"\u250C\u2500\u2510",star:"\u2736",play:"\u25BA",nodejs:"\u2666",oneSeventh:"1/7",oneNinth:"1/9",oneTenth:"1/10"},Vf={...$c,...Ac},Wf={...$c,...zf},Hf=qs(),Kf=Hf?Vf:Wf,vi=Kf,N$=Object.entries(Ac);import Yf from"tty";var Jf=Yf?.WriteStream?.prototype?.hasColors?.()??!1,q=(e,t)=>{if(!Jf)return n=>n;let r=`\x1B[${e}m`,i=`\x1B[${t}m`;return n=>{let s=n+"",o=s.indexOf(i);if(o===-1)return r+s+i;let a=r,c=0,p=(t===22?i:"")+r;for(;o!==-1;)a+=s.slice(c,o)+p,c=o+i.length,o=s.indexOf(i,c);return a+=s.slice(c)+i,a}},V$=q(0,0),Cc=q(1,22),W$=q(2,22),H$=q(3,23),K$=q(4,24),Y$=q(53,55),J$=q(7,27),X$=q(8,28),Z$=q(9,29),Q$=q(30,39),eA=q(31,39),tA=q(32,39),rA=q(33,39),iA=q(34,39),nA=q(35,39),sA=q(36,39),oA=q(37,39),Si=q(90,39),aA=q(40,49),cA=q(41,49),pA=q(42,49),dA=q(43,49),uA=q(44,49),lA=q(45,49),mA=q(46,49),hA=q(47,49),yA=q(100,49),Ec=q(91,39),fA=q(92,39),Pc=q(93,39),gA=q(94,39),_A=q(95,39),bA=q(96,39),wA=q(97,39),xA=q(101,49),kA=q(102,49),vA=q(103,49),SA=q(104,49),qA=q(105,49),$A=q(106,49),AA=q(107,49);var Ic=({type:e,message:t,timestamp:r,piped:i,commandId:n,result:{failed:s=!1}={},options:{reject:o=!0}})=>{let a=Xf(r),c=Zf[e]({failed:s,reject:o,piped:i}),d=Qf[e]({reject:o});return`${Si(`[${a}]`)} ${Si(`[${n}]`)} ${d(c)} ${d(t)}`},Xf=e=>`${qi(e.getHours(),2)}:${qi(e.getMinutes(),2)}:${qi(e.getSeconds(),2)}.${qi(e.getMilliseconds(),3)}`,qi=(e,t)=>String(e).padStart(t,"0"),Tc=({failed:e,reject:t})=>e?t?vi.cross:vi.warning:vi.tick,Zf={command:({piped:e})=>e?"|":"$",output:()=>" ",ipc:()=>"*",error:Tc,duration:Tc},Rc=e=>e,Qf={command:()=>Cc,output:()=>Rc,ipc:()=>Rc,error:({reject:e})=>e?Ec:Pc,duration:()=>Si};var Oc=(e,t,r)=>{let i=kc(t,r);return e.map(({verboseLine:n,verboseObject:s})=>eg(n,s,i)).filter(n=>n!==void 0).map(n=>tg(n)).join("")},eg=(e,t,r)=>{if(r===void 0)return e;let i=r(e,t);if(typeof i=="string")return i},tg=e=>e.endsWith(`
106
106
  `)?e:`${e}
107
107
  `;var Ie=({type:e,verboseMessage:t,fdNumber:r,verboseInfo:i,result:n})=>{let s=ig({type:e,result:n,verboseInfo:i}),o=ng(t,s),a=Oc(o,i,r);a!==""&&console.warn(a.slice(0,-1))},ig=({type:e,result:t,verboseInfo:{escapedCommand:r,commandId:i,rawOptions:{piped:n=!1,...s}}})=>({type:e,escapedCommand:r,commandId:`${i}`,timestamp:new Date,piped:n,result:t,options:s}),ng=(e,t)=>e.split(`
108
- `).map(r=>sg({...t,message:r})),sg=e=>({verboseLine:Ic(e),verboseObject:e}),qi=e=>{let t=typeof e=="string"?e:rg(e);return dr(t).replaceAll(" "," ".repeat(og))},og=2;var jc=(e,t)=>{Rt(t)&&Ie({type:"command",verboseMessage:e,verboseInfo:t})};var Dc=(e,t,r)=>{pg(e);let i=ag(e);return{verbose:e,escapedCommand:t,commandId:i,rawOptions:r}},ag=e=>Rt({verbose:e})?cg++:void 0,cg=0n,pg=e=>{for(let t of e){if(t===!1)throw new TypeError(`The "verbose: false" option was renamed to "verbose: 'none'".`);if(t===!0)throw new TypeError(`The "verbose: true" option was renamed to "verbose: 'short'".`);if(!xi.includes(t)&&!wi(t)){let r=xi.map(i=>`'${i}'`).join(", ");throw new TypeError(`The "verbose" option must not be ${t}. Allowed values are: ${r} or a function.`)}}};import{hrtime as Lc}from"process";var $i=()=>Lc.bigint(),$s=e=>Number(Lc.bigint()-e)/1e6;var Ai=(e,t,r)=>{let i=$i(),{command:n,escapedCommand:s}=vc(e,t),o=xs(r,"verbose"),a=Dc(o,s,{...r});return jc(s,a),{command:n,escapedCommand:s,startTime:i,verboseInfo:a}};var Dd=D(qp(),1);import W_ from"path";import jd from"process";import Ti from"process";import gt from"path";function Ei(e={}){let{env:t=process.env,platform:r=process.platform}=e;return r!=="win32"?"PATH":Object.keys(t).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"}import{promisify as Dg}from"util";import{execFile as Lg,execFileSync as mC}from"child_process";import $p from"path";import{fileURLToPath as Mg}from"url";var fC=Dg(Lg);function Pi(e){return e instanceof URL?Mg(e):e}function Ap(e){return{*[Symbol.iterator](){let t=$p.resolve(Pi(e)),r;for(;r!==t;)yield t,r=t,t=$p.resolve(t,"..")}}}var gC=10*1024*1024;var Fg=({cwd:e=Ti.cwd(),path:t=Ti.env[Ei()],preferLocal:r=!0,execPath:i=Ti.execPath,addExecPath:n=!0}={})=>{let s=gt.resolve(Pi(e)),o=[],a=t.split(gt.delimiter);return r&&Bg(o,a,s),n&&Ug(o,a,i,s),t===""||t===gt.delimiter?`${o.join(gt.delimiter)}${t}`:[...o,t].join(gt.delimiter)},Bg=(e,t,r)=>{for(let i of Ap(r)){let n=gt.join(i,"node_modules/.bin");t.includes(n)||e.push(n)}},Ug=(e,t,r,i)=>{let n=gt.resolve(i,Pi(r),"..");t.includes(n)||e.push(n)},Cp=({env:e=Ti.env,...t}={})=>{e={...e};let r=Ei({env:e});return t.path=e[r],e[r]=Fg(t),e};import{setTimeout as r_}from"timers/promises";var Ep=(e,t,r)=>{let i=r?lr:ur,n=e instanceof qe?{}:{cause:e};return new i(t,n)},qe=class extends Error{},Pp=(e,t)=>{Object.defineProperty(e.prototype,"name",{value:t,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,Rp,{value:!0,writable:!1,enumerable:!1,configurable:!1})},Tp=e=>Ri(e)&&Rp in e,Rp=Symbol("isExecaError"),Ri=e=>Object.prototype.toString.call(e)==="[object Error]",ur=class extends Error{};Pp(ur,ur.name);var lr=class extends Error{};Pp(lr,lr.name);import{constants as mr}from"os";import{constants as Vg}from"os";var Ip=()=>{let e=jp-Op+1;return Array.from({length:e},Ng)},Ng=(e,t)=>({name:`SIGRT${t+1}`,number:Op+t,action:"terminate",description:"Application-specific signal (realtime)",standard:"posix"}),Op=34,jp=64;import{constants as Gg}from"os";var Dp=[{name:"SIGHUP",number:1,action:"terminate",description:"Terminal closed",standard:"posix"},{name:"SIGINT",number:2,action:"terminate",description:"User interruption with CTRL-C",standard:"ansi"},{name:"SIGQUIT",number:3,action:"core",description:"User interruption with CTRL-\\",standard:"posix"},{name:"SIGILL",number:4,action:"core",description:"Invalid machine instruction",standard:"ansi"},{name:"SIGTRAP",number:5,action:"core",description:"Debugger breakpoint",standard:"posix"},{name:"SIGABRT",number:6,action:"core",description:"Aborted",standard:"ansi"},{name:"SIGIOT",number:6,action:"core",description:"Aborted",standard:"bsd"},{name:"SIGBUS",number:7,action:"core",description:"Bus error due to misaligned, non-existing address or paging error",standard:"bsd"},{name:"SIGEMT",number:7,action:"terminate",description:"Command should be emulated but is not implemented",standard:"other"},{name:"SIGFPE",number:8,action:"core",description:"Floating point arithmetic error",standard:"ansi"},{name:"SIGKILL",number:9,action:"terminate",description:"Forced termination",standard:"posix",forced:!0},{name:"SIGUSR1",number:10,action:"terminate",description:"Application-specific signal",standard:"posix"},{name:"SIGSEGV",number:11,action:"core",description:"Segmentation fault",standard:"ansi"},{name:"SIGUSR2",number:12,action:"terminate",description:"Application-specific signal",standard:"posix"},{name:"SIGPIPE",number:13,action:"terminate",description:"Broken pipe or socket",standard:"posix"},{name:"SIGALRM",number:14,action:"terminate",description:"Timeout or timer",standard:"posix"},{name:"SIGTERM",number:15,action:"terminate",description:"Termination",standard:"ansi"},{name:"SIGSTKFLT",number:16,action:"terminate",description:"Stack is empty or overflowed",standard:"other"},{name:"SIGCHLD",number:17,action:"ignore",description:"Child process terminated, paused or unpaused",standard:"posix"},{name:"SIGCLD",number:17,action:"ignore",description:"Child process terminated, paused or unpaused",standard:"other"},{name:"SIGCONT",number:18,action:"unpause",description:"Unpaused",standard:"posix",forced:!0},{name:"SIGSTOP",number:19,action:"pause",description:"Paused",standard:"posix",forced:!0},{name:"SIGTSTP",number:20,action:"pause",description:'Paused using CTRL-Z or "suspend"',standard:"posix"},{name:"SIGTTIN",number:21,action:"pause",description:"Background process cannot read terminal input",standard:"posix"},{name:"SIGBREAK",number:21,action:"terminate",description:"User interruption with CTRL-BREAK",standard:"other"},{name:"SIGTTOU",number:22,action:"pause",description:"Background process cannot write to terminal output",standard:"posix"},{name:"SIGURG",number:23,action:"ignore",description:"Socket received out-of-band data",standard:"bsd"},{name:"SIGXCPU",number:24,action:"core",description:"Process timed out",standard:"bsd"},{name:"SIGXFSZ",number:25,action:"core",description:"File too big",standard:"bsd"},{name:"SIGVTALRM",number:26,action:"terminate",description:"Timeout or timer",standard:"bsd"},{name:"SIGPROF",number:27,action:"terminate",description:"Timeout or timer",standard:"bsd"},{name:"SIGWINCH",number:28,action:"ignore",description:"Terminal window size changed",standard:"bsd"},{name:"SIGIO",number:29,action:"terminate",description:"I/O is available",standard:"other"},{name:"SIGPOLL",number:29,action:"terminate",description:"Watched event",standard:"other"},{name:"SIGINFO",number:29,action:"ignore",description:"Request for process information",standard:"other"},{name:"SIGPWR",number:30,action:"terminate",description:"Device running out of power",standard:"systemv"},{name:"SIGSYS",number:31,action:"core",description:"Invalid system call",standard:"other"},{name:"SIGUNUSED",number:31,action:"terminate",description:"Invalid system call",standard:"other"}];var Ds=()=>{let e=Ip();return[...Dp,...e].map(zg)},zg=({name:e,number:t,description:r,action:i,forced:n=!1,standard:s})=>{let{signals:{[e]:o}}=Gg,a=o!==void 0;return{name:e,number:a?o:t,description:r,supported:a,action:i,forced:n,standard:s}};var Wg=()=>{let e=Ds();return Object.fromEntries(e.map(Hg))},Hg=({name:e,number:t,description:r,supported:i,action:n,forced:s,standard:o})=>[e,{name:e,number:t,description:r,supported:i,action:n,forced:s,standard:o}],Lp=Wg(),Kg=()=>{let e=Ds(),t=65,r=Array.from({length:t},(i,n)=>Yg(n,e));return Object.assign({},...r)},Yg=(e,t)=>{let r=Jg(e,t);if(r===void 0)return{};let{name:i,description:n,supported:s,action:o,forced:a,standard:c}=r;return{[e]:{name:i,number:e,description:n,supported:s,action:o,forced:a,standard:c}}},Jg=(e,t)=>{let r=t.find(({name:i})=>Vg.signals[i]===e);return r!==void 0?r:t.find(i=>i.number===e)},OC=Kg();var Fp=e=>{let t="option `killSignal`";if(e===0)throw new TypeError(`Invalid ${t}: 0 cannot be used.`);return Up(e,t)},Bp=e=>e===0?e:Up(e,"`subprocess.kill()`'s argument"),Up=(e,t)=>{if(Number.isInteger(e))return Xg(e,t);if(typeof e=="string")return Qg(e,t);throw new TypeError(`Invalid ${t} ${String(e)}: it must be a string or an integer.
108
+ `).map(r=>sg({...t,message:r})),sg=e=>({verboseLine:Ic(e),verboseObject:e}),$i=e=>{let t=typeof e=="string"?e:rg(e);return ur(t).replaceAll(" "," ".repeat(og))},og=2;var jc=(e,t)=>{Rt(t)&&Ie({type:"command",verboseMessage:e,verboseInfo:t})};var Dc=(e,t,r)=>{pg(e);let i=ag(e);return{verbose:e,escapedCommand:t,commandId:i,rawOptions:r}},ag=e=>Rt({verbose:e})?cg++:void 0,cg=0n,pg=e=>{for(let t of e){if(t===!1)throw new TypeError(`The "verbose: false" option was renamed to "verbose: 'none'".`);if(t===!0)throw new TypeError(`The "verbose: true" option was renamed to "verbose: 'short'".`);if(!ki.includes(t)&&!xi(t)){let r=ki.map(i=>`'${i}'`).join(", ");throw new TypeError(`The "verbose" option must not be ${t}. Allowed values are: ${r} or a function.`)}}};import{hrtime as Lc}from"process";var Ai=()=>Lc.bigint(),$s=e=>Number(Lc.bigint()-e)/1e6;var Ci=(e,t,r)=>{let i=Ai(),{command:n,escapedCommand:s}=vc(e,t),o=xs(r,"verbose"),a=Dc(o,s,{...r});return jc(s,a),{command:n,escapedCommand:s,startTime:i,verboseInfo:a}};var Dd=D(qp(),1);import W_ from"path";import jd from"process";import Ri from"process";import gt from"path";function Pi(e={}){let{env:t=process.env,platform:r=process.platform}=e;return r!=="win32"?"PATH":Object.keys(t).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"}import{promisify as Dg}from"util";import{execFile as Lg,execFileSync as yC}from"child_process";import $p from"path";import{fileURLToPath as Mg}from"url";var _C=Dg(Lg);function Ti(e){return e instanceof URL?Mg(e):e}function Ap(e){return{*[Symbol.iterator](){let t=$p.resolve(Ti(e)),r;for(;r!==t;)yield t,r=t,t=$p.resolve(t,"..")}}}var bC=10*1024*1024;var Fg=({cwd:e=Ri.cwd(),path:t=Ri.env[Pi()],preferLocal:r=!0,execPath:i=Ri.execPath,addExecPath:n=!0}={})=>{let s=gt.resolve(Ti(e)),o=[],a=t.split(gt.delimiter);return r&&Bg(o,a,s),n&&Ug(o,a,i,s),t===""||t===gt.delimiter?`${o.join(gt.delimiter)}${t}`:[...o,t].join(gt.delimiter)},Bg=(e,t,r)=>{for(let i of Ap(r)){let n=gt.join(i,"node_modules/.bin");t.includes(n)||e.push(n)}},Ug=(e,t,r,i)=>{let n=gt.resolve(i,Ti(r),"..");t.includes(n)||e.push(n)},Cp=({env:e=Ri.env,...t}={})=>{e={...e};let r=Pi({env:e});return t.path=e[r],e[r]=Fg(t),e};import{setTimeout as r_}from"timers/promises";var Ep=(e,t,r)=>{let i=r?mr:lr,n=e instanceof qe?{}:{cause:e};return new i(t,n)},qe=class extends Error{},Pp=(e,t)=>{Object.defineProperty(e.prototype,"name",{value:t,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,Rp,{value:!0,writable:!1,enumerable:!1,configurable:!1})},Tp=e=>Ii(e)&&Rp in e,Rp=Symbol("isExecaError"),Ii=e=>Object.prototype.toString.call(e)==="[object Error]",lr=class extends Error{};Pp(lr,lr.name);var mr=class extends Error{};Pp(mr,mr.name);import{constants as hr}from"os";import{constants as Vg}from"os";var Ip=()=>{let e=jp-Op+1;return Array.from({length:e},Ng)},Ng=(e,t)=>({name:`SIGRT${t+1}`,number:Op+t,action:"terminate",description:"Application-specific signal (realtime)",standard:"posix"}),Op=34,jp=64;import{constants as Gg}from"os";var Dp=[{name:"SIGHUP",number:1,action:"terminate",description:"Terminal closed",standard:"posix"},{name:"SIGINT",number:2,action:"terminate",description:"User interruption with CTRL-C",standard:"ansi"},{name:"SIGQUIT",number:3,action:"core",description:"User interruption with CTRL-\\",standard:"posix"},{name:"SIGILL",number:4,action:"core",description:"Invalid machine instruction",standard:"ansi"},{name:"SIGTRAP",number:5,action:"core",description:"Debugger breakpoint",standard:"posix"},{name:"SIGABRT",number:6,action:"core",description:"Aborted",standard:"ansi"},{name:"SIGIOT",number:6,action:"core",description:"Aborted",standard:"bsd"},{name:"SIGBUS",number:7,action:"core",description:"Bus error due to misaligned, non-existing address or paging error",standard:"bsd"},{name:"SIGEMT",number:7,action:"terminate",description:"Command should be emulated but is not implemented",standard:"other"},{name:"SIGFPE",number:8,action:"core",description:"Floating point arithmetic error",standard:"ansi"},{name:"SIGKILL",number:9,action:"terminate",description:"Forced termination",standard:"posix",forced:!0},{name:"SIGUSR1",number:10,action:"terminate",description:"Application-specific signal",standard:"posix"},{name:"SIGSEGV",number:11,action:"core",description:"Segmentation fault",standard:"ansi"},{name:"SIGUSR2",number:12,action:"terminate",description:"Application-specific signal",standard:"posix"},{name:"SIGPIPE",number:13,action:"terminate",description:"Broken pipe or socket",standard:"posix"},{name:"SIGALRM",number:14,action:"terminate",description:"Timeout or timer",standard:"posix"},{name:"SIGTERM",number:15,action:"terminate",description:"Termination",standard:"ansi"},{name:"SIGSTKFLT",number:16,action:"terminate",description:"Stack is empty or overflowed",standard:"other"},{name:"SIGCHLD",number:17,action:"ignore",description:"Child process terminated, paused or unpaused",standard:"posix"},{name:"SIGCLD",number:17,action:"ignore",description:"Child process terminated, paused or unpaused",standard:"other"},{name:"SIGCONT",number:18,action:"unpause",description:"Unpaused",standard:"posix",forced:!0},{name:"SIGSTOP",number:19,action:"pause",description:"Paused",standard:"posix",forced:!0},{name:"SIGTSTP",number:20,action:"pause",description:'Paused using CTRL-Z or "suspend"',standard:"posix"},{name:"SIGTTIN",number:21,action:"pause",description:"Background process cannot read terminal input",standard:"posix"},{name:"SIGBREAK",number:21,action:"terminate",description:"User interruption with CTRL-BREAK",standard:"other"},{name:"SIGTTOU",number:22,action:"pause",description:"Background process cannot write to terminal output",standard:"posix"},{name:"SIGURG",number:23,action:"ignore",description:"Socket received out-of-band data",standard:"bsd"},{name:"SIGXCPU",number:24,action:"core",description:"Process timed out",standard:"bsd"},{name:"SIGXFSZ",number:25,action:"core",description:"File too big",standard:"bsd"},{name:"SIGVTALRM",number:26,action:"terminate",description:"Timeout or timer",standard:"bsd"},{name:"SIGPROF",number:27,action:"terminate",description:"Timeout or timer",standard:"bsd"},{name:"SIGWINCH",number:28,action:"ignore",description:"Terminal window size changed",standard:"bsd"},{name:"SIGIO",number:29,action:"terminate",description:"I/O is available",standard:"other"},{name:"SIGPOLL",number:29,action:"terminate",description:"Watched event",standard:"other"},{name:"SIGINFO",number:29,action:"ignore",description:"Request for process information",standard:"other"},{name:"SIGPWR",number:30,action:"terminate",description:"Device running out of power",standard:"systemv"},{name:"SIGSYS",number:31,action:"core",description:"Invalid system call",standard:"other"},{name:"SIGUNUSED",number:31,action:"terminate",description:"Invalid system call",standard:"other"}];var Ds=()=>{let e=Ip();return[...Dp,...e].map(zg)},zg=({name:e,number:t,description:r,action:i,forced:n=!1,standard:s})=>{let{signals:{[e]:o}}=Gg,a=o!==void 0;return{name:e,number:a?o:t,description:r,supported:a,action:i,forced:n,standard:s}};var Wg=()=>{let e=Ds();return Object.fromEntries(e.map(Hg))},Hg=({name:e,number:t,description:r,supported:i,action:n,forced:s,standard:o})=>[e,{name:e,number:t,description:r,supported:i,action:n,forced:s,standard:o}],Lp=Wg(),Kg=()=>{let e=Ds(),t=65,r=Array.from({length:t},(i,n)=>Yg(n,e));return Object.assign({},...r)},Yg=(e,t)=>{let r=Jg(e,t);if(r===void 0)return{};let{name:i,description:n,supported:s,action:o,forced:a,standard:c}=r;return{[e]:{name:i,number:e,description:n,supported:s,action:o,forced:a,standard:c}}},Jg=(e,t)=>{let r=t.find(({name:i})=>Vg.signals[i]===e);return r!==void 0?r:t.find(i=>i.number===e)},DC=Kg();var Fp=e=>{let t="option `killSignal`";if(e===0)throw new TypeError(`Invalid ${t}: 0 cannot be used.`);return Up(e,t)},Bp=e=>e===0?e:Up(e,"`subprocess.kill()`'s argument"),Up=(e,t)=>{if(Number.isInteger(e))return Xg(e,t);if(typeof e=="string")return Qg(e,t);throw new TypeError(`Invalid ${t} ${String(e)}: it must be a string or an integer.
109
109
  ${Ls()}`)},Xg=(e,t)=>{if(Mp.has(e))return Mp.get(e);throw new TypeError(`Invalid ${t} ${e}: this signal integer does not exist.
110
- ${Ls()}`)},Zg=()=>new Map(Object.entries(mr.signals).reverse().map(([e,t])=>[t,e])),Mp=Zg(),Qg=(e,t)=>{if(e in mr.signals)return e;throw e.toUpperCase()in mr.signals?new TypeError(`Invalid ${t} '${e}': please rename it to '${e.toUpperCase()}'.`):new TypeError(`Invalid ${t} '${e}': this signal name does not exist.
110
+ ${Ls()}`)},Zg=()=>new Map(Object.entries(hr.signals).reverse().map(([e,t])=>[t,e])),Mp=Zg(),Qg=(e,t)=>{if(e in hr.signals)return e;throw e.toUpperCase()in hr.signals?new TypeError(`Invalid ${t} '${e}': please rename it to '${e.toUpperCase()}'.`):new TypeError(`Invalid ${t} '${e}': this signal name does not exist.
111
111
  ${Ls()}`)},Ls=()=>`Available signal names: ${e_()}.
112
- Available signal numbers: ${t_()}.`,e_=()=>Object.keys(mr.signals).sort().map(e=>`'${e}'`).join(", "),t_=()=>[...new Set(Object.values(mr.signals).sort((e,t)=>e-t))].join(", "),Ii=e=>Lp[e].description;var Np=e=>{if(e===!1)return e;if(e===!0)return i_;if(!Number.isFinite(e)||e<0)throw new TypeError(`Expected the \`forceKillAfterDelay\` option to be a non-negative integer, got \`${e}\` (${typeof e})`);return e},i_=1e3*5,Gp=({kill:e,options:{forceKillAfterDelay:t,killSignal:r},onInternalError:i,context:n,controller:s},o,a)=>{let{signal:c,error:d}=n_(o,a,r);s_(d,i);let p=e(c);return o_({kill:e,signal:c,forceKillAfterDelay:t,killSignal:r,killResult:p,context:n,controller:s}),p},n_=(e,t,r)=>{let[i=r,n]=Ri(e)?[void 0,e]:[e,t];if(typeof i!="string"&&!Number.isInteger(i))throw new TypeError(`The first argument must be an error instance or a signal name string/integer: ${String(i)}`);if(n!==void 0&&!Ri(n))throw new TypeError(`The second argument is optional. If specified, it must be an error instance: ${n}`);return{signal:Bp(i),error:n}},s_=(e,t)=>{e!==void 0&&t.reject(e)},o_=async({kill:e,signal:t,forceKillAfterDelay:r,killSignal:i,killResult:n,context:s,controller:o})=>{t===i&&n&&Ms({kill:e,forceKillAfterDelay:r,context:s,controllerSignal:o.signal})},Ms=async({kill:e,forceKillAfterDelay:t,context:r,controllerSignal:i})=>{if(t!==!1)try{await r_(t,void 0,{signal:i}),e("SIGKILL")&&(r.isForcefullyTerminated??=!0)}catch{}};import{once as a_}from"events";var Oi=async(e,t)=>{e.aborted||await a_(e,"abort",{signal:t})};var zp=({cancelSignal:e})=>{if(e!==void 0&&Object.prototype.toString.call(e)!=="[object AbortSignal]")throw new Error(`The \`cancelSignal\` option must be an AbortSignal: ${String(e)}`)},Vp=({subprocess:e,cancelSignal:t,gracefulCancel:r,context:i,controller:n})=>t===void 0||r?[]:[c_(e,t,i,n)],c_=async(e,t,r,{signal:i})=>{throw await Oi(t,i),r.terminationReason??="cancel",e.kill(),t.reason};import{scheduler as E_}from"timers/promises";import{promisify as $_}from"util";var Dt=({methodName:e,isSubprocess:t,ipc:r,isConnected:i})=>{p_(e,t,r),Fs(e,t,i)},p_=(e,t,r)=>{if(!r)throw new Error(`${$e(e,t)} can only be used if the \`ipc\` option is \`true\`.`)},Fs=(e,t,r)=>{if(!r)throw new Error(`${$e(e,t)} cannot be used: the ${ot(t)} has already exited or disconnected.`)},Wp=e=>{throw new Error(`${$e("getOneMessage",e)} could not complete: the ${ot(e)} exited or disconnected.`)},Hp=e=>{throw new Error(`${$e("sendMessage",e)} failed: the ${ot(e)} is sending a message too, instead of listening to incoming messages.
112
+ Available signal numbers: ${t_()}.`,e_=()=>Object.keys(hr.signals).sort().map(e=>`'${e}'`).join(", "),t_=()=>[...new Set(Object.values(hr.signals).sort((e,t)=>e-t))].join(", "),Oi=e=>Lp[e].description;var Np=e=>{if(e===!1)return e;if(e===!0)return i_;if(!Number.isFinite(e)||e<0)throw new TypeError(`Expected the \`forceKillAfterDelay\` option to be a non-negative integer, got \`${e}\` (${typeof e})`);return e},i_=1e3*5,Gp=({kill:e,options:{forceKillAfterDelay:t,killSignal:r},onInternalError:i,context:n,controller:s},o,a)=>{let{signal:c,error:d}=n_(o,a,r);s_(d,i);let p=e(c);return o_({kill:e,signal:c,forceKillAfterDelay:t,killSignal:r,killResult:p,context:n,controller:s}),p},n_=(e,t,r)=>{let[i=r,n]=Ii(e)?[void 0,e]:[e,t];if(typeof i!="string"&&!Number.isInteger(i))throw new TypeError(`The first argument must be an error instance or a signal name string/integer: ${String(i)}`);if(n!==void 0&&!Ii(n))throw new TypeError(`The second argument is optional. If specified, it must be an error instance: ${n}`);return{signal:Bp(i),error:n}},s_=(e,t)=>{e!==void 0&&t.reject(e)},o_=async({kill:e,signal:t,forceKillAfterDelay:r,killSignal:i,killResult:n,context:s,controller:o})=>{t===i&&n&&Ms({kill:e,forceKillAfterDelay:r,context:s,controllerSignal:o.signal})},Ms=async({kill:e,forceKillAfterDelay:t,context:r,controllerSignal:i})=>{if(t!==!1)try{await r_(t,void 0,{signal:i}),e("SIGKILL")&&(r.isForcefullyTerminated??=!0)}catch{}};import{once as a_}from"events";var ji=async(e,t)=>{e.aborted||await a_(e,"abort",{signal:t})};var zp=({cancelSignal:e})=>{if(e!==void 0&&Object.prototype.toString.call(e)!=="[object AbortSignal]")throw new Error(`The \`cancelSignal\` option must be an AbortSignal: ${String(e)}`)},Vp=({subprocess:e,cancelSignal:t,gracefulCancel:r,context:i,controller:n})=>t===void 0||r?[]:[c_(e,t,i,n)],c_=async(e,t,r,{signal:i})=>{throw await ji(t,i),r.terminationReason??="cancel",e.kill(),t.reason};import{scheduler as E_}from"timers/promises";import{promisify as $_}from"util";var Dt=({methodName:e,isSubprocess:t,ipc:r,isConnected:i})=>{p_(e,t,r),Fs(e,t,i)},p_=(e,t,r)=>{if(!r)throw new Error(`${$e(e,t)} can only be used if the \`ipc\` option is \`true\`.`)},Fs=(e,t,r)=>{if(!r)throw new Error(`${$e(e,t)} cannot be used: the ${ot(t)} has already exited or disconnected.`)},Wp=e=>{throw new Error(`${$e("getOneMessage",e)} could not complete: the ${ot(e)} exited or disconnected.`)},Hp=e=>{throw new Error(`${$e("sendMessage",e)} failed: the ${ot(e)} is sending a message too, instead of listening to incoming messages.
113
113
  This can be fixed by both sending a message and listening to incoming messages at the same time:
114
114
 
115
115
  const [receivedMessage] = await Promise.all([
116
116
  ${$e("getOneMessage",e)},
117
117
  ${$e("sendMessage",e,"message, {strict: true}")},
118
- ]);`)},ji=(e,t)=>new Error(`${$e("sendMessage",t)} failed when sending an acknowledgment response to the ${ot(t)}.`,{cause:e}),Kp=e=>{throw new Error(`${$e("sendMessage",e)} failed: the ${ot(e)} is not listening to incoming messages.`)},Yp=e=>{throw new Error(`${$e("sendMessage",e)} failed: the ${ot(e)} exited without listening to incoming messages.`)},Jp=()=>new Error(`\`cancelSignal\` aborted: the ${ot(!0)} disconnected.`),Xp=()=>{throw new Error("`getCancelSignal()` cannot be used without setting the `cancelSignal` subprocess option.")},Zp=({error:e,methodName:t,isSubprocess:r})=>{if(e.code==="EPIPE")throw new Error(`${$e(t,r)} cannot be used: the ${ot(r)} is disconnecting.`,{cause:e})},Qp=({error:e,methodName:t,isSubprocess:r,message:i})=>{if(d_(e))throw new Error(`${$e(t,r)}'s argument type is invalid: the message cannot be serialized: ${String(i)}.`,{cause:e})},d_=({code:e,message:t})=>u_.has(e)||l_.some(r=>t.includes(r)),u_=new Set(["ERR_MISSING_ARGS","ERR_INVALID_ARG_TYPE"]),l_=["could not be cloned","circular structure","call stack size exceeded"],$e=(e,t,r="")=>e==="cancelSignal"?"`cancelSignal`'s `controller.abort()`":`${m_(t)}${e}(${r})`,m_=e=>e?"":"subprocess.",ot=e=>e?"parent process":"subprocess",Lt=e=>{e.connected&&e.disconnect()};var Oe=()=>{let e={},t=new Promise((r,i)=>{Object.assign(e,{resolve:r,reject:i})});return Object.assign(t,e)};var Li=(e,t="stdin")=>{let{options:i,fileDescriptors:n}=je.get(e),s=ed(n,t,!0),o=e.stdio[s];if(o===null)throw new TypeError(td(s,t,i,!0));return o},Mt=(e,t="stdout")=>{let{options:i,fileDescriptors:n}=je.get(e),s=ed(n,t,!1),o=s==="all"?e.all:e.stdio[s];if(o==null)throw new TypeError(td(s,t,i,!1));return o},je=new WeakMap,ed=(e,t,r)=>{let i=h_(t,r);return y_(i,t,r,e),i},h_=(e,t)=>{let r=ks(e);if(r!==void 0)return r;let{validOptions:i,defaultValue:n}=t?{validOptions:'"stdin"',defaultValue:"stdin"}:{validOptions:'"stdout", "stderr", "all"',defaultValue:"stdout"};throw new TypeError(`"${hr(t)}" must not be "${e}".
118
+ ]);`)},Di=(e,t)=>new Error(`${$e("sendMessage",t)} failed when sending an acknowledgment response to the ${ot(t)}.`,{cause:e}),Kp=e=>{throw new Error(`${$e("sendMessage",e)} failed: the ${ot(e)} is not listening to incoming messages.`)},Yp=e=>{throw new Error(`${$e("sendMessage",e)} failed: the ${ot(e)} exited without listening to incoming messages.`)},Jp=()=>new Error(`\`cancelSignal\` aborted: the ${ot(!0)} disconnected.`),Xp=()=>{throw new Error("`getCancelSignal()` cannot be used without setting the `cancelSignal` subprocess option.")},Zp=({error:e,methodName:t,isSubprocess:r})=>{if(e.code==="EPIPE")throw new Error(`${$e(t,r)} cannot be used: the ${ot(r)} is disconnecting.`,{cause:e})},Qp=({error:e,methodName:t,isSubprocess:r,message:i})=>{if(d_(e))throw new Error(`${$e(t,r)}'s argument type is invalid: the message cannot be serialized: ${String(i)}.`,{cause:e})},d_=({code:e,message:t})=>u_.has(e)||l_.some(r=>t.includes(r)),u_=new Set(["ERR_MISSING_ARGS","ERR_INVALID_ARG_TYPE"]),l_=["could not be cloned","circular structure","call stack size exceeded"],$e=(e,t,r="")=>e==="cancelSignal"?"`cancelSignal`'s `controller.abort()`":`${m_(t)}${e}(${r})`,m_=e=>e?"":"subprocess.",ot=e=>e?"parent process":"subprocess",Lt=e=>{e.connected&&e.disconnect()};var Oe=()=>{let e={},t=new Promise((r,i)=>{Object.assign(e,{resolve:r,reject:i})});return Object.assign(t,e)};var Mi=(e,t="stdin")=>{let{options:i,fileDescriptors:n}=je.get(e),s=ed(n,t,!0),o=e.stdio[s];if(o===null)throw new TypeError(td(s,t,i,!0));return o},Mt=(e,t="stdout")=>{let{options:i,fileDescriptors:n}=je.get(e),s=ed(n,t,!1),o=s==="all"?e.all:e.stdio[s];if(o==null)throw new TypeError(td(s,t,i,!1));return o},je=new WeakMap,ed=(e,t,r)=>{let i=h_(t,r);return y_(i,t,r,e),i},h_=(e,t)=>{let r=ks(e);if(r!==void 0)return r;let{validOptions:i,defaultValue:n}=t?{validOptions:'"stdin"',defaultValue:"stdin"}:{validOptions:'"stdout", "stderr", "all"',defaultValue:"stdout"};throw new TypeError(`"${yr(t)}" must not be "${e}".
119
119
  It must be ${i} or "fd3", "fd4" (and so on).
120
- It is optional and defaults to "${n}".`)},y_=(e,t,r,i)=>{let n=i[rd(e)];if(n===void 0)throw new TypeError(`"${hr(r)}" must not be ${t}. That file descriptor does not exist.
121
- Please set the "stdio" option to ensure that file descriptor exists.`);if(n.direction==="input"&&!r)throw new TypeError(`"${hr(r)}" must not be ${t}. It must be a readable stream, not writable.`);if(n.direction!=="input"&&r)throw new TypeError(`"${hr(r)}" must not be ${t}. It must be a writable stream, not readable.`)},td=(e,t,r,i)=>{if(e==="all"&&!r.all)return`The "all" option must be true to use "from: 'all'".`;let{optionName:n,optionValue:s}=f_(e,r);return`The "${n}: ${Di(s)}" option is incompatible with using "${hr(i)}: ${Di(t)}".
122
- Please set this option with "pipe" instead.`},f_=(e,{stdin:t,stdout:r,stderr:i,stdio:n})=>{let s=rd(e);return s===0&&t!==void 0?{optionName:"stdin",optionValue:t}:s===1&&r!==void 0?{optionName:"stdout",optionValue:r}:s===2&&i!==void 0?{optionName:"stderr",optionValue:i}:{optionName:`stdio[${s}]`,optionValue:n[s]}},rd=e=>e==="all"?1:e,hr=e=>e?"to":"from",Di=e=>typeof e=="string"?`'${e}'`:typeof e=="number"?`${e}`:"Stream";import{once as k_}from"events";import{addAbortListener as g_}from"events";var _t=(e,t,r)=>{let i=e.getMaxListeners();i===0||i===Number.POSITIVE_INFINITY||(e.setMaxListeners(i+t),g_(r,()=>{e.setMaxListeners(e.getMaxListeners()-t)}))};import{EventEmitter as w_}from"events";import{once as __}from"events";import{scheduler as b_}from"timers/promises";var Mi=(e,t)=>{t&&Bs(e)},Bs=e=>{e.refCounted()},Fi=(e,t)=>{t&&Us(e)},Us=e=>{e.unrefCounted()},id=(e,t)=>{t&&(Us(e),Us(e))},nd=(e,t)=>{t&&(Bs(e),Bs(e))};var sd=async({anyProcess:e,channel:t,isSubprocess:r,ipcEmitter:i},n)=>{if(cd(n)||dd(n))return;Bi.has(e)||Bi.set(e,[]);let s=Bi.get(e);if(s.push(n),!(s.length>1))for(;s.length>0;){await pd(e,i,n),await b_.yield();let o=await ad({wrappedMessage:s[0],anyProcess:e,channel:t,isSubprocess:r,ipcEmitter:i});s.shift(),i.emit("message",o),i.emit("message:done")}},od=async({anyProcess:e,channel:t,isSubprocess:r,ipcEmitter:i,boundOnMessage:n})=>{Ns();let s=Bi.get(e);for(;s?.length>0;)await __(i,"message:done");e.removeListener("message",n),nd(t,r),i.connected=!1,i.emit("disconnect")},Bi=new WeakMap;var at=(e,t,r)=>{if(Ui.has(e))return Ui.get(e);let i=new w_;return i.connected=!0,Ui.set(e,i),x_({ipcEmitter:i,anyProcess:e,channel:t,isSubprocess:r}),i},Ui=new WeakMap,x_=({ipcEmitter:e,anyProcess:t,channel:r,isSubprocess:i})=>{let n=sd.bind(void 0,{anyProcess:t,channel:r,isSubprocess:i,ipcEmitter:e});t.on("message",n),t.once("disconnect",od.bind(void 0,{anyProcess:t,channel:r,isSubprocess:i,ipcEmitter:e,boundOnMessage:n})),id(r,i)},Ni=e=>{let t=Ui.get(e);return t===void 0?e.channel!==null:t.connected};var ud=({anyProcess:e,channel:t,isSubprocess:r,message:i,strict:n})=>{if(!n)return i;let s=at(e,t,r),o=Vi(e,s);return{id:v_++,type:zi,message:i,hasListeners:o}},v_=0n,ld=(e,t)=>{if(!(t?.type!==zi||t.hasListeners))for(let{id:r}of e)r!==void 0&&Gi[r].resolve({isDeadlock:!0,hasListeners:!1})},ad=async({wrappedMessage:e,anyProcess:t,channel:r,isSubprocess:i,ipcEmitter:n})=>{if(e?.type!==zi||!t.connected)return e;let{id:s,message:o}=e,a={id:s,type:hd,message:Vi(t,n)};try{await Wi({anyProcess:t,channel:r,isSubprocess:i,ipc:!0},a)}catch(c){n.emit("strict:error",c)}return o},cd=e=>{if(e?.type!==hd)return!1;let{id:t,message:r}=e;return Gi[t]?.resolve({isDeadlock:!1,hasListeners:r}),!0},md=async(e,t,r)=>{if(e?.type!==zi)return;let i=Oe();Gi[e.id]=i;let n=new AbortController;try{let{isDeadlock:s,hasListeners:o}=await Promise.race([i,S_(t,r,n)]);s&&Hp(r),o||Kp(r)}finally{n.abort(),delete Gi[e.id]}},Gi={},S_=async(e,t,{signal:r})=>{_t(e,1,r),await k_(e,"disconnect",{signal:r}),Yp(t)},zi="execa:ipc:request",hd="execa:ipc:response";var yd=(e,t,r)=>{yr.has(e)||yr.set(e,new Set);let i=yr.get(e),n=Oe(),s=r?t.id:void 0,o={onMessageSent:n,id:s};return i.add(o),{outgoingMessages:i,outgoingMessage:o}},fd=({outgoingMessages:e,outgoingMessage:t})=>{e.delete(t),t.onMessageSent.resolve()},pd=async(e,t,r)=>{for(;!Vi(e,t)&&yr.get(e)?.size>0;){let i=[...yr.get(e)];ld(i,r),await Promise.all(i.map(({onMessageSent:n})=>n))}},yr=new WeakMap,Vi=(e,t)=>t.listenerCount("message")>q_(e),q_=e=>je.has(e)&&!Ze(je.get(e).options.buffer,"ipc")?1:0;var Wi=({anyProcess:e,channel:t,isSubprocess:r,ipc:i},n,{strict:s=!1}={})=>{let o="sendMessage";return Dt({methodName:o,isSubprocess:r,ipc:i,isConnected:e.connected}),A_({anyProcess:e,channel:t,methodName:o,isSubprocess:r,message:n,strict:s})},A_=async({anyProcess:e,channel:t,methodName:r,isSubprocess:i,message:n,strict:s})=>{let o=ud({anyProcess:e,channel:t,isSubprocess:i,message:n,strict:s}),a=yd(e,o,s);try{await zs({anyProcess:e,methodName:r,isSubprocess:i,wrappedMessage:o,message:n})}catch(c){throw Lt(e),c}finally{fd(a)}},zs=async({anyProcess:e,methodName:t,isSubprocess:r,wrappedMessage:i,message:n})=>{let s=C_(e);try{await Promise.all([md(i,e,r),s(i)])}catch(o){throw Zp({error:o,methodName:t,isSubprocess:r}),Qp({error:o,methodName:t,isSubprocess:r,message:n}),o}},C_=e=>{if(Gs.has(e))return Gs.get(e);let t=$_(e.send.bind(e));return Gs.set(e,t),t},Gs=new WeakMap;var _d=(e,t)=>{let r="cancelSignal";return Fs(r,!1,e.connected),zs({anyProcess:e,methodName:r,isSubprocess:!1,wrappedMessage:{type:wd,message:t},message:t})},bd=async({anyProcess:e,channel:t,isSubprocess:r,ipc:i})=>(await P_({anyProcess:e,channel:t,isSubprocess:r,ipc:i}),Vs.signal),P_=async({anyProcess:e,channel:t,isSubprocess:r,ipc:i})=>{if(!gd){if(gd=!0,!i){Xp();return}if(t===null){Ns();return}at(e,t,r),await E_.yield()}},gd=!1,dd=e=>e?.type!==wd?!1:(Vs.abort(e.message),!0),wd="execa:ipc:cancel",Ns=()=>{Vs.abort(Jp())},Vs=new AbortController;var xd=({gracefulCancel:e,cancelSignal:t,ipc:r,serialization:i})=>{if(e){if(t===void 0)throw new Error("The `cancelSignal` option must be defined when setting the `gracefulCancel` option.");if(!r)throw new Error("The `ipc` option cannot be false when setting the `gracefulCancel` option.");if(i==="json")throw new Error("The `serialization` option cannot be 'json' when setting the `gracefulCancel` option.")}},kd=({subprocess:e,cancelSignal:t,gracefulCancel:r,forceKillAfterDelay:i,context:n,controller:s})=>r?[T_({subprocess:e,cancelSignal:t,forceKillAfterDelay:i,context:n,controller:s})]:[],T_=async({subprocess:e,cancelSignal:t,forceKillAfterDelay:r,context:i,controller:{signal:n}})=>{await Oi(t,n);let s=R_(t);throw await _d(e,s),Ms({kill:e.kill,forceKillAfterDelay:r,context:i,controllerSignal:n}),i.terminationReason??="gracefulCancel",t.reason},R_=({reason:e})=>{if(!(e instanceof DOMException))return e;let t=new Error(e.message);return Object.defineProperty(t,"stack",{value:e.stack,enumerable:!1,configurable:!0,writable:!0}),t};import{setTimeout as I_}from"timers/promises";var vd=({timeout:e})=>{if(e!==void 0&&(!Number.isFinite(e)||e<0))throw new TypeError(`Expected the \`timeout\` option to be a non-negative integer, got \`${e}\` (${typeof e})`)},Sd=(e,t,r,i)=>t===0||t===void 0?[]:[O_(e,t,r,i)],O_=async(e,t,r,{signal:i})=>{throw await I_(t,void 0,{signal:i}),r.terminationReason??="timeout",e.kill(),new qe};import{execPath as j_,execArgv as D_}from"process";import qd from"path";var $d=({options:e})=>{if(e.node===!1)throw new TypeError('The "node" option cannot be false with `execaNode()`.');return{options:{...e,node:!0}}},Ad=(e,t,{node:r=!1,nodePath:i=j_,nodeOptions:n=D_.filter(c=>!c.startsWith("--inspect")),cwd:s,execPath:o,...a})=>{if(o!==void 0)throw new TypeError('The "execPath" option has been removed. Please use the "nodePath" option instead.');let c=Tt(i,'The "nodePath" option'),d=qd.resolve(s,c),p={...a,nodePath:d,node:r,cwd:s};if(!r)return[e,t,p];if(qd.basename(e,".exe")==="node")throw new TypeError('When the "node" option is true, the first argument does not need to be "node".');return[d,[...n,e,...t],{ipc:!0,...p,shell:!1}]};import{serialize as L_}from"v8";var Cd=({ipcInput:e,ipc:t,serialization:r})=>{if(e!==void 0){if(!t)throw new Error("The `ipcInput` option cannot be set unless the `ipc` option is `true`.");B_[r](e)}},M_=e=>{try{L_(e)}catch(t){throw new Error("The `ipcInput` option is not serializable with a structured clone.",{cause:t})}},F_=e=>{try{JSON.stringify(e)}catch(t){throw new Error("The `ipcInput` option is not serializable with JSON.",{cause:t})}},B_={advanced:M_,json:F_},Ed=async(e,t)=>{t!==void 0&&await e.sendMessage(t)};var Td=({encoding:e})=>{if(Ws.has(e))return;let t=N_(e);if(t!==void 0)throw new TypeError(`Invalid option \`encoding: ${Hi(e)}\`.
123
- Please rename it to ${Hi(t)}.`);let r=[...Ws].map(i=>Hi(i)).join(", ");throw new TypeError(`Invalid option \`encoding: ${Hi(e)}\`.
124
- Please rename it to one of: ${r}.`)},U_=new Set(["utf8","utf16le"]),ye=new Set(["buffer","hex","base64","base64url","latin1","ascii"]),Ws=new Set([...U_,...ye]),N_=e=>{if(e===null)return"buffer";if(typeof e!="string")return;let t=e.toLowerCase();if(t in Pd)return Pd[t];if(Ws.has(t))return t},Pd={"utf-8":"utf8","utf-16le":"utf16le","ucs-2":"utf16le",ucs2:"utf16le",binary:"latin1"},Hi=e=>typeof e=="string"?`"${e}"`:String(e);import{statSync as G_}from"fs";import z_ from"path";import V_ from"process";var Rd=(e=Id())=>{let t=Tt(e,'The "cwd" option');return z_.resolve(t)},Id=()=>{try{return V_.cwd()}catch(e){throw e.message=`The current directory does not exist.
120
+ It is optional and defaults to "${n}".`)},y_=(e,t,r,i)=>{let n=i[rd(e)];if(n===void 0)throw new TypeError(`"${yr(r)}" must not be ${t}. That file descriptor does not exist.
121
+ Please set the "stdio" option to ensure that file descriptor exists.`);if(n.direction==="input"&&!r)throw new TypeError(`"${yr(r)}" must not be ${t}. It must be a readable stream, not writable.`);if(n.direction!=="input"&&r)throw new TypeError(`"${yr(r)}" must not be ${t}. It must be a writable stream, not readable.`)},td=(e,t,r,i)=>{if(e==="all"&&!r.all)return`The "all" option must be true to use "from: 'all'".`;let{optionName:n,optionValue:s}=f_(e,r);return`The "${n}: ${Li(s)}" option is incompatible with using "${yr(i)}: ${Li(t)}".
122
+ Please set this option with "pipe" instead.`},f_=(e,{stdin:t,stdout:r,stderr:i,stdio:n})=>{let s=rd(e);return s===0&&t!==void 0?{optionName:"stdin",optionValue:t}:s===1&&r!==void 0?{optionName:"stdout",optionValue:r}:s===2&&i!==void 0?{optionName:"stderr",optionValue:i}:{optionName:`stdio[${s}]`,optionValue:n[s]}},rd=e=>e==="all"?1:e,yr=e=>e?"to":"from",Li=e=>typeof e=="string"?`'${e}'`:typeof e=="number"?`${e}`:"Stream";import{once as k_}from"events";import{addAbortListener as g_}from"events";var _t=(e,t,r)=>{let i=e.getMaxListeners();i===0||i===Number.POSITIVE_INFINITY||(e.setMaxListeners(i+t),g_(r,()=>{e.setMaxListeners(e.getMaxListeners()-t)}))};import{EventEmitter as w_}from"events";import{once as __}from"events";import{scheduler as b_}from"timers/promises";var Fi=(e,t)=>{t&&Bs(e)},Bs=e=>{e.refCounted()},Bi=(e,t)=>{t&&Us(e)},Us=e=>{e.unrefCounted()},id=(e,t)=>{t&&(Us(e),Us(e))},nd=(e,t)=>{t&&(Bs(e),Bs(e))};var sd=async({anyProcess:e,channel:t,isSubprocess:r,ipcEmitter:i},n)=>{if(cd(n)||dd(n))return;Ui.has(e)||Ui.set(e,[]);let s=Ui.get(e);if(s.push(n),!(s.length>1))for(;s.length>0;){await pd(e,i,n),await b_.yield();let o=await ad({wrappedMessage:s[0],anyProcess:e,channel:t,isSubprocess:r,ipcEmitter:i});s.shift(),i.emit("message",o),i.emit("message:done")}},od=async({anyProcess:e,channel:t,isSubprocess:r,ipcEmitter:i,boundOnMessage:n})=>{Ns();let s=Ui.get(e);for(;s?.length>0;)await __(i,"message:done");e.removeListener("message",n),nd(t,r),i.connected=!1,i.emit("disconnect")},Ui=new WeakMap;var at=(e,t,r)=>{if(Ni.has(e))return Ni.get(e);let i=new w_;return i.connected=!0,Ni.set(e,i),x_({ipcEmitter:i,anyProcess:e,channel:t,isSubprocess:r}),i},Ni=new WeakMap,x_=({ipcEmitter:e,anyProcess:t,channel:r,isSubprocess:i})=>{let n=sd.bind(void 0,{anyProcess:t,channel:r,isSubprocess:i,ipcEmitter:e});t.on("message",n),t.once("disconnect",od.bind(void 0,{anyProcess:t,channel:r,isSubprocess:i,ipcEmitter:e,boundOnMessage:n})),id(r,i)},Gi=e=>{let t=Ni.get(e);return t===void 0?e.channel!==null:t.connected};var ud=({anyProcess:e,channel:t,isSubprocess:r,message:i,strict:n})=>{if(!n)return i;let s=at(e,t,r),o=Wi(e,s);return{id:v_++,type:Vi,message:i,hasListeners:o}},v_=0n,ld=(e,t)=>{if(!(t?.type!==Vi||t.hasListeners))for(let{id:r}of e)r!==void 0&&zi[r].resolve({isDeadlock:!0,hasListeners:!1})},ad=async({wrappedMessage:e,anyProcess:t,channel:r,isSubprocess:i,ipcEmitter:n})=>{if(e?.type!==Vi||!t.connected)return e;let{id:s,message:o}=e,a={id:s,type:hd,message:Wi(t,n)};try{await Hi({anyProcess:t,channel:r,isSubprocess:i,ipc:!0},a)}catch(c){n.emit("strict:error",c)}return o},cd=e=>{if(e?.type!==hd)return!1;let{id:t,message:r}=e;return zi[t]?.resolve({isDeadlock:!1,hasListeners:r}),!0},md=async(e,t,r)=>{if(e?.type!==Vi)return;let i=Oe();zi[e.id]=i;let n=new AbortController;try{let{isDeadlock:s,hasListeners:o}=await Promise.race([i,S_(t,r,n)]);s&&Hp(r),o||Kp(r)}finally{n.abort(),delete zi[e.id]}},zi={},S_=async(e,t,{signal:r})=>{_t(e,1,r),await k_(e,"disconnect",{signal:r}),Yp(t)},Vi="execa:ipc:request",hd="execa:ipc:response";var yd=(e,t,r)=>{fr.has(e)||fr.set(e,new Set);let i=fr.get(e),n=Oe(),s=r?t.id:void 0,o={onMessageSent:n,id:s};return i.add(o),{outgoingMessages:i,outgoingMessage:o}},fd=({outgoingMessages:e,outgoingMessage:t})=>{e.delete(t),t.onMessageSent.resolve()},pd=async(e,t,r)=>{for(;!Wi(e,t)&&fr.get(e)?.size>0;){let i=[...fr.get(e)];ld(i,r),await Promise.all(i.map(({onMessageSent:n})=>n))}},fr=new WeakMap,Wi=(e,t)=>t.listenerCount("message")>q_(e),q_=e=>je.has(e)&&!Ze(je.get(e).options.buffer,"ipc")?1:0;var Hi=({anyProcess:e,channel:t,isSubprocess:r,ipc:i},n,{strict:s=!1}={})=>{let o="sendMessage";return Dt({methodName:o,isSubprocess:r,ipc:i,isConnected:e.connected}),A_({anyProcess:e,channel:t,methodName:o,isSubprocess:r,message:n,strict:s})},A_=async({anyProcess:e,channel:t,methodName:r,isSubprocess:i,message:n,strict:s})=>{let o=ud({anyProcess:e,channel:t,isSubprocess:i,message:n,strict:s}),a=yd(e,o,s);try{await zs({anyProcess:e,methodName:r,isSubprocess:i,wrappedMessage:o,message:n})}catch(c){throw Lt(e),c}finally{fd(a)}},zs=async({anyProcess:e,methodName:t,isSubprocess:r,wrappedMessage:i,message:n})=>{let s=C_(e);try{await Promise.all([md(i,e,r),s(i)])}catch(o){throw Zp({error:o,methodName:t,isSubprocess:r}),Qp({error:o,methodName:t,isSubprocess:r,message:n}),o}},C_=e=>{if(Gs.has(e))return Gs.get(e);let t=$_(e.send.bind(e));return Gs.set(e,t),t},Gs=new WeakMap;var _d=(e,t)=>{let r="cancelSignal";return Fs(r,!1,e.connected),zs({anyProcess:e,methodName:r,isSubprocess:!1,wrappedMessage:{type:wd,message:t},message:t})},bd=async({anyProcess:e,channel:t,isSubprocess:r,ipc:i})=>(await P_({anyProcess:e,channel:t,isSubprocess:r,ipc:i}),Vs.signal),P_=async({anyProcess:e,channel:t,isSubprocess:r,ipc:i})=>{if(!gd){if(gd=!0,!i){Xp();return}if(t===null){Ns();return}at(e,t,r),await E_.yield()}},gd=!1,dd=e=>e?.type!==wd?!1:(Vs.abort(e.message),!0),wd="execa:ipc:cancel",Ns=()=>{Vs.abort(Jp())},Vs=new AbortController;var xd=({gracefulCancel:e,cancelSignal:t,ipc:r,serialization:i})=>{if(e){if(t===void 0)throw new Error("The `cancelSignal` option must be defined when setting the `gracefulCancel` option.");if(!r)throw new Error("The `ipc` option cannot be false when setting the `gracefulCancel` option.");if(i==="json")throw new Error("The `serialization` option cannot be 'json' when setting the `gracefulCancel` option.")}},kd=({subprocess:e,cancelSignal:t,gracefulCancel:r,forceKillAfterDelay:i,context:n,controller:s})=>r?[T_({subprocess:e,cancelSignal:t,forceKillAfterDelay:i,context:n,controller:s})]:[],T_=async({subprocess:e,cancelSignal:t,forceKillAfterDelay:r,context:i,controller:{signal:n}})=>{await ji(t,n);let s=R_(t);throw await _d(e,s),Ms({kill:e.kill,forceKillAfterDelay:r,context:i,controllerSignal:n}),i.terminationReason??="gracefulCancel",t.reason},R_=({reason:e})=>{if(!(e instanceof DOMException))return e;let t=new Error(e.message);return Object.defineProperty(t,"stack",{value:e.stack,enumerable:!1,configurable:!0,writable:!0}),t};import{setTimeout as I_}from"timers/promises";var vd=({timeout:e})=>{if(e!==void 0&&(!Number.isFinite(e)||e<0))throw new TypeError(`Expected the \`timeout\` option to be a non-negative integer, got \`${e}\` (${typeof e})`)},Sd=(e,t,r,i)=>t===0||t===void 0?[]:[O_(e,t,r,i)],O_=async(e,t,r,{signal:i})=>{throw await I_(t,void 0,{signal:i}),r.terminationReason??="timeout",e.kill(),new qe};import{execPath as j_,execArgv as D_}from"process";import qd from"path";var $d=({options:e})=>{if(e.node===!1)throw new TypeError('The "node" option cannot be false with `execaNode()`.');return{options:{...e,node:!0}}},Ad=(e,t,{node:r=!1,nodePath:i=j_,nodeOptions:n=D_.filter(c=>!c.startsWith("--inspect")),cwd:s,execPath:o,...a})=>{if(o!==void 0)throw new TypeError('The "execPath" option has been removed. Please use the "nodePath" option instead.');let c=Tt(i,'The "nodePath" option'),d=qd.resolve(s,c),p={...a,nodePath:d,node:r,cwd:s};if(!r)return[e,t,p];if(qd.basename(e,".exe")==="node")throw new TypeError('When the "node" option is true, the first argument does not need to be "node".');return[d,[...n,e,...t],{ipc:!0,...p,shell:!1}]};import{serialize as L_}from"v8";var Cd=({ipcInput:e,ipc:t,serialization:r})=>{if(e!==void 0){if(!t)throw new Error("The `ipcInput` option cannot be set unless the `ipc` option is `true`.");B_[r](e)}},M_=e=>{try{L_(e)}catch(t){throw new Error("The `ipcInput` option is not serializable with a structured clone.",{cause:t})}},F_=e=>{try{JSON.stringify(e)}catch(t){throw new Error("The `ipcInput` option is not serializable with JSON.",{cause:t})}},B_={advanced:M_,json:F_},Ed=async(e,t)=>{t!==void 0&&await e.sendMessage(t)};var Td=({encoding:e})=>{if(Ws.has(e))return;let t=N_(e);if(t!==void 0)throw new TypeError(`Invalid option \`encoding: ${Ki(e)}\`.
123
+ Please rename it to ${Ki(t)}.`);let r=[...Ws].map(i=>Ki(i)).join(", ");throw new TypeError(`Invalid option \`encoding: ${Ki(e)}\`.
124
+ Please rename it to one of: ${r}.`)},U_=new Set(["utf8","utf16le"]),ye=new Set(["buffer","hex","base64","base64url","latin1","ascii"]),Ws=new Set([...U_,...ye]),N_=e=>{if(e===null)return"buffer";if(typeof e!="string")return;let t=e.toLowerCase();if(t in Pd)return Pd[t];if(Ws.has(t))return t},Pd={"utf-8":"utf8","utf-16le":"utf16le","ucs-2":"utf16le",ucs2:"utf16le",binary:"latin1"},Ki=e=>typeof e=="string"?`"${e}"`:String(e);import{statSync as G_}from"fs";import z_ from"path";import V_ from"process";var Rd=(e=Id())=>{let t=Tt(e,'The "cwd" option');return z_.resolve(t)},Id=()=>{try{return V_.cwd()}catch(e){throw e.message=`The current directory does not exist.
125
125
  ${e.message}`,e}},Od=(e,t)=>{if(t===Id())return e;let r;try{r=G_(t)}catch(i){return`The "cwd" option is invalid: ${t}.
126
126
  ${i.message}
127
127
  ${e}`}return r.isDirectory()?e:`The "cwd" option is not a directory: ${t}.
128
- ${e}`};var Ki=(e,t,r)=>{r.cwd=Rd(r.cwd);let[i,n,s]=Ad(e,t,r),{command:o,args:a,options:c}=Dd.default._parse(i,n,s),d=xc(c),p=H_(d);return vd(p),Td(p),Cd(p),zp(p),xd(p),p.shell=_s(p.shell),p.env=K_(p),p.killSignal=Fp(p.killSignal),p.forceKillAfterDelay=Np(p.forceKillAfterDelay),p.lines=p.lines.map((u,l)=>u&&!ye.has(p.encoding)&&p.buffer[l]),jd.platform==="win32"&&W_.basename(o,".exe")==="cmd"&&a.unshift("/q"),{file:o,commandArguments:a,options:p}},H_=({extendEnv:e=!0,preferLocal:t=!1,cwd:r,localDir:i=r,encoding:n="utf8",reject:s=!0,cleanup:o=!0,all:a=!1,windowsHide:c=!0,killSignal:d="SIGTERM",forceKillAfterDelay:p=!0,gracefulCancel:u=!1,ipcInput:l,ipc:m=l!==void 0||u,serialization:h="advanced",...f})=>({...f,extendEnv:e,preferLocal:t,cwd:r,localDirectory:i,encoding:n,reject:s,cleanup:o,all:a,windowsHide:c,killSignal:d,forceKillAfterDelay:p,gracefulCancel:u,ipcInput:l,ipc:m,serialization:h}),K_=({env:e,extendEnv:t,preferLocal:r,node:i,localDirectory:n,nodePath:s})=>{let o=t?{...jd.env,...e}:e;return r||i?Cp({env:o,cwd:n,execPath:s,preferLocal:r,addExecPath:i}):o};var Yi=(e,t,r)=>r.shell&&t.length>0?[[e,...t].join(" "),[],r]:[e,t,r];import{inspect as Cb}from"util";function Ft(e){if(typeof e=="string")return Y_(e);if(!(ArrayBuffer.isView(e)&&e.BYTES_PER_ELEMENT===1))throw new Error("Input must be a string or a Uint8Array");return J_(e)}var Y_=e=>e.at(-1)===Ld?e.slice(0,e.at(-2)===Md?-2:-1):e,J_=e=>e.at(-1)===X_?e.subarray(0,e.at(-2)===Z_?-2:-1):e,Ld=`
129
- `,X_=Ld.codePointAt(0),Md="\r",Z_=Md.codePointAt(0);import{on as Sb}from"events";import{finished as qb}from"stream/promises";function Ae(e,{checkOpen:t=!0}={}){return e!==null&&typeof e=="object"&&(e.writable||e.readable||!t||e.writable===void 0&&e.readable===void 0)&&typeof e.pipe=="function"}function Hs(e,{checkOpen:t=!0}={}){return Ae(e,{checkOpen:t})&&(e.writable||!t)&&typeof e.write=="function"&&typeof e.end=="function"&&typeof e.writable=="boolean"&&typeof e.writableObjectMode=="boolean"&&typeof e.destroy=="function"&&typeof e.destroyed=="boolean"}function bt(e,{checkOpen:t=!0}={}){return Ae(e,{checkOpen:t})&&(e.readable||!t)&&typeof e.read=="function"&&typeof e.readable=="boolean"&&typeof e.readableObjectMode=="boolean"&&typeof e.destroy=="function"&&typeof e.destroyed=="boolean"}function Ks(e,t){return Hs(e,t)&&bt(e,t)}var Q_=Object.getPrototypeOf(Object.getPrototypeOf(async function*(){}).prototype),Ys=class{#t;#r;#e=!1;#i=void 0;constructor(t,r){this.#t=t,this.#r=r}next(){let t=()=>this.#s();return this.#i=this.#i?this.#i.then(t,t):t(),this.#i}return(t){let r=()=>this.#n(t);return this.#i?this.#i.then(r,r):r()}async#s(){if(this.#e)return{done:!0,value:void 0};let t;try{t=await this.#t.read()}catch(r){throw this.#i=void 0,this.#e=!0,this.#t.releaseLock(),r}return t.done&&(this.#i=void 0,this.#e=!0,this.#t.releaseLock()),t}async#n(t){if(this.#e)return{done:!0,value:t};if(this.#e=!0,!this.#r){let r=this.#t.cancel(t);return this.#t.releaseLock(),await r,{done:!0,value:t}}return this.#t.releaseLock(),{done:!0,value:t}}},Js=Symbol();function Fd(){return this[Js].next()}Object.defineProperty(Fd,"name",{value:"next"});function Bd(e){return this[Js].return(e)}Object.defineProperty(Bd,"name",{value:"return"});var eb=Object.create(Q_,{next:{enumerable:!0,configurable:!0,writable:!0,value:Fd},return:{enumerable:!0,configurable:!0,writable:!0,value:Bd}});function Xs({preventCancel:e=!1}={}){let t=this.getReader(),r=new Ys(t,e),i=Object.create(eb);return i[Js]=r,i}var Ud=e=>{if(bt(e,{checkOpen:!1})&&fr.on!==void 0)return rb(e);if(typeof e?.[Symbol.asyncIterator]=="function")return e;if(tb.call(e)==="[object ReadableStream]")return Xs.call(e);throw new TypeError("The first argument must be a Readable, a ReadableStream, or an async iterable.")},{toString:tb}=Object.prototype,rb=async function*(e){let t=new AbortController,r={};ib(e,t,r);try{for await(let[i]of fr.on(e,"data",{signal:t.signal}))yield i}catch(i){if(r.error!==void 0)throw r.error;if(!t.signal.aborted)throw i}finally{e.destroy()}},ib=async(e,t,r)=>{try{await fr.finished(e,{cleanup:!0,readable:!0,writable:!1,error:!1})}catch(i){r.error=i}finally{t.abort()}},fr={};var Bt=async(e,{init:t,convertChunk:r,getSize:i,truncateChunk:n,addChunk:s,getFinalChunk:o,finalize:a},{maxBuffer:c=Number.POSITIVE_INFINITY}={})=>{let d=Ud(e),p=t();p.length=0;try{for await(let u of d){let l=sb(u),m=r[l](u,p);zd({convertedChunk:m,state:p,getSize:i,truncateChunk:n,addChunk:s,maxBuffer:c})}return nb({state:p,convertChunk:r,getSize:i,truncateChunk:n,addChunk:s,getFinalChunk:o,maxBuffer:c}),a(p)}catch(u){let l=typeof u=="object"&&u!==null?u:new Error(u);throw l.bufferedData=a(p),l}},nb=({state:e,getSize:t,truncateChunk:r,addChunk:i,getFinalChunk:n,maxBuffer:s})=>{let o=n(e);o!==void 0&&zd({convertedChunk:o,state:e,getSize:t,truncateChunk:r,addChunk:i,maxBuffer:s})},zd=({convertedChunk:e,state:t,getSize:r,truncateChunk:i,addChunk:n,maxBuffer:s})=>{let o=r(e),a=t.length+o;if(a<=s){Nd(e,t,n,a);return}let c=i(e,s-t.length);throw c!==void 0&&Nd(c,t,n,s),new De},Nd=(e,t,r,i)=>{t.contents=r(e,t,i),t.length=i},sb=e=>{let t=typeof e;if(t==="string")return"string";if(t!=="object"||e===null)return"others";if(globalThis.Buffer?.isBuffer(e))return"buffer";let r=Gd.call(e);return r==="[object ArrayBuffer]"?"arrayBuffer":r==="[object DataView]"?"dataView":Number.isInteger(e.byteLength)&&Number.isInteger(e.byteOffset)&&Gd.call(e.buffer)==="[object ArrayBuffer]"?"typedArray":"others"},{toString:Gd}=Object.prototype,De=class extends Error{name="MaxBufferError";constructor(){super("maxBuffer exceeded")}};var Qe=e=>e,gr=()=>{},Ji=({contents:e})=>e,Xi=e=>{throw new Error(`Streams in object mode are not supported: ${String(e)}`)},Zi=e=>e.length;async function Qi(e,t){return Bt(e,pb,t)}var ob=()=>({contents:[]}),ab=()=>1,cb=(e,{contents:t})=>(t.push(e),t),pb={init:ob,convertChunk:{string:Qe,buffer:Qe,arrayBuffer:Qe,dataView:Qe,typedArray:Qe,others:Qe},getSize:ab,truncateChunk:gr,addChunk:cb,getFinalChunk:gr,finalize:Ji};async function en(e,t){return Bt(e,_b,t)}var db=()=>({contents:new ArrayBuffer(0)}),ub=e=>lb.encode(e),lb=new TextEncoder,Vd=e=>new Uint8Array(e),Wd=e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength),mb=(e,t)=>e.slice(0,t),hb=(e,{contents:t,length:r},i)=>{let n=Yd()?fb(t,i):yb(t,i);return new Uint8Array(n).set(e,r),n},yb=(e,t)=>{if(t<=e.byteLength)return e;let r=new ArrayBuffer(Kd(t));return new Uint8Array(r).set(new Uint8Array(e),0),r},fb=(e,t)=>{if(t<=e.maxByteLength)return e.resize(t),e;let r=new ArrayBuffer(t,{maxByteLength:Kd(t)});return new Uint8Array(r).set(new Uint8Array(e),0),r},Kd=e=>Hd**Math.ceil(Math.log(e)/Math.log(Hd)),Hd=2,gb=({contents:e,length:t})=>Yd()?e:e.slice(0,t),Yd=()=>"resize"in ArrayBuffer.prototype,_b={init:db,convertChunk:{string:ub,buffer:Vd,arrayBuffer:Vd,dataView:Wd,typedArray:Wd,others:Xi},getSize:Zi,truncateChunk:mb,addChunk:hb,getFinalChunk:gr,finalize:gb};async function rn(e,t){return Bt(e,vb,t)}var bb=()=>({contents:"",textDecoder:new TextDecoder}),tn=(e,{textDecoder:t})=>t.decode(e,{stream:!0}),wb=(e,{contents:t})=>t+e,xb=(e,t)=>e.slice(0,t),kb=({textDecoder:e})=>{let t=e.decode();return t===""?void 0:t},vb={init:bb,convertChunk:{string:Qe,buffer:tn,arrayBuffer:tn,dataView:tn,typedArray:tn,others:Xi},getSize:Zi,truncateChunk:xb,addChunk:wb,getFinalChunk:kb,finalize:Ji};Object.assign(fr,{on:Sb,finished:qb});var Jd=({error:e,stream:t,readableObjectMode:r,lines:i,encoding:n,fdNumber:s})=>{if(!(e instanceof De))throw e;if(s==="all")return e;let o=$b(r,i,n);throw e.maxBufferInfo={fdNumber:s,unit:o},t.destroy(),e},$b=(e,t,r)=>e?"objects":t?"lines":r==="buffer"?"bytes":"characters",Xd=(e,t,r)=>{if(t.length!==r)return;let i=new De;throw i.maxBufferInfo={fdNumber:"ipc"},i},Zd=(e,t)=>{let{streamName:r,threshold:i,unit:n}=Ab(e,t);return`Command's ${r} was larger than ${i} ${n}`},Ab=(e,t)=>{if(e?.maxBufferInfo===void 0)return{streamName:"output",threshold:t[1],unit:"bytes"};let{maxBufferInfo:{fdNumber:r,unit:i}}=e;delete e.maxBufferInfo;let n=Ze(t,r);return r==="ipc"?{streamName:"IPC output",threshold:n,unit:"messages"}:{streamName:bi(r),threshold:n,unit:i}},Qd=(e,t,r)=>e?.code==="ENOBUFS"&&t!==null&&t.some(i=>i!==null&&i.length>nn(r)),eu=(e,t,r)=>{if(!t)return e;let i=nn(r);return e.length>i?e.slice(0,i):e},nn=([,e])=>e;var ru=({stdio:e,all:t,ipcOutput:r,originalError:i,signal:n,signalDescription:s,exitCode:o,escapedCommand:a,timedOut:c,isCanceled:d,isGracefullyCanceled:p,isMaxBuffer:u,isForcefullyTerminated:l,forceKillAfterDelay:m,killSignal:h,maxBuffer:f,timeout:x,cwd:w})=>{let v=i?.code,g=Eb({originalError:i,timedOut:c,timeout:x,isMaxBuffer:u,maxBuffer:f,errorCode:v,signal:n,signalDescription:s,exitCode:o,isCanceled:d,isGracefullyCanceled:p,isForcefullyTerminated:l,forceKillAfterDelay:m,killSignal:h}),R=Tb(i,w),S=R===void 0?"":`
128
+ ${e}`};var Yi=(e,t,r)=>{r.cwd=Rd(r.cwd);let[i,n,s]=Ad(e,t,r),{command:o,args:a,options:c}=Dd.default._parse(i,n,s),d=xc(c),p=H_(d);return vd(p),Td(p),Cd(p),zp(p),xd(p),p.shell=_s(p.shell),p.env=K_(p),p.killSignal=Fp(p.killSignal),p.forceKillAfterDelay=Np(p.forceKillAfterDelay),p.lines=p.lines.map((u,l)=>u&&!ye.has(p.encoding)&&p.buffer[l]),jd.platform==="win32"&&W_.basename(o,".exe")==="cmd"&&a.unshift("/q"),{file:o,commandArguments:a,options:p}},H_=({extendEnv:e=!0,preferLocal:t=!1,cwd:r,localDir:i=r,encoding:n="utf8",reject:s=!0,cleanup:o=!0,all:a=!1,windowsHide:c=!0,killSignal:d="SIGTERM",forceKillAfterDelay:p=!0,gracefulCancel:u=!1,ipcInput:l,ipc:m=l!==void 0||u,serialization:h="advanced",...f})=>({...f,extendEnv:e,preferLocal:t,cwd:r,localDirectory:i,encoding:n,reject:s,cleanup:o,all:a,windowsHide:c,killSignal:d,forceKillAfterDelay:p,gracefulCancel:u,ipcInput:l,ipc:m,serialization:h}),K_=({env:e,extendEnv:t,preferLocal:r,node:i,localDirectory:n,nodePath:s})=>{let o=t?{...jd.env,...e}:e;return r||i?Cp({env:o,cwd:n,execPath:s,preferLocal:r,addExecPath:i}):o};var Ji=(e,t,r)=>r.shell&&t.length>0?[[e,...t].join(" "),[],r]:[e,t,r];import{inspect as Cb}from"util";function Ft(e){if(typeof e=="string")return Y_(e);if(!(ArrayBuffer.isView(e)&&e.BYTES_PER_ELEMENT===1))throw new Error("Input must be a string or a Uint8Array");return J_(e)}var Y_=e=>e.at(-1)===Ld?e.slice(0,e.at(-2)===Md?-2:-1):e,J_=e=>e.at(-1)===X_?e.subarray(0,e.at(-2)===Z_?-2:-1):e,Ld=`
129
+ `,X_=Ld.codePointAt(0),Md="\r",Z_=Md.codePointAt(0);import{on as Sb}from"events";import{finished as qb}from"stream/promises";function Ae(e,{checkOpen:t=!0}={}){return e!==null&&typeof e=="object"&&(e.writable||e.readable||!t||e.writable===void 0&&e.readable===void 0)&&typeof e.pipe=="function"}function Hs(e,{checkOpen:t=!0}={}){return Ae(e,{checkOpen:t})&&(e.writable||!t)&&typeof e.write=="function"&&typeof e.end=="function"&&typeof e.writable=="boolean"&&typeof e.writableObjectMode=="boolean"&&typeof e.destroy=="function"&&typeof e.destroyed=="boolean"}function bt(e,{checkOpen:t=!0}={}){return Ae(e,{checkOpen:t})&&(e.readable||!t)&&typeof e.read=="function"&&typeof e.readable=="boolean"&&typeof e.readableObjectMode=="boolean"&&typeof e.destroy=="function"&&typeof e.destroyed=="boolean"}function Ks(e,t){return Hs(e,t)&&bt(e,t)}var Q_=Object.getPrototypeOf(Object.getPrototypeOf(async function*(){}).prototype),Ys=class{#t;#r;#e=!1;#i=void 0;constructor(t,r){this.#t=t,this.#r=r}next(){let t=()=>this.#s();return this.#i=this.#i?this.#i.then(t,t):t(),this.#i}return(t){let r=()=>this.#n(t);return this.#i?this.#i.then(r,r):r()}async#s(){if(this.#e)return{done:!0,value:void 0};let t;try{t=await this.#t.read()}catch(r){throw this.#i=void 0,this.#e=!0,this.#t.releaseLock(),r}return t.done&&(this.#i=void 0,this.#e=!0,this.#t.releaseLock()),t}async#n(t){if(this.#e)return{done:!0,value:t};if(this.#e=!0,!this.#r){let r=this.#t.cancel(t);return this.#t.releaseLock(),await r,{done:!0,value:t}}return this.#t.releaseLock(),{done:!0,value:t}}},Js=Symbol();function Fd(){return this[Js].next()}Object.defineProperty(Fd,"name",{value:"next"});function Bd(e){return this[Js].return(e)}Object.defineProperty(Bd,"name",{value:"return"});var eb=Object.create(Q_,{next:{enumerable:!0,configurable:!0,writable:!0,value:Fd},return:{enumerable:!0,configurable:!0,writable:!0,value:Bd}});function Xs({preventCancel:e=!1}={}){let t=this.getReader(),r=new Ys(t,e),i=Object.create(eb);return i[Js]=r,i}var Ud=e=>{if(bt(e,{checkOpen:!1})&&gr.on!==void 0)return rb(e);if(typeof e?.[Symbol.asyncIterator]=="function")return e;if(tb.call(e)==="[object ReadableStream]")return Xs.call(e);throw new TypeError("The first argument must be a Readable, a ReadableStream, or an async iterable.")},{toString:tb}=Object.prototype,rb=async function*(e){let t=new AbortController,r={};ib(e,t,r);try{for await(let[i]of gr.on(e,"data",{signal:t.signal}))yield i}catch(i){if(r.error!==void 0)throw r.error;if(!t.signal.aborted)throw i}finally{e.destroy()}},ib=async(e,t,r)=>{try{await gr.finished(e,{cleanup:!0,readable:!0,writable:!1,error:!1})}catch(i){r.error=i}finally{t.abort()}},gr={};var Bt=async(e,{init:t,convertChunk:r,getSize:i,truncateChunk:n,addChunk:s,getFinalChunk:o,finalize:a},{maxBuffer:c=Number.POSITIVE_INFINITY}={})=>{let d=Ud(e),p=t();p.length=0;try{for await(let u of d){let l=sb(u),m=r[l](u,p);zd({convertedChunk:m,state:p,getSize:i,truncateChunk:n,addChunk:s,maxBuffer:c})}return nb({state:p,convertChunk:r,getSize:i,truncateChunk:n,addChunk:s,getFinalChunk:o,maxBuffer:c}),a(p)}catch(u){let l=typeof u=="object"&&u!==null?u:new Error(u);throw l.bufferedData=a(p),l}},nb=({state:e,getSize:t,truncateChunk:r,addChunk:i,getFinalChunk:n,maxBuffer:s})=>{let o=n(e);o!==void 0&&zd({convertedChunk:o,state:e,getSize:t,truncateChunk:r,addChunk:i,maxBuffer:s})},zd=({convertedChunk:e,state:t,getSize:r,truncateChunk:i,addChunk:n,maxBuffer:s})=>{let o=r(e),a=t.length+o;if(a<=s){Nd(e,t,n,a);return}let c=i(e,s-t.length);throw c!==void 0&&Nd(c,t,n,s),new De},Nd=(e,t,r,i)=>{t.contents=r(e,t,i),t.length=i},sb=e=>{let t=typeof e;if(t==="string")return"string";if(t!=="object"||e===null)return"others";if(globalThis.Buffer?.isBuffer(e))return"buffer";let r=Gd.call(e);return r==="[object ArrayBuffer]"?"arrayBuffer":r==="[object DataView]"?"dataView":Number.isInteger(e.byteLength)&&Number.isInteger(e.byteOffset)&&Gd.call(e.buffer)==="[object ArrayBuffer]"?"typedArray":"others"},{toString:Gd}=Object.prototype,De=class extends Error{name="MaxBufferError";constructor(){super("maxBuffer exceeded")}};var Qe=e=>e,_r=()=>{},Xi=({contents:e})=>e,Zi=e=>{throw new Error(`Streams in object mode are not supported: ${String(e)}`)},Qi=e=>e.length;async function en(e,t){return Bt(e,pb,t)}var ob=()=>({contents:[]}),ab=()=>1,cb=(e,{contents:t})=>(t.push(e),t),pb={init:ob,convertChunk:{string:Qe,buffer:Qe,arrayBuffer:Qe,dataView:Qe,typedArray:Qe,others:Qe},getSize:ab,truncateChunk:_r,addChunk:cb,getFinalChunk:_r,finalize:Xi};async function tn(e,t){return Bt(e,_b,t)}var db=()=>({contents:new ArrayBuffer(0)}),ub=e=>lb.encode(e),lb=new TextEncoder,Vd=e=>new Uint8Array(e),Wd=e=>new Uint8Array(e.buffer,e.byteOffset,e.byteLength),mb=(e,t)=>e.slice(0,t),hb=(e,{contents:t,length:r},i)=>{let n=Yd()?fb(t,i):yb(t,i);return new Uint8Array(n).set(e,r),n},yb=(e,t)=>{if(t<=e.byteLength)return e;let r=new ArrayBuffer(Kd(t));return new Uint8Array(r).set(new Uint8Array(e),0),r},fb=(e,t)=>{if(t<=e.maxByteLength)return e.resize(t),e;let r=new ArrayBuffer(t,{maxByteLength:Kd(t)});return new Uint8Array(r).set(new Uint8Array(e),0),r},Kd=e=>Hd**Math.ceil(Math.log(e)/Math.log(Hd)),Hd=2,gb=({contents:e,length:t})=>Yd()?e:e.slice(0,t),Yd=()=>"resize"in ArrayBuffer.prototype,_b={init:db,convertChunk:{string:ub,buffer:Vd,arrayBuffer:Vd,dataView:Wd,typedArray:Wd,others:Zi},getSize:Qi,truncateChunk:mb,addChunk:hb,getFinalChunk:_r,finalize:gb};async function nn(e,t){return Bt(e,vb,t)}var bb=()=>({contents:"",textDecoder:new TextDecoder}),rn=(e,{textDecoder:t})=>t.decode(e,{stream:!0}),wb=(e,{contents:t})=>t+e,xb=(e,t)=>e.slice(0,t),kb=({textDecoder:e})=>{let t=e.decode();return t===""?void 0:t},vb={init:bb,convertChunk:{string:Qe,buffer:rn,arrayBuffer:rn,dataView:rn,typedArray:rn,others:Zi},getSize:Qi,truncateChunk:xb,addChunk:wb,getFinalChunk:kb,finalize:Xi};Object.assign(gr,{on:Sb,finished:qb});var Jd=({error:e,stream:t,readableObjectMode:r,lines:i,encoding:n,fdNumber:s})=>{if(!(e instanceof De))throw e;if(s==="all")return e;let o=$b(r,i,n);throw e.maxBufferInfo={fdNumber:s,unit:o},t.destroy(),e},$b=(e,t,r)=>e?"objects":t?"lines":r==="buffer"?"bytes":"characters",Xd=(e,t,r)=>{if(t.length!==r)return;let i=new De;throw i.maxBufferInfo={fdNumber:"ipc"},i},Zd=(e,t)=>{let{streamName:r,threshold:i,unit:n}=Ab(e,t);return`Command's ${r} was larger than ${i} ${n}`},Ab=(e,t)=>{if(e?.maxBufferInfo===void 0)return{streamName:"output",threshold:t[1],unit:"bytes"};let{maxBufferInfo:{fdNumber:r,unit:i}}=e;delete e.maxBufferInfo;let n=Ze(t,r);return r==="ipc"?{streamName:"IPC output",threshold:n,unit:"messages"}:{streamName:wi(r),threshold:n,unit:i}},Qd=(e,t,r)=>e?.code==="ENOBUFS"&&t!==null&&t.some(i=>i!==null&&i.length>sn(r)),eu=(e,t,r)=>{if(!t)return e;let i=sn(r);return e.length>i?e.slice(0,i):e},sn=([,e])=>e;var ru=({stdio:e,all:t,ipcOutput:r,originalError:i,signal:n,signalDescription:s,exitCode:o,escapedCommand:a,timedOut:c,isCanceled:d,isGracefullyCanceled:p,isMaxBuffer:u,isForcefullyTerminated:l,forceKillAfterDelay:m,killSignal:h,maxBuffer:f,timeout:x,cwd:w})=>{let v=i?.code,g=Eb({originalError:i,timedOut:c,timeout:x,isMaxBuffer:u,maxBuffer:f,errorCode:v,signal:n,signalDescription:s,exitCode:o,isCanceled:d,isGracefullyCanceled:p,isForcefullyTerminated:l,forceKillAfterDelay:m,killSignal:h}),R=Tb(i,w),S=R===void 0?"":`
130
130
  ${R}`,U=`${g}: ${a}${S}`,j=t===void 0?[e[2],e[1]]:[t],M=[U,...j,...e.slice(3),r.map(G=>Rb(G)).join(`
131
- `)].map(G=>dr(Ft(Ib(G)))).filter(Boolean).join(`
131
+ `)].map(G=>ur(Ft(Ib(G)))).filter(Boolean).join(`
132
132
 
133
- `);return{originalMessage:R,shortMessage:U,message:M}},Eb=({originalError:e,timedOut:t,timeout:r,isMaxBuffer:i,maxBuffer:n,errorCode:s,signal:o,signalDescription:a,exitCode:c,isCanceled:d,isGracefullyCanceled:p,isForcefullyTerminated:u,forceKillAfterDelay:l,killSignal:m})=>{let h=Pb(u,l);return t?`Command timed out after ${r} milliseconds${h}`:p?o===void 0?`Command was gracefully canceled with exit code ${c}`:u?`Command was gracefully canceled${h}`:`Command was gracefully canceled with ${o} (${a})`:d?`Command was canceled${h}`:i?`${Zd(e,n)}${h}`:s!==void 0?`Command failed with ${s}${h}`:u?`Command was killed with ${m} (${Ii(m)})${h}`:o!==void 0?`Command was killed with ${o} (${a})`:c!==void 0?`Command failed with exit code ${c}`:"Command failed"},Pb=(e,t)=>e?` and was forcefully terminated after ${t} milliseconds`:"",Tb=(e,t)=>{if(e instanceof qe)return;let r=Tp(e)?e.originalMessage:String(e?.message??e),i=dr(Od(r,t));return i===""?void 0:i},Rb=e=>typeof e=="string"?e:Cb(e),Ib=e=>Array.isArray(e)?e.map(t=>Ft(tu(t))).filter(Boolean).join(`
134
- `):tu(e),tu=e=>typeof e=="string"?e:Q(e)?gi(e):"";var sn=({command:e,escapedCommand:t,stdio:r,all:i,ipcOutput:n,options:{cwd:s},startTime:o})=>iu({command:e,escapedCommand:t,cwd:s,durationMs:$s(o),failed:!1,timedOut:!1,isCanceled:!1,isGracefullyCanceled:!1,isTerminated:!1,isMaxBuffer:!1,isForcefullyTerminated:!1,exitCode:0,stdout:r[1],stderr:r[2],all:i,stdio:r,ipcOutput:n,pipedFrom:[]}),Ut=({error:e,command:t,escapedCommand:r,fileDescriptors:i,options:n,startTime:s,isSync:o})=>_r({error:e,command:t,escapedCommand:r,startTime:s,timedOut:!1,isCanceled:!1,isGracefullyCanceled:!1,isMaxBuffer:!1,isForcefullyTerminated:!1,stdio:Array.from({length:i.length}),ipcOutput:[],options:n,isSync:o}),_r=({error:e,command:t,escapedCommand:r,startTime:i,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isMaxBuffer:a,isForcefullyTerminated:c,exitCode:d,signal:p,stdio:u,all:l,ipcOutput:m,options:{timeoutDuration:h,timeout:f=h,forceKillAfterDelay:x,killSignal:w,cwd:v,maxBuffer:g},isSync:R})=>{let{exitCode:S,signal:U,signalDescription:j}=jb(d,p),{originalMessage:M,shortMessage:G,message:H}=ru({stdio:u,all:l,ipcOutput:m,originalError:e,signal:U,signalDescription:j,exitCode:S,escapedCommand:r,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isMaxBuffer:a,isForcefullyTerminated:c,forceKillAfterDelay:x,killSignal:w,maxBuffer:g,timeout:f,cwd:v}),$=Ep(e,H,R);return Object.assign($,Ob({error:$,command:t,escapedCommand:r,startTime:i,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isMaxBuffer:a,isForcefullyTerminated:c,exitCode:S,signal:U,signalDescription:j,stdio:u,all:l,ipcOutput:m,cwd:v,originalMessage:M,shortMessage:G})),$},Ob=({error:e,command:t,escapedCommand:r,startTime:i,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isMaxBuffer:a,isForcefullyTerminated:c,exitCode:d,signal:p,signalDescription:u,stdio:l,all:m,ipcOutput:h,cwd:f,originalMessage:x,shortMessage:w})=>iu({shortMessage:w,originalMessage:x,command:t,escapedCommand:r,cwd:f,durationMs:$s(i),failed:!0,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isTerminated:p!==void 0,isMaxBuffer:a,isForcefullyTerminated:c,exitCode:d,signal:p,signalDescription:u,code:e.cause?.code,stdout:l[1],stderr:l[2],all:m,stdio:l,ipcOutput:h,pipedFrom:[]}),iu=e=>Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0)),jb=(e,t)=>{let r=e===null?void 0:e,i=t===null?void 0:t,n=i===void 0?void 0:Ii(t);return{exitCode:r,signal:i,signalDescription:n}};var nu=e=>Number.isFinite(e)?e:0;function Db(e){return{days:Math.trunc(e/864e5),hours:Math.trunc(e/36e5%24),minutes:Math.trunc(e/6e4%60),seconds:Math.trunc(e/1e3%60),milliseconds:Math.trunc(e%1e3),microseconds:Math.trunc(nu(e*1e3)%1e3),nanoseconds:Math.trunc(nu(e*1e6)%1e3)}}function Lb(e){return{days:e/86400000n,hours:e/3600000n%24n,minutes:e/60000n%60n,seconds:e/1000n%60n,milliseconds:e%1000n,microseconds:0n,nanoseconds:0n}}function Zs(e){switch(typeof e){case"number":{if(Number.isFinite(e))return Db(e);break}case"bigint":return Lb(e)}throw new TypeError("Expected a finite number or bigint")}var Mb=e=>e===0||e===0n,Fb=(e,t)=>t===1||t===1n?e:`${e}s`,Bb=1e-7,Ub=24n*60n*60n*1000n;function Qs(e,t){let r=typeof e=="bigint";if(!r&&!Number.isFinite(e))throw new TypeError("Expected a finite number or bigint");t={...t};let i=e<0?"-":"";e=e<0?-e:e,t.colonNotation&&(t.compact=!1,t.formatSubMilliseconds=!1,t.separateMilliseconds=!1,t.verbose=!1),t.compact&&(t.unitCount=1,t.secondsDecimalDigits=0,t.millisecondsDecimalDigits=0);let n=[],s=(p,u)=>{let l=Math.floor(p*10**u+Bb);return(Math.round(l)/10**u).toFixed(u)},o=(p,u,l,m)=>{if(!((n.length===0||!t.colonNotation)&&Mb(p)&&!(t.colonNotation&&l==="m"))){if(m??=String(p),t.colonNotation){let h=m.includes(".")?m.split(".")[0].length:m.length,f=n.length>0?2:1;m="0".repeat(Math.max(0,f-h))+m}else m+=t.verbose?" "+Fb(u,p):l;n.push(m)}},a=Zs(e),c=BigInt(a.days);if(t.hideYearAndDays?o(BigInt(c)*24n+BigInt(a.hours),"hour","h"):(t.hideYear?o(c,"day","d"):(o(c/365n,"year","y"),o(c%365n,"day","d")),o(Number(a.hours),"hour","h")),o(Number(a.minutes),"minute","m"),!t.hideSeconds)if(t.separateMilliseconds||t.formatSubMilliseconds||!t.colonNotation&&e<1e3&&!t.subSecondsAsDecimals){let p=Number(a.seconds),u=Number(a.milliseconds),l=Number(a.microseconds),m=Number(a.nanoseconds);if(o(p,"second","s"),t.formatSubMilliseconds)o(u,"millisecond","ms"),o(l,"microsecond","\xB5s"),o(m,"nanosecond","ns");else{let h=u+l/1e3+m/1e6,f=typeof t.millisecondsDecimalDigits=="number"?t.millisecondsDecimalDigits:0,x=h>=1?Math.round(h):Math.ceil(h),w=f?h.toFixed(f):x;o(Number.parseFloat(w),"millisecond","ms",w)}}else{let p=(r?Number(e%Ub):e)/1e3%60,u=typeof t.secondsDecimalDigits=="number"?t.secondsDecimalDigits:1,l=s(p,u),m=t.keepDecimalsOnWholeSeconds?l:l.replace(/\.0+$/,"");o(Number.parseFloat(m),"second","s",m)}if(n.length===0)return i+"0"+(t.verbose?" milliseconds":"ms");let d=t.colonNotation?":":" ";return typeof t.unitCount=="number"&&(n=n.slice(0,Math.max(t.unitCount,1))),i+n.join(d)}var su=(e,t)=>{e.failed&&Ie({type:"error",verboseMessage:e.shortMessage,verboseInfo:t,result:e})};var ou=(e,t)=>{Rt(t)&&(su(e,t),Nb(e,t))},Nb=(e,t)=>{let r=`(done in ${Qs(e.durationMs)})`;Ie({type:"duration",verboseMessage:r,verboseInfo:t,result:e})};var Nt=(e,t,{reject:r})=>{if(ou(e,t),e.failed&&r)throw e;return e};import{readFileSync as Iu}from"fs";var pu=(e,t)=>wt(e)?"asyncGenerator":lu(e)?"generator":on(e)?"fileUrl":Hb(e)?"filePath":Jb(e)?"webStream":Ae(e,{checkOpen:!1})?"native":Q(e)?"uint8Array":Xb(e)?"asyncIterable":Zb(e)?"iterable":ro(e)?du({transform:e},t):Wb(e)?Gb(e,t):"native",Gb=(e,t)=>Ks(e.transform,{checkOpen:!1})?zb(e,t):ro(e.transform)?du(e,t):Vb(e,t),zb=(e,t)=>(uu(e,t,"Duplex stream"),"duplex"),du=(e,t)=>(uu(e,t,"web TransformStream"),"webTransform"),uu=({final:e,binary:t,objectMode:r},i,n)=>{au(e,`${i}.final`,n),au(t,`${i}.binary`,n),eo(r,`${i}.objectMode`)},au=(e,t,r)=>{if(e!==void 0)throw new TypeError(`The \`${t}\` option can only be defined when using a generator, not a ${r}.`)},Vb=({transform:e,final:t,binary:r,objectMode:i},n)=>{if(e!==void 0&&!cu(e))throw new TypeError(`The \`${n}.transform\` option must be a generator, a Duplex stream or a web TransformStream.`);if(Ks(t,{checkOpen:!1}))throw new TypeError(`The \`${n}.final\` option must not be a Duplex stream.`);if(ro(t))throw new TypeError(`The \`${n}.final\` option must not be a web TransformStream.`);if(t!==void 0&&!cu(t))throw new TypeError(`The \`${n}.final\` option must be a generator.`);return eo(r,`${n}.binary`),eo(i,`${n}.objectMode`),wt(e)||wt(t)?"asyncGenerator":"generator"},eo=(e,t)=>{if(e!==void 0&&typeof e!="boolean")throw new TypeError(`The \`${t}\` option must use a boolean.`)},cu=e=>wt(e)||lu(e),wt=e=>Object.prototype.toString.call(e)==="[object AsyncGeneratorFunction]",lu=e=>Object.prototype.toString.call(e)==="[object GeneratorFunction]",Wb=e=>Y(e)&&(e.transform!==void 0||e.final!==void 0),on=e=>Object.prototype.toString.call(e)==="[object URL]",mu=e=>on(e)&&e.protocol!=="file:",Hb=e=>Y(e)&&Object.keys(e).length>0&&Object.keys(e).every(t=>Kb.has(t))&&to(e.file),Kb=new Set(["file","append"]),to=e=>typeof e=="string",hu=(e,t)=>e==="native"&&typeof t=="string"&&!Yb.has(t),Yb=new Set(["ipc","ignore","inherit","overlapped","pipe"]),yu=e=>Object.prototype.toString.call(e)==="[object ReadableStream]",an=e=>Object.prototype.toString.call(e)==="[object WritableStream]",Jb=e=>yu(e)||an(e),ro=e=>yu(e?.readable)&&an(e?.writable),Xb=e=>fu(e)&&typeof e[Symbol.asyncIterator]=="function",Zb=e=>fu(e)&&typeof e[Symbol.iterator]=="function",fu=e=>typeof e=="object"&&e!==null,ke=new Set(["generator","asyncGenerator","duplex","webTransform"]),cn=new Set(["fileUrl","filePath","fileNumber"]),io=new Set(["fileUrl","filePath"]),gu=new Set([...io,"webStream","nodeStream"]),_u=new Set(["webTransform","duplex"]),ct={generator:"a generator",asyncGenerator:"an async generator",fileUrl:"a file URL",filePath:"a file path string",fileNumber:"a file descriptor number",webStream:"a web stream",nodeStream:"a Node.js stream",webTransform:"a web TransformStream",duplex:"a Duplex stream",native:"any value",iterable:"an iterable",asyncIterable:"an async iterable",string:"a string",uint8Array:"a Uint8Array"};var no=(e,t,r,i)=>i==="output"?Qb(e,t,r):ew(e,t,r),Qb=(e,t,r)=>{let i=t!==0&&r[t-1].value.readableObjectMode;return{writableObjectMode:i,readableObjectMode:e??i}},ew=(e,t,r)=>{let i=t===0?e===!0:r[t-1].value.readableObjectMode,n=t!==r.length-1&&(e??i);return{writableObjectMode:i,readableObjectMode:n}},bu=(e,t)=>{let r=e.findLast(({type:i})=>ke.has(i));return r===void 0?!1:t==="input"?r.value.writableObjectMode:r.value.readableObjectMode};var wu=(e,t,r,i)=>[...e.filter(({type:n})=>!ke.has(n)),...tw(e,t,r,i)],tw=(e,t,r,{encoding:i})=>{let n=e.filter(({type:o})=>ke.has(o)),s=Array.from({length:n.length});for(let[o,a]of Object.entries(n))s[o]=rw({stdioItem:a,index:Number(o),newTransforms:s,optionName:t,direction:r,encoding:i});return ow(s,r)},rw=({stdioItem:e,stdioItem:{type:t},index:r,newTransforms:i,optionName:n,direction:s,encoding:o})=>t==="duplex"?iw({stdioItem:e,optionName:n}):t==="webTransform"?nw({stdioItem:e,index:r,newTransforms:i,direction:s}):sw({stdioItem:e,index:r,newTransforms:i,direction:s,encoding:o}),iw=({stdioItem:e,stdioItem:{value:{transform:t,transform:{writableObjectMode:r,readableObjectMode:i},objectMode:n=i}},optionName:s})=>{if(n&&!i)throw new TypeError(`The \`${s}.objectMode\` option can only be \`true\` if \`new Duplex({objectMode: true})\` is used.`);if(!n&&i)throw new TypeError(`The \`${s}.objectMode\` option cannot be \`false\` if \`new Duplex({objectMode: true})\` is used.`);return{...e,value:{transform:t,writableObjectMode:r,readableObjectMode:i}}},nw=({stdioItem:e,stdioItem:{value:t},index:r,newTransforms:i,direction:n})=>{let{transform:s,objectMode:o}=Y(t)?t:{transform:t},{writableObjectMode:a,readableObjectMode:c}=no(o,r,i,n);return{...e,value:{transform:s,writableObjectMode:a,readableObjectMode:c}}},sw=({stdioItem:e,stdioItem:{value:t},index:r,newTransforms:i,direction:n,encoding:s})=>{let{transform:o,final:a,binary:c=!1,preserveNewlines:d=!1,objectMode:p}=Y(t)?t:{transform:t},u=c||ye.has(s),{writableObjectMode:l,readableObjectMode:m}=no(p,r,i,n);return{...e,value:{transform:o,final:a,binary:u,preserveNewlines:d,writableObjectMode:l,readableObjectMode:m}}},ow=(e,t)=>t==="input"?e.reverse():e;import so from"process";var xu=(e,t,r)=>{let i=e.map(n=>aw(n,t));if(i.includes("input")&&i.includes("output"))throw new TypeError(`The \`${r}\` option must not be an array of both readable and writable values.`);return i.find(Boolean)??dw},aw=({type:e,value:t},r)=>cw[r]??ku[e](t),cw=["input","output","output"],Gt=()=>{},oo=()=>"input",ku={generator:Gt,asyncGenerator:Gt,fileUrl:Gt,filePath:Gt,iterable:oo,asyncIterable:oo,uint8Array:oo,webStream:e=>an(e)?"output":"input",nodeStream(e){return bt(e,{checkOpen:!1})?Hs(e,{checkOpen:!1})?void 0:"input":"output"},webTransform:Gt,duplex:Gt,native(e){let t=pw(e);if(t!==void 0)return t;if(Ae(e,{checkOpen:!1}))return ku.nodeStream(e)}},pw=e=>{if([0,so.stdin].includes(e))return"input";if([1,2,so.stdout,so.stderr].includes(e))return"output"},dw="output";var vu=(e,t)=>t&&!e.includes("ipc")?[...e,"ipc"]:e;var Su=({stdio:e,ipc:t,buffer:r,...i},n,s)=>{let o=uw(e,i).map((a,c)=>qu(a,c));return s?mw(o,r,n):vu(o,t)},uw=(e,t)=>{if(e===void 0)return xe.map(i=>t[i]);if(lw(t))throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${xe.map(i=>`\`${i}\``).join(", ")}`);if(typeof e=="string")return[e,e,e];if(!Array.isArray(e))throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof e}\``);let r=Math.max(e.length,xe.length);return Array.from({length:r},(i,n)=>e[n])},lw=e=>xe.some(t=>e[t]!==void 0),qu=(e,t)=>Array.isArray(e)?e.map(r=>qu(r,t)):e??(t>=xe.length?"ignore":"pipe"),mw=(e,t,r)=>e.map((i,n)=>!t[n]&&n!==0&&!It(r,n)&&hw(i)?"ignore":i),hw=e=>e==="pipe"||Array.isArray(e)&&e.every(t=>t==="pipe");import{readFileSync as yw}from"fs";import fw from"tty";var Au=({stdioItem:e,stdioItem:{type:t},isStdioArray:r,fdNumber:i,direction:n,isSync:s})=>!r||t!=="native"?e:s?gw({stdioItem:e,fdNumber:i,direction:n}):ww({stdioItem:e,fdNumber:i}),gw=({stdioItem:e,stdioItem:{value:t,optionName:r},fdNumber:i,direction:n})=>{let s=_w({value:t,optionName:r,fdNumber:i,direction:n});if(s!==void 0)return s;if(Ae(t,{checkOpen:!1}))throw new TypeError(`The \`${r}: Stream\` option cannot both be an array and include a stream with synchronous methods.`);return e},_w=({value:e,optionName:t,fdNumber:r,direction:i})=>{let n=bw(e,r);if(n!==void 0){if(i==="output")return{type:"fileNumber",value:n,optionName:t};if(fw.isatty(n))throw new TypeError(`The \`${t}: ${Di(e)}\` option is invalid: it cannot be a TTY with synchronous methods.`);return{type:"uint8Array",value:Xe(yw(n)),optionName:t}}},bw=(e,t)=>{if(e==="inherit")return t;if(typeof e=="number")return e;let r=_i.indexOf(e);if(r!==-1)return r},ww=({stdioItem:e,stdioItem:{value:t,optionName:r},fdNumber:i})=>t==="inherit"?{type:"nodeStream",value:$u(i,t,r),optionName:r}:typeof t=="number"?{type:"nodeStream",value:$u(t,t,r),optionName:r}:Ae(t,{checkOpen:!1})?{type:"nodeStream",value:t,optionName:r}:e,$u=(e,t,r)=>{let i=_i[e];if(i===void 0)throw new TypeError(`The \`${r}: ${t}\` option is invalid: no such standard stream.`);return i};var Cu=({input:e,inputFile:t},r)=>r===0?[...xw(e),...vw(t)]:[],xw=e=>e===void 0?[]:[{type:kw(e),value:e,optionName:"input"}],kw=e=>{if(bt(e,{checkOpen:!1}))return"nodeStream";if(typeof e=="string")return"string";if(Q(e))return"uint8Array";throw new Error("The `input` option must be a string, a Uint8Array or a Node.js Readable stream.")},vw=e=>e===void 0?[]:[{...Sw(e),optionName:"inputFile"}],Sw=e=>{if(on(e))return{type:"fileUrl",value:e};if(to(e))return{type:"filePath",value:{file:e}};throw new Error("The `inputFile` option must be a file path string or a file URL.")};var Eu=e=>e.filter((t,r)=>e.every((i,n)=>t.value!==i.value||r>=n||t.type==="generator"||t.type==="asyncGenerator")),Pu=({stdioItem:{type:e,value:t,optionName:r},direction:i,fileDescriptors:n,isSync:s})=>{let o=qw(n,e);if(o.length!==0){if(s){$w({otherStdioItems:o,type:e,value:t,optionName:r,direction:i});return}if(gu.has(e))return Tu({otherStdioItems:o,type:e,value:t,optionName:r,direction:i});_u.has(e)&&Cw({otherStdioItems:o,type:e,value:t,optionName:r})}},qw=(e,t)=>e.flatMap(({direction:r,stdioItems:i})=>i.filter(n=>n.type===t).map((n=>({...n,direction:r})))),$w=({otherStdioItems:e,type:t,value:r,optionName:i,direction:n})=>{io.has(t)&&Tu({otherStdioItems:e,type:t,value:r,optionName:i,direction:n})},Tu=({otherStdioItems:e,type:t,value:r,optionName:i,direction:n})=>{let s=e.filter(a=>Aw(a,r));if(s.length===0)return;let o=s.find(a=>a.direction!==n);return Ru(o,i,t),n==="output"?s[0].stream:void 0},Aw=({type:e,value:t},r)=>e==="filePath"?t.file===r.file:e==="fileUrl"?t.href===r.href:t===r,Cw=({otherStdioItems:e,type:t,value:r,optionName:i})=>{let n=e.find(({value:{transform:s}})=>s===r.transform);Ru(n,i,t)},Ru=(e,t,r)=>{if(e!==void 0)throw new TypeError(`The \`${e.optionName}\` and \`${t}\` options must not target ${ct[r]} that is the same.`)};var pn=(e,t,r,i)=>{let s=Su(t,r,i).map((a,c)=>Ew({stdioOption:a,fdNumber:c,options:t,isSync:i})),o=Lw({initialFileDescriptors:s,addProperties:e,options:t,isSync:i});return t.stdio=o.map(({stdioItems:a})=>Bw(a)),o},Ew=({stdioOption:e,fdNumber:t,options:r,isSync:i})=>{let n=bi(t),{stdioItems:s,isStdioArray:o}=Pw({stdioOption:e,fdNumber:t,options:r,optionName:n}),a=xu(s,t,n),c=s.map(u=>Au({stdioItem:u,isStdioArray:o,fdNumber:t,direction:a,isSync:i})),d=wu(c,n,a,r),p=bu(d,a);return Dw(d,p),{direction:a,objectMode:p,stdioItems:d}},Pw=({stdioOption:e,fdNumber:t,options:r,optionName:i})=>{let s=[...(Array.isArray(e)?e:[e]).map(c=>Tw(c,i)),...Cu(r,t)],o=Eu(s),a=o.length>1;return Rw(o,a,i),Ow(o),{stdioItems:o,isStdioArray:a}},Tw=(e,t)=>({type:pu(e,t),value:e,optionName:t}),Rw=(e,t,r)=>{if(e.length===0)throw new TypeError(`The \`${r}\` option must not be an empty array.`);if(t){for(let{value:i,optionName:n}of e)if(Iw.has(i))throw new Error(`The \`${n}\` option must not include \`${i}\`.`)}},Iw=new Set(["ignore","ipc"]),Ow=e=>{for(let t of e)jw(t)},jw=({type:e,value:t,optionName:r})=>{if(mu(t))throw new TypeError(`The \`${r}: URL\` option must use the \`file:\` scheme.
135
- For example, you can use the \`pathToFileURL()\` method of the \`url\` core module.`);if(hu(e,t))throw new TypeError(`The \`${r}: { file: '...' }\` option must be used instead of \`${r}: '...'\`.`)},Dw=(e,t)=>{if(!t)return;let r=e.find(({type:i})=>cn.has(i));if(r!==void 0)throw new TypeError(`The \`${r.optionName}\` option cannot use both files and transforms in objectMode.`)},Lw=({initialFileDescriptors:e,addProperties:t,options:r,isSync:i})=>{let n=[];try{for(let s of e)n.push(Mw({fileDescriptor:s,fileDescriptors:n,addProperties:t,options:r,isSync:i}));return n}catch(s){throw ao(n),s}},Mw=({fileDescriptor:{direction:e,objectMode:t,stdioItems:r},fileDescriptors:i,addProperties:n,options:s,isSync:o})=>{let a=r.map(c=>Fw({stdioItem:c,addProperties:n,direction:e,options:s,fileDescriptors:i,isSync:o}));return{direction:e,objectMode:t,stdioItems:a}},Fw=({stdioItem:e,addProperties:t,direction:r,options:i,fileDescriptors:n,isSync:s})=>{let o=Pu({stdioItem:e,direction:r,fileDescriptors:n,isSync:s});return o!==void 0?{...e,stream:o}:{...e,...t[r][e.type](e,i)}},ao=e=>{for(let{stdioItems:t}of e)for(let{stream:r}of t)r!==void 0&&!Se(r)&&r.destroy()},Bw=e=>{if(e.length>1)return e.some(({value:i})=>i==="overlapped")?"overlapped":"pipe";let[{type:t,value:r}]=e;return t==="native"?r:"pipe"};var ju=(e,t)=>pn(Nw,e,t,!0),Le=({type:e,optionName:t})=>{Du(t,ct[e])},Uw=({optionName:e,value:t})=>((t==="ipc"||t==="overlapped")&&Du(e,`"${t}"`),{}),Du=(e,t)=>{throw new TypeError(`The \`${e}\` option cannot be ${t} with synchronous methods.`)},Ou={generator(){},asyncGenerator:Le,webStream:Le,nodeStream:Le,webTransform:Le,duplex:Le,asyncIterable:Le,native:Uw},Nw={input:{...Ou,fileUrl:({value:e})=>({contents:[Xe(Iu(e))]}),filePath:({value:{file:e}})=>({contents:[Xe(Iu(e))]}),fileNumber:Le,iterable:({value:e})=>({contents:[...e]}),string:({value:e})=>({contents:[e]}),uint8Array:({value:e})=>({contents:[e]})},output:{...Ou,fileUrl:({value:e})=>({path:e}),filePath:({value:{file:e,append:t}})=>({path:e,append:t}),fileNumber:({value:e})=>({path:e}),iterable:Le,string:Le,uint8Array:Le}};var et=(e,{stripFinalNewline:t},r)=>co(t,r)&&e!==void 0&&!Array.isArray(e)?Ft(e):e,co=(e,t)=>t==="all"?e[1]||e[2]:e[t];import{Transform as px,getDefaultHighWaterMark as Hu}from"stream";var dn=(e,t,r,i)=>e||r?void 0:Mu(t,i),uo=(e,t,r)=>r?e.flatMap(i=>Lu(i,t)):Lu(e,t),Lu=(e,t)=>{let{transform:r,final:i}=Mu(t,{});return[...r(e),...i()]},Mu=(e,t)=>(t.previousChunks="",{transform:Gw.bind(void 0,t,e),final:Vw.bind(void 0,t)}),Gw=function*(e,t,r){if(typeof r!="string"){yield r;return}let{previousChunks:i}=e,n=-1;for(let s=0;s<r.length;s+=1)if(r[s]===`
133
+ `);return{originalMessage:R,shortMessage:U,message:M}},Eb=({originalError:e,timedOut:t,timeout:r,isMaxBuffer:i,maxBuffer:n,errorCode:s,signal:o,signalDescription:a,exitCode:c,isCanceled:d,isGracefullyCanceled:p,isForcefullyTerminated:u,forceKillAfterDelay:l,killSignal:m})=>{let h=Pb(u,l);return t?`Command timed out after ${r} milliseconds${h}`:p?o===void 0?`Command was gracefully canceled with exit code ${c}`:u?`Command was gracefully canceled${h}`:`Command was gracefully canceled with ${o} (${a})`:d?`Command was canceled${h}`:i?`${Zd(e,n)}${h}`:s!==void 0?`Command failed with ${s}${h}`:u?`Command was killed with ${m} (${Oi(m)})${h}`:o!==void 0?`Command was killed with ${o} (${a})`:c!==void 0?`Command failed with exit code ${c}`:"Command failed"},Pb=(e,t)=>e?` and was forcefully terminated after ${t} milliseconds`:"",Tb=(e,t)=>{if(e instanceof qe)return;let r=Tp(e)?e.originalMessage:String(e?.message??e),i=ur(Od(r,t));return i===""?void 0:i},Rb=e=>typeof e=="string"?e:Cb(e),Ib=e=>Array.isArray(e)?e.map(t=>Ft(tu(t))).filter(Boolean).join(`
134
+ `):tu(e),tu=e=>typeof e=="string"?e:Q(e)?_i(e):"";var on=({command:e,escapedCommand:t,stdio:r,all:i,ipcOutput:n,options:{cwd:s},startTime:o})=>iu({command:e,escapedCommand:t,cwd:s,durationMs:$s(o),failed:!1,timedOut:!1,isCanceled:!1,isGracefullyCanceled:!1,isTerminated:!1,isMaxBuffer:!1,isForcefullyTerminated:!1,exitCode:0,stdout:r[1],stderr:r[2],all:i,stdio:r,ipcOutput:n,pipedFrom:[]}),Ut=({error:e,command:t,escapedCommand:r,fileDescriptors:i,options:n,startTime:s,isSync:o})=>br({error:e,command:t,escapedCommand:r,startTime:s,timedOut:!1,isCanceled:!1,isGracefullyCanceled:!1,isMaxBuffer:!1,isForcefullyTerminated:!1,stdio:Array.from({length:i.length}),ipcOutput:[],options:n,isSync:o}),br=({error:e,command:t,escapedCommand:r,startTime:i,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isMaxBuffer:a,isForcefullyTerminated:c,exitCode:d,signal:p,stdio:u,all:l,ipcOutput:m,options:{timeoutDuration:h,timeout:f=h,forceKillAfterDelay:x,killSignal:w,cwd:v,maxBuffer:g},isSync:R})=>{let{exitCode:S,signal:U,signalDescription:j}=jb(d,p),{originalMessage:M,shortMessage:G,message:H}=ru({stdio:u,all:l,ipcOutput:m,originalError:e,signal:U,signalDescription:j,exitCode:S,escapedCommand:r,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isMaxBuffer:a,isForcefullyTerminated:c,forceKillAfterDelay:x,killSignal:w,maxBuffer:g,timeout:f,cwd:v}),$=Ep(e,H,R);return Object.assign($,Ob({error:$,command:t,escapedCommand:r,startTime:i,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isMaxBuffer:a,isForcefullyTerminated:c,exitCode:S,signal:U,signalDescription:j,stdio:u,all:l,ipcOutput:m,cwd:v,originalMessage:M,shortMessage:G})),$},Ob=({error:e,command:t,escapedCommand:r,startTime:i,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isMaxBuffer:a,isForcefullyTerminated:c,exitCode:d,signal:p,signalDescription:u,stdio:l,all:m,ipcOutput:h,cwd:f,originalMessage:x,shortMessage:w})=>iu({shortMessage:w,originalMessage:x,command:t,escapedCommand:r,cwd:f,durationMs:$s(i),failed:!0,timedOut:n,isCanceled:s,isGracefullyCanceled:o,isTerminated:p!==void 0,isMaxBuffer:a,isForcefullyTerminated:c,exitCode:d,signal:p,signalDescription:u,code:e.cause?.code,stdout:l[1],stderr:l[2],all:m,stdio:l,ipcOutput:h,pipedFrom:[]}),iu=e=>Object.fromEntries(Object.entries(e).filter(([,t])=>t!==void 0)),jb=(e,t)=>{let r=e===null?void 0:e,i=t===null?void 0:t,n=i===void 0?void 0:Oi(t);return{exitCode:r,signal:i,signalDescription:n}};var nu=e=>Number.isFinite(e)?e:0;function Db(e){return{days:Math.trunc(e/864e5),hours:Math.trunc(e/36e5%24),minutes:Math.trunc(e/6e4%60),seconds:Math.trunc(e/1e3%60),milliseconds:Math.trunc(e%1e3),microseconds:Math.trunc(nu(e*1e3)%1e3),nanoseconds:Math.trunc(nu(e*1e6)%1e3)}}function Lb(e){return{days:e/86400000n,hours:e/3600000n%24n,minutes:e/60000n%60n,seconds:e/1000n%60n,milliseconds:e%1000n,microseconds:0n,nanoseconds:0n}}function Zs(e){switch(typeof e){case"number":{if(Number.isFinite(e))return Db(e);break}case"bigint":return Lb(e)}throw new TypeError("Expected a finite number or bigint")}var Mb=e=>e===0||e===0n,Fb=(e,t)=>t===1||t===1n?e:`${e}s`,Bb=1e-7,Ub=24n*60n*60n*1000n;function Qs(e,t){let r=typeof e=="bigint";if(!r&&!Number.isFinite(e))throw new TypeError("Expected a finite number or bigint");t={...t};let i=e<0?"-":"";e=e<0?-e:e,t.colonNotation&&(t.compact=!1,t.formatSubMilliseconds=!1,t.separateMilliseconds=!1,t.verbose=!1),t.compact&&(t.unitCount=1,t.secondsDecimalDigits=0,t.millisecondsDecimalDigits=0);let n=[],s=(p,u)=>{let l=Math.floor(p*10**u+Bb);return(Math.round(l)/10**u).toFixed(u)},o=(p,u,l,m)=>{if(!((n.length===0||!t.colonNotation)&&Mb(p)&&!(t.colonNotation&&l==="m"))){if(m??=String(p),t.colonNotation){let h=m.includes(".")?m.split(".")[0].length:m.length,f=n.length>0?2:1;m="0".repeat(Math.max(0,f-h))+m}else m+=t.verbose?" "+Fb(u,p):l;n.push(m)}},a=Zs(e),c=BigInt(a.days);if(t.hideYearAndDays?o(BigInt(c)*24n+BigInt(a.hours),"hour","h"):(t.hideYear?o(c,"day","d"):(o(c/365n,"year","y"),o(c%365n,"day","d")),o(Number(a.hours),"hour","h")),o(Number(a.minutes),"minute","m"),!t.hideSeconds)if(t.separateMilliseconds||t.formatSubMilliseconds||!t.colonNotation&&e<1e3&&!t.subSecondsAsDecimals){let p=Number(a.seconds),u=Number(a.milliseconds),l=Number(a.microseconds),m=Number(a.nanoseconds);if(o(p,"second","s"),t.formatSubMilliseconds)o(u,"millisecond","ms"),o(l,"microsecond","\xB5s"),o(m,"nanosecond","ns");else{let h=u+l/1e3+m/1e6,f=typeof t.millisecondsDecimalDigits=="number"?t.millisecondsDecimalDigits:0,x=h>=1?Math.round(h):Math.ceil(h),w=f?h.toFixed(f):x;o(Number.parseFloat(w),"millisecond","ms",w)}}else{let p=(r?Number(e%Ub):e)/1e3%60,u=typeof t.secondsDecimalDigits=="number"?t.secondsDecimalDigits:1,l=s(p,u),m=t.keepDecimalsOnWholeSeconds?l:l.replace(/\.0+$/,"");o(Number.parseFloat(m),"second","s",m)}if(n.length===0)return i+"0"+(t.verbose?" milliseconds":"ms");let d=t.colonNotation?":":" ";return typeof t.unitCount=="number"&&(n=n.slice(0,Math.max(t.unitCount,1))),i+n.join(d)}var su=(e,t)=>{e.failed&&Ie({type:"error",verboseMessage:e.shortMessage,verboseInfo:t,result:e})};var ou=(e,t)=>{Rt(t)&&(su(e,t),Nb(e,t))},Nb=(e,t)=>{let r=`(done in ${Qs(e.durationMs)})`;Ie({type:"duration",verboseMessage:r,verboseInfo:t,result:e})};var Nt=(e,t,{reject:r})=>{if(ou(e,t),e.failed&&r)throw e;return e};import{readFileSync as Iu}from"fs";var pu=(e,t)=>wt(e)?"asyncGenerator":lu(e)?"generator":an(e)?"fileUrl":Hb(e)?"filePath":Jb(e)?"webStream":Ae(e,{checkOpen:!1})?"native":Q(e)?"uint8Array":Xb(e)?"asyncIterable":Zb(e)?"iterable":ro(e)?du({transform:e},t):Wb(e)?Gb(e,t):"native",Gb=(e,t)=>Ks(e.transform,{checkOpen:!1})?zb(e,t):ro(e.transform)?du(e,t):Vb(e,t),zb=(e,t)=>(uu(e,t,"Duplex stream"),"duplex"),du=(e,t)=>(uu(e,t,"web TransformStream"),"webTransform"),uu=({final:e,binary:t,objectMode:r},i,n)=>{au(e,`${i}.final`,n),au(t,`${i}.binary`,n),eo(r,`${i}.objectMode`)},au=(e,t,r)=>{if(e!==void 0)throw new TypeError(`The \`${t}\` option can only be defined when using a generator, not a ${r}.`)},Vb=({transform:e,final:t,binary:r,objectMode:i},n)=>{if(e!==void 0&&!cu(e))throw new TypeError(`The \`${n}.transform\` option must be a generator, a Duplex stream or a web TransformStream.`);if(Ks(t,{checkOpen:!1}))throw new TypeError(`The \`${n}.final\` option must not be a Duplex stream.`);if(ro(t))throw new TypeError(`The \`${n}.final\` option must not be a web TransformStream.`);if(t!==void 0&&!cu(t))throw new TypeError(`The \`${n}.final\` option must be a generator.`);return eo(r,`${n}.binary`),eo(i,`${n}.objectMode`),wt(e)||wt(t)?"asyncGenerator":"generator"},eo=(e,t)=>{if(e!==void 0&&typeof e!="boolean")throw new TypeError(`The \`${t}\` option must use a boolean.`)},cu=e=>wt(e)||lu(e),wt=e=>Object.prototype.toString.call(e)==="[object AsyncGeneratorFunction]",lu=e=>Object.prototype.toString.call(e)==="[object GeneratorFunction]",Wb=e=>Y(e)&&(e.transform!==void 0||e.final!==void 0),an=e=>Object.prototype.toString.call(e)==="[object URL]",mu=e=>an(e)&&e.protocol!=="file:",Hb=e=>Y(e)&&Object.keys(e).length>0&&Object.keys(e).every(t=>Kb.has(t))&&to(e.file),Kb=new Set(["file","append"]),to=e=>typeof e=="string",hu=(e,t)=>e==="native"&&typeof t=="string"&&!Yb.has(t),Yb=new Set(["ipc","ignore","inherit","overlapped","pipe"]),yu=e=>Object.prototype.toString.call(e)==="[object ReadableStream]",cn=e=>Object.prototype.toString.call(e)==="[object WritableStream]",Jb=e=>yu(e)||cn(e),ro=e=>yu(e?.readable)&&cn(e?.writable),Xb=e=>fu(e)&&typeof e[Symbol.asyncIterator]=="function",Zb=e=>fu(e)&&typeof e[Symbol.iterator]=="function",fu=e=>typeof e=="object"&&e!==null,ke=new Set(["generator","asyncGenerator","duplex","webTransform"]),pn=new Set(["fileUrl","filePath","fileNumber"]),io=new Set(["fileUrl","filePath"]),gu=new Set([...io,"webStream","nodeStream"]),_u=new Set(["webTransform","duplex"]),ct={generator:"a generator",asyncGenerator:"an async generator",fileUrl:"a file URL",filePath:"a file path string",fileNumber:"a file descriptor number",webStream:"a web stream",nodeStream:"a Node.js stream",webTransform:"a web TransformStream",duplex:"a Duplex stream",native:"any value",iterable:"an iterable",asyncIterable:"an async iterable",string:"a string",uint8Array:"a Uint8Array"};var no=(e,t,r,i)=>i==="output"?Qb(e,t,r):ew(e,t,r),Qb=(e,t,r)=>{let i=t!==0&&r[t-1].value.readableObjectMode;return{writableObjectMode:i,readableObjectMode:e??i}},ew=(e,t,r)=>{let i=t===0?e===!0:r[t-1].value.readableObjectMode,n=t!==r.length-1&&(e??i);return{writableObjectMode:i,readableObjectMode:n}},bu=(e,t)=>{let r=e.findLast(({type:i})=>ke.has(i));return r===void 0?!1:t==="input"?r.value.writableObjectMode:r.value.readableObjectMode};var wu=(e,t,r,i)=>[...e.filter(({type:n})=>!ke.has(n)),...tw(e,t,r,i)],tw=(e,t,r,{encoding:i})=>{let n=e.filter(({type:o})=>ke.has(o)),s=Array.from({length:n.length});for(let[o,a]of Object.entries(n))s[o]=rw({stdioItem:a,index:Number(o),newTransforms:s,optionName:t,direction:r,encoding:i});return ow(s,r)},rw=({stdioItem:e,stdioItem:{type:t},index:r,newTransforms:i,optionName:n,direction:s,encoding:o})=>t==="duplex"?iw({stdioItem:e,optionName:n}):t==="webTransform"?nw({stdioItem:e,index:r,newTransforms:i,direction:s}):sw({stdioItem:e,index:r,newTransforms:i,direction:s,encoding:o}),iw=({stdioItem:e,stdioItem:{value:{transform:t,transform:{writableObjectMode:r,readableObjectMode:i},objectMode:n=i}},optionName:s})=>{if(n&&!i)throw new TypeError(`The \`${s}.objectMode\` option can only be \`true\` if \`new Duplex({objectMode: true})\` is used.`);if(!n&&i)throw new TypeError(`The \`${s}.objectMode\` option cannot be \`false\` if \`new Duplex({objectMode: true})\` is used.`);return{...e,value:{transform:t,writableObjectMode:r,readableObjectMode:i}}},nw=({stdioItem:e,stdioItem:{value:t},index:r,newTransforms:i,direction:n})=>{let{transform:s,objectMode:o}=Y(t)?t:{transform:t},{writableObjectMode:a,readableObjectMode:c}=no(o,r,i,n);return{...e,value:{transform:s,writableObjectMode:a,readableObjectMode:c}}},sw=({stdioItem:e,stdioItem:{value:t},index:r,newTransforms:i,direction:n,encoding:s})=>{let{transform:o,final:a,binary:c=!1,preserveNewlines:d=!1,objectMode:p}=Y(t)?t:{transform:t},u=c||ye.has(s),{writableObjectMode:l,readableObjectMode:m}=no(p,r,i,n);return{...e,value:{transform:o,final:a,binary:u,preserveNewlines:d,writableObjectMode:l,readableObjectMode:m}}},ow=(e,t)=>t==="input"?e.reverse():e;import so from"process";var xu=(e,t,r)=>{let i=e.map(n=>aw(n,t));if(i.includes("input")&&i.includes("output"))throw new TypeError(`The \`${r}\` option must not be an array of both readable and writable values.`);return i.find(Boolean)??dw},aw=({type:e,value:t},r)=>cw[r]??ku[e](t),cw=["input","output","output"],Gt=()=>{},oo=()=>"input",ku={generator:Gt,asyncGenerator:Gt,fileUrl:Gt,filePath:Gt,iterable:oo,asyncIterable:oo,uint8Array:oo,webStream:e=>cn(e)?"output":"input",nodeStream(e){return bt(e,{checkOpen:!1})?Hs(e,{checkOpen:!1})?void 0:"input":"output"},webTransform:Gt,duplex:Gt,native(e){let t=pw(e);if(t!==void 0)return t;if(Ae(e,{checkOpen:!1}))return ku.nodeStream(e)}},pw=e=>{if([0,so.stdin].includes(e))return"input";if([1,2,so.stdout,so.stderr].includes(e))return"output"},dw="output";var vu=(e,t)=>t&&!e.includes("ipc")?[...e,"ipc"]:e;var Su=({stdio:e,ipc:t,buffer:r,...i},n,s)=>{let o=uw(e,i).map((a,c)=>qu(a,c));return s?mw(o,r,n):vu(o,t)},uw=(e,t)=>{if(e===void 0)return xe.map(i=>t[i]);if(lw(t))throw new Error(`It's not possible to provide \`stdio\` in combination with one of ${xe.map(i=>`\`${i}\``).join(", ")}`);if(typeof e=="string")return[e,e,e];if(!Array.isArray(e))throw new TypeError(`Expected \`stdio\` to be of type \`string\` or \`Array\`, got \`${typeof e}\``);let r=Math.max(e.length,xe.length);return Array.from({length:r},(i,n)=>e[n])},lw=e=>xe.some(t=>e[t]!==void 0),qu=(e,t)=>Array.isArray(e)?e.map(r=>qu(r,t)):e??(t>=xe.length?"ignore":"pipe"),mw=(e,t,r)=>e.map((i,n)=>!t[n]&&n!==0&&!It(r,n)&&hw(i)?"ignore":i),hw=e=>e==="pipe"||Array.isArray(e)&&e.every(t=>t==="pipe");import{readFileSync as yw}from"fs";import fw from"tty";var Au=({stdioItem:e,stdioItem:{type:t},isStdioArray:r,fdNumber:i,direction:n,isSync:s})=>!r||t!=="native"?e:s?gw({stdioItem:e,fdNumber:i,direction:n}):ww({stdioItem:e,fdNumber:i}),gw=({stdioItem:e,stdioItem:{value:t,optionName:r},fdNumber:i,direction:n})=>{let s=_w({value:t,optionName:r,fdNumber:i,direction:n});if(s!==void 0)return s;if(Ae(t,{checkOpen:!1}))throw new TypeError(`The \`${r}: Stream\` option cannot both be an array and include a stream with synchronous methods.`);return e},_w=({value:e,optionName:t,fdNumber:r,direction:i})=>{let n=bw(e,r);if(n!==void 0){if(i==="output")return{type:"fileNumber",value:n,optionName:t};if(fw.isatty(n))throw new TypeError(`The \`${t}: ${Li(e)}\` option is invalid: it cannot be a TTY with synchronous methods.`);return{type:"uint8Array",value:Xe(yw(n)),optionName:t}}},bw=(e,t)=>{if(e==="inherit")return t;if(typeof e=="number")return e;let r=bi.indexOf(e);if(r!==-1)return r},ww=({stdioItem:e,stdioItem:{value:t,optionName:r},fdNumber:i})=>t==="inherit"?{type:"nodeStream",value:$u(i,t,r),optionName:r}:typeof t=="number"?{type:"nodeStream",value:$u(t,t,r),optionName:r}:Ae(t,{checkOpen:!1})?{type:"nodeStream",value:t,optionName:r}:e,$u=(e,t,r)=>{let i=bi[e];if(i===void 0)throw new TypeError(`The \`${r}: ${t}\` option is invalid: no such standard stream.`);return i};var Cu=({input:e,inputFile:t},r)=>r===0?[...xw(e),...vw(t)]:[],xw=e=>e===void 0?[]:[{type:kw(e),value:e,optionName:"input"}],kw=e=>{if(bt(e,{checkOpen:!1}))return"nodeStream";if(typeof e=="string")return"string";if(Q(e))return"uint8Array";throw new Error("The `input` option must be a string, a Uint8Array or a Node.js Readable stream.")},vw=e=>e===void 0?[]:[{...Sw(e),optionName:"inputFile"}],Sw=e=>{if(an(e))return{type:"fileUrl",value:e};if(to(e))return{type:"filePath",value:{file:e}};throw new Error("The `inputFile` option must be a file path string or a file URL.")};var Eu=e=>e.filter((t,r)=>e.every((i,n)=>t.value!==i.value||r>=n||t.type==="generator"||t.type==="asyncGenerator")),Pu=({stdioItem:{type:e,value:t,optionName:r},direction:i,fileDescriptors:n,isSync:s})=>{let o=qw(n,e);if(o.length!==0){if(s){$w({otherStdioItems:o,type:e,value:t,optionName:r,direction:i});return}if(gu.has(e))return Tu({otherStdioItems:o,type:e,value:t,optionName:r,direction:i});_u.has(e)&&Cw({otherStdioItems:o,type:e,value:t,optionName:r})}},qw=(e,t)=>e.flatMap(({direction:r,stdioItems:i})=>i.filter(n=>n.type===t).map((n=>({...n,direction:r})))),$w=({otherStdioItems:e,type:t,value:r,optionName:i,direction:n})=>{io.has(t)&&Tu({otherStdioItems:e,type:t,value:r,optionName:i,direction:n})},Tu=({otherStdioItems:e,type:t,value:r,optionName:i,direction:n})=>{let s=e.filter(a=>Aw(a,r));if(s.length===0)return;let o=s.find(a=>a.direction!==n);return Ru(o,i,t),n==="output"?s[0].stream:void 0},Aw=({type:e,value:t},r)=>e==="filePath"?t.file===r.file:e==="fileUrl"?t.href===r.href:t===r,Cw=({otherStdioItems:e,type:t,value:r,optionName:i})=>{let n=e.find(({value:{transform:s}})=>s===r.transform);Ru(n,i,t)},Ru=(e,t,r)=>{if(e!==void 0)throw new TypeError(`The \`${e.optionName}\` and \`${t}\` options must not target ${ct[r]} that is the same.`)};var dn=(e,t,r,i)=>{let s=Su(t,r,i).map((a,c)=>Ew({stdioOption:a,fdNumber:c,options:t,isSync:i})),o=Lw({initialFileDescriptors:s,addProperties:e,options:t,isSync:i});return t.stdio=o.map(({stdioItems:a})=>Bw(a)),o},Ew=({stdioOption:e,fdNumber:t,options:r,isSync:i})=>{let n=wi(t),{stdioItems:s,isStdioArray:o}=Pw({stdioOption:e,fdNumber:t,options:r,optionName:n}),a=xu(s,t,n),c=s.map(u=>Au({stdioItem:u,isStdioArray:o,fdNumber:t,direction:a,isSync:i})),d=wu(c,n,a,r),p=bu(d,a);return Dw(d,p),{direction:a,objectMode:p,stdioItems:d}},Pw=({stdioOption:e,fdNumber:t,options:r,optionName:i})=>{let s=[...(Array.isArray(e)?e:[e]).map(c=>Tw(c,i)),...Cu(r,t)],o=Eu(s),a=o.length>1;return Rw(o,a,i),Ow(o),{stdioItems:o,isStdioArray:a}},Tw=(e,t)=>({type:pu(e,t),value:e,optionName:t}),Rw=(e,t,r)=>{if(e.length===0)throw new TypeError(`The \`${r}\` option must not be an empty array.`);if(t){for(let{value:i,optionName:n}of e)if(Iw.has(i))throw new Error(`The \`${n}\` option must not include \`${i}\`.`)}},Iw=new Set(["ignore","ipc"]),Ow=e=>{for(let t of e)jw(t)},jw=({type:e,value:t,optionName:r})=>{if(mu(t))throw new TypeError(`The \`${r}: URL\` option must use the \`file:\` scheme.
135
+ For example, you can use the \`pathToFileURL()\` method of the \`url\` core module.`);if(hu(e,t))throw new TypeError(`The \`${r}: { file: '...' }\` option must be used instead of \`${r}: '...'\`.`)},Dw=(e,t)=>{if(!t)return;let r=e.find(({type:i})=>pn.has(i));if(r!==void 0)throw new TypeError(`The \`${r.optionName}\` option cannot use both files and transforms in objectMode.`)},Lw=({initialFileDescriptors:e,addProperties:t,options:r,isSync:i})=>{let n=[];try{for(let s of e)n.push(Mw({fileDescriptor:s,fileDescriptors:n,addProperties:t,options:r,isSync:i}));return n}catch(s){throw ao(n),s}},Mw=({fileDescriptor:{direction:e,objectMode:t,stdioItems:r},fileDescriptors:i,addProperties:n,options:s,isSync:o})=>{let a=r.map(c=>Fw({stdioItem:c,addProperties:n,direction:e,options:s,fileDescriptors:i,isSync:o}));return{direction:e,objectMode:t,stdioItems:a}},Fw=({stdioItem:e,addProperties:t,direction:r,options:i,fileDescriptors:n,isSync:s})=>{let o=Pu({stdioItem:e,direction:r,fileDescriptors:n,isSync:s});return o!==void 0?{...e,stream:o}:{...e,...t[r][e.type](e,i)}},ao=e=>{for(let{stdioItems:t}of e)for(let{stream:r}of t)r!==void 0&&!Se(r)&&r.destroy()},Bw=e=>{if(e.length>1)return e.some(({value:i})=>i==="overlapped")?"overlapped":"pipe";let[{type:t,value:r}]=e;return t==="native"?r:"pipe"};var ju=(e,t)=>dn(Nw,e,t,!0),Le=({type:e,optionName:t})=>{Du(t,ct[e])},Uw=({optionName:e,value:t})=>((t==="ipc"||t==="overlapped")&&Du(e,`"${t}"`),{}),Du=(e,t)=>{throw new TypeError(`The \`${e}\` option cannot be ${t} with synchronous methods.`)},Ou={generator(){},asyncGenerator:Le,webStream:Le,nodeStream:Le,webTransform:Le,duplex:Le,asyncIterable:Le,native:Uw},Nw={input:{...Ou,fileUrl:({value:e})=>({contents:[Xe(Iu(e))]}),filePath:({value:{file:e}})=>({contents:[Xe(Iu(e))]}),fileNumber:Le,iterable:({value:e})=>({contents:[...e]}),string:({value:e})=>({contents:[e]}),uint8Array:({value:e})=>({contents:[e]})},output:{...Ou,fileUrl:({value:e})=>({path:e}),filePath:({value:{file:e,append:t}})=>({path:e,append:t}),fileNumber:({value:e})=>({path:e}),iterable:Le,string:Le,uint8Array:Le}};var et=(e,{stripFinalNewline:t},r)=>co(t,r)&&e!==void 0&&!Array.isArray(e)?Ft(e):e,co=(e,t)=>t==="all"?e[1]||e[2]:e[t];import{Transform as px,getDefaultHighWaterMark as Hu}from"stream";var un=(e,t,r,i)=>e||r?void 0:Mu(t,i),uo=(e,t,r)=>r?e.flatMap(i=>Lu(i,t)):Lu(e,t),Lu=(e,t)=>{let{transform:r,final:i}=Mu(t,{});return[...r(e),...i()]},Mu=(e,t)=>(t.previousChunks="",{transform:Gw.bind(void 0,t,e),final:Vw.bind(void 0,t)}),Gw=function*(e,t,r){if(typeof r!="string"){yield r;return}let{previousChunks:i}=e,n=-1;for(let s=0;s<r.length;s+=1)if(r[s]===`
136
136
  `){let o=zw(r,s,t,e),a=r.slice(n+1,s+1-o);i.length>0&&(a=po(i,a),i=""),yield a,n=s}n!==r.length-1&&(i=po(i,r.slice(n+1))),e.previousChunks=i},zw=(e,t,r,i)=>r?0:(i.isWindowsNewline=t!==0&&e[t-1]==="\r",i.isWindowsNewline?2:1),Vw=function*({previousChunks:e}){e.length>0&&(yield e)},Fu=({binary:e,preserveNewlines:t,readableObjectMode:r,state:i})=>e||t||r?void 0:{transform:Ww.bind(void 0,i)},Ww=function*({isWindowsNewline:e=!1},t){let{unixNewline:r,windowsNewline:i,LF:n,concatBytes:s}=typeof t=="string"?Hw:Yw;if(t.at(-1)===n){yield t;return}yield s(t,e?i:r)},po=(e,t)=>`${e}${t}`,Hw={windowsNewline:`\r
137
137
  `,unixNewline:`
138
138
  `,LF:`
139
139
  `,concatBytes:po},Kw=(e,t)=>{let r=new Uint8Array(e.length+t.length);return r.set(e,0),r.set(t,e.length),r},Yw={windowsNewline:new Uint8Array([13,10]),unixNewline:new Uint8Array([10]),LF:10,concatBytes:Kw};import{Buffer as Jw}from"buffer";var Bu=(e,t)=>e?void 0:Xw.bind(void 0,t),Xw=function*(e,t){if(typeof t!="string"&&!Q(t)&&!Jw.isBuffer(t))throw new TypeError(`The \`${e}\` option's transform must use "objectMode: true" to receive as input: ${typeof t}.`);yield t},Uu=(e,t)=>e?Zw.bind(void 0,t):Qw.bind(void 0,t),Zw=function*(e,t){Nu(e,t),yield t},Qw=function*(e,t){if(Nu(e,t),typeof t!="string"&&!Q(t))throw new TypeError(`The \`${e}\` option's function must yield a string or an Uint8Array, not ${typeof t}.`);yield t},Nu=(e,t)=>{if(t==null)throw new TypeError(`The \`${e}\` option's function must not call \`yield ${t}\`.
140
140
  Instead, \`yield\` should either be called with a value, or not be called at all. For example:
141
- if (condition) { yield value; }`)};import{Buffer as ex}from"buffer";import{StringDecoder as tx}from"string_decoder";var un=(e,t,r)=>{if(r)return;if(e)return{transform:rx.bind(void 0,new TextEncoder)};let i=new tx(t);return{transform:ix.bind(void 0,i),final:nx.bind(void 0,i)}},rx=function*(e,t){ex.isBuffer(t)?yield Xe(t):typeof t=="string"?yield e.encode(t):yield t},ix=function*(e,t){yield Q(t)?e.write(t):t},nx=function*(e){let t=e.end();t!==""&&(yield t)};import{callbackify as Gu}from"util";var lo=Gu(async(e,t,r,i)=>{t.currentIterable=e(...r);try{for await(let n of t.currentIterable)i.push(n)}finally{delete t.currentIterable}}),ln=async function*(e,t,r){if(r===t.length){yield e;return}let{transform:i=ox}=t[r];for await(let n of i(e))yield*ln(n,t,r+1)},zu=async function*(e){for(let[t,{final:r}]of Object.entries(e))yield*sx(r,Number(t),e)},sx=async function*(e,t,r){if(e!==void 0)for await(let i of e())yield*ln(i,r,t+1)},Vu=Gu(async({currentIterable:e},t)=>{if(e!==void 0){await(t?e.throw(t):e.return());return}if(t)throw t}),ox=function*(e){yield e};var mo=(e,t,r,i)=>{try{for(let n of e(...t))r.push(n);i()}catch(n){i(n)}},Wu=(e,t)=>[...t.flatMap(r=>[...xt(r,e,0)]),...br(e)],xt=function*(e,t,r){if(r===t.length){yield e;return}let{transform:i=cx}=t[r];for(let n of i(e))yield*xt(n,t,r+1)},br=function*(e){for(let[t,{final:r}]of Object.entries(e))yield*ax(r,Number(t),e)},ax=function*(e,t,r){if(e!==void 0)for(let i of e())yield*xt(i,r,t+1)},cx=function*(e){yield e};var ho=({value:e,value:{transform:t,final:r,writableObjectMode:i,readableObjectMode:n},optionName:s},{encoding:o})=>{let a={},c=Ku(e,o,s),d=wt(t),p=wt(r),u=d?lo.bind(void 0,ln,a):mo.bind(void 0,xt),l=d||p?lo.bind(void 0,zu,a):mo.bind(void 0,br),m=d||p?Vu.bind(void 0,a):void 0;return{stream:new px({writableObjectMode:i,writableHighWaterMark:Hu(i),readableObjectMode:n,readableHighWaterMark:Hu(n),transform(f,x,w){u([f,c,0],this,w)},flush(f){l([c],this,f)},destroy:m})}},mn=(e,t,r,i)=>{let n=t.filter(({type:o})=>o==="generator"),s=i?n.reverse():n;for(let{value:o,optionName:a}of s){let c=Ku(o,r,a);e=Wu(c,e)}return e},Ku=({transform:e,final:t,binary:r,writableObjectMode:i,readableObjectMode:n,preserveNewlines:s},o,a)=>{let c={};return[{transform:Bu(i,a)},un(r,o,i),dn(r,s,i,c),{transform:e,final:t},{transform:Uu(n,a)},Fu({binary:r,preserveNewlines:s,readableObjectMode:n,state:c})].filter(Boolean)};var Yu=(e,t)=>{for(let r of dx(e))ux(e,r,t)},dx=e=>new Set(Object.entries(e).filter(([,{direction:t}])=>t==="input").map(([t])=>Number(t))),ux=(e,t,r)=>{let{stdioItems:i}=e[t],n=i.filter(({contents:a})=>a!==void 0);if(n.length===0)return;if(t!==0){let[{type:a,optionName:c}]=n;throw new TypeError(`Only the \`stdin\` option, not \`${c}\`, can be ${ct[a]} with synchronous methods.`)}let o=n.map(({contents:a})=>a).map(a=>lx(a,i));r.input=pr(o)},lx=(e,t)=>{let r=mn(e,t,"utf8",!0);return mx(r),pr(r)},mx=e=>{let t=e.find(r=>typeof r!="string"&&!Q(r));if(t!==void 0)throw new TypeError(`The \`stdin\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${t}.`)};import{writeFileSync as gx,appendFileSync as _x}from"fs";var hn=({stdioItems:e,encoding:t,verboseInfo:r,fdNumber:i})=>i!=="all"&&It(r,i)&&!ye.has(t)&&hx(i)&&(e.some(({type:n,value:s})=>n==="native"&&yx.has(s))||e.every(({type:n})=>ke.has(n))),hx=e=>e===1||e===2,yx=new Set(["pipe","overlapped"]),Ju=async(e,t,r,i)=>{for await(let n of e)fx(t)||Zu(n,r,i)},Xu=(e,t,r)=>{for(let i of e)Zu(i,t,r)},fx=e=>e._readableState.pipes.length>0,Zu=(e,t,r)=>{let i=qi(e);Ie({type:"output",verboseMessage:i,fdNumber:t,verboseInfo:r})};var Qu=({fileDescriptors:e,syncResult:{output:t},options:r,isMaxBuffer:i,verboseInfo:n})=>{if(t===null)return{output:Array.from({length:3})};let s={},o=new Set([]);return{output:t.map((c,d)=>bx({result:c,fileDescriptors:e,fdNumber:d,state:s,outputFiles:o,isMaxBuffer:i,verboseInfo:n},r)),...s}},bx=({result:e,fileDescriptors:t,fdNumber:r,state:i,outputFiles:n,isMaxBuffer:s,verboseInfo:o},{buffer:a,encoding:c,lines:d,stripFinalNewline:p,maxBuffer:u})=>{if(e===null)return;let l=eu(e,s,u),m=Xe(l),{stdioItems:h,objectMode:f}=t[r],x=wx([m],h,c,i),{serializedResult:w,finalResult:v=w}=xx({chunks:x,objectMode:f,encoding:c,lines:d,stripFinalNewline:p,fdNumber:r});kx({serializedResult:w,fdNumber:r,state:i,verboseInfo:o,encoding:c,stdioItems:h,objectMode:f});let g=a[r]?v:void 0;try{return i.error===void 0&&vx(w,h,n),g}catch(R){return i.error=R,g}},wx=(e,t,r,i)=>{try{return mn(e,t,r,!1)}catch(n){return i.error=n,e}},xx=({chunks:e,objectMode:t,encoding:r,lines:i,stripFinalNewline:n,fdNumber:s})=>{if(t)return{serializedResult:e};if(r==="buffer")return{serializedResult:pr(e)};let o=hc(e,r);return i[s]?{serializedResult:o,finalResult:uo(o,!n[s],t)}:{serializedResult:o}},kx=({serializedResult:e,fdNumber:t,state:r,verboseInfo:i,encoding:n,stdioItems:s,objectMode:o})=>{if(!hn({stdioItems:s,encoding:n,verboseInfo:i,fdNumber:t}))return;let a=uo(e,!1,o);try{Xu(a,t,i)}catch(c){r.error??=c}},vx=(e,t,r)=>{for(let{path:i,append:n}of t.filter(({type:s})=>cn.has(s))){let s=typeof i=="string"?i:i.toString();n||r.has(s)?_x(i,e):(r.add(s),gx(i,e))}};var el=([,e,t],r)=>{if(r.all)return e===void 0?t:t===void 0?e:Array.isArray(e)?Array.isArray(t)?[...e,...t]:[...e,et(t,r,"all")]:Array.isArray(t)?[et(e,r,"all"),...t]:Q(e)&&Q(t)?bs([e,t]):`${e}${t}`};import{once as yo}from"events";var tl=async(e,t)=>{let[r,i]=await Sx(e);return t.isForcefullyTerminated??=!1,[r,i]},Sx=async e=>{let[t,r]=await Promise.allSettled([yo(e,"spawn"),yo(e,"exit")]);return t.status==="rejected"?[]:r.status==="rejected"?rl(e):r.value},rl=async e=>{try{return await yo(e,"exit")}catch{return rl(e)}},il=async e=>{let[t,r]=await e;if(!qx(t,r)&&fo(t,r))throw new qe;return[t,r]},qx=(e,t)=>e===void 0&&t===void 0,fo=(e,t)=>e!==0||t!==null;var nl=({error:e,status:t,signal:r,output:i},{maxBuffer:n})=>{let s=$x(e,t,r),o=s?.code==="ETIMEDOUT",a=Qd(s,i,n);return{resultError:s,exitCode:t,signal:r,timedOut:o,isMaxBuffer:a}},$x=(e,t,r)=>e!==void 0?e:fo(t,r)?new qe:void 0;var sl=(e,t,r)=>{let{file:i,commandArguments:n,command:s,escapedCommand:o,startTime:a,verboseInfo:c,options:d,fileDescriptors:p}=Cx(e,t,r),u=Tx({file:i,commandArguments:n,options:d,command:s,escapedCommand:o,verboseInfo:c,fileDescriptors:p,startTime:a});return Nt(u,c,d)},Cx=(e,t,r)=>{let{command:i,escapedCommand:n,startTime:s,verboseInfo:o}=Ai(e,t,r),a=Ex(r),{file:c,commandArguments:d,options:p}=Ki(e,t,a);Px(p);let u=ju(p,o);return{file:c,commandArguments:d,command:i,escapedCommand:n,startTime:s,verboseInfo:o,options:p,fileDescriptors:u}},Ex=e=>e.node&&!e.ipc?{...e,ipc:!1}:e,Px=({ipc:e,ipcInput:t,detached:r,cancelSignal:i})=>{t&&yn("ipcInput"),e&&yn("ipc: true"),r&&yn("detached: true"),i&&yn("cancelSignal")},yn=e=>{throw new TypeError(`The "${e}" option cannot be used with synchronous methods.`)},Tx=({file:e,commandArguments:t,options:r,command:i,escapedCommand:n,verboseInfo:s,fileDescriptors:o,startTime:a})=>{let c=Rx({file:e,commandArguments:t,options:r,command:i,escapedCommand:n,fileDescriptors:o,startTime:a});if(c.failed)return c;let{resultError:d,exitCode:p,signal:u,timedOut:l,isMaxBuffer:m}=nl(c,r),{output:h,error:f=d}=Qu({fileDescriptors:o,syncResult:c,options:r,isMaxBuffer:m,verboseInfo:s}),x=h.map((v,g)=>et(v,r,g)),w=et(el(h,r),r,"all");return Ox({error:f,exitCode:p,signal:u,timedOut:l,isMaxBuffer:m,stdio:x,all:w,options:r,command:i,escapedCommand:n,startTime:a})},Rx=({file:e,commandArguments:t,options:r,command:i,escapedCommand:n,fileDescriptors:s,startTime:o})=>{try{Yu(s,r);let a=Ix(r);return Ax(...Yi(e,t,a))}catch(a){return Ut({error:a,command:i,escapedCommand:n,fileDescriptors:s,options:r,startTime:o,isSync:!0})}},Ix=({encoding:e,maxBuffer:t,...r})=>({...r,encoding:"buffer",maxBuffer:nn(t)}),Ox=({error:e,exitCode:t,signal:r,timedOut:i,isMaxBuffer:n,stdio:s,all:o,options:a,command:c,escapedCommand:d,startTime:p})=>e===void 0?sn({command:c,escapedCommand:d,stdio:s,all:o,ipcOutput:[],options:a,startTime:p}):_r({error:e,command:c,escapedCommand:d,timedOut:i,isCanceled:!1,isGracefullyCanceled:!1,isMaxBuffer:n,isForcefullyTerminated:!1,exitCode:t,signal:r,stdio:s,all:o,ipcOutput:[],options:a,startTime:p,isSync:!0});import{setMaxListeners as xk}from"events";import{spawn as kk}from"child_process";import dl from"process";import{once as go,on as jx}from"events";var ol=({anyProcess:e,channel:t,isSubprocess:r,ipc:i},{reference:n=!0,filter:s}={})=>(Dt({methodName:"getOneMessage",isSubprocess:r,ipc:i,isConnected:Ni(e)}),Dx({anyProcess:e,channel:t,isSubprocess:r,filter:s,reference:n})),Dx=async({anyProcess:e,channel:t,isSubprocess:r,filter:i,reference:n})=>{Mi(t,n);let s=at(e,t,r),o=new AbortController;try{return await Promise.race([Lx(s,i,o),Mx(s,r,o),Fx(s,r,o)])}catch(a){throw Lt(e),a}finally{o.abort(),Fi(t,n)}},Lx=async(e,t,{signal:r})=>{if(t===void 0){let[i]=await go(e,"message",{signal:r});return i}for await(let[i]of jx(e,"message",{signal:r}))if(t(i))return i},Mx=async(e,t,{signal:r})=>{await go(e,"disconnect",{signal:r}),Wp(t)},Fx=async(e,t,{signal:r})=>{let[i]=await go(e,"strict:error",{signal:r});throw ji(i,t)};import{once as cl,on as Bx}from"events";var pl=({anyProcess:e,channel:t,isSubprocess:r,ipc:i},{reference:n=!0}={})=>_o({anyProcess:e,channel:t,isSubprocess:r,ipc:i,shouldAwait:!r,reference:n}),_o=({anyProcess:e,channel:t,isSubprocess:r,ipc:i,shouldAwait:n,reference:s})=>{Dt({methodName:"getEachMessage",isSubprocess:r,ipc:i,isConnected:Ni(e)}),Mi(t,s);let o=at(e,t,r),a=new AbortController,c={};return Ux(e,o,a),Nx({ipcEmitter:o,isSubprocess:r,controller:a,state:c}),Gx({anyProcess:e,channel:t,ipcEmitter:o,isSubprocess:r,shouldAwait:n,controller:a,state:c,reference:s})},Ux=async(e,t,r)=>{try{await cl(t,"disconnect",{signal:r.signal}),r.abort()}catch{}},Nx=async({ipcEmitter:e,isSubprocess:t,controller:r,state:i})=>{try{let[n]=await cl(e,"strict:error",{signal:r.signal});i.error=ji(n,t),r.abort()}catch{}},Gx=async function*({anyProcess:e,channel:t,ipcEmitter:r,isSubprocess:i,shouldAwait:n,controller:s,state:o,reference:a}){try{for await(let[c]of Bx(r,"message",{signal:s.signal}))al(o),yield c}catch{al(o)}finally{s.abort(),Fi(t,a),i||Lt(e),n&&await e}},al=({error:e})=>{if(e)throw e};var ul=(e,{ipc:t})=>{Object.assign(e,ml(e,!1,t))},ll=()=>{let e=dl,t=!0,r=dl.channel!==void 0;return{...ml(e,t,r),getCancelSignal:bd.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:r})}},ml=(e,t,r)=>({sendMessage:Wi.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:r}),getOneMessage:ol.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:r}),getEachMessage:pl.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:r})});import{ChildProcess as zx}from"child_process";import{PassThrough as Vx,Readable as Wx,Writable as Hx,Duplex as Kx}from"stream";var hl=({error:e,command:t,escapedCommand:r,fileDescriptors:i,options:n,startTime:s,verboseInfo:o})=>{ao(i);let a=new zx;Yx(a,i),Object.assign(a,{readable:Jx,writable:Xx,duplex:Zx});let c=Ut({error:e,command:t,escapedCommand:r,fileDescriptors:i,options:n,startTime:s,isSync:!1}),d=Qx(c,o,n);return{subprocess:a,promise:d}},Yx=(e,t)=>{let r=wr(),i=wr(),n=wr(),s=Array.from({length:t.length-3},wr),o=wr(),a=[r,i,n,...s];Object.assign(e,{stdin:r,stdout:i,stderr:n,all:o,stdio:a})},wr=()=>{let e=new Vx;return e.end(),e},Jx=()=>new Wx({read(){}}),Xx=()=>new Hx({write(){}}),Zx=()=>new Kx({read(){},write(){}}),Qx=async(e,t,r)=>Nt(e,t,r);import{createReadStream as yl,createWriteStream as fl}from"fs";import{Buffer as e0}from"buffer";import{Readable as xr,Writable as t0,Duplex as r0}from"stream";var _l=(e,t)=>pn(i0,e,t,!1),kr=({type:e,optionName:t})=>{throw new TypeError(`The \`${t}\` option cannot be ${ct[e]}.`)},gl={fileNumber:kr,generator:ho,asyncGenerator:ho,nodeStream:({value:e})=>({stream:e}),webTransform({value:{transform:e,writableObjectMode:t,readableObjectMode:r}}){let i=t||r;return{stream:r0.fromWeb(e,{objectMode:i})}},duplex:({value:{transform:e}})=>({stream:e}),native(){}},i0={input:{...gl,fileUrl:({value:e})=>({stream:yl(e)}),filePath:({value:{file:e}})=>({stream:yl(e)}),webStream:({value:e})=>({stream:xr.fromWeb(e)}),iterable:({value:e})=>({stream:xr.from(e)}),asyncIterable:({value:e})=>({stream:xr.from(e)}),string:({value:e})=>({stream:xr.from(e)}),uint8Array:({value:e})=>({stream:xr.from(e0.from(e))})},output:{...gl,fileUrl:({value:e})=>({stream:fl(e)}),filePath:({value:{file:e,append:t}})=>({stream:fl(e,t?{flags:"a"}:{})}),webStream:({value:e})=>({stream:t0.fromWeb(e)}),iterable:kr,asyncIterable:kr,string:kr,uint8Array:kr}};import{on as n0,once as bl}from"events";import{PassThrough as s0,getDefaultHighWaterMark as o0}from"stream";import{finished as kl}from"stream/promises";function kt(e){if(!Array.isArray(e))throw new TypeError(`Expected an array, got \`${typeof e}\`.`);for(let n of e)wo(n);let t=e.some(({readableObjectMode:n})=>n),r=a0(e,t),i=new bo({objectMode:t,writableHighWaterMark:r,readableHighWaterMark:r});for(let n of e)i.add(n);return i}var a0=(e,t)=>{if(e.length===0)return o0(t);let r=e.filter(({readableObjectMode:i})=>i===t).map(({readableHighWaterMark:i})=>i);return Math.max(...r)},bo=class extends s0{#t=new Set([]);#r=new Set([]);#e=new Set([]);#i;#s=Symbol("unpipe");#n=new WeakMap;add(t){if(wo(t),this.#t.has(t))return;this.#t.add(t),this.#i??=c0(this,this.#t,this.#s);let r=u0({passThroughStream:this,stream:t,streams:this.#t,ended:this.#r,aborted:this.#e,onFinished:this.#i,unpipeEvent:this.#s});this.#n.set(t,r),t.pipe(this,{end:!1})}async remove(t){if(wo(t),!this.#t.has(t))return!1;let r=this.#n.get(t);return r===void 0?!1:(this.#n.delete(t),t.unpipe(this),await r,!0)}},c0=async(e,t,r)=>{fn(e,wl);let i=new AbortController;try{await Promise.race([p0(e,i),d0(e,t,r,i)])}finally{i.abort(),fn(e,-wl)}},p0=async(e,{signal:t})=>{try{await kl(e,{signal:t,cleanup:!0})}catch(r){throw vl(e,r),r}},d0=async(e,t,r,{signal:i})=>{for await(let[n]of n0(e,"unpipe",{signal:i}))t.has(n)&&n.emit(r)},wo=e=>{if(typeof e?.pipe!="function")throw new TypeError(`Expected a readable stream, got: \`${typeof e}\`.`)},u0=async({passThroughStream:e,stream:t,streams:r,ended:i,aborted:n,onFinished:s,unpipeEvent:o})=>{fn(e,xl);let a=new AbortController;try{await Promise.race([l0(s,t,a),m0({passThroughStream:e,stream:t,streams:r,ended:i,aborted:n,controller:a}),h0({stream:t,streams:r,ended:i,aborted:n,unpipeEvent:o,controller:a})])}finally{a.abort(),fn(e,-xl)}r.size>0&&r.size===i.size+n.size&&(i.size===0&&n.size>0?xo(e):y0(e))},l0=async(e,t,{signal:r})=>{try{await e,r.aborted||xo(t)}catch(i){r.aborted||vl(t,i)}},m0=async({passThroughStream:e,stream:t,streams:r,ended:i,aborted:n,controller:{signal:s}})=>{try{await kl(t,{signal:s,cleanup:!0,readable:!0,writable:!1}),r.has(t)&&i.add(t)}catch(o){if(s.aborted||!r.has(t))return;Sl(o)?n.add(t):ql(e,o)}},h0=async({stream:e,streams:t,ended:r,aborted:i,unpipeEvent:n,controller:{signal:s}})=>{if(await bl(e,n,{signal:s}),!e.readable)return bl(s,"abort",{signal:s});t.delete(e),r.delete(e),i.delete(e)},y0=e=>{e.writable&&e.end()},vl=(e,t)=>{Sl(t)?xo(e):ql(e,t)},Sl=e=>e?.code==="ERR_STREAM_PREMATURE_CLOSE",xo=e=>{(e.readable||e.writable)&&e.destroy()},ql=(e,t)=>{e.destroyed||(e.once("error",f0),e.destroy(t))},f0=()=>{},fn=(e,t)=>{let r=e.getMaxListeners();r!==0&&r!==Number.POSITIVE_INFINITY&&e.setMaxListeners(r+t)},wl=2,xl=1;import{finished as $l}from"stream/promises";var zt=(e,t)=>{e.pipe(t),g0(e,t),_0(e,t)},g0=async(e,t)=>{if(!(Se(e)||Se(t))){try{await $l(e,{cleanup:!0,readable:!0,writable:!1})}catch{}ko(t)}},ko=e=>{e.writable&&e.end()},_0=async(e,t)=>{if(!(Se(e)||Se(t))){try{await $l(t,{cleanup:!0,readable:!1,writable:!0})}catch{}vo(e)}},vo=e=>{e.readable&&e.destroy()};var Al=(e,t,r)=>{let i=new Map;for(let[n,{stdioItems:s,direction:o}]of Object.entries(t)){for(let{stream:a}of s.filter(({type:c})=>ke.has(c)))b0(e,a,o,n);for(let{stream:a}of s.filter(({type:c})=>!ke.has(c)))x0({subprocess:e,stream:a,direction:o,fdNumber:n,pipeGroups:i,controller:r})}for(let[n,s]of i.entries()){let o=s.length===1?s[0]:kt(s);zt(o,n)}},b0=(e,t,r,i)=>{r==="output"?zt(e.stdio[i],t):zt(t,e.stdio[i]);let n=w0[i];n!==void 0&&(e[n]=t),e.stdio[i]=t},w0=["stdin","stdout","stderr"],x0=({subprocess:e,stream:t,direction:r,fdNumber:i,pipeGroups:n,controller:s})=>{if(t===void 0)return;k0(t,s);let[o,a]=r==="output"?[t,e.stdio[i]]:[e.stdio[i],t],c=n.get(o)??[];n.set(o,[...c,a])},k0=(e,{signal:t})=>{Se(e)&&_t(e,v0,t)},v0=2;import{addAbortListener as $0}from"events";var vt=[];vt.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&vt.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&vt.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var gn=e=>!!e&&typeof e=="object"&&typeof e.removeListener=="function"&&typeof e.emit=="function"&&typeof e.reallyExit=="function"&&typeof e.listeners=="function"&&typeof e.kill=="function"&&typeof e.pid=="number"&&typeof e.on=="function",So=Symbol.for("signal-exit emitter"),qo=globalThis,S0=Object.defineProperty.bind(Object),$o=class{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(qo[So])return qo[So];S0(qo,So,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(t,r){this.listeners[t].push(r)}removeListener(t,r){let i=this.listeners[t],n=i.indexOf(r);n!==-1&&(n===0&&i.length===1?i.length=0:i.splice(n,1))}emit(t,r,i){if(this.emitted[t])return!1;this.emitted[t]=!0;let n=!1;for(let s of this.listeners[t])n=s(r,i)===!0||n;return t==="exit"&&(n=this.emit("afterExit",r,i)||n),n}},_n=class{},q0=e=>({onExit(t,r){return e.onExit(t,r)},load(){return e.load()},unload(){return e.unload()}}),Ao=class extends _n{onExit(){return()=>{}}load(){}unload(){}},Co=class extends _n{#t=Eo.platform==="win32"?"SIGINT":"SIGHUP";#r=new $o;#e;#i;#s;#n={};#o=!1;constructor(t){super(),this.#e=t,this.#n={};for(let r of vt)this.#n[r]=()=>{let i=this.#e.listeners(r),{count:n}=this.#r,s=t;if(typeof s.__signal_exit_emitter__=="object"&&typeof s.__signal_exit_emitter__.count=="number"&&(n+=s.__signal_exit_emitter__.count),i.length===n){this.unload();let o=this.#r.emit("exit",null,r),a=r==="SIGHUP"?this.#t:r;o||t.kill(t.pid,a)}};this.#s=t.reallyExit,this.#i=t.emit}onExit(t,r){if(!gn(this.#e))return()=>{};this.#o===!1&&this.load();let i=r?.alwaysLast?"afterExit":"exit";return this.#r.on(i,t),()=>{this.#r.removeListener(i,t),this.#r.listeners.exit.length===0&&this.#r.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#o){this.#o=!0,this.#r.count+=1;for(let t of vt)try{let r=this.#n[t];r&&this.#e.on(t,r)}catch{}this.#e.emit=(t,...r)=>this.#c(t,...r),this.#e.reallyExit=t=>this.#a(t)}}unload(){this.#o&&(this.#o=!1,vt.forEach(t=>{let r=this.#n[t];if(!r)throw new Error("Listener not defined for signal: "+t);try{this.#e.removeListener(t,r)}catch{}}),this.#e.emit=this.#i,this.#e.reallyExit=this.#s,this.#r.count-=1)}#a(t){return gn(this.#e)?(this.#e.exitCode=t||0,this.#r.emit("exit",this.#e.exitCode,null),this.#s.call(this.#e,this.#e.exitCode)):0}#c(t,...r){let i=this.#i;if(t==="exit"&&gn(this.#e)){typeof r[0]=="number"&&(this.#e.exitCode=r[0]);let n=i.call(this.#e,t,...r);return this.#r.emit("exit",this.#e.exitCode,null),n}else return i.call(this.#e,t,...r)}},Eo=globalThis.process,{onExit:Cl,load:gO,unload:_O}=q0(gn(Eo)?new Co(Eo):new Ao);var El=(e,{cleanup:t,detached:r},{signal:i})=>{if(!t||r)return;let n=Cl(()=>{e.kill()});$0(i,()=>{n()})};var Tl=({source:e,sourcePromise:t,boundOptions:r,createNested:i},...n)=>{let s=$i(),{destination:o,destinationStream:a,destinationError:c,from:d,unpipeSignal:p}=A0(r,i,n),{sourceStream:u,sourceError:l}=E0(e,d),{options:m,fileDescriptors:h}=je.get(e);return{sourcePromise:t,sourceStream:u,sourceOptions:m,sourceError:l,destination:o,destinationStream:a,destinationError:c,unpipeSignal:p,fileDescriptors:h,startTime:s}},A0=(e,t,r)=>{try{let{destination:i,pipeOptions:{from:n,to:s,unpipeSignal:o}={}}=C0(e,t,...r),a=Li(i,s);return{destination:i,destinationStream:a,from:n,unpipeSignal:o}}catch(i){return{destinationError:i}}},C0=(e,t,r,...i)=>{if(Array.isArray(r))return{destination:t(Pl,e)(r,...i),pipeOptions:e};if(typeof r=="string"||r instanceof URL||gs(r)){if(Object.keys(e).length>0)throw new TypeError('Please use .pipe("file", ..., options) or .pipe(execa("file", ..., options)) instead of .pipe(options)("file", ...).');let[n,s,o]=fi(r,...i);return{destination:t(Pl)(n,s,o),pipeOptions:o}}if(je.has(r)){if(Object.keys(e).length>0)throw new TypeError("Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).");return{destination:r,pipeOptions:i[0]}}throw new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${r}`)},Pl=({options:e})=>({options:{...e,stdin:"pipe",piped:!0}}),E0=(e,t)=>{try{return{sourceStream:Mt(e,t)}}catch(r){return{sourceError:r}}};var Il=({sourceStream:e,sourceError:t,destinationStream:r,destinationError:i,fileDescriptors:n,sourceOptions:s,startTime:o})=>{let a=P0({sourceStream:e,sourceError:t,destinationStream:r,destinationError:i});if(a!==void 0)throw Po({error:a,fileDescriptors:n,sourceOptions:s,startTime:o})},P0=({sourceStream:e,sourceError:t,destinationStream:r,destinationError:i})=>{if(t!==void 0&&i!==void 0)return i;if(i!==void 0)return vo(e),i;if(t!==void 0)return ko(r),t},Po=({error:e,fileDescriptors:t,sourceOptions:r,startTime:i})=>Ut({error:e,command:Rl,escapedCommand:Rl,fileDescriptors:t,options:r,startTime:i,isSync:!1}),Rl="source.pipe(destination)";var Ol=async e=>{let[{status:t,reason:r,value:i=r},{status:n,reason:s,value:o=s}]=await e;if(o.pipedFrom.includes(i)||o.pipedFrom.push(i),n==="rejected")throw o;if(t==="rejected")throw i;return o};import{finished as T0}from"stream/promises";var jl=(e,t,r)=>{let i=bn.has(t)?I0(e,t):R0(e,t);return _t(e,j0,r.signal),_t(t,D0,r.signal),O0(t),i},R0=(e,t)=>{let r=kt([e]);return zt(r,t),bn.set(t,r),r},I0=(e,t)=>{let r=bn.get(t);return r.add(e),r},O0=async e=>{try{await T0(e,{cleanup:!0,readable:!1,writable:!0})}catch{}bn.delete(e)},bn=new WeakMap,j0=2,D0=1;import{aborted as L0}from"util";var Dl=(e,t)=>e===void 0?[]:[M0(e,t)],M0=async(e,{sourceStream:t,mergedStream:r,fileDescriptors:i,sourceOptions:n,startTime:s})=>{await L0(e,t),await r.remove(t);let o=new Error("Pipe canceled by `unpipeSignal` option.");throw Po({error:o,fileDescriptors:i,sourceOptions:n,startTime:s})};var wn=(e,...t)=>{if(Y(t[0]))return wn.bind(void 0,{...e,boundOptions:{...e.boundOptions,...t[0]}});let{destination:r,...i}=Tl(e,...t),n=F0({...i,destination:r});return n.pipe=wn.bind(void 0,{...e,source:r,sourcePromise:n,boundOptions:{}}),n},F0=async({sourcePromise:e,sourceStream:t,sourceOptions:r,sourceError:i,destination:n,destinationStream:s,destinationError:o,unpipeSignal:a,fileDescriptors:c,startTime:d})=>{let p=B0(e,n);Il({sourceStream:t,sourceError:i,destinationStream:s,destinationError:o,fileDescriptors:c,sourceOptions:r,startTime:d});let u=new AbortController;try{let l=jl(t,s,u);return await Promise.race([Ol(p),...Dl(a,{sourceStream:t,mergedStream:l,sourceOptions:r,fileDescriptors:c,startTime:d})])}finally{u.abort()}},B0=(e,t)=>Promise.allSettled([e,t]);import{setImmediate as H0}from"timers/promises";import{on as U0}from"events";import{getDefaultHighWaterMark as N0}from"stream";var xn=({subprocessStdout:e,subprocess:t,binary:r,shouldEncode:i,encoding:n,preserveNewlines:s})=>{let o=new AbortController;return G0(t,o),Ml({stream:e,controller:o,binary:r,shouldEncode:!e.readableObjectMode&&i,encoding:n,shouldSplit:!e.readableObjectMode,preserveNewlines:s})},G0=async(e,t)=>{try{await e}catch{}finally{t.abort()}},To=({stream:e,onStreamEnd:t,lines:r,encoding:i,stripFinalNewline:n,allMixed:s})=>{let o=new AbortController;z0(t,o,e);let a=e.readableObjectMode&&!s;return Ml({stream:e,controller:o,binary:i==="buffer",shouldEncode:!a,encoding:i,shouldSplit:!a&&r,preserveNewlines:!n})},z0=async(e,t,r)=>{try{await e}catch{r.destroy()}finally{t.abort()}},Ml=({stream:e,controller:t,binary:r,shouldEncode:i,encoding:n,shouldSplit:s,preserveNewlines:o})=>{let a=U0(e,"data",{signal:t.signal,highWaterMark:Ll,highWatermark:Ll});return V0({onStdoutChunk:a,controller:t,binary:r,shouldEncode:i,encoding:n,shouldSplit:s,preserveNewlines:o})},Ro=N0(!0),Ll=Ro,V0=async function*({onStdoutChunk:e,controller:t,binary:r,shouldEncode:i,encoding:n,shouldSplit:s,preserveNewlines:o}){let a=W0({binary:r,shouldEncode:i,encoding:n,shouldSplit:s,preserveNewlines:o});try{for await(let[c]of e)yield*xt(c,a,0)}catch(c){if(!t.signal.aborted)throw c}finally{yield*br(a)}},W0=({binary:e,shouldEncode:t,encoding:r,shouldSplit:i,preserveNewlines:n})=>[un(e,r,!t),dn(e,n,!i,{})].filter(Boolean);var Fl=async({stream:e,onStreamEnd:t,fdNumber:r,encoding:i,buffer:n,maxBuffer:s,lines:o,allMixed:a,stripFinalNewline:c,verboseInfo:d,streamInfo:p})=>{let u=K0({stream:e,onStreamEnd:t,fdNumber:r,encoding:i,allMixed:a,verboseInfo:d,streamInfo:p});if(!n){await Promise.all([Y0(e),u]);return}let l=co(c,r),m=To({stream:e,onStreamEnd:t,lines:o,encoding:i,stripFinalNewline:l,allMixed:a}),[h]=await Promise.all([J0({stream:e,iterable:m,fdNumber:r,encoding:i,maxBuffer:s,lines:o}),u]);return h},K0=async({stream:e,onStreamEnd:t,fdNumber:r,encoding:i,allMixed:n,verboseInfo:s,streamInfo:{fileDescriptors:o}})=>{if(!hn({stdioItems:o[r]?.stdioItems,encoding:i,verboseInfo:s,fdNumber:r}))return;let a=To({stream:e,onStreamEnd:t,lines:!0,encoding:i,stripFinalNewline:!0,allMixed:n});await Ju(a,e,r,s)},Y0=async e=>{await H0(),e.readableFlowing===null&&e.resume()},J0=async({stream:e,stream:{readableObjectMode:t},iterable:r,fdNumber:i,encoding:n,maxBuffer:s,lines:o})=>{try{return t||o?await Qi(r,{maxBuffer:s}):n==="buffer"?new Uint8Array(await en(r,{maxBuffer:s})):await rn(r,{maxBuffer:s})}catch(a){return Bl(Jd({error:a,stream:e,readableObjectMode:t,lines:o,encoding:n,fdNumber:i}))}},Io=async e=>{try{return await e}catch(t){return Bl(t)}},Bl=({bufferedData:e})=>lc(e)?new Uint8Array(e):e;import{finished as X0}from"stream/promises";var vr=async(e,t,r,{isSameDirection:i,stopOnExit:n=!1}={})=>{let s=Z0(e,r),o=new AbortController;try{await Promise.race([...n?[r.exitPromise]:[],X0(e,{cleanup:!0,signal:o.signal})])}catch(a){s.stdinCleanedUp||tk(a,t,r,i)}finally{o.abort()}},Z0=(e,{originalStreams:[t],subprocess:r})=>{let i={stdinCleanedUp:!1};return e===t&&Q0(e,r,i),i},Q0=(e,t,r)=>{let{_destroy:i}=e;e._destroy=(...n)=>{ek(t,r),i.call(e,...n)}},ek=({exitCode:e,signalCode:t},r)=>{(e!==null||t!==null)&&(r.stdinCleanedUp=!0)},tk=(e,t,r,i)=>{if(!rk(e,t,r,i))throw e},rk=(e,t,r,i=!0)=>r.propagating?Ul(e)||kn(e):(r.propagating=!0,Oo(r,t)===i?Ul(e):kn(e)),Oo=({fileDescriptors:e},t)=>t!=="all"&&e[t].direction==="input",kn=e=>e?.code==="ERR_STREAM_PREMATURE_CLOSE",Ul=e=>e?.code==="EPIPE";var Nl=({subprocess:e,encoding:t,buffer:r,maxBuffer:i,lines:n,stripFinalNewline:s,verboseInfo:o,streamInfo:a})=>e.stdio.map((c,d)=>jo({stream:c,fdNumber:d,encoding:t,buffer:r[d],maxBuffer:i[d],lines:n[d],allMixed:!1,stripFinalNewline:s,verboseInfo:o,streamInfo:a})),jo=async({stream:e,fdNumber:t,encoding:r,buffer:i,maxBuffer:n,lines:s,allMixed:o,stripFinalNewline:a,verboseInfo:c,streamInfo:d})=>{if(!e)return;let p=vr(e,t,d);if(Oo(d,t)){await p;return}let[u]=await Promise.all([Fl({stream:e,onStreamEnd:p,fdNumber:t,encoding:r,buffer:i,maxBuffer:n,lines:s,allMixed:o,stripFinalNewline:a,verboseInfo:c,streamInfo:d}),p]);return u};var Gl=({stdout:e,stderr:t},{all:r})=>r&&(e||t)?kt([e,t].filter(Boolean)):void 0,zl=({subprocess:e,encoding:t,buffer:r,maxBuffer:i,lines:n,stripFinalNewline:s,verboseInfo:o,streamInfo:a})=>jo({...ik(e,r),fdNumber:"all",encoding:t,maxBuffer:i[1]+i[2],lines:n[1]||n[2],allMixed:nk(e),stripFinalNewline:s,verboseInfo:o,streamInfo:a}),ik=({stdout:e,stderr:t,all:r},[,i,n])=>{let s=i||n;return s?i?n?{stream:r,buffer:s}:{stream:e,buffer:s}:{stream:t,buffer:s}:{stream:r,buffer:s}},nk=({all:e,stdout:t,stderr:r})=>e&&t&&r&&t.readableObjectMode!==r.readableObjectMode;import{once as sk}from"events";var Vl=e=>It(e,"ipc"),Wl=(e,t)=>{let r=qi(e);Ie({type:"ipc",verboseMessage:r,fdNumber:"ipc",verboseInfo:t})};var Hl=async({subprocess:e,buffer:t,maxBuffer:r,ipc:i,ipcOutput:n,verboseInfo:s})=>{if(!i)return n;let o=Vl(s),a=Ze(t,"ipc"),c=Ze(r,"ipc");for await(let d of _o({anyProcess:e,channel:e.channel,isSubprocess:!1,ipc:i,shouldAwait:!1,reference:!0}))a&&(Xd(e,n,c),n.push(d)),o&&Wl(d,s);return n},Kl=async(e,t)=>(await Promise.allSettled([e]),t);var Yl=async({subprocess:e,options:{encoding:t,buffer:r,maxBuffer:i,lines:n,timeoutDuration:s,cancelSignal:o,gracefulCancel:a,forceKillAfterDelay:c,stripFinalNewline:d,ipc:p,ipcInput:u},context:l,verboseInfo:m,fileDescriptors:h,originalStreams:f,onInternalError:x,controller:w})=>{let v=tl(e,l),g={originalStreams:f,fileDescriptors:h,subprocess:e,exitPromise:v,propagating:!1},R=Nl({subprocess:e,encoding:t,buffer:r,maxBuffer:i,lines:n,stripFinalNewline:d,verboseInfo:m,streamInfo:g}),S=zl({subprocess:e,encoding:t,buffer:r,maxBuffer:i,lines:n,stripFinalNewline:d,verboseInfo:m,streamInfo:g}),U=[],j=Hl({subprocess:e,buffer:r,maxBuffer:i,ipc:p,ipcOutput:U,verboseInfo:m}),M=ok(f,e,g),G=ak(h,g);try{return await Promise.race([Promise.all([{},il(v),Promise.all(R),S,j,Ed(e,u),...M,...G]),x,ck(e,w),...Sd(e,s,l,w),...Vp({subprocess:e,cancelSignal:o,gracefulCancel:a,context:l,controller:w}),...kd({subprocess:e,cancelSignal:o,gracefulCancel:a,forceKillAfterDelay:c,context:l,controller:w})])}catch(H){return l.terminationReason??="other",Promise.all([{error:H},v,Promise.all(R.map($=>Io($))),Io(S),Kl(j,U),Promise.allSettled(M),Promise.allSettled(G)])}},ok=(e,t,r)=>e.map((i,n)=>i===t.stdio[n]?void 0:vr(i,n,r)),ak=(e,t)=>e.flatMap(({stdioItems:r},i)=>r.filter(({value:n,stream:s=n})=>Ae(s,{checkOpen:!1})&&!Se(s)).map(({type:n,value:s,stream:o=s})=>vr(o,i,t,{isSameDirection:ke.has(n),stopOnExit:n==="native"}))),ck=async(e,{signal:t})=>{let[r]=await sk(e,"error",{signal:t});throw r};var Jl=()=>({readableDestroy:new WeakMap,writableFinal:new WeakMap,writableDestroy:new WeakMap}),Sr=(e,t,r)=>{let i=e[r];i.has(t)||i.set(t,[]);let n=i.get(t),s=Oe();return n.push(s),{resolve:s.resolve.bind(s),promises:n}},Vt=async({resolve:e,promises:t},r)=>{e();let[i]=await Promise.race([Promise.allSettled([!0,r]),Promise.all([!1,...t])]);return!i};import{Readable as pk}from"stream";import{callbackify as dk}from"util";import{finished as Xl}from"stream/promises";var Do=async e=>{if(e!==void 0)try{await Lo(e)}catch{}},Zl=async e=>{if(e!==void 0)try{await Mo(e)}catch{}},Lo=async e=>{await Xl(e,{cleanup:!0,readable:!1,writable:!0})},Mo=async e=>{await Xl(e,{cleanup:!0,readable:!0,writable:!1})},vn=async(e,t)=>{if(await e,t)throw t},Sn=(e,t,r)=>{r&&!kn(r)?e.destroy(r):t&&e.destroy()};var Ql=({subprocess:e,concurrentStreams:t,encoding:r},{from:i,binary:n=!0,preserveNewlines:s=!0}={})=>{let o=n||ye.has(r),{subprocessStdout:a,waitReadableDestroy:c}=Fo(e,i,t),{readableEncoding:d,readableObjectMode:p,readableHighWaterMark:u}=Bo(a,o),{read:l,onStdoutDataDone:m}=Uo({subprocessStdout:a,subprocess:e,binary:o,encoding:r,preserveNewlines:s}),h=new pk({read:l,destroy:dk(Go.bind(void 0,{subprocessStdout:a,subprocess:e,waitReadableDestroy:c})),highWaterMark:u,objectMode:p,encoding:d});return No({subprocessStdout:a,onStdoutDataDone:m,readable:h,subprocess:e}),h},Fo=(e,t,r)=>{let i=Mt(e,t),n=Sr(r,i,"readableDestroy");return{subprocessStdout:i,waitReadableDestroy:n}},Bo=({readableEncoding:e,readableObjectMode:t,readableHighWaterMark:r},i)=>i?{readableEncoding:e,readableObjectMode:t,readableHighWaterMark:r}:{readableEncoding:e,readableObjectMode:!0,readableHighWaterMark:Ro},Uo=({subprocessStdout:e,subprocess:t,binary:r,encoding:i,preserveNewlines:n})=>{let s=Oe(),o=xn({subprocessStdout:e,subprocess:t,binary:r,shouldEncode:!r,encoding:i,preserveNewlines:n});return{read(){uk(this,o,s)},onStdoutDataDone:s}},uk=async(e,t,r)=>{try{let{value:i,done:n}=await t.next();n?r.resolve():e.push(i)}catch{}},No=async({subprocessStdout:e,onStdoutDataDone:t,readable:r,subprocess:i,subprocessStdin:n})=>{try{await Mo(e),await i,await Do(n),await t,r.readable&&r.push(null)}catch(s){await Do(n),em(r,s)}},Go=async({subprocessStdout:e,subprocess:t,waitReadableDestroy:r},i)=>{await Vt(r,t)&&(em(e,i),await vn(t,i))},em=(e,t)=>{Sn(e,e.readable,t)};import{Writable as lk}from"stream";import{callbackify as tm}from"util";var rm=({subprocess:e,concurrentStreams:t},{to:r}={})=>{let{subprocessStdin:i,waitWritableFinal:n,waitWritableDestroy:s}=zo(e,r,t),o=new lk({...Vo(i,e,n),destroy:tm(Ho.bind(void 0,{subprocessStdin:i,subprocess:e,waitWritableFinal:n,waitWritableDestroy:s})),highWaterMark:i.writableHighWaterMark,objectMode:i.writableObjectMode});return Wo(i,o),o},zo=(e,t,r)=>{let i=Li(e,t),n=Sr(r,i,"writableFinal"),s=Sr(r,i,"writableDestroy");return{subprocessStdin:i,waitWritableFinal:n,waitWritableDestroy:s}},Vo=(e,t,r)=>({write:mk.bind(void 0,e),final:tm(hk.bind(void 0,e,t,r))}),mk=(e,t,r,i)=>{e.write(t,r)?i():e.once("drain",i)},hk=async(e,t,r)=>{await Vt(r,t)&&(e.writable&&e.end(),await t)},Wo=async(e,t,r)=>{try{await Lo(e),t.writable&&t.end()}catch(i){await Zl(r),im(t,i)}},Ho=async({subprocessStdin:e,subprocess:t,waitWritableFinal:r,waitWritableDestroy:i},n)=>{await Vt(r,t),await Vt(i,t)&&(im(e,n),await vn(t,n))},im=(e,t)=>{Sn(e,e.writable,t)};import{Duplex as yk}from"stream";import{callbackify as fk}from"util";var nm=({subprocess:e,concurrentStreams:t,encoding:r},{from:i,to:n,binary:s=!0,preserveNewlines:o=!0}={})=>{let a=s||ye.has(r),{subprocessStdout:c,waitReadableDestroy:d}=Fo(e,i,t),{subprocessStdin:p,waitWritableFinal:u,waitWritableDestroy:l}=zo(e,n,t),{readableEncoding:m,readableObjectMode:h,readableHighWaterMark:f}=Bo(c,a),{read:x,onStdoutDataDone:w}=Uo({subprocessStdout:c,subprocess:e,binary:a,encoding:r,preserveNewlines:o}),v=new yk({read:x,...Vo(p,e,u),destroy:fk(gk.bind(void 0,{subprocessStdout:c,subprocessStdin:p,subprocess:e,waitReadableDestroy:d,waitWritableFinal:u,waitWritableDestroy:l})),readableHighWaterMark:f,writableHighWaterMark:p.writableHighWaterMark,readableObjectMode:h,writableObjectMode:p.writableObjectMode,encoding:m});return No({subprocessStdout:c,onStdoutDataDone:w,readable:v,subprocess:e,subprocessStdin:p}),Wo(p,v,c),v},gk=async({subprocessStdout:e,subprocessStdin:t,subprocess:r,waitReadableDestroy:i,waitWritableFinal:n,waitWritableDestroy:s},o)=>{await Promise.all([Go({subprocessStdout:e,subprocess:r,waitReadableDestroy:i},o),Ho({subprocessStdin:t,subprocess:r,waitWritableFinal:n,waitWritableDestroy:s},o)])};var Ko=(e,t,{from:r,binary:i=!1,preserveNewlines:n=!1}={})=>{let s=i||ye.has(t),o=Mt(e,r),a=xn({subprocessStdout:o,subprocess:e,binary:s,shouldEncode:!0,encoding:t,preserveNewlines:n});return _k(a,o,e)},_k=async function*(e,t,r){try{yield*e}finally{t.readable&&t.destroy(),await r}};var sm=(e,{encoding:t})=>{let r=Jl();e.readable=Ql.bind(void 0,{subprocess:e,concurrentStreams:r,encoding:t}),e.writable=rm.bind(void 0,{subprocess:e,concurrentStreams:r}),e.duplex=nm.bind(void 0,{subprocess:e,concurrentStreams:r,encoding:t}),e.iterable=Ko.bind(void 0,e,t),e[Symbol.asyncIterator]=Ko.bind(void 0,e,t,{})};var om=(e,t)=>{for(let[r,i]of wk){let n=i.value.bind(t);Reflect.defineProperty(e,r,{...i,value:n})}},bk=(async()=>{})().constructor.prototype,wk=["then","catch","finally"].map(e=>[e,Reflect.getOwnPropertyDescriptor(bk,e)]);var am=(e,t,r,i)=>{let{file:n,commandArguments:s,command:o,escapedCommand:a,startTime:c,verboseInfo:d,options:p,fileDescriptors:u}=vk(e,t,r),{subprocess:l,promise:m}=qk({file:n,commandArguments:s,options:p,startTime:c,verboseInfo:d,command:o,escapedCommand:a,fileDescriptors:u});return l.pipe=wn.bind(void 0,{source:l,sourcePromise:m,boundOptions:{},createNested:i}),om(l,m),je.set(l,{options:p,fileDescriptors:u}),l},vk=(e,t,r)=>{let{command:i,escapedCommand:n,startTime:s,verboseInfo:o}=Ai(e,t,r),{file:a,commandArguments:c,options:d}=Ki(e,t,r),p=Sk(d),u=_l(p,o);return{file:a,commandArguments:c,command:i,escapedCommand:n,startTime:s,verboseInfo:o,options:p,fileDescriptors:u}},Sk=({timeout:e,signal:t,...r})=>{if(t!==void 0)throw new TypeError('The "signal" option has been renamed to "cancelSignal" instead.');return{...r,timeoutDuration:e}},qk=({file:e,commandArguments:t,options:r,startTime:i,verboseInfo:n,command:s,escapedCommand:o,fileDescriptors:a})=>{let c;try{c=kk(...Yi(e,t,r))}catch(h){return hl({error:h,command:s,escapedCommand:o,fileDescriptors:a,options:r,startTime:i,verboseInfo:n})}let d=new AbortController;xk(Number.POSITIVE_INFINITY,d.signal);let p=[...c.stdio];Al(c,a,d),El(c,r,d);let u={},l=Oe();c.kill=Gp.bind(void 0,{kill:c.kill.bind(c),options:r,onInternalError:l,context:u,controller:d}),c.all=Gl(c,r),sm(c,r),ul(c,r);let m=$k({subprocess:c,options:r,startTime:i,verboseInfo:n,fileDescriptors:a,originalStreams:p,command:s,escapedCommand:o,context:u,onInternalError:l,controller:d});return{subprocess:c,promise:m}},$k=async({subprocess:e,options:t,startTime:r,verboseInfo:i,fileDescriptors:n,originalStreams:s,command:o,escapedCommand:a,context:c,onInternalError:d,controller:p})=>{let[u,[l,m],h,f,x]=await Yl({subprocess:e,options:t,context:c,verboseInfo:i,fileDescriptors:n,originalStreams:s,onInternalError:d,controller:p});p.abort(),d.resolve();let w=h.map((R,S)=>et(R,t,S)),v=et(f,t,"all"),g=Ak({errorInfo:u,exitCode:l,signal:m,stdio:w,all:v,ipcOutput:x,context:c,options:t,command:o,escapedCommand:a,startTime:r});return Nt(g,i,t)},Ak=({errorInfo:e,exitCode:t,signal:r,stdio:i,all:n,ipcOutput:s,context:o,options:a,command:c,escapedCommand:d,startTime:p})=>"error"in e?_r({error:e.error,command:c,escapedCommand:d,timedOut:o.terminationReason==="timeout",isCanceled:o.terminationReason==="cancel"||o.terminationReason==="gracefulCancel",isGracefullyCanceled:o.terminationReason==="gracefulCancel",isMaxBuffer:e.error instanceof De,isForcefullyTerminated:o.isForcefullyTerminated,exitCode:t,signal:r,stdio:i,all:n,ipcOutput:s,options:a,startTime:p,isSync:!1}):sn({command:c,escapedCommand:d,stdio:i,all:n,ipcOutput:s,options:a,startTime:p});var qn=(e,t)=>{let r=Object.fromEntries(Object.entries(t).map(([i,n])=>[i,Ck(i,e[i],n)]));return{...e,...r}},Ck=(e,t,r)=>Ek.has(e)&&Y(t)&&Y(r)?{...t,...r}:r,Ek=new Set(["env",...vs]);var pt=(e,t,r,i)=>{let n=(o,a,c)=>pt(o,a,r,c),s=(...o)=>Pk({mapArguments:e,deepOptions:r,boundOptions:t,setBoundExeca:i,createNested:n},...o);return i!==void 0&&i(s,n,t),s},Pk=({mapArguments:e,deepOptions:t={},boundOptions:r={},setBoundExeca:i,createNested:n},s,...o)=>{if(Y(s))return n(e,qn(r,s),i);let{file:a,commandArguments:c,options:d,isSync:p}=Tk({mapArguments:e,firstArgument:s,nextArguments:o,deepOptions:t,boundOptions:r});return p?sl(a,c,d):am(a,c,d,n)},Tk=({mapArguments:e,firstArgument:t,nextArguments:r,deepOptions:i,boundOptions:n})=>{let s=_c(t)?bc(t,r):[t,...r],[o,a,c]=fi(...s),d=qn(qn(i,n),c),{file:p=o,commandArguments:u=a,options:l=d,isSync:m=!1}=e({file:o,commandArguments:a,options:d});return{file:p,commandArguments:u,options:l,isSync:m}};var cm=({file:e,commandArguments:t})=>dm(e,t),pm=({file:e,commandArguments:t})=>({...dm(e,t),isSync:!0}),dm=(e,t)=>{if(t.length>0)throw new TypeError(`The command and its arguments must be passed as a single string: ${e} ${t}.`);let[r,...i]=Rk(e);return{file:r,commandArguments:i}},Rk=e=>{if(typeof e!="string")throw new TypeError(`The command must be a string: ${String(e)}.`);let t=e.trim();if(t==="")return[];let r=[];for(let i of t.split(Ik)){let n=r.at(-1);n&&n.endsWith("\\")?r[r.length-1]=`${n.slice(0,-1)} ${i}`:r.push(i)}return r},Ik=/ +/g;var um=(e,t,r)=>{e.sync=t(Ok,r),e.s=e.sync},lm=({options:e})=>mm(e),Ok=({options:e})=>({...mm(e),isSync:!0}),mm=e=>({options:{...jk(e),...e}}),jk=({input:e,inputFile:t,stdio:r})=>e===void 0&&t===void 0&&r===void 0?{stdin:"inherit"}:{},hm={preferLocal:!0};var ee=pt(()=>({})),a1=pt(()=>({isSync:!0})),dt=pt(cm),c1=pt(pm),p1=pt($d),d1=pt(lm,{},hm,um),{sendMessage:u1,getOneMessage:l1,getEachMessage:m1,getCancelSignal:h1}=ll();var ue=D(K(),1);var Ar=D(K(),1);import Ce from"fs";import Mk from"os";import Ne from"path";var Wt="spree@example.com",Ht="spree123";import Me from"fs";import ut from"path";function _(e=process.cwd()){let t=Dk(e),r=ut.join(t,"docker-compose.yml");if(!Me.existsSync(r))throw new Error(`Not a Spree project directory. No docker-compose.yml found.
142
- Run this command from a directory created with create-spree-app.`);let i=Lk(t);return{mode:"docker",projectDir:t,port:i}}function Dk(e){if(ut.basename(e)!=="backend")return e;let t=ut.dirname(e);for(let r of["docker-compose.yml","docker-compose.dev.yml"]){let i=ut.join(t,r);if(Me.existsSync(i))try{if(/\.\/backend:\/rails(:\w+)?(\s|$)/m.test(Me.readFileSync(i,"utf-8")))return t}catch{}}return e}function Fe(e){let t=ut.join(e,".env");if(!Me.existsSync(t))return!1;try{let r=Me.readFileSync(t,"utf-8");return/^\s*SPREE_PATH\s*=/m.test(r)}catch{return!1}}function qr(e){let t=ut.join(e,"docker-compose.yml");if(!Me.existsSync(t))return!1;try{return/^\s*build\s*:/m.test(Me.readFileSync(t,"utf-8"))}catch{return!1}}function An(e){try{let r=Me.readFileSync(ut.join(e,".env"),"utf-8").match(/^SPREE_SAMPLE_DATA=(true|false)\b/m);return r?r[1]==="true":void 0}catch{return}}function Lk(e){let t=ut.join(e,".env");if(!Me.existsSync(t))return 3e3;let i=Me.readFileSync(t,"utf-8").match(/^SPREE_PORT=(\d+)/m);return i?Number(i[1]):3e3}var ym=D(K(),1);async function X(e,t,r){return ee("docker",["compose",...e],{cwd:t,...r})}async function lt(e,t){try{await X(["up","-d","--no-deps","web"],e,{stdio:t?.stdio??"inherit"})}catch{}}async function ie(e,t,r){return(await Jo(["bin/rails",e],t,{env:r})).split(`
141
+ if (condition) { yield value; }`)};import{Buffer as ex}from"buffer";import{StringDecoder as tx}from"string_decoder";var ln=(e,t,r)=>{if(r)return;if(e)return{transform:rx.bind(void 0,new TextEncoder)};let i=new tx(t);return{transform:ix.bind(void 0,i),final:nx.bind(void 0,i)}},rx=function*(e,t){ex.isBuffer(t)?yield Xe(t):typeof t=="string"?yield e.encode(t):yield t},ix=function*(e,t){yield Q(t)?e.write(t):t},nx=function*(e){let t=e.end();t!==""&&(yield t)};import{callbackify as Gu}from"util";var lo=Gu(async(e,t,r,i)=>{t.currentIterable=e(...r);try{for await(let n of t.currentIterable)i.push(n)}finally{delete t.currentIterable}}),mn=async function*(e,t,r){if(r===t.length){yield e;return}let{transform:i=ox}=t[r];for await(let n of i(e))yield*mn(n,t,r+1)},zu=async function*(e){for(let[t,{final:r}]of Object.entries(e))yield*sx(r,Number(t),e)},sx=async function*(e,t,r){if(e!==void 0)for await(let i of e())yield*mn(i,r,t+1)},Vu=Gu(async({currentIterable:e},t)=>{if(e!==void 0){await(t?e.throw(t):e.return());return}if(t)throw t}),ox=function*(e){yield e};var mo=(e,t,r,i)=>{try{for(let n of e(...t))r.push(n);i()}catch(n){i(n)}},Wu=(e,t)=>[...t.flatMap(r=>[...xt(r,e,0)]),...wr(e)],xt=function*(e,t,r){if(r===t.length){yield e;return}let{transform:i=cx}=t[r];for(let n of i(e))yield*xt(n,t,r+1)},wr=function*(e){for(let[t,{final:r}]of Object.entries(e))yield*ax(r,Number(t),e)},ax=function*(e,t,r){if(e!==void 0)for(let i of e())yield*xt(i,r,t+1)},cx=function*(e){yield e};var ho=({value:e,value:{transform:t,final:r,writableObjectMode:i,readableObjectMode:n},optionName:s},{encoding:o})=>{let a={},c=Ku(e,o,s),d=wt(t),p=wt(r),u=d?lo.bind(void 0,mn,a):mo.bind(void 0,xt),l=d||p?lo.bind(void 0,zu,a):mo.bind(void 0,wr),m=d||p?Vu.bind(void 0,a):void 0;return{stream:new px({writableObjectMode:i,writableHighWaterMark:Hu(i),readableObjectMode:n,readableHighWaterMark:Hu(n),transform(f,x,w){u([f,c,0],this,w)},flush(f){l([c],this,f)},destroy:m})}},hn=(e,t,r,i)=>{let n=t.filter(({type:o})=>o==="generator"),s=i?n.reverse():n;for(let{value:o,optionName:a}of s){let c=Ku(o,r,a);e=Wu(c,e)}return e},Ku=({transform:e,final:t,binary:r,writableObjectMode:i,readableObjectMode:n,preserveNewlines:s},o,a)=>{let c={};return[{transform:Bu(i,a)},ln(r,o,i),un(r,s,i,c),{transform:e,final:t},{transform:Uu(n,a)},Fu({binary:r,preserveNewlines:s,readableObjectMode:n,state:c})].filter(Boolean)};var Yu=(e,t)=>{for(let r of dx(e))ux(e,r,t)},dx=e=>new Set(Object.entries(e).filter(([,{direction:t}])=>t==="input").map(([t])=>Number(t))),ux=(e,t,r)=>{let{stdioItems:i}=e[t],n=i.filter(({contents:a})=>a!==void 0);if(n.length===0)return;if(t!==0){let[{type:a,optionName:c}]=n;throw new TypeError(`Only the \`stdin\` option, not \`${c}\`, can be ${ct[a]} with synchronous methods.`)}let o=n.map(({contents:a})=>a).map(a=>lx(a,i));r.input=dr(o)},lx=(e,t)=>{let r=hn(e,t,"utf8",!0);return mx(r),dr(r)},mx=e=>{let t=e.find(r=>typeof r!="string"&&!Q(r));if(t!==void 0)throw new TypeError(`The \`stdin\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${t}.`)};import{writeFileSync as gx,appendFileSync as _x}from"fs";var yn=({stdioItems:e,encoding:t,verboseInfo:r,fdNumber:i})=>i!=="all"&&It(r,i)&&!ye.has(t)&&hx(i)&&(e.some(({type:n,value:s})=>n==="native"&&yx.has(s))||e.every(({type:n})=>ke.has(n))),hx=e=>e===1||e===2,yx=new Set(["pipe","overlapped"]),Ju=async(e,t,r,i)=>{for await(let n of e)fx(t)||Zu(n,r,i)},Xu=(e,t,r)=>{for(let i of e)Zu(i,t,r)},fx=e=>e._readableState.pipes.length>0,Zu=(e,t,r)=>{let i=$i(e);Ie({type:"output",verboseMessage:i,fdNumber:t,verboseInfo:r})};var Qu=({fileDescriptors:e,syncResult:{output:t},options:r,isMaxBuffer:i,verboseInfo:n})=>{if(t===null)return{output:Array.from({length:3})};let s={},o=new Set([]);return{output:t.map((c,d)=>bx({result:c,fileDescriptors:e,fdNumber:d,state:s,outputFiles:o,isMaxBuffer:i,verboseInfo:n},r)),...s}},bx=({result:e,fileDescriptors:t,fdNumber:r,state:i,outputFiles:n,isMaxBuffer:s,verboseInfo:o},{buffer:a,encoding:c,lines:d,stripFinalNewline:p,maxBuffer:u})=>{if(e===null)return;let l=eu(e,s,u),m=Xe(l),{stdioItems:h,objectMode:f}=t[r],x=wx([m],h,c,i),{serializedResult:w,finalResult:v=w}=xx({chunks:x,objectMode:f,encoding:c,lines:d,stripFinalNewline:p,fdNumber:r});kx({serializedResult:w,fdNumber:r,state:i,verboseInfo:o,encoding:c,stdioItems:h,objectMode:f});let g=a[r]?v:void 0;try{return i.error===void 0&&vx(w,h,n),g}catch(R){return i.error=R,g}},wx=(e,t,r,i)=>{try{return hn(e,t,r,!1)}catch(n){return i.error=n,e}},xx=({chunks:e,objectMode:t,encoding:r,lines:i,stripFinalNewline:n,fdNumber:s})=>{if(t)return{serializedResult:e};if(r==="buffer")return{serializedResult:dr(e)};let o=hc(e,r);return i[s]?{serializedResult:o,finalResult:uo(o,!n[s],t)}:{serializedResult:o}},kx=({serializedResult:e,fdNumber:t,state:r,verboseInfo:i,encoding:n,stdioItems:s,objectMode:o})=>{if(!yn({stdioItems:s,encoding:n,verboseInfo:i,fdNumber:t}))return;let a=uo(e,!1,o);try{Xu(a,t,i)}catch(c){r.error??=c}},vx=(e,t,r)=>{for(let{path:i,append:n}of t.filter(({type:s})=>pn.has(s))){let s=typeof i=="string"?i:i.toString();n||r.has(s)?_x(i,e):(r.add(s),gx(i,e))}};var el=([,e,t],r)=>{if(r.all)return e===void 0?t:t===void 0?e:Array.isArray(e)?Array.isArray(t)?[...e,...t]:[...e,et(t,r,"all")]:Array.isArray(t)?[et(e,r,"all"),...t]:Q(e)&&Q(t)?bs([e,t]):`${e}${t}`};import{once as yo}from"events";var tl=async(e,t)=>{let[r,i]=await Sx(e);return t.isForcefullyTerminated??=!1,[r,i]},Sx=async e=>{let[t,r]=await Promise.allSettled([yo(e,"spawn"),yo(e,"exit")]);return t.status==="rejected"?[]:r.status==="rejected"?rl(e):r.value},rl=async e=>{try{return await yo(e,"exit")}catch{return rl(e)}},il=async e=>{let[t,r]=await e;if(!qx(t,r)&&fo(t,r))throw new qe;return[t,r]},qx=(e,t)=>e===void 0&&t===void 0,fo=(e,t)=>e!==0||t!==null;var nl=({error:e,status:t,signal:r,output:i},{maxBuffer:n})=>{let s=$x(e,t,r),o=s?.code==="ETIMEDOUT",a=Qd(s,i,n);return{resultError:s,exitCode:t,signal:r,timedOut:o,isMaxBuffer:a}},$x=(e,t,r)=>e!==void 0?e:fo(t,r)?new qe:void 0;var sl=(e,t,r)=>{let{file:i,commandArguments:n,command:s,escapedCommand:o,startTime:a,verboseInfo:c,options:d,fileDescriptors:p}=Cx(e,t,r),u=Tx({file:i,commandArguments:n,options:d,command:s,escapedCommand:o,verboseInfo:c,fileDescriptors:p,startTime:a});return Nt(u,c,d)},Cx=(e,t,r)=>{let{command:i,escapedCommand:n,startTime:s,verboseInfo:o}=Ci(e,t,r),a=Ex(r),{file:c,commandArguments:d,options:p}=Yi(e,t,a);Px(p);let u=ju(p,o);return{file:c,commandArguments:d,command:i,escapedCommand:n,startTime:s,verboseInfo:o,options:p,fileDescriptors:u}},Ex=e=>e.node&&!e.ipc?{...e,ipc:!1}:e,Px=({ipc:e,ipcInput:t,detached:r,cancelSignal:i})=>{t&&fn("ipcInput"),e&&fn("ipc: true"),r&&fn("detached: true"),i&&fn("cancelSignal")},fn=e=>{throw new TypeError(`The "${e}" option cannot be used with synchronous methods.`)},Tx=({file:e,commandArguments:t,options:r,command:i,escapedCommand:n,verboseInfo:s,fileDescriptors:o,startTime:a})=>{let c=Rx({file:e,commandArguments:t,options:r,command:i,escapedCommand:n,fileDescriptors:o,startTime:a});if(c.failed)return c;let{resultError:d,exitCode:p,signal:u,timedOut:l,isMaxBuffer:m}=nl(c,r),{output:h,error:f=d}=Qu({fileDescriptors:o,syncResult:c,options:r,isMaxBuffer:m,verboseInfo:s}),x=h.map((v,g)=>et(v,r,g)),w=et(el(h,r),r,"all");return Ox({error:f,exitCode:p,signal:u,timedOut:l,isMaxBuffer:m,stdio:x,all:w,options:r,command:i,escapedCommand:n,startTime:a})},Rx=({file:e,commandArguments:t,options:r,command:i,escapedCommand:n,fileDescriptors:s,startTime:o})=>{try{Yu(s,r);let a=Ix(r);return Ax(...Ji(e,t,a))}catch(a){return Ut({error:a,command:i,escapedCommand:n,fileDescriptors:s,options:r,startTime:o,isSync:!0})}},Ix=({encoding:e,maxBuffer:t,...r})=>({...r,encoding:"buffer",maxBuffer:sn(t)}),Ox=({error:e,exitCode:t,signal:r,timedOut:i,isMaxBuffer:n,stdio:s,all:o,options:a,command:c,escapedCommand:d,startTime:p})=>e===void 0?on({command:c,escapedCommand:d,stdio:s,all:o,ipcOutput:[],options:a,startTime:p}):br({error:e,command:c,escapedCommand:d,timedOut:i,isCanceled:!1,isGracefullyCanceled:!1,isMaxBuffer:n,isForcefullyTerminated:!1,exitCode:t,signal:r,stdio:s,all:o,ipcOutput:[],options:a,startTime:p,isSync:!0});import{setMaxListeners as xk}from"events";import{spawn as kk}from"child_process";import dl from"process";import{once as go,on as jx}from"events";var ol=({anyProcess:e,channel:t,isSubprocess:r,ipc:i},{reference:n=!0,filter:s}={})=>(Dt({methodName:"getOneMessage",isSubprocess:r,ipc:i,isConnected:Gi(e)}),Dx({anyProcess:e,channel:t,isSubprocess:r,filter:s,reference:n})),Dx=async({anyProcess:e,channel:t,isSubprocess:r,filter:i,reference:n})=>{Fi(t,n);let s=at(e,t,r),o=new AbortController;try{return await Promise.race([Lx(s,i,o),Mx(s,r,o),Fx(s,r,o)])}catch(a){throw Lt(e),a}finally{o.abort(),Bi(t,n)}},Lx=async(e,t,{signal:r})=>{if(t===void 0){let[i]=await go(e,"message",{signal:r});return i}for await(let[i]of jx(e,"message",{signal:r}))if(t(i))return i},Mx=async(e,t,{signal:r})=>{await go(e,"disconnect",{signal:r}),Wp(t)},Fx=async(e,t,{signal:r})=>{let[i]=await go(e,"strict:error",{signal:r});throw Di(i,t)};import{once as cl,on as Bx}from"events";var pl=({anyProcess:e,channel:t,isSubprocess:r,ipc:i},{reference:n=!0}={})=>_o({anyProcess:e,channel:t,isSubprocess:r,ipc:i,shouldAwait:!r,reference:n}),_o=({anyProcess:e,channel:t,isSubprocess:r,ipc:i,shouldAwait:n,reference:s})=>{Dt({methodName:"getEachMessage",isSubprocess:r,ipc:i,isConnected:Gi(e)}),Fi(t,s);let o=at(e,t,r),a=new AbortController,c={};return Ux(e,o,a),Nx({ipcEmitter:o,isSubprocess:r,controller:a,state:c}),Gx({anyProcess:e,channel:t,ipcEmitter:o,isSubprocess:r,shouldAwait:n,controller:a,state:c,reference:s})},Ux=async(e,t,r)=>{try{await cl(t,"disconnect",{signal:r.signal}),r.abort()}catch{}},Nx=async({ipcEmitter:e,isSubprocess:t,controller:r,state:i})=>{try{let[n]=await cl(e,"strict:error",{signal:r.signal});i.error=Di(n,t),r.abort()}catch{}},Gx=async function*({anyProcess:e,channel:t,ipcEmitter:r,isSubprocess:i,shouldAwait:n,controller:s,state:o,reference:a}){try{for await(let[c]of Bx(r,"message",{signal:s.signal}))al(o),yield c}catch{al(o)}finally{s.abort(),Bi(t,a),i||Lt(e),n&&await e}},al=({error:e})=>{if(e)throw e};var ul=(e,{ipc:t})=>{Object.assign(e,ml(e,!1,t))},ll=()=>{let e=dl,t=!0,r=dl.channel!==void 0;return{...ml(e,t,r),getCancelSignal:bd.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:r})}},ml=(e,t,r)=>({sendMessage:Hi.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:r}),getOneMessage:ol.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:r}),getEachMessage:pl.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:r})});import{ChildProcess as zx}from"child_process";import{PassThrough as Vx,Readable as Wx,Writable as Hx,Duplex as Kx}from"stream";var hl=({error:e,command:t,escapedCommand:r,fileDescriptors:i,options:n,startTime:s,verboseInfo:o})=>{ao(i);let a=new zx;Yx(a,i),Object.assign(a,{readable:Jx,writable:Xx,duplex:Zx});let c=Ut({error:e,command:t,escapedCommand:r,fileDescriptors:i,options:n,startTime:s,isSync:!1}),d=Qx(c,o,n);return{subprocess:a,promise:d}},Yx=(e,t)=>{let r=xr(),i=xr(),n=xr(),s=Array.from({length:t.length-3},xr),o=xr(),a=[r,i,n,...s];Object.assign(e,{stdin:r,stdout:i,stderr:n,all:o,stdio:a})},xr=()=>{let e=new Vx;return e.end(),e},Jx=()=>new Wx({read(){}}),Xx=()=>new Hx({write(){}}),Zx=()=>new Kx({read(){},write(){}}),Qx=async(e,t,r)=>Nt(e,t,r);import{createReadStream as yl,createWriteStream as fl}from"fs";import{Buffer as e0}from"buffer";import{Readable as kr,Writable as t0,Duplex as r0}from"stream";var _l=(e,t)=>dn(i0,e,t,!1),vr=({type:e,optionName:t})=>{throw new TypeError(`The \`${t}\` option cannot be ${ct[e]}.`)},gl={fileNumber:vr,generator:ho,asyncGenerator:ho,nodeStream:({value:e})=>({stream:e}),webTransform({value:{transform:e,writableObjectMode:t,readableObjectMode:r}}){let i=t||r;return{stream:r0.fromWeb(e,{objectMode:i})}},duplex:({value:{transform:e}})=>({stream:e}),native(){}},i0={input:{...gl,fileUrl:({value:e})=>({stream:yl(e)}),filePath:({value:{file:e}})=>({stream:yl(e)}),webStream:({value:e})=>({stream:kr.fromWeb(e)}),iterable:({value:e})=>({stream:kr.from(e)}),asyncIterable:({value:e})=>({stream:kr.from(e)}),string:({value:e})=>({stream:kr.from(e)}),uint8Array:({value:e})=>({stream:kr.from(e0.from(e))})},output:{...gl,fileUrl:({value:e})=>({stream:fl(e)}),filePath:({value:{file:e,append:t}})=>({stream:fl(e,t?{flags:"a"}:{})}),webStream:({value:e})=>({stream:t0.fromWeb(e)}),iterable:vr,asyncIterable:vr,string:vr,uint8Array:vr}};import{on as n0,once as bl}from"events";import{PassThrough as s0,getDefaultHighWaterMark as o0}from"stream";import{finished as kl}from"stream/promises";function kt(e){if(!Array.isArray(e))throw new TypeError(`Expected an array, got \`${typeof e}\`.`);for(let n of e)wo(n);let t=e.some(({readableObjectMode:n})=>n),r=a0(e,t),i=new bo({objectMode:t,writableHighWaterMark:r,readableHighWaterMark:r});for(let n of e)i.add(n);return i}var a0=(e,t)=>{if(e.length===0)return o0(t);let r=e.filter(({readableObjectMode:i})=>i===t).map(({readableHighWaterMark:i})=>i);return Math.max(...r)},bo=class extends s0{#t=new Set([]);#r=new Set([]);#e=new Set([]);#i;#s=Symbol("unpipe");#n=new WeakMap;add(t){if(wo(t),this.#t.has(t))return;this.#t.add(t),this.#i??=c0(this,this.#t,this.#s);let r=u0({passThroughStream:this,stream:t,streams:this.#t,ended:this.#r,aborted:this.#e,onFinished:this.#i,unpipeEvent:this.#s});this.#n.set(t,r),t.pipe(this,{end:!1})}async remove(t){if(wo(t),!this.#t.has(t))return!1;let r=this.#n.get(t);return r===void 0?!1:(this.#n.delete(t),t.unpipe(this),await r,!0)}},c0=async(e,t,r)=>{gn(e,wl);let i=new AbortController;try{await Promise.race([p0(e,i),d0(e,t,r,i)])}finally{i.abort(),gn(e,-wl)}},p0=async(e,{signal:t})=>{try{await kl(e,{signal:t,cleanup:!0})}catch(r){throw vl(e,r),r}},d0=async(e,t,r,{signal:i})=>{for await(let[n]of n0(e,"unpipe",{signal:i}))t.has(n)&&n.emit(r)},wo=e=>{if(typeof e?.pipe!="function")throw new TypeError(`Expected a readable stream, got: \`${typeof e}\`.`)},u0=async({passThroughStream:e,stream:t,streams:r,ended:i,aborted:n,onFinished:s,unpipeEvent:o})=>{gn(e,xl);let a=new AbortController;try{await Promise.race([l0(s,t,a),m0({passThroughStream:e,stream:t,streams:r,ended:i,aborted:n,controller:a}),h0({stream:t,streams:r,ended:i,aborted:n,unpipeEvent:o,controller:a})])}finally{a.abort(),gn(e,-xl)}r.size>0&&r.size===i.size+n.size&&(i.size===0&&n.size>0?xo(e):y0(e))},l0=async(e,t,{signal:r})=>{try{await e,r.aborted||xo(t)}catch(i){r.aborted||vl(t,i)}},m0=async({passThroughStream:e,stream:t,streams:r,ended:i,aborted:n,controller:{signal:s}})=>{try{await kl(t,{signal:s,cleanup:!0,readable:!0,writable:!1}),r.has(t)&&i.add(t)}catch(o){if(s.aborted||!r.has(t))return;Sl(o)?n.add(t):ql(e,o)}},h0=async({stream:e,streams:t,ended:r,aborted:i,unpipeEvent:n,controller:{signal:s}})=>{if(await bl(e,n,{signal:s}),!e.readable)return bl(s,"abort",{signal:s});t.delete(e),r.delete(e),i.delete(e)},y0=e=>{e.writable&&e.end()},vl=(e,t)=>{Sl(t)?xo(e):ql(e,t)},Sl=e=>e?.code==="ERR_STREAM_PREMATURE_CLOSE",xo=e=>{(e.readable||e.writable)&&e.destroy()},ql=(e,t)=>{e.destroyed||(e.once("error",f0),e.destroy(t))},f0=()=>{},gn=(e,t)=>{let r=e.getMaxListeners();r!==0&&r!==Number.POSITIVE_INFINITY&&e.setMaxListeners(r+t)},wl=2,xl=1;import{finished as $l}from"stream/promises";var zt=(e,t)=>{e.pipe(t),g0(e,t),_0(e,t)},g0=async(e,t)=>{if(!(Se(e)||Se(t))){try{await $l(e,{cleanup:!0,readable:!0,writable:!1})}catch{}ko(t)}},ko=e=>{e.writable&&e.end()},_0=async(e,t)=>{if(!(Se(e)||Se(t))){try{await $l(t,{cleanup:!0,readable:!1,writable:!0})}catch{}vo(e)}},vo=e=>{e.readable&&e.destroy()};var Al=(e,t,r)=>{let i=new Map;for(let[n,{stdioItems:s,direction:o}]of Object.entries(t)){for(let{stream:a}of s.filter(({type:c})=>ke.has(c)))b0(e,a,o,n);for(let{stream:a}of s.filter(({type:c})=>!ke.has(c)))x0({subprocess:e,stream:a,direction:o,fdNumber:n,pipeGroups:i,controller:r})}for(let[n,s]of i.entries()){let o=s.length===1?s[0]:kt(s);zt(o,n)}},b0=(e,t,r,i)=>{r==="output"?zt(e.stdio[i],t):zt(t,e.stdio[i]);let n=w0[i];n!==void 0&&(e[n]=t),e.stdio[i]=t},w0=["stdin","stdout","stderr"],x0=({subprocess:e,stream:t,direction:r,fdNumber:i,pipeGroups:n,controller:s})=>{if(t===void 0)return;k0(t,s);let[o,a]=r==="output"?[t,e.stdio[i]]:[e.stdio[i],t],c=n.get(o)??[];n.set(o,[...c,a])},k0=(e,{signal:t})=>{Se(e)&&_t(e,v0,t)},v0=2;import{addAbortListener as $0}from"events";var vt=[];vt.push("SIGHUP","SIGINT","SIGTERM");process.platform!=="win32"&&vt.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&vt.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var _n=e=>!!e&&typeof e=="object"&&typeof e.removeListener=="function"&&typeof e.emit=="function"&&typeof e.reallyExit=="function"&&typeof e.listeners=="function"&&typeof e.kill=="function"&&typeof e.pid=="number"&&typeof e.on=="function",So=Symbol.for("signal-exit emitter"),qo=globalThis,S0=Object.defineProperty.bind(Object),$o=class{emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(qo[So])return qo[So];S0(qo,So,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(t,r){this.listeners[t].push(r)}removeListener(t,r){let i=this.listeners[t],n=i.indexOf(r);n!==-1&&(n===0&&i.length===1?i.length=0:i.splice(n,1))}emit(t,r,i){if(this.emitted[t])return!1;this.emitted[t]=!0;let n=!1;for(let s of this.listeners[t])n=s(r,i)===!0||n;return t==="exit"&&(n=this.emit("afterExit",r,i)||n),n}},bn=class{},q0=e=>({onExit(t,r){return e.onExit(t,r)},load(){return e.load()},unload(){return e.unload()}}),Ao=class extends bn{onExit(){return()=>{}}load(){}unload(){}},Co=class extends bn{#t=Eo.platform==="win32"?"SIGINT":"SIGHUP";#r=new $o;#e;#i;#s;#n={};#o=!1;constructor(t){super(),this.#e=t,this.#n={};for(let r of vt)this.#n[r]=()=>{let i=this.#e.listeners(r),{count:n}=this.#r,s=t;if(typeof s.__signal_exit_emitter__=="object"&&typeof s.__signal_exit_emitter__.count=="number"&&(n+=s.__signal_exit_emitter__.count),i.length===n){this.unload();let o=this.#r.emit("exit",null,r),a=r==="SIGHUP"?this.#t:r;o||t.kill(t.pid,a)}};this.#s=t.reallyExit,this.#i=t.emit}onExit(t,r){if(!_n(this.#e))return()=>{};this.#o===!1&&this.load();let i=r?.alwaysLast?"afterExit":"exit";return this.#r.on(i,t),()=>{this.#r.removeListener(i,t),this.#r.listeners.exit.length===0&&this.#r.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#o){this.#o=!0,this.#r.count+=1;for(let t of vt)try{let r=this.#n[t];r&&this.#e.on(t,r)}catch{}this.#e.emit=(t,...r)=>this.#c(t,...r),this.#e.reallyExit=t=>this.#a(t)}}unload(){this.#o&&(this.#o=!1,vt.forEach(t=>{let r=this.#n[t];if(!r)throw new Error("Listener not defined for signal: "+t);try{this.#e.removeListener(t,r)}catch{}}),this.#e.emit=this.#i,this.#e.reallyExit=this.#s,this.#r.count-=1)}#a(t){return _n(this.#e)?(this.#e.exitCode=t||0,this.#r.emit("exit",this.#e.exitCode,null),this.#s.call(this.#e,this.#e.exitCode)):0}#c(t,...r){let i=this.#i;if(t==="exit"&&_n(this.#e)){typeof r[0]=="number"&&(this.#e.exitCode=r[0]);let n=i.call(this.#e,t,...r);return this.#r.emit("exit",this.#e.exitCode,null),n}else return i.call(this.#e,t,...r)}},Eo=globalThis.process,{onExit:Cl,load:bO,unload:wO}=q0(_n(Eo)?new Co(Eo):new Ao);var El=(e,{cleanup:t,detached:r},{signal:i})=>{if(!t||r)return;let n=Cl(()=>{e.kill()});$0(i,()=>{n()})};var Tl=({source:e,sourcePromise:t,boundOptions:r,createNested:i},...n)=>{let s=Ai(),{destination:o,destinationStream:a,destinationError:c,from:d,unpipeSignal:p}=A0(r,i,n),{sourceStream:u,sourceError:l}=E0(e,d),{options:m,fileDescriptors:h}=je.get(e);return{sourcePromise:t,sourceStream:u,sourceOptions:m,sourceError:l,destination:o,destinationStream:a,destinationError:c,unpipeSignal:p,fileDescriptors:h,startTime:s}},A0=(e,t,r)=>{try{let{destination:i,pipeOptions:{from:n,to:s,unpipeSignal:o}={}}=C0(e,t,...r),a=Mi(i,s);return{destination:i,destinationStream:a,from:n,unpipeSignal:o}}catch(i){return{destinationError:i}}},C0=(e,t,r,...i)=>{if(Array.isArray(r))return{destination:t(Pl,e)(r,...i),pipeOptions:e};if(typeof r=="string"||r instanceof URL||gs(r)){if(Object.keys(e).length>0)throw new TypeError('Please use .pipe("file", ..., options) or .pipe(execa("file", ..., options)) instead of .pipe(options)("file", ...).');let[n,s,o]=gi(r,...i);return{destination:t(Pl)(n,s,o),pipeOptions:o}}if(je.has(r)){if(Object.keys(e).length>0)throw new TypeError("Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).");return{destination:r,pipeOptions:i[0]}}throw new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${r}`)},Pl=({options:e})=>({options:{...e,stdin:"pipe",piped:!0}}),E0=(e,t)=>{try{return{sourceStream:Mt(e,t)}}catch(r){return{sourceError:r}}};var Il=({sourceStream:e,sourceError:t,destinationStream:r,destinationError:i,fileDescriptors:n,sourceOptions:s,startTime:o})=>{let a=P0({sourceStream:e,sourceError:t,destinationStream:r,destinationError:i});if(a!==void 0)throw Po({error:a,fileDescriptors:n,sourceOptions:s,startTime:o})},P0=({sourceStream:e,sourceError:t,destinationStream:r,destinationError:i})=>{if(t!==void 0&&i!==void 0)return i;if(i!==void 0)return vo(e),i;if(t!==void 0)return ko(r),t},Po=({error:e,fileDescriptors:t,sourceOptions:r,startTime:i})=>Ut({error:e,command:Rl,escapedCommand:Rl,fileDescriptors:t,options:r,startTime:i,isSync:!1}),Rl="source.pipe(destination)";var Ol=async e=>{let[{status:t,reason:r,value:i=r},{status:n,reason:s,value:o=s}]=await e;if(o.pipedFrom.includes(i)||o.pipedFrom.push(i),n==="rejected")throw o;if(t==="rejected")throw i;return o};import{finished as T0}from"stream/promises";var jl=(e,t,r)=>{let i=wn.has(t)?I0(e,t):R0(e,t);return _t(e,j0,r.signal),_t(t,D0,r.signal),O0(t),i},R0=(e,t)=>{let r=kt([e]);return zt(r,t),wn.set(t,r),r},I0=(e,t)=>{let r=wn.get(t);return r.add(e),r},O0=async e=>{try{await T0(e,{cleanup:!0,readable:!1,writable:!0})}catch{}wn.delete(e)},wn=new WeakMap,j0=2,D0=1;import{aborted as L0}from"util";var Dl=(e,t)=>e===void 0?[]:[M0(e,t)],M0=async(e,{sourceStream:t,mergedStream:r,fileDescriptors:i,sourceOptions:n,startTime:s})=>{await L0(e,t),await r.remove(t);let o=new Error("Pipe canceled by `unpipeSignal` option.");throw Po({error:o,fileDescriptors:i,sourceOptions:n,startTime:s})};var xn=(e,...t)=>{if(Y(t[0]))return xn.bind(void 0,{...e,boundOptions:{...e.boundOptions,...t[0]}});let{destination:r,...i}=Tl(e,...t),n=F0({...i,destination:r});return n.pipe=xn.bind(void 0,{...e,source:r,sourcePromise:n,boundOptions:{}}),n},F0=async({sourcePromise:e,sourceStream:t,sourceOptions:r,sourceError:i,destination:n,destinationStream:s,destinationError:o,unpipeSignal:a,fileDescriptors:c,startTime:d})=>{let p=B0(e,n);Il({sourceStream:t,sourceError:i,destinationStream:s,destinationError:o,fileDescriptors:c,sourceOptions:r,startTime:d});let u=new AbortController;try{let l=jl(t,s,u);return await Promise.race([Ol(p),...Dl(a,{sourceStream:t,mergedStream:l,sourceOptions:r,fileDescriptors:c,startTime:d})])}finally{u.abort()}},B0=(e,t)=>Promise.allSettled([e,t]);import{setImmediate as H0}from"timers/promises";import{on as U0}from"events";import{getDefaultHighWaterMark as N0}from"stream";var kn=({subprocessStdout:e,subprocess:t,binary:r,shouldEncode:i,encoding:n,preserveNewlines:s})=>{let o=new AbortController;return G0(t,o),Ml({stream:e,controller:o,binary:r,shouldEncode:!e.readableObjectMode&&i,encoding:n,shouldSplit:!e.readableObjectMode,preserveNewlines:s})},G0=async(e,t)=>{try{await e}catch{}finally{t.abort()}},To=({stream:e,onStreamEnd:t,lines:r,encoding:i,stripFinalNewline:n,allMixed:s})=>{let o=new AbortController;z0(t,o,e);let a=e.readableObjectMode&&!s;return Ml({stream:e,controller:o,binary:i==="buffer",shouldEncode:!a,encoding:i,shouldSplit:!a&&r,preserveNewlines:!n})},z0=async(e,t,r)=>{try{await e}catch{r.destroy()}finally{t.abort()}},Ml=({stream:e,controller:t,binary:r,shouldEncode:i,encoding:n,shouldSplit:s,preserveNewlines:o})=>{let a=U0(e,"data",{signal:t.signal,highWaterMark:Ll,highWatermark:Ll});return V0({onStdoutChunk:a,controller:t,binary:r,shouldEncode:i,encoding:n,shouldSplit:s,preserveNewlines:o})},Ro=N0(!0),Ll=Ro,V0=async function*({onStdoutChunk:e,controller:t,binary:r,shouldEncode:i,encoding:n,shouldSplit:s,preserveNewlines:o}){let a=W0({binary:r,shouldEncode:i,encoding:n,shouldSplit:s,preserveNewlines:o});try{for await(let[c]of e)yield*xt(c,a,0)}catch(c){if(!t.signal.aborted)throw c}finally{yield*wr(a)}},W0=({binary:e,shouldEncode:t,encoding:r,shouldSplit:i,preserveNewlines:n})=>[ln(e,r,!t),un(e,n,!i,{})].filter(Boolean);var Fl=async({stream:e,onStreamEnd:t,fdNumber:r,encoding:i,buffer:n,maxBuffer:s,lines:o,allMixed:a,stripFinalNewline:c,verboseInfo:d,streamInfo:p})=>{let u=K0({stream:e,onStreamEnd:t,fdNumber:r,encoding:i,allMixed:a,verboseInfo:d,streamInfo:p});if(!n){await Promise.all([Y0(e),u]);return}let l=co(c,r),m=To({stream:e,onStreamEnd:t,lines:o,encoding:i,stripFinalNewline:l,allMixed:a}),[h]=await Promise.all([J0({stream:e,iterable:m,fdNumber:r,encoding:i,maxBuffer:s,lines:o}),u]);return h},K0=async({stream:e,onStreamEnd:t,fdNumber:r,encoding:i,allMixed:n,verboseInfo:s,streamInfo:{fileDescriptors:o}})=>{if(!yn({stdioItems:o[r]?.stdioItems,encoding:i,verboseInfo:s,fdNumber:r}))return;let a=To({stream:e,onStreamEnd:t,lines:!0,encoding:i,stripFinalNewline:!0,allMixed:n});await Ju(a,e,r,s)},Y0=async e=>{await H0(),e.readableFlowing===null&&e.resume()},J0=async({stream:e,stream:{readableObjectMode:t},iterable:r,fdNumber:i,encoding:n,maxBuffer:s,lines:o})=>{try{return t||o?await en(r,{maxBuffer:s}):n==="buffer"?new Uint8Array(await tn(r,{maxBuffer:s})):await nn(r,{maxBuffer:s})}catch(a){return Bl(Jd({error:a,stream:e,readableObjectMode:t,lines:o,encoding:n,fdNumber:i}))}},Io=async e=>{try{return await e}catch(t){return Bl(t)}},Bl=({bufferedData:e})=>lc(e)?new Uint8Array(e):e;import{finished as X0}from"stream/promises";var Sr=async(e,t,r,{isSameDirection:i,stopOnExit:n=!1}={})=>{let s=Z0(e,r),o=new AbortController;try{await Promise.race([...n?[r.exitPromise]:[],X0(e,{cleanup:!0,signal:o.signal})])}catch(a){s.stdinCleanedUp||tk(a,t,r,i)}finally{o.abort()}},Z0=(e,{originalStreams:[t],subprocess:r})=>{let i={stdinCleanedUp:!1};return e===t&&Q0(e,r,i),i},Q0=(e,t,r)=>{let{_destroy:i}=e;e._destroy=(...n)=>{ek(t,r),i.call(e,...n)}},ek=({exitCode:e,signalCode:t},r)=>{(e!==null||t!==null)&&(r.stdinCleanedUp=!0)},tk=(e,t,r,i)=>{if(!rk(e,t,r,i))throw e},rk=(e,t,r,i=!0)=>r.propagating?Ul(e)||vn(e):(r.propagating=!0,Oo(r,t)===i?Ul(e):vn(e)),Oo=({fileDescriptors:e},t)=>t!=="all"&&e[t].direction==="input",vn=e=>e?.code==="ERR_STREAM_PREMATURE_CLOSE",Ul=e=>e?.code==="EPIPE";var Nl=({subprocess:e,encoding:t,buffer:r,maxBuffer:i,lines:n,stripFinalNewline:s,verboseInfo:o,streamInfo:a})=>e.stdio.map((c,d)=>jo({stream:c,fdNumber:d,encoding:t,buffer:r[d],maxBuffer:i[d],lines:n[d],allMixed:!1,stripFinalNewline:s,verboseInfo:o,streamInfo:a})),jo=async({stream:e,fdNumber:t,encoding:r,buffer:i,maxBuffer:n,lines:s,allMixed:o,stripFinalNewline:a,verboseInfo:c,streamInfo:d})=>{if(!e)return;let p=Sr(e,t,d);if(Oo(d,t)){await p;return}let[u]=await Promise.all([Fl({stream:e,onStreamEnd:p,fdNumber:t,encoding:r,buffer:i,maxBuffer:n,lines:s,allMixed:o,stripFinalNewline:a,verboseInfo:c,streamInfo:d}),p]);return u};var Gl=({stdout:e,stderr:t},{all:r})=>r&&(e||t)?kt([e,t].filter(Boolean)):void 0,zl=({subprocess:e,encoding:t,buffer:r,maxBuffer:i,lines:n,stripFinalNewline:s,verboseInfo:o,streamInfo:a})=>jo({...ik(e,r),fdNumber:"all",encoding:t,maxBuffer:i[1]+i[2],lines:n[1]||n[2],allMixed:nk(e),stripFinalNewline:s,verboseInfo:o,streamInfo:a}),ik=({stdout:e,stderr:t,all:r},[,i,n])=>{let s=i||n;return s?i?n?{stream:r,buffer:s}:{stream:e,buffer:s}:{stream:t,buffer:s}:{stream:r,buffer:s}},nk=({all:e,stdout:t,stderr:r})=>e&&t&&r&&t.readableObjectMode!==r.readableObjectMode;import{once as sk}from"events";var Vl=e=>It(e,"ipc"),Wl=(e,t)=>{let r=$i(e);Ie({type:"ipc",verboseMessage:r,fdNumber:"ipc",verboseInfo:t})};var Hl=async({subprocess:e,buffer:t,maxBuffer:r,ipc:i,ipcOutput:n,verboseInfo:s})=>{if(!i)return n;let o=Vl(s),a=Ze(t,"ipc"),c=Ze(r,"ipc");for await(let d of _o({anyProcess:e,channel:e.channel,isSubprocess:!1,ipc:i,shouldAwait:!1,reference:!0}))a&&(Xd(e,n,c),n.push(d)),o&&Wl(d,s);return n},Kl=async(e,t)=>(await Promise.allSettled([e]),t);var Yl=async({subprocess:e,options:{encoding:t,buffer:r,maxBuffer:i,lines:n,timeoutDuration:s,cancelSignal:o,gracefulCancel:a,forceKillAfterDelay:c,stripFinalNewline:d,ipc:p,ipcInput:u},context:l,verboseInfo:m,fileDescriptors:h,originalStreams:f,onInternalError:x,controller:w})=>{let v=tl(e,l),g={originalStreams:f,fileDescriptors:h,subprocess:e,exitPromise:v,propagating:!1},R=Nl({subprocess:e,encoding:t,buffer:r,maxBuffer:i,lines:n,stripFinalNewline:d,verboseInfo:m,streamInfo:g}),S=zl({subprocess:e,encoding:t,buffer:r,maxBuffer:i,lines:n,stripFinalNewline:d,verboseInfo:m,streamInfo:g}),U=[],j=Hl({subprocess:e,buffer:r,maxBuffer:i,ipc:p,ipcOutput:U,verboseInfo:m}),M=ok(f,e,g),G=ak(h,g);try{return await Promise.race([Promise.all([{},il(v),Promise.all(R),S,j,Ed(e,u),...M,...G]),x,ck(e,w),...Sd(e,s,l,w),...Vp({subprocess:e,cancelSignal:o,gracefulCancel:a,context:l,controller:w}),...kd({subprocess:e,cancelSignal:o,gracefulCancel:a,forceKillAfterDelay:c,context:l,controller:w})])}catch(H){return l.terminationReason??="other",Promise.all([{error:H},v,Promise.all(R.map($=>Io($))),Io(S),Kl(j,U),Promise.allSettled(M),Promise.allSettled(G)])}},ok=(e,t,r)=>e.map((i,n)=>i===t.stdio[n]?void 0:Sr(i,n,r)),ak=(e,t)=>e.flatMap(({stdioItems:r},i)=>r.filter(({value:n,stream:s=n})=>Ae(s,{checkOpen:!1})&&!Se(s)).map(({type:n,value:s,stream:o=s})=>Sr(o,i,t,{isSameDirection:ke.has(n),stopOnExit:n==="native"}))),ck=async(e,{signal:t})=>{let[r]=await sk(e,"error",{signal:t});throw r};var Jl=()=>({readableDestroy:new WeakMap,writableFinal:new WeakMap,writableDestroy:new WeakMap}),qr=(e,t,r)=>{let i=e[r];i.has(t)||i.set(t,[]);let n=i.get(t),s=Oe();return n.push(s),{resolve:s.resolve.bind(s),promises:n}},Vt=async({resolve:e,promises:t},r)=>{e();let[i]=await Promise.race([Promise.allSettled([!0,r]),Promise.all([!1,...t])]);return!i};import{Readable as pk}from"stream";import{callbackify as dk}from"util";import{finished as Xl}from"stream/promises";var Do=async e=>{if(e!==void 0)try{await Lo(e)}catch{}},Zl=async e=>{if(e!==void 0)try{await Mo(e)}catch{}},Lo=async e=>{await Xl(e,{cleanup:!0,readable:!1,writable:!0})},Mo=async e=>{await Xl(e,{cleanup:!0,readable:!0,writable:!1})},Sn=async(e,t)=>{if(await e,t)throw t},qn=(e,t,r)=>{r&&!vn(r)?e.destroy(r):t&&e.destroy()};var Ql=({subprocess:e,concurrentStreams:t,encoding:r},{from:i,binary:n=!0,preserveNewlines:s=!0}={})=>{let o=n||ye.has(r),{subprocessStdout:a,waitReadableDestroy:c}=Fo(e,i,t),{readableEncoding:d,readableObjectMode:p,readableHighWaterMark:u}=Bo(a,o),{read:l,onStdoutDataDone:m}=Uo({subprocessStdout:a,subprocess:e,binary:o,encoding:r,preserveNewlines:s}),h=new pk({read:l,destroy:dk(Go.bind(void 0,{subprocessStdout:a,subprocess:e,waitReadableDestroy:c})),highWaterMark:u,objectMode:p,encoding:d});return No({subprocessStdout:a,onStdoutDataDone:m,readable:h,subprocess:e}),h},Fo=(e,t,r)=>{let i=Mt(e,t),n=qr(r,i,"readableDestroy");return{subprocessStdout:i,waitReadableDestroy:n}},Bo=({readableEncoding:e,readableObjectMode:t,readableHighWaterMark:r},i)=>i?{readableEncoding:e,readableObjectMode:t,readableHighWaterMark:r}:{readableEncoding:e,readableObjectMode:!0,readableHighWaterMark:Ro},Uo=({subprocessStdout:e,subprocess:t,binary:r,encoding:i,preserveNewlines:n})=>{let s=Oe(),o=kn({subprocessStdout:e,subprocess:t,binary:r,shouldEncode:!r,encoding:i,preserveNewlines:n});return{read(){uk(this,o,s)},onStdoutDataDone:s}},uk=async(e,t,r)=>{try{let{value:i,done:n}=await t.next();n?r.resolve():e.push(i)}catch{}},No=async({subprocessStdout:e,onStdoutDataDone:t,readable:r,subprocess:i,subprocessStdin:n})=>{try{await Mo(e),await i,await Do(n),await t,r.readable&&r.push(null)}catch(s){await Do(n),em(r,s)}},Go=async({subprocessStdout:e,subprocess:t,waitReadableDestroy:r},i)=>{await Vt(r,t)&&(em(e,i),await Sn(t,i))},em=(e,t)=>{qn(e,e.readable,t)};import{Writable as lk}from"stream";import{callbackify as tm}from"util";var rm=({subprocess:e,concurrentStreams:t},{to:r}={})=>{let{subprocessStdin:i,waitWritableFinal:n,waitWritableDestroy:s}=zo(e,r,t),o=new lk({...Vo(i,e,n),destroy:tm(Ho.bind(void 0,{subprocessStdin:i,subprocess:e,waitWritableFinal:n,waitWritableDestroy:s})),highWaterMark:i.writableHighWaterMark,objectMode:i.writableObjectMode});return Wo(i,o),o},zo=(e,t,r)=>{let i=Mi(e,t),n=qr(r,i,"writableFinal"),s=qr(r,i,"writableDestroy");return{subprocessStdin:i,waitWritableFinal:n,waitWritableDestroy:s}},Vo=(e,t,r)=>({write:mk.bind(void 0,e),final:tm(hk.bind(void 0,e,t,r))}),mk=(e,t,r,i)=>{e.write(t,r)?i():e.once("drain",i)},hk=async(e,t,r)=>{await Vt(r,t)&&(e.writable&&e.end(),await t)},Wo=async(e,t,r)=>{try{await Lo(e),t.writable&&t.end()}catch(i){await Zl(r),im(t,i)}},Ho=async({subprocessStdin:e,subprocess:t,waitWritableFinal:r,waitWritableDestroy:i},n)=>{await Vt(r,t),await Vt(i,t)&&(im(e,n),await Sn(t,n))},im=(e,t)=>{qn(e,e.writable,t)};import{Duplex as yk}from"stream";import{callbackify as fk}from"util";var nm=({subprocess:e,concurrentStreams:t,encoding:r},{from:i,to:n,binary:s=!0,preserveNewlines:o=!0}={})=>{let a=s||ye.has(r),{subprocessStdout:c,waitReadableDestroy:d}=Fo(e,i,t),{subprocessStdin:p,waitWritableFinal:u,waitWritableDestroy:l}=zo(e,n,t),{readableEncoding:m,readableObjectMode:h,readableHighWaterMark:f}=Bo(c,a),{read:x,onStdoutDataDone:w}=Uo({subprocessStdout:c,subprocess:e,binary:a,encoding:r,preserveNewlines:o}),v=new yk({read:x,...Vo(p,e,u),destroy:fk(gk.bind(void 0,{subprocessStdout:c,subprocessStdin:p,subprocess:e,waitReadableDestroy:d,waitWritableFinal:u,waitWritableDestroy:l})),readableHighWaterMark:f,writableHighWaterMark:p.writableHighWaterMark,readableObjectMode:h,writableObjectMode:p.writableObjectMode,encoding:m});return No({subprocessStdout:c,onStdoutDataDone:w,readable:v,subprocess:e,subprocessStdin:p}),Wo(p,v,c),v},gk=async({subprocessStdout:e,subprocessStdin:t,subprocess:r,waitReadableDestroy:i,waitWritableFinal:n,waitWritableDestroy:s},o)=>{await Promise.all([Go({subprocessStdout:e,subprocess:r,waitReadableDestroy:i},o),Ho({subprocessStdin:t,subprocess:r,waitWritableFinal:n,waitWritableDestroy:s},o)])};var Ko=(e,t,{from:r,binary:i=!1,preserveNewlines:n=!1}={})=>{let s=i||ye.has(t),o=Mt(e,r),a=kn({subprocessStdout:o,subprocess:e,binary:s,shouldEncode:!0,encoding:t,preserveNewlines:n});return _k(a,o,e)},_k=async function*(e,t,r){try{yield*e}finally{t.readable&&t.destroy(),await r}};var sm=(e,{encoding:t})=>{let r=Jl();e.readable=Ql.bind(void 0,{subprocess:e,concurrentStreams:r,encoding:t}),e.writable=rm.bind(void 0,{subprocess:e,concurrentStreams:r}),e.duplex=nm.bind(void 0,{subprocess:e,concurrentStreams:r,encoding:t}),e.iterable=Ko.bind(void 0,e,t),e[Symbol.asyncIterator]=Ko.bind(void 0,e,t,{})};var om=(e,t)=>{for(let[r,i]of wk){let n=i.value.bind(t);Reflect.defineProperty(e,r,{...i,value:n})}},bk=(async()=>{})().constructor.prototype,wk=["then","catch","finally"].map(e=>[e,Reflect.getOwnPropertyDescriptor(bk,e)]);var am=(e,t,r,i)=>{let{file:n,commandArguments:s,command:o,escapedCommand:a,startTime:c,verboseInfo:d,options:p,fileDescriptors:u}=vk(e,t,r),{subprocess:l,promise:m}=qk({file:n,commandArguments:s,options:p,startTime:c,verboseInfo:d,command:o,escapedCommand:a,fileDescriptors:u});return l.pipe=xn.bind(void 0,{source:l,sourcePromise:m,boundOptions:{},createNested:i}),om(l,m),je.set(l,{options:p,fileDescriptors:u}),l},vk=(e,t,r)=>{let{command:i,escapedCommand:n,startTime:s,verboseInfo:o}=Ci(e,t,r),{file:a,commandArguments:c,options:d}=Yi(e,t,r),p=Sk(d),u=_l(p,o);return{file:a,commandArguments:c,command:i,escapedCommand:n,startTime:s,verboseInfo:o,options:p,fileDescriptors:u}},Sk=({timeout:e,signal:t,...r})=>{if(t!==void 0)throw new TypeError('The "signal" option has been renamed to "cancelSignal" instead.');return{...r,timeoutDuration:e}},qk=({file:e,commandArguments:t,options:r,startTime:i,verboseInfo:n,command:s,escapedCommand:o,fileDescriptors:a})=>{let c;try{c=kk(...Ji(e,t,r))}catch(h){return hl({error:h,command:s,escapedCommand:o,fileDescriptors:a,options:r,startTime:i,verboseInfo:n})}let d=new AbortController;xk(Number.POSITIVE_INFINITY,d.signal);let p=[...c.stdio];Al(c,a,d),El(c,r,d);let u={},l=Oe();c.kill=Gp.bind(void 0,{kill:c.kill.bind(c),options:r,onInternalError:l,context:u,controller:d}),c.all=Gl(c,r),sm(c,r),ul(c,r);let m=$k({subprocess:c,options:r,startTime:i,verboseInfo:n,fileDescriptors:a,originalStreams:p,command:s,escapedCommand:o,context:u,onInternalError:l,controller:d});return{subprocess:c,promise:m}},$k=async({subprocess:e,options:t,startTime:r,verboseInfo:i,fileDescriptors:n,originalStreams:s,command:o,escapedCommand:a,context:c,onInternalError:d,controller:p})=>{let[u,[l,m],h,f,x]=await Yl({subprocess:e,options:t,context:c,verboseInfo:i,fileDescriptors:n,originalStreams:s,onInternalError:d,controller:p});p.abort(),d.resolve();let w=h.map((R,S)=>et(R,t,S)),v=et(f,t,"all"),g=Ak({errorInfo:u,exitCode:l,signal:m,stdio:w,all:v,ipcOutput:x,context:c,options:t,command:o,escapedCommand:a,startTime:r});return Nt(g,i,t)},Ak=({errorInfo:e,exitCode:t,signal:r,stdio:i,all:n,ipcOutput:s,context:o,options:a,command:c,escapedCommand:d,startTime:p})=>"error"in e?br({error:e.error,command:c,escapedCommand:d,timedOut:o.terminationReason==="timeout",isCanceled:o.terminationReason==="cancel"||o.terminationReason==="gracefulCancel",isGracefullyCanceled:o.terminationReason==="gracefulCancel",isMaxBuffer:e.error instanceof De,isForcefullyTerminated:o.isForcefullyTerminated,exitCode:t,signal:r,stdio:i,all:n,ipcOutput:s,options:a,startTime:p,isSync:!1}):on({command:c,escapedCommand:d,stdio:i,all:n,ipcOutput:s,options:a,startTime:p});var $n=(e,t)=>{let r=Object.fromEntries(Object.entries(t).map(([i,n])=>[i,Ck(i,e[i],n)]));return{...e,...r}},Ck=(e,t,r)=>Ek.has(e)&&Y(t)&&Y(r)?{...t,...r}:r,Ek=new Set(["env",...vs]);var pt=(e,t,r,i)=>{let n=(o,a,c)=>pt(o,a,r,c),s=(...o)=>Pk({mapArguments:e,deepOptions:r,boundOptions:t,setBoundExeca:i,createNested:n},...o);return i!==void 0&&i(s,n,t),s},Pk=({mapArguments:e,deepOptions:t={},boundOptions:r={},setBoundExeca:i,createNested:n},s,...o)=>{if(Y(s))return n(e,$n(r,s),i);let{file:a,commandArguments:c,options:d,isSync:p}=Tk({mapArguments:e,firstArgument:s,nextArguments:o,deepOptions:t,boundOptions:r});return p?sl(a,c,d):am(a,c,d,n)},Tk=({mapArguments:e,firstArgument:t,nextArguments:r,deepOptions:i,boundOptions:n})=>{let s=_c(t)?bc(t,r):[t,...r],[o,a,c]=gi(...s),d=$n($n(i,n),c),{file:p=o,commandArguments:u=a,options:l=d,isSync:m=!1}=e({file:o,commandArguments:a,options:d});return{file:p,commandArguments:u,options:l,isSync:m}};var cm=({file:e,commandArguments:t})=>dm(e,t),pm=({file:e,commandArguments:t})=>({...dm(e,t),isSync:!0}),dm=(e,t)=>{if(t.length>0)throw new TypeError(`The command and its arguments must be passed as a single string: ${e} ${t}.`);let[r,...i]=Rk(e);return{file:r,commandArguments:i}},Rk=e=>{if(typeof e!="string")throw new TypeError(`The command must be a string: ${String(e)}.`);let t=e.trim();if(t==="")return[];let r=[];for(let i of t.split(Ik)){let n=r.at(-1);n&&n.endsWith("\\")?r[r.length-1]=`${n.slice(0,-1)} ${i}`:r.push(i)}return r},Ik=/ +/g;var um=(e,t,r)=>{e.sync=t(Ok,r),e.s=e.sync},lm=({options:e})=>mm(e),Ok=({options:e})=>({...mm(e),isSync:!0}),mm=e=>({options:{...jk(e),...e}}),jk=({input:e,inputFile:t,stdio:r})=>e===void 0&&t===void 0&&r===void 0?{stdin:"inherit"}:{},hm={preferLocal:!0};var ee=pt(()=>({})),p1=pt(()=>({isSync:!0})),dt=pt(cm),d1=pt(pm),u1=pt($d),l1=pt(lm,{},hm,um),{sendMessage:m1,getOneMessage:h1,getEachMessage:y1,getCancelSignal:f1}=ll();var le=D(K(),1);var Cr=D(K(),1);import Ce from"fs";import Mk from"os";import Ne from"path";var Wt="spree@example.com",Ht="spree123";import Me from"fs";import ut from"path";function _(e=process.cwd()){let t=Dk(e),r=ut.join(t,"docker-compose.yml");if(!Me.existsSync(r))throw new Error(`Not a Spree project directory. No docker-compose.yml found.
142
+ Run this command from a directory created with create-spree-app.`);let i=Lk(t);return{mode:"docker",projectDir:t,port:i}}function Dk(e){if(ut.basename(e)!=="backend")return e;let t=ut.dirname(e);for(let r of["docker-compose.yml","docker-compose.dev.yml"]){let i=ut.join(t,r);if(Me.existsSync(i))try{if(/\.\/backend:\/rails(:\w+)?(\s|$)/m.test(Me.readFileSync(i,"utf-8")))return t}catch{}}return e}function Fe(e){let t=ut.join(e,".env");if(!Me.existsSync(t))return!1;try{let r=Me.readFileSync(t,"utf-8");return/^\s*SPREE_PATH\s*=/m.test(r)}catch{return!1}}function $r(e){let t=ut.join(e,"docker-compose.yml");if(!Me.existsSync(t))return!1;try{return/^\s*build\s*:/m.test(Me.readFileSync(t,"utf-8"))}catch{return!1}}function Cn(e){try{let r=Me.readFileSync(ut.join(e,".env"),"utf-8").match(/^SPREE_SAMPLE_DATA=(true|false)\b/m);return r?r[1]==="true":void 0}catch{return}}function Lk(e){let t=ut.join(e,".env");if(!Me.existsSync(t))return 3e3;let i=Me.readFileSync(t,"utf-8").match(/^SPREE_PORT=(\d+)/m);return i?Number(i[1]):3e3}var ym=D(K(),1);async function X(e,t,r){return ee("docker",["compose",...e],{cwd:t,...r})}async function lt(e,t){try{await X(["up","-d","--no-deps","web"],e,{stdio:t?.stdio??"inherit"})}catch{}}async function ne(e,t,r){return(await Jo(["bin/rails",e],t,{env:r})).split(`
143
143
  `).filter(n=>!n.startsWith("[")).join(`
144
144
  `).trim()}async function Be(e){try{let{stdout:t}=await ee("docker",["compose","config","--services"],{cwd:e}),r=t.split(`
145
145
  `).map(n=>n.trim()),i=["web","worker"].filter(n=>r.includes(n));return i.length>0?i:["web"]}catch{return["web"]}}async function fm(e){let{stdout:t}=await ee("docker",["compose","ps","-a","-q"],{cwd:e});return t.trim().length>0}async function mt(e,t){let{stdout:r}=await ee("docker",["compose","ps",e,"--format","{{.State}}"],{cwd:t});return r.split(`
146
- `).some(i=>i.trim()==="running")}async function Ue(e,t,r={}){let{service:i="web",tty:n=!0,detach:s=!1,env:o}=r,a=["compose","exec"];if(s&&a.push("-d"),n||a.push("-T"),o)for(let[c,d]of Object.entries(o))a.push("-e",`${c}=${d}`);a.push(i,...e),await ee("docker",a,{cwd:t,stdio:"inherit"})}async function Cn(e){await Ue(["bin/rails","spree:admin:tailwindcss:build"],e,{tty:!1})}async function gm(e){await Ue(["bin/rails","spree:admin:tailwindcss:watch"],e,{detach:!0})}async function Yo(e,t,r={}){let{service:i="web",env:n,captureStderr:s=!1}=r,o=["compose","run","--rm"];if(n)for(let[c,d]of Object.entries(n))o.push("-e",`${c}=${d}`);o.push(i,...e),await ee("docker",o,{cwd:t,...s?{stdin:"inherit",stdout:"inherit",stderr:["pipe","inherit"]}:{stdio:"inherit"}})}async function _m(e,t={}){let{service:r="web",edgeHint:i}=t;return await mt(r,e)?"exec":(Fe(e)&&(O([`The ${r} container is not running, and this is a monorepo edge project.`,`Run ${ym.default.bold("pnpm server:dev")} from the monorepo root${i?` \u2014 ${i}`:""}.`].join(`
147
- `)),process.exit(1)),b.info(`${r} container is not running \u2014 using a one-off container (\`docker compose run\`) instead.`),"run")}async function B(e,t,r={}){let{service:i="web",env:n}=r;await _m(t,r)==="exec"?await Ue(e,t,{service:i,env:n}):await Yo(e,t,{service:i,env:n})}async function Jo(e,t,r={}){let{service:i="web",env:n}=r,s=await _m(t,r),o=["compose",s];if(s==="run"&&o.push("--rm"),o.push("-T"),n)for(let[c,d]of Object.entries(n))o.push("-e",`${c}=${d}`);o.push(i,...e);let{stdout:a}=await ee("docker",o,{cwd:t});return a}async function $r(e,t){await ee("docker",["compose","logs","-f",e],{cwd:t,stdio:"inherit"})}var Xo=`http://localhost:${3e3}`,ht=class extends Error{};function bm(){return process.env.XDG_CONFIG_HOME?Ne.join(process.env.XDG_CONFIG_HOME,"spree"):Ne.join(Mk.homedir(),".config","spree")}function St(){return Ne.join(bm(),"config.json")}function Cr(e){return e?.code==="ENOENT"}function Er(){let e;try{e=Ce.readFileSync(St(),"utf-8")}catch(t){if(Cr(t))return{profiles:{}};throw t}try{let t=JSON.parse(e);return{...t,profiles:t.profiles??{}}}catch{let t=`${St()}.bak`;try{Ce.renameSync(St(),t)}catch{}return process.stderr.write(`${Ar.default.yellow(`warning: ${St()} was not valid JSON; moved it to ${t} and starting fresh.`)}
146
+ `).some(i=>i.trim()==="running")}async function Ue(e,t,r={}){let{service:i="web",tty:n=!0,detach:s=!1,env:o}=r,a=["compose","exec"];if(s&&a.push("-d"),n||a.push("-T"),o)for(let[c,d]of Object.entries(o))a.push("-e",`${c}=${d}`);a.push(i,...e),await ee("docker",a,{cwd:t,stdio:"inherit"})}async function En(e){await Ue(["bin/rails","spree:admin:tailwindcss:build"],e,{tty:!1})}async function gm(e){await Ue(["bin/rails","spree:admin:tailwindcss:watch"],e,{detach:!0})}async function Yo(e,t,r={}){let{service:i="web",env:n,captureStderr:s=!1}=r,o=["compose","run","--rm"];if(n)for(let[c,d]of Object.entries(n))o.push("-e",`${c}=${d}`);o.push(i,...e),await ee("docker",o,{cwd:t,...s?{stdin:"inherit",stdout:"inherit",stderr:["pipe","inherit"]}:{stdio:"inherit"}})}async function _m(e,t={}){let{service:r="web",edgeHint:i}=t;return await mt(r,e)?"exec":(Fe(e)&&(O([`The ${r} container is not running, and this is a monorepo edge project.`,`Run ${ym.default.bold("pnpm server:dev")} from the monorepo root${i?` \u2014 ${i}`:""}.`].join(`
147
+ `)),process.exit(1)),b.info(`${r} container is not running \u2014 using a one-off container (\`docker compose run\`) instead.`),"run")}async function B(e,t,r={}){let{service:i="web",env:n}=r;await _m(t,r)==="exec"?await Ue(e,t,{service:i,env:n}):await Yo(e,t,{service:i,env:n})}async function Jo(e,t,r={}){let{service:i="web",env:n}=r,s=await _m(t,r),o=["compose",s];if(s==="run"&&o.push("--rm"),o.push("-T"),n)for(let[c,d]of Object.entries(n))o.push("-e",`${c}=${d}`);o.push(i,...e);let{stdout:a}=await ee("docker",o,{cwd:t});return a}async function Ar(e,t){await ee("docker",["compose","logs","-f",e],{cwd:t,stdio:"inherit"})}var Xo=`http://localhost:${3e3}`,ht=class extends Error{};function bm(){return process.env.XDG_CONFIG_HOME?Ne.join(process.env.XDG_CONFIG_HOME,"spree"):Ne.join(Mk.homedir(),".config","spree")}function St(){return Ne.join(bm(),"config.json")}function Er(e){return e?.code==="ENOENT"}function Pr(){let e;try{e=Ce.readFileSync(St(),"utf-8")}catch(t){if(Er(t))return{profiles:{}};throw t}try{let t=JSON.parse(e);return{...t,profiles:t.profiles??{}}}catch{let t=`${St()}.bak`;try{Ce.renameSync(St(),t)}catch{}return process.stderr.write(`${Cr.default.yellow(`warning: ${St()} was not valid JSON; moved it to ${t} and starting fresh.`)}
148
148
  `),{profiles:{}}}}function Zo(e){Ce.mkdirSync(bm(),{recursive:!0,mode:448}),wm(St(),`${JSON.stringify(e,null,2)}
149
149
  `)}function wm(e,t){Ce.writeFileSync(e,t,{mode:384}),Ce.chmodSync(e,384)}function Kt(e){return Ne.join(e,".spree","credentials.json")}function Qo(e){return Ne.join(e,".spree","setup-complete")}function xm(e){let t=Qo(e);Ce.mkdirSync(Ne.dirname(t),{recursive:!0,mode:448}),km(Ne.join(Ne.dirname(t),".gitignore")),Ce.writeFileSync(t,`${new Date().toISOString()}
150
- `)}function Fk(e){let t;try{t=Ce.readFileSync(Kt(e),"utf-8")}catch(r){if(Cr(r))return null;throw r}try{return JSON.parse(t)}catch{return null}}function Bk(e,t){let r=Kt(e),i=Ne.dirname(r);Ce.mkdirSync(i,{recursive:!0,mode:448}),km(Ne.join(i,".gitignore")),wm(r,`${JSON.stringify(t,null,2)}
151
- `)}function km(e){let t="";try{t=Ce.readFileSync(e,"utf-8")}catch(i){if(!Cr(i))throw i}t.split(`
150
+ `)}function Fk(e){let t;try{t=Ce.readFileSync(Kt(e),"utf-8")}catch(r){if(Er(r))return null;throw r}try{return JSON.parse(t)}catch{return null}}function Bk(e,t){let r=Kt(e),i=Ne.dirname(r);Ce.mkdirSync(i,{recursive:!0,mode:448}),km(Ne.join(i,".gitignore")),wm(r,`${JSON.stringify(t,null,2)}
151
+ `)}function km(e){let t="";try{t=Ce.readFileSync(e,"utf-8")}catch(i){if(!Er(i))throw i}t.split(`
152
152
  `).some(i=>i.trim()==="*")||Ce.writeFileSync(e,t&&!t.endsWith(`
153
153
  `)?`${t}
154
154
  *
155
155
  `:`${t}*
156
- `)}function En(e){return e.slice(0,12)}async function ea(e,t,r=!1){r||process.stderr.write(`${Ar.default.dim("No credentials found \u2014 minting a read-only API key via the dev stack...")}
157
- `);let i;try{i=await ie("spree:cli:create_api_key",e,{NAME:"@spree/cli (auto)",KEY_TYPE:"secret",SCOPES:"read_all"})}catch(o){let a=o instanceof Error?o.message.split(`
156
+ `)}function Pn(e){return e.slice(0,12)}async function ea(e,t,r=!1){r||process.stderr.write(`${Cr.default.dim("No credentials found \u2014 minting a read-only API key via the dev stack...")}
157
+ `);let i;try{i=await ne("spree:cli:create_api_key",e,{NAME:"@spree/cli (auto)",KEY_TYPE:"secret",SCOPES:"read_all"})}catch(o){let a=o instanceof Error?o.message.split(`
158
158
  `)[0]:String(o);throw new ht(`Could not mint an API key via the dev stack. Is it running? Start it with \`spree dev\`.
159
- ${Ar.default.dim(a)}`)}let n=i.match(/sk_[A-Za-z0-9_-]+/);if(!n)throw new ht("Could not mint an API key via the dev stack. Is it running? Start it with `spree dev`.");let s={baseUrl:`http://localhost:${t}`,token:n[0],scopes:["read_all"],mintedAt:new Date().toISOString()};return Bk(e,s),r||process.stderr.write(`${Ar.default.dim("Saved to .spree/credentials.json (scopes: read_all)")}
160
- `),s}async function Pr(e,t={}){let{allowMint:r=!0,cwd:i=process.cwd()}=t,n=Er(),s=e.baseUrl,o=e.apiKey,a;if(o&&(a={apiKey:o,source:"flags"}),!a&&e.profile){let p=n.profiles[e.profile];if(!p)throw new ht(`Unknown profile "${e.profile}". Run \`spree auth login --profile ${e.profile}\` to create it.`);a={baseUrl:p.baseUrl,apiKey:p.token,source:"profile",profileName:e.profile}}if(!a&&process.env.SPREE_API_KEY&&(a={baseUrl:process.env.SPREE_BASE_URL,apiKey:process.env.SPREE_API_KEY,source:"env"}),!a){let p,u=0;try{let l=_(i);p=l.projectDir,u=l.port}catch{}if(p){let l=`http://localhost:${u}`,m=!s||s.replace(/\/$/,"")===l,h=Fk(p);!h&&r&&m&&(h=await ea(p,u)),h&&(a={baseUrl:h.baseUrl,apiKey:h.token,source:"project",scopes:h.scopes})}}if(!a&&n.defaultProfile){let p=n.profiles[n.defaultProfile];p&&(a={baseUrl:p.baseUrl,apiKey:p.token,source:"profile",profileName:n.defaultProfile})}let c=s??a?.baseUrl,d=a?.apiKey;if(!c&&(a?.source==="flags"||a?.source==="env")&&(c=Xo),!c||!d)throw new ht(["No Admin API credentials found. Provide them via one of (host and key resolve together per source):"," - flags: --api-key <sk_...> (host defaults to "+Xo+"; pass --base-url for a remote store)"," - env: SPREE_API_KEY (host defaults to "+Xo+"; set SPREE_BASE_URL for a remote store)"," - project: run inside a Spree project with the dev stack up (auto-mints a read-only key)"," - profile: spree auth login --profile <name>"].join(`
161
- `));return{baseUrl:c,apiKey:d,source:a?.source??"flags",profileName:a?.profileName,tokenPrefix:En(d),scopes:a?.scopes}}function Sm(e){e.command("add").description("Add an optional component to your project").argument("<thing>","Component to add (currently: dashboard)").option("--template <src>","Starter template: git URL or local path (default: the template bundled with the CLI; env SPREE_DASHBOARD_TEMPLATE overrides)").option("--no-install","Skip dependency install").option("--quiet","Skip the final summary note (for wrapping tools that print their own)").action(async(t,r)=>{t!=="dashboard"&&(console.error(`
162
- ${ue.default.red("Error:")} Unknown component: ${t}. Try: dashboard
163
- `),process.exit(2)),mi(ue.default.bgCyan(ue.default.black(" Spree Dashboard ")));let i=_();await Nk(i,{template:r.template??process.env.SPREE_DASHBOARD_TEMPLATE??Gk(),install:r.install,quiet:r.quiet}),Pt("Done!")})}async function Nk(e,t){let r=se.join(e.projectDir,"apps","dashboard"),i=se.join(r,".env.local");if(ce.existsSync(r)){let o=Tr(e.projectDir,e.port);if(o==="untouched"){b.warn(`${ue.default.bold("apps/dashboard/")} already exists. Nothing to do.`);return}b.info(`${o==="written"?"Wrote missing":"Repaired"} ${ue.default.bold("apps/dashboard/.env.local")}. Nothing else to do.`);return}let n=E();n.start("Fetching dashboard starter...");try{await Vk(t.template,r),zk(r)}catch(o){n.stop("Fetch failed."),b.error(o instanceof Error?o.message:String(o)),process.exit(1)}n.stop(`Created ${ue.default.cyan("apps/dashboard/")}`),qm(i,e.port);let s=Yt(e.projectDir,r);if(t.install){n.start(`Installing dependencies with ${s}...`);try{await ee(s,["install"],{cwd:r}),n.stop("Dependencies installed.")}catch(o){n.stop(ue.default.yellow(`${s} install failed \u2014 run it manually in apps/dashboard/.`)),b.warn(o instanceof Error?o.message:String(o))}}t.quiet||W(["Start it with:",` ${ue.default.cyan(`${s==="npm"?"npx":s} spree dev`)}`,` ${ue.default.dim("# runs the API and the dashboard together")}`,...t.install?[]:[` ${ue.default.dim(`# install dependencies first: cd apps/dashboard && ${s} install`)}`],"",`Then open ${ue.default.bold(`http://localhost:${5173}`)} and sign in`,"with your admin email and password."].join(`
164
- `),"Dashboard added!")}function Gk(){let e=se.dirname(Uk(import.meta.url)),t=[se.resolve(e,"../../templates/dashboard-starter"),se.resolve(e,"templates/dashboard-starter")];for(let r of t)if(ce.existsSync(se.join(r,"package.json")))return r;console.error(`
165
- ${ue.default.red("Error:")} Bundled dashboard template not found. In the monorepo, run ${ue.default.cyan("pnpm build")} in packages/cli first (it generates the template), or pass --template <path|git-url>.
166
- `),process.exit(1)}function zk(e){let t=se.join(e,"gitignore.template");ce.existsSync(t)&&ce.renameSync(t,se.join(e,".gitignore"))}async function Vk(e,t){if(ce.existsSync(e)&&ce.statSync(e).isDirectory()){ce.cpSync(e,t,{recursive:!0,filter:r=>{let i=se.basename(r);return i!=="node_modules"&&i!=="dist"&&i!==".git"}});return}await ee("git",["clone","--depth","1","--",e,t]),ce.rmSync(se.join(t,".git"),{recursive:!0,force:!0})}var vm=/^VITE_SPREE_API_URL=(https?:\/\/localhost\S*)$/m;function Tr(e,t){let r=se.join(e,"apps","dashboard");if(!ce.existsSync(se.join(r,"package.json")))return"untouched";let i=se.join(r,".env.local"),n;try{n=ce.readFileSync(i,"utf-8")}catch(s){if(!Cr(s))throw s;return qm(i,t),"written"}return vm.test(n)?(ce.writeFileSync(i,n.replace(vm,`VITE_API_PROXY_TARGET=http://localhost:${t}`)),"repaired"):"untouched"}function qm(e,t){ce.writeFileSync(e,["# Dev-server proxy target \u2014 where Vite forwards /api and /rails (your","# Rails backend). The SPA stays same-origin with the API: the SDK uses","# relative URLs and the proxy bridges the port gap.","#","# Do NOT set VITE_SPREE_API_URL for local dev \u2014 it switches the SDK to","# absolute cross-origin URLs, which breaks on CORS and the SameSite=Lax","# auth cookie. Set it only when building for a deploy where the","# dashboard is hosted on a different origin than the API.","#","# No credentials belong in this file \u2014 every VITE_-prefixed value is","# compiled into the client bundle.",`VITE_API_PROXY_TARGET=http://localhost:${t}`,""].join(`
167
- `))}function Yt(e,t){for(let r of[t,e]){if(ce.existsSync(se.join(r,"pnpm-lock.yaml")))return"pnpm";if(ce.existsSync(se.join(r,"yarn.lock")))return"yarn";if(ce.existsSync(se.join(r,"package-lock.json")))return"npm"}return"pnpm"}function P(e){if(!e)return;let t={};return e.expand?.length&&(t.expand=e.expand.join(",")),e.fields?.length&&(t.fields=e.fields.join(",")),Object.keys(t).length>0?t:void 0}function Wk(e){return e===!1?!1:{maxRetries:e?.maxRetries??2,retryOnStatus:e?.retryOnStatus??[429,500,502,503,504],baseDelay:e?.baseDelay??300,maxDelay:e?.maxDelay??1e4,retryOnNetworkError:e?.retryOnNetworkError??!0}}var Hk=new Set(["page","limit","expand","sort","fields"]);function k(e){let t={};for(let[r,i]of Object.entries(e))if(i!==void 0){if(Hk.has(r)){t[r]=Array.isArray(i)?i.join(","):i;continue}if(r.startsWith("q[")){t[r]=i;continue}if(Array.isArray(i)){let n=r.endsWith("[]")?r.slice(0,-2):r;t[`q[${n}][]`]=i}else t[`q[${r}]`]=i}return t}var At=class extends Error{code;status;details;constructor(e,t){super(e.error.message),this.name="SpreeError",this.code=e.error.code,this.status=t,this.details=e.error.details}};function $m(e,t){let r=t.baseDelay*2**e,i=Math.random()*t.baseDelay;return Math.min(r+i,t.maxDelay)}function Am(e){return new Promise(t=>setTimeout(t,e))}function Kk(){return`spree-sdk-retry-${crypto.randomUUID()}`}function Yk(e,t,r,i){return e==="GET"||e==="HEAD"||i?r.retryOnStatus.includes(t):t===429}function Jk(e,t,r){return t.retryOnNetworkError?e==="GET"||e==="HEAD"||r:!1}function Xk(e,t,r,i){return async function(s,o,a={}){let{token:c,spreeToken:d,idempotencyKey:p,headers:u={},body:l,params:m}=a,h=a.locale??i?.locale,f=a.currency??i?.currency,x=a.country??i?.country,w=a.channel??i?.channel,v=typeof window<"u"?window.location.origin:void 0,g=e.baseUrl||v;if(!g)throw new TypeError("sdk-core: baseUrl is required in non-browser environments (no window.location to resolve relative URLs against)");let R=new URL(`${e.baseUrl}${t}${o}`,g);m&&Object.entries(m).forEach(([H,$])=>{if($!==void 0)if(Array.isArray($))for(let Ve of $)R.searchParams.append(H,String(Ve));else R.searchParams.set(H,String($))});let S={"Content-Type":"application/json",...u};r.headerValue&&(S[r.headerName]=r.headerValue),c&&(S.Authorization=`Bearer ${c}`),d&&(S["x-spree-token"]=d),h&&(S["x-spree-locale"]=h),f&&(S["x-spree-currency"]=f),x&&(S["x-spree-country"]=x),w&&(S["x-spree-channel"]=w);let j=p??(s!=="GET"&&s!=="HEAD"&&e.retryConfig?Kk():void 0);j&&(S["Idempotency-Key"]=j);let M=!!j,G=e.retryConfig?e.retryConfig.maxRetries+1:1;for(let H=0;H<G;H++)try{let $=await e.fetchFn(R.toString(),{method:s,headers:S,body:l?JSON.stringify(l):void 0,credentials:e.credentials});if(!$.ok){if(!(H>=G-1)&&e.retryConfig&&Yk(s,$.status,e.retryConfig,M)){let V=$.headers.get("Retry-After"),pe=V?Math.min(parseInt(V,10)*1e3,e.retryConfig.maxDelay):$m(H,e.retryConfig);await Am(pe);continue}let We=await $.json();throw new At(We,$.status)}return $.status===204?void 0:$.status===202?$.headers.get("content-type")?.includes("application/json")?$.json():void 0:$.json()}catch($){if($ instanceof At)throw $;if(!(H>=G-1)&&e.retryConfig&&Jk(s,e.retryConfig,M)){let We=$m(H,e.retryConfig);await Am(We);continue}throw $}throw new Error("Unexpected end of retry loop")}}var $t={"Spree::Product":"/products","Spree::Variant":"/variants","Spree::Order":"/orders","Spree::User":"/customers","Spree::Category":"/categories","Spree::OptionType":"/option_types"},Zk=class{request;constructor(e){this.request=e}parentScopedCustomFields(e){return{list:(t,r,i)=>this.request("GET",`${e}/${t}/custom_fields`,{...i,params:r?k(r):void 0}),get:(t,r,i)=>this.request("GET",`${e}/${t}/custom_fields/${r}`,i),create:(t,r,i)=>this.request("POST",`${e}/${t}/custom_fields`,{...i,body:r}),update:(t,r,i,n)=>this.request("PATCH",`${e}/${t}/custom_fields/${r}`,{...n,body:i}),delete:(t,r,i)=>this.request("DELETE",`${e}/${t}/custom_fields/${r}`,i)}}parentScopedTranslations(e){return{get:(t,r)=>this.request("GET",`${e}/${t}/translations`,r).then(i=>i.data)}}customFields(e,t){let r=$t[e];if(!r)throw new Error(`Unknown custom-field owner type: ${e}. Add it to CUSTOM_FIELD_OWNER_PATHS.`);let i=this.parentScopedCustomFields(r);return{list:(n,s)=>i.list(t,n,s),get:(n,s)=>i.get(t,n,s),create:(n,s)=>i.create(t,n,s),update:(n,s,o)=>i.update(t,n,s,o),delete:(n,s)=>i.delete(t,n,s)}}customFieldDefinitions={list:(e,t)=>this.request("GET","/custom_field_definitions",{...t,params:e?k(e):void 0}),get:(e,t)=>this.request("GET",`/custom_field_definitions/${e}`,t),create:(e,t)=>this.request("POST","/custom_field_definitions",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/custom_field_definitions/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/custom_field_definitions/${e}`,t)};auth={login:(e,t)=>this.request("POST","/auth/login",{...t,body:e}),refresh:e=>this.request("POST","/auth/refresh",e),logout:e=>this.request("POST","/auth/logout",e),lookupInvitation:(e,t,r)=>this.request("GET",`/auth/invitations/${e}/lookup`,{...r,params:{token:t}}),acceptInvitation:(e,t,r,i)=>this.request("POST",`/auth/invitations/${e}/accept`,{...i,params:{token:t},body:r}),requestPasswordReset:(e,t)=>this.request("POST","/auth/password_resets",{...t,body:e}),resetPassword:(e,t,r)=>this.request("PATCH",`/auth/password_resets/${encodeURIComponent(e)}`,{...r,body:t})};me={get:e=>this.request("GET","/me",e),update:(e,t)=>this.request("PATCH","/me",{...t,body:e})};dashboard={analytics:(e,t)=>this.request("GET","/dashboard/analytics",{...t,params:e})};store={get:e=>this.request("GET","/store",e),update:(e,t)=>this.request("PATCH","/store",{...t,body:e})};locales={list:e=>this.request("GET","/locales",e).then(t=>t.data)};translatableResources={list:e=>this.request("GET","/translatable_resources",e).then(t=>t.data)};translations={batch:(e,t)=>this.request("POST","/translations/batch",{...t,body:{translations:e}}).then(r=>r.data)};products={list:(e,t)=>this.request("GET","/products",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/products/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/products",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/products/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/products/${e}`,t),clone:(e,t)=>this.request("POST",`/products/${e}/clone`,t),bulkStatusUpdate:(e,t)=>this.request("POST","/products/bulk_status_update",{...t,body:e}),bulkAddToCategories:(e,t)=>this.request("POST","/products/bulk_add_to_categories",{...t,body:e}),bulkRemoveFromCategories:(e,t)=>this.request("POST","/products/bulk_remove_from_categories",{...t,body:e}),bulkAddToChannels:(e,t)=>this.request("POST","/products/bulk_add_to_channels",{...t,body:e}),bulkRemoveFromChannels:(e,t)=>this.request("POST","/products/bulk_remove_from_channels",{...t,body:e}),bulkAddTags:(e,t)=>this.request("POST","/products/bulk_add_tags",{...t,body:e}),bulkRemoveTags:(e,t)=>this.request("POST","/products/bulk_remove_tags",{...t,body:e}),bulkDestroy:(e,t)=>this.request("DELETE","/products/bulk_destroy",{...t,body:e}),media:{list:(e,t,r)=>this.request("GET",`/products/${e}/media`,{...r,params:t?k(t):void 0}),create:(e,t,r)=>this.request("POST",`/products/${e}/media`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/products/${e}/media/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/products/${e}/media/${t}`,r)},variants:{list:(e,t,r)=>this.request("GET",`/products/${e}/variants`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/products/${e}/variants/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/products/${e}/variants`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/products/${e}/variants/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/products/${e}/variants/${t}`,r),media:{list:(e,t,r,i)=>this.request("GET",`/products/${e}/variants/${t}/media`,{...i,params:r?k(r):void 0}),create:(e,t,r,i)=>this.request("POST",`/products/${e}/variants/${t}/media`,{...i,body:r}),update:(e,t,r,i,n)=>this.request("PATCH",`/products/${e}/variants/${t}/media/${r}`,{...n,body:i}),delete:(e,t,r,i)=>this.request("DELETE",`/products/${e}/variants/${t}/media/${r}`,i)}},customFields:this.parentScopedCustomFields($t["Spree::Product"]),translations:this.parentScopedTranslations("/products")};orders={list:(e,t)=>this.request("GET","/orders",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/orders/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/orders",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/orders/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/orders/${e}`,t),complete:(e,t,r)=>this.request("PATCH",`/orders/${e}/complete`,{...r,body:t}),cancel:(e,t,r)=>this.request("PATCH",`/orders/${e}/cancel`,{...r,body:t}),approve:(e,t,r)=>this.request("PATCH",`/orders/${e}/approve`,{...r,body:t}),resume:(e,t)=>this.request("PATCH",`/orders/${e}/resume`,t),resendConfirmation:(e,t)=>this.request("POST",`/orders/${e}/resend_confirmation`,t),giftCards:{apply:(e,t,r)=>this.request("POST",`/orders/${e}/gift_cards`,{...r,body:t}),remove:(e,t,r)=>this.request("DELETE",`/orders/${e}/gift_cards/${t}`,r)},storeCredits:{apply:(e,t,r)=>this.request("POST",`/orders/${e}/store_credits`,{...r,body:t}),remove:(e,t)=>this.request("DELETE",`/orders/${e}/store_credits`,t)},items:{list:(e,t,r)=>this.request("GET",`/orders/${e}/items`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/orders/${e}/items/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/orders/${e}/items`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/orders/${e}/items/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/orders/${e}/items/${t}`,r)},fulfillments:{list:(e,t,r)=>this.request("GET",`/orders/${e}/fulfillments`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/orders/${e}/fulfillments/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/orders/${e}/fulfillments`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}`,{...i,body:r}),fulfill:(e,t,r)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}/fulfill`,r),cancel:(e,t,r)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}/cancel`,r),resume:(e,t,r)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}/resume`,r),split:(e,t,r,i)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}/split`,{...i,body:r})},payments:{list:(e,t,r)=>this.request("GET",`/orders/${e}/payments`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/orders/${e}/payments/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/orders/${e}/payments`,{...r,body:t}),capture:(e,t,r)=>this.request("PATCH",`/orders/${e}/payments/${t}/capture`,r),void:(e,t,r)=>this.request("PATCH",`/orders/${e}/payments/${t}/void`,r)},refunds:{list:(e,t,r)=>this.request("GET",`/orders/${e}/refunds`,{...r,params:t?k(t):void 0}),create:(e,t,r)=>this.request("POST",`/orders/${e}/refunds`,{...r,body:t})},adjustments:{list:(e,t,r)=>this.request("GET",`/orders/${e}/adjustments`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/orders/${e}/adjustments/${t}`,r)},customFields:this.parentScopedCustomFields($t["Spree::Order"])};optionTypes={list:(e,t)=>this.request("GET","/option_types",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/option_types/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/option_types",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/option_types/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/option_types/${e}`,t),customFields:this.parentScopedCustomFields($t["Spree::OptionType"]),translations:this.parentScopedTranslations("/option_types")};paymentMethods={list:(e,t)=>this.request("GET","/payment_methods",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/payment_methods/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/payment_methods",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/payment_methods/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/payment_methods/${e}`,t),types:e=>this.request("GET","/payment_methods/types",e)};priceLists={list:(e,t)=>this.request("GET","/price_lists",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/price_lists/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/price_lists",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/price_lists/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/price_lists/${e}`,t),activate:(e,t)=>this.request("PATCH",`/price_lists/${e}/activate`,t),deactivate:(e,t)=>this.request("PATCH",`/price_lists/${e}/deactivate`,t),ruleTypes:e=>this.request("GET","/price_lists/price_rule_types",e)};prices={list:(e,t)=>this.request("GET","/prices",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/prices/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/prices",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/prices/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/prices/${e}`,t),bulkUpsert:(e,t)=>this.request("POST","/prices/bulk_upsert",{...t,body:e}),bulkDestroy:(e,t)=>this.request("DELETE","/prices/bulk_destroy",{...t,body:e})};promotions={list:(e,t)=>this.request("GET","/promotions",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/promotions/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/promotions",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/promotions/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/promotions/${e}`,t),actions:{list:(e,t,r)=>this.request("GET",`/promotions/${e}/promotion_actions`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/promotions/${e}/promotion_actions/${t}`,r),create:(e,t,r)=>this.request("POST",`/promotions/${e}/promotion_actions`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/promotions/${e}/promotion_actions/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/promotions/${e}/promotion_actions/${t}`,r)},rules:{list:(e,t,r)=>this.request("GET",`/promotions/${e}/promotion_rules`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/promotions/${e}/promotion_rules/${t}`,r),create:(e,t,r)=>this.request("POST",`/promotions/${e}/promotion_rules`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/promotions/${e}/promotion_rules/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/promotions/${e}/promotion_rules/${t}`,r)},couponCodes:{list:(e,t,r)=>this.request("GET",`/promotions/${e}/coupon_codes`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/promotions/${e}/coupon_codes/${t}`,r)}};promotionActions={types:e=>this.request("GET","/promotion_actions/types",e),calculators:(e,t)=>this.request("GET","/promotion_actions/calculators",{...t,params:{type:e}})};promotionRules={types:e=>this.request("GET","/promotion_rules/types",e)};tags={list:(e,t)=>this.request("GET","/tags",{...t,params:e})};customerGroups={list:(e,t)=>this.request("GET","/customer_groups",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/customer_groups/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/customer_groups",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/customer_groups/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/customer_groups/${e}`,t)};giftCards={list:(e,t)=>this.request("GET","/gift_cards",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/gift_cards/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/gift_cards",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/gift_cards/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/gift_cards/${e}`,t)};giftCardBatches={list:(e,t)=>this.request("GET","/gift_card_batches",{...t,params:e?k(e):void 0}),get:(e,t)=>this.request("GET",`/gift_card_batches/${e}`,t),create:(e,t)=>this.request("POST","/gift_card_batches",{...t,body:e})};exports={list:(e,t)=>this.request("GET","/exports",{...t,params:e?k(e):void 0}),get:(e,t)=>this.request("GET",`/exports/${e}`,t),create:(e,t)=>this.request("POST","/exports",{...t,body:e}),delete:(e,t)=>this.request("DELETE",`/exports/${e}`,t)};imports={list:(e,t)=>this.request("GET","/imports",{...t,params:e?k(e):void 0}),get:(e,t)=>this.request("GET",`/imports/${e}`,t),create:(e,t)=>this.request("POST","/imports",{...t,body:e}),completeMapping:(e,t,r)=>this.request("PATCH",`/imports/${e}/complete_mapping`,{...r,body:t??{}}),retryFailedRows:(e,t)=>this.request("PATCH",`/imports/${e}/retry_failed_rows`,t),delete:(e,t)=>this.request("DELETE",`/imports/${e}`,t),rows:{list:(e,t,r)=>this.request("GET",`/imports/${e}/rows`,{...r,params:t?k(t):void 0})}};customers={list:(e,t)=>this.request("GET","/customers",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/customers/${e}`,{...r,params:P(t)}),creditCards:{list:(e,t,r)=>this.request("GET",`/customers/${e}/credit_cards`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/customers/${e}/credit_cards/${t}`,{...i,params:P(r)}),delete:(e,t,r)=>this.request("DELETE",`/customers/${e}/credit_cards/${t}`,r)},create:(e,t)=>this.request("POST","/customers",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/customers/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/customers/${e}`,t),bulkAddToGroups:(e,t)=>this.request("POST","/customers/bulk_add_to_groups",{...t,body:e}),bulkRemoveFromGroups:(e,t)=>this.request("POST","/customers/bulk_remove_from_groups",{...t,body:e}),bulkAddTags:(e,t)=>this.request("POST","/customers/bulk_add_tags",{...t,body:e}),bulkRemoveTags:(e,t)=>this.request("POST","/customers/bulk_remove_tags",{...t,body:e}),addresses:{list:(e,t,r)=>this.request("GET",`/customers/${e}/addresses`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/customers/${e}/addresses/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/customers/${e}/addresses`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/customers/${e}/addresses/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/customers/${e}/addresses/${t}`,r)},storeCredits:{list:(e,t,r)=>this.request("GET",`/customers/${e}/store_credits`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/customers/${e}/store_credits/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/customers/${e}/store_credits`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/customers/${e}/store_credits/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/customers/${e}/store_credits/${t}`,r)},customFields:this.parentScopedCustomFields($t["Spree::User"])};categories={list:(e,t)=>this.request("GET","/categories",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/categories/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/categories",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/categories/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/categories/${e}`,t),reposition:(e,t,r)=>this.request("PATCH",`/categories/${e}/reposition`,{...r,body:t}),products:{list:(e,t,r)=>this.request("GET",`/categories/${e}/products`,{...r,params:t?k(t):void 0}),add:(e,t,r)=>this.request("POST",`/categories/${e}/products`,{...r,body:{product_id:t}}),remove:(e,t,r)=>this.request("DELETE",`/categories/${e}/products/${t}`,r),reposition:(e,t,r,i)=>this.request("PATCH",`/categories/${e}/products/${t}/reposition`,{...i,body:r})},customFields:this.parentScopedCustomFields($t["Spree::Category"]),translations:this.parentScopedTranslations("/categories")};variants={list:(e,t)=>this.request("GET","/variants",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/variants/${e}`,{...r,params:P(t)}),customFields:this.parentScopedCustomFields($t["Spree::Variant"])};taxCategories={list:(e,t)=>this.request("GET","/tax_categories",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/tax_categories/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/tax_categories",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/tax_categories/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/tax_categories/${e}`,t)};channels={list:(e,t)=>this.request("GET","/channels",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/channels/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/channels",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/channels/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/channels/${e}`,t),addProducts:(e,t,r)=>this.request("POST",`/channels/${e}/add_products`,{...r,body:t}),removeProducts:(e,t,r)=>this.request("POST",`/channels/${e}/remove_products`,{...r,body:t}),orderRoutingRules:{list:(e,t,r)=>this.request("GET",`/channels/${e}/order_routing_rules`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/channels/${e}/order_routing_rules/${t}`,r),create:(e,t,r)=>this.request("POST",`/channels/${e}/order_routing_rules`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/channels/${e}/order_routing_rules/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/channels/${e}/order_routing_rules/${t}`,r)}};orderRoutingRules={types:e=>this.request("GET","/order_routing_rules/types",e)};markets={list:(e,t)=>this.request("GET","/markets",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/markets/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/markets",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/markets/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/markets/${e}`,t)};storeCreditCategories={list:(e,t)=>this.request("GET","/store_credit_categories",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/store_credit_categories/${e}`,{...r,params:P(t)})};stockLocations={list:(e,t)=>this.request("GET","/stock_locations",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/stock_locations/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/stock_locations",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/stock_locations/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/stock_locations/${e}`,t)};stockItems={list:(e,t)=>this.request("GET","/stock_items",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/stock_items/${e}`,{...r,params:P(t)}),update:(e,t,r)=>this.request("PATCH",`/stock_items/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/stock_items/${e}`,t)};stockTransfers={list:(e,t)=>this.request("GET","/stock_transfers",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/stock_transfers/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/stock_transfers",{...t,body:e}),delete:(e,t)=>this.request("DELETE",`/stock_transfers/${e}`,t)};countries={list:(e,t)=>this.request("GET","/countries",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/countries/${e}`,{...r,params:P(t)})};directUploads={create:(e,t)=>this.request("POST","/direct_uploads",{...t,body:e})};adminUsers={list:(e,t)=>this.request("GET","/admin_users",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/admin_users/${e}`,{...r,params:P(t)}),update:(e,t,r)=>this.request("PATCH",`/admin_users/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/admin_users/${e}`,t)};invitations={list:(e,t)=>this.request("GET","/invitations",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/invitations/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/invitations",{...t,body:e}),delete:(e,t)=>this.request("DELETE",`/invitations/${e}`,t),resend:(e,t)=>this.request("PATCH",`/invitations/${e}/resend`,t)};apiKeys={list:(e,t)=>this.request("GET","/api_keys",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/api_keys/${e}`,{...r,params:P(t)}),current:e=>this.request("GET","/api_keys/current",e??{}),create:(e,t)=>this.request("POST","/api_keys",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/api_keys/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/api_keys/${e}`,t),revoke:(e,t)=>this.request("PATCH",`/api_keys/${e}/revoke`,t)};allowedOrigins={list:(e,t)=>this.request("GET","/allowed_origins",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/allowed_origins/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/allowed_origins",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/allowed_origins/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/allowed_origins/${e}`,t)};webhookEndpoints={list:(e,t)=>this.request("GET","/webhook_endpoints",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/webhook_endpoints/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/webhook_endpoints",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/webhook_endpoints/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/webhook_endpoints/${e}`,t),sendTest:(e,t)=>this.request("POST",`/webhook_endpoints/${e}/send_test`,t),enable:(e,t)=>this.request("PATCH",`/webhook_endpoints/${e}/enable`,t),disable:(e,t,r)=>this.request("PATCH",`/webhook_endpoints/${e}/disable`,{...r,body:t}),deliveries:{list:(e,t,r)=>this.request("GET",`/webhook_endpoints/${e}/deliveries`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/webhook_endpoints/${e}/deliveries/${t}`,r),redeliver:(e,t,r)=>this.request("POST",`/webhook_endpoints/${e}/deliveries/${t}/redeliver`,r)}};roles={list:(e,t)=>this.request("GET","/roles",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/roles/${e}`,{...r,params:P(t)})}};function Rr(e){let t=e.baseUrl.replace(/\/$/,""),r=e.fetch||fetch.bind(globalThis),i=Wk(e.retry),n={baseUrl:t,fetchFn:r,retryConfig:i,credentials:e.credentials??"include"},s=e.jwtToken,o=e.storeId,a=null,c="/api/v3/admin",d=async(l,m,h={})=>{let f={};o&&(f["X-Spree-Store-Id"]=o);let x={...h,headers:{...f,...h.headers}},w=()=>{let v=e.secretKey?{headerName:"X-Spree-Api-Key",headerValue:e.secretKey}:{headerName:"Authorization",headerValue:s?`Bearer ${s}`:""};return Xk(n,c,v)(l,m,x)};try{return await w()}catch(v){if(v instanceof At&&v.status===401&&a&&!m.includes("/auth/")&&await a())return w();throw v}},p=new Zk(d),u=Object.create(p);return u.setStore=l=>{o=l},u.setToken=l=>{s=l},u.onUnauthorized=l=>{a=l},u}var sh=D(Mr(),1),Pe=D(K(),1);var Wm=D(K(),1);import eS from"fs";var _a=Symbol("no-body");async function Hm(e){if(e===void 0)return _a;let t;if(e==="-")t=await tS();else if(e.startsWith("@")){let r=e.slice(1);try{t=eS.readFileSync(r,"utf-8")}catch(i){throw i?.code==="ENOENT"?new Error(`Request body file not found: ${r}`):new Error(`Could not read request body file ${r}: ${i.message}`)}}else t=e;try{return JSON.parse(t)}catch{let r=e==="-"?" (from stdin)":e.startsWith("@")?` (${e.slice(1)})`:"";throw new Error(`Request body is not valid JSON${r}`)}}async function tS(){process.stdin.isTTY&&process.stderr.write(`${Wm.default.dim("Reading request body from stdin \u2014 paste JSON and press Ctrl-D...")}
168
- `);let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}var ba=D(Mr(),1),fe=D(K(),1);function Fr(e,t="json"){if(e!=null){if(t==="table"){let r=nS(e);if(r){(0,ba.printTable)(r.map(Km));return}let i=Km(e);(0,ba.printTable)(Object.entries(i).map(([n,s])=>({field:n,value:s})));return}process.stdout.isTTY?process.stdout.write(`${iS(JSON.stringify(e,null,2))}
159
+ ${Cr.default.dim(a)}`)}let n=i.match(/sk_[A-Za-z0-9_-]+/);if(!n)throw new ht("Could not mint an API key via the dev stack. Is it running? Start it with `spree dev`.");let s={baseUrl:`http://localhost:${t}`,token:n[0],scopes:["read_all"],mintedAt:new Date().toISOString()};return Bk(e,s),r||process.stderr.write(`${Cr.default.dim("Saved to .spree/credentials.json (scopes: read_all)")}
160
+ `),s}async function Tr(e,t={}){let{allowMint:r=!0,cwd:i=process.cwd()}=t,n=Pr(),s=e.baseUrl,o=e.apiKey,a;if(o&&(a={apiKey:o,source:"flags"}),!a&&e.profile){let p=n.profiles[e.profile];if(!p)throw new ht(`Unknown profile "${e.profile}". Run \`spree auth login --profile ${e.profile}\` to create it.`);a={baseUrl:p.baseUrl,apiKey:p.token,source:"profile",profileName:e.profile}}if(!a&&process.env.SPREE_API_KEY&&(a={baseUrl:process.env.SPREE_BASE_URL,apiKey:process.env.SPREE_API_KEY,source:"env"}),!a){let p,u=0;try{let l=_(i);p=l.projectDir,u=l.port}catch{}if(p){let l=`http://localhost:${u}`,m=!s||s.replace(/\/$/,"")===l,h=Fk(p);!h&&r&&m&&(h=await ea(p,u)),h&&(a={baseUrl:h.baseUrl,apiKey:h.token,source:"project",scopes:h.scopes})}}if(!a&&n.defaultProfile){let p=n.profiles[n.defaultProfile];p&&(a={baseUrl:p.baseUrl,apiKey:p.token,source:"profile",profileName:n.defaultProfile})}let c=s??a?.baseUrl,d=a?.apiKey;if(!c&&(a?.source==="flags"||a?.source==="env")&&(c=Xo),!c||!d)throw new ht(["No Admin API credentials found. Provide them via one of (host and key resolve together per source):"," - flags: --api-key <sk_...> (host defaults to "+Xo+"; pass --base-url for a remote store)"," - env: SPREE_API_KEY (host defaults to "+Xo+"; set SPREE_BASE_URL for a remote store)"," - project: run inside a Spree project with the dev stack up (auto-mints a read-only key)"," - profile: spree auth login --profile <name>"].join(`
161
+ `));return{baseUrl:c,apiKey:d,source:a?.source??"flags",profileName:a?.profileName,tokenPrefix:Pn(d),scopes:a?.scopes}}function Sm(e){e.command("add").description("Add an optional component to your project").argument("<thing>","Component to add (currently: dashboard)").option("--template <src>","Starter template: git URL or local path (default: the template bundled with the CLI; env SPREE_DASHBOARD_TEMPLATE overrides)").option("--no-install","Skip dependency install").option("--quiet","Skip the final summary note (for wrapping tools that print their own)").action(async(t,r)=>{t!=="dashboard"&&(console.error(`
162
+ ${le.default.red("Error:")} Unknown component: ${t}. Try: dashboard
163
+ `),process.exit(2)),hi(le.default.bgCyan(le.default.black(" Spree Dashboard ")));let i=_();await Nk(i,{template:r.template??process.env.SPREE_DASHBOARD_TEMPLATE??Gk(),install:r.install,quiet:r.quiet}),Pt("Done!")})}async function Nk(e,t){let r=oe.join(e.projectDir,"apps","dashboard"),i=oe.join(r,".env.local");if(pe.existsSync(r)){let o=Rr(e.projectDir,e.port);if(o==="untouched"){b.warn(`${le.default.bold("apps/dashboard/")} already exists. Nothing to do.`);return}b.info(`${o==="written"?"Wrote missing":"Repaired"} ${le.default.bold("apps/dashboard/.env.local")}. Nothing else to do.`);return}let n=E();n.start("Fetching dashboard starter...");try{await Vk(t.template,r),zk(r)}catch(o){n.stop("Fetch failed."),b.error(o instanceof Error?o.message:String(o)),process.exit(1)}n.stop(`Created ${le.default.cyan("apps/dashboard/")}`),qm(i,e.port);let s=Yt(e.projectDir,r);if(t.install){n.start(`Installing dependencies with ${s}...`);try{await ee(s,["install"],{cwd:r}),n.stop("Dependencies installed.")}catch(o){n.stop(le.default.yellow(`${s} install failed \u2014 run it manually in apps/dashboard/.`)),b.warn(o instanceof Error?o.message:String(o))}}t.quiet||W(["Start it with:",` ${le.default.cyan(`${s==="npm"?"npx":s} spree dev`)}`,` ${le.default.dim("# runs the API and the dashboard together")}`,...t.install?[]:[` ${le.default.dim(`# install dependencies first: cd apps/dashboard && ${s} install`)}`],"",`Then open ${le.default.bold(`http://localhost:${5173}`)} and sign in`,"with your admin email and password."].join(`
164
+ `),"Dashboard added!")}function Gk(){let e=oe.dirname(Uk(import.meta.url)),t=[oe.resolve(e,"../../templates/dashboard-starter"),oe.resolve(e,"templates/dashboard-starter")];for(let r of t)if(pe.existsSync(oe.join(r,"package.json")))return r;console.error(`
165
+ ${le.default.red("Error:")} Bundled dashboard template not found. In the monorepo, run ${le.default.cyan("pnpm build")} in packages/cli first (it generates the template), or pass --template <path|git-url>.
166
+ `),process.exit(1)}function zk(e){let t=oe.join(e,"gitignore.template");pe.existsSync(t)&&pe.renameSync(t,oe.join(e,".gitignore"))}async function Vk(e,t){if(pe.existsSync(e)&&pe.statSync(e).isDirectory()){pe.cpSync(e,t,{recursive:!0,filter:r=>{let i=oe.basename(r);return i!=="node_modules"&&i!=="dist"&&i!==".git"}});return}await ee("git",["clone","--depth","1","--",e,t]),pe.rmSync(oe.join(t,".git"),{recursive:!0,force:!0})}var vm=/^VITE_SPREE_API_URL=(https?:\/\/localhost\S*)$/m;function Rr(e,t){let r=oe.join(e,"apps","dashboard");if(!pe.existsSync(oe.join(r,"package.json")))return"untouched";let i=oe.join(r,".env.local"),n;try{n=pe.readFileSync(i,"utf-8")}catch(s){if(!Er(s))throw s;return qm(i,t),"written"}return vm.test(n)?(pe.writeFileSync(i,n.replace(vm,`VITE_API_PROXY_TARGET=http://localhost:${t}`)),"repaired"):"untouched"}function qm(e,t){pe.writeFileSync(e,["# Dev-server proxy target \u2014 where Vite forwards /api and /rails (your","# Rails backend). The SPA stays same-origin with the API: the SDK uses","# relative URLs and the proxy bridges the port gap.","#","# Do NOT set VITE_SPREE_API_URL for local dev \u2014 it switches the SDK to","# absolute cross-origin URLs, which breaks on CORS and the SameSite=Lax","# auth cookie. Set it only when building for a deploy where the","# dashboard is hosted on a different origin than the API.","#","# No credentials belong in this file \u2014 every VITE_-prefixed value is","# compiled into the client bundle.",`VITE_API_PROXY_TARGET=http://localhost:${t}`,""].join(`
167
+ `))}function Yt(e,t){for(let r of[t,e]){if(pe.existsSync(oe.join(r,"pnpm-lock.yaml")))return"pnpm";if(pe.existsSync(oe.join(r,"yarn.lock")))return"yarn";if(pe.existsSync(oe.join(r,"package-lock.json")))return"npm"}return"pnpm"}function P(e){if(!e)return;let t={};return e.expand?.length&&(t.expand=e.expand.join(",")),e.fields?.length&&(t.fields=e.fields.join(",")),Object.keys(t).length>0?t:void 0}function Wk(e){return e===!1?!1:{maxRetries:e?.maxRetries??2,retryOnStatus:e?.retryOnStatus??[429,500,502,503,504],baseDelay:e?.baseDelay??300,maxDelay:e?.maxDelay??1e4,retryOnNetworkError:e?.retryOnNetworkError??!0}}var Hk=new Set(["page","limit","expand","sort","fields"]);function k(e){let t={};for(let[r,i]of Object.entries(e))if(i!==void 0){if(Hk.has(r)){t[r]=Array.isArray(i)?i.join(","):i;continue}if(r.startsWith("q[")){t[r]=i;continue}if(Array.isArray(i)){let n=r.endsWith("[]")?r.slice(0,-2):r;t[`q[${n}][]`]=i}else t[`q[${r}]`]=i}return t}var At=class extends Error{code;status;details;constructor(e,t){super(e.error.message),this.name="SpreeError",this.code=e.error.code,this.status=t,this.details=e.error.details}};function $m(e,t){let r=t.baseDelay*2**e,i=Math.random()*t.baseDelay;return Math.min(r+i,t.maxDelay)}function Am(e){return new Promise(t=>setTimeout(t,e))}function Kk(){return`spree-sdk-retry-${crypto.randomUUID()}`}function Yk(e,t,r,i){return e==="GET"||e==="HEAD"||i?r.retryOnStatus.includes(t):t===429}function Jk(e,t,r){return t.retryOnNetworkError?e==="GET"||e==="HEAD"||r:!1}function Xk(e,t,r,i){return async function(s,o,a={}){let{token:c,spreeToken:d,idempotencyKey:p,headers:u={},body:l,params:m}=a,h=a.locale??i?.locale,f=a.currency??i?.currency,x=a.country??i?.country,w=a.channel??i?.channel,v=typeof window<"u"?window.location.origin:void 0,g=e.baseUrl||v;if(!g)throw new TypeError("sdk-core: baseUrl is required in non-browser environments (no window.location to resolve relative URLs against)");let R=new URL(`${e.baseUrl}${t}${o}`,g);m&&Object.entries(m).forEach(([H,$])=>{if($!==void 0)if(Array.isArray($))for(let Ve of $)R.searchParams.append(H,String(Ve));else R.searchParams.set(H,String($))});let S={"Content-Type":"application/json",...u};r.headerValue&&(S[r.headerName]=r.headerValue),c&&(S.Authorization=`Bearer ${c}`),d&&(S["x-spree-token"]=d),h&&(S["x-spree-locale"]=h),f&&(S["x-spree-currency"]=f),x&&(S["x-spree-country"]=x),w&&(S["x-spree-channel"]=w);let j=p??(s!=="GET"&&s!=="HEAD"&&e.retryConfig?Kk():void 0);j&&(S["Idempotency-Key"]=j);let M=!!j,G=e.retryConfig?e.retryConfig.maxRetries+1:1;for(let H=0;H<G;H++)try{let $=await e.fetchFn(R.toString(),{method:s,headers:S,body:l?JSON.stringify(l):void 0,credentials:e.credentials});if(!$.ok){if(!(H>=G-1)&&e.retryConfig&&Yk(s,$.status,e.retryConfig,M)){let V=$.headers.get("Retry-After"),de=V?Math.min(parseInt(V,10)*1e3,e.retryConfig.maxDelay):$m(H,e.retryConfig);await Am(de);continue}let We=await $.json();throw new At(We,$.status)}return $.status===204?void 0:$.status===202?$.headers.get("content-type")?.includes("application/json")?$.json():void 0:$.json()}catch($){if($ instanceof At)throw $;if(!(H>=G-1)&&e.retryConfig&&Jk(s,e.retryConfig,M)){let We=$m(H,e.retryConfig);await Am(We);continue}throw $}throw new Error("Unexpected end of retry loop")}}var $t={"Spree::Product":"/products","Spree::Variant":"/variants","Spree::Order":"/orders","Spree::User":"/customers","Spree::Category":"/categories","Spree::OptionType":"/option_types"},Zk=class{request;constructor(e){this.request=e}parentScopedCustomFields(e){return{list:(t,r,i)=>this.request("GET",`${e}/${t}/custom_fields`,{...i,params:r?k(r):void 0}),get:(t,r,i)=>this.request("GET",`${e}/${t}/custom_fields/${r}`,i),create:(t,r,i)=>this.request("POST",`${e}/${t}/custom_fields`,{...i,body:r}),update:(t,r,i,n)=>this.request("PATCH",`${e}/${t}/custom_fields/${r}`,{...n,body:i}),delete:(t,r,i)=>this.request("DELETE",`${e}/${t}/custom_fields/${r}`,i)}}parentScopedTranslations(e){return{get:(t,r)=>this.request("GET",`${e}/${t}/translations`,r).then(i=>i.data)}}customFields(e,t){let r=$t[e];if(!r)throw new Error(`Unknown custom-field owner type: ${e}. Add it to CUSTOM_FIELD_OWNER_PATHS.`);let i=this.parentScopedCustomFields(r);return{list:(n,s)=>i.list(t,n,s),get:(n,s)=>i.get(t,n,s),create:(n,s)=>i.create(t,n,s),update:(n,s,o)=>i.update(t,n,s,o),delete:(n,s)=>i.delete(t,n,s)}}customFieldDefinitions={list:(e,t)=>this.request("GET","/custom_field_definitions",{...t,params:e?k(e):void 0}),get:(e,t)=>this.request("GET",`/custom_field_definitions/${e}`,t),create:(e,t)=>this.request("POST","/custom_field_definitions",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/custom_field_definitions/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/custom_field_definitions/${e}`,t)};auth={login:(e,t)=>this.request("POST","/auth/login",{...t,body:e}),refresh:e=>this.request("POST","/auth/refresh",e),logout:e=>this.request("POST","/auth/logout",e),lookupInvitation:(e,t,r)=>this.request("GET",`/auth/invitations/${e}/lookup`,{...r,params:{token:t}}),acceptInvitation:(e,t,r,i)=>this.request("POST",`/auth/invitations/${e}/accept`,{...i,params:{token:t},body:r}),requestPasswordReset:(e,t)=>this.request("POST","/auth/password_resets",{...t,body:e}),resetPassword:(e,t,r)=>this.request("PATCH",`/auth/password_resets/${encodeURIComponent(e)}`,{...r,body:t})};me={get:e=>this.request("GET","/me",e),update:(e,t)=>this.request("PATCH","/me",{...t,body:e})};dashboard={analytics:(e,t)=>this.request("GET","/dashboard/analytics",{...t,params:e})};store={get:e=>this.request("GET","/store",e),update:(e,t)=>this.request("PATCH","/store",{...t,body:e})};locales={list:e=>this.request("GET","/locales",e).then(t=>t.data)};translatableResources={list:e=>this.request("GET","/translatable_resources",e).then(t=>t.data)};translations={batch:(e,t)=>this.request("POST","/translations/batch",{...t,body:{translations:e}}).then(r=>r.data)};products={list:(e,t)=>this.request("GET","/products",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/products/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/products",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/products/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/products/${e}`,t),clone:(e,t)=>this.request("POST",`/products/${e}/clone`,t),bulkStatusUpdate:(e,t)=>this.request("POST","/products/bulk_status_update",{...t,body:e}),bulkAddToCategories:(e,t)=>this.request("POST","/products/bulk_add_to_categories",{...t,body:e}),bulkRemoveFromCategories:(e,t)=>this.request("POST","/products/bulk_remove_from_categories",{...t,body:e}),bulkAddToChannels:(e,t)=>this.request("POST","/products/bulk_add_to_channels",{...t,body:e}),bulkRemoveFromChannels:(e,t)=>this.request("POST","/products/bulk_remove_from_channels",{...t,body:e}),bulkAddTags:(e,t)=>this.request("POST","/products/bulk_add_tags",{...t,body:e}),bulkRemoveTags:(e,t)=>this.request("POST","/products/bulk_remove_tags",{...t,body:e}),bulkDestroy:(e,t)=>this.request("DELETE","/products/bulk_destroy",{...t,body:e}),media:{list:(e,t,r)=>this.request("GET",`/products/${e}/media`,{...r,params:t?k(t):void 0}),create:(e,t,r)=>this.request("POST",`/products/${e}/media`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/products/${e}/media/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/products/${e}/media/${t}`,r)},variants:{list:(e,t,r)=>this.request("GET",`/products/${e}/variants`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/products/${e}/variants/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/products/${e}/variants`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/products/${e}/variants/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/products/${e}/variants/${t}`,r),media:{list:(e,t,r,i)=>this.request("GET",`/products/${e}/variants/${t}/media`,{...i,params:r?k(r):void 0}),create:(e,t,r,i)=>this.request("POST",`/products/${e}/variants/${t}/media`,{...i,body:r}),update:(e,t,r,i,n)=>this.request("PATCH",`/products/${e}/variants/${t}/media/${r}`,{...n,body:i}),delete:(e,t,r,i)=>this.request("DELETE",`/products/${e}/variants/${t}/media/${r}`,i)}},customFields:this.parentScopedCustomFields($t["Spree::Product"]),translations:this.parentScopedTranslations("/products")};orders={list:(e,t)=>this.request("GET","/orders",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/orders/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/orders",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/orders/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/orders/${e}`,t),complete:(e,t,r)=>this.request("PATCH",`/orders/${e}/complete`,{...r,body:t}),cancel:(e,t,r)=>this.request("PATCH",`/orders/${e}/cancel`,{...r,body:t}),approve:(e,t,r)=>this.request("PATCH",`/orders/${e}/approve`,{...r,body:t}),resume:(e,t)=>this.request("PATCH",`/orders/${e}/resume`,t),resendConfirmation:(e,t)=>this.request("POST",`/orders/${e}/resend_confirmation`,t),giftCards:{apply:(e,t,r)=>this.request("POST",`/orders/${e}/gift_cards`,{...r,body:t}),remove:(e,t,r)=>this.request("DELETE",`/orders/${e}/gift_cards/${t}`,r)},storeCredits:{apply:(e,t,r)=>this.request("POST",`/orders/${e}/store_credits`,{...r,body:t}),remove:(e,t)=>this.request("DELETE",`/orders/${e}/store_credits`,t)},items:{list:(e,t,r)=>this.request("GET",`/orders/${e}/items`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/orders/${e}/items/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/orders/${e}/items`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/orders/${e}/items/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/orders/${e}/items/${t}`,r)},fulfillments:{list:(e,t,r)=>this.request("GET",`/orders/${e}/fulfillments`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/orders/${e}/fulfillments/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/orders/${e}/fulfillments`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}`,{...i,body:r}),fulfill:(e,t,r)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}/fulfill`,r),cancel:(e,t,r)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}/cancel`,r),resume:(e,t,r)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}/resume`,r),split:(e,t,r,i)=>this.request("PATCH",`/orders/${e}/fulfillments/${t}/split`,{...i,body:r})},payments:{list:(e,t,r)=>this.request("GET",`/orders/${e}/payments`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/orders/${e}/payments/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/orders/${e}/payments`,{...r,body:t}),capture:(e,t,r)=>this.request("PATCH",`/orders/${e}/payments/${t}/capture`,r),void:(e,t,r)=>this.request("PATCH",`/orders/${e}/payments/${t}/void`,r)},refunds:{list:(e,t,r)=>this.request("GET",`/orders/${e}/refunds`,{...r,params:t?k(t):void 0}),create:(e,t,r)=>this.request("POST",`/orders/${e}/refunds`,{...r,body:t})},adjustments:{list:(e,t,r)=>this.request("GET",`/orders/${e}/adjustments`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/orders/${e}/adjustments/${t}`,r)},customFields:this.parentScopedCustomFields($t["Spree::Order"])};optionTypes={list:(e,t)=>this.request("GET","/option_types",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/option_types/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/option_types",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/option_types/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/option_types/${e}`,t),customFields:this.parentScopedCustomFields($t["Spree::OptionType"]),translations:this.parentScopedTranslations("/option_types")};paymentMethods={list:(e,t)=>this.request("GET","/payment_methods",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/payment_methods/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/payment_methods",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/payment_methods/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/payment_methods/${e}`,t),types:e=>this.request("GET","/payment_methods/types",e)};priceLists={list:(e,t)=>this.request("GET","/price_lists",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/price_lists/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/price_lists",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/price_lists/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/price_lists/${e}`,t),activate:(e,t)=>this.request("PATCH",`/price_lists/${e}/activate`,t),deactivate:(e,t)=>this.request("PATCH",`/price_lists/${e}/deactivate`,t),ruleTypes:e=>this.request("GET","/price_lists/price_rule_types",e)};prices={list:(e,t)=>this.request("GET","/prices",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/prices/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/prices",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/prices/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/prices/${e}`,t),bulkUpsert:(e,t)=>this.request("POST","/prices/bulk_upsert",{...t,body:e}),bulkDestroy:(e,t)=>this.request("DELETE","/prices/bulk_destroy",{...t,body:e})};promotions={list:(e,t)=>this.request("GET","/promotions",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/promotions/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/promotions",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/promotions/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/promotions/${e}`,t),actions:{list:(e,t,r)=>this.request("GET",`/promotions/${e}/promotion_actions`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/promotions/${e}/promotion_actions/${t}`,r),create:(e,t,r)=>this.request("POST",`/promotions/${e}/promotion_actions`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/promotions/${e}/promotion_actions/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/promotions/${e}/promotion_actions/${t}`,r)},rules:{list:(e,t,r)=>this.request("GET",`/promotions/${e}/promotion_rules`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/promotions/${e}/promotion_rules/${t}`,r),create:(e,t,r)=>this.request("POST",`/promotions/${e}/promotion_rules`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/promotions/${e}/promotion_rules/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/promotions/${e}/promotion_rules/${t}`,r)},couponCodes:{list:(e,t,r)=>this.request("GET",`/promotions/${e}/coupon_codes`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/promotions/${e}/coupon_codes/${t}`,r)}};promotionActions={types:e=>this.request("GET","/promotion_actions/types",e),calculators:(e,t)=>this.request("GET","/promotion_actions/calculators",{...t,params:{type:e}})};promotionRules={types:e=>this.request("GET","/promotion_rules/types",e)};tags={list:(e,t)=>this.request("GET","/tags",{...t,params:e})};customerGroups={list:(e,t)=>this.request("GET","/customer_groups",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/customer_groups/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/customer_groups",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/customer_groups/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/customer_groups/${e}`,t)};giftCards={list:(e,t)=>this.request("GET","/gift_cards",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/gift_cards/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/gift_cards",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/gift_cards/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/gift_cards/${e}`,t)};giftCardBatches={list:(e,t)=>this.request("GET","/gift_card_batches",{...t,params:e?k(e):void 0}),get:(e,t)=>this.request("GET",`/gift_card_batches/${e}`,t),create:(e,t)=>this.request("POST","/gift_card_batches",{...t,body:e})};exports={list:(e,t)=>this.request("GET","/exports",{...t,params:e?k(e):void 0}),get:(e,t)=>this.request("GET",`/exports/${e}`,t),create:(e,t)=>this.request("POST","/exports",{...t,body:e}),delete:(e,t)=>this.request("DELETE",`/exports/${e}`,t)};imports={list:(e,t)=>this.request("GET","/imports",{...t,params:e?k(e):void 0}),get:(e,t)=>this.request("GET",`/imports/${e}`,t),create:(e,t)=>this.request("POST","/imports",{...t,body:e}),completeMapping:(e,t,r)=>this.request("PATCH",`/imports/${e}/complete_mapping`,{...r,body:t??{}}),retryFailedRows:(e,t)=>this.request("PATCH",`/imports/${e}/retry_failed_rows`,t),delete:(e,t)=>this.request("DELETE",`/imports/${e}`,t),rows:{list:(e,t,r)=>this.request("GET",`/imports/${e}/rows`,{...r,params:t?k(t):void 0})}};customers={list:(e,t)=>this.request("GET","/customers",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/customers/${e}`,{...r,params:P(t)}),creditCards:{list:(e,t,r)=>this.request("GET",`/customers/${e}/credit_cards`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/customers/${e}/credit_cards/${t}`,{...i,params:P(r)}),delete:(e,t,r)=>this.request("DELETE",`/customers/${e}/credit_cards/${t}`,r)},create:(e,t)=>this.request("POST","/customers",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/customers/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/customers/${e}`,t),bulkAddToGroups:(e,t)=>this.request("POST","/customers/bulk_add_to_groups",{...t,body:e}),bulkRemoveFromGroups:(e,t)=>this.request("POST","/customers/bulk_remove_from_groups",{...t,body:e}),bulkAddTags:(e,t)=>this.request("POST","/customers/bulk_add_tags",{...t,body:e}),bulkRemoveTags:(e,t)=>this.request("POST","/customers/bulk_remove_tags",{...t,body:e}),addresses:{list:(e,t,r)=>this.request("GET",`/customers/${e}/addresses`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/customers/${e}/addresses/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/customers/${e}/addresses`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/customers/${e}/addresses/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/customers/${e}/addresses/${t}`,r)},storeCredits:{list:(e,t,r)=>this.request("GET",`/customers/${e}/store_credits`,{...r,params:t?k(t):void 0}),get:(e,t,r,i)=>this.request("GET",`/customers/${e}/store_credits/${t}`,{...i,params:P(r)}),create:(e,t,r)=>this.request("POST",`/customers/${e}/store_credits`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/customers/${e}/store_credits/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/customers/${e}/store_credits/${t}`,r)},customFields:this.parentScopedCustomFields($t["Spree::User"])};categories={list:(e,t)=>this.request("GET","/categories",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/categories/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/categories",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/categories/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/categories/${e}`,t),reposition:(e,t,r)=>this.request("PATCH",`/categories/${e}/reposition`,{...r,body:t}),products:{list:(e,t,r)=>this.request("GET",`/categories/${e}/products`,{...r,params:t?k(t):void 0}),add:(e,t,r)=>this.request("POST",`/categories/${e}/products`,{...r,body:{product_id:t}}),remove:(e,t,r)=>this.request("DELETE",`/categories/${e}/products/${t}`,r),reposition:(e,t,r,i)=>this.request("PATCH",`/categories/${e}/products/${t}/reposition`,{...i,body:r})},customFields:this.parentScopedCustomFields($t["Spree::Category"]),translations:this.parentScopedTranslations("/categories")};variants={list:(e,t)=>this.request("GET","/variants",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/variants/${e}`,{...r,params:P(t)}),customFields:this.parentScopedCustomFields($t["Spree::Variant"])};taxCategories={list:(e,t)=>this.request("GET","/tax_categories",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/tax_categories/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/tax_categories",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/tax_categories/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/tax_categories/${e}`,t)};channels={list:(e,t)=>this.request("GET","/channels",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/channels/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/channels",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/channels/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/channels/${e}`,t),addProducts:(e,t,r)=>this.request("POST",`/channels/${e}/add_products`,{...r,body:t}),removeProducts:(e,t,r)=>this.request("POST",`/channels/${e}/remove_products`,{...r,body:t}),orderRoutingRules:{list:(e,t,r)=>this.request("GET",`/channels/${e}/order_routing_rules`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/channels/${e}/order_routing_rules/${t}`,r),create:(e,t,r)=>this.request("POST",`/channels/${e}/order_routing_rules`,{...r,body:t}),update:(e,t,r,i)=>this.request("PATCH",`/channels/${e}/order_routing_rules/${t}`,{...i,body:r}),delete:(e,t,r)=>this.request("DELETE",`/channels/${e}/order_routing_rules/${t}`,r)}};orderRoutingRules={types:e=>this.request("GET","/order_routing_rules/types",e)};markets={list:(e,t)=>this.request("GET","/markets",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/markets/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/markets",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/markets/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/markets/${e}`,t)};storeCreditCategories={list:(e,t)=>this.request("GET","/store_credit_categories",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/store_credit_categories/${e}`,{...r,params:P(t)})};stockLocations={list:(e,t)=>this.request("GET","/stock_locations",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/stock_locations/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/stock_locations",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/stock_locations/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/stock_locations/${e}`,t)};stockItems={list:(e,t)=>this.request("GET","/stock_items",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/stock_items/${e}`,{...r,params:P(t)}),update:(e,t,r)=>this.request("PATCH",`/stock_items/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/stock_items/${e}`,t)};stockTransfers={list:(e,t)=>this.request("GET","/stock_transfers",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/stock_transfers/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/stock_transfers",{...t,body:e}),delete:(e,t)=>this.request("DELETE",`/stock_transfers/${e}`,t)};countries={list:(e,t)=>this.request("GET","/countries",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/countries/${e}`,{...r,params:P(t)})};directUploads={create:(e,t)=>this.request("POST","/direct_uploads",{...t,body:e})};adminUsers={list:(e,t)=>this.request("GET","/admin_users",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/admin_users/${e}`,{...r,params:P(t)}),update:(e,t,r)=>this.request("PATCH",`/admin_users/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/admin_users/${e}`,t)};invitations={list:(e,t)=>this.request("GET","/invitations",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/invitations/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/invitations",{...t,body:e}),delete:(e,t)=>this.request("DELETE",`/invitations/${e}`,t),resend:(e,t)=>this.request("PATCH",`/invitations/${e}/resend`,t)};apiKeys={list:(e,t)=>this.request("GET","/api_keys",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/api_keys/${e}`,{...r,params:P(t)}),current:e=>this.request("GET","/api_keys/current",e??{}),create:(e,t)=>this.request("POST","/api_keys",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/api_keys/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/api_keys/${e}`,t),revoke:(e,t)=>this.request("PATCH",`/api_keys/${e}/revoke`,t)};allowedOrigins={list:(e,t)=>this.request("GET","/allowed_origins",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/allowed_origins/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/allowed_origins",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/allowed_origins/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/allowed_origins/${e}`,t)};webhookEndpoints={list:(e,t)=>this.request("GET","/webhook_endpoints",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/webhook_endpoints/${e}`,{...r,params:P(t)}),create:(e,t)=>this.request("POST","/webhook_endpoints",{...t,body:e}),update:(e,t,r)=>this.request("PATCH",`/webhook_endpoints/${e}`,{...r,body:t}),delete:(e,t)=>this.request("DELETE",`/webhook_endpoints/${e}`,t),sendTest:(e,t)=>this.request("POST",`/webhook_endpoints/${e}/send_test`,t),enable:(e,t)=>this.request("PATCH",`/webhook_endpoints/${e}/enable`,t),disable:(e,t,r)=>this.request("PATCH",`/webhook_endpoints/${e}/disable`,{...r,body:t}),deliveries:{list:(e,t,r)=>this.request("GET",`/webhook_endpoints/${e}/deliveries`,{...r,params:t?k(t):void 0}),get:(e,t,r)=>this.request("GET",`/webhook_endpoints/${e}/deliveries/${t}`,r),redeliver:(e,t,r)=>this.request("POST",`/webhook_endpoints/${e}/deliveries/${t}/redeliver`,r)}};roles={list:(e,t)=>this.request("GET","/roles",{...t,params:e?k(e):void 0}),get:(e,t,r)=>this.request("GET",`/roles/${e}`,{...r,params:P(t)})}};function Ir(e){let t=e.baseUrl.replace(/\/$/,""),r=e.fetch||fetch.bind(globalThis),i=Wk(e.retry),n={baseUrl:t,fetchFn:r,retryConfig:i,credentials:e.credentials??"include"},s=e.jwtToken,o=e.storeId,a=null,c="/api/v3/admin",d=async(l,m,h={})=>{let f={};o&&(f["X-Spree-Store-Id"]=o);let x={...h,headers:{...f,...h.headers}},w=()=>{let v=e.secretKey?{headerName:"X-Spree-Api-Key",headerValue:e.secretKey}:{headerName:"Authorization",headerValue:s?`Bearer ${s}`:""};return Xk(n,c,v)(l,m,x)};try{return await w()}catch(v){if(v instanceof At&&v.status===401&&a&&!m.includes("/auth/")&&await a())return w();throw v}},p=new Zk(d),u=Object.create(p);return u.setStore=l=>{o=l},u.setToken=l=>{s=l},u.onUnauthorized=l=>{a=l},u}var sh=D(Fr(),1),Pe=D(K(),1);var Wm=D(K(),1);import eS from"fs";var _a=Symbol("no-body");async function Hm(e){if(e===void 0)return _a;let t;if(e==="-")t=await tS();else if(e.startsWith("@")){let r=e.slice(1);try{t=eS.readFileSync(r,"utf-8")}catch(i){throw i?.code==="ENOENT"?new Error(`Request body file not found: ${r}`):new Error(`Could not read request body file ${r}: ${i.message}`)}}else t=e;try{return JSON.parse(t)}catch{let r=e==="-"?" (from stdin)":e.startsWith("@")?` (${e.slice(1)})`:"";throw new Error(`Request body is not valid JSON${r}`)}}async function tS(){process.stdin.isTTY&&process.stderr.write(`${Wm.default.dim("Reading request body from stdin \u2014 paste JSON and press Ctrl-D...")}
168
+ `);let e=[];for await(let t of process.stdin)e.push(t);return Buffer.concat(e).toString("utf-8")}var ba=D(Fr(),1),fe=D(K(),1);function Br(e,t="json"){if(e!=null){if(t==="table"){let r=nS(e);if(r){(0,ba.printTable)(r.map(Km));return}let i=Km(e);(0,ba.printTable)(Object.entries(i).map(([n,s])=>({field:n,value:s})));return}process.stdout.isTTY?process.stdout.write(`${iS(JSON.stringify(e,null,2))}
169
169
  `):process.stdout.write(`${JSON.stringify(e)}
170
170
  `)}}var rS=/("(?:\\.|[^"\\])*"(\s*:)?)|\b(true|false|null)\b|(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)/g;function iS(e){return e.replace(rS,(t,r,i,n,s)=>r!==void 0?i?fe.default.cyan(r.slice(0,-i.length))+i:fe.default.green(r):n!==void 0?fe.default.yellow(n):s!==void 0?fe.default.yellow(s):t)}function nS(e){return Array.isArray(e)?e:e&&typeof e=="object"&&Array.isArray(e.data)?e.data:null}function Km(e){let t={};for(let[r,i]of Object.entries(e))i===null||["string","number","boolean"].includes(typeof i)?t[r]=i:Array.isArray(i)?t[r]=`[${i.length}]`:t[r]="{\u2026}";return t}function Et(e,t={}){if(e instanceof At){let i=e.details?`
171
171
  ${JSON.stringify({details:e.details},null,2)}`:"";process.stderr.write(`${fe.default.red(`${e.code}:`)} ${e.message}${i}
@@ -176,7 +176,7 @@ ${fe.default.dim(" then pass it via --api-key <sk_...> or export SPREE_API_KEY=
176
176
  `),process.exit(2)),e instanceof TypeError&&/fetch failed/i.test(e.message)){let i=e.cause,n=i instanceof Error?i.message:i?String(i):"",s=t.baseUrl?` (${t.baseUrl})`:"";process.stderr.write(`${fe.default.red("error:")} could not reach the server${s}${n?`: ${n}`:""}
177
177
  `),process.stderr.write(`${fe.default.dim("Hint: check the URL, or run `spree api status` to diagnose reachability and credentials.")}
178
178
  `),process.exit(2)}let r=e instanceof Error?e.message:String(e);process.stderr.write(`${fe.default.red("error:")} ${r}
179
- `),process.exit(2)}function Jm(e){let t=new Map;for(let i of e.query??[]){let n=i.indexOf("=");if(n<=0)throw new Error(`Invalid -q expression "${i}" \u2014 expected key=value (e.g. -q status_eq=active)`);let s=i.slice(0,n),o=i.slice(n+1),a=t.get(s);a?a.push(o):t.set(s,[o])}let r={};for(let[i,n]of t)n.length>1?r[`q[${i}][]`]=n:r[`q[${i}]`]=n[0];return e.sort&&(r.sort=e.sort),e.page!==void 0&&(r.page=Ym(e.page,"--page")),e.limit!==void 0&&(r.limit=Ym(e.limit,"--limit")),e.expand&&(r.expand=e.expand),e.fields&&(r.fields=e.fields),r}function Ym(e,t){if(!/^[1-9]\d*$/.test(e))throw new Error(`Invalid ${t} "${e}" \u2014 expected a positive integer`);return Number(e)}function Br(e){let t=e.startsWith("/")?e:`/${e}`,r="/api/v3/admin";return t===r?"/":t.startsWith(`${r}/`)?t.slice(r.length):t}var Qt=D(K(),1);async function Ur(e,t){let r=Rr({baseUrl:e,secretKey:t,retry:!1});try{return{status:"connected",storeName:(await r.request("GET","/store",{}))?.name}}catch(i){return i instanceof At?i.status===401?{status:"unauthorized",message:i.message}:i.status===403?{status:"forbidden"}:{status:"unreachable",message:`server responded HTTP ${i.status}: ${i.message}`}:{status:"unreachable",message:i instanceof Error?i.message:String(i)}}}async function Xm(e,t){let r=Rr({baseUrl:e,secretKey:t,retry:!1});try{return(await r.apiKeys.current()).scopes??null}catch{return null}}function Tn(e){return e.status==="unauthorized"||e.status==="unreachable"}function Rn(e){return{connected:Qt.default.green(`connected${e.storeName?` (${e.storeName})`:""}`),forbidden:Qt.default.green("connected")+Qt.default.dim(" (key valid; lacks read_settings for store details)"),unauthorized:Qt.default.red("key rejected (401)"),unreachable:Qt.default.red(`unreachable \u2014 ${e.message}`)}[e.status]}var Zm={info:{title:"Admin API",contact:{name:"Spree Commerce",url:"https://spreecommerce.org",email:"hello@spreecommerce.org"},description:`Spree Admin API v3 - Administrative API for managing products, orders, and store settings.
179
+ `),process.exit(2)}function Jm(e){let t=new Map;for(let i of e.query??[]){let n=i.indexOf("=");if(n<=0)throw new Error(`Invalid -q expression "${i}" \u2014 expected key=value (e.g. -q status_eq=active)`);let s=i.slice(0,n),o=i.slice(n+1),a=t.get(s);a?a.push(o):t.set(s,[o])}let r={};for(let[i,n]of t)n.length>1?r[`q[${i}][]`]=n:r[`q[${i}]`]=n[0];return e.sort&&(r.sort=e.sort),e.page!==void 0&&(r.page=Ym(e.page,"--page")),e.limit!==void 0&&(r.limit=Ym(e.limit,"--limit")),e.expand&&(r.expand=e.expand),e.fields&&(r.fields=e.fields),r}function Ym(e,t){if(!/^[1-9]\d*$/.test(e))throw new Error(`Invalid ${t} "${e}" \u2014 expected a positive integer`);return Number(e)}function Ur(e){let t=e.startsWith("/")?e:`/${e}`,r="/api/v3/admin";return t===r?"/":t.startsWith(`${r}/`)?t.slice(r.length):t}var Qt=D(K(),1);async function Nr(e,t){let r=Ir({baseUrl:e,secretKey:t,retry:!1});try{return{status:"connected",storeName:(await r.request("GET","/store",{}))?.name}}catch(i){return i instanceof At?i.status===401?{status:"unauthorized",message:i.message}:i.status===403?{status:"forbidden"}:{status:"unreachable",message:`server responded HTTP ${i.status}: ${i.message}`}:{status:"unreachable",message:i instanceof Error?i.message:String(i)}}}async function Xm(e,t){let r=Ir({baseUrl:e,secretKey:t,retry:!1});try{return(await r.apiKeys.current()).scopes??null}catch{return null}}function Rn(e){return e.status==="unauthorized"||e.status==="unreachable"}function In(e){return{connected:Qt.default.green(`connected${e.storeName?` (${e.storeName})`:""}`),forbidden:Qt.default.green("connected")+Qt.default.dim(" (key valid; lacks read_settings for store details)"),unauthorized:Qt.default.red("key rejected (401)"),unreachable:Qt.default.red(`unreachable \u2014 ${e.message}`)}[e.status]}var Zm={info:{title:"Admin API",contact:{name:"Spree Commerce",url:"https://spreecommerce.org",email:"hello@spreecommerce.org"},description:`Spree Admin API v3 - Administrative API for managing products, orders, and store settings.
180
180
 
181
181
  ## Authentication
182
182
 
@@ -248,17 +248,17 @@ admin API from a browser.
248
248
 
249
249
  **Required scope:** \`write_settings\` (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}}],responses:{"204":{description:"allowed origin deleted"}}}},"/api/v3/admin/api_keys":{get:{summary:"List API keys",tags:["API Keys"],security:[{api_key:[],bearer_auth:[]}],description:"Returns publishable and secret API keys for the current store. Secret keys are listed by `token_prefix` only \u2014 the plaintext token is delivered exactly once on create.\n\n**Required scope:** `read_api_keys` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"API keys found",content:{"application/json":{}}}}},post:{summary:"Create an API key",tags:["API Keys"],security:[{api_key:[],bearer_auth:[]}],description:"Creates a publishable or secret API key. The plaintext token is included in the response **once** for secret keys; publishable keys expose their token on every read since they are intended for client-side use.\n\n**Required scope:** `write_api_keys` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"secret key created \u2014 plaintext token returned once",content:{"application/json":{}}},"422":{description:"validation error",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["name","key_type"],properties:{name:{type:"string"},key_type:{type:"string",enum:["publishable","secret"]},scopes:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/api_keys/{id}":{get:{summary:"Show an API key",tags:["API Keys"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `read_api_keys` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"API key found",content:{"application/json":{}}}}},patch:{summary:"Update an API key",tags:["API Keys"],security:[{api_key:[],bearer_auth:[]}],description:"Renames a key. `key_type` and `scopes` are fixed at creation \u2014 to change a key's authority, create a new key and revoke the old one.\n\n**Required scope:** `write_api_keys` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"API key renamed",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"}}}}}}},delete:{summary:"Delete an API key",tags:["API Keys"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_api_keys` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"API key deleted"}}}},"/api/v3/admin/api_keys/current":{get:{summary:"Describe the current API key",tags:["API Keys"],security:[{api_key:[]}],description:`Returns the secret key that authenticated this request, including its live scopes. Useful to confirm a key's real, current authority. Only secret-key principals have a single key to describe.
250
250
 
251
- **Required scope:** none \u2014 any key can describe itself (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"current API key",content:{"application/json":{}}}}}},"/api/v3/admin/api_keys/{id}/revoke":{patch:{summary:"Revoke an API key",tags:["API Keys"],security:[{api_key:[],bearer_auth:[]}],description:"Marks the key revoked. Future requests using its token will fail; the row is preserved for audit.\n\n**Required scope:** `write_api_keys` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"API key revoked",content:{"application/json":{}}}}}},"/api/v3/admin/categories":{get:{summary:"List categories",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a paginated list of the store's categories (manual hierarchical taxons; rule-based collections are excluded).\n\n**Required scope:** `read_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Number of records per page",schema:{type:"integer"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., children, parent, ancestors).",schema:{type:"string"}}],responses:{"200":{description:"categories found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/Category"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Create a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Creates a category. Nests under the parent when parent_id is given, otherwise creates a top-level category.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}}],responses:{"201":{description:"category created",content:{"application/json":{schema:{$ref:"#/components/schemas/Category"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},parent_id:{type:"string",description:"Prefixed ID of the parent category"},description:{type:"string"},permalink:{type:"string"},meta_title:{type:"string"},meta_description:{type:"string"},meta_keywords:{type:"string"},hide_from_nav:{type:"boolean"}},required:["name"]}}}}}},"/api/v3/admin/categories/{id}":{get:{summary:"Get a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a single category by ID.\n\n**Required scope:** `read_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., children, parent, ancestors).",schema:{type:"string"}}],responses:{"200":{description:"category found",content:{"application/json":{schema:{$ref:"#/components/schemas/Category"}}}},"404":{description:"category not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},patch:{summary:"Update a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Updates a category.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"200":{description:"category updated",content:{"application/json":{schema:{$ref:"#/components/schemas/Category"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},parent_id:{type:"string",description:"Prefixed ID of the parent category"},description:{type:"string"},permalink:{type:"string"},meta_title:{type:"string"},meta_description:{type:"string"},meta_keywords:{type:"string"},hide_from_nav:{type:"boolean"}}}}}}},delete:{summary:"Delete a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes a category and its descendants.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"204":{description:"category deleted"}}}},"/api/v3/admin/categories/{id}/reposition":{patch:{summary:"Reposition a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Moves a category to a new parent and/or index within the tree.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"200":{description:"category repositioned",content:{"application/json":{schema:{$ref:"#/components/schemas/Category"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{new_parent_id:{type:"string",description:"Prefixed ID of the new parent (omit for top level)"},new_position:{type:"integer",description:"0-based index among the new parent's children"}},required:["new_position"]}}}}}},"/api/v3/admin/categories/{category_id}/products":{get:{summary:"List category products",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Products classified under the category, ordered by their classification position.\n\n**Required scope:** `read_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"category_id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"200":{description:"products found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/Product"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Add a product to a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Classifies a product under the category (appended to the end).\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"category_id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"201":{description:"product added",content:{"application/json":{schema:{$ref:"#/components/schemas/Product"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{product_id:{type:"string"}},required:["product_id"]}}}}}},"/api/v3/admin/categories/{category_id}/products/{id}/reposition":{patch:{summary:"Reposition a category product",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Moves a product to a new index among the category's products.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"category_id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Product ID",schema:{type:"string"}}],responses:{"204":{description:"product repositioned"}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{new_position:{type:"integer",description:"0-based index among the category's products"}},required:["new_position"]}}}}}},"/api/v3/admin/channels":{get:{summary:"List channels",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the channels configured for the current store.\n\n**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"page",in:"query",required:!1,schema:{type:"integer"}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}}],responses:{"200":{description:"channels found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/Channel"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Create a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Creates a new channel on the current store. `code` is normalized to a\nURL-safe slug (`Point of Sale` \u2192 `point-of-sale`); when omitted it's\nderived from `name`.\n\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"channel created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["name"],properties:{name:{type:"string"},code:{type:"string",description:"Slug \u2014 auto-derived from `name` when blank."},active:{type:"boolean",default:!0}}}}}}}},"/api/v3/admin/channels/{id}":{parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}],get:{summary:"Get a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"channel found",content:{"application/json":{}}}}},patch:{summary:"Update a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"channel updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},code:{type:"string"},active:{type:"boolean"}}}}}}},delete:{summary:"Delete a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"channel deleted"}}}},"/api/v3/admin/channels/{id}/add_products":{parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}],post:{summary:"Publish products on a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:`Publishes the listed products on this channel. Idempotent \u2014 re-publishing
251
+ **Required scope:** none \u2014 any key can describe itself (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"current API key",content:{"application/json":{}}}}}},"/api/v3/admin/api_keys/{id}/revoke":{patch:{summary:"Revoke an API key",tags:["API Keys"],security:[{api_key:[],bearer_auth:[]}],description:"Marks the key revoked. Future requests using its token will fail; the row is preserved for audit.\n\n**Required scope:** `write_api_keys` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"API key revoked",content:{"application/json":{}}}}}},"/api/v3/admin/categories":{get:{summary:"List categories",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a paginated list of the store's categories (manual hierarchical taxons; rule-based collections are excluded).\n\n**Required scope:** `read_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Number of records per page",schema:{type:"integer"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., children, parent, ancestors).",schema:{type:"string"}}],responses:{"200":{description:"categories found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/Category"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Create a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Creates a category. Nests under the parent when parent_id is given, otherwise creates a top-level category.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}}],responses:{"201":{description:"category created",content:{"application/json":{schema:{$ref:"#/components/schemas/Category"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},parent_id:{type:"string",description:"Prefixed ID of the parent category"},description:{type:"string"},permalink:{type:"string"},meta_title:{type:"string"},meta_description:{type:"string"},meta_keywords:{type:"string"},hide_from_nav:{type:"boolean"}},required:["name"]}}}}}},"/api/v3/admin/categories/{id}":{get:{summary:"Get a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a single category by ID.\n\n**Required scope:** `read_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., children, parent, ancestors).",schema:{type:"string"}}],responses:{"200":{description:"category found",content:{"application/json":{schema:{$ref:"#/components/schemas/Category"}}}},"404":{description:"category not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},patch:{summary:"Update a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Updates a category.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"200":{description:"category updated",content:{"application/json":{schema:{$ref:"#/components/schemas/Category"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},parent_id:{type:"string",description:"Prefixed ID of the parent category"},description:{type:"string"},permalink:{type:"string"},meta_title:{type:"string"},meta_description:{type:"string"},meta_keywords:{type:"string"},hide_from_nav:{type:"boolean"}}}}}}},delete:{summary:"Delete a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes a category and its descendants.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"204":{description:"category deleted"}}}},"/api/v3/admin/categories/{id}/reposition":{patch:{summary:"Reposition a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Moves a category to a new parent and/or index within the tree.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"200":{description:"category repositioned",content:{"application/json":{schema:{$ref:"#/components/schemas/Category"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{new_parent_id:{type:"string",description:"Prefixed ID of the new parent (omit for top level)"},new_position:{type:"integer",description:"0-based index among the new parent's children"}},required:["new_position"]}}}}}},"/api/v3/admin/categories/{category_id}/products":{get:{summary:"List category products",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Products classified under the category, ordered by their classification position.\n\n**Required scope:** `read_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"category_id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"200":{description:"products found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/Product"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Add a product to a category",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Classifies a product under the category (appended to the end).\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"category_id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}}],responses:{"201":{description:"product added",content:{"application/json":{schema:{$ref:"#/components/schemas/Product"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{product_id:{type:"string"}},required:["product_id"]}}}}}},"/api/v3/admin/categories/{category_id}/products/{id}/reposition":{patch:{summary:"Reposition a category product",tags:["Categories"],security:[{api_key:[],bearer_auth:[]}],description:"Moves a product to a new index among the category's products.\n\n**Required scope:** `write_categories` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"category_id",in:"path",required:!0,description:"Category ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Product ID",schema:{type:"string"}}],responses:{"204":{description:"product repositioned"}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{new_position:{type:"integer",description:"0-based index among the category's products"}},required:["new_position"]}}}}}},"/api/v3/admin/channels":{get:{summary:"List channels",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the channels configured for the current store.\n\n**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"page",in:"query",required:!1,schema:{type:"integer"}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}}],responses:{"200":{description:"channels found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/Channel"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Create a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Creates a new channel on the current store. `code` is normalized to a\nURL-safe slug (`Point of Sale` \u2192 `point-of-sale`); when omitted it's\nderived from `name`.\n\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"channel created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["name"],properties:{name:{type:"string"},code:{type:"string",description:"Slug \u2014 auto-derived from `name` when blank."},active:{type:"boolean",default:!0},default:{type:"boolean",default:!1},preferred_order_routing_strategy:{type:"string",nullable:!0,description:"Routing strategy class name. `null` inherits the store setting."},preferred_storefront_access:{type:"string",nullable:!0,enum:["public","prices_hidden","login_required"],description:"Anonymous-visitor access posture. `null` inherits the store setting."},preferred_guest_checkout:{type:"boolean",nullable:!0,description:"Whether guests can check out without an account. `null` inherits the store setting."}}}}}}}},"/api/v3/admin/channels/{id}":{parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}],get:{summary:"Get a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"channel found",content:{"application/json":{}}}}},patch:{summary:"Update a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"channel updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},code:{type:"string"},active:{type:"boolean"},default:{type:"boolean"},preferred_order_routing_strategy:{type:"string",nullable:!0,description:"Routing strategy class name. `null` inherits the store setting."},preferred_storefront_access:{type:"string",nullable:!0,enum:["public","prices_hidden","login_required"],description:"Anonymous-visitor access posture. `null` inherits the store setting."},preferred_guest_checkout:{type:"boolean",nullable:!0,description:"Whether guests can check out without an account. `null` inherits the store setting."}}}}}}},delete:{summary:"Delete a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"channel deleted"}}}},"/api/v3/admin/channels/{id}/add_products":{parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}],post:{summary:"Publish products on a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:`Publishes the listed products on this channel. Idempotent \u2014 re-publishing
252
252
  an already-published product updates its publication window. Products from
253
253
  sibling stores are silently dropped.
254
254
 
255
255
 
256
- **Required scope:** \`write_products\` (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"products published",content:{"application/json":{schema:{type:"object",properties:{product_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["product_ids"],properties:{product_ids:{type:"array",items:{type:"string"}},published_at:{type:"string",format:"date-time",nullable:!0,description:"When the publications go live. `null` means immediately."},unpublished_at:{type:"string",format:"date-time",nullable:!0,description:"When the publications come down. `null` means never."}}}}}}}},"/api/v3/admin/channels/{id}/remove_products":{parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}],post:{summary:"Unpublish products from a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Unpublishes the listed products from this channel.\n\n**Required scope:** `write_products` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"products unpublished",content:{"application/json":{schema:{type:"object",properties:{product_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["product_ids"],properties:{product_ids:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/channels/{channel_id}/order_routing_rules":{parameters:[{name:"channel_id",in:"path",required:!0,schema:{type:"string"}}],get:{summary:"List order routing rules for a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the channel's routing rules in priority order. The rules engine walks them top-down; see the Order Routing guide.\n\n**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"rules found",content:{"application/json":{}}}}},post:{summary:"Create an order routing rule on a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Adds a rule to the channel's routing list. The `type` is the wire shorthand from `GET /order_routing_rules/types` (e.g. `preferred_location`). Omitting `position` appends the rule at the end of the list. Each rule kind can appear at most once per channel \u2014 a duplicate `type` is rejected with a validation error.\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"rule created",content:{"application/json":{}}},"422":{description:"unknown rule type",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{type:{type:"string"},active:{type:"boolean"},position:{type:"integer"},preferences:{type:"object",additionalProperties:!0}},required:["type"]}}}}}},"/api/v3/admin/channels/{channel_id}/order_routing_rules/{id}":{parameters:[{name:"channel_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],patch:{summary:"Update an order routing rule",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Updates a rule's `active` flag, `position` (the list reorders around it), or `preferences`. The rule kind cannot be changed \u2014 delete and re-create instead.\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"rule updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{active:{type:"boolean"},position:{type:"integer"},preferences:{type:"object",additionalProperties:!0}}}}}}},delete:{summary:"Delete an order routing rule",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"rule deleted"}}}},"/api/v3/admin/order_routing_rules/types":{get:{summary:"List available order routing rule types",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:'Enumerates the registered rule kinds with their labels, descriptions and preference schemas \u2014 drives the "Add rule" picker in the admin dashboard. Plugins extend the list by registering `Spree::OrderRoutingRule` subclasses via `Spree.order_routing.rules`.\n\n**Required scope:** `read_settings` (for API-key authentication).',parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"types found",content:{"application/json":{}}}}}},"/api/v3/admin/custom_field_definitions":{get:{summary:"List custom field definitions",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"Returns all defined custom fields. Filter by `?q[resource_type_eq]=Spree::Product` to narrow to one parent type.\n\n**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand. Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., key,label,field_type). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"definitions returned",content:{"application/json":{}}}}},post:{summary:"Create a custom field definition",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"definition created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["key","field_type","resource_type"],properties:{namespace:{type:"string",description:"Defaults to `custom`"},key:{type:"string"},label:{type:"string",description:"Human-readable name; defaults to titleized `key`"},field_type:{type:"string",description:"Custom field type identifier (one of the registered field-type class names)."},resource_type:{type:"string",description:"Owner class, e.g. `Spree::Product`"},storefront_visible:{type:"boolean",description:"When false, definition is admin-only (was `display_on: back_end`)"}}}}}}}},"/api/v3/admin/custom_field_definitions/{id}":{get:{summary:"Show a custom field definition",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand. Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., key,label,field_type). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"definition found",content:{"application/json":{}}}}},patch:{summary:"Update a custom field definition",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"definition updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{label:{type:"string"},storefront_visible:{type:"boolean"}}}}}}},delete:{summary:"Delete a custom field definition",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes the definition and cascades to all custom field values referencing it.\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"definition deleted"}}}},"/api/v3/admin/customer_groups":{get:{summary:"List customer groups",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the customer groups configured for the current store. Groups\nsegment customers for targeted promotions (see the `customer_group`\npromotion rule) and reporting. The list endpoint never embeds the\nmember list \u2014 fetch a single group with `?expand=customers` if you\nneed them inline, or query `/admin/customers?customer_group_id_in=\u2026`\nfor paginated membership.\n\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Number of records per page",schema:{type:"integer"}},{name:"q[name_cont]",in:"query",required:!1,description:"Filter by name (contains)",schema:{type:"string"}},{name:"sort",in:"query",required:!1,description:"Sort by field. Prefix with `-` for descending (e.g., `-created_at`).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include. id is always included.",schema:{type:"string"}}],responses:{"200":{description:"customer groups found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/CustomerGroup"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}},"401":{description:"unauthorized",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},post:{summary:"Create a customer group",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:"Creates a customer group in the current store. `customer_ids` is\noptional; when present, customers are attached at create time.\nPass prefixed IDs (e.g. `cus_\u2026`) \u2014 the server decodes them\nautomatically.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"customer group created",content:{"application/json":{schema:{$ref:"#/components/schemas/CustomerGroup"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["name"],properties:{name:{type:"string"},description:{type:"string",nullable:!0},customer_ids:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/customer_groups/{id}":{parameters:[{name:"id",in:"path",required:!0,description:"Customer group prefixed ID",schema:{type:"string"}}],get:{summary:"Get a customer group",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:`Returns a single customer group. Pass \`?expand=customers\` to embed
256
+ **Required scope:** \`write_products\` (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"products published",content:{"application/json":{schema:{type:"object",properties:{product_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["product_ids"],properties:{product_ids:{type:"array",items:{type:"string"}},published_at:{type:"string",format:"date-time",nullable:!0,description:"When the publications go live. `null` means immediately."},unpublished_at:{type:"string",format:"date-time",nullable:!0,description:"When the publications come down. `null` means never."}}}}}}}},"/api/v3/admin/channels/{id}/remove_products":{parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}],post:{summary:"Unpublish products from a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Unpublishes the listed products from this channel.\n\n**Required scope:** `write_products` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"products unpublished",content:{"application/json":{schema:{type:"object",properties:{product_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["product_ids"],properties:{product_ids:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/channels/{channel_id}/order_routing_rules":{parameters:[{name:"channel_id",in:"path",required:!0,schema:{type:"string"}}],get:{summary:"List order routing rules for a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the channel's routing rules in priority order. The rules engine walks them top-down; see the Order Routing guide.\n\n**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"rules found",content:{"application/json":{}}}}},post:{summary:"Create an order routing rule on a channel",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Adds a rule to the channel's routing list. The `type` is the wire shorthand from `GET /order_routing_rules/types` (e.g. `preferred_location`). Omitting `position` appends the rule at the end of the list. Each rule kind can appear at most once per channel \u2014 a duplicate `type` is rejected with a validation error.\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"rule created",content:{"application/json":{}}},"422":{description:"unknown rule type",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{type:{type:"string"},active:{type:"boolean"},position:{type:"integer"},preferences:{type:"object",additionalProperties:!0}},required:["type"]}}}}}},"/api/v3/admin/channels/{channel_id}/order_routing_rules/{id}":{parameters:[{name:"channel_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],patch:{summary:"Update an order routing rule",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"Updates a rule's `active` flag, `position` (the list reorders around it), or `preferences`. The rule kind cannot be changed \u2014 delete and re-create instead.\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"rule updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{active:{type:"boolean"},position:{type:"integer"},preferences:{type:"object",additionalProperties:!0}}}}}}},delete:{summary:"Delete an order routing rule",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"rule deleted"}}}},"/api/v3/admin/order_routing_rules/types":{get:{summary:"List available order routing rule types",tags:["Channels"],security:[{api_key:[],bearer_auth:[]}],description:'Enumerates the registered rule kinds with their labels, descriptions and preference schemas \u2014 drives the "Add rule" picker in the admin dashboard. Plugins extend the list by registering `Spree::OrderRoutingRule` subclasses via `Spree.order_routing.rules`.\n\n**Required scope:** `read_settings` (for API-key authentication).',parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"types found",content:{"application/json":{}}}}}},"/api/v3/admin/custom_field_definitions":{get:{summary:"List custom field definitions",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"Returns all defined custom fields. Filter by `?q[resource_type_eq]=Spree::Product` to narrow to one parent type.\n\n**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand. Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., key,label,field_type). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"definitions returned",content:{"application/json":{}}}}},post:{summary:"Create a custom field definition",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"definition created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["key","field_type","resource_type"],properties:{namespace:{type:"string",description:"Defaults to `custom`"},key:{type:"string"},label:{type:"string",description:"Human-readable name; defaults to titleized `key`"},field_type:{type:"string",description:"Custom field type identifier (one of the registered field-type class names)."},resource_type:{type:"string",description:"Owner class, e.g. `Spree::Product`"},storefront_visible:{type:"boolean",description:"When false, definition is admin-only (was `display_on: back_end`)"},searchable:{type:"boolean",description:"When true, values are included in storefront product text search"},sortable:{type:"boolean",description:"When true, storefront product listings can sort by this field"}}}}}}}},"/api/v3/admin/custom_field_definitions/{id}":{get:{summary:"Show a custom field definition",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand. Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., key,label,field_type). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"definition found",content:{"application/json":{}}}}},patch:{summary:"Update a custom field definition",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"definition updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{label:{type:"string"},storefront_visible:{type:"boolean"},searchable:{type:"boolean"},sortable:{type:"boolean"}}}}}}},delete:{summary:"Delete a custom field definition",tags:["Custom Fields"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes the definition and cascades to all custom field values referencing it.\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"definition deleted"}}}},"/api/v3/admin/customer_groups":{get:{summary:"List customer groups",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the customer groups configured for the current store. Groups\nsegment customers for targeted promotions (see the `customer_group`\npromotion rule) and reporting. The list endpoint never embeds the\nmember list \u2014 fetch a single group with `?expand=customers` if you\nneed them inline, or query `/admin/customers?customer_group_id_in=\u2026`\nfor paginated membership.\n\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Number of records per page",schema:{type:"integer"}},{name:"q[name_cont]",in:"query",required:!1,description:"Filter by name (contains)",schema:{type:"string"}},{name:"sort",in:"query",required:!1,description:"Sort by field. Prefix with `-` for descending (e.g., `-created_at`).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include. id is always included.",schema:{type:"string"}}],responses:{"200":{description:"customer groups found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/CustomerGroup"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}},"401":{description:"unauthorized",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},post:{summary:"Create a customer group",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:"Creates a customer group in the current store. `customer_ids` is\noptional; when present, customers are attached at create time.\nPass prefixed IDs (e.g. `cus_\u2026`) \u2014 the server decodes them\nautomatically.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"customer group created",content:{"application/json":{schema:{$ref:"#/components/schemas/CustomerGroup"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["name"],properties:{name:{type:"string"},description:{type:"string",nullable:!0},customer_ids:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/customer_groups/{id}":{parameters:[{name:"id",in:"path",required:!0,description:"Customer group prefixed ID",schema:{type:"string"}}],get:{summary:"Get a customer group",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:`Returns a single customer group. Pass \`?expand=customers\` to embed
257
257
  the full member list inline (recommended only for single-record
258
258
  reads \u2014 embed cost scales with membership size).
259
259
 
260
260
 
261
- **Required scope:** \`read_customers\` (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to embed. Supported: `customers`.",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include. id is always included.",schema:{type:"string"}}],responses:{"200":{description:"customer group with embedded customers",content:{"application/json":{schema:{$ref:"#/components/schemas/CustomerGroup"}}}},"404":{description:"customer group not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},patch:{summary:"Update a customer group",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:"Updates name, description, or membership. `customer_ids` is a\nfull-set replacement \u2014 the server reconciles the membership to\nmatch the array, adding new IDs and removing ones not present.\nSend `customer_ids: []` to clear all members.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"customer group updated",content:{"application/json":{schema:{$ref:"#/components/schemas/CustomerGroup"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},description:{type:"string",nullable:!0},customer_ids:{type:"array",items:{type:"string"}}}}}}}},delete:{summary:"Delete a customer group",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:"Soft-deletes the group. Member users are not deleted; their `customer_group_users` rows are dropped.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"customer group deleted"}}}},"/api/v3/admin/customers/{customer_id}/addresses":{get:{summary:"List customer addresses",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the customer's saved addresses.\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., country, state). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., first_name,last_name,address1,city). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"addresses found",content:{"application/json":{}}}}},post:{summary:"Create a customer address",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Adds a new address to the customer's address book. Pass `is_default_billing: true` or `is_default_shipping: true` to set as the default \u2014 the previous default loses its flag in the same transaction.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}}],responses:{"201":{description:"address created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{first_name:{type:"string"},last_name:{type:"string"},address1:{type:"string"},address2:{type:"string"},city:{type:"string"},postal_code:{type:"string"},country_iso:{type:"string",description:"ISO-2 country code (e.g. US)"},state_abbr:{type:"string",description:"State/province abbreviation (e.g. NY)"},phone:{type:"string"},company:{type:"string"},label:{type:"string"},is_default_billing:{type:"boolean"},is_default_shipping:{type:"boolean"}}}}}}}},"/api/v3/admin/customers/{customer_id}/addresses/{id}":{patch:{summary:"Update a customer address",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Updates a customer address.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"address updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{city:{type:"string"},is_default_billing:{type:"boolean"},is_default_shipping:{type:"boolean"}}}}}}},delete:{summary:"Delete a customer address",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes the address. If it was a default, the customer loses that default (no auto-promotion).\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"address deleted"}}}},"/api/v3/admin/customers/{customer_id}/credit_cards":{get:{summary:"List customer credit cards",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the customer's saved credit cards. Useful for off-session admin charges via `POST /admin/orders/:id/payments { source_id }`.\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., payment_method). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., brand,last4,month,year). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"credit cards found",content:{"application/json":{}}}}}},"/api/v3/admin/customers/{customer_id}/credit_cards/{id}":{get:{summary:"Show a customer credit card",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a saved credit card by ID.\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., payment_method). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., brand,last4,month,year). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"credit card found",content:{"application/json":{}}}}},delete:{summary:"Delete a customer credit card",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes a saved credit card.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"credit card deleted"}}}},"/api/v3/admin/customers/{customer_id}/store_credits":{get:{summary:"List customer store credits",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns store credits issued to the customer.\n\n**Required scope:** `read_store_credits` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., category, store, created_by). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., amount,amount_used,memo,currency). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"store credits found",content:{"application/json":{}}}}},post:{summary:"Issue a store credit to a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"`created_by` is set automatically from the authenticated admin.\n\n**Required scope:** `write_store_credits` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}}],responses:{"201":{description:"store credit created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["amount","currency","category_id"],properties:{amount:{type:"string"},currency:{type:"string"},category_id:{type:"string",description:"StoreCreditCategory ID"},memo:{type:"string"}}}}}}}},"/api/v3/admin/customers/{customer_id}/store_credits/{id}":{patch:{summary:"Update a store credit",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Update memo / category / amount. The amount can only be changed if `amount_used == 0`.\n\n**Required scope:** `write_store_credits` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"store credit updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{amount:{type:"string"},category_id:{type:"string"},memo:{type:"string"}}}}}}},delete:{summary:"Delete a store credit",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes an unused store credit (amount_used == 0). Returns 422 otherwise.\n\n**Required scope:** `write_store_credits` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"store credit deleted"}}}},"/api/v3/admin/customers":{get:{summary:"List customers",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a paginated list of customers. Supports Ransack search/filters.\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,schema:{type:"integer"}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"q[search]",in:"query",required:!1,description:"Email + name full-text-ish search",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., addresses, store_credits). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., email,first_name,last_name). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"customers found",content:{"application/json":{}}}}},post:{summary:"Create a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Creates a customer. No welcome email is sent automatically.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"customer created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["email"],properties:{email:{type:"string"},first_name:{type:"string"},last_name:{type:"string"},phone:{type:"string"},accepts_email_marketing:{type:"boolean"},internal_note:{type:"string"},tags:{type:"array",items:{type:"string"}},metadata:{type:"object"}}}}}}}},"/api/v3/admin/customers/{id}":{get:{summary:"Show a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns full customer details including computed order stats (orders_count, total_spent, last_order_completed_at).\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Customer ID",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations: addresses, orders, store_credits, default_billing_address, default_shipping_address",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., email,first_name,last_name). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"customer found",content:{"application/json":{}}}}},patch:{summary:"Update a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Updates customer attributes. `tags` replaces the full set.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"customer updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{email:{type:"string"},first_name:{type:"string"},last_name:{type:"string"},phone:{type:"string"},accepts_email_marketing:{type:"boolean"},internal_note:{type:"string"},tags:{type:"array",items:{type:"string"}},metadata:{type:"object"}}}}}}},delete:{summary:"Delete a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes a customer. Returns 422 if the customer has any orders.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"customer deleted"}}}},"/api/v3/admin/customers/bulk_add_to_groups":{post:{summary:"Bulk-add customers to groups",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Attaches each customer in `ids` to every group in `customer_group_ids`.\nIdempotent \u2014 customers already in a group are skipped server-side.\nGroups from sibling stores are silently ignored. Returns counts of\ncustomers and groups that were processed (post store-scoping).\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"customers added to groups",content:{"application/json":{schema:{type:"object",properties:{customer_count:{type:"integer"},customer_group_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["ids","customer_group_ids"],properties:{ids:{type:"array",items:{type:"string"}},customer_group_ids:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/customers/bulk_remove_from_groups":{post:{summary:"Bulk-remove customers from groups",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Detaches each customer in `ids` from every group in `customer_group_ids`.\nNo-op for non-members. Groups from sibling stores are silently ignored.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"customers removed from groups",content:{"application/json":{schema:{type:"object",properties:{customer_count:{type:"integer"},customer_group_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["ids","customer_group_ids"],properties:{ids:{type:"array",items:{type:"string"}},customer_group_ids:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/customers/bulk_add_tags":{post:{summary:"Bulk-add tags to customers",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Adds each tag name in `tags` to every customer in `ids`. Tags are\nupserted by name; re-adding an existing tag is a no-op.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"tags added",content:{"application/json":{schema:{type:"object",properties:{customer_count:{type:"integer"},tag_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["ids","tags"],properties:{ids:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/customers/bulk_remove_tags":{post:{summary:"Bulk-remove tags from customers",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Removes each tag name in `tags` from every customer in `ids`. No-op\nfor customers that don't carry the tag.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"tags removed",content:{"application/json":{schema:{type:"object",properties:{customer_count:{type:"integer"},tag_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["ids","tags"],properties:{ids:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/exports":{get:{summary:"List exports",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns CSV exports queued or completed for the current store. Polled by the admin SPA to detect when an export finishes (`done: true`).\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"exports found",content:{"application/json":{}}}}},post:{summary:"Create an export",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:'Queues a CSV export. The `type` selects the dataset; `search_params` is an\noptional Ransack query (same shape used by the `q[...]` params on list endpoints)\nthat filters which records are exported. Pass `record_selection: "all"` to\nclear the filter server-side and export everything in scope.\n\nGeneration is asynchronous. Poll `GET /admin/exports/{id}` until `done` is `true`,\nthen redirect the browser to `download_url` to fetch the file.\n\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).',parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"export queued",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["type"],properties:{type:{type:"string",enum:["Spree::Exports::Products","Spree::Exports::Orders","Spree::Exports::Customers","Spree::Exports::ProductTranslations","Spree::Exports::GiftCards","Spree::Exports::CouponCodes","Spree::Exports::NewsletterSubscribers"]},record_selection:{type:"string",enum:["filtered","all"],description:'Set to "all" to ignore search_params and export everything in scope.'},search_params:{type:"object",description:"Ransack query hash. Same predicates accepted by the list endpoint.",additionalProperties:!0},results_url:{type:"string",description:"Absolute URL of your admin exports view; the export-done email uses it as the download button target. Only honored when it matches one of the store's configured allowed origins."}}}}}}}},"/api/v3/admin/exports/{id}":{get:{summary:"Show an export",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns export status. While `done` is `false`, the SPA continues polling.\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"export found",content:{"application/json":{}}}}},delete:{summary:"Delete an export",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:"Removes the export and purges its attachment.\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"export deleted"}}}},"/api/v3/admin/exports/{id}/download":{get:{summary:"Download an export",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:"Streams the exported CSV with `Content-Disposition: attachment`. Returns 422 with `code: export_not_ready` while `done` is still `false`. The endpoint is JWT/API-key protected, so SPA clients must fetch it (with `Authorization` header) and trigger the browser download via a Blob URL \u2014 a top-level navigation cannot carry the JWT.\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"CSV file",content:{"application/json":{},"text/csv":{schema:{type:"string",format:"binary"}}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments":{get:{summary:"List fulfillments",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Returns all shipments for an order.\n\n**Required scope:** `read_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., inventory_units, stock_location, shipping_rates). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., number,status,tracking,cost). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"fulfillments found",content:{"application/json":{}}}}},post:{summary:"Create a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Manually creates a fulfillment on a completed order, bypassing order routing \u2014 for example to mirror a shipment handled by an external carrier or 3PL. Moves the requested line item quantities out of their current fulfillments; when `items` is omitted, every not-yet-shipped unit is moved. Pass `status: 'shipped'` to register an already-shipped fulfillment (fires shipped webhooks and freezes cost/carrier). When `delivery_method_id` is omitted, the fulfillment inherits the delivery method and cost of the source fulfillment(s) it fully drains \u2014 keeping the order total unchanged; partially drained splits get no carrier when shipped, and pending fulfillments are otherwise (re)priced by the standard rate engine, which selects the lowest-cost available rate. Pass `cost` to set an explicit shipping cost instead (e.g. the 3PL price) \u2014 note this changes the order total and payment state, and is guaranteed to persist only with `status: 'shipped'` (pending fulfillments are re-priced by the rate engine).\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}}],responses:{"201":{description:"fulfillment created",content:{"application/json":{}}},"422":{description:"order not completed",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["stock_location_id"],properties:{stock_location_id:{type:"string",description:"Stock location the fulfillment ships from"},tracking:{type:"string",description:"Carrier tracking number, or a full https:// tracking link \u2014 a full URL is served back as tracking_url unchanged instead of being templated into the delivery method tracking URL"},delivery_method_id:{type:"string",description:"Delivery method (carrier) to attach as the selected rate. Defaults to the delivery method of the fully drained source fulfillment(s)"},cost:{type:"string",description:"Explicit shipping cost. Defaults to the summed cost of the fully drained source fulfillment(s), which keeps the order total unchanged; an explicit cost changes the order total and payment state. Guaranteed to persist only with status: 'shipped' \u2014 pending fulfillments are re-priced by the rate engine"},status:{type:"string",enum:["shipped"],description:"Pass 'shipped' to register the fulfillment as already shipped"},items:{type:"array",description:"Line item quantities to fulfill. Omit to fulfill every not-yet-shipped unit.",items:{type:"object",required:["item_id","quantity"],properties:{item_id:{type:"string",description:"Line item ID"},quantity:{type:"integer"}}}},metadata:{type:"object",additionalProperties:!0}}}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}":{get:{summary:"Show a shipment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Returns details of a specific shipment.\n\n**Required scope:** `read_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., inventory_units, stock_location, shipping_rates). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., number,status,tracking,cost). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"shipment found",content:{"application/json":{}}}}},patch:{summary:"Update a shipment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Updates a fulfillment (tracking, delivery rate).\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"shipment updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{tracking:{type:"string",description:"Carrier tracking number, or a full https:// tracking link served back as tracking_url unchanged"},selected_delivery_rate_id:{type:"string",description:"Delivery rate ID (dr_...) to select"}}}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}/fulfill":{patch:{summary:"Fulfill a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Marks a fulfillment as fulfilled.\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"fulfillment fulfilled",content:{"application/json":{}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}/cancel":{patch:{summary:"Cancel a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Cancels a fulfillment.\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"fulfillment canceled",content:{"application/json":{}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}/resume":{patch:{summary:"Resume a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Resumes a canceled fulfillment.\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"fulfillment resumed",content:{"application/json":{}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}/split":{patch:{summary:"Split a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Transfers items from this shipment to a new shipment at a different stock location.\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"fulfillment split",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["variant_id","quantity"],properties:{variant_id:{type:"string",description:"Variant ID"},quantity:{type:"integer"},stock_location_id:{type:"string",description:"Target stock location ID"}}}}}}}},"/api/v3/admin/gift_card_batches":{get:{summary:"List gift card batches",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the gift card batches issued by the current store. Each batch\ngroups the cards generated together for a campaign or bulk-issuance\n\u2014 the cards themselves live under `/admin/gift_cards` and reference\nthe batch via `gift_card_batch_id`.\n\n\n**Required scope:** `read_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Records per page",schema:{type:"integer"}},{name:"q[prefix_cont]",in:"query",required:!1,description:"Filter by prefix (contains)",schema:{type:"string"}},{name:"sort",in:"query",required:!1,description:"Sort by field. Prefix with `-` for descending.",schema:{type:"string"}}],responses:{"200":{description:"gift card batches found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/GiftCardBatch"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Create a gift card batch",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Issues a batch of gift cards in a single call. The server generates\n`codes_count` cards inline for small batches (configurable via\n`Spree.config.gift_card_batch_web_limit`, default 500) or enqueues\na background job for larger ones. Each card's code is the batch\n`prefix` followed by random hex.\n\n\n**Required scope:** `write_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"gift card batch created",content:{"application/json":{schema:{$ref:"#/components/schemas/GiftCardBatch"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["prefix","amount","codes_count"],properties:{prefix:{type:"string",description:"Lowercased and prepended to every generated code."},amount:{type:"string",description:"Decimal amount per card, greater than zero."},currency:{type:"string",description:"ISO 4217 currency code. Defaults to the store currency."},codes_count:{type:"integer",description:"Number of cards to generate. Capped at `gift_card_batch_limit`."},expires_at:{type:"string",nullable:!0}}}}}}}},"/api/v3/admin/gift_card_batches/{id}":{parameters:[{name:"id",in:"path",required:!0,description:"Gift card batch prefixed ID",schema:{type:"string"}}],get:{summary:"Get a gift card batch",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a single batch.\n\n**Required scope:** `read_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"gift card batch found",content:{"application/json":{schema:{$ref:"#/components/schemas/GiftCardBatch"}}}},"404":{description:"gift card batch not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}}},"/api/v3/admin/gift_cards":{get:{summary:"List gift cards",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the gift cards issued by the current store. Filter by\n`q[code_cont]` for code search, `q[user_id_eq]` for cards issued\nto a specific customer, or `q[state_eq]` for status filtering.\n\n\n**Required scope:** `read_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Number of records per page",schema:{type:"integer"}},{name:"q[code_cont]",in:"query",required:!1,description:"Filter by gift card code (contains)",schema:{type:"string"}},{name:"q[state_eq]",in:"query",required:!1,description:"Filter by status (active, redeemed, partially_redeemed, canceled)",schema:{type:"string"}},{name:"sort",in:"query",required:!1,description:"Sort by field. Prefix with `-` for descending (e.g., `-created_at`).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include. id is always included.",schema:{type:"string"}}],responses:{"200":{description:"gift cards found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/GiftCard"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}},"401":{description:"unauthorized",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},post:{summary:"Create a gift card",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Issues a gift card scoped to the current store. The code is\nauto-generated when omitted. `currency` defaults to the store's\nconfigured currency. Pass `user_id` (prefixed ID) to attach the\ncard to a specific customer.\n\n\n**Required scope:** `write_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"gift card created",content:{"application/json":{schema:{$ref:"#/components/schemas/GiftCard"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["amount"],properties:{amount:{type:"string",description:"Decimal amount, greater than zero."},currency:{type:"string",description:"ISO 4217 currency code. Defaults to the store currency."},code:{type:"string",description:"Optional caller-supplied code. Auto-generated when omitted."},expires_at:{type:"string",description:"ISO 8601 date.",nullable:!0},user_id:{type:"string",description:"Optional customer prefixed ID.",nullable:!0}}}}}}}},"/api/v3/admin/gift_cards/{id}":{parameters:[{name:"id",in:"path",required:!0,description:"Gift card prefixed ID",schema:{type:"string"}}],get:{summary:"Get a gift card",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a single gift card.\n\n**Required scope:** `read_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include. id is always included.",schema:{type:"string"}}],responses:{"200":{description:"gift card found",content:{"application/json":{schema:{$ref:"#/components/schemas/GiftCard"}}}},"404":{description:"gift card not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},patch:{summary:"Update a gift card",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:`Updates an active gift card's editable attributes. Redeemed or
261
+ **Required scope:** \`read_customers\` (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to embed. Supported: `customers`.",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include. id is always included.",schema:{type:"string"}}],responses:{"200":{description:"customer group with embedded customers",content:{"application/json":{schema:{$ref:"#/components/schemas/CustomerGroup"}}}},"404":{description:"customer group not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},patch:{summary:"Update a customer group",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:"Updates name, description, or membership. `customer_ids` is a\nfull-set replacement \u2014 the server reconciles the membership to\nmatch the array, adding new IDs and removing ones not present.\nSend `customer_ids: []` to clear all members.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"customer group updated",content:{"application/json":{schema:{$ref:"#/components/schemas/CustomerGroup"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},description:{type:"string",nullable:!0},customer_ids:{type:"array",items:{type:"string"}}}}}}}},delete:{summary:"Delete a customer group",tags:["Customer Groups"],security:[{api_key:[],bearer_auth:[]}],description:"Soft-deletes the group. Member users are not deleted; their `customer_group_users` rows are dropped.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"customer group deleted"}}}},"/api/v3/admin/customers/{customer_id}/addresses":{get:{summary:"List customer addresses",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the customer's saved addresses.\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., country, state). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., first_name,last_name,address1,city). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"addresses found",content:{"application/json":{}}}}},post:{summary:"Create a customer address",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Adds a new address to the customer's address book. Pass `is_default_billing: true` or `is_default_shipping: true` to set as the default \u2014 the previous default loses its flag in the same transaction.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}}],responses:{"201":{description:"address created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{first_name:{type:"string"},last_name:{type:"string"},address1:{type:"string"},address2:{type:"string"},city:{type:"string"},postal_code:{type:"string"},country_iso:{type:"string",description:"ISO-2 country code (e.g. US)"},state_abbr:{type:"string",description:"State/province abbreviation (e.g. NY)"},phone:{type:"string"},company:{type:"string"},label:{type:"string"},is_default_billing:{type:"boolean"},is_default_shipping:{type:"boolean"}}}}}}}},"/api/v3/admin/customers/{customer_id}/addresses/{id}":{patch:{summary:"Update a customer address",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Updates a customer address.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"address updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{city:{type:"string"},is_default_billing:{type:"boolean"},is_default_shipping:{type:"boolean"}}}}}}},delete:{summary:"Delete a customer address",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes the address. If it was a default, the customer loses that default (no auto-promotion).\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"address deleted"}}}},"/api/v3/admin/customers/{customer_id}/credit_cards":{get:{summary:"List customer credit cards",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the customer's saved credit cards. Useful for off-session admin charges via `POST /admin/orders/:id/payments { source_id }`.\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., payment_method). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., brand,last4,month,year). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"credit cards found",content:{"application/json":{}}}}}},"/api/v3/admin/customers/{customer_id}/credit_cards/{id}":{get:{summary:"Show a customer credit card",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a saved credit card by ID.\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., payment_method). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., brand,last4,month,year). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"credit card found",content:{"application/json":{}}}}},delete:{summary:"Delete a customer credit card",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes a saved credit card.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"credit card deleted"}}}},"/api/v3/admin/customers/{customer_id}/store_credits":{get:{summary:"List customer store credits",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns store credits issued to the customer.\n\n**Required scope:** `read_store_credits` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., category, store, created_by). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., amount,amount_used,memo,currency). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"store credits found",content:{"application/json":{}}}}},post:{summary:"Issue a store credit to a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"`created_by` is set automatically from the authenticated admin.\n\n**Required scope:** `write_store_credits` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}}],responses:{"201":{description:"store credit created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["amount","currency","category_id"],properties:{amount:{type:"string"},currency:{type:"string"},category_id:{type:"string",description:"StoreCreditCategory ID"},memo:{type:"string"}}}}}}}},"/api/v3/admin/customers/{customer_id}/store_credits/{id}":{patch:{summary:"Update a store credit",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Update memo / category / amount. The amount can only be changed if `amount_used == 0`.\n\n**Required scope:** `write_store_credits` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"store credit updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{amount:{type:"string"},category_id:{type:"string"},memo:{type:"string"}}}}}}},delete:{summary:"Delete a store credit",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes an unused store credit (amount_used == 0). Returns 422 otherwise.\n\n**Required scope:** `write_store_credits` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"customer_id",in:"path",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"store credit deleted"}}}},"/api/v3/admin/customers":{get:{summary:"List customers",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a paginated list of customers. Supports Ransack search/filters.\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,schema:{type:"integer"}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"q[search]",in:"query",required:!1,description:"Email + name full-text-ish search",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., addresses, store_credits). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., email,first_name,last_name). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"customers found",content:{"application/json":{}}}}},post:{summary:"Create a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Creates a customer. No welcome email is sent automatically.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"customer created",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["email"],properties:{email:{type:"string"},first_name:{type:"string"},last_name:{type:"string"},phone:{type:"string"},accepts_email_marketing:{type:"boolean"},internal_note:{type:"string"},tags:{type:"array",items:{type:"string"}},metadata:{type:"object"}}}}}}}},"/api/v3/admin/customers/{id}":{get:{summary:"Show a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Returns full customer details including computed order stats (orders_count, total_spent, last_order_completed_at).\n\n**Required scope:** `read_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Customer ID",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations: addresses, orders, store_credits, default_billing_address, default_shipping_address",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., email,first_name,last_name). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"customer found",content:{"application/json":{}}}}},patch:{summary:"Update a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Updates customer attributes. `tags` replaces the full set.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"customer updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{email:{type:"string"},first_name:{type:"string"},last_name:{type:"string"},phone:{type:"string"},accepts_email_marketing:{type:"boolean"},internal_note:{type:"string"},tags:{type:"array",items:{type:"string"}},metadata:{type:"object"}}}}}}},delete:{summary:"Delete a customer",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Deletes a customer. Returns 422 if the customer has any orders.\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"customer deleted"}}}},"/api/v3/admin/customers/bulk_add_to_groups":{post:{summary:"Bulk-add customers to groups",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Attaches each customer in `ids` to every group in `customer_group_ids`.\nIdempotent \u2014 customers already in a group are skipped server-side.\nGroups from sibling stores are silently ignored. Returns counts of\ncustomers and groups that were processed (post store-scoping).\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"customers added to groups",content:{"application/json":{schema:{type:"object",properties:{customer_count:{type:"integer"},customer_group_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["ids","customer_group_ids"],properties:{ids:{type:"array",items:{type:"string"}},customer_group_ids:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/customers/bulk_remove_from_groups":{post:{summary:"Bulk-remove customers from groups",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Detaches each customer in `ids` from every group in `customer_group_ids`.\nNo-op for non-members. Groups from sibling stores are silently ignored.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"customers removed from groups",content:{"application/json":{schema:{type:"object",properties:{customer_count:{type:"integer"},customer_group_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["ids","customer_group_ids"],properties:{ids:{type:"array",items:{type:"string"}},customer_group_ids:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/customers/bulk_add_tags":{post:{summary:"Bulk-add tags to customers",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Adds each tag name in `tags` to every customer in `ids`. Tags are\nupserted by name; re-adding an existing tag is a no-op.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"tags added",content:{"application/json":{schema:{type:"object",properties:{customer_count:{type:"integer"},tag_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["ids","tags"],properties:{ids:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/customers/bulk_remove_tags":{post:{summary:"Bulk-remove tags from customers",tags:["Customers"],security:[{api_key:[],bearer_auth:[]}],description:"Removes each tag name in `tags` from every customer in `ids`. No-op\nfor customers that don't carry the tag.\n\n\n**Required scope:** `write_customers` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"tags removed",content:{"application/json":{schema:{type:"object",properties:{customer_count:{type:"integer"},tag_count:{type:"integer"}}}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["ids","tags"],properties:{ids:{type:"array",items:{type:"string"}},tags:{type:"array",items:{type:"string"}}}}}}}}},"/api/v3/admin/exports":{get:{summary:"List exports",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns CSV exports queued or completed for the current store. Polled by the admin SPA to detect when an export finishes (`done: true`).\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"exports found",content:{"application/json":{}}}}},post:{summary:"Create an export",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:'Queues a CSV export. The `type` selects the dataset; `search_params` is an\noptional Ransack query (same shape used by the `q[...]` params on list endpoints)\nthat filters which records are exported. Pass `record_selection: "all"` to\nclear the filter server-side and export everything in scope.\n\nGeneration is asynchronous. Poll `GET /admin/exports/{id}` until `done` is `true`,\nthen redirect the browser to `download_url` to fetch the file.\n\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).',parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"export queued",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["type"],properties:{type:{type:"string",enum:["products","orders","customers","product_translations","gift_cards","coupon_codes","newsletter_subscribers"]},record_selection:{type:"string",enum:["filtered","all"],description:'Set to "all" to ignore search_params and export everything in scope.'},search_params:{type:"object",description:"Ransack query hash. Same predicates accepted by the list endpoint.",additionalProperties:!0},results_url:{type:"string",description:"Absolute URL of your admin exports view; the export-done email uses it as the download button target. Only honored when it matches one of the store's configured allowed origins."}}}}}}}},"/api/v3/admin/exports/{id}":{get:{summary:"Show an export",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns export status. While `done` is `false`, the SPA continues polling.\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"export found",content:{"application/json":{}}}}},delete:{summary:"Delete an export",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:"Removes the export and purges its attachment.\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"export deleted"}}}},"/api/v3/admin/exports/{id}/download":{get:{summary:"Download an export",tags:["Exports"],security:[{api_key:[],bearer_auth:[]}],description:"Streams the exported CSV with `Content-Disposition: attachment`. Returns 422 with `code: export_not_ready` while `done` is still `false`. The endpoint is JWT/API-key protected, so SPA clients must fetch it (with `Authorization` header) and trigger the browser download via a Blob URL \u2014 a top-level navigation cannot carry the JWT.\n\n**Required scope:** the read scope of the exported resource \u2014 `read_products` for product exports, `read_customers` for customer exports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"CSV file",content:{"application/json":{},"text/csv":{schema:{type:"string",format:"binary"}}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments":{get:{summary:"List fulfillments",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Returns all shipments for an order.\n\n**Required scope:** `read_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., inventory_units, stock_location, shipping_rates). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., number,status,tracking,cost). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"fulfillments found",content:{"application/json":{}}}}},post:{summary:"Create a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Manually creates a fulfillment on a completed order, bypassing order routing \u2014 for example to mirror a shipment handled by an external carrier or 3PL. Moves the requested line item quantities out of their current fulfillments; when `items` is omitted, every not-yet-shipped unit is moved. Pass `status: 'shipped'` to register an already-shipped fulfillment (fires shipped webhooks and freezes cost/carrier). When `delivery_method_id` is omitted, the fulfillment inherits the delivery method and cost of the source fulfillment(s) it fully drains \u2014 keeping the order total unchanged; partially drained splits get no carrier when shipped, and pending fulfillments are otherwise (re)priced by the standard rate engine, which selects the lowest-cost available rate. Pass `cost` to set an explicit shipping cost instead (e.g. the 3PL price) \u2014 note this changes the order total and payment state, and is guaranteed to persist only with `status: 'shipped'` (pending fulfillments are re-priced by the rate engine).\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}}],responses:{"201":{description:"fulfillment created",content:{"application/json":{}}},"422":{description:"order not completed",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["stock_location_id"],properties:{stock_location_id:{type:"string",description:"Stock location the fulfillment ships from"},tracking:{type:"string",description:"Carrier tracking number, or a full https:// tracking link \u2014 a full URL is served back as tracking_url unchanged instead of being templated into the delivery method tracking URL"},delivery_method_id:{type:"string",description:"Delivery method (carrier) to attach as the selected rate. Defaults to the delivery method of the fully drained source fulfillment(s)"},cost:{type:"string",description:"Explicit shipping cost. Defaults to the summed cost of the fully drained source fulfillment(s), which keeps the order total unchanged; an explicit cost changes the order total and payment state. Guaranteed to persist only with status: 'shipped' \u2014 pending fulfillments are re-priced by the rate engine"},status:{type:"string",enum:["shipped"],description:"Pass 'shipped' to register the fulfillment as already shipped"},items:{type:"array",description:"Line item quantities to fulfill. Omit to fulfill every not-yet-shipped unit.",items:{type:"object",required:["item_id","quantity"],properties:{item_id:{type:"string",description:"Line item ID"},quantity:{type:"integer"}}}},metadata:{type:"object",additionalProperties:!0}}}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}":{get:{summary:"Show a shipment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Returns details of a specific shipment.\n\n**Required scope:** `read_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., inventory_units, stock_location, shipping_rates). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., number,status,tracking,cost). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"shipment found",content:{"application/json":{}}}}},patch:{summary:"Update a shipment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Updates a fulfillment (tracking, delivery rate).\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"shipment updated",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{tracking:{type:"string",description:"Carrier tracking number, or a full https:// tracking link served back as tracking_url unchanged"},selected_delivery_rate_id:{type:"string",description:"Delivery rate ID (dr_...) to select"}}}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}/fulfill":{patch:{summary:"Fulfill a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Marks a fulfillment as fulfilled.\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"fulfillment fulfilled",content:{"application/json":{}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}/cancel":{patch:{summary:"Cancel a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Cancels a fulfillment.\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"fulfillment canceled",content:{"application/json":{}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}/resume":{patch:{summary:"Resume a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Resumes a canceled fulfillment.\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"fulfillment resumed",content:{"application/json":{}}}}}},"/api/v3/admin/orders/{order_id}/fulfillments/{id}/split":{patch:{summary:"Split a fulfillment",tags:["Fulfillments"],security:[{api_key:[],bearer_auth:[]}],description:"Transfers items from this shipment to a new shipment at a different stock location.\n\n**Required scope:** `write_fulfillments` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"order_id",in:"path",required:!0,description:"Order ID",schema:{type:"string"}},{name:"id",in:"path",required:!0,description:"Fulfillment ID",schema:{type:"string"}}],responses:{"200":{description:"fulfillment split",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["variant_id","quantity"],properties:{variant_id:{type:"string",description:"Variant ID"},quantity:{type:"integer"},stock_location_id:{type:"string",description:"Target stock location ID"}}}}}}}},"/api/v3/admin/gift_card_batches":{get:{summary:"List gift card batches",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the gift card batches issued by the current store. Each batch\ngroups the cards generated together for a campaign or bulk-issuance\n\u2014 the cards themselves live under `/admin/gift_cards` and reference\nthe batch via `gift_card_batch_id`.\n\n\n**Required scope:** `read_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Records per page",schema:{type:"integer"}},{name:"q[prefix_cont]",in:"query",required:!1,description:"Filter by prefix (contains)",schema:{type:"string"}},{name:"sort",in:"query",required:!1,description:"Sort by field. Prefix with `-` for descending.",schema:{type:"string"}}],responses:{"200":{description:"gift card batches found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/GiftCardBatch"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Create a gift card batch",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Issues a batch of gift cards in a single call. The server generates\n`codes_count` cards inline for small batches (configurable via\n`Spree.config.gift_card_batch_web_limit`, default 500) or enqueues\na background job for larger ones. Each card's code is the batch\n`prefix` followed by random hex.\n\n\n**Required scope:** `write_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"gift card batch created",content:{"application/json":{schema:{$ref:"#/components/schemas/GiftCardBatch"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["prefix","amount","codes_count"],properties:{prefix:{type:"string",description:"Lowercased and prepended to every generated code."},amount:{type:"string",description:"Decimal amount per card, greater than zero."},currency:{type:"string",description:"ISO 4217 currency code. Defaults to the store currency."},codes_count:{type:"integer",description:"Number of cards to generate. Capped at `gift_card_batch_limit`."},expires_at:{type:"string",nullable:!0}}}}}}}},"/api/v3/admin/gift_card_batches/{id}":{parameters:[{name:"id",in:"path",required:!0,description:"Gift card batch prefixed ID",schema:{type:"string"}}],get:{summary:"Get a gift card batch",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a single batch.\n\n**Required scope:** `read_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"gift card batch found",content:{"application/json":{schema:{$ref:"#/components/schemas/GiftCardBatch"}}}},"404":{description:"gift card batch not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}}},"/api/v3/admin/gift_cards":{get:{summary:"List gift cards",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the gift cards issued by the current store. Filter by\n`q[code_cont]` for code search, `q[user_id_eq]` for cards issued\nto a specific customer, or `q[state_eq]` for status filtering.\n\n\n**Required scope:** `read_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Number of records per page",schema:{type:"integer"}},{name:"q[code_cont]",in:"query",required:!1,description:"Filter by gift card code (contains)",schema:{type:"string"}},{name:"q[state_eq]",in:"query",required:!1,description:"Filter by status (active, redeemed, partially_redeemed, canceled)",schema:{type:"string"}},{name:"sort",in:"query",required:!1,description:"Sort by field. Prefix with `-` for descending (e.g., `-created_at`).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include. id is always included.",schema:{type:"string"}}],responses:{"200":{description:"gift cards found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/GiftCard"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}},"401":{description:"unauthorized",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},post:{summary:"Create a gift card",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Issues a gift card scoped to the current store. The code is\nauto-generated when omitted. `currency` defaults to the store's\nconfigured currency. Pass `user_id` (prefixed ID) to attach the\ncard to a specific customer.\n\n\n**Required scope:** `write_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"gift card created",content:{"application/json":{schema:{$ref:"#/components/schemas/GiftCard"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["amount"],properties:{amount:{type:"string",description:"Decimal amount, greater than zero."},currency:{type:"string",description:"ISO 4217 currency code. Defaults to the store currency."},code:{type:"string",description:"Optional caller-supplied code. Auto-generated when omitted."},expires_at:{type:"string",description:"ISO 8601 date.",nullable:!0},user_id:{type:"string",description:"Optional customer prefixed ID.",nullable:!0}}}}}}}},"/api/v3/admin/gift_cards/{id}":{parameters:[{name:"id",in:"path",required:!0,description:"Gift card prefixed ID",schema:{type:"string"}}],get:{summary:"Get a gift card",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a single gift card.\n\n**Required scope:** `read_gift_cards` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include. id is always included.",schema:{type:"string"}}],responses:{"200":{description:"gift card found",content:{"application/json":{schema:{$ref:"#/components/schemas/GiftCard"}}}},"404":{description:"gift card not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},patch:{summary:"Update a gift card",tags:["Gift Cards"],security:[{api_key:[],bearer_auth:[]}],description:`Updates an active gift card's editable attributes. Redeemed or
262
262
  partially-redeemed cards cannot be edited.
263
263
 
264
264
 
@@ -266,7 +266,7 @@ partially-redeemed cards cannot be edited.
266
266
  partially redeemed cannot be deleted and return 422.
267
267
 
268
268
 
269
- **Required scope:** \`write_gift_cards\` (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"gift card deleted"},"422":{description:"redeemed gift card cannot be deleted",content:{"application/json":{}}}}}},"/api/v3/admin/imports":{get:{summary:"List imports",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns CSV imports queued or completed for the current store.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"imports found",content:{"application/json":{}}}}},post:{summary:"Create an import",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Queues a CSV import. Upload the file first via `POST /api/v3/admin/direct_uploads`\nand pass the returned `signed_id` as `attachment`. On success the import is in the\n`mapping` state and the response carries the mapping payload: `schema_fields`\n(the canonical columns for the type), `csv_headers`, a `sample_row`, and the\nauto-assigned `mappings`.\n\nAdjust mappings if needed, then call `PATCH /admin/imports/{id}/complete_mapping`\nto start processing. Poll `GET /admin/imports/{id}` while `status` is\n`completed_mapping`/`processing`; terminal statuses are `completed` and `failed`.\n\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"import created in mapping state",content:{"application/json":{}}},"422":{description:"unknown import type",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["type","attachment"],properties:{type:{type:"string",enum:["Spree::Imports::Products","Spree::Imports::Customers","Spree::Imports::ProductTranslations"]},attachment:{type:"string",description:"ActiveStorage signed blob id from POST /api/v3/admin/direct_uploads."},preferred_delimiter:{type:"string",enum:[",",";","|"," "],description:"CSV column separator. Defaults to a comma."},results_url:{type:"string",description:"Absolute URL of your admin imports view; the import-done email links back to it with `?import=<id>` appended. Only honored when it matches one of the store's configured allowed origins."}}}}}}}},"/api/v3/admin/imports/template":{get:{summary:"Download an import template",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a CSV header row for the given import type, including the custom field columns available for the model.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"type",in:"query",required:!0,description:"Registered import type, e.g. Spree::Imports::Products.",schema:{type:"string"}}],responses:{"200":{description:"CSV template",content:{"application/json":{},"text/csv":{schema:{type:"string",format:"binary"}}}}}}},"/api/v3/admin/imports/{id}":{get:{summary:"Show an import",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns import status and row counters. The admin dashboard polls this endpoint while `status` is `completed_mapping` or `processing`; `rows_count`, `completed_rows_count` and `failed_rows_count` drive the progress bar. The mapping payload (`csv_headers`, `sample_row`) is only present while `status` is `mapping`.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"import found",content:{"application/json":{}}}}},delete:{summary:"Delete an import",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Removes the import, its rows and the uploaded file. Returns 422 while the import is being processed.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"import deleted"}}}},"/api/v3/admin/imports/{id}/download":{get:{summary:"Download the originally uploaded file",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Streams the CSV exactly as it was uploaded \u2014 the audit trail for what was imported. JWT/API-key protected; SPA clients fetch it with the Authorization header and trigger the browser download via a Blob URL.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"CSV file",content:{"application/json":{},"text/csv":{schema:{type:"string",format:"binary"}}}}}}},"/api/v3/admin/imports/{id}/complete_mapping":{patch:{summary:"Complete mapping and start processing",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Applies the submitted column mappings, then starts row processing. Omit `mappings`\nto accept the auto-assigned ones from the create response. Returns 422 when a\nrequired schema field is left unmapped (`details.missing_required_fields`) or a\nfile column is assigned twice.\n\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"mapping completed, processing queued",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{mappings:{type:"array",description:"Column assignments to apply before starting. `file_column: null` unmaps a field.",items:{type:"object",required:["schema_field"],properties:{schema_field:{type:"string"},file_column:{type:"string",nullable:!0}}}}}}}}}}},"/api/v3/admin/imports/{id}/retry_failed_rows":{patch:{summary:"Retry failed rows",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Re-processes the rows that failed. The import re-enters `processing`; poll `GET /admin/imports/{id}` until it completes again. Returns 422 when the import is not `completed` or has no failed rows.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"retry queued",content:{"application/json":{}}}}}},"/api/v3/admin/imports/{import_id}/rows":{get:{summary:"List import rows",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Paginated rows of an import \u2014 the failure report. Filter with `q[status_eq]=failed` to list only rows that could not be imported; each row carries the raw CSV `data` and its `validation_errors`.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"import_id",in:"path",required:!0,schema:{type:"string"}},{name:"q[status_eq]",in:"query",required:!1,description:"Filter rows by status: pending, processing, completed, failed.",schema:{type:"string"}}],responses:{"200":{description:"rows found",content:{"application/json":{}}}}}},"/api/v3/admin/markets":{get:{summary:"List markets",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the markets configured for the current store. Markets are\nstore-scoped and ordered by `position` (an `acts_as_list` column \u2014\nupdate the order via `PATCH /markets/{id}` with `position`).\n\n\n**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"page",in:"query",required:!1,schema:{type:"integer"}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"q[name_cont]",in:"query",required:!1,schema:{type:"string"}},{name:"sort",in:"query",required:!1,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to embed. Supported: `countries`.",schema:{type:"string"}}],responses:{"200":{description:"markets found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/Market"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Create a market",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:'Creates a new market for the current store.\n\n- `country_isos` accepts 2-letter ISO country codes (e.g. `["DE", "FR"]`);\n the market must contain at least one country. Unknown codes are\n silently dropped.\n- `supported_locales` accepts an array of locale codes; the\n `default_locale` is always implicitly included.\n- Setting `default: true` automatically demotes the previous default\n market in the store.\n\n\n**Required scope:** `write_settings` (for API-key authentication).',parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"market created",content:{"application/json":{schema:{$ref:"#/components/schemas/Market"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},currency:{type:"string",description:"ISO 4217 currency code."},default_locale:{type:"string",description:"IETF locale tag used as the market default."},supported_locales:{type:"array",items:{type:"string"},description:"Locale codes available in this market. The default is always implicitly included."},tax_inclusive:{type:"boolean",default:!1,description:"Display prices with tax included."},default:{type:"boolean",default:!1,description:"Setting to true demotes the previous default."},position:{type:"integer",description:"Sort order within the store; lower = first."},country_isos:{type:"array",items:{type:"string"},description:"2-letter ISO country codes assigned to this market. At least one is required."}},required:["name","currency","default_locale","country_isos"]}}}}}},"/api/v3/admin/markets/{id}":{parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}],get:{summary:"Get a market",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,schema:{type:"string"}}],responses:{"200":{description:"market found",content:{"application/json":{schema:{$ref:"#/components/schemas/Market"}}}},"404":{description:"market not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},patch:{summary:"Update a market",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:"Updates an existing market. Pass `country_isos` to replace the\nmarket's country list (full-set update), `supported_locales` to\nreplace the supported locales, or `position` to reorder the market\nwithin the store.\n\nSetting `default: true` automatically demotes the previous default.\n\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"market updated",content:{"application/json":{schema:{$ref:"#/components/schemas/Market"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},currency:{type:"string"},default_locale:{type:"string"},supported_locales:{type:"array",items:{type:"string"}},tax_inclusive:{type:"boolean"},default:{type:"boolean"},position:{type:"integer"},country_isos:{type:"array",items:{type:"string"}}}}}}}},delete:{summary:"Delete a market",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:"Soft-deletes the market (sets `deleted_at`). The default market and\nthe last remaining market in a store cannot be deleted \u2014 both return\n422 with a `validation_error`.\n\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"market deleted"},"422":{description:"cannot delete default or last market",content:{"application/json":{}}}}}},"/api/v3/admin/option_types":{get:{summary:"List option types",tags:["Option Types"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a paginated list of option types.\n\n**Required scope:** `read_products` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Number of records per page",schema:{type:"integer"}},{name:"q[name_cont]",in:"query",required:!1,description:"Filter by name (contains)",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., option_values). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., name,label,position). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"option types found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/OptionType"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}},"401":{description:"unauthorized",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},post:{summary:"Create an option type",tags:["Option Types"],security:[{api_key:[],bearer_auth:[]}],description:`Creates a new option type. Supports nested option values.
269
+ **Required scope:** \`write_gift_cards\` (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"gift card deleted"},"422":{description:"redeemed gift card cannot be deleted",content:{"application/json":{}}}}}},"/api/v3/admin/imports":{get:{summary:"List imports",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns CSV imports queued or completed for the current store.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"imports found",content:{"application/json":{}}}}},post:{summary:"Create an import",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Queues a CSV import. Upload the file first via `POST /api/v3/admin/direct_uploads`\nand pass the returned `signed_id` as `attachment`. On success the import is in the\n`mapping` state and the response carries the mapping payload: `schema_fields`\n(the canonical columns for the type), `csv_headers`, a `sample_row`, and the\nauto-assigned `mappings`.\n\nAdjust mappings if needed, then call `PATCH /admin/imports/{id}/complete_mapping`\nto start processing. Poll `GET /admin/imports/{id}` while `status` is\n`completed_mapping`/`processing`; terminal statuses are `completed` and `failed`.\n\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"import created in mapping state",content:{"application/json":{}}},"422":{description:"unknown import type",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",required:["type","attachment"],properties:{type:{type:"string",enum:["products","customers","product_translations"]},attachment:{type:"string",description:"ActiveStorage signed blob id from POST /api/v3/admin/direct_uploads."},preferred_delimiter:{type:"string",enum:[",",";","|"," "],description:"CSV column separator. Defaults to a comma."},results_url:{type:"string",description:"Absolute URL of your admin imports view; the import-done email links back to it with `?import=<id>` appended. Only honored when it matches one of the store's configured allowed origins."}}}}}}}},"/api/v3/admin/imports/template":{get:{summary:"Download an import template",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a CSV header row for the given import type, including the custom field columns available for the model.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"type",in:"query",required:!0,description:"Registered import type, e.g. products.",schema:{type:"string"}}],responses:{"200":{description:"CSV template",content:{"application/json":{},"text/csv":{schema:{type:"string",format:"binary"}}}}}}},"/api/v3/admin/imports/example":{get:{summary:"Download an example import file",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Redirects to a populated example CSV for the given import type \u2014 the same sample data `rake spree:load_sample_data` uses, pinned to the installed Spree version. Returns 404 for a type that ships no example file.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"type",in:"query",required:!0,description:"Registered import type, e.g. products.",schema:{type:"string"}}],responses:{"302":{description:"Redirect to the example CSV"}}}},"/api/v3/admin/imports/{id}":{get:{summary:"Show an import",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Returns import status and row counters. The admin dashboard polls this endpoint while `status` is `completed_mapping` or `processing`; `rows_count`, `completed_rows_count` and `failed_rows_count` drive the progress bar. The mapping payload (`csv_headers`, `sample_row`) is only present while `status` is `mapping`.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"import found",content:{"application/json":{}}}}},delete:{summary:"Delete an import",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Removes the import, its rows and the uploaded file. Returns 422 while the import is being processed.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"204":{description:"import deleted"}}}},"/api/v3/admin/imports/{id}/download":{get:{summary:"Download the originally uploaded file",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Streams the CSV exactly as it was uploaded \u2014 the audit trail for what was imported. JWT/API-key protected; SPA clients fetch it with the Authorization header and trigger the browser download via a Blob URL.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"CSV file",content:{"application/json":{},"text/csv":{schema:{type:"string",format:"binary"}}}}}}},"/api/v3/admin/imports/{id}/complete_mapping":{patch:{summary:"Complete mapping and start processing",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Applies the submitted column mappings, then starts row processing. Omit `mappings`\nto accept the auto-assigned ones from the create response. Returns 422 when a\nrequired schema field is left unmapped (`details.missing_required_fields`) or a\nfile column is assigned twice.\n\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"mapping completed, processing queued",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{mappings:{type:"array",description:"Column assignments to apply before starting. `file_column: null` unmaps a field.",items:{type:"object",required:["schema_field"],properties:{schema_field:{type:"string"},file_column:{type:"string",nullable:!0}}}}}}}}}}},"/api/v3/admin/imports/{id}/retry_failed_rows":{patch:{summary:"Retry failed rows",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Re-processes the rows that failed. The import re-enters `processing`; poll `GET /admin/imports/{id}` until it completes again. Returns 422 when the import is not `completed` or has no failed rows.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"id",in:"path",required:!0,schema:{type:"string"}}],responses:{"200":{description:"retry queued",content:{"application/json":{}}}}}},"/api/v3/admin/imports/{import_id}/rows":{get:{summary:"List import rows",tags:["Imports"],security:[{api_key:[],bearer_auth:[]}],description:"Paginated rows of an import \u2014 the failure report. Filter with `q[status_eq]=failed` to list only rows that could not be imported; each row carries the raw CSV `data` and its `validation_errors`.\n\n**Required scope:** the write scope of the imported resource \u2014 `write_products` for product imports, `write_customers` for customer imports, etc. (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"import_id",in:"path",required:!0,schema:{type:"string"}},{name:"q[status_eq]",in:"query",required:!1,description:"Filter rows by status: pending, processing, completed, failed.",schema:{type:"string"}}],responses:{"200":{description:"rows found",content:{"application/json":{}}}}}},"/api/v3/admin/markets":{get:{summary:"List markets",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:"Returns the markets configured for the current store. Markets are\nstore-scoped and ordered by `position` (an `acts_as_list` column \u2014\nupdate the order via `PATCH /markets/{id}` with `position`).\n\n\n**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"page",in:"query",required:!1,schema:{type:"integer"}},{name:"limit",in:"query",required:!1,schema:{type:"integer"}},{name:"q[name_cont]",in:"query",required:!1,schema:{type:"string"}},{name:"sort",in:"query",required:!1,schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to embed. Supported: `countries`.",schema:{type:"string"}}],responses:{"200":{description:"markets found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/Market"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}}}},post:{summary:"Create a market",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:'Creates a new market for the current store.\n\n- `country_isos` accepts 2-letter ISO country codes (e.g. `["DE", "FR"]`);\n the market must contain at least one country. Unknown codes are\n silently dropped.\n- `supported_locales` accepts an array of locale codes; the\n `default_locale` is always implicitly included.\n- Setting `default: true` automatically demotes the previous default\n market in the store.\n\n\n**Required scope:** `write_settings` (for API-key authentication).',parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"201":{description:"market created",content:{"application/json":{schema:{$ref:"#/components/schemas/Market"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},currency:{type:"string",description:"ISO 4217 currency code."},default_locale:{type:"string",description:"IETF locale tag used as the market default."},supported_locales:{type:"array",items:{type:"string"},description:"Locale codes available in this market. The default is always implicitly included."},tax_inclusive:{type:"boolean",default:!1,description:"Display prices with tax included."},default:{type:"boolean",default:!1,description:"Setting to true demotes the previous default."},position:{type:"integer",description:"Sort order within the store; lower = first."},country_isos:{type:"array",items:{type:"string"},description:"2-letter ISO country codes assigned to this market. At least one is required."}},required:["name","currency","default_locale","country_isos"]}}}}}},"/api/v3/admin/markets/{id}":{parameters:[{name:"id",in:"path",required:!0,schema:{type:"string"}}],get:{summary:"Get a market",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:"**Required scope:** `read_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}},{name:"expand",in:"query",required:!1,schema:{type:"string"}}],responses:{"200":{description:"market found",content:{"application/json":{schema:{$ref:"#/components/schemas/Market"}}}},"404":{description:"market not found",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},patch:{summary:"Update a market",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:"Updates an existing market. Pass `country_isos` to replace the\nmarket's country list (full-set update), `supported_locales` to\nreplace the supported locales, or `position` to reorder the market\nwithin the store.\n\nSetting `default: true` automatically demotes the previous default.\n\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"200":{description:"market updated",content:{"application/json":{schema:{$ref:"#/components/schemas/Market"}}}},"422":{description:"validation error",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{name:{type:"string"},currency:{type:"string"},default_locale:{type:"string"},supported_locales:{type:"array",items:{type:"string"}},tax_inclusive:{type:"boolean"},default:{type:"boolean"},position:{type:"integer"},country_isos:{type:"array",items:{type:"string"}}}}}}}},delete:{summary:"Delete a market",tags:["Markets"],security:[{api_key:[],bearer_auth:[]}],description:"Soft-deletes the market (sets `deleted_at`). The default market and\nthe last remaining market in a store cannot be deleted \u2014 both return\n422 with a `validation_error`.\n\n\n**Required scope:** `write_settings` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,schema:{type:"string"}}],responses:{"204":{description:"market deleted"},"422":{description:"cannot delete default or last market",content:{"application/json":{}}}}}},"/api/v3/admin/option_types":{get:{summary:"List option types",tags:["Option Types"],security:[{api_key:[],bearer_auth:[]}],description:"Returns a paginated list of option types.\n\n**Required scope:** `read_products` (for API-key authentication).",parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}},{name:"page",in:"query",required:!1,description:"Page number",schema:{type:"integer"}},{name:"limit",in:"query",required:!1,description:"Number of records per page",schema:{type:"integer"}},{name:"q[name_cont]",in:"query",required:!1,description:"Filter by name (contains)",schema:{type:"string"}},{name:"expand",in:"query",required:!1,description:"Comma-separated associations to expand (e.g., option_values). Use dot notation for nested expand (max 4 levels).",schema:{type:"string"}},{name:"fields",in:"query",required:!1,description:"Comma-separated list of fields to include (e.g., name,label,position). id is always included.",schema:{type:"string"}}],responses:{"200":{description:"option types found",content:{"application/json":{schema:{type:"object",properties:{data:{type:"array",items:{$ref:"#/components/schemas/OptionType"}},meta:{$ref:"#/components/schemas/PaginationMeta"}},required:["data","meta"]}}}},"401":{description:"unauthorized",content:{"application/json":{schema:{$ref:"#/components/schemas/ErrorResponse"}}}}}},post:{summary:"Create an option type",tags:["Option Types"],security:[{api_key:[],bearer_auth:[]}],description:`Creates a new option type. Supports nested option values.
270
270
 
271
271
  Option values can be provided inline and will be created or updated by name.
272
272
 
@@ -357,24 +357,24 @@ accepts Spree's payloads.
357
357
  repeated delivery failures), no notification email is sent.
358
358
 
359
359
 
360
- **Required scope:** \`write_webhooks\` (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}}],responses:{"200":{description:"webhook endpoint disabled",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{reason:{type:"string"}}}}}}}}},components:{schemas:{PaginationMeta:{type:"object",properties:{page:{type:"integer"},limit:{type:"integer"},count:{type:"integer",description:"Total number of records"},pages:{type:"integer",description:"Total number of pages"},from:{type:"integer",description:"Index of first record on this page"},to:{type:"integer",description:"Index of last record on this page"},in:{type:"integer",description:"Number of records on this page"},previous:{type:"integer",nullable:!0,description:"Previous page number"},next:{type:"integer",nullable:!0,description:"Next page number"}},required:["page","limit","count","pages","from","to","in"]},ErrorResponse:{type:"object",properties:{error:{type:"object",properties:{code:{type:"string"},message:{type:"string"},details:{type:"object",description:"Field-specific validation errors",nullable:!0}},required:["code","message"]}},required:["error"]},AuthResponse:{type:"object",properties:{token:{type:"string",description:"JWT access token"},user:{$ref:"#/components/schemas/AdminUser"}},required:["token","user"]},PermissionRule:{type:"object",description:"A single permission rule (CanCanCan rule). Rules are applied in order, last-matching-wins.",properties:{allow:{type:"boolean",description:"true for `can`, false for `cannot`"},actions:{type:"array",items:{type:"string"},description:'Action names, e.g. ["read", "update"] or ["manage"]'},subjects:{type:"array",items:{type:"string"},description:'Subject class names, e.g. ["Spree::Product"] or ["all"]'},has_conditions:{type:"boolean",description:"True if the server-side rule has per-record conditions. The SPA shows the action optimistically and handles 403 from the API."}},required:["allow","actions","subjects","has_conditions"]},MeResponse:{type:"object",description:"Current admin user profile and serialized permissions",properties:{user:{$ref:"#/components/schemas/AdminUser"},permissions:{type:"array",items:{$ref:"#/components/schemas/PermissionRule"}}},required:["user","permissions"]},ImportSchemaField:{type:"object",description:"A canonical column of an import type, including per-store custom field columns",properties:{name:{type:"string",description:"Canonical field name used in mappings"},label:{type:"string",description:"Human-readable label"},required:{type:"boolean",description:"Whether the field must be mapped before processing"}},required:["name","label","required"]},CheckoutRequirement:{type:"object",properties:{step:{type:"string",description:"Checkout step this requirement belongs to"},field:{type:"string",description:"Field that needs to be satisfied"},message:{type:"string",description:"Human-readable requirement message"}},required:["step","field","message"]},CartWarning:{type:"object",description:"A warning about a cart issue (e.g., item removed due to stock change)",properties:{code:{type:"string",description:"Machine-readable warning code"},message:{type:"string",description:"Human-readable warning message"},line_item_id:{type:"string",nullable:!0,description:"Prefixed line item ID (when applicable)"},variant_id:{type:"string",nullable:!0,description:"Prefixed variant ID (when applicable)"}},required:["code","message"]},FulfillmentManifestItem:{type:"object",description:"An item within a fulfillment \u2014 which line item and how many units are in this fulfillment",properties:{item_id:{type:"string",description:"Line item ID"},variant_id:{type:"string",description:"Variant ID"},quantity:{type:"integer",description:"Quantity in this fulfillment"}},required:["item_id","variant_id","quantity"]},AdminUserRoleAssignment:{type:"object",description:"A role assignment for the current store on a staff member",properties:{id:{type:"string",description:"Prefixed role ID"},name:{type:"string",description:"Role name"}},required:["id","name"]},PreferenceField:{type:"object",description:"A single configurable preference on a payment method, promotion rule/action, or calculator. The frontend uses `type` + `default` to render a sensible input.",properties:{key:{type:"string"},type:{type:"string",description:"string | text | password | integer | decimal | boolean | array | hash"},default:{description:"Default value (any JSON type), null when there is no default",nullable:!0}},required:["key","type"]},PromotionActionCalculator:{type:"object",description:"The action's nested calculator (when the action carries one \u2014 null for actions like `free_shipping`)",properties:{type:{type:"string",description:"Wire shorthand for the calculator subclass"},label:{type:"string"},preferences:{type:"object",additionalProperties:!0},preference_schema:{type:"array",items:{$ref:"#/components/schemas/PreferenceField"}}},required:["type","label","preferences","preference_schema"]},PromotionActionLineItem:{type:"object",description:"One row in a `create_line_items` action \u2014 the variant added to the order and how many",properties:{variant_id:{type:"string"},quantity:{type:"integer"}},required:["variant_id","quantity"]},Address:{type:"object",properties:{id:{type:"string"},first_name:{type:"string",nullable:!0},last_name:{type:"string",nullable:!0},full_name:{type:"string"},address1:{type:"string",nullable:!0},address2:{type:"string",nullable:!0},postal_code:{type:"string",nullable:!0},city:{type:"string",nullable:!0},phone:{type:"string",nullable:!0},company:{type:"string",nullable:!0},country_name:{type:"string"},country_iso:{type:"string"},state_text:{type:"string",nullable:!0},state_abbr:{type:"string",nullable:!0},quick_checkout:{type:"boolean"},is_default_billing:{type:"boolean"},is_default_shipping:{type:"boolean"},state_name:{type:"string",nullable:!0},label:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},customer_id:{type:"string",nullable:!0}},required:["id","first_name","last_name","full_name","address1","address2","postal_code","city","phone","company","country_name","country_iso","state_text","state_abbr","quick_checkout","is_default_billing","is_default_shipping","state_name","label","metadata","created_at","updated_at","customer_id"],"x-typelizer":!0},Adjustment:{type:"object",properties:{id:{type:"string"},label:{type:"string"},display_amount:{type:"string"},included:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"},amount:{type:"string"},order_id:{type:"string",nullable:!0}},required:["id","label","display_amount","included","created_at","updated_at","amount","order_id"],"x-typelizer":!0},AdminUser:{type:"object",properties:{id:{type:"string"},email:{type:"string"},first_name:{type:"string",nullable:!0},last_name:{type:"string",nullable:!0},full_name:{type:"string",nullable:!0},selected_locale:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},avatar_url:{type:"string",nullable:!0},roles:{type:"array",items:{$ref:"#/components/schemas/AdminUserRoleAssignment"}}},required:["id","email","first_name","last_name","full_name","selected_locale","created_at","updated_at","avatar_url","roles"],"x-typelizer":!0},AllowedOrigin:{type:"object",properties:{id:{type:"string"},origin:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","origin","created_at","updated_at"],"x-typelizer":!0},ApiKey:{type:"object",properties:{id:{type:"string"},name:{type:"string"},key_type:{type:"string"},token_prefix:{type:"string",nullable:!0},scopes:{type:"array",items:{type:"string"}},created_at:{type:"string"},updated_at:{type:"string"},revoked_at:{type:"string",nullable:!0},last_used_at:{type:"string",nullable:!0},channel_id:{type:"string",nullable:!0},plaintext_token:{type:"string",nullable:!0},created_by_email:{type:"string",nullable:!0}},required:["id","name","key_type","token_prefix","scopes","created_at","updated_at","revoked_at","last_used_at","channel_id","plaintext_token","created_by_email"],"x-typelizer":!0},Category:{type:"object",properties:{id:{type:"string"},name:{type:"string"},permalink:{type:"string"},position:{type:"number"},depth:{type:"number"},meta_title:{type:"string",nullable:!0},meta_description:{type:"string",nullable:!0},meta_keywords:{type:"string",nullable:!0},children_count:{type:"number"},parent_id:{type:"string",nullable:!0},description:{type:"string"},description_html:{type:"string"},image_url:{type:"string",nullable:!0},square_image_url:{type:"string",nullable:!0},is_root:{type:"boolean"},is_child:{type:"boolean"},is_leaf:{type:"boolean"},parent:{$ref:"#/components/schemas/Category"},children:{type:"array",items:{$ref:"#/components/schemas/Category"}},ancestors:{type:"array",items:{$ref:"#/components/schemas/Category"}},custom_fields:{type:"array",items:{$ref:"#/components/schemas/CustomField"}},translations:{type:"object"},metadata:{type:"object"},pretty_name:{type:"string"},lft:{type:"number"},rgt:{type:"number"},products_count:{type:"number"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","permalink","position","depth","meta_title","meta_description","meta_keywords","children_count","parent_id","description","description_html","image_url","square_image_url","is_root","is_child","is_leaf","metadata","pretty_name","lft","rgt","products_count","created_at","updated_at"],"x-typelizer":!0},Channel:{type:"object",properties:{id:{type:"string"},name:{type:"string"},code:{type:"string"},active:{type:"boolean"},default:{type:"boolean"},storefront_access:{type:"string"},guest_checkout:{type:"boolean"},preferred_order_routing_strategy:{type:"string",nullable:!0},preferred_storefront_access:{type:"string",nullable:!0},preferred_guest_checkout:{type:"boolean",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","code","active","default","storefront_access","guest_checkout","preferred_order_routing_strategy","preferred_storefront_access","preferred_guest_checkout","created_at","updated_at"],"x-typelizer":!0},Country:{type:"object",properties:{iso:{type:"string"},iso3:{type:"string"},name:{type:"string"},states_required:{type:"boolean"},zipcode_required:{type:"boolean"},states:{type:"array",items:{$ref:"#/components/schemas/State"}},market:{allOf:[{$ref:"#/components/schemas/Market"}],nullable:!0},created_at:{type:"string"},updated_at:{type:"string"}},required:["iso","iso3","name","states_required","zipcode_required","created_at","updated_at"],"x-typelizer":!0},CouponCode:{type:"object",properties:{id:{type:"string"},code:{type:"string"},state:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},promotion_id:{type:"string"},order_id:{type:"string",nullable:!0}},required:["id","code","state","created_at","updated_at","promotion_id","order_id"],"x-typelizer":!0},CreditCard:{type:"object",properties:{id:{type:"string"},brand:{type:"string"},last4:{type:"string"},month:{type:"number"},year:{type:"number"},name:{type:"string",nullable:!0},default:{type:"boolean"},gateway_payment_profile_id:{type:"string",nullable:!0},customer_id:{type:"string",nullable:!0},payment_method_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","brand","last4","month","year","name","default","gateway_payment_profile_id","customer_id","payment_method_id","metadata","created_at","updated_at"],"x-typelizer":!0},CustomFieldDefinition:{type:"object",properties:{id:{type:"string"},namespace:{type:"string"},key:{type:"string"},label:{type:"string"},field_type:{type:"string",enum:["short_text","long_text","rich_text","number","boolean","json"]},resource_type:{type:"string"},storefront_visible:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","namespace","key","label","field_type","resource_type","storefront_visible","created_at","updated_at"],"x-typelizer":!0},CustomField:{type:"object",properties:{id:{type:"string"},label:{type:"string"},type:{type:"string",deprecated:!0},field_type:{type:"string",enum:["short_text","long_text","rich_text","number","boolean","json"]},key:{type:"string"},value:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},storefront_visible:{type:"boolean"},custom_field_definition_id:{type:"string"}},required:["id","label","type","field_type","key","value","created_at","updated_at","storefront_visible","custom_field_definition_id"],"x-typelizer":!0},CustomerGroup:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},customers_count:{type:"number"},created_at:{type:"string"},updated_at:{type:"string"},customers:{type:"array",items:{$ref:"#/components/schemas/Customer"}}},required:["id","name","description","customers_count","created_at","updated_at"],"x-typelizer":!0},Customer:{type:"object",properties:{id:{type:"string"},email:{type:"string"},first_name:{type:"string",nullable:!0},last_name:{type:"string",nullable:!0},phone:{type:"string",nullable:!0},accepts_email_marketing:{type:"boolean"},full_name:{type:"string"},available_store_credit_total:{type:"string"},display_available_store_credit_total:{type:"string"},addresses:{type:"array",items:{$ref:"#/components/schemas/Address"}},default_billing_address:{allOf:[{$ref:"#/components/schemas/Address"}],nullable:!0},default_shipping_address:{allOf:[{$ref:"#/components/schemas/Address"}],nullable:!0},newsletter_subscriber:{allOf:[{$ref:"#/components/schemas/NewsletterSubscriber"}],nullable:!0},customer_groups:{type:"array",items:{$ref:"#/components/schemas/CustomerGroup"}},login:{type:"string",nullable:!0},metadata:{type:"object"},last_sign_in_at:{type:"string",nullable:!0},current_sign_in_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},sign_in_count:{type:"number"},failed_attempts:{type:"number"},last_sign_in_ip:{type:"string",nullable:!0},current_sign_in_ip:{type:"string",nullable:!0},tags:{type:"array",items:{type:"string"}},internal_note_html:{type:"string",nullable:!0},default_billing_address_id:{type:"string",nullable:!0},default_shipping_address_id:{type:"string",nullable:!0},orders_count:{type:"number"},total_spent:{type:"string"},display_total_spent:{type:"string"},last_order_completed_at:{type:"string",nullable:!0},orders:{type:"array",items:{$ref:"#/components/schemas/Order"}},store_credits:{type:"array",items:{$ref:"#/components/schemas/StoreCredit"}},customer_group_ids:{type:"array",items:{type:"string"}}},required:["id","email","first_name","last_name","phone","accepts_email_marketing","full_name","available_store_credit_total","display_available_store_credit_total","login","metadata","last_sign_in_at","current_sign_in_at","created_at","updated_at","sign_in_count","failed_attempts","last_sign_in_ip","current_sign_in_ip","tags","internal_note_html","default_billing_address_id","default_shipping_address_id","orders_count","total_spent","display_total_spent","last_order_completed_at","customer_group_ids"],"x-typelizer":!0},DeliveryMethod:{type:"object",properties:{id:{type:"string"},name:{type:"string"},code:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","code","created_at","updated_at"],"x-typelizer":!0},DeliveryRate:{type:"object",properties:{id:{type:"string"},delivery_method_id:{type:"string"},name:{type:"string"},selected:{type:"boolean"},cost:{type:"string"},total:{type:"string"},additional_tax_total:{type:"string"},included_tax_total:{type:"string"},tax_total:{type:"string"},display_cost:{type:"string"},display_total:{type:"string"},display_additional_tax_total:{type:"string"},display_included_tax_total:{type:"string"},display_tax_total:{type:"string"},delivery_method:{$ref:"#/components/schemas/DeliveryMethod"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","delivery_method_id","name","selected","cost","total","additional_tax_total","included_tax_total","tax_total","display_cost","display_total","display_additional_tax_total","display_included_tax_total","display_tax_total","created_at","updated_at"],"x-typelizer":!0},DigitalLink:{type:"object",properties:{id:{type:"string"},access_counter:{type:"number"},filename:{type:"string"},content_type:{type:"string"},download_url:{type:"string"},authorizable:{type:"boolean"},expired:{type:"boolean"},access_limit_exceeded:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","access_counter","filename","content_type","download_url","authorizable","expired","access_limit_exceeded","created_at","updated_at"],"x-typelizer":!0},Discount:{type:"object",properties:{id:{type:"string"},promotion_id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},code:{type:"string",nullable:!0},amount:{type:"string"},display_amount:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","promotion_id","name","description","code","amount","display_amount","created_at","updated_at"],"x-typelizer":!0},Export:{type:"object",properties:{id:{type:"string"},number:{type:"string"},type:{type:"string",nullable:!0},format:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},user_id:{type:"string",nullable:!0},done:{type:"boolean"},filename:{type:"string",nullable:!0},byte_size:{type:"number",nullable:!0},download_url:{type:"string",nullable:!0}},required:["id","number","type","format","created_at","updated_at","user_id","done","filename","byte_size","download_url"],"x-typelizer":!0},Fulfillment:{type:"object",properties:{id:{type:"string"},number:{type:"string"},tracking:{type:"string",nullable:!0},tracking_url:{type:"string",nullable:!0},cost:{type:"string"},display_cost:{type:"string"},total:{type:"string"},display_total:{type:"string"},discount_total:{type:"string"},display_discount_total:{type:"string"},additional_tax_total:{type:"string"},display_additional_tax_total:{type:"string"},included_tax_total:{type:"string"},display_included_tax_total:{type:"string"},tax_total:{type:"string"},display_tax_total:{type:"string"},status:{type:"string"},fulfillment_type:{type:"string"},fulfilled_at:{type:"string",nullable:!0},items:{type:"array",items:{$ref:"#/components/schemas/FulfillmentManifestItem"}},delivery_method:{$ref:"#/components/schemas/DeliveryMethod"},stock_location:{$ref:"#/components/schemas/StockLocation"},delivery_rates:{type:"array",items:{$ref:"#/components/schemas/DeliveryRate"}},metadata:{type:"object"},adjustment_total:{type:"string"},pre_tax_amount:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},order_id:{type:"string",nullable:!0},stock_location_id:{type:"string",nullable:!0},order:{$ref:"#/components/schemas/Order"},adjustments:{type:"array",items:{$ref:"#/components/schemas/Adjustment"}}},required:["id","number","tracking","tracking_url","cost","display_cost","total","display_total","discount_total","display_discount_total","additional_tax_total","display_additional_tax_total","included_tax_total","display_included_tax_total","tax_total","display_tax_total","status","fulfillment_type","fulfilled_at","items","metadata","adjustment_total","pre_tax_amount","created_at","updated_at","order_id","stock_location_id"],"x-typelizer":!0},GiftCardBatch:{type:"object",properties:{id:{type:"string"},codes_count:{type:"number"},currency:{type:"string",nullable:!0},prefix:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},amount:{type:"string",nullable:!0},expires_at:{type:"string",nullable:!0},created_by_id:{type:"string",nullable:!0}},required:["id","codes_count","currency","prefix","created_at","updated_at","amount","expires_at","created_by_id"],"x-typelizer":!0},GiftCard:{type:"object",properties:{id:{type:"string"},code:{type:"string"},status:{type:"string"},currency:{type:"string"},amount:{type:"string"},amount_used:{type:"string"},amount_authorized:{type:"string"},amount_remaining:{type:"string"},display_amount:{type:"string"},display_amount_used:{type:"string"},display_amount_remaining:{type:"string"},expires_at:{type:"string",nullable:!0},redeemed_at:{type:"string",nullable:!0},expired:{type:"boolean"},active:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"},customer_id:{type:"string",nullable:!0},created_by_id:{type:"string",nullable:!0},customer:{$ref:"#/components/schemas/Customer"},created_by:{$ref:"#/components/schemas/AdminUser"},gift_card_batch:{$ref:"#/components/schemas/GiftCardBatch"},orders:{type:"array",items:{$ref:"#/components/schemas/Order"}}},required:["id","code","status","currency","amount","amount_used","amount_authorized","amount_remaining","display_amount","display_amount_used","display_amount_remaining","expires_at","redeemed_at","expired","active","created_at","updated_at","customer_id","created_by_id"],"x-typelizer":!0},ImportMapping:{type:"object",properties:{id:{type:"string"},schema_field:{type:"string"},file_column:{type:"string",nullable:!0},required:{type:"boolean"}},required:["id","schema_field","file_column","required"],"x-typelizer":!0},ImportRow:{type:"object",properties:{id:{type:"string"},row_number:{type:"number"},status:{type:"string"},validation_errors:{type:"string",nullable:!0},item_type:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},import_id:{type:"string",nullable:!0},item_id:{type:"string",nullable:!0},data:{type:"object"}},required:["id","row_number","status","validation_errors","item_type","created_at","updated_at","import_id","item_id","data"],"x-typelizer":!0},Import:{type:"object",properties:{id:{type:"string"},number:{type:"string"},type:{type:"string",nullable:!0},rows_count:{type:"number"},created_at:{type:"string"},updated_at:{type:"string"},status:{type:"string"},owner_type:{type:"string",nullable:!0},owner_id:{type:"string",nullable:!0},user_id:{type:"string",nullable:!0},processing_errors:{type:"string",nullable:!0},preferred_delimiter:{type:"string"},original_filename:{type:"string",nullable:!0},original_byte_size:{type:"number",nullable:!0},original_file_url:{type:"string",nullable:!0},completed_rows_count:{type:"number"},failed_rows_count:{type:"number"},schema_fields:{type:"array",items:{$ref:"#/components/schemas/ImportSchemaField"}},csv_headers:{type:"array",items:{type:"string"}},sample_row:{type:"object"},mappings:{type:"array",items:{$ref:"#/components/schemas/ImportMapping"}}},required:["id","number","type","rows_count","created_at","updated_at","status","owner_type","owner_id","user_id","processing_errors","preferred_delimiter","original_filename","original_byte_size","original_file_url","completed_rows_count","failed_rows_count","schema_fields","csv_headers","sample_row","mappings"],"x-typelizer":!0},Invitation:{type:"object",properties:{id:{type:"string"},email:{type:"string"},status:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},expires_at:{type:"string"},role_id:{type:"string"},role_name:{type:"string"},inviter_email:{type:"string"},acceptance_url:{type:"string"},invitee_exists:{type:"boolean"},store:{type:"object"}},required:["id","email","status","created_at","updated_at","expires_at","role_id","role_name","inviter_email","acceptance_url","invitee_exists","store"],"x-typelizer":!0},LineItem:{type:"object",properties:{id:{type:"string"},variant_id:{type:"string"},preorder:{type:"boolean"},preorder_ships_at:{type:"string",nullable:!0},quantity:{type:"number"},currency:{type:"string"},name:{type:"string"},slug:{type:"string"},options_text:{type:"string"},price:{type:"string"},display_price:{type:"string"},total:{type:"string"},display_total:{type:"string"},adjustment_total:{type:"string"},display_adjustment_total:{type:"string"},additional_tax_total:{type:"string"},display_additional_tax_total:{type:"string"},included_tax_total:{type:"string"},display_included_tax_total:{type:"string"},discount_total:{type:"string"},display_discount_total:{type:"string"},pre_tax_amount:{type:"string"},display_pre_tax_amount:{type:"string"},discounted_amount:{type:"string"},display_discounted_amount:{type:"string"},display_compare_at_amount:{type:"string",nullable:!0},compare_at_amount:{type:"string",nullable:!0},thumbnail_url:{type:"string",nullable:!0},option_values:{type:"array",items:{$ref:"#/components/schemas/OptionValue"}},digital_links:{type:"array",items:{$ref:"#/components/schemas/DigitalLink"}},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},cost_price:{type:"string",nullable:!0},tax_category_id:{type:"string",nullable:!0},variant:{$ref:"#/components/schemas/Variant"},tax_category:{$ref:"#/components/schemas/TaxCategory"},adjustments:{type:"array",items:{$ref:"#/components/schemas/Adjustment"}}},required:["id","variant_id","preorder","preorder_ships_at","quantity","currency","name","slug","options_text","price","display_price","total","display_total","adjustment_total","display_adjustment_total","additional_tax_total","display_additional_tax_total","included_tax_total","display_included_tax_total","discount_total","display_discount_total","pre_tax_amount","display_pre_tax_amount","discounted_amount","display_discounted_amount","display_compare_at_amount","compare_at_amount","thumbnail_url","option_values","digital_links","metadata","created_at","updated_at","cost_price","tax_category_id"],"x-typelizer":!0},Market:{type:"object",properties:{id:{type:"string"},name:{type:"string"},currency:{type:"string"},default_locale:{type:"string"},tax_inclusive:{type:"boolean"},default:{type:"boolean"},country_isos:{type:"array",items:{type:"string"}},supported_locales:{type:"array",items:{type:"string"}},countries:{type:"array",items:{$ref:"#/components/schemas/Country"}},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","currency","default_locale","tax_inclusive","default","country_isos","supported_locales","created_at","updated_at"],"x-typelizer":!0},Media:{type:"object",properties:{id:{type:"string"},product_id:{type:"string",nullable:!0},variant_ids:{type:"array",items:{type:"string"}},position:{type:"number"},alt:{type:"string",nullable:!0},media_type:{type:"string"},focal_point_x:{type:"number",nullable:!0},focal_point_y:{type:"number",nullable:!0},external_video_url:{type:"string",nullable:!0},original_url:{type:"string",nullable:!0},mini_url:{type:"string",nullable:!0},small_url:{type:"string",nullable:!0},medium_url:{type:"string",nullable:!0},large_url:{type:"string",nullable:!0},xlarge_url:{type:"string",nullable:!0},og_image_url:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},viewable_id:{type:"string"},download_url:{type:"string",nullable:!0},metadata:{type:"object"},viewable_type:{type:"string"}},required:["id","product_id","variant_ids","position","alt","media_type","focal_point_x","focal_point_y","external_video_url","original_url","mini_url","small_url","medium_url","large_url","xlarge_url","og_image_url","created_at","updated_at","viewable_id","download_url","metadata","viewable_type"],"x-typelizer":!0},NewsletterSubscriber:{type:"object",properties:{id:{type:"string"},email:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},verified:{type:"boolean"},verified_at:{type:"string",nullable:!0},customer_id:{type:"string",nullable:!0}},required:["id","email","created_at","updated_at","verified","verified_at","customer_id"],"x-typelizer":!0},OptionType:{type:"object",properties:{id:{type:"string"},name:{type:"string"},label:{type:"string"},position:{type:"number"},kind:{type:"string"},translations:{type:"object"},metadata:{type:"object"},filterable:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"},option_values:{type:"array",items:{$ref:"#/components/schemas/OptionValue"}}},required:["id","name","label","position","kind","metadata","filterable","created_at","updated_at"],"x-typelizer":!0},OptionValue:{type:"object",properties:{id:{type:"string"},option_type_id:{type:"string"},name:{type:"string"},label:{type:"string"},position:{type:"number"},color_code:{type:"string",nullable:!0},option_type_name:{type:"string"},option_type_label:{type:"string"},image_url:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},option_type:{$ref:"#/components/schemas/OptionType"}},required:["id","option_type_id","name","label","position","color_code","option_type_name","option_type_label","image_url","metadata","created_at","updated_at"],"x-typelizer":!0},OrderRoutingRule:{type:"object",properties:{id:{type:"string"},position:{type:"number"},active:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string"},channel_id:{type:"string"},preferences:{type:"object"},preference_schema:{type:"object"},label:{type:"string"},description:{type:"string"}},required:["id","position","active","created_at","updated_at","type","channel_id","preferences","preference_schema","label","description"],"x-typelizer":!0},Order:{type:"object",properties:{id:{type:"string"},market_id:{type:"string",nullable:!0},channel_id:{type:"string",nullable:!0},number:{type:"string"},email:{type:"string"},customer_note:{type:"string",nullable:!0},currency:{type:"string"},locale:{type:"string",nullable:!0},total_quantity:{type:"number"},fulfillment_status:{type:"string",nullable:!0},payment_status:{type:"string",nullable:!0},completed_at:{type:"string",nullable:!0},item_total:{type:"string"},display_item_total:{type:"string"},adjustment_total:{type:"string"},display_adjustment_total:{type:"string"},discount_total:{type:"string"},display_discount_total:{type:"string"},tax_total:{type:"string"},display_tax_total:{type:"string"},included_tax_total:{type:"string"},display_included_tax_total:{type:"string"},additional_tax_total:{type:"string"},display_additional_tax_total:{type:"string"},total:{type:"string"},display_total:{type:"string"},gift_card_total:{type:"string"},display_gift_card_total:{type:"string"},amount_due:{type:"string"},display_amount_due:{type:"string"},delivery_total:{type:"string"},display_delivery_total:{type:"string"},store_credit_total:{type:"string"},display_store_credit_total:{type:"string"},covered_by_store_credit:{type:"boolean"},discounts:{type:"array",items:{$ref:"#/components/schemas/Discount"}},items:{type:"array",items:{$ref:"#/components/schemas/LineItem"}},fulfillments:{type:"array",items:{$ref:"#/components/schemas/Fulfillment"}},payments:{type:"array",items:{$ref:"#/components/schemas/Payment"}},billing_address:{allOf:[{$ref:"#/components/schemas/Address"}],nullable:!0},shipping_address:{allOf:[{$ref:"#/components/schemas/Address"}],nullable:!0},gift_card:{allOf:[{$ref:"#/components/schemas/GiftCard"}],nullable:!0},market:{allOf:[{$ref:"#/components/schemas/Market"}],nullable:!0},status:{type:"string"},last_ip_address:{type:"string",nullable:!0},considered_risky:{type:"boolean"},confirmation_delivered:{type:"boolean"},store_owner_notification_delivered:{type:"boolean"},payment_total:{type:"string"},display_payment_total:{type:"string"},metadata:{type:"object"},canceled_at:{type:"string",nullable:!0},approved_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},preferred_stock_location_id:{type:"string",nullable:!0},tags:{type:"array",items:{type:"string"}},internal_note:{type:"string",nullable:!0},approver_id:{type:"string",nullable:!0},canceler_id:{type:"string",nullable:!0},created_by_id:{type:"string",nullable:!0},customer_id:{type:"string",nullable:!0},channel:{$ref:"#/components/schemas/Channel"},preferred_stock_location:{$ref:"#/components/schemas/StockLocation"},payment_methods:{type:"array",items:{$ref:"#/components/schemas/PaymentMethod"}},customer:{$ref:"#/components/schemas/Customer"},approver:{$ref:"#/components/schemas/Customer"},canceler:{$ref:"#/components/schemas/Customer"},created_by:{$ref:"#/components/schemas/Customer"},adjustments:{type:"array",items:{$ref:"#/components/schemas/Adjustment"}},return_authorizations:{type:"array",items:{$ref:"#/components/schemas/ReturnAuthorization"}},reimbursements:{type:"array",items:{$ref:"#/components/schemas/Reimbursement"}}},required:["id","market_id","channel_id","number","email","customer_note","currency","locale","total_quantity","fulfillment_status","payment_status","completed_at","item_total","display_item_total","adjustment_total","display_adjustment_total","discount_total","display_discount_total","tax_total","display_tax_total","included_tax_total","display_included_tax_total","additional_tax_total","display_additional_tax_total","total","display_total","gift_card_total","display_gift_card_total","amount_due","display_amount_due","delivery_total","display_delivery_total","store_credit_total","display_store_credit_total","covered_by_store_credit","gift_card","market","status","last_ip_address","considered_risky","confirmation_delivered","store_owner_notification_delivered","payment_total","display_payment_total","metadata","canceled_at","approved_at","created_at","updated_at","preferred_stock_location_id","tags","internal_note","approver_id","canceler_id","created_by_id","customer_id"],"x-typelizer":!0},PaymentMethod:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},type:{type:"string"},session_required:{type:"boolean"},source_required:{type:"boolean"},metadata:{type:"object"},active:{type:"boolean"},auto_capture:{type:"boolean",nullable:!0},storefront_visible:{type:"boolean"},position:{type:"number"},created_at:{type:"string"},updated_at:{type:"string"},preferences:{type:"object"},preference_schema:{type:"object"}},required:["id","name","description","type","session_required","source_required","metadata","active","auto_capture","storefront_visible","position","created_at","updated_at","preferences","preference_schema"],"x-typelizer":!0},Payment:{type:"object",properties:{id:{type:"string"},payment_method_id:{type:"string"},response_code:{type:"string",nullable:!0},number:{type:"string"},amount:{type:"string"},display_amount:{type:"string"},status:{type:"string"},source_type:{type:"string",nullable:!0,enum:["credit_card","store_credit","payment_source"]},source_id:{type:"string",nullable:!0},source:{anyOf:[{$ref:"#/components/schemas/CreditCard"},{$ref:"#/components/schemas/StoreCredit"},{$ref:"#/components/schemas/PaymentSource"}],nullable:!0},payment_method:{$ref:"#/components/schemas/PaymentMethod"},metadata:{type:"object"},avs_response:{type:"string",nullable:!0},cvv_response_code:{type:"string",nullable:!0},cvv_response_message:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},captured_amount:{type:"string"},order_id:{type:"string",nullable:!0},order:{$ref:"#/components/schemas/Order"},refunds:{type:"array",items:{$ref:"#/components/schemas/Refund"}}},required:["id","payment_method_id","response_code","number","amount","display_amount","status","source_type","source_id","source","metadata","avs_response","cvv_response_code","cvv_response_message","created_at","updated_at","captured_amount","order_id"],"x-typelizer":!0},PaymentSource:{type:"object",properties:{id:{type:"string"},gateway_payment_profile_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","gateway_payment_profile_id","metadata","created_at","updated_at"],"x-typelizer":!0},PriceHistory:{type:"object",properties:{id:{type:"string"},amount:{type:"string"},amount_in_cents:{type:"number"},currency:{type:"string"},display_amount:{type:"string"},recorded_at:{type:"string"},variant_id:{type:"string"},price_id:{type:"string"},compare_at_amount:{type:"string",nullable:!0},created_at:{type:"string"}},required:["id","amount","amount_in_cents","currency","display_amount","recorded_at","variant_id","price_id","compare_at_amount","created_at"],"x-typelizer":!0},PriceList:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},status:{type:"string"},position:{type:"number"},match_policy:{type:"string"},starts_at:{type:"string",nullable:!0},ends_at:{type:"string",nullable:!0},deleted_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},currently_active:{type:"boolean"},products_count:{type:"number"},prices_count:{type:"number"},product_ids:{type:"array",items:{type:"string"}},price_rules:{type:"array",items:{$ref:"#/components/schemas/PriceRule"}}},required:["id","name","description","status","position","match_policy","starts_at","ends_at","deleted_at","created_at","updated_at","currently_active","products_count","prices_count","product_ids"],"x-typelizer":!0},PriceRule:{type:"object",properties:{id:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string"},price_list_id:{type:"string"},preferences:{type:"object"},preference_schema:{type:"array",items:{$ref:"#/components/schemas/PreferenceField"}},label:{type:"string"},description:{type:"string",nullable:!0},markets:{type:"array",items:{$ref:"#/components/schemas/Market"}},customer_groups:{type:"array",items:{$ref:"#/components/schemas/CustomerGroup"}},channels:{type:"array",items:{$ref:"#/components/schemas/Channel"}},customers:{type:"array",items:{$ref:"#/components/schemas/Customer"}}},required:["id","created_at","updated_at","type","price_list_id","preferences","preference_schema","label","description"],"x-typelizer":!0},Price:{type:"object",properties:{id:{type:"string"},amount:{type:"string",nullable:!0},amount_in_cents:{type:"number",nullable:!0},compare_at_amount:{type:"string",nullable:!0},compare_at_amount_in_cents:{type:"number",nullable:!0},currency:{type:"string",nullable:!0},display_amount:{type:"string",nullable:!0},display_compare_at_amount:{type:"string",nullable:!0},price_list_id:{type:"string",nullable:!0},variant_id:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},variant:{$ref:"#/components/schemas/Variant"}},required:["id","amount","amount_in_cents","compare_at_amount","compare_at_amount_in_cents","currency","display_amount","display_compare_at_amount","price_list_id","variant_id","created_at","updated_at"],"x-typelizer":!0},ProductPublication:{type:"object",properties:{id:{type:"string"},published_at:{type:"string",nullable:!0},unpublished_at:{type:"string",nullable:!0},product_id:{type:"string"},channel_id:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","published_at","unpublished_at","product_id","channel_id","created_at","updated_at"],"x-typelizer":!0},Product:{type:"object",properties:{id:{type:"string"},name:{type:"string"},slug:{type:"string"},meta_title:{type:"string",nullable:!0},meta_description:{type:"string",nullable:!0},meta_keywords:{type:"string",nullable:!0},variant_count:{type:"number"},available_on:{type:"string",nullable:!0},preorder_ships_at:{type:"string",nullable:!0},purchasable:{type:"boolean"},preorder:{type:"boolean"},in_stock:{type:"boolean"},backorderable:{type:"boolean"},available:{type:"boolean"},description:{type:"string",nullable:!0},description_html:{type:"string",nullable:!0},default_variant_id:{type:"string"},thumbnail_url:{type:"string",nullable:!0},tags:{type:"array",items:{type:"string"}},price:{allOf:[{$ref:"#/components/schemas/Price"}],nullable:!0},original_price:{allOf:[{$ref:"#/components/schemas/Price"}],nullable:!0},primary_media:{$ref:"#/components/schemas/Media"},media:{type:"array",items:{$ref:"#/components/schemas/Media"}},variants:{type:"array",items:{$ref:"#/components/schemas/Variant"}},default_variant:{$ref:"#/components/schemas/Variant"},option_types:{type:"array",items:{$ref:"#/components/schemas/OptionType"}},option_values:{type:"array",items:{$ref:"#/components/schemas/OptionValue"}},categories:{type:"array",items:{$ref:"#/components/schemas/Category"}},custom_fields:{type:"array",items:{$ref:"#/components/schemas/CustomField"}},prior_price:{allOf:[{$ref:"#/components/schemas/PriceHistory"}],nullable:!0},translations:{type:"object"},status:{type:"string"},metadata:{type:"object"},deleted_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},tax_category_id:{type:"string",nullable:!0},product_publications:{type:"array",items:{$ref:"#/components/schemas/ProductPublication"}},channels:{type:"array",items:{$ref:"#/components/schemas/Channel"}}},required:["id","name","slug","meta_title","meta_description","meta_keywords","variant_count","available_on","preorder_ships_at","purchasable","preorder","in_stock","backorderable","available","description","description_html","default_variant_id","thumbnail_url","tags","price","original_price","status","metadata","deleted_at","created_at","updated_at","tax_category_id"],"x-typelizer":!0},PromotionAction:{type:"object",properties:{id:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string"},promotion_id:{type:"string"},preferences:{type:"object"},preference_schema:{type:"array",items:{$ref:"#/components/schemas/PreferenceField"}},label:{type:"string"},calculator:{allOf:[{$ref:"#/components/schemas/PromotionActionCalculator"}],nullable:!0},line_items:{type:"array",items:{$ref:"#/components/schemas/PromotionActionLineItem"},nullable:!0}},required:["id","created_at","updated_at","type","promotion_id","preferences","preference_schema","label","calculator","line_items"],"x-typelizer":!0},PromotionRule:{type:"object",properties:{id:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string"},promotion_id:{type:"string"},preferences:{type:"object"},preference_schema:{type:"array",items:{$ref:"#/components/schemas/PreferenceField"}},label:{type:"string"},product_ids:{type:"array",items:{type:"string"},nullable:!0},category_ids:{type:"array",items:{type:"string"},nullable:!0},customer_ids:{type:"array",items:{type:"string"},nullable:!0},products:{type:"array",items:{$ref:"#/components/schemas/Product"}},categories:{type:"array",items:{$ref:"#/components/schemas/Category"}},customers:{type:"array",items:{$ref:"#/components/schemas/Customer"}},customer_groups:{type:"array",items:{$ref:"#/components/schemas/CustomerGroup"}},countries:{type:"array",items:{$ref:"#/components/schemas/Country"}},channels:{type:"array",items:{$ref:"#/components/schemas/Channel"}},markets:{type:"array",items:{$ref:"#/components/schemas/Market"}}},required:["id","created_at","updated_at","type","promotion_id","preferences","preference_schema","label","product_ids","category_ids","customer_ids"],"x-typelizer":!0},Promotion:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},code:{type:"string",nullable:!0},starts_at:{type:"string",nullable:!0},expires_at:{type:"string",nullable:!0},usage_limit:{type:"number",nullable:!0},match_policy:{type:"string",enum:["all","any"]},path:{type:"string",nullable:!0},kind:{type:"string",enum:["coupon_code","automatic"]},multi_codes:{type:"boolean"},number_of_codes:{type:"number",nullable:!0},code_prefix:{type:"string",nullable:!0},promotion_category_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},action_ids:{type:"array",items:{type:"string"}},rule_ids:{type:"array",items:{type:"string"}}},required:["id","name","description","code","starts_at","expires_at","usage_limit","match_policy","path","kind","multi_codes","number_of_codes","code_prefix","promotion_category_id","metadata","created_at","updated_at","action_ids","rule_ids"],"x-typelizer":!0},Refund:{type:"object",properties:{id:{type:"string"},transaction_id:{type:"string",nullable:!0},amount:{type:"string",nullable:!0},payment_id:{type:"string",nullable:!0},refund_reason_id:{type:"string",nullable:!0},reimbursement_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},payment:{$ref:"#/components/schemas/Payment"},reimbursement:{$ref:"#/components/schemas/Reimbursement"}},required:["id","transaction_id","amount","payment_id","refund_reason_id","reimbursement_id","metadata","created_at","updated_at"],"x-typelizer":!0},Reimbursement:{type:"object",properties:{id:{type:"string"},number:{type:"string"},reimbursement_status:{type:"string",nullable:!0},total:{type:"string",nullable:!0},order_id:{type:"string",nullable:!0},customer_return_id:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},order:{$ref:"#/components/schemas/Order"}},required:["id","number","reimbursement_status","total","order_id","customer_return_id","created_at","updated_at"],"x-typelizer":!0},ReturnAuthorization:{type:"object",properties:{id:{type:"string"},number:{type:"string"},status:{type:"string"},order_id:{type:"string",nullable:!0},stock_location_id:{type:"string",nullable:!0},return_authorization_reason_id:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},order:{$ref:"#/components/schemas/Order"},stock_location:{$ref:"#/components/schemas/StockLocation"}},required:["id","number","status","order_id","stock_location_id","return_authorization_reason_id","created_at","updated_at"],"x-typelizer":!0},Role:{type:"object",properties:{id:{type:"string"},name:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","created_at","updated_at"],"x-typelizer":!0},SetupTask:{type:"object",properties:{name:{type:"string"},done:{type:"boolean"}},required:["name","done"],"x-typelizer":!0},State:{type:"object",properties:{abbr:{type:"string"},name:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["abbr","name","created_at","updated_at"],"x-typelizer":!0},StockItem:{type:"object",properties:{id:{type:"string"},count_on_hand:{type:"number"},backorderable:{type:"boolean"},stock_location_id:{type:"string",nullable:!0},variant_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},allocated_count:{type:"number"},available_count:{type:"number"},stock_location:{$ref:"#/components/schemas/StockLocation"},variant:{$ref:"#/components/schemas/Variant"}},required:["id","count_on_hand","backorderable","stock_location_id","variant_id","metadata","created_at","updated_at","allocated_count","available_count"],"x-typelizer":!0},StockLocation:{type:"object",properties:{id:{type:"string"},state_abbr:{type:"string",nullable:!0},name:{type:"string"},address1:{type:"string",nullable:!0},city:{type:"string",nullable:!0},zipcode:{type:"string",nullable:!0},country_iso:{type:"string",nullable:!0},country_name:{type:"string",nullable:!0},state_text:{type:"string",nullable:!0},admin_name:{type:"string",nullable:!0},address2:{type:"string",nullable:!0},state_name:{type:"string",nullable:!0},phone:{type:"string",nullable:!0},company:{type:"string",nullable:!0},active:{type:"boolean"},default:{type:"boolean"},backorderable_default:{type:"boolean"},propagate_all_variants:{type:"boolean"},kind:{type:"string"},pickup_enabled:{type:"boolean"},pickup_stock_policy:{type:"string"},pickup_ready_in_minutes:{type:"number",nullable:!0},pickup_instructions:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","state_abbr","name","address1","city","zipcode","country_iso","country_name","state_text","admin_name","address2","state_name","phone","company","active","default","backorderable_default","propagate_all_variants","kind","pickup_enabled","pickup_stock_policy","pickup_ready_in_minutes","pickup_instructions","created_at","updated_at"],"x-typelizer":!0},StockReservation:{type:"object",properties:{id:{type:"string"},stock_item_id:{type:"string"},line_item_id:{type:"string"},order_id:{type:"string"},variant_id:{type:"string",nullable:!0},stock_location_id:{type:"string",nullable:!0},quantity:{type:"number"},expires_at:{type:"string"},active:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","stock_item_id","line_item_id","order_id","variant_id","stock_location_id","quantity","expires_at","active","created_at","updated_at"],"x-typelizer":!0},StockTransfer:{type:"object",properties:{id:{type:"string"},number:{type:"string"},reference:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},source_location_id:{type:"string",nullable:!0},destination_location_id:{type:"string",nullable:!0},source_location:{$ref:"#/components/schemas/StockLocation"},destination_location:{$ref:"#/components/schemas/StockLocation"}},required:["id","number","reference","metadata","created_at","updated_at","source_location_id","destination_location_id"],"x-typelizer":!0},StoreCreditCategory:{type:"object",properties:{id:{type:"string"},name:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},non_expiring:{type:"boolean"}},required:["id","name","created_at","updated_at","non_expiring"],"x-typelizer":!0},StoreCredit:{type:"object",properties:{id:{type:"string"},amount:{type:"string"},amount_used:{type:"string"},amount_remaining:{type:"string"},display_amount:{type:"string"},display_amount_used:{type:"string"},display_amount_remaining:{type:"string"},currency:{type:"string"},memo:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},customer_id:{type:"string",nullable:!0},created_by_id:{type:"string",nullable:!0},category_id:{type:"string",nullable:!0},category_name:{type:"string",nullable:!0}},required:["id","amount","amount_used","amount_remaining","display_amount","display_amount_used","display_amount_remaining","currency","memo","metadata","created_at","updated_at","customer_id","created_by_id","category_id","category_name"],"x-typelizer":!0},Store:{type:"object",properties:{id:{type:"string"},metadata:{type:"object"},name:{type:"string"},code:{type:"string"},preferred_storefront_url:{type:"string",nullable:!0},default_currency:{type:"string"},default_locale:{type:"string"},mail_from_address:{type:"string",nullable:!0},customer_support_email:{type:"string",nullable:!0},new_order_notifications_email:{type:"string",nullable:!0},preferred_send_consumer_transactional_emails:{type:"boolean"},preferred_admin_locale:{type:"string",nullable:!0},preferred_timezone:{type:"string"},preferred_weight_unit:{type:"string"},preferred_unit_system:{type:"string"},preferred_storefront_access:{type:"string"},preferred_guest_checkout:{type:"boolean"},preferred_order_routing_strategy:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},url:{type:"string"},api_url:{type:"string"},setup_tasks:{type:"array",items:{$ref:"#/components/schemas/SetupTask"}},supported_currencies:{type:"array",items:{type:"string"}},supported_locales:{type:"array",items:{type:"string"}},available_locales:{type:"array",items:{type:"string"}},logo_url:{type:"string",nullable:!0},mailer_logo_url:{type:"string",nullable:!0}},required:["id","metadata","name","code","preferred_storefront_url","default_currency","default_locale","mail_from_address","customer_support_email","new_order_notifications_email","preferred_send_consumer_transactional_emails","preferred_admin_locale","preferred_timezone","preferred_weight_unit","preferred_unit_system","preferred_storefront_access","preferred_guest_checkout","preferred_order_routing_strategy","created_at","updated_at","url","api_url","setup_tasks","supported_currencies","supported_locales","available_locales","logo_url","mailer_logo_url"],"x-typelizer":!0},TaxCategory:{type:"object",properties:{id:{type:"string"},name:{type:"string"},tax_code:{type:"string",nullable:!0},description:{type:"string",nullable:!0},is_default:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","tax_code","description","is_default","created_at","updated_at"],"x-typelizer":!0},Variant:{type:"object",properties:{id:{type:"string"},product_id:{type:"string"},sku:{type:"string",nullable:!0},options_text:{type:"string"},track_inventory:{type:"boolean"},media_count:{type:"number"},preorder_ships_at:{type:"string",nullable:!0},thumbnail_url:{type:"string",nullable:!0},purchasable:{type:"boolean"},in_stock:{type:"boolean"},backorderable:{type:"boolean"},preorder:{type:"boolean"},weight:{type:"number",nullable:!0},height:{type:"number",nullable:!0},width:{type:"number",nullable:!0},depth:{type:"number",nullable:!0},price:{$ref:"#/components/schemas/Price"},original_price:{allOf:[{$ref:"#/components/schemas/Price"}],nullable:!0},primary_media:{$ref:"#/components/schemas/Media"},media:{type:"array",items:{$ref:"#/components/schemas/Media"}},option_values:{type:"array",items:{$ref:"#/components/schemas/OptionValue"}},custom_fields:{type:"array",items:{$ref:"#/components/schemas/CustomField"}},prior_price:{allOf:[{$ref:"#/components/schemas/PriceHistory"}],nullable:!0},metadata:{type:"object"},position:{type:"number"},cost_price:{type:"string",nullable:!0},cost_currency:{type:"string",nullable:!0},barcode:{type:"string",nullable:!0},weight_unit:{type:"string",nullable:!0},dimensions_unit:{type:"string",nullable:!0},backorder_limit:{type:"number",nullable:!0},deleted_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},preorderable:{type:"boolean"},tax_category_id:{type:"string",nullable:!0},available_stock:{type:"number",nullable:!0},reserved_quantity:{type:"number"},total_on_hand:{type:"number",nullable:!0},product_name:{type:"string"},prices:{type:"array",items:{$ref:"#/components/schemas/Price"}},stock_items:{type:"array",items:{$ref:"#/components/schemas/StockItem"}}},required:["id","product_id","sku","options_text","track_inventory","media_count","preorder_ships_at","thumbnail_url","purchasable","in_stock","backorderable","preorder","weight","height","width","depth","price","original_price","option_values","metadata","position","cost_price","cost_currency","barcode","weight_unit","dimensions_unit","backorder_limit","deleted_at","created_at","updated_at","preorderable","tax_category_id","available_stock","reserved_quantity","total_on_hand","product_name"],"x-typelizer":!0},WebhookDelivery:{type:"object",properties:{id:{type:"string"},event_name:{type:"string"},event_id:{type:"string",nullable:!0},response_code:{type:"number",nullable:!0},execution_time:{type:"number",nullable:!0},error_type:{type:"string",nullable:!0},request_errors:{type:"string",nullable:!0},response_body:{type:"string",nullable:!0},success:{type:"boolean",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},delivered_at:{type:"string",nullable:!0},payload:{type:"object"},webhook_endpoint_id:{type:"string"},webhook_endpoint_url:{type:"string"}},required:["id","event_name","event_id","response_code","execution_time","error_type","request_errors","response_body","success","created_at","updated_at","delivered_at","payload","webhook_endpoint_id","webhook_endpoint_url"],"x-typelizer":!0},WebhookEndpoint:{type:"object",properties:{id:{type:"string"},name:{type:"string",nullable:!0},url:{type:"string"},active:{type:"boolean"},subscriptions:{type:"array",items:{type:"string"}},disabled_reason:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},disabled_at:{type:"string",nullable:!0},secret_key:{type:"string",nullable:!0},last_delivery_at:{type:"string",nullable:!0},recent_delivery_count:{type:"number"},recent_failure_count:{type:"number"},total_delivery_count:{type:"number"},successful_delivery_count:{type:"number"},failed_delivery_count:{type:"number"}},required:["id","name","url","active","subscriptions","disabled_reason","created_at","updated_at","disabled_at","secret_key","last_delivery_at","recent_delivery_count","recent_failure_count","total_delivery_count","successful_delivery_count","failed_delivery_count"],"x-typelizer":!0}}}};var eh=new Set(["get","post","put","patch","delete"]);function In(){return Zm}function oS(e){let t=e.description?.match(/\*\*Required scope:\*\* (.+?) \(for API-key authentication\)\./);return t?t[1].replaceAll("`",""):"\u2014"}function th(e,t={}){let r=[];for(let[i,n]of Object.entries(e.paths)){let s=i.replace("/api/v3/admin","")||"/";for(let[o,a]of Object.entries(n)){if(!eh.has(o))continue;if(t.resource){let d=s.split("/")[1]??"";if(d!==t.resource&&!d.startsWith(t.resource))continue}let c=a.summary??"";t.search&&!`${o} ${s} ${c}`.toLowerCase().includes(t.search.toLowerCase())||r.push({method:o.toUpperCase(),path:s,scope:oS(a),summary:c})}}return r}function rh(e,t){let r=t.trim().split(/\s+/),i=r.length>1?r[0].toLowerCase():void 0,n=r.length>1?r[1]:r[0],s=Br(n),o=Qm(e,i,a=>a===s);return o.length>0?o:Qm(e,i,a=>aS(a,s))}function Qm(e,t,r){let i=[];for(let[n,s]of Object.entries(e.paths)){let o=n.replace("/api/v3/admin","")||"/";if(r(o))for(let[a,c]of Object.entries(s))eh.has(a)&&(t&&a!==t||i.push({method:a.toUpperCase(),path:o,summary:c.summary,description:c.description,parameters:er(c.parameters,e),requestBody:er(c.requestBody,e),responses:er(c.responses,e)}))}return i}function aS(e,t){if(e===t)return!0;let r=e.split("/"),i=t.split("/");return r.length!==i.length?!1:r.every((n,s)=>n.startsWith("{")&&n.endsWith("}")?i[s].length>0:n===i[s])}var cS=8;function er(e,t,r=[]){if(Array.isArray(e))return e.map(o=>er(o,t,r));if(!e||typeof e!="object")return e;let i=e,n=i.$ref;if(typeof n=="string"){let o=n.replace("#/components/schemas/","");return r.includes(o)||r.length>=cS||!(o in t.components.schemas)?{$ref:n}:er(t.components.schemas[o],t,[...r,o])}let s={};for(let[o,a]of Object.entries(i))s[o]=er(a,t,r);return s}function pS(e,t){return[...t,e]}function oh(e){return e.option("--profile <name>","use a saved profile (see `spree auth`)").option("--base-url <url>","store URL (overrides profile/env/project)").option("--api-key <key>","secret API key (prefer SPREE_API_KEY \u2014 flags leak into shell history)").option("--store-id <id>","X-Spree-Store-Id for hosts serving multiple stores")}function ah(){return new Ua("--format <format>","output format").choices(["json","table"]).default("json")}function ih(e){return oh(e).addOption(ah())}async function nh(e){let t=await Pr({baseUrl:e.baseUrl,apiKey:e.apiKey,profile:e.profile});return{client:Rr({baseUrl:t.baseUrl,secretKey:t.apiKey,...e.storeId?{storeId:e.storeId}:{}}),credentials:t}}function ch(e){let t=e.command("api").description("Call the Admin API directly (generic get/post/patch/delete)");t.addHelpText("after",["","Examples:"," spree api get /products -q status_eq=active --limit 10",` spree api post /products -d '{"name":"Classic Tee","prices":[{"currency":"USD","amount":"29.99"}]}'`," spree api get /orders/ord_x8k2J9aQ --expand items,payments","","Discover the surface (offline, no server needed):"," spree api endpoints --search <term> # find endpoints + required scopes",' spree api schema "POST /orders" # request/response schema for one operation'," spree completion zsh # tab-completion for paths, filters, scopes"].join(`
361
- `)),ih(t.command("get <path>").description("GET an Admin API path, e.g. `spree api get /products -q status_eq=active`").option("-q, --query <expr>","Ransack predicate key=value (repeatable)",pS,[]).option("--sort <fields>","sort, e.g. -created_at").option("--page <n>","page number").option("--limit <n>","page size (max 100)").option("--expand <relations>","expand relations, e.g. variants,variants.prices").option("--fields <fields>","sparse fields, e.g. id,name")).action(async(r,i)=>{let n;try{let s=Jm(i),{client:o,credentials:a}=await nh(i);n=a.baseUrl;let c=await o.request("GET",Br(r),{params:s});Fr(c,i.format)}catch(s){Et(s,{baseUrl:n})}});for(let r of["post","patch","delete"])ih(t.command(`${r} <path>`).description(`${r.toUpperCase()} an Admin API path`).option("-d, --data <json>","request body: inline JSON, @file, or '-' for stdin")).action(async(i,n)=>{let s;try{let o=await Hm(n.data),{client:a,credentials:c}=await nh(n);s=c.baseUrl;let d=await a.request(r.toUpperCase(),Br(i),{...o===_a?{}:{body:o}});Fr(d,n.format)}catch(o){Et(o,{baseUrl:s})}});t.command("endpoints").description("List Admin API endpoints with their required scopes").option("--resource <name>","filter by first path segment, e.g. orders").option("--search <term>","filter by method, path, or summary").addOption(ah()).action(r=>{let i=th(In(),{resource:r.resource,search:r.search});if(i.length===0){process.stderr.write(`No endpoints match.
362
- `),process.exitCode=1;return}if(r.format==="table"){(0,sh.printTable)(i.map(n=>({Method:n.method,Path:n.path,Scope:n.scope,Summary:n.summary})));return}Fr(i,"json")}),t.command("schema <operation>").description('Show the request/response schema for an operation, e.g. `spree api schema "POST /products"`').action(r=>{let i=rh(In(),r);if(i.length===0){process.stderr.write(`No operation matches "${r}". Try \`spree api endpoints --search ${r.split(/\s+/).pop()}\`.
363
- `),process.exitCode=1;return}let n=/\s/.test(r.trim());Fr(n&&i.length===1?i[0]:i,"json")}),oh(t.command("status").description("Show resolved credentials, server reachability, and the bundled spec version")).action(async r=>{try{let i=await Pr({baseUrl:r.baseUrl,apiKey:r.apiKey,profile:r.profile},{allowMint:!1}),n=await Ur(i.baseUrl,i.apiKey),s=In(),o=Rn(n),a=[`${Pe.default.bold("Base URL:")} ${i.baseUrl}`,`${Pe.default.bold("Credentials:")} ${i.source}${i.profileName?` (${i.profileName})`:""}, key ${i.tokenPrefix}${Pe.default.dim("\u2026")}`],c=n.status==="unreachable"||n.status==="unauthorized"?null:await Xm(i.baseUrl,i.apiKey);c!==null?a.push(`${Pe.default.bold("Scopes:")} ${c.length?c.join(", "):Pe.default.dim("(none)")}`):i.scopes?.length&&a.push(`${Pe.default.bold("Scopes:")} ${i.scopes.join(", ")} ${Pe.default.dim("(local snapshot from mint time \u2014 may be stale)")}`),a.push(`${Pe.default.bold("Server:")} ${o}`),a.push(`${Pe.default.bold("Bundled spec:")} ${s.info?.version??"unknown"} ${Pe.default.dim("(spree api endpoints/schema reflect this snapshot, not the live server)")}`),process.stdout.write(`${a.join(`
360
+ **Required scope:** \`write_webhooks\` (for API-key authentication).`,parameters:[{name:"x-spree-api-key",in:"header",required:!0,schema:{type:"string"}},{name:"Authorization",in:"header",required:!0,description:"Bearer token for admin authentication",schema:{type:"string"}}],responses:{"200":{description:"webhook endpoint disabled",content:{"application/json":{}}}},requestBody:{content:{"application/json":{schema:{type:"object",properties:{reason:{type:"string"}}}}}}}}},components:{schemas:{PaginationMeta:{type:"object",properties:{page:{type:"integer"},limit:{type:"integer"},count:{type:"integer",description:"Total number of records"},pages:{type:"integer",description:"Total number of pages"},from:{type:"integer",description:"Index of first record on this page"},to:{type:"integer",description:"Index of last record on this page"},in:{type:"integer",description:"Number of records on this page"},previous:{type:"integer",nullable:!0,description:"Previous page number"},next:{type:"integer",nullable:!0,description:"Next page number"}},required:["page","limit","count","pages","from","to","in"]},ErrorResponse:{type:"object",properties:{error:{type:"object",properties:{code:{type:"string"},message:{type:"string"},details:{type:"object",description:"Field-specific validation errors",nullable:!0}},required:["code","message"]}},required:["error"]},AuthResponse:{type:"object",properties:{token:{type:"string",description:"JWT access token"},user:{$ref:"#/components/schemas/AdminUser"}},required:["token","user"]},PermissionRule:{type:"object",description:"A single permission rule (CanCanCan rule). Rules are applied in order, last-matching-wins.",properties:{allow:{type:"boolean",description:"true for `can`, false for `cannot`"},actions:{type:"array",items:{type:"string"},description:'Action names, e.g. ["read", "update"] or ["manage"]'},subjects:{type:"array",items:{type:"string"},description:'Subject class names, e.g. ["Spree::Product"] or ["all"]'},has_conditions:{type:"boolean",description:"True if the server-side rule has per-record conditions. The SPA shows the action optimistically and handles 403 from the API."}},required:["allow","actions","subjects","has_conditions"]},MeResponse:{type:"object",description:"Current admin user profile and serialized permissions",properties:{user:{$ref:"#/components/schemas/AdminUser"},permissions:{type:"array",items:{$ref:"#/components/schemas/PermissionRule"}}},required:["user","permissions"]},ImportSchemaField:{type:"object",description:"A canonical column of an import type, including per-store custom field columns",properties:{name:{type:"string",description:"Canonical field name used in mappings"},label:{type:"string",description:"Human-readable label"},required:{type:"boolean",description:"Whether the field must be mapped before processing"}},required:["name","label","required"]},CheckoutRequirement:{type:"object",properties:{step:{type:"string",description:"Checkout step this requirement belongs to"},field:{type:"string",description:"Field that needs to be satisfied"},message:{type:"string",description:"Human-readable requirement message"}},required:["step","field","message"]},CartWarning:{type:"object",description:"A warning about a cart issue (e.g., item removed due to stock change)",properties:{code:{type:"string",description:"Machine-readable warning code"},message:{type:"string",description:"Human-readable warning message"},line_item_id:{type:"string",nullable:!0,description:"Prefixed line item ID (when applicable)"},variant_id:{type:"string",nullable:!0,description:"Prefixed variant ID (when applicable)"}},required:["code","message"]},FulfillmentManifestItem:{type:"object",description:"An item within a fulfillment \u2014 which line item and how many units are in this fulfillment",properties:{item_id:{type:"string",description:"Line item ID"},variant_id:{type:"string",description:"Variant ID"},quantity:{type:"integer",description:"Quantity in this fulfillment"}},required:["item_id","variant_id","quantity"]},AdminUserRoleAssignment:{type:"object",description:"A role assignment for the current store on a staff member",properties:{id:{type:"string",description:"Prefixed role ID"},name:{type:"string",description:"Role name"}},required:["id","name"]},AdminUserStore:{type:"object",description:"A store the staff member can access through a role assignment",properties:{id:{type:"string",description:"Prefixed store ID"},name:{type:"string",description:"Store name"},code:{type:"string",description:"Store code"}},required:["id","name","code"]},PreferenceField:{type:"object",description:"A single configurable preference on a payment method, promotion rule/action, or calculator. The frontend uses `type` + `default` to render a sensible input.",properties:{key:{type:"string"},type:{type:"string",description:"string | text | password | integer | decimal | boolean | array | hash"},default:{description:"Default value (any JSON type), null when there is no default",nullable:!0}},required:["key","type"]},PromotionActionCalculator:{type:"object",description:"The action's nested calculator (when the action carries one \u2014 null for actions like `free_shipping`)",properties:{type:{type:"string",description:"Wire shorthand for the calculator subclass"},label:{type:"string"},preferences:{type:"object",additionalProperties:!0},preference_schema:{type:"array",items:{$ref:"#/components/schemas/PreferenceField"}}},required:["type","label","preferences","preference_schema"]},PromotionActionLineItem:{type:"object",description:"One row in a `create_line_items` action \u2014 the variant added to the order and how many",properties:{variant_id:{type:"string"},quantity:{type:"integer"}},required:["variant_id","quantity"]},Address:{type:"object",properties:{id:{type:"string"},first_name:{type:"string",nullable:!0},last_name:{type:"string",nullable:!0},full_name:{type:"string"},address1:{type:"string",nullable:!0},address2:{type:"string",nullable:!0},postal_code:{type:"string",nullable:!0},city:{type:"string",nullable:!0},phone:{type:"string",nullable:!0},company:{type:"string",nullable:!0},country_name:{type:"string"},country_iso:{type:"string"},state_text:{type:"string",nullable:!0},state_abbr:{type:"string",nullable:!0},quick_checkout:{type:"boolean"},is_default_billing:{type:"boolean"},is_default_shipping:{type:"boolean"},state_name:{type:"string",nullable:!0},label:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},customer_id:{type:"string",nullable:!0}},required:["id","first_name","last_name","full_name","address1","address2","postal_code","city","phone","company","country_name","country_iso","state_text","state_abbr","quick_checkout","is_default_billing","is_default_shipping","state_name","label","metadata","created_at","updated_at","customer_id"],"x-typelizer":!0},Adjustment:{type:"object",properties:{id:{type:"string"},label:{type:"string"},display_amount:{type:"string"},included:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"},amount:{type:"string"},order_id:{type:"string",nullable:!0}},required:["id","label","display_amount","included","created_at","updated_at","amount","order_id"],"x-typelizer":!0},AdminUser:{type:"object",properties:{id:{type:"string"},email:{type:"string"},first_name:{type:"string",nullable:!0},last_name:{type:"string",nullable:!0},full_name:{type:"string",nullable:!0},selected_locale:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},avatar_url:{type:"string",nullable:!0},roles:{type:"array",items:{$ref:"#/components/schemas/AdminUserRoleAssignment"}},stores:{type:"array",items:{$ref:"#/components/schemas/AdminUserStore"}}},required:["id","email","first_name","last_name","full_name","selected_locale","created_at","updated_at","avatar_url","roles","stores"],"x-typelizer":!0},AllowedOrigin:{type:"object",properties:{id:{type:"string"},origin:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","origin","created_at","updated_at"],"x-typelizer":!0},ApiKey:{type:"object",properties:{id:{type:"string"},name:{type:"string"},key_type:{type:"string"},token_prefix:{type:"string",nullable:!0},scopes:{type:"array",items:{type:"string"}},created_at:{type:"string"},updated_at:{type:"string"},revoked_at:{type:"string",nullable:!0},last_used_at:{type:"string",nullable:!0},channel_id:{type:"string",nullable:!0},plaintext_token:{type:"string",nullable:!0},created_by_email:{type:"string",nullable:!0}},required:["id","name","key_type","token_prefix","scopes","created_at","updated_at","revoked_at","last_used_at","channel_id","plaintext_token","created_by_email"],"x-typelizer":!0},Category:{type:"object",properties:{id:{type:"string"},name:{type:"string"},permalink:{type:"string"},position:{type:"number"},depth:{type:"number"},meta_title:{type:"string",nullable:!0},meta_description:{type:"string",nullable:!0},meta_keywords:{type:"string",nullable:!0},children_count:{type:"number"},parent_id:{type:"string",nullable:!0},description:{type:"string"},description_html:{type:"string"},image_url:{type:"string",nullable:!0},square_image_url:{type:"string",nullable:!0},is_root:{type:"boolean"},is_child:{type:"boolean"},is_leaf:{type:"boolean"},parent:{$ref:"#/components/schemas/Category"},children:{type:"array",items:{$ref:"#/components/schemas/Category"}},ancestors:{type:"array",items:{$ref:"#/components/schemas/Category"}},custom_fields:{type:"array",items:{$ref:"#/components/schemas/CustomField"}},translations:{type:"object"},metadata:{type:"object"},pretty_name:{type:"string"},lft:{type:"number"},rgt:{type:"number"},products_count:{type:"number"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","permalink","position","depth","meta_title","meta_description","meta_keywords","children_count","parent_id","description","description_html","image_url","square_image_url","is_root","is_child","is_leaf","metadata","pretty_name","lft","rgt","products_count","created_at","updated_at"],"x-typelizer":!0},Channel:{type:"object",properties:{id:{type:"string"},name:{type:"string"},code:{type:"string"},active:{type:"boolean"},default:{type:"boolean"},storefront_access:{type:"string"},guest_checkout:{type:"boolean"},preferred_order_routing_strategy:{type:"string",nullable:!0},preferred_storefront_access:{type:"string",nullable:!0},preferred_guest_checkout:{type:"boolean",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","code","active","default","storefront_access","guest_checkout","preferred_order_routing_strategy","preferred_storefront_access","preferred_guest_checkout","created_at","updated_at"],"x-typelizer":!0},Country:{type:"object",properties:{iso:{type:"string"},iso3:{type:"string"},name:{type:"string"},states_required:{type:"boolean"},zipcode_required:{type:"boolean"},states:{type:"array",items:{$ref:"#/components/schemas/State"}},market:{allOf:[{$ref:"#/components/schemas/Market"}],nullable:!0},created_at:{type:"string"},updated_at:{type:"string"}},required:["iso","iso3","name","states_required","zipcode_required","created_at","updated_at"],"x-typelizer":!0},CouponCode:{type:"object",properties:{id:{type:"string"},code:{type:"string"},state:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},promotion_id:{type:"string"},order_id:{type:"string",nullable:!0}},required:["id","code","state","created_at","updated_at","promotion_id","order_id"],"x-typelizer":!0},CreditCard:{type:"object",properties:{id:{type:"string"},brand:{type:"string"},last4:{type:"string"},month:{type:"number"},year:{type:"number"},name:{type:"string",nullable:!0},default:{type:"boolean"},gateway_payment_profile_id:{type:"string",nullable:!0},customer_id:{type:"string",nullable:!0},payment_method_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","brand","last4","month","year","name","default","gateway_payment_profile_id","customer_id","payment_method_id","metadata","created_at","updated_at"],"x-typelizer":!0},CustomFieldDefinition:{type:"object",properties:{id:{type:"string"},namespace:{type:"string"},key:{type:"string"},label:{type:"string"},field_type:{type:"string",enum:["short_text","long_text","rich_text","number","boolean","json"]},resource_type:{type:"string"},storefront_visible:{type:"boolean"},searchable:{type:"boolean"},sortable:{type:"boolean"},filter_key:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","namespace","key","label","field_type","resource_type","storefront_visible","searchable","sortable","filter_key","created_at","updated_at"],"x-typelizer":!0},CustomField:{type:"object",properties:{id:{type:"string"},label:{type:"string"},type:{type:"string",deprecated:!0},field_type:{type:"string",enum:["short_text","long_text","rich_text","number","boolean","json"]},key:{type:"string"},value:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},storefront_visible:{type:"boolean"},custom_field_definition_id:{type:"string"}},required:["id","label","type","field_type","key","value","created_at","updated_at","storefront_visible","custom_field_definition_id"],"x-typelizer":!0},CustomerGroup:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},customers_count:{type:"number"},created_at:{type:"string"},updated_at:{type:"string"},customers:{type:"array",items:{$ref:"#/components/schemas/Customer"}}},required:["id","name","description","customers_count","created_at","updated_at"],"x-typelizer":!0},Customer:{type:"object",properties:{id:{type:"string"},email:{type:"string"},first_name:{type:"string",nullable:!0},last_name:{type:"string",nullable:!0},phone:{type:"string",nullable:!0},accepts_email_marketing:{type:"boolean"},full_name:{type:"string"},available_store_credit_total:{type:"string"},display_available_store_credit_total:{type:"string"},addresses:{type:"array",items:{$ref:"#/components/schemas/Address"}},default_billing_address:{allOf:[{$ref:"#/components/schemas/Address"}],nullable:!0},default_shipping_address:{allOf:[{$ref:"#/components/schemas/Address"}],nullable:!0},newsletter_subscriber:{allOf:[{$ref:"#/components/schemas/NewsletterSubscriber"}],nullable:!0},customer_groups:{type:"array",items:{$ref:"#/components/schemas/CustomerGroup"}},login:{type:"string",nullable:!0},metadata:{type:"object"},last_sign_in_at:{type:"string",nullable:!0},current_sign_in_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},sign_in_count:{type:"number"},failed_attempts:{type:"number"},last_sign_in_ip:{type:"string",nullable:!0},current_sign_in_ip:{type:"string",nullable:!0},tags:{type:"array",items:{type:"string"}},internal_note_html:{type:"string",nullable:!0},default_billing_address_id:{type:"string",nullable:!0},default_shipping_address_id:{type:"string",nullable:!0},orders_count:{type:"number"},total_spent:{type:"string"},display_total_spent:{type:"string"},last_order_completed_at:{type:"string",nullable:!0},orders:{type:"array",items:{$ref:"#/components/schemas/Order"}},store_credits:{type:"array",items:{$ref:"#/components/schemas/StoreCredit"}},customer_group_ids:{type:"array",items:{type:"string"}}},required:["id","email","first_name","last_name","phone","accepts_email_marketing","full_name","available_store_credit_total","display_available_store_credit_total","login","metadata","last_sign_in_at","current_sign_in_at","created_at","updated_at","sign_in_count","failed_attempts","last_sign_in_ip","current_sign_in_ip","tags","internal_note_html","default_billing_address_id","default_shipping_address_id","orders_count","total_spent","display_total_spent","last_order_completed_at","customer_group_ids"],"x-typelizer":!0},DeliveryMethod:{type:"object",properties:{id:{type:"string"},name:{type:"string"},code:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","code","created_at","updated_at"],"x-typelizer":!0},DeliveryRate:{type:"object",properties:{id:{type:"string"},delivery_method_id:{type:"string"},name:{type:"string"},selected:{type:"boolean"},cost:{type:"string"},total:{type:"string"},additional_tax_total:{type:"string"},included_tax_total:{type:"string"},tax_total:{type:"string"},display_cost:{type:"string"},display_total:{type:"string"},display_additional_tax_total:{type:"string"},display_included_tax_total:{type:"string"},display_tax_total:{type:"string"},delivery_method:{$ref:"#/components/schemas/DeliveryMethod"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","delivery_method_id","name","selected","cost","total","additional_tax_total","included_tax_total","tax_total","display_cost","display_total","display_additional_tax_total","display_included_tax_total","display_tax_total","created_at","updated_at"],"x-typelizer":!0},DigitalLink:{type:"object",properties:{id:{type:"string"},access_counter:{type:"number"},filename:{type:"string"},content_type:{type:"string"},download_url:{type:"string"},authorizable:{type:"boolean"},expired:{type:"boolean"},access_limit_exceeded:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","access_counter","filename","content_type","download_url","authorizable","expired","access_limit_exceeded","created_at","updated_at"],"x-typelizer":!0},Discount:{type:"object",properties:{id:{type:"string"},promotion_id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},code:{type:"string",nullable:!0},amount:{type:"string"},display_amount:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","promotion_id","name","description","code","amount","display_amount","created_at","updated_at"],"x-typelizer":!0},Export:{type:"object",properties:{id:{type:"string"},number:{type:"string"},format:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string",nullable:!0},user_id:{type:"string",nullable:!0},done:{type:"boolean"},filename:{type:"string",nullable:!0},byte_size:{type:"number",nullable:!0},download_url:{type:"string",nullable:!0}},required:["id","number","format","created_at","updated_at","type","user_id","done","filename","byte_size","download_url"],"x-typelizer":!0},Fulfillment:{type:"object",properties:{id:{type:"string"},number:{type:"string"},tracking:{type:"string",nullable:!0},tracking_url:{type:"string",nullable:!0},cost:{type:"string"},display_cost:{type:"string"},total:{type:"string"},display_total:{type:"string"},discount_total:{type:"string"},display_discount_total:{type:"string"},additional_tax_total:{type:"string"},display_additional_tax_total:{type:"string"},included_tax_total:{type:"string"},display_included_tax_total:{type:"string"},tax_total:{type:"string"},display_tax_total:{type:"string"},status:{type:"string"},fulfillment_type:{type:"string"},fulfilled_at:{type:"string",nullable:!0},items:{type:"array",items:{$ref:"#/components/schemas/FulfillmentManifestItem"}},delivery_method:{$ref:"#/components/schemas/DeliveryMethod"},stock_location:{$ref:"#/components/schemas/StockLocation"},delivery_rates:{type:"array",items:{$ref:"#/components/schemas/DeliveryRate"}},metadata:{type:"object"},adjustment_total:{type:"string"},pre_tax_amount:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},order_id:{type:"string",nullable:!0},stock_location_id:{type:"string",nullable:!0},order:{$ref:"#/components/schemas/Order"},adjustments:{type:"array",items:{$ref:"#/components/schemas/Adjustment"}}},required:["id","number","tracking","tracking_url","cost","display_cost","total","display_total","discount_total","display_discount_total","additional_tax_total","display_additional_tax_total","included_tax_total","display_included_tax_total","tax_total","display_tax_total","status","fulfillment_type","fulfilled_at","items","metadata","adjustment_total","pre_tax_amount","created_at","updated_at","order_id","stock_location_id"],"x-typelizer":!0},GiftCardBatch:{type:"object",properties:{id:{type:"string"},codes_count:{type:"number"},currency:{type:"string",nullable:!0},prefix:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},amount:{type:"string",nullable:!0},expires_at:{type:"string",nullable:!0},created_by_id:{type:"string",nullable:!0}},required:["id","codes_count","currency","prefix","created_at","updated_at","amount","expires_at","created_by_id"],"x-typelizer":!0},GiftCard:{type:"object",properties:{id:{type:"string"},code:{type:"string"},status:{type:"string"},currency:{type:"string"},amount:{type:"string"},amount_used:{type:"string"},amount_authorized:{type:"string"},amount_remaining:{type:"string"},display_amount:{type:"string"},display_amount_used:{type:"string"},display_amount_remaining:{type:"string"},expires_at:{type:"string",nullable:!0},redeemed_at:{type:"string",nullable:!0},expired:{type:"boolean"},active:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"},customer_id:{type:"string",nullable:!0},created_by_id:{type:"string",nullable:!0},customer:{$ref:"#/components/schemas/Customer"},created_by:{$ref:"#/components/schemas/AdminUser"},gift_card_batch:{$ref:"#/components/schemas/GiftCardBatch"},orders:{type:"array",items:{$ref:"#/components/schemas/Order"}}},required:["id","code","status","currency","amount","amount_used","amount_authorized","amount_remaining","display_amount","display_amount_used","display_amount_remaining","expires_at","redeemed_at","expired","active","created_at","updated_at","customer_id","created_by_id"],"x-typelizer":!0},ImportMapping:{type:"object",properties:{id:{type:"string"},schema_field:{type:"string"},file_column:{type:"string",nullable:!0},required:{type:"boolean"}},required:["id","schema_field","file_column","required"],"x-typelizer":!0},ImportRow:{type:"object",properties:{id:{type:"string"},row_number:{type:"number"},status:{type:"string"},validation_errors:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},import_id:{type:"string",nullable:!0},item_type:{type:"string",nullable:!0},item_id:{type:"string",nullable:!0},data:{type:"object"}},required:["id","row_number","status","validation_errors","created_at","updated_at","import_id","item_type","item_id","data"],"x-typelizer":!0},Import:{type:"object",properties:{id:{type:"string"},number:{type:"string"},rows_count:{type:"number"},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string",nullable:!0},status:{type:"string"},owner_type:{type:"string",nullable:!0},owner_id:{type:"string",nullable:!0},user_id:{type:"string",nullable:!0},processing_errors:{type:"string",nullable:!0},preferred_delimiter:{type:"string"},original_filename:{type:"string",nullable:!0},original_byte_size:{type:"number",nullable:!0},original_file_url:{type:"string",nullable:!0},completed_rows_count:{type:"number"},failed_rows_count:{type:"number"},schema_fields:{type:"array",items:{$ref:"#/components/schemas/ImportSchemaField"}},csv_headers:{type:"array",items:{type:"string"}},sample_row:{type:"object"},mappings:{type:"array",items:{$ref:"#/components/schemas/ImportMapping"}}},required:["id","number","rows_count","created_at","updated_at","type","status","owner_type","owner_id","user_id","processing_errors","preferred_delimiter","original_filename","original_byte_size","original_file_url","completed_rows_count","failed_rows_count","schema_fields","csv_headers","sample_row","mappings"],"x-typelizer":!0},Invitation:{type:"object",properties:{id:{type:"string"},email:{type:"string"},status:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},expires_at:{type:"string"},role_id:{type:"string"},role_name:{type:"string"},inviter_email:{type:"string"},acceptance_url:{type:"string"},invitee_exists:{type:"boolean"},store:{type:"object"}},required:["id","email","status","created_at","updated_at","expires_at","role_id","role_name","inviter_email","acceptance_url","invitee_exists","store"],"x-typelizer":!0},LineItem:{type:"object",properties:{id:{type:"string"},variant_id:{type:"string"},preorder:{type:"boolean"},preorder_ships_at:{type:"string",nullable:!0},quantity:{type:"number"},currency:{type:"string"},name:{type:"string"},slug:{type:"string"},options_text:{type:"string"},price:{type:"string"},display_price:{type:"string"},total:{type:"string"},display_total:{type:"string"},adjustment_total:{type:"string"},display_adjustment_total:{type:"string"},additional_tax_total:{type:"string"},display_additional_tax_total:{type:"string"},included_tax_total:{type:"string"},display_included_tax_total:{type:"string"},discount_total:{type:"string"},display_discount_total:{type:"string"},pre_tax_amount:{type:"string"},display_pre_tax_amount:{type:"string"},discounted_amount:{type:"string"},display_discounted_amount:{type:"string"},display_compare_at_amount:{type:"string",nullable:!0},compare_at_amount:{type:"string",nullable:!0},thumbnail_url:{type:"string",nullable:!0},option_values:{type:"array",items:{$ref:"#/components/schemas/OptionValue"}},digital_links:{type:"array",items:{$ref:"#/components/schemas/DigitalLink"}},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},cost_price:{type:"string",nullable:!0},tax_category_id:{type:"string",nullable:!0},variant:{$ref:"#/components/schemas/Variant"},tax_category:{$ref:"#/components/schemas/TaxCategory"},adjustments:{type:"array",items:{$ref:"#/components/schemas/Adjustment"}}},required:["id","variant_id","preorder","preorder_ships_at","quantity","currency","name","slug","options_text","price","display_price","total","display_total","adjustment_total","display_adjustment_total","additional_tax_total","display_additional_tax_total","included_tax_total","display_included_tax_total","discount_total","display_discount_total","pre_tax_amount","display_pre_tax_amount","discounted_amount","display_discounted_amount","display_compare_at_amount","compare_at_amount","thumbnail_url","option_values","digital_links","metadata","created_at","updated_at","cost_price","tax_category_id"],"x-typelizer":!0},Market:{type:"object",properties:{id:{type:"string"},name:{type:"string"},currency:{type:"string"},default_locale:{type:"string"},tax_inclusive:{type:"boolean"},default:{type:"boolean"},country_isos:{type:"array",items:{type:"string"}},supported_locales:{type:"array",items:{type:"string"}},countries:{type:"array",items:{$ref:"#/components/schemas/Country"}},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","currency","default_locale","tax_inclusive","default","country_isos","supported_locales","created_at","updated_at"],"x-typelizer":!0},Media:{type:"object",properties:{id:{type:"string"},product_id:{type:"string",nullable:!0},variant_ids:{type:"array",items:{type:"string"}},position:{type:"number"},alt:{type:"string",nullable:!0},media_type:{type:"string"},focal_point_x:{type:"number",nullable:!0},focal_point_y:{type:"number",nullable:!0},external_video_url:{type:"string",nullable:!0},original_url:{type:"string",nullable:!0},mini_url:{type:"string",nullable:!0},small_url:{type:"string",nullable:!0},medium_url:{type:"string",nullable:!0},large_url:{type:"string",nullable:!0},xlarge_url:{type:"string",nullable:!0},og_image_url:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},viewable_id:{type:"string"},download_url:{type:"string",nullable:!0},metadata:{type:"object"},viewable_type:{type:"string"}},required:["id","product_id","variant_ids","position","alt","media_type","focal_point_x","focal_point_y","external_video_url","original_url","mini_url","small_url","medium_url","large_url","xlarge_url","og_image_url","created_at","updated_at","viewable_id","download_url","metadata","viewable_type"],"x-typelizer":!0},NewsletterSubscriber:{type:"object",properties:{id:{type:"string"},email:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},verified:{type:"boolean"},verified_at:{type:"string",nullable:!0},customer_id:{type:"string",nullable:!0}},required:["id","email","created_at","updated_at","verified","verified_at","customer_id"],"x-typelizer":!0},OptionType:{type:"object",properties:{id:{type:"string"},name:{type:"string"},label:{type:"string"},position:{type:"number"},kind:{type:"string"},translations:{type:"object"},metadata:{type:"object"},filterable:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"},option_values:{type:"array",items:{$ref:"#/components/schemas/OptionValue"}}},required:["id","name","label","position","kind","metadata","filterable","created_at","updated_at"],"x-typelizer":!0},OptionValue:{type:"object",properties:{id:{type:"string"},option_type_id:{type:"string"},name:{type:"string"},label:{type:"string"},position:{type:"number"},color_code:{type:"string",nullable:!0},option_type_name:{type:"string"},option_type_label:{type:"string"},image_url:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},option_type:{$ref:"#/components/schemas/OptionType"}},required:["id","option_type_id","name","label","position","color_code","option_type_name","option_type_label","image_url","metadata","created_at","updated_at"],"x-typelizer":!0},OrderRoutingRule:{type:"object",properties:{id:{type:"string"},position:{type:"number"},active:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string"},channel_id:{type:"string"},preferences:{type:"object"},preference_schema:{type:"object"},label:{type:"string"},description:{type:"string"}},required:["id","position","active","created_at","updated_at","type","channel_id","preferences","preference_schema","label","description"],"x-typelizer":!0},Order:{type:"object",properties:{id:{type:"string"},market_id:{type:"string",nullable:!0},channel_id:{type:"string",nullable:!0},number:{type:"string"},email:{type:"string"},customer_note:{type:"string",nullable:!0},currency:{type:"string"},locale:{type:"string",nullable:!0},total_quantity:{type:"number"},fulfillment_status:{type:"string",nullable:!0},payment_status:{type:"string",nullable:!0},completed_at:{type:"string",nullable:!0},item_total:{type:"string"},display_item_total:{type:"string"},adjustment_total:{type:"string"},display_adjustment_total:{type:"string"},discount_total:{type:"string"},display_discount_total:{type:"string"},tax_total:{type:"string"},display_tax_total:{type:"string"},included_tax_total:{type:"string"},display_included_tax_total:{type:"string"},additional_tax_total:{type:"string"},display_additional_tax_total:{type:"string"},total:{type:"string"},display_total:{type:"string"},gift_card_total:{type:"string"},display_gift_card_total:{type:"string"},amount_due:{type:"string"},display_amount_due:{type:"string"},delivery_total:{type:"string"},display_delivery_total:{type:"string"},store_credit_total:{type:"string"},display_store_credit_total:{type:"string"},covered_by_store_credit:{type:"boolean"},discounts:{type:"array",items:{$ref:"#/components/schemas/Discount"}},items:{type:"array",items:{$ref:"#/components/schemas/LineItem"}},fulfillments:{type:"array",items:{$ref:"#/components/schemas/Fulfillment"}},payments:{type:"array",items:{$ref:"#/components/schemas/Payment"}},billing_address:{allOf:[{$ref:"#/components/schemas/Address"}],nullable:!0},shipping_address:{allOf:[{$ref:"#/components/schemas/Address"}],nullable:!0},gift_card:{allOf:[{$ref:"#/components/schemas/GiftCard"}],nullable:!0},market:{allOf:[{$ref:"#/components/schemas/Market"}],nullable:!0},status:{type:"string"},last_ip_address:{type:"string",nullable:!0},considered_risky:{type:"boolean"},confirmation_delivered:{type:"boolean"},store_owner_notification_delivered:{type:"boolean"},payment_total:{type:"string"},display_payment_total:{type:"string"},metadata:{type:"object"},canceled_at:{type:"string",nullable:!0},approved_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},preferred_stock_location_id:{type:"string",nullable:!0},tags:{type:"array",items:{type:"string"}},internal_note:{type:"string",nullable:!0},approver_id:{type:"string",nullable:!0},canceler_id:{type:"string",nullable:!0},created_by_id:{type:"string",nullable:!0},customer_id:{type:"string",nullable:!0},channel:{$ref:"#/components/schemas/Channel"},preferred_stock_location:{$ref:"#/components/schemas/StockLocation"},payment_methods:{type:"array",items:{$ref:"#/components/schemas/PaymentMethod"}},customer:{$ref:"#/components/schemas/Customer"},approver:{$ref:"#/components/schemas/Customer"},canceler:{$ref:"#/components/schemas/Customer"},created_by:{$ref:"#/components/schemas/Customer"},adjustments:{type:"array",items:{$ref:"#/components/schemas/Adjustment"}},return_authorizations:{type:"array",items:{$ref:"#/components/schemas/ReturnAuthorization"}},reimbursements:{type:"array",items:{$ref:"#/components/schemas/Reimbursement"}}},required:["id","market_id","channel_id","number","email","customer_note","currency","locale","total_quantity","fulfillment_status","payment_status","completed_at","item_total","display_item_total","adjustment_total","display_adjustment_total","discount_total","display_discount_total","tax_total","display_tax_total","included_tax_total","display_included_tax_total","additional_tax_total","display_additional_tax_total","total","display_total","gift_card_total","display_gift_card_total","amount_due","display_amount_due","delivery_total","display_delivery_total","store_credit_total","display_store_credit_total","covered_by_store_credit","gift_card","market","status","last_ip_address","considered_risky","confirmation_delivered","store_owner_notification_delivered","payment_total","display_payment_total","metadata","canceled_at","approved_at","created_at","updated_at","preferred_stock_location_id","tags","internal_note","approver_id","canceler_id","created_by_id","customer_id"],"x-typelizer":!0},PaymentMethod:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},type:{type:"string"},session_required:{type:"boolean"},source_required:{type:"boolean"},metadata:{type:"object"},active:{type:"boolean"},auto_capture:{type:"boolean",nullable:!0},storefront_visible:{type:"boolean"},position:{type:"number"},created_at:{type:"string"},updated_at:{type:"string"},preferences:{type:"object"},preference_schema:{type:"object"}},required:["id","name","description","type","session_required","source_required","metadata","active","auto_capture","storefront_visible","position","created_at","updated_at","preferences","preference_schema"],"x-typelizer":!0},Payment:{type:"object",properties:{id:{type:"string"},payment_method_id:{type:"string"},response_code:{type:"string",nullable:!0},number:{type:"string"},amount:{type:"string"},display_amount:{type:"string"},status:{type:"string"},source_type:{type:"string",nullable:!0,enum:["credit_card","store_credit","payment_source"]},source_id:{type:"string",nullable:!0},source:{anyOf:[{$ref:"#/components/schemas/CreditCard"},{$ref:"#/components/schemas/StoreCredit"},{$ref:"#/components/schemas/PaymentSource"}],nullable:!0},payment_method:{$ref:"#/components/schemas/PaymentMethod"},metadata:{type:"object"},avs_response:{type:"string",nullable:!0},cvv_response_code:{type:"string",nullable:!0},cvv_response_message:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},captured_amount:{type:"string"},order_id:{type:"string",nullable:!0},order:{$ref:"#/components/schemas/Order"},refunds:{type:"array",items:{$ref:"#/components/schemas/Refund"}}},required:["id","payment_method_id","response_code","number","amount","display_amount","status","source_type","source_id","source","metadata","avs_response","cvv_response_code","cvv_response_message","created_at","updated_at","captured_amount","order_id"],"x-typelizer":!0},PaymentSource:{type:"object",properties:{id:{type:"string"},gateway_payment_profile_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","gateway_payment_profile_id","metadata","created_at","updated_at"],"x-typelizer":!0},PriceHistory:{type:"object",properties:{id:{type:"string"},amount:{type:"string"},amount_in_cents:{type:"number"},currency:{type:"string"},display_amount:{type:"string"},recorded_at:{type:"string"},variant_id:{type:"string"},price_id:{type:"string"},compare_at_amount:{type:"string",nullable:!0},created_at:{type:"string"}},required:["id","amount","amount_in_cents","currency","display_amount","recorded_at","variant_id","price_id","compare_at_amount","created_at"],"x-typelizer":!0},PriceList:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},status:{type:"string"},position:{type:"number"},match_policy:{type:"string"},starts_at:{type:"string",nullable:!0},ends_at:{type:"string",nullable:!0},deleted_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},currently_active:{type:"boolean"},products_count:{type:"number"},prices_count:{type:"number"},product_ids:{type:"array",items:{type:"string"}},price_rules:{type:"array",items:{$ref:"#/components/schemas/PriceRule"}}},required:["id","name","description","status","position","match_policy","starts_at","ends_at","deleted_at","created_at","updated_at","currently_active","products_count","prices_count","product_ids"],"x-typelizer":!0},PriceRule:{type:"object",properties:{id:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string"},price_list_id:{type:"string"},preferences:{type:"object"},preference_schema:{type:"array",items:{$ref:"#/components/schemas/PreferenceField"}},label:{type:"string"},description:{type:"string",nullable:!0},markets:{type:"array",items:{$ref:"#/components/schemas/Market"}},customer_groups:{type:"array",items:{$ref:"#/components/schemas/CustomerGroup"}},channels:{type:"array",items:{$ref:"#/components/schemas/Channel"}},customers:{type:"array",items:{$ref:"#/components/schemas/Customer"}}},required:["id","created_at","updated_at","type","price_list_id","preferences","preference_schema","label","description"],"x-typelizer":!0},Price:{type:"object",properties:{id:{type:"string"},amount:{type:"string",nullable:!0},amount_in_cents:{type:"number",nullable:!0},compare_at_amount:{type:"string",nullable:!0},compare_at_amount_in_cents:{type:"number",nullable:!0},currency:{type:"string",nullable:!0},display_amount:{type:"string",nullable:!0},display_compare_at_amount:{type:"string",nullable:!0},price_list_id:{type:"string",nullable:!0},variant_id:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},variant:{$ref:"#/components/schemas/Variant"}},required:["id","amount","amount_in_cents","compare_at_amount","compare_at_amount_in_cents","currency","display_amount","display_compare_at_amount","price_list_id","variant_id","created_at","updated_at"],"x-typelizer":!0},ProductPublication:{type:"object",properties:{id:{type:"string"},published_at:{type:"string",nullable:!0},unpublished_at:{type:"string",nullable:!0},product_id:{type:"string"},channel_id:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","published_at","unpublished_at","product_id","channel_id","created_at","updated_at"],"x-typelizer":!0},Product:{type:"object",properties:{id:{type:"string"},name:{type:"string"},slug:{type:"string"},meta_title:{type:"string",nullable:!0},meta_description:{type:"string",nullable:!0},meta_keywords:{type:"string",nullable:!0},variant_count:{type:"number"},available_on:{type:"string",nullable:!0},preorder_ships_at:{type:"string",nullable:!0},purchasable:{type:"boolean"},preorder:{type:"boolean"},in_stock:{type:"boolean"},backorderable:{type:"boolean"},available:{type:"boolean"},description:{type:"string",nullable:!0},description_html:{type:"string",nullable:!0},default_variant_id:{type:"string"},thumbnail_url:{type:"string",nullable:!0},tags:{type:"array",items:{type:"string"}},price:{allOf:[{$ref:"#/components/schemas/Price"}],nullable:!0},original_price:{allOf:[{$ref:"#/components/schemas/Price"}],nullable:!0},primary_media:{$ref:"#/components/schemas/Media"},media:{type:"array",items:{$ref:"#/components/schemas/Media"}},variants:{type:"array",items:{$ref:"#/components/schemas/Variant"}},default_variant:{$ref:"#/components/schemas/Variant"},option_types:{type:"array",items:{$ref:"#/components/schemas/OptionType"}},option_values:{type:"array",items:{$ref:"#/components/schemas/OptionValue"}},categories:{type:"array",items:{$ref:"#/components/schemas/Category"}},custom_fields:{type:"array",items:{$ref:"#/components/schemas/CustomField"}},prior_price:{allOf:[{$ref:"#/components/schemas/PriceHistory"}],nullable:!0},translations:{type:"object"},status:{type:"string"},metadata:{type:"object"},deleted_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},tax_category_id:{type:"string",nullable:!0},product_publications:{type:"array",items:{$ref:"#/components/schemas/ProductPublication"}},channels:{type:"array",items:{$ref:"#/components/schemas/Channel"}}},required:["id","name","slug","meta_title","meta_description","meta_keywords","variant_count","available_on","preorder_ships_at","purchasable","preorder","in_stock","backorderable","available","description","description_html","default_variant_id","thumbnail_url","tags","price","original_price","status","metadata","deleted_at","created_at","updated_at","tax_category_id"],"x-typelizer":!0},PromotionAction:{type:"object",properties:{id:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string"},promotion_id:{type:"string"},preferences:{type:"object"},preference_schema:{type:"array",items:{$ref:"#/components/schemas/PreferenceField"}},label:{type:"string"},calculator:{allOf:[{$ref:"#/components/schemas/PromotionActionCalculator"}],nullable:!0},line_items:{type:"array",items:{$ref:"#/components/schemas/PromotionActionLineItem"},nullable:!0}},required:["id","created_at","updated_at","type","promotion_id","preferences","preference_schema","label","calculator","line_items"],"x-typelizer":!0},PromotionRule:{type:"object",properties:{id:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},type:{type:"string"},promotion_id:{type:"string"},preferences:{type:"object"},preference_schema:{type:"array",items:{$ref:"#/components/schemas/PreferenceField"}},label:{type:"string"},product_ids:{type:"array",items:{type:"string"},nullable:!0},category_ids:{type:"array",items:{type:"string"},nullable:!0},customer_ids:{type:"array",items:{type:"string"},nullable:!0},products:{type:"array",items:{$ref:"#/components/schemas/Product"}},categories:{type:"array",items:{$ref:"#/components/schemas/Category"}},customers:{type:"array",items:{$ref:"#/components/schemas/Customer"}},customer_groups:{type:"array",items:{$ref:"#/components/schemas/CustomerGroup"}},countries:{type:"array",items:{$ref:"#/components/schemas/Country"}},channels:{type:"array",items:{$ref:"#/components/schemas/Channel"}},markets:{type:"array",items:{$ref:"#/components/schemas/Market"}}},required:["id","created_at","updated_at","type","promotion_id","preferences","preference_schema","label","product_ids","category_ids","customer_ids"],"x-typelizer":!0},Promotion:{type:"object",properties:{id:{type:"string"},name:{type:"string"},description:{type:"string",nullable:!0},code:{type:"string",nullable:!0},starts_at:{type:"string",nullable:!0},expires_at:{type:"string",nullable:!0},usage_limit:{type:"number",nullable:!0},match_policy:{type:"string",enum:["all","any"]},path:{type:"string",nullable:!0},kind:{type:"string",enum:["coupon_code","automatic"]},multi_codes:{type:"boolean"},number_of_codes:{type:"number",nullable:!0},code_prefix:{type:"string",nullable:!0},promotion_category_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},action_ids:{type:"array",items:{type:"string"}},rule_ids:{type:"array",items:{type:"string"}}},required:["id","name","description","code","starts_at","expires_at","usage_limit","match_policy","path","kind","multi_codes","number_of_codes","code_prefix","promotion_category_id","metadata","created_at","updated_at","action_ids","rule_ids"],"x-typelizer":!0},Refund:{type:"object",properties:{id:{type:"string"},transaction_id:{type:"string",nullable:!0},amount:{type:"string",nullable:!0},payment_id:{type:"string",nullable:!0},refund_reason_id:{type:"string",nullable:!0},reimbursement_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},payment:{$ref:"#/components/schemas/Payment"},reimbursement:{$ref:"#/components/schemas/Reimbursement"}},required:["id","transaction_id","amount","payment_id","refund_reason_id","reimbursement_id","metadata","created_at","updated_at"],"x-typelizer":!0},Reimbursement:{type:"object",properties:{id:{type:"string"},number:{type:"string"},reimbursement_status:{type:"string",nullable:!0},total:{type:"string",nullable:!0},order_id:{type:"string",nullable:!0},customer_return_id:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},order:{$ref:"#/components/schemas/Order"}},required:["id","number","reimbursement_status","total","order_id","customer_return_id","created_at","updated_at"],"x-typelizer":!0},ReturnAuthorization:{type:"object",properties:{id:{type:"string"},number:{type:"string"},status:{type:"string"},order_id:{type:"string",nullable:!0},stock_location_id:{type:"string",nullable:!0},return_authorization_reason_id:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},order:{$ref:"#/components/schemas/Order"},stock_location:{$ref:"#/components/schemas/StockLocation"}},required:["id","number","status","order_id","stock_location_id","return_authorization_reason_id","created_at","updated_at"],"x-typelizer":!0},Role:{type:"object",properties:{id:{type:"string"},name:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","created_at","updated_at"],"x-typelizer":!0},SetupTask:{type:"object",properties:{name:{type:"string"},done:{type:"boolean"}},required:["name","done"],"x-typelizer":!0},State:{type:"object",properties:{abbr:{type:"string"},name:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"}},required:["abbr","name","created_at","updated_at"],"x-typelizer":!0},StockItem:{type:"object",properties:{id:{type:"string"},count_on_hand:{type:"number"},backorderable:{type:"boolean"},stock_location_id:{type:"string",nullable:!0},variant_id:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},allocated_count:{type:"number"},available_count:{type:"number"},stock_location:{$ref:"#/components/schemas/StockLocation"},variant:{$ref:"#/components/schemas/Variant"}},required:["id","count_on_hand","backorderable","stock_location_id","variant_id","metadata","created_at","updated_at","allocated_count","available_count"],"x-typelizer":!0},StockLocation:{type:"object",properties:{id:{type:"string"},state_abbr:{type:"string",nullable:!0},name:{type:"string"},address1:{type:"string",nullable:!0},city:{type:"string",nullable:!0},zipcode:{type:"string",nullable:!0},country_iso:{type:"string",nullable:!0},country_name:{type:"string",nullable:!0},state_text:{type:"string",nullable:!0},admin_name:{type:"string",nullable:!0},address2:{type:"string",nullable:!0},state_name:{type:"string",nullable:!0},phone:{type:"string",nullable:!0},company:{type:"string",nullable:!0},active:{type:"boolean"},default:{type:"boolean"},backorderable_default:{type:"boolean"},propagate_all_variants:{type:"boolean"},kind:{type:"string"},pickup_enabled:{type:"boolean"},pickup_stock_policy:{type:"string"},pickup_ready_in_minutes:{type:"number",nullable:!0},pickup_instructions:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","state_abbr","name","address1","city","zipcode","country_iso","country_name","state_text","admin_name","address2","state_name","phone","company","active","default","backorderable_default","propagate_all_variants","kind","pickup_enabled","pickup_stock_policy","pickup_ready_in_minutes","pickup_instructions","created_at","updated_at"],"x-typelizer":!0},StockReservation:{type:"object",properties:{id:{type:"string"},stock_item_id:{type:"string"},line_item_id:{type:"string"},order_id:{type:"string"},variant_id:{type:"string",nullable:!0},stock_location_id:{type:"string",nullable:!0},quantity:{type:"number"},expires_at:{type:"string"},active:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","stock_item_id","line_item_id","order_id","variant_id","stock_location_id","quantity","expires_at","active","created_at","updated_at"],"x-typelizer":!0},StockTransfer:{type:"object",properties:{id:{type:"string"},number:{type:"string"},reference:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},source_location_id:{type:"string",nullable:!0},destination_location_id:{type:"string",nullable:!0},source_location:{$ref:"#/components/schemas/StockLocation"},destination_location:{$ref:"#/components/schemas/StockLocation"}},required:["id","number","reference","metadata","created_at","updated_at","source_location_id","destination_location_id"],"x-typelizer":!0},StoreCreditCategory:{type:"object",properties:{id:{type:"string"},name:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},non_expiring:{type:"boolean"}},required:["id","name","created_at","updated_at","non_expiring"],"x-typelizer":!0},StoreCredit:{type:"object",properties:{id:{type:"string"},amount:{type:"string"},amount_used:{type:"string"},amount_remaining:{type:"string"},display_amount:{type:"string"},display_amount_used:{type:"string"},display_amount_remaining:{type:"string"},currency:{type:"string"},memo:{type:"string",nullable:!0},metadata:{type:"object"},created_at:{type:"string"},updated_at:{type:"string"},customer_id:{type:"string",nullable:!0},created_by_id:{type:"string",nullable:!0},category_id:{type:"string",nullable:!0},category_name:{type:"string",nullable:!0}},required:["id","amount","amount_used","amount_remaining","display_amount","display_amount_used","display_amount_remaining","currency","memo","metadata","created_at","updated_at","customer_id","created_by_id","category_id","category_name"],"x-typelizer":!0},Store:{type:"object",properties:{id:{type:"string"},metadata:{type:"object"},name:{type:"string"},code:{type:"string"},preferred_storefront_url:{type:"string",nullable:!0},default_currency:{type:"string"},default_locale:{type:"string"},mail_from_address:{type:"string",nullable:!0},customer_support_email:{type:"string",nullable:!0},new_order_notifications_email:{type:"string",nullable:!0},preferred_send_consumer_transactional_emails:{type:"boolean"},preferred_admin_locale:{type:"string",nullable:!0},preferred_timezone:{type:"string"},preferred_weight_unit:{type:"string"},preferred_unit_system:{type:"string"},preferred_storefront_access:{type:"string"},preferred_guest_checkout:{type:"boolean"},preferred_order_routing_strategy:{type:"string"},created_at:{type:"string"},updated_at:{type:"string"},url:{type:"string"},api_url:{type:"string"},setup_tasks:{type:"array",items:{$ref:"#/components/schemas/SetupTask"}},supported_currencies:{type:"array",items:{type:"string"}},supported_locales:{type:"array",items:{type:"string"}},available_locales:{type:"array",items:{type:"string"}},logo_url:{type:"string",nullable:!0},mailer_logo_url:{type:"string",nullable:!0}},required:["id","metadata","name","code","preferred_storefront_url","default_currency","default_locale","mail_from_address","customer_support_email","new_order_notifications_email","preferred_send_consumer_transactional_emails","preferred_admin_locale","preferred_timezone","preferred_weight_unit","preferred_unit_system","preferred_storefront_access","preferred_guest_checkout","preferred_order_routing_strategy","created_at","updated_at","url","api_url","setup_tasks","supported_currencies","supported_locales","available_locales","logo_url","mailer_logo_url"],"x-typelizer":!0},TaxCategory:{type:"object",properties:{id:{type:"string"},name:{type:"string"},tax_code:{type:"string",nullable:!0},description:{type:"string",nullable:!0},is_default:{type:"boolean"},created_at:{type:"string"},updated_at:{type:"string"}},required:["id","name","tax_code","description","is_default","created_at","updated_at"],"x-typelizer":!0},Variant:{type:"object",properties:{id:{type:"string"},product_id:{type:"string"},sku:{type:"string",nullable:!0},options_text:{type:"string"},track_inventory:{type:"boolean"},media_count:{type:"number"},preorder_ships_at:{type:"string",nullable:!0},thumbnail_url:{type:"string",nullable:!0},purchasable:{type:"boolean"},in_stock:{type:"boolean"},backorderable:{type:"boolean"},preorder:{type:"boolean"},weight:{type:"number",nullable:!0},height:{type:"number",nullable:!0},width:{type:"number",nullable:!0},depth:{type:"number",nullable:!0},price:{$ref:"#/components/schemas/Price"},original_price:{allOf:[{$ref:"#/components/schemas/Price"}],nullable:!0},primary_media:{$ref:"#/components/schemas/Media"},media:{type:"array",items:{$ref:"#/components/schemas/Media"}},option_values:{type:"array",items:{$ref:"#/components/schemas/OptionValue"}},custom_fields:{type:"array",items:{$ref:"#/components/schemas/CustomField"}},prior_price:{allOf:[{$ref:"#/components/schemas/PriceHistory"}],nullable:!0},metadata:{type:"object"},position:{type:"number"},cost_price:{type:"string",nullable:!0},cost_currency:{type:"string",nullable:!0},barcode:{type:"string",nullable:!0},weight_unit:{type:"string",nullable:!0},dimensions_unit:{type:"string",nullable:!0},backorder_limit:{type:"number",nullable:!0},deleted_at:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},preorderable:{type:"boolean"},tax_category_id:{type:"string",nullable:!0},available_stock:{type:"number",nullable:!0},reserved_quantity:{type:"number"},total_on_hand:{type:"number",nullable:!0},product_name:{type:"string"},prices:{type:"array",items:{$ref:"#/components/schemas/Price"}},stock_items:{type:"array",items:{$ref:"#/components/schemas/StockItem"}}},required:["id","product_id","sku","options_text","track_inventory","media_count","preorder_ships_at","thumbnail_url","purchasable","in_stock","backorderable","preorder","weight","height","width","depth","price","original_price","option_values","metadata","position","cost_price","cost_currency","barcode","weight_unit","dimensions_unit","backorder_limit","deleted_at","created_at","updated_at","preorderable","tax_category_id","available_stock","reserved_quantity","total_on_hand","product_name"],"x-typelizer":!0},WebhookDelivery:{type:"object",properties:{id:{type:"string"},event_name:{type:"string"},event_id:{type:"string",nullable:!0},response_code:{type:"number",nullable:!0},execution_time:{type:"number",nullable:!0},error_type:{type:"string",nullable:!0},request_errors:{type:"string",nullable:!0},response_body:{type:"string",nullable:!0},success:{type:"boolean",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},delivered_at:{type:"string",nullable:!0},payload:{type:"object"},webhook_endpoint_id:{type:"string"},webhook_endpoint_url:{type:"string"}},required:["id","event_name","event_id","response_code","execution_time","error_type","request_errors","response_body","success","created_at","updated_at","delivered_at","payload","webhook_endpoint_id","webhook_endpoint_url"],"x-typelizer":!0},WebhookEndpoint:{type:"object",properties:{id:{type:"string"},name:{type:"string",nullable:!0},url:{type:"string"},active:{type:"boolean"},subscriptions:{type:"array",items:{type:"string"}},disabled_reason:{type:"string",nullable:!0},created_at:{type:"string"},updated_at:{type:"string"},disabled_at:{type:"string",nullable:!0},secret_key:{type:"string",nullable:!0},last_delivery_at:{type:"string",nullable:!0},recent_delivery_count:{type:"number"},recent_failure_count:{type:"number"},total_delivery_count:{type:"number"},successful_delivery_count:{type:"number"},failed_delivery_count:{type:"number"}},required:["id","name","url","active","subscriptions","disabled_reason","created_at","updated_at","disabled_at","secret_key","last_delivery_at","recent_delivery_count","recent_failure_count","total_delivery_count","successful_delivery_count","failed_delivery_count"],"x-typelizer":!0}}}};var eh=new Set(["get","post","put","patch","delete"]);function On(){return Zm}function oS(e){let t=e.description?.match(/\*\*Required scope:\*\* (.+?) \(for API-key authentication\)\./);return t?t[1].replaceAll("`",""):"\u2014"}function th(e,t={}){let r=[];for(let[i,n]of Object.entries(e.paths)){let s=i.replace("/api/v3/admin","")||"/";for(let[o,a]of Object.entries(n)){if(!eh.has(o))continue;if(t.resource){let d=s.split("/")[1]??"";if(d!==t.resource&&!d.startsWith(t.resource))continue}let c=a.summary??"";t.search&&!`${o} ${s} ${c}`.toLowerCase().includes(t.search.toLowerCase())||r.push({method:o.toUpperCase(),path:s,scope:oS(a),summary:c})}}return r}function rh(e,t){let r=t.trim().split(/\s+/),i=r.length>1?r[0].toLowerCase():void 0,n=r.length>1?r[1]:r[0],s=Ur(n),o=Qm(e,i,a=>a===s);return o.length>0?o:Qm(e,i,a=>aS(a,s))}function Qm(e,t,r){let i=[];for(let[n,s]of Object.entries(e.paths)){let o=n.replace("/api/v3/admin","")||"/";if(r(o))for(let[a,c]of Object.entries(s))eh.has(a)&&(t&&a!==t||i.push({method:a.toUpperCase(),path:o,summary:c.summary,description:c.description,parameters:er(c.parameters,e),requestBody:er(c.requestBody,e),responses:er(c.responses,e)}))}return i}function aS(e,t){if(e===t)return!0;let r=e.split("/"),i=t.split("/");return r.length!==i.length?!1:r.every((n,s)=>n.startsWith("{")&&n.endsWith("}")?i[s].length>0:n===i[s])}var cS=8;function er(e,t,r=[]){if(Array.isArray(e))return e.map(o=>er(o,t,r));if(!e||typeof e!="object")return e;let i=e,n=i.$ref;if(typeof n=="string"){let o=n.replace("#/components/schemas/","");return r.includes(o)||r.length>=cS||!(o in t.components.schemas)?{$ref:n}:er(t.components.schemas[o],t,[...r,o])}let s={};for(let[o,a]of Object.entries(i))s[o]=er(a,t,r);return s}function pS(e,t){return[...t,e]}function oh(e){return e.option("--profile <name>","use a saved profile (see `spree auth`)").option("--base-url <url>","store URL (overrides profile/env/project)").option("--api-key <key>","secret API key (prefer SPREE_API_KEY \u2014 flags leak into shell history)").option("--store-id <id>","X-Spree-Store-Id for hosts serving multiple stores")}function ah(){return new Ua("--format <format>","output format").choices(["json","table"]).default("json")}function ih(e){return oh(e).addOption(ah())}async function nh(e){let t=await Tr({baseUrl:e.baseUrl,apiKey:e.apiKey,profile:e.profile});return{client:Ir({baseUrl:t.baseUrl,secretKey:t.apiKey,...e.storeId?{storeId:e.storeId}:{}}),credentials:t}}function ch(e){let t=e.command("api").description("Call the Admin API directly (generic get/post/patch/delete)");t.addHelpText("after",["","Examples:"," spree api get /products -q status_eq=active --limit 10",` spree api post /products -d '{"name":"Classic Tee","prices":[{"currency":"USD","amount":"29.99"}]}'`," spree api get /orders/ord_x8k2J9aQ --expand items,payments","","Discover the surface (offline, no server needed):"," spree api endpoints --search <term> # find endpoints + required scopes",' spree api schema "POST /orders" # request/response schema for one operation'," spree completion zsh # tab-completion for paths, filters, scopes"].join(`
361
+ `)),ih(t.command("get <path>").description("GET an Admin API path, e.g. `spree api get /products -q status_eq=active`").option("-q, --query <expr>","Ransack predicate key=value (repeatable)",pS,[]).option("--sort <fields>","sort, e.g. -created_at").option("--page <n>","page number").option("--limit <n>","page size (max 100)").option("--expand <relations>","expand relations, e.g. variants,variants.prices").option("--fields <fields>","sparse fields, e.g. id,name")).action(async(r,i)=>{let n;try{let s=Jm(i),{client:o,credentials:a}=await nh(i);n=a.baseUrl;let c=await o.request("GET",Ur(r),{params:s});Br(c,i.format)}catch(s){Et(s,{baseUrl:n})}});for(let r of["post","patch","delete"])ih(t.command(`${r} <path>`).description(`${r.toUpperCase()} an Admin API path`).option("-d, --data <json>","request body: inline JSON, @file, or '-' for stdin")).action(async(i,n)=>{let s;try{let o=await Hm(n.data),{client:a,credentials:c}=await nh(n);s=c.baseUrl;let d=await a.request(r.toUpperCase(),Ur(i),{...o===_a?{}:{body:o}});Br(d,n.format)}catch(o){Et(o,{baseUrl:s})}});t.command("endpoints").description("List Admin API endpoints with their required scopes").option("--resource <name>","filter by first path segment, e.g. orders").option("--search <term>","filter by method, path, or summary").addOption(ah()).action(r=>{let i=th(On(),{resource:r.resource,search:r.search});if(i.length===0){process.stderr.write(`No endpoints match.
362
+ `),process.exitCode=1;return}if(r.format==="table"){(0,sh.printTable)(i.map(n=>({Method:n.method,Path:n.path,Scope:n.scope,Summary:n.summary})));return}Br(i,"json")}),t.command("schema <operation>").description('Show the request/response schema for an operation, e.g. `spree api schema "POST /products"`').action(r=>{let i=rh(On(),r);if(i.length===0){process.stderr.write(`No operation matches "${r}". Try \`spree api endpoints --search ${r.split(/\s+/).pop()}\`.
363
+ `),process.exitCode=1;return}let n=/\s/.test(r.trim());Br(n&&i.length===1?i[0]:i,"json")}),oh(t.command("status").description("Show resolved credentials, server reachability, and the bundled spec version")).action(async r=>{try{let i=await Tr({baseUrl:r.baseUrl,apiKey:r.apiKey,profile:r.profile},{allowMint:!1}),n=await Nr(i.baseUrl,i.apiKey),s=On(),o=In(n),a=[`${Pe.default.bold("Base URL:")} ${i.baseUrl}`,`${Pe.default.bold("Credentials:")} ${i.source}${i.profileName?` (${i.profileName})`:""}, key ${i.tokenPrefix}${Pe.default.dim("\u2026")}`],c=n.status==="unreachable"||n.status==="unauthorized"?null:await Xm(i.baseUrl,i.apiKey);c!==null?a.push(`${Pe.default.bold("Scopes:")} ${c.length?c.join(", "):Pe.default.dim("(none)")}`):i.scopes?.length&&a.push(`${Pe.default.bold("Scopes:")} ${i.scopes.join(", ")} ${Pe.default.dim("(local snapshot from mint time \u2014 may be stale)")}`),a.push(`${Pe.default.bold("Server:")} ${o}`),a.push(`${Pe.default.bold("Bundled spec:")} ${s.info?.version??"unknown"} ${Pe.default.dim("(spree api endpoints/schema reflect this snapshot, not the live server)")}`),process.stdout.write(`${a.join(`
364
364
  `)}
365
- `),Tn(n)&&(process.exitCode=1)}catch(i){Et(i,{baseUrl:r.baseUrl})}})}var ph=D(Mr(),1),rt=D(K(),1);function dh(e){let t=e.command("api-key").description("Manage API keys");t.command("create").description("Create an API key").option("--name <name>","key name").option("--type <type>","key type: publishable or secret").option("--scopes <scopes>","comma-separated scopes for secret keys (e.g. read_all or read_orders,write_products)").action(async r=>{let i=_(),n=r.name,s=r.type,o=r.scopes;if(!n){let m=await de({message:"Key name:",placeholder:"My Storefront",validate(h){if(!h)return"Name is required"}});L(m)&&(O("Cancelled."),process.exit(0)),n=m}if(!s){let m=await yi({message:"Key type:",options:[{value:"publishable",label:"Publishable (for storefronts)"},{value:"secret",label:"Secret (for server-to-server)"}]});L(m)&&(O("Cancelled."),process.exit(0)),s=m}if(s!=="publishable"&&s!=="secret")throw new Error('Key type must be "publishable" or "secret".');if(s==="secret"&&!o){let m=await de({message:"Scopes (comma-separated):",placeholder:"read_all",initialValue:"read_all",validate(h){if(!h)return"Secret keys require at least one scope"}});L(m)&&(O("Cancelled."),process.exit(0)),o=m}let a=E();a.start("Creating API key...");let c=await ie("spree:cli:create_api_key",i.projectDir,{NAME:n,KEY_TYPE:s,...s==="secret"&&o?{SCOPES:o}:{}}),d=s==="publishable"?"pk_":"sk_",p=c.match(new RegExp(`${d}[A-Za-z0-9_-]+`)),u=p?p[0]:c.trim();a.stop("API key created.");let l=[`${rt.default.bold("Name:")} ${n}`,`${rt.default.bold("Type:")} ${s}`,`${rt.default.bold("Token:")} ${rt.default.cyan(u)}`];s==="secret"&&(l.push(`${rt.default.bold("Scopes:")} ${o}`),l.push(""),l.push(rt.default.yellow("Save this token now \u2014 secret keys cannot be retrieved later."))),W(l.join(`
366
- `),"API Key")}),t.command("list").description("List API keys").action(async()=>{let r=_(),i=E();i.start("Fetching API keys...");let n=await ie("spree:cli:list_api_keys",r.projectDir);i.stop("");let s=n.trim().split(`
367
- `).filter(Boolean);if(s.length===0){b.info("No API keys found.");return}let o=s.map(a=>{let[c,d,p,u,l,m]=a.split("|");return{ID:c??"",Name:d??"",Type:p??"",Token:u??"",Created:l??"",Status:m==="active"?rt.default.green(m):rt.default.red(m??"")}});(0,ph.printTable)(o)}),t.command("revoke").description("Revoke an API key").argument("<id>","ID of the key to revoke (from api-key list)").action(async r=>{let i=_(),n=E();n.start("Revoking API key...");let o=(await ie("spree:cli:revoke_api_key",i.projectDir,{ID:r})).trim();n.stop(`API key "${o}" revoked.`)})}var uh=D(Mr(),1),re=D(K(),1);function lh(e){let t=e.command("auth").description("Manage Admin API credentials (profiles in ~/.config/spree)");t.command("login").description("Save a secret API key as a named profile").option("--profile <name>","profile name","default").option("--base-url <url>","store URL, e.g. https://store.example.com").action(async r=>{process.stdin.isTTY||(process.stderr.write(`${re.default.red("error:")} \`spree auth login\` is interactive. For non-interactive use, set SPREE_BASE_URL + SPREE_API_KEY (or pass --base-url/--api-key to \`spree api\`).
368
- `),process.exit(2));let i=r.baseUrl;if(!i){let d=await de({message:"Store URL:",placeholder:"https://store.example.com",validate(p){if(!p)return"URL is required";if(!/^https?:\/\//.test(p))return"Must start with http:// or https://"}});L(d)&&(O("Cancelled."),process.exit(130)),i=d}i=i.replace(/\/$/,"");let n=await hi({message:"Secret API key (sk_...):",validate(d){if(!d)return"Key is required";if(!d.startsWith("sk_"))return"Admin API keys start with sk_"}});L(n)&&(O("Cancelled."),process.exit(130));let s=n,o=E();o.start("Validating credentials...");let a=await Ur(i,s);a.status==="unauthorized"&&(o.stop(re.default.red("The server rejected this key (401). Check the key and try again.")),process.exit(2)),a.status==="unreachable"&&(o.stop(re.default.red(`Could not reach ${i}: ${a.message}`)),process.exit(2)),o.stop(a.storeName?`Connected to ${re.default.bold(a.storeName)}.`:"Credentials accepted (key lacks read_settings, so the store name is hidden \u2014 that is fine).");let c=Er();c.profiles[r.profile]={baseUrl:i,token:s},c.defaultProfile||=r.profile,Zo(c),W([`${re.default.bold("Profile:")} ${r.profile}${c.defaultProfile===r.profile?re.default.dim(" (default)"):""}`,`${re.default.bold("Base URL:")} ${i}`,`${re.default.bold("Key:")} ${En(s)}${re.default.dim("\u2026")}`,"",re.default.dim(`Saved to ${St()}`)].join(`
369
- `),"Logged in")}),t.command("status").description("Show which credentials `spree api` would use, and verify them").option("--profile <name>","check a specific profile").action(async r=>{let i;try{i=await Pr({profile:r.profile},{allowMint:!1})}catch(a){Et(a)}let n=E();n.start("Checking server...");let s=await Ur(i.baseUrl,i.apiKey);n.stop("");let o=Rn(s);W([`${re.default.bold("Source:")} ${i.source}${i.profileName?` (${i.profileName})`:""}`,`${re.default.bold("Base URL:")} ${i.baseUrl}`,`${re.default.bold("Key:")} ${i.tokenPrefix}${re.default.dim("\u2026")}`,...i.scopes?[`${re.default.bold("Scopes:")} ${i.scopes.join(", ")}`]:[],`${re.default.bold("Server:")} ${o}`].join(`
370
- `),"Auth status"),Tn(s)&&(process.exitCode=1)}),t.command("logout").description("Remove a saved profile (or the project credentials)").option("--profile <name>","profile to remove","default").option("--project","remove .spree/credentials.json from the current project instead").action(async r=>{if(r.project){let n;try{n=_().projectDir}catch(o){Et(o)}(await import("fs")).rmSync(Kt(n),{force:!0}),b.success("Removed project credentials. The next `spree api` call mints a fresh read-only key.");return}let i=Er();if(!i.profiles[r.profile]){let n=Object.keys(i.profiles),s=n.length?` Saved profiles: ${n.join(", ")}.`:" No profiles are saved.";process.stderr.write(`${re.default.red("error:")} no profile named "${r.profile}".${s}
371
- `),process.exit(2)}delete i.profiles[r.profile],i.defaultProfile===r.profile&&(i.defaultProfile=Object.keys(i.profiles)[0]),Zo(i),b.success(`Removed profile "${r.profile}". The key itself stays active \u2014 revoke it with \`spree api-key revoke\` or in the admin.`)}),t.command("list").description("List saved profiles").action(()=>{let r=Er(),i=Object.keys(r.profiles);if(i.length===0){b.info("No profiles saved. Run `spree auth login` to add one.");return}(0,uh.printTable)(i.map(n=>({Profile:r.defaultProfile===n?`${n} *`:n,"Base URL":r.profiles[n].baseUrl,Key:`${En(r.profiles[n].token)}\u2026`})))})}import Nr from"fs";import tr from"path";var oe=D(K(),1);function mh(e){e.command("build").description("Rebuild the dev image (after Dockerfile / .ruby-version changes)").option("--reset-bundle","also wipe the bundle_cache volume to re-seed gems").option("--yes","skip confirmation prompts (for CI)").option("--production","build the production image instead \u2014 includes apps/dashboard when present").option("--tag <tag>","image tag for --production (default: <project>-spree:latest)").action(async t=>{if(t.production){await hS(_().projectDir,t.tag);return}await dS(t)})}async function dS(e){let t=_();if(Fe(t.projectDir)&&(O(["This project uses SPREE_PATH for monorepo development.",`Use ${oe.default.bold("pnpm server:build")} from the monorepo root instead of ${oe.default.bold("spree build")}.`,"It builds against the edge compose overlay the running stack was started with."].join(`
372
- `)),process.exit(1)),qr(t.projectDir)||(console.error(`
373
- ${oe.default.red("Error:")} docker-compose.yml has no \`build:\` section. Run ${oe.default.bold("spree eject")} first to switch to a build-from-source stack.
365
+ `),Rn(n)&&(process.exitCode=1)}catch(i){Et(i,{baseUrl:r.baseUrl})}})}var ph=D(Fr(),1),rt=D(K(),1);function dh(e){let t=e.command("api-key").description("Manage API keys");t.command("create").description("Create an API key").option("--name <name>","key name").option("--type <type>","key type: publishable or secret").option("--scopes <scopes>","comma-separated scopes for secret keys (e.g. read_all or read_orders,write_products)").action(async r=>{let i=_(),n=r.name,s=r.type,o=r.scopes;if(!n){let m=await ue({message:"Key name:",placeholder:"My Storefront",validate(h){if(!h)return"Name is required"}});L(m)&&(O("Cancelled."),process.exit(0)),n=m}if(!s){let m=await fi({message:"Key type:",options:[{value:"publishable",label:"Publishable (for storefronts)"},{value:"secret",label:"Secret (for server-to-server)"}]});L(m)&&(O("Cancelled."),process.exit(0)),s=m}if(s!=="publishable"&&s!=="secret")throw new Error('Key type must be "publishable" or "secret".');if(s==="secret"&&!o){let m=await ue({message:"Scopes (comma-separated):",placeholder:"read_all",initialValue:"read_all",validate(h){if(!h)return"Secret keys require at least one scope"}});L(m)&&(O("Cancelled."),process.exit(0)),o=m}let a=E();a.start("Creating API key...");let c=await ne("spree:cli:create_api_key",i.projectDir,{NAME:n,KEY_TYPE:s,...s==="secret"&&o?{SCOPES:o}:{}}),d=s==="publishable"?"pk_":"sk_",p=c.match(new RegExp(`${d}[A-Za-z0-9_-]+`)),u=p?p[0]:c.trim();a.stop("API key created.");let l=[`${rt.default.bold("Name:")} ${n}`,`${rt.default.bold("Type:")} ${s}`,`${rt.default.bold("Token:")} ${rt.default.cyan(u)}`];s==="secret"&&(l.push(`${rt.default.bold("Scopes:")} ${o}`),l.push(""),l.push(rt.default.yellow("Save this token now \u2014 secret keys cannot be retrieved later."))),W(l.join(`
366
+ `),"API Key")}),t.command("list").description("List API keys").action(async()=>{let r=_(),i=E();i.start("Fetching API keys...");let n=await ne("spree:cli:list_api_keys",r.projectDir);i.stop("");let s=n.trim().split(`
367
+ `).filter(Boolean);if(s.length===0){b.info("No API keys found.");return}let o=s.map(a=>{let[c,d,p,u,l,m]=a.split("|");return{ID:c??"",Name:d??"",Type:p??"",Token:u??"",Created:l??"",Status:m==="active"?rt.default.green(m):rt.default.red(m??"")}});(0,ph.printTable)(o)}),t.command("revoke").description("Revoke an API key").argument("<id>","ID of the key to revoke (from api-key list)").action(async r=>{let i=_(),n=E();n.start("Revoking API key...");let o=(await ne("spree:cli:revoke_api_key",i.projectDir,{ID:r})).trim();n.stop(`API key "${o}" revoked.`)})}var uh=D(Fr(),1),re=D(K(),1);function lh(e){let t=e.command("auth").description("Manage Admin API credentials (profiles in ~/.config/spree)");t.command("login").description("Save a secret API key as a named profile").option("--profile <name>","profile name","default").option("--base-url <url>","store URL, e.g. https://store.example.com").action(async r=>{process.stdin.isTTY||(process.stderr.write(`${re.default.red("error:")} \`spree auth login\` is interactive. For non-interactive use, set SPREE_BASE_URL + SPREE_API_KEY (or pass --base-url/--api-key to \`spree api\`).
368
+ `),process.exit(2));let i=r.baseUrl;if(!i){let d=await ue({message:"Store URL:",placeholder:"https://store.example.com",validate(p){if(!p)return"URL is required";if(!/^https?:\/\//.test(p))return"Must start with http:// or https://"}});L(d)&&(O("Cancelled."),process.exit(130)),i=d}i=i.replace(/\/$/,"");let n=await yi({message:"Secret API key (sk_...):",validate(d){if(!d)return"Key is required";if(!d.startsWith("sk_"))return"Admin API keys start with sk_"}});L(n)&&(O("Cancelled."),process.exit(130));let s=n,o=E();o.start("Validating credentials...");let a=await Nr(i,s);a.status==="unauthorized"&&(o.stop(re.default.red("The server rejected this key (401). Check the key and try again.")),process.exit(2)),a.status==="unreachable"&&(o.stop(re.default.red(`Could not reach ${i}: ${a.message}`)),process.exit(2)),o.stop(a.storeName?`Connected to ${re.default.bold(a.storeName)}.`:"Credentials accepted (key lacks read_settings, so the store name is hidden \u2014 that is fine).");let c=Pr();c.profiles[r.profile]={baseUrl:i,token:s},c.defaultProfile||=r.profile,Zo(c),W([`${re.default.bold("Profile:")} ${r.profile}${c.defaultProfile===r.profile?re.default.dim(" (default)"):""}`,`${re.default.bold("Base URL:")} ${i}`,`${re.default.bold("Key:")} ${Pn(s)}${re.default.dim("\u2026")}`,"",re.default.dim(`Saved to ${St()}`)].join(`
369
+ `),"Logged in")}),t.command("status").description("Show which credentials `spree api` would use, and verify them").option("--profile <name>","check a specific profile").action(async r=>{let i;try{i=await Tr({profile:r.profile},{allowMint:!1})}catch(a){Et(a)}let n=E();n.start("Checking server...");let s=await Nr(i.baseUrl,i.apiKey);n.stop("");let o=In(s);W([`${re.default.bold("Source:")} ${i.source}${i.profileName?` (${i.profileName})`:""}`,`${re.default.bold("Base URL:")} ${i.baseUrl}`,`${re.default.bold("Key:")} ${i.tokenPrefix}${re.default.dim("\u2026")}`,...i.scopes?[`${re.default.bold("Scopes:")} ${i.scopes.join(", ")}`]:[],`${re.default.bold("Server:")} ${o}`].join(`
370
+ `),"Auth status"),Rn(s)&&(process.exitCode=1)}),t.command("logout").description("Remove a saved profile (or the project credentials)").option("--profile <name>","profile to remove","default").option("--project","remove .spree/credentials.json from the current project instead").action(async r=>{if(r.project){let n;try{n=_().projectDir}catch(o){Et(o)}(await import("fs")).rmSync(Kt(n),{force:!0}),b.success("Removed project credentials. The next `spree api` call mints a fresh read-only key.");return}let i=Pr();if(!i.profiles[r.profile]){let n=Object.keys(i.profiles),s=n.length?` Saved profiles: ${n.join(", ")}.`:" No profiles are saved.";process.stderr.write(`${re.default.red("error:")} no profile named "${r.profile}".${s}
371
+ `),process.exit(2)}delete i.profiles[r.profile],i.defaultProfile===r.profile&&(i.defaultProfile=Object.keys(i.profiles)[0]),Zo(i),b.success(`Removed profile "${r.profile}". The key itself stays active \u2014 revoke it with \`spree api-key revoke\` or in the admin.`)}),t.command("list").description("List saved profiles").action(()=>{let r=Pr(),i=Object.keys(r.profiles);if(i.length===0){b.info("No profiles saved. Run `spree auth login` to add one.");return}(0,uh.printTable)(i.map(n=>({Profile:r.defaultProfile===n?`${n} *`:n,"Base URL":r.profiles[n].baseUrl,Key:`${Pn(r.profiles[n].token)}\u2026`})))})}import Gr from"fs";import tr from"path";var ae=D(K(),1);function mh(e){e.command("build").description("Rebuild the dev image (after Dockerfile / .ruby-version changes)").option("--reset-bundle","also wipe the bundle_cache volume to re-seed gems").option("--yes","skip confirmation prompts (for CI)").option("--production","build the production image instead \u2014 includes apps/dashboard when present").option("--tag <tag>","image tag for --production (default: <project>-spree:latest)").action(async t=>{if(t.production){await hS(_().projectDir,t.tag);return}await dS(t)})}async function dS(e){let t=_();if(Fe(t.projectDir)&&(O(["This project uses SPREE_PATH for monorepo development.",`Use ${ae.default.bold("pnpm server:build")} from the monorepo root instead of ${ae.default.bold("spree build")}.`,"It builds against the edge compose overlay the running stack was started with."].join(`
372
+ `)),process.exit(1)),$r(t.projectDir)||(console.error(`
373
+ ${ae.default.red("Error:")} docker-compose.yml has no \`build:\` section. Run ${ae.default.bold("spree eject")} first to switch to a build-from-source stack.
374
374
  `),process.exit(1)),e.resetBundle){if(!e.yes){let i=await Je({message:"Wipe the bundle_cache volume? Any gems added via `spree bundle add` since the last image build will be lost.",initialValue:!1});(L(i)||!i)&&(O("Build cancelled."),process.exit(0))}let r=E();r.start("Wiping bundle_cache volume...");try{await X(["down"],t.projectDir,{stdio:"ignore"});let n=`${await yS(t.projectDir)}_bundle_cache`;await fS(n,t.projectDir)?(await ee("docker",["volume","rm",n],{cwd:t.projectDir,stdio:"ignore"}),r.stop("bundle_cache volume wiped.")):r.stop(`bundle_cache volume not present (looked for ${n}).`)}catch(i){throw r.stop("Failed to wipe bundle_cache volume."),i}}console.log(`
375
- ${oe.default.bold("Rebuilding dev image...")}
376
- `),await X(["build",...await Be(t.projectDir)],t.projectDir,{stdio:"inherit"}),W([`Image rebuilt. Start the stack with ${oe.default.bold("spree dev")}.`,e.resetBundle?`On next boot, gems will re-seed into a fresh ${oe.default.dim("bundle_cache")} volume.`:""].filter(Boolean).join(`
377
- `),"Build complete")}function uS(e,t){let r=tr.join(e,"backend"),i=tr.join(r,"Dockerfile");if(!Nr.existsSync(i))throw new Error("No backend/Dockerfile found. Is this a create-spree-app project?");let n=t??`${tr.basename(e).toLowerCase().replace(/[^a-z0-9_-]/g,"")}-spree:latest`,s=Nr.existsSync(tr.join(e,"apps","dashboard","package.json"));return Nr.readFileSync(i,"utf-8").includes(".spree-custom-dashboard")?(lS(e),{args:["build",e,"-f",i,"-t",n],imageTag:n,dashboard:s?"custom":"stock-or-none"}):{args:["build",r,"-f",i,"-t",n],imageTag:n,dashboard:s?"unsupported-dockerfile":"stock-or-none"}}function lS(e){let t=tr.join(e,".dockerignore");Nr.existsSync(t)||Nr.writeFileSync(t,mS)}var mS=`# Build context for backend/Dockerfile (repo root): keep it to sources.
375
+ ${ae.default.bold("Rebuilding dev image...")}
376
+ `),await X(["build",...await Be(t.projectDir)],t.projectDir,{stdio:"inherit"}),W([`Image rebuilt. Start the stack with ${ae.default.bold("spree dev")}.`,e.resetBundle?`On next boot, gems will re-seed into a fresh ${ae.default.dim("bundle_cache")} volume.`:""].filter(Boolean).join(`
377
+ `),"Build complete")}function uS(e,t){let r=tr.join(e,"backend"),i=tr.join(r,"Dockerfile");if(!Gr.existsSync(i))throw new Error("No backend/Dockerfile found. Is this a create-spree-app project?");let n=t??`${tr.basename(e).toLowerCase().replace(/[^a-z0-9_-]/g,"")}-spree:latest`,s=Gr.existsSync(tr.join(e,"apps","dashboard","package.json"));return Gr.readFileSync(i,"utf-8").includes(".spree-custom-dashboard")?(lS(e),{args:["build",e,"-f",i,"-t",n],imageTag:n,dashboard:s?"custom":"stock-or-none"}):{args:["build",r,"-f",i,"-t",n],imageTag:n,dashboard:s?"unsupported-dockerfile":"stock-or-none"}}function lS(e){let t=tr.join(e,".dockerignore");Gr.existsSync(t)||Gr.writeFileSync(t,mS)}var mS=`# Build context for backend/Dockerfile (repo root): keep it to sources.
378
378
  **/node_modules
379
379
  **/.git
380
380
  .spree
@@ -386,11 +386,11 @@ backend/tmp
386
386
  backend/storage
387
387
  backend/.env*
388
388
  `;async function hS(e,t){let r;try{r=uS(e,t)}catch(i){console.error(`
389
- ${oe.default.red("Error:")} ${i instanceof Error?i.message:String(i)}
390
- `),process.exit(1)}r.dashboard==="custom"?b.info(`Including your dashboard from ${oe.default.bold("apps/dashboard/")} (built in-image).`):r.dashboard==="unsupported-dockerfile"&&b.warn(`${oe.default.bold("apps/dashboard/")} exists, but ${oe.default.bold("backend/Dockerfile")} predates dashboard support \u2014 the image will NOT include your dashboard. Update the Dockerfile from the spree-starter template to bake it in.`),console.log(`
391
- ${oe.default.bold(`Building production image ${r.imageTag}...`)}
392
- `),await ee("docker",r.args,{cwd:e,stdio:"inherit"}),W([`Run it: ${oe.default.cyan(`docker run --rm -p 3000:3000 ${r.imageTag}`)}`,`Push it: ${oe.default.cyan(`docker tag ${r.imageTag} <registry>/<repo> && docker push <registry>/<repo>`)}`,r.dashboard!=="unsupported-dockerfile"?`Dashboard: served at ${oe.default.bold("/dashboard")} on the same origin as the API.`:""].filter(Boolean).join(`
393
- `),"Production image built")}async function yS(e){try{let{stdout:t}=await ee("docker",["compose","config","--format","json"],{cwd:e}),r=JSON.parse(t);if(r.name)return r.name}catch{}return tr.basename(e).toLowerCase().replace(/[^a-z0-9_-]/g,"")}async function fS(e,t){try{return await ee("docker",["volume","inspect",e],{cwd:t,stdio:"ignore"}),!0}catch{return!1}}function hh(e){e.command("bundle").description("Run a bundler command (`bundle \u2026`) inside the web container").argument("<args...>","arguments to pass to bundle").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bundle",...t],r.projectDir,{edgeHint:"the edge stack heals gem drift on boot"})})}var yh=["/admin_users","/allowed_origins","/api_keys","/auth","/categories","/channels","/custom_field_definitions","/customer_groups","/customers","/exports","/gift_card_batches","/gift_cards","/imports","/invitations","/locales","/markets","/me","/option_types","/order_routing_rules","/orders","/payment_methods","/price_lists","/prices","/products","/promotion_actions","/promotion_rules","/promotions","/roles","/stock_locations","/store","/store_credit_categories","/tags","/translatable_resources","/translations","/webhook_endpoints"];var fh=["bash","zsh","fish"],_S=["eq","not_eq","cont","not_cont","start","end","in","not_in","gt","gteq","lt","lteq","null","not_null","present","blank"],bS=["get","post","patch","delete","endpoints","schema","status"],wS=["read_all","write_all","read_orders","write_orders","read_products","write_products","read_promotions","write_promotions","read_customers","write_customers","read_payments","write_payments","read_fulfillments","write_fulfillments","read_refunds","write_refunds","read_gift_cards","write_gift_cards","read_store_credits","write_store_credits","read_stock","write_stock","read_categories","write_categories","read_settings","write_settings","read_webhooks","write_webhooks","read_api_keys","write_api_keys","read_dashboard"];function xS(e){let[t,r,...i]=e,n=e[e.length-1]??"",s=e[e.length-2]??"";if(e.length<=1)return On(["api","auth",...kS],n);if((s==="-q"||s==="--query")&&n.includes("_")&&!n.includes("=")){let o=n.slice(0,n.lastIndexOf("_")+1);return _S.map(a=>`${o}${a}=`)}if(s==="--scopes"){let o=n.includes(",")?n.slice(n.lastIndexOf(",")+1):n,a=n.slice(0,n.length-o.length);return On(wS,o).map(c=>a+c)}if(t==="api"){if(e.length===2)return On(bS,n);if(["get","post","patch","delete","schema"].includes(r)&&i.length<=1)return On(yh,n)}return[]}var kS=["api-key","dev","console","migrate"];function On(e,t){return t?e.filter(r=>r.startsWith(t)):e}function vS(e){return e==="fish"?`# spree fish completion \u2014 eval "$(spree completion fish)"
389
+ ${ae.default.red("Error:")} ${i instanceof Error?i.message:String(i)}
390
+ `),process.exit(1)}r.dashboard==="custom"?b.info(`Including your dashboard from ${ae.default.bold("apps/dashboard/")} (built in-image).`):r.dashboard==="unsupported-dockerfile"&&b.warn(`${ae.default.bold("apps/dashboard/")} exists, but ${ae.default.bold("backend/Dockerfile")} predates dashboard support \u2014 the image will NOT include your dashboard. Update the Dockerfile from the spree-starter template to bake it in.`),console.log(`
391
+ ${ae.default.bold(`Building production image ${r.imageTag}...`)}
392
+ `),await ee("docker",r.args,{cwd:e,stdio:"inherit"}),W([`Run it: ${ae.default.cyan(`docker run --rm -p 3000:3000 ${r.imageTag}`)}`,`Push it: ${ae.default.cyan(`docker tag ${r.imageTag} <registry>/<repo> && docker push <registry>/<repo>`)}`,r.dashboard!=="unsupported-dockerfile"?`Dashboard: served at ${ae.default.bold("/dashboard")} on the same origin as the API.`:""].filter(Boolean).join(`
393
+ `),"Production image built")}async function yS(e){try{let{stdout:t}=await ee("docker",["compose","config","--format","json"],{cwd:e}),r=JSON.parse(t);if(r.name)return r.name}catch{}return tr.basename(e).toLowerCase().replace(/[^a-z0-9_-]/g,"")}async function fS(e,t){try{return await ee("docker",["volume","inspect",e],{cwd:t,stdio:"ignore"}),!0}catch{return!1}}function hh(e){e.command("bundle").description("Run a bundler command (`bundle \u2026`) inside the web container").argument("<args...>","arguments to pass to bundle").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bundle",...t],r.projectDir,{edgeHint:"the edge stack heals gem drift on boot"})})}var yh=["/admin_users","/allowed_origins","/api_keys","/auth","/categories","/channels","/custom_field_definitions","/customer_groups","/customers","/exports","/gift_card_batches","/gift_cards","/imports","/invitations","/locales","/markets","/me","/option_types","/order_routing_rules","/orders","/payment_methods","/price_lists","/prices","/products","/promotion_actions","/promotion_rules","/promotions","/roles","/stock_locations","/store","/store_credit_categories","/tags","/translatable_resources","/translations","/webhook_endpoints"];var fh=["bash","zsh","fish"],_S=["eq","not_eq","cont","not_cont","start","end","in","not_in","gt","gteq","lt","lteq","null","not_null","present","blank"],bS=["get","post","patch","delete","endpoints","schema","status"],wS=["read_all","write_all","read_orders","write_orders","read_products","write_products","read_promotions","write_promotions","read_customers","write_customers","read_payments","write_payments","read_fulfillments","write_fulfillments","read_refunds","write_refunds","read_gift_cards","write_gift_cards","read_store_credits","write_store_credits","read_stock","write_stock","read_categories","write_categories","read_settings","write_settings","read_webhooks","write_webhooks","read_api_keys","write_api_keys","read_dashboard"];function xS(e){let[t,r,...i]=e,n=e[e.length-1]??"",s=e[e.length-2]??"";if(e.length<=1)return jn(["api","auth",...kS],n);if((s==="-q"||s==="--query")&&n.includes("_")&&!n.includes("=")){let o=n.slice(0,n.lastIndexOf("_")+1);return _S.map(a=>`${o}${a}=`)}if(s==="--scopes"){let o=n.includes(",")?n.slice(n.lastIndexOf(",")+1):n,a=n.slice(0,n.length-o.length);return jn(wS,o).map(c=>a+c)}if(t==="api"){if(e.length===2)return jn(bS,n);if(["get","post","patch","delete","schema"].includes(r)&&i.length<=1)return jn(yh,n)}return[]}var kS=["api-key","dev","console","migrate"];function jn(e,t){return t?e.filter(r=>r.startsWith(t)):e}function vS(e){return e==="fish"?`# spree fish completion \u2014 eval "$(spree completion fish)"
394
394
  function __spree_complete
395
395
  set -l tokens (commandline -opc) (commandline -ct)
396
396
  spree __complete $tokens[2..-1]
@@ -416,38 +416,38 @@ complete -F _spree spree
416
416
  `)[0])}`,"",`Run ${Te.default.bold("spree db:reset")} from your project root (the directory holding the`,".env with SECRET_KEY_BASE), and make sure Docker is running."])}if(n){let o=E();o.start("Stopping the app to release database connections..."),await X(["stop",...s],r.projectDir),o.stop("App stopped.")}try{await Yo(SS,r.projectDir,{captureStderr:!0})}catch(o){let a=String(o.stderr??o.message??"");throw/being accessed by other users|55006/.test(a)&&i(["Could not drop spree_development \u2014 another client is still connected.",`A database client (TablePlus, DataGrip, psql) may be connected on port ${Te.default.bold("5433")}.`,"Disconnect it, then re-run `spree db:reset`.",...n?["",`Bring the stack back up with ${Te.default.bold("spree dev")}.`]:[]]),o}b.success("Database reset."),n&&W(`Bring the stack back up with ${Te.default.bold("spree dev")}.`,"Done")}),e.command("db:console").description("Open a psql session against the dev database").action(async()=>{let t=_(),r;try{r=await mt("postgres",t.projectDir)}catch(i){O(["Could not inspect the Docker stack from this directory.",` ${Te.default.dim(String(i.message).split(`
417
417
  `)[0])}`,"",`Run ${Te.default.bold("spree db:console")} from your project root, and make sure Docker is running.`].join(`
418
418
  `)),process.exit(1)}r||(O(["Postgres is not running.",`Start the stack with ${Te.default.bold("spree dev")}, then re-run ${Te.default.bold("spree db:console")}.`].join(`
419
- `)),process.exit(1)),await Ue(["psql","-U","postgres","spree_development"],t.projectDir,{service:"postgres"})})}import ka from"fs";import jS from"path";var ge=D(K(),1);import{spawn as qS}from"child_process";import wa from"fs";import rr from"path";var Gr=D(K(),1);function zr(e){return wa.existsSync(rr.join(e,"apps","dashboard","package.json"))}function Vr(e){let t=rr.join(e,"apps","dashboard");return wa.existsSync(rr.join(t,"package.json"))&&wa.existsSync(rr.join(t,"node_modules"))}function jn(e){let t=rr.join(e,"apps","dashboard");b.warn(`${Gr.default.bold("apps/dashboard/")} has no dependencies installed \u2014 skipping its dev server. Install them (cd apps/dashboard && ${Yt(e,t)} install) and rerun.`)}var $S=Gr.default.dim("dashboard | "),AS=new RegExp("\x1B\\[[0-9;]*m","g");function Dn(e){if(!Vr(e))return null;let t=rr.join(e,"apps","dashboard"),r=Yt(e,t),i=process.platform==="win32",n=qS(r,["run","dev"],{cwd:t,stdio:["ignore","pipe","pipe"],detached:!i,shell:i}),s=`http://localhost:${5173}`,o=!1,a=()=>{},c=new Promise(m=>{a=m}),d=m=>{o=!0,clearTimeout(p),a(m)},p=setTimeout(()=>d(s),3e4);p.unref();let u=(m,h)=>{let f="";m.on("data",x=>{f+=x.toString();let w=f.split(`
419
+ `)),process.exit(1)),await Ue(["psql","-U","postgres","spree_development"],t.projectDir,{service:"postgres"})})}import ka from"fs";import LS from"path";var ge=D(K(),1);import{spawn as qS}from"child_process";import wa from"fs";import rr from"path";var zr=D(K(),1);function Vr(e){return wa.existsSync(rr.join(e,"apps","dashboard","package.json"))}function Wr(e){let t=rr.join(e,"apps","dashboard");return wa.existsSync(rr.join(t,"package.json"))&&wa.existsSync(rr.join(t,"node_modules"))}function Dn(e){let t=rr.join(e,"apps","dashboard");b.warn(`${zr.default.bold("apps/dashboard/")} has no dependencies installed \u2014 skipping its dev server. Install them (cd apps/dashboard && ${Yt(e,t)} install) and rerun.`)}var $S=zr.default.dim("dashboard | "),AS=new RegExp("\x1B\\[[0-9;]*m","g");function Ln(e){if(!Wr(e))return null;let t=rr.join(e,"apps","dashboard"),r=Yt(e,t),i=process.platform==="win32",n=qS(r,["run","dev"],{cwd:t,stdio:["ignore","pipe","pipe"],detached:!i,shell:i}),s=`http://localhost:${5173}`,o=!1,a=()=>{},c=new Promise(m=>{a=m}),d=m=>{o=!0,clearTimeout(p),a(m)},p=setTimeout(()=>d(s),3e4);p.unref();let u=(m,h)=>{let f="";m.on("data",x=>{f+=x.toString();let w=f.split(`
420
420
  `);f=w.pop()??"";for(let v of w)if(h.write(`${$S}${v}
421
- `),!o){let g=v.replace(AS,"").match(/Local:\s+(http:\/\/\S+?)\/?\s*$/);g&&d(g[1])}})};n.stdout&&u(n.stdout,process.stdout),n.stderr&&u(n.stderr,process.stderr);let l=!1;return n.on("error",m=>{d(s),b.warn(`Could not start the dashboard dev server (${m.message}) \u2014 start it manually with ${Gr.default.bold(`cd apps/dashboard && ${r} run dev`)}. The API keeps running.`)}),n.on("exit",(m,h)=>{d(s),!l&&h===null&&m!==null&&m!==0&&m!==130&&b.warn(`The dashboard dev server exited (code ${m}) \u2014 restart it with ${Gr.default.bold(`cd apps/dashboard && ${r} run dev`)}. The API keeps running.`)}),{url:c,stop:()=>{if(l=!0,d(s),!(n.exitCode!==null||n.killed)){if(!i&&n.pid)try{process.kill(-n.pid,"SIGTERM");return}catch{}n.kill("SIGTERM")}}}}import Wr from"fs";import{platform as CS}from"os";import Ln from"path";var le=D(K(),1);var ES=3e3,wh=12e4;function kh(e){e.command("init").description("First-run setup: start services, configure API key, load sample data").option("--no-sample-data","skip loading sample data").option("--no-open","skip opening browser").action(async t=>{await xa(t)})}async function xa(e){let t=_(),r=e.sampleData&&(An(t.projectDir)??!0);b.step("Pulling latest images..."),await X(["pull"],t.projectDir,{stdio:"inherit"});let i=E();i.start("Starting Docker services..."),await lt(t.projectDir,{stdio:"ignore"}),await X(["up","-d"],t.projectDir),i.stop("Docker services started."),i.start("Waiting for Spree to be ready..."),await PS(t.port),i.stop("Spree is ready."),i.start("Seeding database..."),await ie("db:seed",t.projectDir),i.stop("Database seeded."),i.start("Configuring API keys...");let n=await TS(t.projectDir);IS(t.projectDir,n);let s=await RS(t.projectDir,t.port);i.stop("API keys configured."),await xh(t.projectDir,"storefront"),await xh(t.projectDir,"dashboard"),Tr(t.projectDir,t.port),r&&(i.start("Loading sample data..."),await ie("spree:load_sample_data",t.projectDir),i.stop("Sample data loaded.")),i.start("Indexing products for search..."),await ie("spree:search:reindex",t.projectDir),i.stop("Search index ready."),xm(t.projectDir);let o=Vr(t.projectDir);zr(t.projectDir)&&!o&&jn(t.projectDir);let a=o?[le.default.bold("Admin Dashboard (React, Developer Preview)"),` ${le.default.cyan(`http://localhost:${5173}`)}`,` Email: ${Wt}`,` Password: ${Ht}`,` ${le.default.dim(`Live-reloading from apps/dashboard/ \u2014 classic admin: http://localhost:${t.port}/admin`)}`]:[le.default.bold("Admin Dashboard"),` ${le.default.cyan(`http://localhost:${t.port}/admin`)}`,` Email: ${Wt}`,` Password: ${Ht}`];W(["",...a,"",le.default.bold("Store API"),` ${le.default.cyan(`http://localhost:${t.port}/api/v3/store`)}`,` Publishable key: ${le.default.cyan(n)}`,"",le.default.bold("Admin API"),` ${le.default.cyan(`http://localhost:${t.port}/api/v3/admin`)}`,` Secret key: ${le.default.cyan(s)}`,` ${le.default.dim("Saved to .spree/credentials.json")}`,""].join(`
422
- `),"Your Spree store is ready!");let c=o?Dn(t.projectDir):null,d=()=>{c?.stop(),process.exit(130)};process.once("SIGINT",d);try{e.open&&await OS(c?await c.url:`http://localhost:${t.port}/admin`),b.info(`Streaming logs (Ctrl+C to stop)...
423
- `),await $r("web",t.projectDir)}finally{process.removeListener("SIGINT",d),c?.stop()}}async function xh(e,t){let r=Ln.join(e,"apps",t);if(!Wr.existsSync(Ln.join(r,"package.json"))||Wr.existsSync(Ln.join(r,"node_modules")))return;let i=Yt(e,r),n=E();n.start(`Installing ${t} dependencies with ${i}...`);try{await ee(i,["install"],{cwd:r}),n.stop(`${t==="dashboard"?"Dashboard":"Storefront"} dependencies installed.`)}catch(s){n.stop(le.default.yellow(`${i} install failed \u2014 run it manually in apps/${t}/.`)),b.warn(s instanceof Error?s.message:String(s))}}async function PS(e){let t=`http://localhost:${e}/up`,r=Date.now();for(;Date.now()-r<wh;){try{if((await fetch(t)).ok)return}catch{}await new Promise(i=>setTimeout(i,ES))}throw new Error(`Spree did not become healthy within ${wh/1e3}s`)}async function TS(e){let t=await ie("spree:cli:ensure_api_key",e),r=t.match(/pk_[A-Za-z0-9_-]+/);if(!r)throw new Error(`Could not extract API key from Rails output: ${t}`);return r[0]}async function RS(e,t){let{token:r}=await ea(e,t,!0);return r}function IS(e,t){let r=Ln.join(e,"apps","storefront",".env.local");if(!Wr.existsSync(r))return;let i=Wr.readFileSync(r,"utf-8");Wr.writeFileSync(r,i.replace(/SPREE_PUBLISHABLE_KEY=.*/,`SPREE_PUBLISHABLE_KEY=${t}`))}async function OS(e){let t=CS(),r=t==="darwin"?"open":t==="win32"?"start":"xdg-open";try{await dt(`${r} ${e}`,{stdio:"ignore"})}catch{}}function vh(e){e.command("dev").description("Run the app in the foreground \u2014 the API, plus the React Dashboard dev server when apps/dashboard exists; Ctrl+C stops them").action(async()=>{let t=_();if(Fe(t.projectDir)&&(O(["This project uses SPREE_PATH for monorepo development.",`Use ${ge.default.bold("pnpm server:dev")} from the monorepo root instead of ${ge.default.bold("spree dev")}.`,"It loads the edge compose overlay and sets SPREE_PATH so the Spree gems resolve to the monorepo source."].join(`
424
- `)),process.exit(1)),Tr(t.projectDir,t.port),!qr(t.projectDir)&&!ka.existsSync(Qo(t.projectDir))&&!ka.existsSync(Kt(t.projectDir))){let a=An(t.projectDir)!==void 0;if(!a)try{a=!await fm(t.projectDir)}catch{}if(a){b.info("First run detected \u2014 completing setup automatically."),await xa({sampleData:!0,open:!0});return}}let r=zr(t.projectDir)&&Vr(t.projectDir);zr(t.projectDir)&&!r&&jn(t.projectDir),W(["",...r?[ge.default.bold("Admin Dashboard (React, Developer Preview)"),` ${ge.default.cyan(`http://localhost:${5173}`)}`,` Email: ${Wt}`,` Password: ${Ht}`,` ${ge.default.dim(`Live-reloading from apps/dashboard/ \u2014 classic admin: http://localhost:${t.port}/admin`)}`]:[ge.default.bold("Admin Dashboard"),` ${ge.default.cyan(`http://localhost:${t.port}/admin`)}`,` Email: ${Wt}`,` Password: ${Ht}`],"",ge.default.bold("Store API"),` ${ge.default.cyan(`http://localhost:${t.port}/api/v3/store`)}`,""].join(`
421
+ `),!o){let g=v.replace(AS,"").match(/Local:\s+(http:\/\/\S+?)\/?\s*$/);g&&d(g[1])}})};n.stdout&&u(n.stdout,process.stdout),n.stderr&&u(n.stderr,process.stderr);let l=!1;return n.on("error",m=>{d(s),b.warn(`Could not start the dashboard dev server (${m.message}) \u2014 start it manually with ${zr.default.bold(`cd apps/dashboard && ${r} run dev`)}. The API keeps running.`)}),n.on("exit",(m,h)=>{d(s),!l&&h===null&&m!==null&&m!==0&&m!==130&&b.warn(`The dashboard dev server exited (code ${m}) \u2014 restart it with ${zr.default.bold(`cd apps/dashboard && ${r} run dev`)}. The API keeps running.`)}),{url:c,stop:()=>{if(l=!0,d(s),!(n.exitCode!==null||n.killed)){if(!i&&n.pid)try{process.kill(-n.pid,"SIGTERM");return}catch{}n.kill("SIGTERM")}}}}import ir from"fs";import{platform as ES}from"os";import Hr from"path";var ie=D(K(),1);var PS=3e3,wh=12e4;function kh(e){e.command("init").description("First-run setup: start services, configure API key, load sample data").option("--no-sample-data","skip loading sample data").option("--no-open","skip opening browser").action(async t=>{await xa(t)})}async function xa(e){let t=_(),r=e.sampleData&&(Cn(t.projectDir)??!0);b.step("Pulling latest images..."),await X(["pull"],t.projectDir,{stdio:"inherit"});let i=E();i.start("Starting Docker services..."),await lt(t.projectDir,{stdio:"ignore"}),await X(["up","-d"],t.projectDir),i.stop("Docker services started."),i.start("Waiting for Spree to be ready..."),await TS(t.port),i.stop("Spree is ready."),i.start("Seeding database..."),await ne("db:seed",t.projectDir),i.stop("Database seeded."),i.start("Configuring API keys...");let n=await RS(t.projectDir);jS(t.projectDir,n);let s=await OS(t.projectDir,t.port);i.stop("API keys configured."),await xh(t.projectDir,"storefront"),await xh(t.projectDir,"dashboard"),Rr(t.projectDir,t.port),r&&(i.start("Loading sample data..."),await ne("spree:load_sample_data",t.projectDir),i.stop("Sample data loaded.")),i.start("Indexing products for search..."),await ne("spree:search:reindex",t.projectDir),i.stop("Search index ready."),xm(t.projectDir);let o=Wr(t.projectDir);Vr(t.projectDir)&&!o&&Dn(t.projectDir);let a=o?[ie.default.bold("Admin Dashboard (React, Developer Preview)"),` ${ie.default.cyan(`http://localhost:${5173}`)}`,` Email: ${Wt}`,` Password: ${Ht}`,` ${ie.default.dim(`Live-reloading from apps/dashboard/ \u2014 classic admin: http://localhost:${t.port}/admin`)}`]:[ie.default.bold("Admin Dashboard"),` ${ie.default.cyan(`http://localhost:${t.port}/admin`)}`,` Email: ${Wt}`,` Password: ${Ht}`],c=r&&IS(t.projectDir)?[ie.default.bold("Wholesale portal (B2B demo)"),` ${ie.default.cyan(`http://localhost:${3001}/wholesale`)} ${ie.default.dim("\u2014 needs the storefront dev server running")}`,` ${ie.default.dim('Register a buyer, then approve them in the admin (add to the "Wholesale" customer group)')}`,""]:[];W(["",...a,"",ie.default.bold("Store API"),` ${ie.default.cyan(`http://localhost:${t.port}/api/v3/store`)}`,` Publishable key: ${ie.default.cyan(n)}`,"",...c,ie.default.bold("Admin API"),` ${ie.default.cyan(`http://localhost:${t.port}/api/v3/admin`)}`,` Secret key: ${ie.default.cyan(s)}`,` ${ie.default.dim("Saved to .spree/credentials.json")}`,""].join(`
422
+ `),"Your Spree store is ready!");let d=o?Ln(t.projectDir):null,p=()=>{d?.stop(),process.exit(130)};process.once("SIGINT",p);try{e.open&&await DS(d?await d.url:`http://localhost:${t.port}/admin`),b.info(`Streaming logs (Ctrl+C to stop)...
423
+ `),await Ar("web",t.projectDir)}finally{process.removeListener("SIGINT",p),d?.stop()}}async function xh(e,t){let r=Hr.join(e,"apps",t);if(!ir.existsSync(Hr.join(r,"package.json"))||ir.existsSync(Hr.join(r,"node_modules")))return;let i=Yt(e,r),n=E();n.start(`Installing ${t} dependencies with ${i}...`);try{await ee(i,["install"],{cwd:r}),n.stop(`${t==="dashboard"?"Dashboard":"Storefront"} dependencies installed.`)}catch(s){n.stop(ie.default.yellow(`${i} install failed \u2014 run it manually in apps/${t}/.`)),b.warn(s instanceof Error?s.message:String(s))}}async function TS(e){let t=`http://localhost:${e}/up`,r=Date.now();for(;Date.now()-r<wh;){try{if((await fetch(t)).ok)return}catch{}await new Promise(i=>setTimeout(i,PS))}throw new Error(`Spree did not become healthy within ${wh/1e3}s`)}async function RS(e){let t=await ne("spree:cli:ensure_api_key",e),r=t.match(/pk_[A-Za-z0-9_-]+/);if(!r)throw new Error(`Could not extract API key from Rails output: ${t}`);return r[0]}function IS(e){let t=Hr.join(e,"apps","storefront",".env.local");try{return ir.readFileSync(t,"utf-8").match(/^SPREE_WHOLESALE_CHANNEL=(\S+)/m)?.[1]??null}catch{return null}}async function OS(e,t){let{token:r}=await ea(e,t,!0);return r}function jS(e,t){let r=Hr.join(e,"apps","storefront",".env.local");if(!ir.existsSync(r))return;let i=ir.readFileSync(r,"utf-8");ir.writeFileSync(r,i.replace(/^SPREE_PUBLISHABLE_KEY=.*/m,`SPREE_PUBLISHABLE_KEY=${t}`))}async function DS(e){let t=ES(),r=t==="darwin"?"open":t==="win32"?"start":"xdg-open";try{await dt(`${r} ${e}`,{stdio:"ignore"})}catch{}}function vh(e){e.command("dev").description("Run the app in the foreground \u2014 the API, plus the React Dashboard dev server when apps/dashboard exists; Ctrl+C stops them").action(async()=>{let t=_();if(Fe(t.projectDir)&&(O(["This project uses SPREE_PATH for monorepo development.",`Use ${ge.default.bold("pnpm server:dev")} from the monorepo root instead of ${ge.default.bold("spree dev")}.`,"It loads the edge compose overlay and sets SPREE_PATH so the Spree gems resolve to the monorepo source."].join(`
424
+ `)),process.exit(1)),Rr(t.projectDir,t.port),!$r(t.projectDir)&&!ka.existsSync(Qo(t.projectDir))&&!ka.existsSync(Kt(t.projectDir))){let a=Cn(t.projectDir)!==void 0;if(!a)try{a=!await fm(t.projectDir)}catch{}if(a){b.info("First run detected \u2014 completing setup automatically."),await xa({sampleData:!0,open:!0});return}}let r=Vr(t.projectDir)&&Wr(t.projectDir);Vr(t.projectDir)&&!r&&Dn(t.projectDir),W(["",...r?[ge.default.bold("Admin Dashboard (React, Developer Preview)"),` ${ge.default.cyan(`http://localhost:${5173}`)}`,` Email: ${Wt}`,` Password: ${Ht}`,` ${ge.default.dim(`Live-reloading from apps/dashboard/ \u2014 classic admin: http://localhost:${t.port}/admin`)}`]:[ge.default.bold("Admin Dashboard"),` ${ge.default.cyan(`http://localhost:${t.port}/admin`)}`,` Email: ${Wt}`,` Password: ${Ht}`],"",ge.default.bold("Store API"),` ${ge.default.cyan(`http://localhost:${t.port}/api/v3/store`)}`,""].join(`
425
425
  `),"Spree Commerce"),b.info(`Starting services \u2014 ${r?"API + dashboard logs":"API logs"} stream below. ${ge.default.bold("Ctrl+C")} stops them (databases keep running; ${ge.default.bold("spree stop")} shuts everything down).
426
- `);let i=()=>{};process.on("SIGINT",i);let n,s=null;try{if(await lt(t.projectDir),qr(t.projectDir)){let a=jS.join(t.projectDir,"backend/app/assets/builds/spree/admin/application.css");if(!ka.existsSync(a)){let c=E();c.start("Compiling admin dashboard stylesheets...");try{await Cn(t.projectDir),c.stop("Admin dashboard stylesheets compiled.")}catch{c.stop("Could not compile admin dashboard stylesheets \u2014 admin pages may 500.")}}try{await gm(t.projectDir),b.info("Watching admin dashboard stylesheets \u2014 edits recompile live.")}catch{}}s=r?Dn(t.projectDir):null,n=await X(["up",...await Be(t.projectDir)],t.projectDir,{stdio:"inherit",reject:!1})}finally{s?.stop(),process.off("SIGINT",i)}let o=n.exitCode??0;o!==0&&o!==130&&(O(`docker compose exited with code ${o} \u2014 see the output above.`),process.exit(o)),Pt(`${r?"API + dashboard":"API"} stopped. Databases keep running \u2014 ${ge.default.bold("spree stop")} shuts everything down.`)})}import Hr from"fs";import va from"path";var me=D(K(),1);function Sh(e){e.command("eject").description("Switch to the dev compose: bind-mount ./backend with hot reload").action(async()=>{let t=_(),r=va.join(t.projectDir,"backend");Hr.existsSync(r)||(console.error(`
426
+ `);let i=()=>{};process.on("SIGINT",i);let n,s=null;try{if(await lt(t.projectDir),$r(t.projectDir)){let a=LS.join(t.projectDir,"backend/app/assets/builds/spree/admin/application.css");if(!ka.existsSync(a)){let c=E();c.start("Compiling admin dashboard stylesheets...");try{await En(t.projectDir),c.stop("Admin dashboard stylesheets compiled.")}catch{c.stop("Could not compile admin dashboard stylesheets \u2014 admin pages may 500.")}}try{await gm(t.projectDir),b.info("Watching admin dashboard stylesheets \u2014 edits recompile live.")}catch{}}s=r?Ln(t.projectDir):null,n=await X(["up",...await Be(t.projectDir)],t.projectDir,{stdio:"inherit",reject:!1})}finally{s?.stop(),process.off("SIGINT",i)}let o=n.exitCode??0;o!==0&&o!==130&&(O(`docker compose exited with code ${o} \u2014 see the output above.`),process.exit(o)),Pt(`${r?"API + dashboard":"API"} stopped. Databases keep running \u2014 ${ge.default.bold("spree stop")} shuts everything down.`)})}import Kr from"fs";import va from"path";var me=D(K(),1);function Sh(e){e.command("eject").description("Switch to the dev compose: bind-mount ./backend with hot reload").action(async()=>{let t=_(),r=va.join(t.projectDir,"backend");Kr.existsSync(r)||(console.error(`
427
427
  ${me.default.red("Error:")} No backend/ directory found.
428
- `),process.exit(1));let i=va.join(t.projectDir,"docker-compose.dev.yml");Hr.existsSync(i)||(console.error(`
428
+ `),process.exit(1));let i=va.join(t.projectDir,"docker-compose.dev.yml");Kr.existsSync(i)||(console.error(`
429
429
  ${me.default.red("Error:")} No docker-compose.dev.yml found.
430
- `),process.exit(1));let n=Hr.readFileSync(i,"utf-8");n.includes("- .:/rails")&&(n=n.replace("- .:/rails","- ./backend:/rails"),Hr.writeFileSync(i,n)),Hr.writeFileSync(va.join(t.projectDir,"docker-compose.yml"),n),console.log(`
430
+ `),process.exit(1));let n=Kr.readFileSync(i,"utf-8");n.includes("- .:/rails")&&(n=n.replace("- .:/rails","- ./backend:/rails"),Kr.writeFileSync(i,n)),Kr.writeFileSync(va.join(t.projectDir,"docker-compose.yml"),n),console.log(`
431
431
  ${me.default.bold("Switching to dev compose (bind-mounts ./backend)...")}
432
432
  `),await lt(t.projectDir),await X(["up","-d"],t.projectDir,{stdio:"inherit"}),console.log(`
433
433
  ${me.default.bold("Preparing the development database...")}
434
434
  `),await Ue(["bin/rails","db:prepare"],t.projectDir,{tty:!1}),console.log(`
435
435
  ${me.default.bold("Building admin dashboard stylesheets...")}
436
- `),await Cn(t.projectDir),W([`Backend is now bind-mounted from ${me.default.bold("./backend")} \u2014 edits are live.`,"",`The dev stack uses its own ${me.default.bold("spree_development")} database (just`,`created and seeded). Load demo products with ${me.default.bold("spree sample-data")}.`,"","You can now customize:",` ${me.default.dim("backend/app/")} \u2014 models, controllers, services (instant reload)`,` ${me.default.dim("backend/config/")} \u2014 Rails configuration (instant reload)`,` ${me.default.dim("backend/Gemfile")} \u2014 add gems via ${me.default.bold("spree bundle add <gem>")}`,"",`Rebuild only on Dockerfile / .ruby-version changes: ${me.default.bold("spree build")}`].join(`
437
- `),"Ejected!")})}function qh(e){e.command("exec").description("Run an arbitrary command inside the web container").argument("<command...>","command and arguments to run").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(t,r.projectDir)})}var DS=new Set(["migration","controller","scaffold","scaffold_controller","mailer","job","channel","helper","resource","integration_test","system_test","task","generator","benchmark"]);function $h(e){e.command("generate").alias("g").description("Run a generator (Spree generators auto-prefixed; Rails built-ins forwarded as-is)").argument("<name>","generator name (`model`, `model_decorator`, `migration`, \u2026)").argument("[args...]","arguments to pass to the generator").allowUnknownOption(!0).passThroughOptions(!0).action(async(t,r)=>{let i=_(),n=t.includes(":")||DS.has(t)?t:`spree:${t}`;await B(["bin/rails","g",n,...r],i.projectDir)})}var Mn=D(K(),1);function Ah(e){e.command("logs").description("Stream service logs").argument("[service]","service name (e.g. web)","web").action(async t=>{let r=_();if(t==="worker"&&!(await Be(r.projectDir)).includes("worker")){b.info(`This project has no ${Mn.default.bold("worker")} service \u2014 jobs run inside the web process (Solid Queue in Puma). Streaming ${Mn.default.bold("web")} logs; the job dashboard is at ${Mn.default.cyan(`http://localhost:${r.port}/jobs`)}.`),await $r("web",r.projectDir);return}await $r(t,r.projectDir)})}var Kr=D(K(),1);function Ch(e){e.command("migrate").description("Install pending Spree migrations from gems, then run them (`spree:install:migrations` + `db:migrate`)").argument("[args...]","extra args forwarded to db:migrate").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await mt("web",r.projectDir)?(console.log(`
438
- ${Kr.default.bold("\u2192 Installing pending Spree migrations from gems...")}`),await Ue(["bin/rails","spree:install:migrations"],r.projectDir),console.log(`
439
- ${Kr.default.bold("\u2192 Running db:migrate...")}`),await Ue(["bin/rails","db:migrate",...t],r.projectDir)):(console.log(`
440
- ${Kr.default.bold("\u2192 Installing + running pending Spree migrations...")}`),await B(["bin/rails","spree:install:migrations","db:migrate",...t],r.projectDir,{edgeHint:"the edge boot installs and runs pending migrations itself"})),W(`Run ${Kr.default.bold("spree migrate:status")} to inspect the migration log.`,"Migrations up to date")}),e.command("migrate:rollback").description("Roll back the last migration (`STEP=n` to roll back n steps)").argument("[args...]","extra args forwarded to db:rollback (e.g. STEP=2)").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bin/rails","db:rollback",...t],r.projectDir)}),e.command("migrate:status").description("Show migration status (`bin/rails db:migrate:status`)").action(async()=>{let t=_();await B(["bin/rails","db:migrate:status"],t.projectDir)})}import{platform as LS}from"os";function Eh(e){e.command("open").description("Open the admin dashboard in the browser").action(async()=>{let r=`http://localhost:${_().port}/admin`,i=LS();await dt(`${i==="darwin"?"open":i==="win32"?"start":"xdg-open"} ${r}`)})}import qa from"fs";import nr from"path";import{fileURLToPath as MS}from"url";var z=D(K(),1);import it from"fs";import Fn from"path";function Th(e){let{src:t,dst:r,vars:i,skip:n,force:s}=e;if(!it.existsSync(t))throw new Error(`Template source not found: ${t}`);if(it.existsSync(r)){if(it.readdirSync(r).length>0&&!s)throw new Error(`Destination ${r} is not empty. Pass force=true to overwrite.`)}else it.mkdirSync(r,{recursive:!0});Rh(t,r,"",i,n)}function Rh(e,t,r,i,n){let s=Fn.join(e,r);for(let o of it.readdirSync(s,{withFileTypes:!0})){let a=r?`${r}/${o.name}`:o.name;if(n?.(a))continue;let c=Ih(Sa(o.name,i)),d=Fn.join(e,a);if(o.isDirectory()){let h=r?`${Ph(r,i)}/${c}`:c,f=Fn.join(t,h);it.mkdirSync(f,{recursive:!0}),Rh(e,t,a,i,n);continue}let p=c.endsWith(".tt"),u=p?c.slice(0,-3):c,l=r?`${Ph(r,i)}/${u}`:u,m=Fn.join(t,l);if(p){let h=it.readFileSync(d,"utf8");it.writeFileSync(m,Sa(h,i))}else it.copyFileSync(d,m)}}function Sa(e,t){return e.replace(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g,(r,i)=>Object.hasOwn(t,i)?t[i]:r)}function Ph(e,t){return e.split("/").map(r=>Ih(Sa(r,t))).join("/")}function Ih(e){if(e.includes("/")||e.includes("\\")||e==="..")throw new Error(`Template variable produced an unsafe path segment: "${e}"`);return e}var FS="../../templates/plugin",Bn=["MIT","Apache-2.0","BSD-3-Clause"];function jh(e){e.command("plugin").description("Scaffold and manage Spree plugins (dashboard + Rails engine)").command("new").description("Scaffold a new Spree plugin monorepo (dashboard plugin half today; Rails engine coming soon)").argument("[name]","Plugin name (e.g. brands). If omitted, you will be prompted.").option("--ruby-name <name>","Ruby gem name (default: spree_<name>)").option("--module-name <name>","Ruby module / TS namespace (default: PascalCase of the gem name)").option("--npm-scope <scope>","npm scope, e.g. @acme (default: unscoped)").option("--author <name>","Author name (default: git config user.name)").option("--author-email <email>","Author email (default: git config user.email)").option("--license <license>",`License: ${Bn.join(", ")} (default: MIT)`).option("-y, --yes","Non-interactive: accept the default for every prompt not answered by a flag",!1).option("--no-dashboard","Skip the dashboard plugin half").option("--no-engine","Skip the Rails engine half (currently always skipped \u2014 engine support coming soon)").option("--no-install","Skip running pnpm install").option("--force","Overwrite a non-empty destination directory").action(async(r,i)=>{mi(z.default.bgCyan(z.default.black(" Spree Plugin Scaffolder ")));let n=await BS(r,i);L(n)&&(O("Scaffolding cancelled."),process.exit(0));let s=nr.resolve(process.cwd(),n.name);qa.existsSync(s)&&qa.readdirSync(s).length>0&&!i.force&&(O(`Destination ${z.default.bold(s)} is not empty. Choose a different name or rerun with ${z.default.cyan("--force")}.`),process.exit(1));let o=NS(n),a=HS(),c=E();c.start(`Scaffolding ${z.default.cyan(n.name)}...`);try{Th({src:a,dst:s,vars:o,skip:GS(n),force:i.force})}catch(d){c.stop("Scaffolding failed."),b.error(d instanceof Error?d.message:String(d)),process.exit(1)}c.stop(`Created ${z.default.cyan(s)}`),i.install?await zS(s,n):b.info(z.default.dim("Skipping dependency install \u2014 run them yourself when ready.")),VS(n,s,i.install),Pt("Happy hacking!")})}async function BS(e,t){let r=g=>{if(!g)return"Required";if(!/^[a-z][a-z0-9-]*$/.test(g))return'Use lowercase letters, digits, and dashes (e.g. "brands" or "loyalty-points")'};if(e!==void 0){let g=r(e);g&&(b.error(`Invalid plugin name ${z.default.bold(e)}: ${g}`),process.exit(2))}e===void 0&&t.yes&&(b.error("Pass the plugin name as an argument when using --yes: spree plugin new <name> -y"),process.exit(2));let i=e??await de({message:"Plugin name",placeholder:"brands",validate:r});if(L(i))return i;let n=`spree_${i.replace(/-/g,"_")}`,s=await ir({flag:"--ruby-name",flagValue:t.rubyName,fallback:n,yes:t.yes,validate:g=>g&&/^[a-z][a-z0-9_]*$/.test(g)?void 0:'Use lowercase letters, digits, and underscores (e.g. "spree_brands")',prompt:()=>de({message:"Ruby gem name",placeholder:n,initialValue:n,validate:g=>g&&/^[a-z][a-z0-9_]*$/.test(g)?void 0:'Use lowercase letters, digits, and underscores (e.g. "spree_brands")'})});if(L(s))return s;let o=WS(s),a=await ir({flag:"--module-name",flagValue:t.moduleName,fallback:o,yes:t.yes,validate:g=>g&&/^[A-Z][A-Za-z0-9]*$/.test(g)?void 0:'PascalCase (e.g. "SpreeBrands")',prompt:()=>de({message:"Ruby module / TS namespace",placeholder:o,initialValue:o,validate:g=>g&&/^[A-Z][A-Za-z0-9]*$/.test(g)?void 0:'PascalCase (e.g. "SpreeBrands")'})});if(L(a))return a;let c=g=>!g||/^@[a-z0-9][a-z0-9-]*$/.test(g)?void 0:"Must start with @ and contain lowercase letters/digits/dashes",d=await ir({flag:"--npm-scope",flagValue:t.npmScope,fallback:"",yes:t.yes,validate:c,prompt:()=>de({message:"npm scope (optional, leave blank for unscoped)",placeholder:"@my-org",initialValue:"",validate:c})});if(L(d))return d;let p=t.author===void 0?await Oh("user.name"):void 0,u=await ir({flag:"--author",flagValue:t.author,fallback:p,yes:t.yes,validate:g=>g?void 0:"Required",prompt:()=>de({message:"Author name",placeholder:"Jane Developer",initialValue:p??"",validate:g=>g?void 0:"Required"})});if(L(u))return u;let l=g=>g&&/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(g)?void 0:"Enter a valid email",m=t.authorEmail===void 0?await Oh("user.email"):void 0,h=await ir({flag:"--author-email",flagValue:t.authorEmail,fallback:m,yes:t.yes,validate:l,prompt:()=>de({message:"Author email",placeholder:"jane@example.com",initialValue:m??"",validate:l})});if(L(h))return h;let f=g=>g&&Bn.includes(g)?void 0:`Must be one of: ${Bn.join(", ")}`,x=await ir({flag:"--license",flagValue:t.license,fallback:"MIT",yes:t.yes,validate:f,prompt:()=>yi({message:"License",options:Bn.map(g=>({value:g,label:g})),initialValue:"MIT"})});if(L(x))return x;let w=t.dashboard===!1?!1:t.yes||await US("Include dashboard plugin?",!0);if(L(w))return w;let v=!1;return t.engine!==!1&&b.warn("Rails engine generation is coming in a future release. For now, scaffold the dashboard half here and use `spree-extension create` for the Ruby side."),!w&&!v&&(O("Nothing to scaffold (dashboard half declined)."),process.exit(1)),{name:i,rubyName:s,moduleName:a,npmScope:d.trim(),authorName:u,authorEmail:h,license:x,includeDashboard:w,includeEngine:v}}async function US(e,t){return await Je({message:e,initialValue:t})}async function ir(e){if(e.flagValue!==void 0){let t=e.validate(e.flagValue);return t&&(b.error(`Invalid value for ${z.default.cyan(e.flag)}: ${t}`),process.exit(2)),e.flagValue}if(e.yes){let t=e.validate(e.fallback);return(e.fallback===void 0||t)&&(b.error(`--yes could not resolve a default for ${z.default.cyan(e.flag)}`+(t?` (${t})`:"")+` \u2014 pass ${z.default.cyan(e.flag)} explicitly.`),process.exit(2)),e.fallback}return e.prompt()}async function Oh(e){try{let{stdout:t}=await dt(`git config --get ${e}`);return t.trim()||void 0}catch{return}}function NS(e){let t=e.npmScope?`${e.npmScope}/${e.name}`:e.name;return{name:e.name,plugin_name:e.name,ruby_name:e.rubyName,module_name:e.moduleName,npm_scope:e.npmScope,npm_package_name:t,npm_dashboard_package:e.npmScope?`${e.npmScope}/${e.name}-dashboard`:`${e.name}-dashboard`,author_name:e.authorName,author_email:e.authorEmail,license:e.license,year:String(new Date().getFullYear())}}function GS(e){let t=!e.includeDashboard,r=!e.includeEngine;return i=>!!(t&&(i==="packages/dashboard"||i.startsWith("packages/dashboard/"))||r&&(i==="engine"||i.startsWith("engine/")))}async function zS(e,t){let r=E();if(t.includeDashboard){r.start("Running pnpm install...");try{await dt("pnpm install",{cwd:e,stdio:"pipe"}),r.stop("pnpm install complete.")}catch(i){r.stop(z.default.yellow("pnpm install failed \u2014 run it manually.")),b.warn(i instanceof Error?i.message:String(i))}}if(t.includeEngine){r.start("Running bundle install in engine/...");try{await dt("bundle install",{cwd:nr.join(e,"engine"),stdio:"pipe"}),r.stop("bundle install complete.")}catch(i){r.stop(z.default.yellow("bundle install failed \u2014 run it manually.")),b.warn(i instanceof Error?i.message:String(i))}}}function VS(e,t,r){let i=[""];i.push(z.default.bold("Next steps")),i.push(` ${z.default.dim("cd")} ${nr.relative(process.cwd(),t)||"."}`),r||(e.includeDashboard&&i.push(` ${z.default.dim("pnpm")} install`),e.includeEngine&&i.push(` ${z.default.dim("cd engine && bundle")} install && ${z.default.dim("cd ..")}`)),e.includeDashboard&&(i.push(""),i.push(z.default.bold("Dashboard plugin")),i.push(` Edit ${z.default.cyan("packages/dashboard/src/index.tsx")} to register nav entries and slot widgets.`),i.push(` Add pages as file routes in ${z.default.cyan("packages/dashboard/src/routes/")} \u2014 compiled into the host's typed route tree.`),i.push(` See ${z.default.cyan("https://spreecommerce.org/docs/developer/dashboard/plugins/overview")}`)),e.includeEngine&&(i.push(""),i.push(z.default.bold("Rails engine")),i.push(` Edit ${z.default.cyan(`engine/app/controllers/spree/api/v3/admin/${e.rubyName}_controller.rb`)}`),i.push(` See ${z.default.cyan("https://spreecommerce.org/docs/developer/contributing/creating-an-extension")}`)),i.push(""),W(i.join(`
441
- `),"Your plugin is scaffolded.")}function WS(e){return e.split(/[_-]/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join("")}function HS(){let e=nr.dirname(MS(import.meta.url)),t=[nr.resolve(e,FS),nr.resolve(e,"templates/plugin")];for(let r of t)if(qa.existsSync(r))return r;throw new Error(`Plugin template not found. Looked in:
436
+ `),await En(t.projectDir),W([`Backend is now bind-mounted from ${me.default.bold("./backend")} \u2014 edits are live.`,"",`The dev stack uses its own ${me.default.bold("spree_development")} database (just`,`created and seeded). Load demo products with ${me.default.bold("spree sample-data")}.`,"","You can now customize:",` ${me.default.dim("backend/app/")} \u2014 models, controllers, services (instant reload)`,` ${me.default.dim("backend/config/")} \u2014 Rails configuration (instant reload)`,` ${me.default.dim("backend/Gemfile")} \u2014 add gems via ${me.default.bold("spree bundle add <gem>")}`,"",`Rebuild only on Dockerfile / .ruby-version changes: ${me.default.bold("spree build")}`].join(`
437
+ `),"Ejected!")})}function qh(e){e.command("exec").description("Run an arbitrary command inside the web container").argument("<command...>","command and arguments to run").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(t,r.projectDir)})}var MS=new Set(["migration","controller","scaffold","scaffold_controller","mailer","job","channel","helper","resource","integration_test","system_test","task","generator","benchmark"]);function $h(e){e.command("generate").alias("g").description("Run a generator (Spree generators auto-prefixed; Rails built-ins forwarded as-is)").argument("<name>","generator name (`model`, `model_decorator`, `migration`, \u2026)").argument("[args...]","arguments to pass to the generator").allowUnknownOption(!0).passThroughOptions(!0).action(async(t,r)=>{let i=_(),n=t.includes(":")||MS.has(t)?t:`spree:${t}`;await B(["bin/rails","g",n,...r],i.projectDir)})}var Mn=D(K(),1);function Ah(e){e.command("logs").description("Stream service logs").argument("[service]","service name (e.g. web)","web").action(async t=>{let r=_();if(t==="worker"&&!(await Be(r.projectDir)).includes("worker")){b.info(`This project has no ${Mn.default.bold("worker")} service \u2014 jobs run inside the web process (Solid Queue in Puma). Streaming ${Mn.default.bold("web")} logs; the job dashboard is at ${Mn.default.cyan(`http://localhost:${r.port}/jobs`)}.`),await Ar("web",r.projectDir);return}await Ar(t,r.projectDir)})}var Yr=D(K(),1);function Ch(e){e.command("migrate").description("Install pending Spree migrations from gems, then run them (`spree:install:migrations` + `db:migrate`)").argument("[args...]","extra args forwarded to db:migrate").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await mt("web",r.projectDir)?(console.log(`
438
+ ${Yr.default.bold("\u2192 Installing pending Spree migrations from gems...")}`),await Ue(["bin/rails","spree:install:migrations"],r.projectDir),console.log(`
439
+ ${Yr.default.bold("\u2192 Running db:migrate...")}`),await Ue(["bin/rails","db:migrate",...t],r.projectDir)):(console.log(`
440
+ ${Yr.default.bold("\u2192 Installing + running pending Spree migrations...")}`),await B(["bin/rails","spree:install:migrations","db:migrate",...t],r.projectDir,{edgeHint:"the edge boot installs and runs pending migrations itself"})),W(`Run ${Yr.default.bold("spree migrate:status")} to inspect the migration log.`,"Migrations up to date")}),e.command("migrate:rollback").description("Roll back the last migration (`STEP=n` to roll back n steps)").argument("[args...]","extra args forwarded to db:rollback (e.g. STEP=2)").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bin/rails","db:rollback",...t],r.projectDir)}),e.command("migrate:status").description("Show migration status (`bin/rails db:migrate:status`)").action(async()=>{let t=_();await B(["bin/rails","db:migrate:status"],t.projectDir)})}import{platform as FS}from"os";function Eh(e){e.command("open").description("Open the admin dashboard in the browser").action(async()=>{let r=`http://localhost:${_().port}/admin`,i=FS();await dt(`${i==="darwin"?"open":i==="win32"?"start":"xdg-open"} ${r}`)})}import qa from"fs";import sr from"path";import{fileURLToPath as BS}from"url";var z=D(K(),1);import it from"fs";import Fn from"path";function Th(e){let{src:t,dst:r,vars:i,skip:n,force:s}=e;if(!it.existsSync(t))throw new Error(`Template source not found: ${t}`);if(it.existsSync(r)){if(it.readdirSync(r).length>0&&!s)throw new Error(`Destination ${r} is not empty. Pass force=true to overwrite.`)}else it.mkdirSync(r,{recursive:!0});Rh(t,r,"",i,n)}function Rh(e,t,r,i,n){let s=Fn.join(e,r);for(let o of it.readdirSync(s,{withFileTypes:!0})){let a=r?`${r}/${o.name}`:o.name;if(n?.(a))continue;let c=Ih(Sa(o.name,i)),d=Fn.join(e,a);if(o.isDirectory()){let h=r?`${Ph(r,i)}/${c}`:c,f=Fn.join(t,h);it.mkdirSync(f,{recursive:!0}),Rh(e,t,a,i,n);continue}let p=c.endsWith(".tt"),u=p?c.slice(0,-3):c,l=r?`${Ph(r,i)}/${u}`:u,m=Fn.join(t,l);if(p){let h=it.readFileSync(d,"utf8");it.writeFileSync(m,Sa(h,i))}else it.copyFileSync(d,m)}}function Sa(e,t){return e.replace(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g,(r,i)=>Object.hasOwn(t,i)?t[i]:r)}function Ph(e,t){return e.split("/").map(r=>Ih(Sa(r,t))).join("/")}function Ih(e){if(e.includes("/")||e.includes("\\")||e==="..")throw new Error(`Template variable produced an unsafe path segment: "${e}"`);return e}var US="../../templates/plugin",Bn=["MIT","Apache-2.0","BSD-3-Clause"];function jh(e){e.command("plugin").description("Scaffold and manage Spree plugins (dashboard + Rails engine)").command("new").description("Scaffold a new Spree plugin monorepo (dashboard plugin half today; Rails engine coming soon)").argument("[name]","Plugin name (e.g. brands). If omitted, you will be prompted.").option("--ruby-name <name>","Ruby gem name (default: spree_<name>)").option("--module-name <name>","Ruby module / TS namespace (default: PascalCase of the gem name)").option("--npm-scope <scope>","npm scope, e.g. @acme (default: unscoped)").option("--author <name>","Author name (default: git config user.name)").option("--author-email <email>","Author email (default: git config user.email)").option("--license <license>",`License: ${Bn.join(", ")} (default: MIT)`).option("-y, --yes","Non-interactive: accept the default for every prompt not answered by a flag",!1).option("--no-dashboard","Skip the dashboard plugin half").option("--no-engine","Skip the Rails engine half (currently always skipped \u2014 engine support coming soon)").option("--no-install","Skip running pnpm install").option("--force","Overwrite a non-empty destination directory").action(async(r,i)=>{hi(z.default.bgCyan(z.default.black(" Spree Plugin Scaffolder ")));let n=await NS(r,i);L(n)&&(O("Scaffolding cancelled."),process.exit(0));let s=sr.resolve(process.cwd(),n.name);qa.existsSync(s)&&qa.readdirSync(s).length>0&&!i.force&&(O(`Destination ${z.default.bold(s)} is not empty. Choose a different name or rerun with ${z.default.cyan("--force")}.`),process.exit(1));let o=zS(n),a=YS(),c=E();c.start(`Scaffolding ${z.default.cyan(n.name)}...`);try{Th({src:a,dst:s,vars:o,skip:VS(n),force:i.force})}catch(d){c.stop("Scaffolding failed."),b.error(d instanceof Error?d.message:String(d)),process.exit(1)}c.stop(`Created ${z.default.cyan(s)}`),i.install?await WS(s,n):b.info(z.default.dim("Skipping dependency install \u2014 run them yourself when ready.")),HS(n,s,i.install),Pt("Happy hacking!")})}async function NS(e,t){let r=g=>{if(!g)return"Required";if(!/^[a-z][a-z0-9-]*$/.test(g))return'Use lowercase letters, digits, and dashes (e.g. "brands" or "loyalty-points")'};if(e!==void 0){let g=r(e);g&&(b.error(`Invalid plugin name ${z.default.bold(e)}: ${g}`),process.exit(2))}e===void 0&&t.yes&&(b.error("Pass the plugin name as an argument when using --yes: spree plugin new <name> -y"),process.exit(2));let i=e??await ue({message:"Plugin name",placeholder:"brands",validate:r});if(L(i))return i;let n=`spree_${i.replace(/-/g,"_")}`,s=await nr({flag:"--ruby-name",flagValue:t.rubyName,fallback:n,yes:t.yes,validate:g=>g&&/^[a-z][a-z0-9_]*$/.test(g)?void 0:'Use lowercase letters, digits, and underscores (e.g. "spree_brands")',prompt:()=>ue({message:"Ruby gem name",placeholder:n,initialValue:n,validate:g=>g&&/^[a-z][a-z0-9_]*$/.test(g)?void 0:'Use lowercase letters, digits, and underscores (e.g. "spree_brands")'})});if(L(s))return s;let o=KS(s),a=await nr({flag:"--module-name",flagValue:t.moduleName,fallback:o,yes:t.yes,validate:g=>g&&/^[A-Z][A-Za-z0-9]*$/.test(g)?void 0:'PascalCase (e.g. "SpreeBrands")',prompt:()=>ue({message:"Ruby module / TS namespace",placeholder:o,initialValue:o,validate:g=>g&&/^[A-Z][A-Za-z0-9]*$/.test(g)?void 0:'PascalCase (e.g. "SpreeBrands")'})});if(L(a))return a;let c=g=>!g||/^@[a-z0-9][a-z0-9-]*$/.test(g)?void 0:"Must start with @ and contain lowercase letters/digits/dashes",d=await nr({flag:"--npm-scope",flagValue:t.npmScope,fallback:"",yes:t.yes,validate:c,prompt:()=>ue({message:"npm scope (optional, leave blank for unscoped)",placeholder:"@my-org",initialValue:"",validate:c})});if(L(d))return d;let p=t.author===void 0?await Oh("user.name"):void 0,u=await nr({flag:"--author",flagValue:t.author,fallback:p,yes:t.yes,validate:g=>g?void 0:"Required",prompt:()=>ue({message:"Author name",placeholder:"Jane Developer",initialValue:p??"",validate:g=>g?void 0:"Required"})});if(L(u))return u;let l=g=>g&&/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(g)?void 0:"Enter a valid email",m=t.authorEmail===void 0?await Oh("user.email"):void 0,h=await nr({flag:"--author-email",flagValue:t.authorEmail,fallback:m,yes:t.yes,validate:l,prompt:()=>ue({message:"Author email",placeholder:"jane@example.com",initialValue:m??"",validate:l})});if(L(h))return h;let f=g=>g&&Bn.includes(g)?void 0:`Must be one of: ${Bn.join(", ")}`,x=await nr({flag:"--license",flagValue:t.license,fallback:"MIT",yes:t.yes,validate:f,prompt:()=>fi({message:"License",options:Bn.map(g=>({value:g,label:g})),initialValue:"MIT"})});if(L(x))return x;let w=t.dashboard===!1?!1:t.yes||await GS("Include dashboard plugin?",!0);if(L(w))return w;let v=!1;return t.engine!==!1&&b.warn("Rails engine generation is coming in a future release. For now, scaffold the dashboard half here and use `spree-extension create` for the Ruby side."),!w&&!v&&(O("Nothing to scaffold (dashboard half declined)."),process.exit(1)),{name:i,rubyName:s,moduleName:a,npmScope:d.trim(),authorName:u,authorEmail:h,license:x,includeDashboard:w,includeEngine:v}}async function GS(e,t){return await Je({message:e,initialValue:t})}async function nr(e){if(e.flagValue!==void 0){let t=e.validate(e.flagValue);return t&&(b.error(`Invalid value for ${z.default.cyan(e.flag)}: ${t}`),process.exit(2)),e.flagValue}if(e.yes){let t=e.validate(e.fallback);return(e.fallback===void 0||t)&&(b.error(`--yes could not resolve a default for ${z.default.cyan(e.flag)}`+(t?` (${t})`:"")+` \u2014 pass ${z.default.cyan(e.flag)} explicitly.`),process.exit(2)),e.fallback}return e.prompt()}async function Oh(e){try{let{stdout:t}=await dt(`git config --get ${e}`);return t.trim()||void 0}catch{return}}function zS(e){let t=e.npmScope?`${e.npmScope}/${e.name}`:e.name;return{name:e.name,plugin_name:e.name,ruby_name:e.rubyName,module_name:e.moduleName,npm_scope:e.npmScope,npm_package_name:t,npm_dashboard_package:e.npmScope?`${e.npmScope}/${e.name}-dashboard`:`${e.name}-dashboard`,author_name:e.authorName,author_email:e.authorEmail,license:e.license,year:String(new Date().getFullYear())}}function VS(e){let t=!e.includeDashboard,r=!e.includeEngine;return i=>!!(t&&(i==="packages/dashboard"||i.startsWith("packages/dashboard/"))||r&&(i==="engine"||i.startsWith("engine/")))}async function WS(e,t){let r=E();if(t.includeDashboard){r.start("Running pnpm install...");try{await dt("pnpm install",{cwd:e,stdio:"pipe"}),r.stop("pnpm install complete.")}catch(i){r.stop(z.default.yellow("pnpm install failed \u2014 run it manually.")),b.warn(i instanceof Error?i.message:String(i))}}if(t.includeEngine){r.start("Running bundle install in engine/...");try{await dt("bundle install",{cwd:sr.join(e,"engine"),stdio:"pipe"}),r.stop("bundle install complete.")}catch(i){r.stop(z.default.yellow("bundle install failed \u2014 run it manually.")),b.warn(i instanceof Error?i.message:String(i))}}}function HS(e,t,r){let i=[""];i.push(z.default.bold("Next steps")),i.push(` ${z.default.dim("cd")} ${sr.relative(process.cwd(),t)||"."}`),r||(e.includeDashboard&&i.push(` ${z.default.dim("pnpm")} install`),e.includeEngine&&i.push(` ${z.default.dim("cd engine && bundle")} install && ${z.default.dim("cd ..")}`)),e.includeDashboard&&(i.push(""),i.push(z.default.bold("Dashboard plugin")),i.push(` Edit ${z.default.cyan("packages/dashboard/src/index.tsx")} to register nav entries and slot widgets.`),i.push(` Add pages as file routes in ${z.default.cyan("packages/dashboard/src/routes/")} \u2014 compiled into the host's typed route tree.`),i.push(` See ${z.default.cyan("https://spreecommerce.org/docs/developer/dashboard/plugins/overview")}`)),e.includeEngine&&(i.push(""),i.push(z.default.bold("Rails engine")),i.push(` Edit ${z.default.cyan(`engine/app/controllers/spree/api/v3/admin/${e.rubyName}_controller.rb`)}`),i.push(` See ${z.default.cyan("https://spreecommerce.org/docs/developer/contributing/creating-an-extension")}`)),i.push(""),W(i.join(`
441
+ `),"Your plugin is scaffolded.")}function KS(e){return e.split(/[_-]/).filter(Boolean).map(t=>t[0].toUpperCase()+t.slice(1)).join("")}function YS(){let e=sr.dirname(BS(import.meta.url)),t=[sr.resolve(e,US),sr.resolve(e,"templates/plugin")];for(let r of t)if(qa.existsSync(r))return r;throw new Error(`Plugin template not found. Looked in:
442
442
  ${t.join(`
443
443
  `)}
444
444
 
445
- Reinstall @spree/cli to fix.`)}function Dh(e){e.command("rails").description("Run a Rails command (`bin/rails \u2026`) inside the web container").argument("<args...>","arguments to pass to bin/rails").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bin/rails",...t],r.projectDir)})}function Lh(e){e.command("rake").description("Run a rake task (`bin/rake \u2026`) inside the web container").argument("<args...>","task name and arguments").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bin/rake",...t],r.projectDir)})}function Mh(e){e.command("restart").description("Restart web + worker in place (does not reload Gemfile or compose changes)").action(async()=>{let t=_(),r=E();r.start("Restarting web + worker...");try{await X(["restart",...await Be(t.projectDir)],t.projectDir),r.stop("Services restarted.")}catch(i){throw r.stop("Restart failed."),i}})}function Fh(e){e.command("routes").description("Show Rails routes (`bin/rails routes`)").argument("[args...]","arguments to pass to bin/rails routes").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bin/rails","routes",...t],r.projectDir)})}function Bh(e){e.command("rspec").description("Run RSpec tests (`bundle exec rspec \u2026`) inside the web container").argument("[args...]","files, line numbers, and flags to pass to rspec").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bundle","exec","rspec",...t],r.projectDir,{env:{RAILS_ENV:"test"},edgeHint:"then re-run spree rspec"})})}function Uh(e){e.command("sample-data").description("Load sample data (products, categories, images)").action(async()=>{let t=_(),r=E();r.start("Loading sample data..."),await ie("spree:load_sample_data",t.projectDir),r.stop("Sample data loaded.")})}function Nh(e){e.command("seed").description("Seed the database").action(async()=>{let t=_(),r=E();r.start("Seeding database..."),await ie("db:seed",t.projectDir),r.stop("Database seeded.")})}function Gh(e){e.command("shell").alias("bash").description("Open an interactive bash shell inside the web container").action(async()=>{let t=_();await B(["bash"],t.projectDir,{edgeHint:"then open the shell"})})}function zh(e){e.command("stop").description("Stop services").action(async()=>{let t=_(),r=E();r.start("Stopping services..."),await X(["stop"],t.projectDir),r.stop("Services stopped.")})}function Vh(e){e.command("task").description("Run a Spree rake task (auto-prefixes `spree:`)").argument("<name>","task name (without `spree:` prefix)").argument("[args...]","arguments to pass to the task").allowUnknownOption(!0).passThroughOptions(!0).action(async(t,r)=>{let i=_();await B(["bin/rake",`spree:${t}`,...r],i.projectDir)})}function Wh(e){e.command("update").description("Pull latest image and recreate containers").action(async()=>{let t=_();b.step("Pulling latest images..."),await X(["pull"],t.projectDir,{stdio:"inherit"});let r=E();r.start("Recreating containers..."),await lt(t.projectDir,{stdio:"ignore"}),await X(["up","-d"],t.projectDir),r.stop("Containers recreated."),b.success("Update complete! Migrations will run automatically on startup."),b.info("Run `spree logs` to follow the startup progress.")})}import Hh from"fs";import KS from"path";var _e=D(K(),1);function Kh(e){e.command("upgrade").description("Walk through a Spree version upgrade (bundle + migrate + spree:upgrade)").option("--plan","print the plan via spree:upgrade DRY_RUN=1; skip bundle + migrate").option("--step <id>","run a single rake step by id (skips bundle + migrate)").option("--to <version>","explicit target version (auto-detected from installed gem otherwise)").option("--yes","skip prompts on automated steps").action(async t=>{let r=_();await YS(r.projectDir),t.plan||t.step||(await JS(r.projectDir,t),await ZS(r.projectDir,t)),await QS(r.projectDir,t),t.plan||tq(r.projectDir)})}async function YS(e){let t=r=>{O(r.join(`
445
+ Reinstall @spree/cli to fix.`)}function Dh(e){e.command("rails").description("Run a Rails command (`bin/rails \u2026`) inside the web container").argument("<args...>","arguments to pass to bin/rails").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bin/rails",...t],r.projectDir)})}function Lh(e){e.command("rake").description("Run a rake task (`bin/rake \u2026`) inside the web container").argument("<args...>","task name and arguments").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bin/rake",...t],r.projectDir)})}function Mh(e){e.command("restart").description("Restart web + worker in place (does not reload Gemfile or compose changes)").action(async()=>{let t=_(),r=E();r.start("Restarting web + worker...");try{await X(["restart",...await Be(t.projectDir)],t.projectDir),r.stop("Services restarted.")}catch(i){throw r.stop("Restart failed."),i}})}function Fh(e){e.command("routes").description("Show Rails routes (`bin/rails routes`)").argument("[args...]","arguments to pass to bin/rails routes").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bin/rails","routes",...t],r.projectDir)})}function Bh(e){e.command("rspec").description("Run RSpec tests (`bundle exec rspec \u2026`) inside the web container").argument("[args...]","files, line numbers, and flags to pass to rspec").allowUnknownOption(!0).passThroughOptions(!0).action(async t=>{let r=_();await B(["bundle","exec","rspec",...t],r.projectDir,{env:{RAILS_ENV:"test"},edgeHint:"then re-run spree rspec"})})}function Uh(e){e.command("sample-data").description("Load sample data (products, categories, images)").action(async()=>{let t=_(),r=E();r.start("Loading sample data..."),await ne("spree:load_sample_data",t.projectDir),r.stop("Sample data loaded.")})}function Nh(e){e.command("seed").description("Seed the database").action(async()=>{let t=_(),r=E();r.start("Seeding database..."),await ne("db:seed",t.projectDir),r.stop("Database seeded.")})}function Gh(e){e.command("shell").alias("bash").description("Open an interactive bash shell inside the web container").action(async()=>{let t=_();await B(["bash"],t.projectDir,{edgeHint:"then open the shell"})})}function zh(e){e.command("stop").description("Stop services").action(async()=>{let t=_(),r=E();r.start("Stopping services..."),await X(["stop"],t.projectDir),r.stop("Services stopped.")})}function Vh(e){e.command("task").description("Run a Spree rake task (auto-prefixes `spree:`)").argument("<name>","task name (without `spree:` prefix)").argument("[args...]","arguments to pass to the task").allowUnknownOption(!0).passThroughOptions(!0).action(async(t,r)=>{let i=_();await B(["bin/rake",`spree:${t}`,...r],i.projectDir)})}function Wh(e){e.command("update").description("Pull latest image and recreate containers").action(async()=>{let t=_();b.step("Pulling latest images..."),await X(["pull"],t.projectDir,{stdio:"inherit"});let r=E();r.start("Recreating containers..."),await lt(t.projectDir,{stdio:"ignore"}),await X(["up","-d"],t.projectDir),r.stop("Containers recreated."),b.success("Update complete! Migrations will run automatically on startup."),b.info("Run `spree logs` to follow the startup progress.")})}import Hh from"fs";import JS from"path";var _e=D(K(),1);function Kh(e){e.command("upgrade").description("Walk through a Spree version upgrade (bundle + migrate + spree:upgrade)").option("--plan","print the plan via spree:upgrade DRY_RUN=1; skip bundle + migrate").option("--step <id>","run a single rake step by id (skips bundle + migrate)").option("--to <version>","explicit target version (auto-detected from installed gem otherwise)").option("--yes","skip prompts on automated steps").action(async t=>{let r=_();await XS(r.projectDir),t.plan||t.step||(await ZS(r.projectDir,t),await eq(r.projectDir,t)),await tq(r.projectDir,t),t.plan||iq(r.projectDir)})}async function XS(e){let t=r=>{O(r.join(`
446
446
  `)),process.exit(1)};Fe(e)&&t(["This is a monorepo edge project (SPREE_PATH set in .env).",`Run the upgrade from the monorepo root with ${_e.default.bold("pnpm server:*")} \u2014 the`,"project-local docker-compose.yml is not the running config here."]);try{await mt("web",e)}catch(r){t(["Could not inspect the Docker stack from this directory.",` ${_e.default.dim(String(r.message).split(`
447
- `)[0])}`,"",`Run ${_e.default.bold("spree upgrade")} from your project root (the directory holding the`,".env with SECRET_KEY_BASE), and make sure Docker is running."])}}async function JS(e,t){if(!t.yes){let i=await Je({message:"Run `bundle update` to bump Spree gems?",initialValue:!0});if(L(i)&&(O("Upgrade aborted."),process.exit(0)),!i){b.info("Skipping `bundle update`.");return}}let r=await XS(e);if(r.length===0)throw new Error('No Spree gems detected in Gemfile.lock. Confirm the project has `gem "spree"` (or `spree_core`/`spree_admin`) in its Gemfile.');b.step(_e.default.bold(`bundle update ${r.join(" ")}`)),await B(["bundle","update",...r],e)}async function XS(e){try{return(await Jo(["bundle","list","--name-only"],e)).split(`
447
+ `)[0])}`,"",`Run ${_e.default.bold("spree upgrade")} from your project root (the directory holding the`,".env with SECRET_KEY_BASE), and make sure Docker is running."])}}async function ZS(e,t){if(!t.yes){let i=await Je({message:"Run `bundle update` to bump Spree gems?",initialValue:!0});if(L(i)&&(O("Upgrade aborted."),process.exit(0)),!i){b.info("Skipping `bundle update`.");return}}let r=await QS(e);if(r.length===0)throw new Error('No Spree gems detected in Gemfile.lock. Confirm the project has `gem "spree"` (or `spree_core`/`spree_admin`) in its Gemfile.');b.step(_e.default.bold(`bundle update ${r.join(" ")}`)),await B(["bundle","update",...r],e)}async function QS(e){try{return(await Jo(["bundle","list","--name-only"],e)).split(`
448
448
  `).map(r=>r.trim()).filter(r=>r.startsWith("spree"))}catch(t){let r=t;throw new Error("Could not list gems in the web container \u2014 the bundle looks out of sync.\nRun `spree bundle install` first, then re-run `spree upgrade`."+(r.stderr?.trim()?`
449
449
 
450
- ${r.stderr.trim()}`:""))}}async function ZS(e,t){if(!t.yes){let r=await Je({message:"Install + run pending migrations?",initialValue:!0});if(L(r)&&(O("Upgrade aborted."),process.exit(0)),!r){b.info("Skipping migrations.");return}}b.step(_e.default.bold("spree:install:migrations + db:migrate")),await B(["bin/rails","spree:install:migrations","db:migrate"],e)}async function QS(e,t){let r={};t.plan&&(r.DRY_RUN="1"),t.step&&(r.STEP=t.step),t.to&&(r.TO=t.to),b.step(_e.default.bold("spree:upgrade")),await B(["bin/rake","spree:upgrade"],e,{env:r})}function eq(e){let t="Update @spree/sdk in any storefront or integration consuming the API",r=KS.join(e,"apps","storefront","package.json");if(!Hh.existsSync(r))return t;try{let i=JSON.parse(Hh.readFileSync(r,"utf-8")),n=i.dependencies?.["@spree/sdk"]??i.devDependencies?.["@spree/sdk"];return n?`Update @spree/sdk in apps/storefront (currently ${n}) to the release matching the new Spree version`:t}catch{return t}}function tq(e){W([`The manifest only ran ${_e.default.bold("rake-automatable")} steps.`,"","Don't forget the manual parts from the upgrade doc:",` ${_e.default.dim("- Schedule Spree::StockReservations::ExpireJob (cron)")}`,` ${_e.default.dim(`- ${eq(e)}`)}`,` ${_e.default.dim("- Review behavior changes (cart, availability, payment-method types)")}`,` ${_e.default.dim("- Audit custom decorators against renamed APIs")}`,"",`Full checklist: ${_e.default.cyan("https://spreecommerce.org/docs/developer/upgrades")}`].join(`
451
- `),"Next steps")}var Yh=D(K(),1);function Jh(e){e.command("user").description("Manage admin users").command("create").description("Create an admin user").option("--email <email>","admin email").option("--password <password>","admin password").action(async r=>{let i=_(),n=r.email,s=r.password;if(!n){let a=await de({message:"Admin email:",placeholder:"admin@example.com",validate(c){if(!c)return"Email is required";if(!c.includes("@"))return"Invalid email"}});L(a)&&(O("Cancelled."),process.exit(0)),n=a}if(!s){let a=await hi({message:"Admin password:",validate(c){if(!c||c.length<6)return"Password must be at least 6 characters"}});L(a)&&(O("Cancelled."),process.exit(0)),s=a}let o=E();o.start("Creating admin user..."),await ie("spree:cli:create_admin",i.projectDir,{EMAIL:n,PASSWORD:s}),o.stop("Admin user created."),b.success(`Email: ${Yh.default.cyan(n)}`)})}import{createRequire as rq}from"module";var iq=rq(import.meta.url),Xh=iq("../package.json").version;var T=new Ba().name("spree").description("CLI for managing Spree Commerce projects").version(Xh).enablePositionalOptions().showSuggestionAfterError(!0).showHelpAfterError("(run `spree --help` for usage)").exitOverride(e=>{(e.code.startsWith("commander.help")||e.code==="commander.version")&&process.exit(0),process.exit(2)});kh(T);Sm(T);vh(T);zh(T);Mh(T);Wh(T);Ah(T);Sh(T);mh(T);$h(T);Ch(T);bh(T);Fh(T);Kh(T);qh(T);Dh(T);hh(T);Lh(T);Vh(T);Bh(T);_h(T);Gh(T);Jh(T);dh(T);Eh(T);Nh(T);Uh(T);jh(T);ch(T);lh(T);gh(T);async function nq(){try{await T.parseAsync()}catch(e){e instanceof Error&&"code"in e&&(e.code==="commander.helpDisplayed"||e.code==="commander.version")&&process.exit(0),e instanceof Error&&"code"in e&&String(e.code).startsWith("commander.")&&process.exit(2);let t=e instanceof Error&&e.constructor.name==="CredentialError"?2:1,r=e instanceof Error?e.message:"An unexpected error occurred.";console.error(`
450
+ ${r.stderr.trim()}`:""))}}async function eq(e,t){if(!t.yes){let r=await Je({message:"Install + run pending migrations?",initialValue:!0});if(L(r)&&(O("Upgrade aborted."),process.exit(0)),!r){b.info("Skipping migrations.");return}}b.step(_e.default.bold("spree:install:migrations + db:migrate")),await B(["bin/rails","spree:install:migrations","db:migrate"],e)}async function tq(e,t){let r={};t.plan&&(r.DRY_RUN="1"),t.step&&(r.STEP=t.step),t.to&&(r.TO=t.to),b.step(_e.default.bold("spree:upgrade")),await B(["bin/rake","spree:upgrade"],e,{env:r})}function rq(e){let t="Update @spree/sdk in any storefront or integration consuming the API",r=JS.join(e,"apps","storefront","package.json");if(!Hh.existsSync(r))return t;try{let i=JSON.parse(Hh.readFileSync(r,"utf-8")),n=i.dependencies?.["@spree/sdk"]??i.devDependencies?.["@spree/sdk"];return n?`Update @spree/sdk in apps/storefront (currently ${n}) to the release matching the new Spree version`:t}catch{return t}}function iq(e){W([`The manifest only ran ${_e.default.bold("rake-automatable")} steps.`,"","Don't forget the manual parts from the upgrade doc:",` ${_e.default.dim("- Schedule Spree::StockReservations::ExpireJob (cron)")}`,` ${_e.default.dim(`- ${rq(e)}`)}`,` ${_e.default.dim("- Review behavior changes (cart, availability, payment-method types)")}`,` ${_e.default.dim("- Audit custom decorators against renamed APIs")}`,"",`Full checklist: ${_e.default.cyan("https://spreecommerce.org/docs/developer/upgrades")}`].join(`
451
+ `),"Next steps")}var Yh=D(K(),1);function Jh(e){e.command("user").description("Manage admin users").command("create").description("Create an admin user").option("--email <email>","admin email").option("--password <password>","admin password").action(async r=>{let i=_(),n=r.email,s=r.password;if(!n){let a=await ue({message:"Admin email:",placeholder:"admin@example.com",validate(c){if(!c)return"Email is required";if(!c.includes("@"))return"Invalid email"}});L(a)&&(O("Cancelled."),process.exit(0)),n=a}if(!s){let a=await yi({message:"Admin password:",validate(c){if(!c||c.length<6)return"Password must be at least 6 characters"}});L(a)&&(O("Cancelled."),process.exit(0)),s=a}let o=E();o.start("Creating admin user..."),await ne("spree:cli:create_admin",i.projectDir,{EMAIL:n,PASSWORD:s}),o.stop("Admin user created."),b.success(`Email: ${Yh.default.cyan(n)}`)})}import{createRequire as nq}from"module";var sq=nq(import.meta.url),Xh=sq("../package.json").version;var T=new Ba().name("spree").description("CLI for managing Spree Commerce projects").version(Xh).enablePositionalOptions().showSuggestionAfterError(!0).showHelpAfterError("(run `spree --help` for usage)").exitOverride(e=>{(e.code.startsWith("commander.help")||e.code==="commander.version")&&process.exit(0),process.exit(2)});kh(T);Sm(T);vh(T);zh(T);Mh(T);Wh(T);Ah(T);Sh(T);mh(T);$h(T);Ch(T);bh(T);Fh(T);Kh(T);qh(T);Dh(T);hh(T);Lh(T);Vh(T);Bh(T);_h(T);Gh(T);Jh(T);dh(T);Eh(T);Nh(T);Uh(T);jh(T);ch(T);lh(T);gh(T);async function oq(){try{await T.parseAsync()}catch(e){e instanceof Error&&"code"in e&&(e.code==="commander.helpDisplayed"||e.code==="commander.version")&&process.exit(0),e instanceof Error&&"code"in e&&String(e.code).startsWith("commander.")&&process.exit(2);let t=e instanceof Error&&e.constructor.name==="CredentialError"?2:1,r=e instanceof Error?e.message:"An unexpected error occurred.";console.error(`
452
452
  ${Zh.default.red("Error:")} ${r}
453
- `),process.exit(t)}}nq();
453
+ `),process.exit(t)}}oq();