@yybpc/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +177 -0
- package/package.json +30 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
3
|
+
var Ir=Object.create;var wt=Object.defineProperty;var $r=Object.getOwnPropertyDescriptor;var Nr=Object.getOwnPropertyNames;var jr=Object.getPrototypeOf,Lr=Object.prototype.hasOwnProperty;var W=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(t,e)=>(typeof require<"u"?require:t)[e]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var _=(r,t)=>()=>(r&&(t=r(r=0)),t);var $=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports),j=(r,t)=>{for(var e in t)wt(r,e,{get:t[e],enumerable:!0})},Hr=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Nr(t))!Lr.call(r,o)&&o!==e&&wt(r,o,{get:()=>t[o],enumerable:!(n=$r(t,o))||n.enumerable});return r};var Mr=(r,t,e)=>(e=r!=null?Ir(jr(r)):{},Hr(t||!r||!r.__esModule?wt(e,"default",{value:r,enumerable:!0}):e,r));var J=$(St=>{"use strict";var tt=class extends Error{constructor(t,e,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=e,this.exitCode=t,this.nestedError=void 0}},At=class extends tt{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};St.CommanderError=tt;St.InvalidArgumentError=At});var et=$(Tt=>{"use strict";var{InvalidArgumentError:Vr}=J(),Rt=class{constructor(t,e){switch(this.description=e||"",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,e){return e===this.defaultValue||!Array.isArray(e)?[t]:(e.push(t),e)}default(t,e){return this.defaultValue=t,this.defaultValueDescription=e,this}argParser(t){return this.parseArg=t,this}choices(t){return this.argChoices=t.slice(),this.parseArg=(e,n)=>{if(!this.argChoices.includes(e))throw new Vr(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(e,n):e},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function qr(r){let t=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+t+">":"["+t+"]"}Tt.Argument=Rt;Tt.humanReadableArgName=qr});var xt=$(vt=>{"use strict";var{humanReadableArgName:Gr}=et(),Et=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 e=t.commands.filter(o=>!o._hidden),n=t._getHelpCommand();return n&&!n._hidden&&e.push(n),this.sortSubcommands&&e.sort((o,i)=>o.name().localeCompare(i.name())),e}compareOptions(t,e){let n=o=>o.short?o.short.replace(/^-/,""):o.long.replace(/^--/,"");return n(t).localeCompare(n(e))}visibleOptions(t){let e=t.options.filter(o=>!o.hidden),n=t._getHelpOption();if(n&&!n.hidden){let o=n.short&&t._findOption(n.short),i=n.long&&t._findOption(n.long);!o&&!i?e.push(n):n.long&&!i?e.push(t.createOption(n.long,n.description)):n.short&&!o&&e.push(t.createOption(n.short,n.description))}return this.sortOptions&&e.sort(this.compareOptions),e}visibleGlobalOptions(t){if(!this.showGlobalOptions)return[];let e=[];for(let n=t.parent;n;n=n.parent){let o=n.options.filter(i=>!i.hidden);e.push(...o)}return this.sortOptions&&e.sort(this.compareOptions),e}visibleArguments(t){return t._argsDescription&&t.registeredArguments.forEach(e=>{e.description=e.description||t._argsDescription[e.name()]||""}),t.registeredArguments.find(e=>e.description)?t.registeredArguments:[]}subcommandTerm(t){let e=t.registeredArguments.map(n=>Gr(n)).join(" ");return t._name+(t._aliases[0]?"|"+t._aliases[0]:"")+(t.options.length?" [options]":"")+(e?" "+e:"")}optionTerm(t){return t.flags}argumentTerm(t){return t.name()}longestSubcommandTermLength(t,e){return e.visibleCommands(t).reduce((n,o)=>Math.max(n,this.displayWidth(e.styleSubcommandTerm(e.subcommandTerm(o)))),0)}longestOptionTermLength(t,e){return e.visibleOptions(t).reduce((n,o)=>Math.max(n,this.displayWidth(e.styleOptionTerm(e.optionTerm(o)))),0)}longestGlobalOptionTermLength(t,e){return e.visibleGlobalOptions(t).reduce((n,o)=>Math.max(n,this.displayWidth(e.styleOptionTerm(e.optionTerm(o)))),0)}longestArgumentTermLength(t,e){return e.visibleArguments(t).reduce((n,o)=>Math.max(n,this.displayWidth(e.styleArgumentTerm(e.argumentTerm(o)))),0)}commandUsage(t){let e=t._name;t._aliases[0]&&(e=e+"|"+t._aliases[0]);let n="";for(let o=t.parent;o;o=o.parent)n=o.name()+" "+n;return n+e+" "+t.usage()}commandDescription(t){return t.description()}subcommandDescription(t){return t.summary()||t.description()}optionDescription(t){let e=[];if(t.argChoices&&e.push(`choices: ${t.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),t.defaultValue!==void 0&&(t.required||t.optional||t.isBoolean()&&typeof t.defaultValue=="boolean")&&e.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),t.presetArg!==void 0&&t.optional&&e.push(`preset: ${JSON.stringify(t.presetArg)}`),t.envVar!==void 0&&e.push(`env: ${t.envVar}`),e.length>0){let n=`(${e.join(", ")})`;return t.description?`${t.description} ${n}`:n}return t.description}argumentDescription(t){let e=[];if(t.argChoices&&e.push(`choices: ${t.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),t.defaultValue!==void 0&&e.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),e.length>0){let n=`(${e.join(", ")})`;return t.description?`${t.description} ${n}`:n}return t.description}formatItemList(t,e,n){return e.length===0?[]:[n.styleTitle(t),...e,""]}groupItems(t,e,n){let o=new Map;return t.forEach(i=>{let s=n(i);o.has(s)||o.set(s,[])}),e.forEach(i=>{let s=n(i);o.has(s)||o.set(s,[]),o.get(s).push(i)}),o}formatHelp(t,e){let n=e.padWidth(t,e),o=e.helpWidth??80;function i(u,l){return e.formatItem(u,n,l,e)}let s=[`${e.styleTitle("Usage:")} ${e.styleUsage(e.commandUsage(t))}`,""],a=e.commandDescription(t);a.length>0&&(s=s.concat([e.boxWrap(e.styleCommandDescription(a),o),""]));let c=e.visibleArguments(t).map(u=>i(e.styleArgumentTerm(e.argumentTerm(u)),e.styleArgumentDescription(e.argumentDescription(u))));if(s=s.concat(this.formatItemList("Arguments:",c,e)),this.groupItems(t.options,e.visibleOptions(t),u=>u.helpGroupHeading??"Options:").forEach((u,l)=>{let m=u.map(y=>i(e.styleOptionTerm(e.optionTerm(y)),e.styleOptionDescription(e.optionDescription(y))));s=s.concat(this.formatItemList(l,m,e))}),e.showGlobalOptions){let u=e.visibleGlobalOptions(t).map(l=>i(e.styleOptionTerm(e.optionTerm(l)),e.styleOptionDescription(e.optionDescription(l))));s=s.concat(this.formatItemList("Global Options:",u,e))}return this.groupItems(t.commands,e.visibleCommands(t),u=>u.helpGroup()||"Commands:").forEach((u,l)=>{let m=u.map(y=>i(e.styleSubcommandTerm(e.subcommandTerm(y)),e.styleSubcommandDescription(e.subcommandDescription(y))));s=s.concat(this.formatItemList(l,m,e))}),s.join(`
|
|
4
|
+
`)}displayWidth(t){return de(t).length}styleTitle(t){return t}styleUsage(t){return t.split(" ").map(e=>e==="[options]"?this.styleOptionText(e):e==="[command]"?this.styleSubcommandText(e):e[0]==="["||e[0]==="<"?this.styleArgumentText(e):this.styleCommandText(e)).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(e=>e==="[options]"?this.styleOptionText(e):e[0]==="["||e[0]==="<"?this.styleArgumentText(e):this.styleSubcommandText(e)).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,e){return Math.max(e.longestOptionTermLength(t,e),e.longestGlobalOptionTermLength(t,e),e.longestSubcommandTermLength(t,e),e.longestArgumentTermLength(t,e))}preformatted(t){return/\n[^\S\r\n]/.test(t)}formatItem(t,e,n,o){let s=" ".repeat(2);if(!n)return s+t;let a=t.padEnd(e+t.length-o.displayWidth(t)),c=2,p=(this.helpWidth??80)-e-c-2,u;return p<this.minWidthToWrap||o.preformatted(n)?u=n:u=o.boxWrap(n,p).replace(/\n/g,`
|
|
5
|
+
`+" ".repeat(e+c)),s+a+" ".repeat(c)+u.replace(/\n/g,`
|
|
6
|
+
${s}`)}boxWrap(t,e){if(e<this.minWidthToWrap)return t;let n=t.split(/\r\n|\n/),o=/[\s]*[^\s]+/g,i=[];return n.forEach(s=>{let a=s.match(o);if(a===null){i.push("");return}let c=[a.shift()],d=this.displayWidth(c[0]);a.forEach(p=>{let u=this.displayWidth(p);if(d+u<=e){c.push(p),d+=u;return}i.push(c.join(""));let l=p.trimStart();c=[l],d=this.displayWidth(l)}),i.push(c.join(""))}),i.join(`
|
|
7
|
+
`)}};function de(r){let t=/\x1b\[\d*(;\d*)*m/g;return r.replace(t,"")}vt.Help=Et;vt.stripColor=de});var It=$(Pt=>{"use strict";var{InvalidArgumentError:Fr}=J(),Dt=class{constructor(t,e){this.flags=t,this.description=e||"",this.required=t.includes("<"),this.optional=t.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(t),this.mandatory=!1;let n=Yr(t);this.short=n.shortFlag,this.long=n.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,e){return this.defaultValue=t,this.defaultValueDescription=e,this}preset(t){return this.presetArg=t,this}conflicts(t){return this.conflictsWith=this.conflictsWith.concat(t),this}implies(t){let e=t;return typeof t=="string"&&(e={[t]:!0}),this.implied=Object.assign(this.implied||{},e),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,e){return e===this.defaultValue||!Array.isArray(e)?[t]:(e.push(t),e)}choices(t){return this.argChoices=t.slice(),this.parseArg=(e,n)=>{if(!this.argChoices.includes(e))throw new Fr(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._collectValue(e,n):e},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?me(this.name().replace(/^no-/,"")):me(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}},kt=class{constructor(t){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,t.forEach(e=>{e.negate?this.negativeOptions.set(e.attributeName(),e):this.positiveOptions.set(e.attributeName(),e)}),this.negativeOptions.forEach((e,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(t,e){let n=e.attributeName();if(!this.dualOptions.has(n))return!0;let o=this.negativeOptions.get(n).presetArg,i=o!==void 0?o:!1;return e.negate===(i===t)}};function me(r){return r.split("-").reduce((t,e)=>t+e[0].toUpperCase()+e.slice(1))}function Yr(r){let t,e,n=/^-[^-]$/,o=/^--[^-]/,i=r.split(/[ |,]+/).concat("guard");if(n.test(i[0])&&(t=i.shift()),o.test(i[0])&&(e=i.shift()),!t&&n.test(i[0])&&(t=i.shift()),!t&&o.test(i[0])&&(t=e,e=i.shift()),i[0].startsWith("-")){let s=i[0],a=`option creation failed due to '${s}' in option flags '${r}'`;throw/^-[^-][^-]/.test(s)?new Error(`${a}
|
|
8
|
+
- a short flag is a single dash and a single character
|
|
9
|
+
- either use a single dash and a single character (for a short flag)
|
|
10
|
+
- or use a double dash for a long option (and can have two, like '--ws, --workspace')`):n.test(s)?new Error(`${a}
|
|
11
|
+
- too many short flags`):o.test(s)?new Error(`${a}
|
|
12
|
+
- too many long flags`):new Error(`${a}
|
|
13
|
+
- unrecognised flag format`)}if(t===void 0&&e===void 0)throw new Error(`option creation failed due to no flags found in '${r}'.`);return{shortFlag:t,longFlag:e}}Pt.Option=Dt;Pt.DualOptions=kt});var fe=$(he=>{"use strict";function Ur(r,t){if(Math.abs(r.length-t.length)>3)return Math.max(r.length,t.length);let e=[];for(let n=0;n<=r.length;n++)e[n]=[n];for(let n=0;n<=t.length;n++)e[0][n]=n;for(let n=1;n<=t.length;n++)for(let o=1;o<=r.length;o++){let i=1;r[o-1]===t[n-1]?i=0:i=1,e[o][n]=Math.min(e[o-1][n]+1,e[o][n-1]+1,e[o-1][n-1]+i),o>1&&n>1&&r[o-1]===t[n-2]&&r[o-2]===t[n-1]&&(e[o][n]=Math.min(e[o][n],e[o-2][n-2]+1))}return e[r.length][t.length]}function Wr(r,t){if(!t||t.length===0)return"";t=Array.from(new Set(t));let e=r.startsWith("--");e&&(r=r.slice(2),t=t.map(s=>s.slice(2)));let n=[],o=3,i=.4;return t.forEach(s=>{if(s.length<=1)return;let a=Ur(r,s),c=Math.max(r.length,s.length);(c-a)/c>i&&(a<o?(o=a,n=[s]):a===o&&n.push(s))}),n.sort((s,a)=>s.localeCompare(a)),e&&(n=n.map(s=>`--${s}`)),n.length>1?`
|
|
14
|
+
(Did you mean one of ${n.join(", ")}?)`:n.length===1?`
|
|
15
|
+
(Did you mean ${n[0]}?)`:""}he.suggestSimilar=Wr});var Ce=$(Ht=>{"use strict";var Jr=W("events").EventEmitter,$t=W("child_process"),v=W("path"),rt=W("fs"),f=W("process"),{Argument:Kr,humanReadableArgName:Qr}=et(),{CommanderError:Nt}=J(),{Help:Br,stripColor:zr}=xt(),{Option:ge,DualOptions:Xr}=It(),{suggestSimilar:ye}=fe(),jt=class r extends Jr{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:e=>f.stdout.write(e),writeErr:e=>f.stderr.write(e),outputError:(e,n)=>n(e),getOutHelpWidth:()=>f.stdout.isTTY?f.stdout.columns:void 0,getErrHelpWidth:()=>f.stderr.isTTY?f.stderr.columns:void 0,getOutHasColors:()=>Lt()??(f.stdout.isTTY&&f.stdout.hasColors?.()),getErrHasColors:()=>Lt()??(f.stderr.isTTY&&f.stderr.hasColors?.()),stripColor:e=>zr(e)},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 e=this;e;e=e.parent)t.push(e);return t}command(t,e,n){let o=e,i=n;typeof o=="object"&&o!==null&&(i=o,o=null),i=i||{};let[,s,a]=t.match(/([^ ]+) *(.*)/),c=this.createCommand(s);return o&&(c.description(o),c._executableHandler=!0),i.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(i.noHelp||i.hidden),c._executableFile=i.executableFile||null,a&&c.arguments(a),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),o?this:c}createCommand(t){return new r(t)}createHelp(){return Object.assign(new Br,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,e){if(!t._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
16
|
+
- specify the name in Command constructor or using .name()`);return e=e||{},e.isDefault&&(this._defaultCommandName=t._name),(e.noHelp||e.hidden)&&(t._hidden=!0),this._registerCommand(t),t.parent=this,t._checkForBrokenPassThrough(),this}createArgument(t,e){return new Kr(t,e)}argument(t,e,n,o){let i=this.createArgument(t,e);return typeof n=="function"?i.default(o).argParser(n):i.default(n),this.addArgument(i),this}arguments(t){return t.trim().split(/ +/).forEach(e=>{this.argument(e)}),this}addArgument(t){let e=this.registeredArguments.slice(-1)[0];if(e?.variadic)throw new Error(`only the last argument can be variadic '${e.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,e){if(typeof t=="boolean")return this._addImplicitHelpCommand=t,t&&this._defaultCommandGroup&&this._initCommandGroup(this._getHelpCommand()),this;let n=t??"help [command]",[,o,i]=n.match(/([^ ]+) *(.*)/),s=e??"display help for command",a=this.createCommand(o);return a.helpOption(!1),i&&a.arguments(i),s&&a.description(s),this._addImplicitHelpCommand=!0,this._helpCommand=a,(t||e)&&this._initCommandGroup(a),this}addHelpCommand(t,e){return typeof t!="object"?(this.helpCommand(t,e),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,e){let n=["preSubcommand","preAction","postAction"];if(!n.includes(t))throw new Error(`Unexpected value for event passed to hook : '${t}'.
|
|
17
|
+
Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[t]?this._lifeCycleHooks[t].push(e):this._lifeCycleHooks[t]=[e],this}exitOverride(t){return t?this._exitCallback=t:this._exitCallback=e=>{if(e.code!=="commander.executeSubCommandAsync")throw e},this}_exit(t,e,n){this._exitCallback&&this._exitCallback(new Nt(t,e,n)),f.exit(t)}action(t){let e=n=>{let o=this.registeredArguments.length,i=n.slice(0,o);return this._storeOptionsAsProperties?i[o]=this:i[o]=this.opts(),i.push(this),t.apply(this,i)};return this._actionHandler=e,this}createOption(t,e){return new ge(t,e)}_callParseArg(t,e,n,o){try{return t.parseArg(e,n)}catch(i){if(i.code==="commander.invalidArgument"){let s=`${o} ${i.message}`;this.error(s,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(t){let e=t.short&&this._findOption(t.short)||t.long&&this._findOption(t.long);if(e){let n=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 '${n}'
|
|
18
|
+
- already used by option '${e.flags}'`)}this._initOptionGroup(t),this.options.push(t)}_registerCommand(t){let e=o=>[o.name()].concat(o.aliases()),n=e(t).find(o=>this._findCommand(o));if(n){let o=e(this._findCommand(n)).join("|"),i=e(t).join("|");throw new Error(`cannot add command '${i}' as already have command '${o}'`)}this._initCommandGroup(t),this.commands.push(t)}addOption(t){this._registerOption(t);let e=t.name(),n=t.attributeName();if(t.negate){let i=t.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,t.defaultValue===void 0?!0:t.defaultValue,"default")}else t.defaultValue!==void 0&&this.setOptionValueWithSource(n,t.defaultValue,"default");let o=(i,s,a)=>{i==null&&t.presetArg!==void 0&&(i=t.presetArg);let c=this.getOptionValue(n);i!==null&&t.parseArg?i=this._callParseArg(t,i,c,s):i!==null&&t.variadic&&(i=t._collectValue(i,c)),i==null&&(t.negate?i=!1:t.isBoolean()||t.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,a)};return this.on("option:"+e,i=>{let s=`error: option '${t.flags}' argument '${i}' is invalid.`;o(i,s,"cli")}),t.envVar&&this.on("optionEnv:"+e,i=>{let s=`error: option '${t.flags}' value '${i}' from env '${t.envVar}' is invalid.`;o(i,s,"env")}),this}_optionEx(t,e,n,o,i){if(typeof e=="object"&&e instanceof ge)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let s=this.createOption(e,n);if(s.makeOptionMandatory(!!t.mandatory),typeof o=="function")s.default(i).argParser(o);else if(o instanceof RegExp){let a=o;o=(c,d)=>{let p=a.exec(c);return p?p[0]:d},s.default(i).argParser(o)}else s.default(o);return this.addOption(s)}option(t,e,n,o){return this._optionEx({},t,e,n,o)}requiredOption(t,e,n,o){return this._optionEx({mandatory:!0},t,e,n,o)}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,e){return this.setOptionValueWithSource(t,e,void 0)}setOptionValueWithSource(t,e,n){return this._storeOptionsAsProperties?this[t]=e:this._optionValues[t]=e,this._optionValueSources[t]=n,this}getOptionValueSource(t){return this._optionValueSources[t]}getOptionValueSourceWithGlobals(t){let e;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(t)!==void 0&&(e=n.getOptionValueSource(t))}),e}_prepareUserArgs(t,e){if(t!==void 0&&!Array.isArray(t))throw new Error("first parameter to parse must be array or undefined");if(e=e||{},t===void 0&&e.from===void 0){f.versions?.electron&&(e.from="electron");let o=f.execArgv??[];(o.includes("-e")||o.includes("--eval")||o.includes("-p")||o.includes("--print"))&&(e.from="eval")}t===void 0&&(t=f.argv),this.rawArgs=t.slice();let n;switch(e.from){case void 0:case"node":this._scriptPath=t[1],n=t.slice(2);break;case"electron":f.defaultApp?(this._scriptPath=t[1],n=t.slice(2)):n=t.slice(1);break;case"user":n=t.slice(0);break;case"eval":n=t.slice(1);break;default:throw new Error(`unexpected parse option { from: '${e.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(t,e){this._prepareForParse();let n=this._prepareUserArgs(t,e);return this._parseCommand([],n),this}async parseAsync(t,e){this._prepareForParse();let n=this._prepareUserArgs(t,e);return await this._parseCommand([],n),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.
|
|
19
|
+
- 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,e,n){if(rt.existsSync(t))return;let o=e?`searched for local subcommand relative to directory '${e}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",i=`'${t}' does not exist
|
|
20
|
+
- if '${n}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
21
|
+
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
22
|
+
- ${o}`;throw new Error(i)}_executeSubCommand(t,e){e=e.slice();let n=!1,o=[".js",".ts",".tsx",".mjs",".cjs"];function i(p,u){let l=v.resolve(p,u);if(rt.existsSync(l))return l;if(o.includes(v.extname(u)))return;let m=o.find(y=>rt.existsSync(`${l}${y}`));if(m)return`${l}${m}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=t._executableFile||`${this._name}-${t._name}`,a=this._executableDir||"";if(this._scriptPath){let p;try{p=rt.realpathSync(this._scriptPath)}catch{p=this._scriptPath}a=v.resolve(v.dirname(p),a)}if(a){let p=i(a,s);if(!p&&!t._executableFile&&this._scriptPath){let u=v.basename(this._scriptPath,v.extname(this._scriptPath));u!==this._name&&(p=i(a,`${u}-${t._name}`))}s=p||s}n=o.includes(v.extname(s));let c;f.platform!=="win32"?n?(e.unshift(s),e=_e(f.execArgv).concat(e),c=$t.spawn(f.argv[0],e,{stdio:"inherit"})):c=$t.spawn(s,e,{stdio:"inherit"}):(this._checkForMissingExecutable(s,a,t._name),e.unshift(s),e=_e(f.execArgv).concat(e),c=$t.spawn(f.execPath,e,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(u=>{f.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 Nt(p,"commander.executeSubCommandAsync","(close)")):f.exit(p)}),c.on("error",p=>{if(p.code==="ENOENT")this._checkForMissingExecutable(s,a,t._name);else if(p.code==="EACCES")throw new Error(`'${s}' not executable`);if(!d)f.exit(1);else{let u=new Nt(1,"commander.executeSubCommandAsync","(error)");u.nestedError=p,d(u)}}),this.runningCommand=c}_dispatchSubcommand(t,e,n){let o=this._findCommand(t);o||this.help({error:!0}),o._prepareForParse();let i;return i=this._chainOrCallSubCommandHook(i,o,"preSubcommand"),i=this._chainOrCall(i,()=>{if(o._executableHandler)this._executeSubCommand(o,e.concat(n));else return o._parseCommand(e,n)}),i}_dispatchHelpCommand(t){t||this.help();let e=this._findCommand(t);return e&&!e._executableHandler&&e.help(),this._dispatchSubcommand(t,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((t,e)=>{t.required&&this.args[e]==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=(n,o,i)=>{let s=o;if(o!==null&&n.parseArg){let a=`error: command-argument value '${o}' is invalid for argument '${n.name()}'.`;s=this._callParseArg(n,o,i,a)}return s};this._checkNumberOfArguments();let e=[];this.registeredArguments.forEach((n,o)=>{let i=n.defaultValue;n.variadic?o<this.args.length?(i=this.args.slice(o),n.parseArg&&(i=i.reduce((s,a)=>t(n,a,s),n.defaultValue))):i===void 0&&(i=[]):o<this.args.length&&(i=this.args[o],n.parseArg&&(i=t(n,i,n.defaultValue))),e[o]=i}),this.processedArgs=e}_chainOrCall(t,e){return t?.then&&typeof t.then=="function"?t.then(()=>e()):e()}_chainOrCallHooks(t,e){let n=t,o=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[e]!==void 0).forEach(i=>{i._lifeCycleHooks[e].forEach(s=>{o.push({hookedCommand:i,callback:s})})}),e==="postAction"&&o.reverse(),o.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(t,e,n){let o=t;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{o=this._chainOrCall(o,()=>i(this,e))}),o}_parseCommand(t,e){let n=this.parseOptions(e);if(this._parseOptionsEnv(),this._parseOptionsImplied(),t=t.concat(n.operands),e=n.unknown,this.args=t.concat(e),t&&this._findCommand(t[0]))return this._dispatchSubcommand(t[0],t.slice(1),e);if(this._getHelpCommand()&&t[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(t[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(e),this._dispatchSubcommand(this._defaultCommandName,t,e);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){o(),this._processArguments();let s;return s=this._chainOrCallHooks(s,"preAction"),s=this._chainOrCall(s,()=>this._actionHandler(this.processedArgs)),this.parent&&(s=this._chainOrCall(s,()=>{this.parent.emit(i,t,e)})),s=this._chainOrCallHooks(s,"postAction"),s}if(this.parent?.listenerCount(i))o(),this._processArguments(),this.parent.emit(i,t,e);else if(t.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",t,e);this.listenerCount("command:*")?this.emit("command:*",t,e):this.commands.length?this.unknownCommand():(o(),this._processArguments())}else this.commands.length?(o(),this.help({error:!0})):(o(),this._processArguments())}_findCommand(t){if(t)return this.commands.find(e=>e._name===t||e._aliases.includes(t))}_findOption(t){return this.options.find(e=>e.is(t))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(t=>{t.options.forEach(e=>{e.mandatory&&t.getOptionValue(e.attributeName())===void 0&&t.missingMandatoryOptionValue(e)})})}_checkForConflictingLocalOptions(){let t=this.options.filter(n=>{let o=n.attributeName();return this.getOptionValue(o)===void 0?!1:this.getOptionValueSource(o)!=="default"});t.filter(n=>n.conflictsWith.length>0).forEach(n=>{let o=t.find(i=>n.conflictsWith.includes(i.attributeName()));o&&this._conflictingOption(n,o)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(t=>{t._checkForConflictingLocalOptions()})}parseOptions(t){let e=[],n=[],o=e;function i(p){return p.length>1&&p[0]==="-"}let s=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==="--"){o===n&&o.push(p),o.push(...t.slice(d));break}if(a&&(!i(p)||s(p))){this.emit(`option:${a.name()}`,p);continue}if(a=null,i(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&&(!i(t[d])||s(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(o===e&&i(p)&&!(this.commands.length===0&&s(p))&&(o=n),(this._enablePositionalOptions||this._passThroughOptions)&&e.length===0&&n.length===0){if(this._findCommand(p)){e.push(p),n.push(...t.slice(d));break}else if(this._getHelpCommand()&&p===this._getHelpCommand().name()){e.push(p,...t.slice(d));break}else if(this._defaultCommandName){n.push(p,...t.slice(d));break}}if(this._passThroughOptions){o.push(p,...t.slice(d));break}o.push(p)}return{operands:e,unknown:n}}opts(){if(this._storeOptionsAsProperties){let t={},e=this.options.length;for(let n=0;n<e;n++){let o=this.options[n].attributeName();t[o]=o===this._versionOptionName?this._version:this[o]}return t}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((t,e)=>Object.assign(t,e.opts()),{})}error(t,e){this._outputConfiguration.outputError(`${t}
|
|
23
|
+
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
24
|
+
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
25
|
+
`),this.outputHelp({error:!0}));let n=e||{},o=n.exitCode||1,i=n.code||"commander.error";this._exit(o,i,t)}_parseOptionsEnv(){this.options.forEach(t=>{if(t.envVar&&t.envVar in f.env){let e=t.attributeName();(this.getOptionValue(e)===void 0||["default","config","env"].includes(this.getOptionValueSource(e)))&&(t.required||t.optional?this.emit(`optionEnv:${t.name()}`,f.env[t.envVar]):this.emit(`optionEnv:${t.name()}`))}})}_parseOptionsImplied(){let t=new Xr(this.options),e=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&e(n.attributeName())&&t.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(o=>!e(o)).forEach(o=>{this.setOptionValueWithSource(o,n.implied[o],"implied")})})}missingArgument(t){let e=`error: missing required argument '${t}'`;this.error(e,{code:"commander.missingArgument"})}optionMissingArgument(t){let e=`error: option '${t.flags}' argument missing`;this.error(e,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(t){let e=`error: required option '${t.flags}' not specified`;this.error(e,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(t,e){let n=s=>{let a=s.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||s},o=s=>{let a=n(s),c=a.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${o(t)} cannot be used with ${o(e)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(t){if(this._allowUnknownOption)return;let e="";if(t.startsWith("--")&&this._showSuggestionAfterError){let o=[],i=this;do{let s=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);o=o.concat(s),i=i.parent}while(i&&!i._enablePositionalOptions);e=ye(t,o)}let n=`error: unknown option '${t}'${e}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(t){if(this._allowExcessArguments)return;let e=this.registeredArguments.length,n=e===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${e} argument${n} but got ${t.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let t=this.args[0],e="";if(this._showSuggestionAfterError){let o=[];this.createHelp().visibleCommands(this).forEach(i=>{o.push(i.name()),i.alias()&&o.push(i.alias())}),e=ye(t,o)}let n=`error: unknown command '${t}'${e}`;this.error(n,{code:"commander.unknownCommand"})}version(t,e,n){if(t===void 0)return this._version;this._version=t,e=e||"-V, --version",n=n||"output the version number";let o=this.createOption(e,n);return this._versionOptionName=o.attributeName(),this._registerOption(o),this.on("option:"+o.name(),()=>{this._outputConfiguration.writeOut(`${t}
|
|
26
|
+
`),this._exit(0,"commander.version",t)}),this}description(t,e){return t===void 0&&e===void 0?this._description:(this._description=t,e&&(this._argsDescription=e),this)}summary(t){return t===void 0?this._summary:(this._summary=t,this)}alias(t){if(t===void 0)return this._aliases[0];let e=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(e=this.commands[this.commands.length-1]),t===e._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(t);if(n){let o=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${t}' to command '${this.name()}' as already have command '${o}'`)}return e._aliases.push(t),this}aliases(t){return t===void 0?this._aliases:(t.forEach(e=>this.alias(e)),this)}usage(t){if(t===void 0){if(this._usage)return this._usage;let e=this.registeredArguments.map(n=>Qr(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?e:[]).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=v.basename(t,v.extname(t)),this}executableDir(t){return t===void 0?this._executableDir:(this._executableDir=t,this)}helpInformation(t){let e=this.createHelp(),n=this._getOutputContext(t);e.prepareContext({error:n.error,helpWidth:n.helpWidth,outputHasColors:n.hasColors});let o=e.formatHelp(this,e);return n.hasColors?o:this._outputConfiguration.stripColor(o)}_getOutputContext(t){t=t||{};let e=!!t.error,n,o,i;return e?(n=a=>this._outputConfiguration.writeErr(a),o=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth()):(n=a=>this._outputConfiguration.writeOut(a),o=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth()),{error:e,write:a=>(o||(a=this._outputConfiguration.stripColor(a)),n(a)),hasColors:o,helpWidth:i}}outputHelp(t){let e;typeof t=="function"&&(e=t,t=void 0);let n=this._getOutputContext(t),o={error:n.error,write:n.write,command:this};this._getCommandAndAncestors().reverse().forEach(s=>s.emit("beforeAllHelp",o)),this.emit("beforeHelp",o);let i=this.helpInformation({error:n.error});if(e&&(i=e(i),typeof i!="string"&&!Buffer.isBuffer(i)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(i),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",o),this._getCommandAndAncestors().forEach(s=>s.emit("afterAllHelp",o))}helpOption(t,e){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",e??"display help for command"),(t||e)&&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 e=Number(f.exitCode??0);e===0&&t&&typeof t!="function"&&t.error&&(e=1),this._exit(e,"commander.help","(outputHelp)")}addHelpText(t,e){let n=["beforeAll","before","after","afterAll"];if(!n.includes(t))throw new Error(`Unexpected value for position to addHelpText.
|
|
27
|
+
Expecting one of '${n.join("', '")}'`);let o=`${t}Help`;return this.on(o,i=>{let s;typeof e=="function"?s=e({error:i.error,command:i.command}):s=e,s&&i.write(`${s}
|
|
28
|
+
`)}),this}_outputHelpIfRequested(t){let e=this._getHelpOption();e&&t.find(o=>e.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function _e(r){return r.map(t=>{if(!t.startsWith("--inspect"))return t;let e,n="127.0.0.1",o="9229",i;return(i=t.match(/^(--inspect(-brk)?)$/))!==null?e=i[1]:(i=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(e=i[1],/^\d+$/.test(i[3])?o=i[3]:n=i[3]):(i=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(e=i[1],n=i[3],o=i[4]),e&&o!=="0"?`${e}=${n}:${parseInt(o)+1}`:t})}function Lt(){if(f.env.NO_COLOR||f.env.FORCE_COLOR==="0"||f.env.FORCE_COLOR==="false")return!1;if(f.env.FORCE_COLOR||f.env.CLICOLOR_FORCE!==void 0)return!0}Ht.Command=jt;Ht.useColor=Lt});var Ae=$(A=>{"use strict";var{Argument:Oe}=et(),{Command:Mt}=Ce(),{CommanderError:Zr,InvalidArgumentError:be}=J(),{Help:tn}=xt(),{Option:we}=It();A.program=new Mt;A.createCommand=r=>new Mt(r);A.createOption=(r,t)=>new we(r,t);A.createArgument=(r,t)=>new Oe(r,t);A.Command=Mt;A.Option=we;A.Argument=Oe;A.Help=tn;A.CommanderError=Zr;A.InvalidArgumentError=be;A.InvalidOptionArgumentError=be});var h,R=_(()=>{"use strict";h=class extends Error{constructor(e,n,o,i){super(o);this.type=e;this.code=n;this.service=i;this.name="SvcError"}type;code;service;isAuthError(){return this.type==="AUTH_ERROR"}toJSON(){return{success:!1,error:{type:this.type,code:this.code,message:this.message,service:this.service}}}}});function nt(r){let t=r??"prod";if(!(t in Vt))throw new Error(`Unknown env: ${t}. Valid: ${Object.keys(Vt).join(", ")}`);return Vt[t]}function Te(r){let t=r??"prod";if(!(t in qt))throw new Error(`Unknown env: ${t}. Valid: ${Object.keys(qt).join(", ")}`);return qt[t]}function Ee(r){return en[r]??{timeout:rn}}var Vt,qt,en,rn,ot=_(()=>{"use strict";Vt={dev:"https://dev-hhl.yeyecha.com/api",prod:"https://hhl.yeyecha.com/api"},qt={dev:"https://dev-api.yeyecha.com",prod:"https://api.yeyecha.com"},en={report:{timeout:1e4},mdm:{timeout:1e4},baseinfo:{timeout:1e4},contract:{timeout:1e4},"user-center":{timeout:1e4}},rn=1e4});function ve(r){return{"X-Request-Id":crypto.randomUUID(),"X-Client":"yybpc-cli","X-Source":r}}var xe=_(()=>{"use strict"});var O,L=_(()=>{"use strict";O={agentLoginPath:"/sso/agentLogin",oauth:{clientId:"",authorizationURL:"",tokenURL:"",authorizePath:"/oauth2/authorize",tokenPath:"/oauth2/token",refreshPath:"/oauth2/refresh",userinfoPath:"/oauth2/userinfo",redirectPort:8399,redirectPath:"/callback",scopes:["authorize"]},storage:{get dir(){return process.env.YYBPC_CLI_HOME??`${process.env.HOME}/.yybpc-cli`},sessionFile:"session.json",tokenCacheDir:"token-cache"},refreshBufferMs:3e5}});function nn(r,t){let e=JSON.stringify(t),n=r==="prod"&&typeof t.msg=="string"&&t.msg.includes("\u767D\u540D\u5355")?"\uFF1B\u5982\u679C\u5F53\u524D\u8981\u67E5\u8BE2\u5F00\u53D1\u73AF\u5883\uFF0C\u8BF7\u663E\u5F0F\u4F20\u5165 --env dev":"";return`Agent \u767B\u5F55\u5931\u8D25: ${e}${n}`}async function on(r,t){let n=`${Te(t)}${O.agentLoginPath}`,o=await fetch(n,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:`mobile=${encodeURIComponent(r)}`});if(!o.ok)throw new h("AUTH_ERROR","AGENT_LOGIN_FAILED",`Agent \u624B\u673A\u53F7\u767B\u5F55\u5931\u8D25: HTTP ${o.status}`);let i=await o.json();if(i.status!==0||!i.data)throw new h("AUTH_ERROR","AGENT_LOGIN_FAILED",nn(t,i));let s=typeof i.data=="string"?i.data:i.data.tokenValue??i.data.access_token;if(!s)throw new h("AUTH_ERROR","AGENT_LOGIN_FAILED",`Agent \u767B\u5F55\u54CD\u5E94\u7F3A\u5C11 token: ${JSON.stringify(i)}`);return{tokenValue:s,expiresIn:7200}}async function De(r){let{phone:t,cache:e,env:n}=r;if(e){let i=await e.get(t);if(i)return i.accessToken}let o=await on(t,n);if(e){let i={userId:t,accessToken:o.tokenValue,expiresAt:Date.now()+o.expiresIn*1e3,obtainedVia:"delegation",createdAt:Date.now()};await e.set(t,i)}return o.tokenValue}var ke=_(()=>{"use strict";R();L();ot()});import{mkdir as sn,readFile as an,writeFile as cn,chmod as un,unlink as pn}from"fs/promises";import{existsSync as Pe}from"fs";async function it(r,t=448){await sn(r,{recursive:!0,mode:t})}async function H(r){if(!Pe(r))return null;try{return JSON.parse(await an(r,"utf8"))}catch{return null}}async function M(r,t,e=384){await cn(r,JSON.stringify(t,null,2)),await un(r,e)}async function V(r){Pe(r)&&await pn(r)}var st=_(()=>{"use strict"});import{join as ln}from"path";function Gt(r){let t=r??O.storage.dir;return ln(t,dn)}async function at(r){return H(Gt(r))}async function ct(r,t){let e=t??O.storage.dir;await it(e,448),await M(Gt(t),r,384)}async function Ie(r){await V(Gt(r))}var dn,K=_(()=>{"use strict";L();st();dn="session.json"});import{createServer as Mo}from"http";import{spawn as qo}from"child_process";function ut(r){return r?r.expiresAt>Date.now():!1}function Ft(r){return r?r.expiresAt-Date.now()<O.refreshBufferMs:!1}async function mn(r,t){try{let e=await fetch(O.oauth.tokenURL,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:r.refreshToken,client_id:O.oauth.clientId})});if(!e.ok)return null;let n=await e.json(),o={...r,accessToken:n.access_token,refreshToken:n.refresh_token??r.refreshToken,expiresAt:Date.now()+n.expires_in*1e3};return await ct(o,t),o.accessToken}catch{return null}}async function $e(r){let t=await at(r);if(!t)return null;if(ut(t)&&!Ft(t))return t.accessToken;if(t.refreshToken){let e=await mn(t,r);if(e)return e}return ut(t)?t.accessToken:null}var Yt=_(()=>{"use strict";L();K()});import{join as Ut}from"path";import{mkdirSync as hn}from"fs";var pt,Ne=_(()=>{"use strict";L();st();pt=class{dir;constructor(t,e){let n=t??Ut(O.storage.dir,O.storage.tokenCacheDir);this.dir=e?Ut(n,e):n,hn(this.dir,{recursive:!0,mode:448})}filePath(t){let e=t.replace(/[^a-zA-Z0-9_-]/g,"_");return Ut(this.dir,`${e}.json`)}async get(t){let e=await H(this.filePath(t));return!e||e.expiresAt<=Date.now()?null:e}async set(t,e){await M(this.filePath(t),e,384)}async del(t){await V(this.filePath(t))}}});function je(r){return Wt.has(r)||Wt.set(r,new pt(void 0,r)),Wt.get(r)}function Le(r){return process.env.SVC_USER_PHONE??r}function fn(r){return Le(r.asPhone)?"agent":"human"}async function D(r){let t=fn(r);if(t==="agent"){let n=Le(r.asPhone);return{token:await De({phone:n,cache:je(r.env),env:r.env}),mode:t}}let e=await $e();if(!e)throw new h("AUTH_ERROR","NOT_LOGGED_IN","\u672A\u63D0\u4F9B\u8EAB\u4EFD\u8BA4\u8BC1\uFF1A\u8BF7\u901A\u8FC7 --as-phone <\u624B\u673A\u53F7> \u6307\u5B9A\u8C03\u7528\u8EAB\u4EFD");return{token:e,mode:t}}async function He(r,t){await je(t).del(r)}var Wt,lt=_(()=>{"use strict";R();ke();Yt();Ne();Wt=new Map});function gn(r,t,e){let n=r.replace(/\/$/,""),o=t.startsWith("/")?t:`/${t}`,i=`${n}${o}`;if(e){let s=new URLSearchParams;for(let[c,d]of Object.entries(e))d!=null&&s.set(c,String(d));let a=s.toString();a&&(i+=`?${a}`)}return i}function Me(r,t){return{satoken:r,"Content-Type":"application/json",...ve(t)}}function Ve(r){Jt=r}function b(){return Jt}async function q(r){let t=Jt,e=nt(t.env),n=Ee(r.service),o={asPhone:t.asPhone,env:t.env},i="",s="human";if(r.anonymous)try{let g=await D(o);i=g.token,s=g.mode}catch{}else{let g=await D(o);i=g.token,s=g.mode}let a=gn(e,r.path,r.query),c=Me(i,s);if(t.dryRun)return{dryRun:!0,method:r.method,url:a,headers:{...c,satoken:"***"},body:r.body??null};t.verbose&&console.error(`[verbose] ${r.method} ${a}`);let d=Date.now(),p=async g=>{let w=new AbortController,C=setTimeout(()=>w.abort(),n.timeout);try{return await fetch(a,{method:r.method,headers:g,body:r.body?JSON.stringify(r.body):void 0,signal:w.signal})}catch(U){throw U.name==="AbortError"?new h("TRANSPORT_ERROR","TIMEOUT",`${r.service} \u670D\u52A1\u8BF7\u6C42\u8D85\u65F6`,r.service):new h("TRANSPORT_ERROR","NETWORK_ERROR",`\u7F51\u7EDC\u9519\u8BEF: ${U.message}`,r.service)}finally{clearTimeout(C)}},u=await p(c);if(u.status===401&&!r.anonymous)if(s==="agent"){let g=t.asPhone;g&&await He(g,t.env);let w=await D(o),C=Me(w.token,w.mode);u=await p(C)}else throw new h("AUTH_ERROR","TOKEN_EXPIRED","\u767B\u5F55\u5DF2\u8FC7\u671F\uFF1A\u8BF7\u901A\u8FC7 --as-phone <\u624B\u673A\u53F7> \u91CD\u65B0\u6307\u5B9A\u8C03\u7528\u8EAB\u4EFD");let l=Date.now()-d,m=c["X-Request-Id"];if(!u.ok){if(u.status===401||u.status===403)throw new h("AUTH_ERROR",`HTTP_${u.status}`,"\u6743\u9650\u4E0D\u8DB3\u6216\u767B\u5F55\u5DF2\u8FC7\u671F",r.service);let g;try{g=(await u.json()).message??`\u670D\u52A1\u8FD4\u56DE\u9519\u8BEF: ${u.status}`}catch{g=`\u670D\u52A1\u8FD4\u56DE\u9519\u8BEF: ${u.status}`}throw new h("BUSINESS_ERROR",`HTTP_${u.status}`,g,r.service)}return{success:!0,data:await u.json(),meta:{service:r.service,requestId:m,duration:l}}}var Jt,x=_(()=>{"use strict";R();ot();xe();lt();Jt={env:"prod",verbose:!1,dryRun:!1}});function qe(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)&&Object.keys(r).length===0}function Kt(r){if(Array.isArray(r))return r.map(Kt).filter(e=>e!=null&&e!==""&&!(Array.isArray(e)&&e.length===0)&&!qe(e));if(r&&typeof r=="object"){let t={};for(let[e,n]of Object.entries(r)){let o=Kt(n);o!=null&&o!==""&&!(Array.isArray(o)&&o.length===0)&&!qe(o)&&(t[e]=o)}return t}return r}function Qt(r){if(Array.isArray(r))return r.map(Qt);if(r&&typeof r=="object"){let t={};for(let[e,n]of Object.entries(r)){let o=yn[e]??e;t[o]=Qt(n)}return t}return r}function Bt(r,t={}){let e=r;return t.stripNulls&&(e=Kt(e)),t.shortenKeys&&(e=Qt(e)),e}var yn,Ge=_(()=>{"use strict";yn={id:"i",name:"n",code:"c",type:"t",status:"s",label:"lbl",value:"v",createTime:"ct",updateTime:"ut",createdAt:"crt",updatedAt:"udt",children:"ch",parentId:"pid",storeName:"sn",storeCode:"sc",address:"addr",phone:"ph",contact:"cnt",region:"rgn",warehouse:"wh",warehouseName:"whn",product:"pdt",productName:"pdn",skuCode:"skc",barcode:"bc",category:"cat",company:"co",companyName:"cn",franchisee:"fr",franchiseeName:"frn",supplier:"sup",supplierName:"spn",area:"ar",areaName:"arn",unit:"un",unitName:"unn"}});function Fe(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}function _n(r){return Array.isArray(r)&&r.length>0&&r.every(Fe)}function Cn(r){let t=[],e=new Set;for(let o of r)for(let i of Object.keys(o))e.has(i)||(e.add(i),t.push(i));let n=r.map(o=>t.map(i=>i in o?G(o[i]):null));return{columns:t,rows:n}}function G(r){if(_n(r))return Cn(r);if(Array.isArray(r))return r.map(G);if(Fe(r)){let t={};for(let[e,n]of Object.entries(r))t[e]=G(n);return t}return r}var Ye=_(()=>{"use strict"});function zt(r,t,e="none"){if(r&&typeof r=="object"&&r.dryRun===!0)return JSON.stringify(r,null,2);if(t==="raw")return JSON.stringify(r.data,null,2);if(e!=="none"){let n=e==="agent"?Bt(r.data,{stripNulls:!0,shortenKeys:!0}):e==="slim"?Bt(r.data,{stripNulls:!0}):r.data;return JSON.stringify(G(n))}return JSON.stringify({...r,data:G(r.data)},null,2)}function Q(r){if(r instanceof h)return JSON.stringify(r.toJSON(),null,2);let t=r instanceof Error?r.message:String(r);return JSON.stringify({success:!1,error:{type:"TRANSPORT_ERROR",code:"UNKNOWN",message:t}},null,2)}async function dt(r,t,e){try{let n=await e();console.log(zt(n,r,t))}catch(n){console.error(Q(n)),process.exit(1)}}var Xt=_(()=>{"use strict";R();Ge();Ye()});import{join as On}from"path";function Zt(r){return On(O.storage.dir,`report-cache-${r}.json`)}async function An(r){let t=await H(Zt(r));return!t||Date.now()-t.fetchedAt>bn||t.env!==r?null:t}async function Sn(r,t){await it(O.storage.dir,448);let e={fetchedAt:Date.now(),env:r,reports:t};await M(Zt(r),e,384)}async function Rn(r,t){let n=`${nt(r)}/report/config/list`,o=await fetch(n,{method:"POST",headers:{"Content-Type":"application/json",satoken:t},body:JSON.stringify({page:{pageNo:1,pageSize:500}})});if(o.status===401||o.status===403){let a=!!b().asPhone?"\u8BF7\u786E\u8BA4 --as-phone \u624B\u673A\u53F7\u6B63\u786E\uFF0C\u4E14\u5F53\u524D\u51FA\u53E3 IP \u5728\u8BE5\u73AF\u5883\u767D\u540D\u5355\u5185":"\u8BF7\u901A\u8FC7 --as-phone <\u624B\u673A\u53F7> \u6307\u5B9A\u8C03\u7528\u8EAB\u4EFD";throw new h("AUTH_ERROR","NOT_LOGGED_IN",`\u83B7\u53D6\u62A5\u8868\u5217\u8868\u9700\u8981\u8EAB\u4EFD\u8BA4\u8BC1\uFF08HTTP ${o.status}\uFF09\u3002${a}`,"report")}if(!o.ok)throw new h("TRANSPORT_ERROR",`HTTP_${o.status}`,`\u62A5\u8868\u5217\u8868\u83B7\u53D6\u5931\u8D25: ${n} \u8FD4\u56DE HTTP ${o.status}`,"report");let i=await o.json();if(i.status!==0||!i.data?.data)throw new h("BUSINESS_ERROR","REPORT_LIST_FAILED",`\u62A5\u8868\u5217\u8868\u83B7\u53D6\u5931\u8D25: ${JSON.stringify(i)}`,"report");return i.data.data.map(s=>{let a=(s.items||[]).flatMap(d=>(d.params||[]).map(p=>p.paramKey)).filter(Boolean),c=[...new Set(a)].filter(d=>!wn.has(d));return{reportId:s.reportId,name:s.reportName,category:s.categoryCode,params:c}})}async function mt(r,t,e=!1){if(!e){let o=await An(r);if(o)return o.reports}let n=await Rn(r,t);return await Sn(r,n),n}function Ue(r,t){return r.find(e=>e.reportId===t)}async function k(r){await V(Zt(r))}var bn,wn,N=_(()=>{"use strict";L();ot();st();R();x();bn=1440*60*1e3,wn=new Set(["determinePeriod","determineTrendPeriod","storeDataAuth","reginDataAuth","storeCountDataAuth","storeRepurchaseDataAuth","storeHourDataAuth","storeHourCountDataAuth","hundredMillion","tenThousand","hundredMillionName","tenThousandName","currentTableName","momDateDiff","pageSize","offset","limit","1"])});var ze={};j(ze,{filterReports:()=>Ke,meta:()=>P,renderReportDetail:()=>Qe,renderReportsText:()=>Be,runReportList:()=>En});function We(r){return r.trim().toLowerCase()}function Je(r){return r.params.filter(t=>t!=="startDate"&&t!=="endDate")}function Ke(r,t={}){let e=r;if(t.reportId){let n=e.find(o=>o.reportId===t.reportId);return n?[n]:[]}if(t.category){let n=We(t.category);e=e.filter(o=>We(o.category)===n)}return e}function Tn(r){let t=`yybpc-cli report query --report-id ${r.reportId} --start-date YYYY-MM-DD --end-date YYYY-MM-DD`,e=Je(r);return e.length===0?t:`${t} --param-json '{"${e[0]}":["VALUE"]}'`}function Qe(r){let t=Je(r),e=[`reportId: ${r.reportId}`,`name: ${r.name}`,`category: ${r.category}`,`params: ${r.params.join(", ")||"(none)"}`,`query: ${Tn(r)}`];return t.length>0&&e.push(`extraParams: ${t.join(", ")}`),e.join(`
|
|
29
|
+
`)}function Be(r,t={}){if(r.length===0)return"\u65E0\u53EF\u7528\u62A5\u8868";if(t.detail||t.reportId)return r.map(Qe).join(`
|
|
30
|
+
|
|
31
|
+
`);let e=[];e.push(`\u5171 ${r.length} \u4E2A\u62A5\u8868`);let n="";for(let o of r){o.category!==n&&(e.length>0&&e.push(""),e.push(`[${o.category}]`),n=o.category);let i=o.params.length>0?o.params.join(", "):"(none)";e.push(`${o.reportId} ${o.name}`),e.push(` params: ${i}`)}return e.join(`
|
|
32
|
+
`)}async function En(r={}){let t=r.json??!1,e=b(),{token:n}=await D({asPhone:e.asPhone,env:e.env}),o=await mt(e.env,n,r.refresh??!1),i=Ke(o,r);if(r.reportId&&i.length===0)throw new h("INPUT_ERROR","INVALID_REPORT_ID",`\u672A\u77E5\u7684\u62A5\u8868ID: ${r.reportId}`);console.log(t?JSON.stringify({reports:i},null,2):Be(i,r))}var P,ht=_(()=>{"use strict";N();lt();x();R();P={path:["report","list"],description:"\u5217\u51FA\u5206\u6790\u62A5\u8868\u5E76\u5C55\u793A\u53C2\u6570\u6458\u8981\uFF1B\u6240\u6709\u7ECF\u8425\u5206\u6790\u7C7B\u9700\u6C42\u5148\u4ECE report \u627E\u62A5\u8868",args:{json:{type:"boolean",description:"\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA"},category:{type:"string",description:"\u4EC5\u663E\u793A\u6307\u5B9A\u5206\u7C7B"},"report-id":{type:"string",description:"\u67E5\u770B\u5355\u4E2A\u62A5\u8868\u8BE6\u60C5\uFF08\u542B\u53C2\u6570\u548C\u67E5\u8BE2\u793A\u4F8B\uFF09"},detail:{type:"boolean",description:"\u663E\u793A\u8BE6\u7EC6\u4FE1\u606F"},refresh:{type:"boolean",description:"\u5F3A\u5236\u4ECE\u670D\u52A1\u7AEF\u5237\u65B0\u62A5\u8868\u5217\u8868\uFF0C\u5FFD\u7565\u672C\u5730\u7F13\u5B58"}}}});async function ft(r){let t=await Promise.all(Xe.map(n=>r({service:"baseinfo",method:"POST",path:"/baseinfo/common/dict/list/v1",body:{dictType:n},anonymous:!0}))),e={};return Xe.forEach((n,o)=>{let s=(t[o]?.data?.data??{})[n];e[n]=Array.isArray(s)?s.map(a=>({code:a.dictCode,name:a.dictName})):[]}),e}function gt(r){if(typeof r!="string"||r.trim()==="")throw new h("INPUT_ERROR","INVALID_CONFIG_JSON","\u5FC5\u987B\u63D0\u4F9B --config-json\uFF08\u62A5\u8868\u914D\u7F6E JSON\uFF09");let t;try{t=JSON.parse(r)}catch{throw new h("INPUT_ERROR","INVALID_CONFIG_JSON","--config-json \u4E0D\u662F\u5408\u6CD5\u7684 JSON")}if(t===null||typeof t!="object"||Array.isArray(t))throw new h("INPUT_ERROR","INVALID_CONFIG_JSON","--config-json \u5FC5\u987B\u662F JSON \u5BF9\u8C61");let e=t;if("categoryCode"in e&&e.categoryCode!==te)throw new h("INPUT_ERROR","INVALID_CATEGORY",`\u4EC5\u5141\u8BB8\u64CD\u4F5C\u4E1A\u52A1\u81EA\u5B9A\u4E49\u5206\u7C7B\uFF08categoryCode=${te}\uFF09\uFF1B\u4E0D\u5141\u8BB8\u64CD\u4F5C ${String(e.categoryCode)}`);return{...e,categoryCode:te}}var te,Xe,B=_(()=>{"use strict";R();te="business_custom",Xe=["report_type","report_datasource","report_result_function","report_connection_type","report_category"]});var tr={};j(tr,{meta:()=>F,renderGuide:()=>Ze,runGuide:()=>Dn});function ee(r){return vn.replace("__DATASOURCES__",r||xn)}async function Ze(r){if(!r)return ee("");try{let n=((await ft(r)).report_datasource??[]).map(o=>` ${o.code} = ${o.name}`).join(`
|
|
33
|
+
`);return ee(n)}catch{return ee("")}}async function Dn(r){console.log(await Ze(r))}var F,vn,xn,yt=_(()=>{"use strict";B();F={path:["report","config","guide"],description:"\u8F93\u51FA\u62A5\u8868\u7814\u53D1\u81EA\u5305\u542B\u624B\u518C\uFF08\u7ED9 AI agent \u7528\uFF0C\u542B\u5DE5\u4F5C\u6D41/\u914D\u7F6E\u7ED3\u6784/\u53C2\u6570\u8BF4\u660E/\u793A\u4F8B\uFF0C\u514D\u767B\u5F55\uFF09",args:{}},vn=`\u62A5\u8868\u7814\u53D1\u624B\u518C\uFF08report config\uFF09
|
|
34
|
+
\u76EE\u6807: \u7528 yybpc-cli report config \u7CFB\u5217\u547D\u4EE4\u4ECE\u96F6\u7814\u53D1\u4E1A\u52A1\u81EA\u5B9A\u4E49\u62A5\u8868\u3002categoryCode \u9501\u5B9A business_custom\u3002
|
|
35
|
+
\u9002\u7528\u8303\u56F4: \u81EA\u52A9\u5F00\u53D1\u5E38\u89C1\u62A5\u8868\uFF08\u805A\u5408\u7EDF\u8BA1 / \u6761\u4EF6\u8FC7\u6EE4 / \u5206\u7EC4\u6392\u884C / \u8D8B\u52BF / \u6811\u5F62\u4E0B\u94BB\uFF09\u3002
|
|
36
|
+
\u590D\u6742\u62A5\u8868\u5EFA\u8BAE\u5148 yybpc-cli report config get <\u73B0\u6709\u62A5\u8868ID> \u62F7\u8D1D\u73B0\u6709\u914D\u7F6E\u518D\u6539\u3002
|
|
37
|
+
|
|
38
|
+
\u7814\u53D1\u5DE5\u4F5C\u6D41\uFF085 \u6B65\uFF09
|
|
39
|
+
1. \u67E5\u53EF\u586B\u679A\u4E3E yybpc-cli report config dict
|
|
40
|
+
\u83B7\u53D6 dataSource / resultFunction / reportType / connectionType \u7684\u5408\u6CD5\u53D6\u503C
|
|
41
|
+
2. \u53C2\u8003\u73B0\u6709\u62A5\u8868 yybpc-cli report config get --report-id <\u73B0\u6709\u62A5\u8868ID>
|
|
42
|
+
\u62F7\u8D1D\u73B0\u6709\u62A5\u8868\u5B8C\u6574\u914D\u7F6E\u4F5C\u4E3A\u6A21\u677F\u3002\u63A8\u8350\u53C2\u8003: store_opening_count\uFF08multi+\u53C2\u6570\uFF09\u3001gj_store_business_2\uFF08tree_code\uFF09
|
|
43
|
+
\u6CE8\u610F: get \u8FD4\u56DE\u7684 items \u662F\u670D\u52A1\u5668\u5C55\u793A\u683C\u5F0F\uFF08params \u53EF\u80FD\u4E3A null\u3001\u5B57\u6BB5\u987A\u5E8F\u4E0D\u540C\uFF09\uFF0C
|
|
44
|
+
\u4E0D\u8981\u539F\u6837 POST\uFF1B\u4EE5\u672C\u624B\u518C\u4E0B\u65B9\u793A\u4F8B\u7684\u6241\u5E73 config-json \u683C\u5F0F\u4E3A\u51C6
|
|
45
|
+
3. \u65B0\u5EFA\u62A5\u8868 yybpc-cli report config create --config-json '{...}'
|
|
46
|
+
\u63D0\u4EA4\u914D\u7F6E JSON \u521B\u5EFA\u62A5\u8868\uFF1BcategoryCode \u4F1A\u88AB\u5F3A\u5236\u8BBE\u4E3A business_custom
|
|
47
|
+
4. \u9A8C\u8BC1\u51FA\u6570 yybpc-cli report query --report-id <\u65B0\u62A5\u8868ID> --start-date YYYY-MM-DD --end-date YYYY-MM-DD
|
|
48
|
+
\u6267\u884C\u62A5\u8868\u786E\u8BA4\u80FD\u8DD1\u51FA\u6570\u636E\uFF1B\u62A5\u9519\u5219\u7528 yybpc-cli report config update --config-json '{...}' \u4FEE\u6B63\u540E\u91CD\u8BD5
|
|
49
|
+
5. \u4E0A\u7EBF yybpc-cli report config enable --report-id <\u65B0\u62A5\u8868ID>
|
|
50
|
+
\u542F\u7528\u62A5\u8868\uFF1B\u505C\u7528\u7528 yybpc-cli report config disable --report-id <\u65B0\u62A5\u8868ID>
|
|
51
|
+
|
|
52
|
+
config-json \u9876\u5C42\u7ED3\u6784
|
|
53
|
+
reportId string\uFF08\u5FC5\u586B\uFF09\u62A5\u8868\u552F\u4E00\u6807\u8BC6\uFF0C\u5982 my_store_report\u3002\u5DF2\u5B58\u5728\u5219\u7528 update\uFF0C\u4E0D\u5B58\u5728\u5219\u7528 create
|
|
54
|
+
reportName string\uFF08\u5FC5\u586B\uFF09\u62A5\u8868\u663E\u793A\u540D
|
|
55
|
+
reportType string\uFF08\u5FC5\u586B\uFF09single \u6216 multi\uFF0C\u89C1\u4E0B
|
|
56
|
+
categoryCode \u7531 CLI \u5F3A\u5236\u6CE8\u5165 business_custom\uFF0C\u65E0\u9700\u586B\uFF1B\u4F20\u5176\u4ED6\u503C\u4F1A\u88AB\u62D2\u7EDD\uFF08INVALID_CATEGORY\uFF09
|
|
57
|
+
items array\uFF08\u5FC5\u586B\uFF09\u67E5\u8BE2\u5355\u5143\u6570\u7EC4\uFF0C\u89C1\u4E0B
|
|
58
|
+
|
|
59
|
+
reportType\uFF08\u62A5\u8868\u7C7B\u578B\uFF09\u4E0E items \u7684\u5173\u7CFB
|
|
60
|
+
single \u5355\u7EC4\u62A5\u8868\u3002items \u53EF\u4EE5\u662F\u4E00\u4E2A\uFF08\u8F93\u51FA\u8BE5 item \u7684\u7ED3\u679C\uFF09\uFF0C\u4E5F\u53EF\u4EE5\u591A\u4E2A
|
|
61
|
+
multi \u591A\u7EC4\u62A5\u8868\u3002items \u591A\u4E2A\uFF0C\u6BCF\u4E2A item \u72EC\u7ACB SQL + resultFunction\uFF0C\u8F93\u51FA\u591A\u4E2A\u5E76\u5217\u533A\u5757
|
|
62
|
+
\u8BF4\u660E: \u8F93\u51FA\u4E3A { groupKey: { itemKey, itemName, data } } \u7684\u7ED3\u6784\u3002
|
|
63
|
+
\u591A\u4E2A item \u65F6\uFF0C\u6BCF\u4E2A item \u5FC5\u987B\u5E26 groupKey\uFF08\u8F93\u51FA\u533A\u5757\u7684\u952E\uFF09+ groupName\uFF08\u533A\u5757\u663E\u793A\u540D\uFF09\uFF1B
|
|
64
|
+
\u5355\u4E2A item \u4E14\u65E0\u9700\u547D\u540D\u533A\u5757\u65F6\u53EF\u7701\u7565 groupKey/groupName\u3002
|
|
65
|
+
|
|
66
|
+
item\uFF08\u67E5\u8BE2\u5355\u5143\uFF09\u5B57\u6BB5
|
|
67
|
+
dataSource string\uFF08\u5FC5\u586B\uFF09\u6570\u636E\u6E90\u3002\u5F53\u524D\u53EF\u7528\u53D6\u503C\uFF08\u5B9E\u65F6\uFF09:
|
|
68
|
+
__DATASOURCES__
|
|
69
|
+
executeSql string\uFF08\u5FC5\u586B\uFF09SQL \u8BED\u53E5\u3002\u7528 #{paramKey} \u5360\u4F4D\u53C2\u6570\uFF08\u8FD0\u884C\u65F6\u7531 params \u66FF\u6362\uFF09
|
|
70
|
+
resultFunction string\uFF08\u5FC5\u586B\uFF09\u7ED3\u679C\u51FD\u6570\uFF0C\u51B3\u5B9A SQL \u7ED3\u679C\u5982\u4F55\u7EC4\u7EC7\uFF0C\u89C1\u4E0B
|
|
71
|
+
params array\uFF08\u5FC5\u586B\uFF0C\u4E0D\u53EF\u7701\u7565\uFF09\u53C2\u6570\u5B9A\u4E49\u6570\u7EC4\uFF0C\u89C1\u4E0B\u3002\u65E0\u53C2\u6570\u586B []
|
|
72
|
+
groupKey string\uFF08multi \u591A item \u65F6\u5FC5\u586B\uFF09\u8BE5 item \u8F93\u51FA\u533A\u5757\u7684\u952E\u540D\uFF0C\u5982 summary\u3001trend
|
|
73
|
+
groupName string\uFF08multi \u591A item \u65F6\u5FC5\u586B\uFF09\u8BE5\u533A\u5757\u7684\u4E2D\u6587\u663E\u793A\u540D\uFF0C\u5982 \u6C47\u603B\u3001\u8D8B\u52BF
|
|
74
|
+
|
|
75
|
+
resultFunction\uFF08\u7ED3\u679C\u51FD\u6570\uFF09\u2014\u2014 \u51B3\u5B9A SQL \u8F93\u51FA\u5217\u7684\u7EC4\u7EC7\u65B9\u5F0F
|
|
76
|
+
none \u539F\u6837\u8FD4\u56DE\u591A\u884C\u884C\u96C6\uFF08\u8868\u683C\uFF09\u3002SQL \u8F93\u51FA\u591A\u884C\u591A\u5217\u5373\u53EF\u3002\u6700\u5E38\u7528\u3001\u6700\u7B80\u5355
|
|
77
|
+
\u8F93\u51FA data \u5F62\u6001: {columns:[...], rows:[[...]]}
|
|
78
|
+
single_line \u53D6\u7B2C\u4E00\u884C\u8FD4\u56DE\u4E3A\u5BF9\u8C61\u3002SQL \u5E94\u53EA\u4EA7\u51FA\u4E00\u884C\uFF08\u5982\u805A\u5408 count/sum\uFF09\u3002\u591A\u5217 \u2192 \u5BF9\u8C61\u591A\u5B57\u6BB5
|
|
79
|
+
\u8F93\u51FA data \u5F62\u6001: {\u5B57\u6BB5\u540D: \u503C, ...}
|
|
80
|
+
group_single \u6309\u5206\u7EC4\u952E\u805A\u5408\uFF0C\u6BCF\u7EC4\u8FD4\u56DE\u5355\u884C\u3002SQL \u7B2C\u4E00\u5217\u4F5C\u4E3A\u5206\u7EC4 key\uFF0C\u5176\u4F59\u5217\u4E3A\u8BE5\u7EC4\u7684\u503C
|
|
81
|
+
group_multi \u6309\u5206\u7EC4\u952E\u805A\u5408\uFF0C\u6BCF\u7EC4\u8FD4\u56DE\u591A\u884C\u3002SQL \u7B2C\u4E00\u5217\u4F5C\u4E3A\u5206\u7EC4 key\uFF0C\u540C key \u7684\u591A\u884C\u5F52\u4E3A\u4E00\u7EC4
|
|
82
|
+
tree_code \u6784\u5EFA\u6811\u5F62\u7ED3\u6784\u3002SQL \u5FC5\u987B\u8F93\u51FA tree_code \u548C tree_name \u4E24\u5217\uFF1A
|
|
83
|
+
tree_code \u662F\u5C42\u7EA7\u8DEF\u5F84\uFF0C\u7528 - \u5206\u9694\uFF08\u5982 \u5E97\u5185-\u7F8E\u56E2\u5916\u5356 \u8868\u793A"\u7F8E\u56E2\u5916\u5356"\u662F"\u5E97\u5185"\u7684\u5B50\u8282\u70B9\uFF09
|
|
84
|
+
tree_name \u662F\u8282\u70B9\u663E\u793A\u540D\u3002\u540E\u7AEF\u636E tree_code \u7684\u5C42\u7EA7\u81EA\u52A8\u62FC\u6210\u6811
|
|
85
|
+
\u5E38\u914D\u5957\u8F93\u51FA value\u3001label \u5217\u4F9B\u524D\u7AEF\u4F7F\u7528
|
|
86
|
+
\u9009\u578B\u5EFA\u8BAE: \u5355\u4E2A\u6807\u91CF/\u6C47\u603B\u7528 single_line\uFF1B\u660E\u7EC6\u8868\u683C\u7528 none\uFF1B\u9700\u8981\u5206\u7EC4\u805A\u5408\u7528 group_*\uFF1B\u5C42\u7EA7\u4E0B\u94BB\u7528 tree_code
|
|
87
|
+
multi \u62A5\u8868\u91CC\u6BCF\u4E2A item \u5404\u81EA\u9009 resultFunction\uFF0C\u4E92\u4E0D\u5F71\u54CD\uFF08\u5982\u6C47\u603B\u533A\u5757\u7528 single_line\u3001\u660E\u7EC6\u533A\u5757\u7528 none\uFF09
|
|
88
|
+
|
|
89
|
+
SQL \u7F16\u5199\u8981\u70B9
|
|
90
|
+
- \u5217\u522B\u540D\u5373\u8F93\u51FA\u5B57\u6BB5\u540D: select count(*) as \u95E8\u5E97\u6570 \u2192 \u8F93\u51FA\u5B57\u6BB5\u5C31\u662F"\u95E8\u5E97\u6570"\uFF08\u652F\u6301\u4E2D\u6587\u522B\u540D\uFF09
|
|
91
|
+
- \u53C2\u6570\u5360\u4F4D\u7528 #{paramKey}\uFF0C\u8FD0\u884C\u65F6\u66FF\u6362\u3002\u65E0\u53C2\u6570\u7684\u7EAF SQL \u76F4\u63A5\u5199\u6B7B\u6761\u4EF6\u5373\u53EF
|
|
92
|
+
- \u6570\u636E\u6709\u6548\u6027\u901A\u5E38\u52A0 data_state=1 \u8FC7\u6EE4\uFF08\u8F6F\u5220\u9664\u6807\u8BB0\uFF09
|
|
93
|
+
- \u5404\u6570\u636E\u6E90\u662F\u4E0D\u540C\u7684\u5E93/\u5F15\u64CE\uFF08StarRocks/PostgreSQL \u7B49\uFF09\uFF0CSQL \u65B9\u8A00\u4EE5\u76EE\u6807\u6570\u636E\u6E90\u4E3A\u51C6
|
|
94
|
+
|
|
95
|
+
params\uFF08\u53C2\u6570\u673A\u5236\uFF09
|
|
96
|
+
\u6BCF\u4E2A\u53C2\u6570\u5F62\u5982 {paramKey, connectionType, value, fieldKey?, valueKey?}
|
|
97
|
+
paramKey \u53C2\u6570\u540D\u3002SQL \u91CC\u5199 #{paramKey} \u5F15\u7528\u6B64\u53C2\u6570\u7684\u5904\u7406\u7ED3\u679C
|
|
98
|
+
connectionType \u8FDE\u63A5\u7C7B\u578B\uFF0C\u51B3\u5B9A\u53C2\u6570\u5982\u4F55\u8F6C\u6210 SQL \u7247\u6BB5\uFF0C\u89C1\u4E0B
|
|
99
|
+
value \u53D6\u503C/\u8868\u8FBE\u5F0F\uFF0C\u542B\u4E49\u968F connectionType \u53D8\u5316
|
|
100
|
+
fieldKey \u4F5C\u7528\u7684\u6570\u636E\u5E93\u5217\u540D\uFF08in / function \u7C7B\u578B\u9700\u8981\uFF09
|
|
101
|
+
valueKey \u5165\u53C2\u5BF9\u8C61\u91CC\u53D6\u503C\u7684\u5B57\u6BB5\u540D\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u590D\u6742\u5165\u53C2\u89E3\u6784\uFF09
|
|
102
|
+
SQL \u4E2D\u7528 #{paramKey} \u5F15\u7528\u53C2\u6570\u7ED3\u679C\uFF1Bjexl \u8868\u8FBE\u5F0F\u4E2D\u7528 \${paramKey} \u5F15\u7528\u5176\u4ED6\u53C2\u6570\u503C
|
|
103
|
+
connectionType \u53D6\u503C\uFF08\u771F\u5B9E\u6837\u4F8B\uFF09:
|
|
104
|
+
jexl \u8868\u8FBE\u5F0F\u6C42\u503C\uFF08\u6761\u4EF6\u5224\u65AD/\u9ED8\u8BA4\u503C/\u8BA1\u7B97\uFF09
|
|
105
|
+
{"paramKey":"startDate","connectionType":"jexl","value":"\${startDate} != null and \${startDate}.length() >0 ? \${startDate} : \${T1}"}
|
|
106
|
+
in \u591A\u503C\u5B57\u6BB5\u8FC7\u6EE4\uFF0C\u9700 fieldKey \u6307\u5B9A\u5217\u540D\uFF0C\u751F\u6210 "\u5217 in (...)"
|
|
107
|
+
{"paramKey":"storeList","fieldKey":"store_code","connectionType":"in","value":"in"}
|
|
108
|
+
SQL \u91CC\u5199: where 1=1 #{storeList} \uFF08\u672A\u4F20\u503C\u65F6\u4E0D\u8FC7\u6EE4\uFF0C\u4F20\u503C\u5219\u751F\u6210 and store_code in (...)\uFF09
|
|
109
|
+
function SQL \u51FD\u6570/\u6761\u4EF6\u7247\u6BB5\uFF0C\u9700 fieldKey\uFF1Bvalue \u91CC #{} \u662F\u53C2\u6570\u503C\u5360\u4F4D
|
|
110
|
+
{"paramKey":"startMonth","fieldKey":"opening_date","connectionType":"function","value":">= TO_DATE(#{}, 'YYYY-MM')"}
|
|
111
|
+
SQL \u91CC\u5199: where #{startMonth} \u2192 \u751F\u6210 opening_date >= TO_DATE('2026-03', 'YYYY-MM')
|
|
112
|
+
data_auth \u6570\u636E\u6743\u9650\u8FC7\u6EE4\u3002\u540E\u7AEF\u6309\u3010\u5F53\u524D\u767B\u5F55\u7528\u6237\u3011\u7684 RBAC \u6570\u636E\u6743\u9650\u81EA\u52A8\u751F\u6210 SQL \u6761\u4EF6\uFF0C
|
|
113
|
+
\u6CE8\u5165\u5230 #{paramKey} \u5360\u4F4D\uFF08\u5F62\u5982 1 = 1 and (\u5B57\u6BB5 in (\u7528\u6237\u53EF\u89C1\u8303\u56F4...))\uFF09\uFF1B
|
|
114
|
+
\u8303\u56F4\u53EA\u53D6\u51B3\u4E8E\u767B\u5F55\u7528\u6237\uFF0C\u8C03\u7528\u65B9\u65E0\u9700\u4E5F\u65E0\u6CD5\u7528 query \u5165\u53C2\u63A7\u5236\u3002
|
|
115
|
+
value \u662F JSON \u5B57\u7B26\u4E32\uFF08\u5BF9\u5E94\u540E\u7AEF AuthFilterConfig\uFF09\uFF0C\u5E38\u7528\u5B57\u6BB5\uFF1A
|
|
116
|
+
appCode \u5FC5\u586B\uFF0C\u5E94\u7528\u7F16\u7801\uFF08\u7237\u63A7\u586B yk\uFF09
|
|
117
|
+
templateCode \u5FC5\u586B\uFF0C\u6570\u636E\u6743\u9650\u6A21\u677F\u7F16\u7801\uFF1A\u95E8\u5E97\u7EF4\u5EA6\u7528 yk_common_store_temp\u3001\u533A\u57DF\u7EF4\u5EA6\u7528 yk_common_region_temp
|
|
118
|
+
skipIfNoConfig \u8BE5\u7528\u6237\u65E0\u6B64\u6A21\u677F\u6743\u9650\u65F6 true=\u653E\u884C(1=1)/false=\u62E6\u6B7B(1=0)\uFF1B\u7EBF\u4E0A\u5B9E\u914D\u591A\u4E3A true
|
|
119
|
+
missingEnableSpecialValue \u9ED8\u8BA4 true\uFF0C\u53EF\u89C1\u8303\u56F4\u4E3A\u7A7A\u65F6\u7528\u5360\u4F4D\u907F\u514D SQL \u62A5\u9519\uFF08\u8FD4\u56DE\u7A7A\u6570\u636E\u800C\u975E\u5D29\uFF09
|
|
120
|
+
\uFF08joinSql/includeTable/excludeTable \u4E3A\u5B50\u8868\u9274\u6743\u7B49\u9AD8\u7EA7\u7528\u6CD5\uFF0C\u4E00\u822C\u7559\u7A7A\uFF09
|
|
121
|
+
\u771F\u5B9E\u6837\u4F8B\uFF08\u53EF\u76F4\u63A5\u6284\uFF1Bvalue \u662F\u8F6C\u4E49\u540E\u7684 JSON \u5B57\u7B26\u4E32\uFF09\uFF1A
|
|
122
|
+
\u95E8\u5E97 {"paramKey":"storeDataAuth","connectionType":"data_auth","value":"{\\"appCode\\":\\"yk\\",\\"skipIfNoConfig\\":true,\\"missingEnableSpecialValue\\":true,\\"templateCode\\":\\"yk_common_store_temp\\"}"}
|
|
123
|
+
\u533A\u57DF {"paramKey":"reginDataAuth","connectionType":"data_auth","value":"{\\"appCode\\":\\"yk\\",\\"skipIfNoConfig\\":true,\\"missingEnableSpecialValue\\":true,\\"templateCode\\":\\"yk_common_region_temp\\"}"}
|
|
124
|
+
SQL \u5199\u6CD5\uFF08\u4E0E\u7528\u6237\u7B5B\u9009\u53C2\u6570\u914D\u5BF9\u53E0\u52A0\uFF1Adata_auth \u7BA1"\u80FD\u770B\u54EA\u4E9B"\u3001List \u7BA1"\u60F3\u7B5B\u54EA\u4E9B"\uFF09\uFF1A
|
|
125
|
+
\u95E8\u5E97\u7C7B where 1=1 and #{storeDataAuth} and #{storeList}
|
|
126
|
+
\u533A\u57DF\u7C7B where 1=1 and #{regionList} and #{reginDataAuth}
|
|
127
|
+
templateCode \u662F rbac \u8FD0\u884C\u65F6\u6570\u636E\u3001dict \u67E5\u4E0D\u5230\uFF1B\u6700\u7A33\u59A5\u662F yybpc-cli report config get <\u73B0\u6709\u62A5\u8868ID> \u6284\u8FC7\u6765\u3002
|
|
128
|
+
\u6CE8\u610F\uFF1Avalue \u5199\u9519\u4E0D\u4F1A\u5728 create \u65F6\u62A5\u9519\uFF0C\u8981\u5230 report query \u624D\u66B4\u9732\u3002
|
|
129
|
+
direct_value \u76F4\u63A5\u53D6\u503C\uFF08\u5C11\u7528\uFF09
|
|
130
|
+
nomal \u666E\u901A\u66FF\u6362\uFF08\u5C11\u7528\uFF09
|
|
131
|
+
sql \u76F4\u63A5\u62FC SQL \u7247\u6BB5\uFF08\u5C11\u7528\uFF0C\u6CE8\u610F\u6CE8\u5165\u98CE\u9669\uFF09
|
|
132
|
+
|
|
133
|
+
query \u65F6\u7528\u6237\u53C2\u6570\u5982\u4F55\u5BF9\u63A5 config params
|
|
134
|
+
yybpc-cli report query \u7684\u5165\u53C2\uFF08--start-date/--end-date/--param-json \u91CC\u7684\u952E\uFF09\u4F1A\u4F5C\u4E3A jexl \u7684 \${\u5165\u53C2\u540D} \u6CE8\u5165\u3002
|
|
135
|
+
config \u91CC\u901A\u5E38\u8FD9\u6837\u6D88\u8D39: \u7528 jexl \u53C2\u6570\u628A\u7528\u6237\u5165\u53C2\u89C4\u6574\u6210 startDate/endDate\uFF0C
|
|
136
|
+
\u518D\u5728 SQL \u7528 #{startDate} \u5F15\u7528\u3002\u7528\u6237\u4E0D\u4F20\u65F6\u7528\u5185\u7F6E\u53D8\u91CF\uFF08\u5982 \${T1}\uFF09\u515C\u5E95\u3002
|
|
137
|
+
\u6267\u884C yybpc-cli report list --report-id <\u62A5\u8868ID> \u53EF\u67E5\u770B\u4E00\u4E2A\u62A5\u8868\u58F0\u660E\u4E86\u54EA\u4E9B\u7528\u6237\u53EF\u4F20\u53C2\u6570\u3002
|
|
138
|
+
|
|
139
|
+
\u5185\u7F6E\u53D8\u91CF\uFF08jexl value \u4E2D\u7528 \${\u53D8\u91CF\u540D} \u5F15\u7528\uFF0C\u4F5C\u65E5\u671F\u515C\u5E95\uFF09
|
|
140
|
+
\${T1} \u9ED8\u8BA4\u65E5\u671F\u951A\u70B9\uFF08\u67E5\u8BE2\u672A\u4F20\u65E5\u671F\u65F6\u7684\u515C\u5E95\u5F53\u65E5/\u9ED8\u8BA4\u503C\uFF09
|
|
141
|
+
\${T1_MONTH_START} \u6708\u521D\u951A\u70B9
|
|
142
|
+
\${T2} \u73AF\u6BD4\u671F\u65E5\u671F\u951A\u70B9
|
|
143
|
+
|
|
144
|
+
\u514D query \u5165\u53C2\u7684\u53C2\u6570\uFF08\u65E0\u9700\u8C03\u7528\u65B9\u4F20\uFF0C\u7531\u62A5\u8868\u914D\u7F6E + \u540E\u7AEF\u8FD0\u884C\u65F6\u51B3\u5B9A\uFF09
|
|
145
|
+
storeDataAuth / reginDataAuth \u6570\u636E\u6743\u9650\u5360\u4F4D\u3002\u672C\u8D28\u662F\u914D\u7F6E\u91CC connectionType=data_auth \u7684\u53C2\u6570
|
|
146
|
+
\uFF08paramKey \u662F\u547D\u540D\u7EA6\u5B9A\u3001\u975E\u56FA\u5B9A\u5173\u952E\u5B57\uFF09\uFF0C\u540E\u7AEF\u6309\u767B\u5F55\u7528\u6237 RBAC \u6743\u9650\u7B97\u51FA\u95E8\u5E97/\u533A\u57DF\u8303\u56F4\uFF1B\u586B\u4E86\u5165\u53C2\u4E5F\u65E0\u6548\u3002
|
|
147
|
+
\u6CE8\uFF1AreginDataAuth \u6CBF\u7528\u5386\u53F2\u62FC\u5199(regin)\uFF0C\u540E\u7AEF\u5BF9\u5E94\u6982\u5FF5\u662F region
|
|
148
|
+
determinePeriod / hundredMillion / tenThousand \u5176\u5B9E\u662F jexl \u7C7B\u578B\u7684\u5185\u7F6E\u53C2\u6570\uFF08\u5728 params \u91CC\u663E\u5F0F\u58F0\u660E\u3001
|
|
149
|
+
\u7528 \${T1} \u7B49\u5185\u7F6E\u53D8\u91CF\u515C\u5E95\uFF09\uFF0C\u4E0D\u662F\u540E\u7AEF\u51ED\u7A7A\u6CE8\u5165\uFF1B\u67D0\u62A5\u8868\u58F0\u660E\u4E86\u54EA\u4E9B\uFF0Cyybpc-cli report config get \u770B params
|
|
150
|
+
|
|
151
|
+
\u7EA6\u675F
|
|
152
|
+
categoryCode \u53EA\u80FD\u662F business_custom\uFF0CCLI \u5F3A\u5236\u6CE8\u5165\uFF1B\u4F20\u5176\u4ED6\u5206\u7C7B\u62A5 INVALID_CATEGORY
|
|
153
|
+
\u5199\u64CD\u4F5C\uFF08create/update/enable/disable\uFF09\u4E0D\u9700\u8981\u4EA4\u4E92\u786E\u8BA4\uFF0C\u8BF7\u8C28\u614E
|
|
154
|
+
SQL \u7684\u5408\u6CD5\u6027\u3001\u6743\u9650\u7531\u540E\u7AEF\u5224\u5B9A\uFF0CCLI \u53EA\u505A\u900F\u4F20
|
|
155
|
+
\u540E\u7AEF\u65E0\u5220\u9664\u63A5\u53E3\uFF1B\u4E0D\u518D\u9700\u8981\u7684\u62A5\u8868\u7528 disable \u505C\u7528
|
|
156
|
+
create/update \u6210\u529F\u540E\u672C\u5730\u62A5\u8868\u7F13\u5B58\u81EA\u52A8\u5931\u6548\uFF0C\u4E0B\u6B21 query/list \u91CD\u65B0\u62C9\u53D6
|
|
157
|
+
|
|
158
|
+
\u793A\u4F8B\uFF08configJson \u53EF\u76F4\u63A5\u7C98\u8D34\u5230 --config-json\uFF0C\u5355\u884C JSON\uFF09
|
|
159
|
+
\u793A\u4F8B 1 \u2014 \u6700\u7B80: \u7EAF SQL \u65E0\u53C2\u6570\uFF0C\u5355\u503C\u7EDF\u8BA1\uFF08single + single_line\uFF09
|
|
160
|
+
{"reportId":"demo_store_count","reportName":"\u95E8\u5E97\u603B\u6570","reportType":"single","items":[{"dataSource":"baseInfoDS","executeSql":"select count(*) as cnt from store where data_state=1","resultFunction":"single_line","params":[]}]}
|
|
161
|
+
|
|
162
|
+
\u793A\u4F8B 2 \u2014 \u5206\u7EC4\u660E\u7EC6\uFF0C\u65E0\u53C2\u6570\uFF08single + none\uFF09
|
|
163
|
+
{"reportId":"demo_status_dist","reportName":"\u95E8\u5E97\u72B6\u6001\u5206\u5E03","reportType":"single","items":[{"dataSource":"baseInfoDS","executeSql":"select business_status, count(*) as cnt from store where data_state=1 group by business_status order by cnt desc","resultFunction":"none","params":[]}]}
|
|
164
|
+
|
|
165
|
+
\u793A\u4F8B 3 \u2014 \u5E26\u7528\u6237\u53C2\u6570: \u65E5\u671F\u8303\u56F4\u8FC7\u6EE4\uFF08function \u53C2\u6570 + #{} \u5360\u4F4D\uFF09
|
|
166
|
+
{"reportId":"demo_opening_trend","reportName":"\u5F00\u5E97\u8D8B\u52BF","reportType":"single","items":[{"dataSource":"baseInfoDS","executeSql":"select TO_CHAR(opening_date,'yyyy-MM') as x, count(*) as y from store where opening_date is not null and data_state=1 and #{startMonth} and #{endMonth} group by TO_CHAR(opening_date,'yyyy-MM') order by x","resultFunction":"none","params":[{"paramKey":"startMonth","fieldKey":"opening_date","connectionType":"function","value":">= TO_DATE(#{}, 'YYYY-MM')"},{"paramKey":"endMonth","fieldKey":"opening_date","connectionType":"function","value":"< TO_DATE(#{}, 'YYYY-MM')+INTERVAL '1 month'"}]}]}
|
|
167
|
+
|
|
168
|
+
\u793A\u4F8B 4 \u2014 \u591A\u7EC4\u6307\u6807: multi \u591A item\uFF08\u6BCF item \u5E26 groupKey/groupName\uFF09
|
|
169
|
+
{"reportId":"demo_multi","reportName":"\u95E8\u5E97\u591A\u7EF4\u6982\u89C8","reportType":"multi","items":[{"groupKey":"summary","groupName":"\u6C47\u603B","dataSource":"baseInfoDS","executeSql":"select count(*) as \u95E8\u5E97\u603B\u6570 from store where data_state=1","resultFunction":"single_line","params":[]},{"groupKey":"status_dist","groupName":"\u72B6\u6001\u5206\u5E03","dataSource":"baseInfoDS","executeSql":"select business_status as x, count(*) as y from store where data_state=1 group by business_status","resultFunction":"none","params":[]}]}
|
|
170
|
+
|
|
171
|
+
\u793A\u4F8B 5 \u2014 \u6570\u636E\u6743\u9650\u8FC7\u6EE4: \u95E8\u5E97\u660E\u7EC6\u6309\u767B\u5F55\u7528\u6237\u53EF\u89C1\u8303\u56F4\u81EA\u52A8\u8FC7\u6EE4\uFF08data_auth \u4E0E storeList \u914D\u5BF9\u53E0\u52A0\uFF09
|
|
172
|
+
{"reportId":"demo_store_scoped","reportName":"\u6211\u7684\u95E8\u5E97\u660E\u7EC6","reportType":"single","items":[{"dataSource":"baseInfoDS","executeSql":"select store_code, store_name from store where data_state=1 and #{storeDataAuth}","resultFunction":"none","params":[{"paramKey":"storeDataAuth","connectionType":"data_auth","value":"{\\"appCode\\":\\"yk\\",\\"skipIfNoConfig\\":true,\\"missingEnableSpecialValue\\":true,\\"templateCode\\":\\"yk_common_store_temp\\"}"}]}]}
|
|
173
|
+
\u8981\u70B9: #{storeDataAuth} \u88AB\u540E\u7AEF\u66FF\u6362\u6210 1 = 1 and (store_code in (\u5F53\u524D\u7528\u6237\u8D1F\u8D23\u95E8\u5E97...))\uFF1BtemplateCode \u7528 rbac \u5DF2\u5B58\u5728\u6A21\u677F\uFF08\u95E8\u5E97 yk_common_store_temp / \u533A\u57DF yk_common_region_temp\uFF09\uFF0C\u52FF\u81C6\u9020
|
|
174
|
+
`,xn=" \uFF08\u672A\u80FD\u5B9E\u65F6\u83B7\u53D6\uFF0C\u8BF7\u8FD0\u884C yybpc-cli report config dict \u67E5\u770B\u53EF\u7528\u6570\u636E\u6E90\uFF09"});var T=_(()=>{"use strict"});var ue={};j(ue,{buildReportQueryBody:()=>mr,default:()=>ce,normalizeReportQueryArgs:()=>ae,parseParamJson:()=>se,runReportQuery:()=>hr});function Ct(r,...t){for(let e of t){let n=r[e];if(n==null)continue;let o=String(n).trim();if(o)return o}}function ie(r){let t=r.trim();if(t.startsWith("["))try{let e=JSON.parse(t);if(Array.isArray(e))return e.map(n=>String(n))}catch{}return t.includes(",")?t.split(",").map(e=>e.trim()).filter(Boolean):t}function se(r){if(!r)return{};try{let t=JSON.parse(r);if(!t||typeof t!="object"||Array.isArray(t))throw new Error("not an object");return t}catch{throw new h("INPUT_ERROR","INVALID_PARAM_JSON",'--param-json \u5FC5\u987B\u662F JSON \u5BF9\u8C61\uFF0C\u4F8B\u5982 {"regionList":["3301"]}')}}function ae(r){let t=se(r.params),e=se(r.paramJson??r["param-json"]),n={...t,...e},o=Ct(r,"date"),i=Ct(r,"reportId","report-id","report")??(typeof n.reportId=="string"?n.reportId:void 0),s=Ct(r,"startDate","start-date")??(typeof n.startDate=="string"?n.startDate:void 0)??o,a=Ct(r,"endDate","end-date")??(typeof n.endDate=="string"?n.endDate:void 0)??o;return delete n.reportId,delete n.startDate,delete n.endDate,{reportId:i,startDate:s,endDate:a,extraParams:n,passthroughArgs:r}}function dr(r){if(!r.reportId)throw new h("INPUT_ERROR","MISSING_REPORT_ID","\u5FC5\u987B\u63D0\u4F9B\u62A5\u8868ID\uFF1B\u5148\u6267\u884C yybpc-cli report list \u67E5\u770B\u53EF\u7528\u62A5\u8868\uFF0C\u518D\u4F7F\u7528 --report-id");if(!r.startDate||!r.endDate)throw new h("INPUT_ERROR","MISSING_DATE_RANGE","\u5FC5\u987B\u63D0\u4F9B\u67E5\u8BE2\u65E5\u671F\uFF1B\u4F7F\u7528 --date YYYY-MM-DD\uFF0C\u6216\u540C\u65F6\u63D0\u4F9B --start-date \u548C --end-date")}function lr(r,t,e){if(e==="reportId")throw new h("INPUT_ERROR","INVALID_REPORT_PARAM","--param-json \u4E0D\u80FD\u5305\u542B reportId");if(!r.params.includes(e))throw new h("INPUT_ERROR","UNSUPPORTED_REPORT_PARAM",`\u62A5\u8868 ${t} \u4E0D\u652F\u6301\u53C2\u6570 ${e}\uFF1B\u53EF\u7528\u53C2\u6570: ${r.params.join(", ")}`)}function mr(r,t){let e=ae(t);dr(e);let n=e.reportId,o={reportId:n,startDate:e.startDate,endDate:e.endDate},i={...e.extraParams};for(let a of Object.keys(i))lr(r,n,a);Object.assign(o,i);let s={region:{apiParam:"regionList",parse:ie},storeId:{apiParam:"storeList",parse:ie},channel:{apiParam:"channelList",parse:ie},orderField:{apiParam:"orderField"},orderDir:{apiParam:"orderDir"}};for(let[a,c]of Object.entries(s)){let d=e.passthroughArgs[a];d==null||d===""||(lr(r,n,c.apiParam),o[c.apiParam]=c.parse?c.parse(String(d)):d)}return o}async function hr(r,t){let e=b(),n=ae(r);dr(n);let o=n.reportId,{token:i}=await D({asPhone:e.asPhone,env:e.env}),s=await mt(e.env,i),a=Ue(s,o);if(!a)throw new h("INPUT_ERROR","INVALID_REPORT_ID",`\u672A\u77E5\u7684\u62A5\u8868ID: ${o}\uFF1B\u5148\u6267\u884C yybpc-cli report list \u67E5\u627E\u53EF\u7528\u62A5\u8868`);let c=mr(a,r);return t({service:"report",method:"POST",path:"/report/query/single",body:c})}var ce,Ot=_(()=>{"use strict";T();N();lt();x();R();ce={meta:{description:"\u67E5\u8BE2\u62A5\u8868\u5206\u6790\u6570\u636E\uFF1B\u6240\u6709\u5206\u6790\u7C7B\u67E5\u8BE2\u4F18\u5148\u4F7F\u7528 report"},args:{"report-id":{type:"string",required:!0,description:"\u62A5\u8868ID\uFF08\u5982 gj_target_achievement_3\uFF09"},date:{type:"string",description:"\u5355\u65E5\u5FEB\u6377\u5199\u6CD5 (YYYY-MM-DD)\uFF1B\u4F1A\u540C\u65F6\u4F5C\u4E3A\u5F00\u59CB\u548C\u7ED3\u675F\u65E5\u671F"},"start-date":{type:"string",description:"\u5F00\u59CB\u65E5\u671F (YYYY-MM-DD)"},"end-date":{type:"string",description:"\u7ED3\u675F\u65E5\u671F (YYYY-MM-DD)"},region:{type:"string",description:"\u6218\u533AID\uFF1B\u652F\u6301\u5355\u503C\u3001\u9017\u53F7\u5206\u9694\u6216 JSON \u6570\u7EC4"},"store-id":{type:"string",description:"\u95E8\u5E97ID\uFF1B\u652F\u6301\u5355\u503C\u3001\u9017\u53F7\u5206\u9694\u6216 JSON \u6570\u7EC4"},channel:{type:"string",description:"\u6E20\u9053\u7F16\u7801\uFF1B\u652F\u6301\u5355\u503C\u3001\u9017\u53F7\u5206\u9694\u6216 JSON \u6570\u7EC4"},"order-field":{type:"string",description:"\u6392\u5E8F\u5B57\u6BB5"},"order-dir":{type:"string",description:"\u6392\u5E8F\u65B9\u5411 (asc/desc)"},"param-json":{type:"string",description:'\u989D\u5916\u62A5\u8868\u53C2\u6570 JSON\uFF0C\u5982 {"brandList":["B01"]}'}},api:{service:"report",method:"POST",path:"/report/query/single"},run:async({args:r,request:t})=>hr(r,t)}});var Sr={};j(Sr,{runSetToken:()=>Wn});async function Wn(r){let t={accessToken:r,refreshToken:"",expiresAt:Date.now()+864e5,userId:"",username:"",loginAt:Date.now()};await ct(t),console.log(JSON.stringify({success:!0,data:{message:"Token \u5DF2\u4FDD\u5B58"}},null,2))}var Rr=_(()=>{"use strict";K()});var Tr={};j(Tr,{runLogout:()=>Jn});async function Jn(){await Ie(),console.log(JSON.stringify({success:!0,data:{message:"\u5DF2\u9000\u51FA\u767B\u5F55"}},null,2))}var Er=_(()=>{"use strict";K()});var vr={};j(vr,{runStatus:()=>Kn});async function Kn(){let r=await at();if(!r){console.log(JSON.stringify({success:!0,data:{loggedIn:!1,message:"\u5F53\u524D\u672A\u767B\u5F55\uFF0C\u8BF7\u6267\u884C yybpc-cli auth set-token <token>"}},null,2));return}let t=ut(r),e=Ft(r);console.log(zt({success:!0,data:{loggedIn:t,userId:r.userId,username:r.username,expiresAt:new Date(r.expiresAt).toISOString(),needsRefresh:e,loginAt:new Date(r.loginAt).toISOString()},meta:{service:"auth",requestId:"-",duration:0}},"json"))}var xr=_(()=>{"use strict";K();Yt();Xt()});var Se=Mr(Ae(),1),{program:lo,createCommand:mo,createArgument:ho,createOption:fo,CommanderError:go,InvalidArgumentError:yo,InvalidOptionArgumentError:_o,Command:Re,Argument:Co,Option:Oo,Help:bo}=Se.default;x();Xt();ht();yt();var er={name:"@yybpc/cli",version:"1.0.0",description:"\u516C\u53F8\u5185\u90E8\u670D\u52A1\u7EDF\u4E00 CLI\uFF08\u62A5\u8868\u67E5\u8BE2 + \u4E2D\u53F0\u4E3B\u6863/\u4F9B\u5E94\u94FE/\u7528\u6237\u4E2D\u5FC3\uFF09",type:"module",bin:{"yybpc-cli":"dist/index.js"},files:["dist/index.js"],engines:{node:">=18"},scripts:{dev:"tsx src/index.ts",build:"tsup","build:sea":"bash scripts/build-sea.sh","build:sea:linux":"bash scripts/build-sea-linux.sh",typecheck:"tsc --noEmit",prepublishOnly:"tsup"},devDependencies:{"@types/node":"^22.10.0",commander:"^14.0.3",tsup:"^8.3.5",tsx:"^4.19.2",typescript:"^5.7.2"}};var z=er.version;var rr=[{...P,path:[...P.path]},{description:F.description,path:[...F.path]}],Pn=[{bullet:"`--env <dev|prod>` \u2014 \u76EE\u6807\u73AF\u5883\uFF08\u9ED8\u8BA4 prod\uFF09"},{bullet:"`--format <auto|json|raw>` \u2014 \u8F93\u51FA\u683C\u5F0F\uFF08\u9ED8\u8BA4 auto\uFF09\u3002auto=\u7D27\u51D1\u5217\u5F0F\uFF08\u5BF9\u8C61\u6570\u7EC4\u8F6C {columns,rows}\uFF0C\u7701 token\uFF0C\u9002\u5408 agent\uFF09\uFF1Bjson=\u5E26\u7F29\u8FDB\u7684\u5B8C\u6574\u4FE1\u5C01\uFF08\u9002\u5408\u4EBA\u8BFB\uFF09\uFF1Braw=\u540E\u7AEF\u539F\u6837\u6570\u636E\u3002\u6CE8\uFF1Areport config \u7CFB\u5217\u9ED8\u8BA4\u8F93\u51FA\u540E\u7AEF\u539F\u6837\u7ED3\u6784\uFF08\u4E0D\u538B {columns,rows}\uFF0C\u4FBF\u4E8E\u5B66\u4E60\u914D\u7F6E shape\uFF09\uFF0C\u9700\u7701 token \u53EF\u663E\u5F0F\u52A0 --compact"},{bullet:"`--compact` \u2014 \u7D27\u51D1\u5217\u5F0F\u8F93\u51FA\uFF08\u7B49\u540C\u9ED8\u8BA4 auto\uFF1A\u5BF9\u8C61\u6570\u7EC4\u8F6C {columns,rows}\uFF0C\u4E0D\u7F29\u8FDB\uFF09"},{bullet:"`--slim` \u2014 compact \u57FA\u7840\u4E0A\u518D\u79FB\u9664 null/\u7A7A\u503C"},{bullet:"`--agent` \u2014 slim \u57FA\u7840\u4E0A\u518D\u7F29\u77ED\u5B57\u6BB5\u540D\uFF08\u6700\u7701 token\uFF0C\u7ED9 LLM \u7528\uFF09"},{bullet:"`--verbose` \u2014 \u6253\u5370\u8C03\u8BD5\u4FE1\u606F\uFF08\u8BF7\u6C42 URL \u7B49\uFF0C\u8F93\u51FA\u5230 stderr\uFF09"},{bullet:"`--dry-run` \u2014 \u9884\u89C8\u5C06\u53D1\u51FA\u7684\u8BF7\u6C42\uFF08method/url/body\uFF09\uFF0C\u4E0D\u5B9E\u9645\u6267\u884C"},{bullet:"`--as-phone <phone>` \u2014 Agent \u6A21\u5F0F\uFF1A\u4EE3\u8868\u6307\u5B9A\u624B\u673A\u53F7\u7528\u6237\u8C03\u7528"}],In=[{flag:"--env",description:"\u76EE\u6807\u73AF\u5883\uFF08dev/prod\uFF09",default:"prod"},{flag:"--format",description:"\u8F93\u51FA\u683C\u5F0F\uFF1Aauto=\u7D27\u51D1\u5217\u5F0F({columns,rows},\u7701token)/json=\u5E26\u7F29\u8FDB\u5B8C\u6574\u4FE1\u5C01/raw=\u540E\u7AEF\u539F\u6837\u3002report config \u7CFB\u5217\u9ED8\u8BA4\u8F93\u51FA\u539F\u6837\u7ED3\u6784(\u4E0D\u538B\u7F29),\u7701 token \u53EF\u52A0 --compact",default:"auto"},{flag:"--compact",description:"\u7D27\u51D1\u5217\u5F0F\u8F93\u51FA\uFF08\u7B49\u540C\u9ED8\u8BA4 auto\uFF1A\u5BF9\u8C61\u6570\u7EC4\u8F6C {columns,rows}\uFF0C\u4E0D\u7F29\u8FDB\uFF09"},{flag:"--slim",description:"compact \u57FA\u7840\u4E0A\u518D\u79FB\u9664 null/\u7A7A\u503C"},{flag:"--agent",description:"slim \u57FA\u7840\u4E0A\u518D\u7F29\u77ED\u5B57\u6BB5\u540D\uFF08\u6700\u7701 token\uFF0C\u7ED9 LLM \u7528\uFF09"},{flag:"--verbose",description:"\u6253\u5370\u8C03\u8BD5\u4FE1\u606F\uFF08\u8F93\u51FA\u5230 stderr\uFF09"},{flag:"--dry-run",description:"\u9884\u89C8\u5C06\u53D1\u51FA\u7684\u8BF7\u6C42\uFF08method/url/body\uFF09\uFF0C\u4E0D\u5B9E\u9645\u6267\u884C"},{flag:"--as-phone",description:"Agent \u6A21\u5F0F\uFF1A\u4EE3\u8868\u6307\u5B9A\u624B\u673A\u53F7\u7528\u6237\u8C03\u7528"}],ir=["\u6240\u6709\u7ECF\u8425\u5206\u6790\u3001\u8D8B\u52BF\u5224\u65AD\u3001\u4E1A\u7EE9\u89E3\u8BFB\u7C7B\u9700\u6C42\uFF0C\u4F18\u5148\u4F7F\u7528 report","\u53EA\u6709 report \u67E5\u4E0D\u5230\u3001\u672A\u8986\u76D6\u6216\u5F53\u524D\u6CA1\u6709\u76F8\u5173\u62A5\u8868\u65F6\uFF0C\u624D\u5141\u8BB8\u4F7F\u7528\u5176\u4ED6\u6A21\u5757","\u6539\u7528 master-data / supply-chain / user-center \u65F6\uFF0C\u5FC5\u987B\u660E\u786E\u544A\u77E5\u7528\u6237\uFF1A\u5F53\u524D\u62A5\u8868\u7CFB\u7EDF\u6682\u65E0\u76F8\u5173\u6570\u636E\uFF0C\u4EE5\u4E0B\u5206\u6790\u57FA\u4E8E\u4E3B\u6863\u4FE1\u606F\uFF0C\u4E0D\u7B49\u540C\u4E8E\u7ECF\u8425\u5206\u6790\u62A5\u8868","master-data / supply-chain / user-center \u4E3B\u8981\u7528\u4E8E\u8865\u5145\u4E3B\u6863\u3001\u4F9B\u5E94\u94FE\u3001\u7EC4\u7EC7\u7B49\u57FA\u7840\u4FE1\u606F\uFF0C\u4E0D\u5E94\u9ED8\u8BA4\u66FF\u4EE3 report"],$n=ir.map((r,t)=>({priority:t+1,rule:r})),sr=["\u6700\u9AD8\u4F18\u5148\u7EA7\u547D\u4EE4: yybpc-cli report query","\u6240\u6709\u7ECF\u8425\u5206\u6790\u3001\u8D8B\u52BF\u5224\u65AD\u3001\u4E1A\u7EE9\u89E3\u8BFB\u7C7B\u9700\u6C42\uFF0C\u9ED8\u8BA4\u5148\u7528 yybpc-cli report query","\u5148\u6267\u884C yybpc-cli report list \u62C9\u53D6\u5168\u90E8\u62A5\u8868\uFF0C\u518D\u7528 yybpc-cli report list --report-id REPORT_ID \u67E5\u770B\u8BE6\u60C5","\u6807\u51C6\u8DEF\u5F84: \u5168\u91CF\u62A5\u8868 -> \u5355\u62A5\u8868\u8BE6\u60C5 -> \u6267\u884C\u67E5\u8BE2","\u793A\u4F8B: yybpc-cli report list\uFF0C\u7136\u540E\u6267\u884C yybpc-cli report query --report-id REPORT_ID --date 2026-04-22"],Nn=sr.map((r,t)=>({priority:t+1,hint:r})),nr=["report","master-data","supply-chain","user-center"];function jn(r,t){return r.join(" ").localeCompare(t.join(" "))}function or(r){if(r.path[0]==="report"){if(r.path[1]==="list")return 0;if(r.path[1]==="query")return 1}return 100}function re(r){return[...r].sort((t,e)=>{let n=nr.indexOf(t.path[0]),o=nr.indexOf(e.path[0]),i=n===-1?Number.MAX_SAFE_INTEGER:n,s=o===-1?Number.MAX_SAFE_INTEGER:o;if(i!==s)return i-s;let a=or(t),c=or(e);return a!==c?a-c:jn(t.path,e.path)})}function _t(r){let t=r.map(e=>({path:e.path,description:e.def.meta.description,args:e.def.args}));for(let e of rr)if(t.some(n=>n.path.length===e.path.length&&n.path.every((o,i)=>o===e.path[i])))throw new Error(`MANUAL_COMMANDS collides with apiCommands on path: ${e.path.join(" ")}`);return[...t,...rr]}function Ln(r){let t=re(_t(r)),e=[];e.push(`yybpc-cli ${z}`),e.push("\u9996\u9009\u5165\u53E3");for(let o of sr)e.push(` ${o}`);e.push(""),e.push("\u6570\u636E\u4F18\u5148\u7EA7");for(let o of ir)e.push(` ${o}`);e.push(""),e.push("\u5168\u5C40\u53C2\u6570");for(let o of Pn)e.push(` ${o.bullet.replaceAll("`","")}`);e.push(""),e.push("\u547D\u4EE4");let n="";for(let o of t)o.path[0]!==n&&(e[e.length-1]!=="\u547D\u4EE4"&&e.push(""),e.push(` [${o.path[0]}]`),n=o.path[0]),e.push(` yybpc-cli ${o.path.join(" ")} ${o.description}`);return e.push(""),e.push("\u66F4\u591A\u5E2E\u52A9"),e.push(" yybpc-cli help <command> \u4F8B\u5982: yybpc-cli help report query"),e}function ar(r,t){return re(_t(t)).filter(e=>e.path.length>r.length&&r.every((n,o)=>e.path[o]===n))}function Hn(r,t){let e=ar(r,t);if(e.length===0)return[`\u672A\u627E\u5230: ${r.join(" ")}`];let n=[];n.push(`yybpc-cli ${r.join(" ")} \u4E0B\u7684\u547D\u4EE4`);let o=pr(r);if(o.length>0){n.push("\u89C4\u5219");for(let i of o)n.push(` ${i}`);n.push("")}n.push("\u547D\u4EE4");for(let i of e)n.push(` yybpc-cli ${i.path.join(" ")} ${i.description}`);return n}function ne(r,t){return _t(t).find(e=>e.path.length===r.length&&e.path.every((n,o)=>n===r[o]))}function Mn(r,t){let e=ne(r,t),n=[];n.push(`yybpc-cli ${e.path.join(" ")}`),n.push(e.description);let o=qn(e);if(o.length>0){n.push(""),n.push("\u5FEB\u901F\u5F00\u59CB");for(let a of o)n.push(` ${a}`)}n.push(""),n.push("\u793A\u4F8B");for(let a of Vn(e))n.push(` ${a}`);n.push(""),n.push("\u53C2\u6570");let i=e.args??{};if(Object.keys(i).length===0)n.push(" \uFF08\u65E0\u53C2\u6570\uFF09");else for(let[a,c]of Object.entries(i)){let d=c.required?" \u5FC5\u586B":"",p=c.description??"",u=c.default!==void 0?` \u9ED8\u8BA4 ${c.default}`:"",l=`${d}${p?` ${p}`:""}${u}`,m=c.enum?c.enum.join("|"):c.type,y=c.type==="boolean"?`--${a}`:`--${a} <${m}>`;n.push(` ${y}${l}`)}let s=ur(e);if(s.length>0){n.push(""),n.push("\u89C4\u5219");for(let a of s)n.push(` ${a}`)}return n}function cr(r){let t=[`yybpc-cli ${r.path.join(" ")}`];for(let[e,n]of Object.entries(r.args??{}))if(n.required){let o=n.enum?n.enum.join("|"):e.toUpperCase().replace(/-/g,"_");t.push(`--${e} <${o}>`)}return t.join(" ")}function Vn(r){let t=`yybpc-cli ${r.path.join(" ")}`;return r.path[0]==="report"&&r.path[1]==="list"?[t,`${t} --category gj_store_ranking`,`${t} --report-id gj_target_achievement_3`]:r.path[0]==="report"&&r.path[1]==="query"?["\u5148\u770B\u5168\u91CF\u62A5\u8868: yybpc-cli report list","\u770B\u53C2\u6570: yybpc-cli report list --report-id gj_target_achievement_3",`${t} --report-id gj_target_achievement_3 --date 2026-04-22`,`${t} --report-id gj_target_achievement_3 --start-date 2026-04-01 --end-date 2026-04-30`,`${t} --report-id gj_target_achievement_3 --start-date 2026-04-01 --end-date 2026-04-30 --param-json '{"regionList":["3301"]}'`,"\u517C\u5BB9\u65E7\u5199\u6CD5: yybpc-cli report get gj_target_achievement_3 2026-04-22",`\u517C\u5BB9\u65E7\u5199\u6CD5: yybpc-cli report data --report gj_target_achievement_3 --params '{"startDate":"2026-04-22","endDate":"2026-04-22"}'`]:[cr(r).replace(/[<>]/g,"")]}function qn(r){return r.path[0]==="report"&&r.path[1]==="list"?["1. \u5148\u6267\u884C yybpc-cli report list \u62C9\u53D6\u5168\u90E8\u62A5\u8868\uFF0C\u4E0D\u505A\u5173\u952E\u8BCD\u731C\u6D4B","2. \u9ED8\u8BA4\u5217\u8868\u4F1A\u5C55\u793A\u6BCF\u4E2A\u62A5\u8868\u7684\u53C2\u6570\u6458\u8981\uFF0C\u5148\u5FEB\u901F\u5224\u65AD\u8FD9\u4E2A\u62A5\u8868\u80FD\u4E0D\u80FD\u67E5","3. \u7528 --category \u7F29\u5C0F\u62A5\u8868\u8303\u56F4","4. \u7528 --report-id \u67E5\u770B\u5355\u4E2A\u62A5\u8868\u8BE6\u60C5\u3001\u53C2\u6570\u548C\u67E5\u8BE2\u793A\u4F8B","5. \u786E\u8BA4\u62A5\u8868\u53EF\u7528\u540E\uFF0C\u518D\u6267\u884C yybpc-cli report query"]:r.path[0]==="report"&&r.path[1]==="query"?["1. \u5148\u6267\u884C yybpc-cli report list \u62C9\u53D6\u5168\u90E8\u62A5\u8868","2. \u518D\u6267\u884C yybpc-cli report list --report-id REPORT_ID \u786E\u8BA4\u8BE5\u62A5\u8868\u652F\u6301\u7684\u53C2\u6570","3. \u5355\u65E5\u67E5\u8BE2\u4F18\u5148\u4F7F\u7528 --date\uFF1B\u533A\u95F4\u67E5\u8BE2\u518D\u4F7F\u7528 --start-date \u548C --end-date","4. \u6700\u540E\u6267\u884C yybpc-cli report query --report-id REPORT_ID --date YYYY-MM-DD\uFF0C\u6216\u663E\u5F0F\u4F20\u5F00\u59CB/\u7ED3\u675F\u65E5\u671F",'5. \u82E5\u9700\u989D\u5916\u53C2\u6570\uFF0C\u4F7F\u7528 --param-json \u4F20\u5165\u62A5\u8868\u652F\u6301\u7684\u5B57\u6BB5\uFF0C\u4F8B\u5982 {"regionList":["3301"]}']:[]}function ur(r){return r.path[0]==="report"&&r.path[1]==="list"?["report \u662F\u6240\u6709\u7ECF\u8425\u5206\u6790\u6570\u636E\u7684\u9996\u9009\u6765\u6E90","\u5148\u62C9\u5168\u91CF\u62A5\u8868\uFF0C\u4E0D\u5728 CLI \u5185\u505A\u5173\u952E\u8BCD\u731C\u6D4B\uFF0C\u907F\u514D\u8BEF\u5BFC AI \u9009\u62E9\u9519\u8BEF\u62A5\u8868","\u9ED8\u8BA4\u5217\u8868\u4F1A\u76F4\u63A5\u5C55\u793A\u62A5\u8868\u53C2\u6570\u6458\u8981\uFF0C\u907F\u514D\u5148\u770B\u5217\u8868\u5374\u4E0D\u77E5\u9053\u600E\u4E48\u67E5","\u5148\u770B\u5168\u91CF\uFF0C\u518D\u7528 --category \u7F29\u5C0F\u8303\u56F4\uFF0C\u518D\u770B\u5177\u4F53\u62A5\u8868","\u7528 --report-id \u53EF\u67E5\u770B\u5355\u4E2A\u62A5\u8868\u7684\u53C2\u6570\u548C\u67E5\u8BE2\u793A\u4F8B","\u82E5 report \u5F53\u524D\u6CA1\u6709\u76F8\u5173\u6570\u636E\uFF0C\u518D\u6539\u7528\u5176\u4ED6\u6A21\u5757\uFF0C\u5E76\u660E\u786E\u8BF4\u660E\uFF1A\u5F53\u524D\u62A5\u8868\u7CFB\u7EDF\u6682\u65E0\u76F8\u5173\u6570\u636E\uFF0C\u4EE5\u4E0B\u5206\u6790\u57FA\u4E8E\u4E3B\u6863\u4FE1\u606F"]:r.path[0]==="report"&&r.path[1]==="query"?["\u6240\u6709\u5206\u6790\u7C7B\u67E5\u8BE2\u4F18\u5148\u8D70 report\uFF1B\u4E0D\u8981\u9ED8\u8BA4\u6539\u7528\u4E3B\u6863\u6570\u636E","\u4E0D\u77E5\u9053 report-id \u65F6\uFF0C\u5148\u6267\u884C yybpc-cli report list \u62C9\u53D6\u5168\u90E8\u62A5\u8868","query \u9636\u6BB5\u53EA\u4F7F\u7528\u786E\u5B9A\u7684 --report-id\uFF0C\u4E0D\u5728\u6267\u884C\u65F6\u505A\u5173\u952E\u8BCD\u731C\u6D4B","report query \u652F\u6301\u5355\u65E5\u5FEB\u6377\u5199\u6CD5 --date YYYY-MM-DD","\u517C\u5BB9\u65E7\u5199\u6CD5 report get / report data\uFF0C\u4F46\u9ED8\u8BA4\u4ECD\u5E94\u4F18\u5148\u4F7F\u7528 report query","\u53EA\u6709 report \u65E0\u76F8\u5173\u6570\u636E\u65F6\uFF0C\u624D\u5141\u8BB8\u6539\u7528\u5176\u4ED6\u6A21\u5757\uFF0C\u5E76\u660E\u786E\u8BF4\u660E\uFF1A\u5F53\u524D\u62A5\u8868\u7CFB\u7EDF\u6682\u65E0\u76F8\u5173\u6570\u636E\uFF0C\u4EE5\u4E0B\u5206\u6790\u57FA\u4E8E\u4E3B\u6863\u4FE1\u606F"]:r.path[0]==="report"&&r.path[1]==="config"?["\u672C\u7CFB\u5217\u9ED8\u8BA4\u8F93\u51FA\u540E\u7AEF\u539F\u6837\u5BF9\u8C61\u7ED3\u6784\uFF08\u4E0D\u538B {columns,rows}\uFF09\uFF0C\u4FBF\u4E8E\u51C6\u786E\u5B66\u4E60\u548C\u590D\u7528\u62A5\u8868\u914D\u7F6E\u7684\u771F\u5B9E shape","\u5982\u9700\u7701 token\uFF0C\u53EF\u663E\u5F0F\u52A0 --compact/--agent\uFF08\u4ECD\u4F1A\u538B\u6210 {columns,rows}\uFF09"]:r.path[0]==="master-data"||r.path[0]==="supply-chain"||r.path[0]==="user-center"?["\u4EC5\u5728 report \u65E0\u76F8\u5173\u62A5\u8868\u6216\u5F53\u524D\u67E5\u4E0D\u5230\u5206\u6790\u6570\u636E\u65F6\u4F7F\u7528\u672C\u547D\u4EE4","\u4F7F\u7528\u672C\u547D\u4EE4\u524D\u540E\uFF0C\u90FD\u5E94\u660E\u786E\u544A\u77E5\u7528\u6237\uFF1A\u5F53\u524D\u62A5\u8868\u7CFB\u7EDF\u6682\u65E0\u76F8\u5173\u6570\u636E\uFF0C\u4EE5\u4E0B\u5206\u6790\u57FA\u4E8E\u4E3B\u6863\u4FE1\u606F\uFF0C\u4E0D\u7B49\u540C\u4E8E\u7ECF\u8425\u5206\u6790\u62A5\u8868"]:[]}function pr(r){return r[0]==="report"?["report \u662F\u7ECF\u8425\u5206\u6790\u4E0E\u6570\u636E\u89E3\u8BFB\u7684\u9996\u9009\u5165\u53E3","\u5148 list \u627E\u62A5\u8868\uFF0C\u518D query \u67E5\u6570\u636E\uFF1B\u5206\u6790\u7ED3\u8BBA\u4F18\u5148\u57FA\u4E8E report \u8F93\u51FA","\u53EA\u6709 report \u65E0\u76F8\u5173\u6570\u636E\u65F6\uFF0C\u624D\u5141\u8BB8\u6539\u7528\u5176\u4ED6\u6A21\u5757\u8865\u5145\u4FE1\u606F","\u6539\u7528\u5176\u4ED6\u6A21\u5757\u65F6\uFF0C\u5FC5\u987B\u8BF4\u660E\uFF1A\u5F53\u524D\u62A5\u8868\u7CFB\u7EDF\u6682\u65E0\u76F8\u5173\u6570\u636E\uFF0C\u4EE5\u4E0B\u5206\u6790\u57FA\u4E8E\u4E3B\u6863\u4FE1\u606F\uFF0C\u4E0D\u7B49\u540C\u4E8E\u7ECF\u8425\u5206\u6790\u62A5\u8868"]:r[0]==="master-data"||r[0]==="supply-chain"||r[0]==="user-center"?["\u672C\u6A21\u5757\u63D0\u4F9B\u4E3B\u6863/\u4F9B\u5E94\u94FE/\u7EC4\u7EC7\u7B49\u57FA\u7840\u4FE1\u606F\uFF0C\u4E0D\u662F\u7ECF\u8425\u5206\u6790\u9996\u9009\u6765\u6E90","\u8C03\u7528\u524D\u8BF7\u5148\u786E\u8BA4 report \u5F53\u524D\u6CA1\u6709\u76F8\u5173\u62A5\u8868\u6216\u65E0\u6CD5\u63D0\u4F9B\u6240\u9700\u5206\u6790\u6570\u636E","\u82E5\u57FA\u4E8E\u672C\u6A21\u5757\u8F93\u51FA\u5206\u6790\uFF0C\u5FC5\u987B\u8BF4\u660E\uFF1A\u5F53\u524D\u62A5\u8868\u7CFB\u7EDF\u6682\u65E0\u76F8\u5173\u6570\u636E\uFF0C\u4EE5\u4E0B\u5206\u6790\u57FA\u4E8E\u4E3B\u6863\u4FE1\u606F\uFF0C\u4E0D\u7B49\u540C\u4E8E\u7ECF\u8425\u5206\u6790\u62A5\u8868"]:[]}function Gn(r){let t=re(_t(r));return JSON.stringify({version:z,featuredQuery:[...Nn],dataPriority:[...$n],globals:[...In],commands:t.map(e=>({path:e.path,command:`yybpc-cli ${e.path.join(" ")}`,description:e.description}))},null,2)}function Fn(r,t){let e=ar(r,t);return e.length===0?JSON.stringify({error:`\u672A\u627E\u5230: ${r.join(" ")}`},null,2):JSON.stringify({domain:r.join(" "),rules:pr(r),commands:e.map(n=>({path:n.path,command:`yybpc-cli ${n.path.join(" ")}`,description:n.description}))},null,2)}function Yn(r,t){let e=ne(r,t);return JSON.stringify({command:`yybpc-cli ${e.path.join(" ")}`,description:e.description,rules:ur(e),args:Object.entries(e.args??{}).map(([n,o])=>({name:n,flag:`--${n}`,type:o.type,required:o.required??!1,description:o.description??"",default:o.default})),example:cr(e)},null,2)}function oe(r,t={}){let{commandPath:e,json:n}=t;return!e||e.length===0?n?Gn(r):Ln(r).join(`
|
|
175
|
+
`).trimEnd():ne(e,r)?n?Yn(e,r):Mn(e,r).join(`
|
|
176
|
+
`).trimEnd():n?Fn(e,r):Hn(e,r).join(`
|
|
177
|
+
`).trimEnd()}Ot();T();var fr={meta:{description:"\u67E5\u770B\u5355\u4E2A\u62A5\u8868\u7684\u5B8C\u6574\u914D\u7F6E\uFF08SQL\u3001items\u3001params\uFF09"},args:{"report-id":{type:"string",required:!0,description:"\u62A5\u8868ID"}},api:{service:"report",method:"GET",path:"/report/config/detail"}};T();x();N();var gr={meta:{description:"\u542F\u7528\u6307\u5B9A\u62A5\u8868"},args:{"report-id":{type:"string",required:!0,description:"\u62A5\u8868ID"}},api:{service:"report",method:"POST",path:"/report/config/enable"},run:async({args:r,request:t})=>{let e=b(),n=await t({service:"report",method:"POST",path:"/report/config/enable",body:{reportId:r.reportId}});return e.dryRun||await k(e.env),n}};T();x();N();var yr={meta:{description:"\u7981\u7528\u6307\u5B9A\u62A5\u8868"},args:{"report-id":{type:"string",required:!0,description:"\u62A5\u8868ID"}},api:{service:"report",method:"POST",path:"/report/config/disable"},run:async({args:r,request:t})=>{let e=b(),n=await t({service:"report",method:"POST",path:"/report/config/disable",body:{reportId:r.reportId}});return e.dryRun||await k(e.env),n}};T();x();N();B();var _r={meta:{description:"\u65B0\u5EFA\u4E1A\u52A1\u81EA\u7814\u62A5\u8868\uFF08\u5F3A\u5236 business_custom \u5206\u7C7B\uFF09\uFF1B\u53C2\u6570\u53D6\u503C\u89C1 report config dict"},args:{"config-json":{type:"string",required:!0,description:"\u62A5\u8868\u914D\u7F6E JSON\uFF08reportId/reportName/reportType/items\uFF09"}},api:{service:"report",method:"POST",path:"/report/config/save"},run:async({args:r,request:t})=>{let e=b(),n=gt(r.configJson),o=await t({service:"report",method:"POST",path:"/report/config/save",body:n});return e.dryRun||await k(e.env),o}};T();x();N();B();var Cr={meta:{description:"\u4FEE\u6539\u4E1A\u52A1\u81EA\u7814\u62A5\u8868\uFF08\u5F3A\u5236 business_custom \u5206\u7C7B\uFF09"},args:{"config-json":{type:"string",required:!0,description:"\u62A5\u8868\u914D\u7F6E JSON\uFF08\u542B reportId\uFF09"}},api:{service:"report",method:"POST",path:"/report/config/update"},run:async({args:r,request:t})=>{let e=b(),n=gt(r.configJson),o=await t({service:"report",method:"POST",path:"/report/config/update",body:n});return e.dryRun||await k(e.env),o}};T();B();var Or={meta:{description:"\u5217\u51FA\u62A5\u8868\u7814\u53D1\u76F8\u5173\u679A\u4E3E\uFF08\u6570\u636E\u6E90/\u7ED3\u679C\u51FD\u6570/\u7C7B\u578B\u7B49\u53EF\u586B\u53D6\u503C\uFF0C\u514D\u767B\u5F55\uFF09"},args:{},api:{service:"baseinfo",method:"POST",path:"/baseinfo/common/dict/list/v1"},run:async({request:r})=>({success:!0,data:await ft(r),meta:{service:"baseinfo",requestId:"-",duration:0}})};yt();T();R();function br(r,t,e){if(r==null)return t;let n=Number(r);if(!Number.isInteger(n)||n<1)throw new h("INPUT_ERROR","INVALID_ARG",`${e} \u5FC5\u987B\u662F\u6B63\u6574\u6570`);return n}function Un(r){return r.replace(/-([a-z])/g,(t,e)=>e.toUpperCase())}function S(r){let t=Object.keys(r.filters??{}),e=["page","page-size"];for(let o of t)if(e.includes(o))throw new Error(`defineListCommand: filter key "${o}" collides with reserved pagination arg. Rename the filter or use a different CLI flag.`);let n={...r.filters??{},page:{type:"number",description:"\u9875\u7801",default:1},"page-size":{type:"number",description:"\u6BCF\u9875\u6570\u91CF",default:20}};return{meta:{description:r.description},args:n,api:{service:r.service,method:"POST",path:r.apiPath},run:async({args:o,request:i})=>{let s=br(o.page,1,"--page"),a=br(o.pageSize,20,"--page-size"),c={page:{pageNo:s,pageSize:a}};for(let d of Object.keys(r.filters??{})){let p=Un(d),u=o[p]??o[d];(typeof u=="string"&&u.length>0||typeof u=="number"||typeof u=="boolean")&&(c[p]=u)}return i({service:r.service,method:"POST",path:r.apiPath,body:c})}}}T();function wr(r){return r.replace(/-([a-z])/g,(t,e)=>e.toUpperCase())}function bt(r){if(r.extraBody&&r.filters){let t=Object.keys(r.extraBody),e=Object.keys(r.filters).map(wr);for(let n of t)if(e.includes(n))throw new Error(`defineTreeCommand: extraBody key "${n}" collides with filter name. Remove one or rename the filter.`)}return{meta:{description:r.description},args:r.filters??{},api:{service:r.service,method:"POST",path:r.apiPath},run:async({args:t,request:e})=>{let n={...r.extraBody??{}};for(let o of Object.keys(r.filters??{})){let i=wr(o),s=t[i]??t[o];(typeof s=="string"&&s.length>0||typeof s=="number"||typeof s=="boolean")&&(n[i]=s)}return e({service:r.service,method:"POST",path:r.apiPath,body:n})}}}var Ar=[{path:["master-data","franchisee","list"],def:S({description:"\u52A0\u76DF\u5546\u6863\u6848\u5217\u8868",service:"mdm",apiPath:"/baseinfo/mdm/franchisee/list"})},{path:["master-data","store","list"],def:S({description:"\u95E8\u5E97\u6863\u6848\u5217\u8868\uFF08\u652F\u6301\u5173\u952E\u5B57\u6A21\u7CCA\u641C\u7D22\uFF09",service:"mdm",apiPath:"/baseinfo/mdm/store/list",filters:{keyword:{type:"string",description:"\u95E8\u5E97\u5173\u952E\u5B57\u6A21\u7CCA\u641C\u7D22"}}})},{path:["master-data","company","list"],def:S({description:"\u516C\u53F8\u6863\u6848\u5217\u8868",service:"mdm",apiPath:"/baseinfo/mdm/company/list"})},{path:["master-data","contract","list"],def:S({description:"\u95E8\u5E97\u5408\u540C\u6863\u6848\u5217\u8868",service:"contract",apiPath:"/contract/contract/list"})},{path:["master-data","bank","list"],def:S({description:"\u94F6\u884C\u6863\u6848\u5217\u8868",service:"baseinfo",apiPath:"/baseinfo/common/bank/branch/list"})},{path:["master-data","warehouse","list"],def:S({description:"\u4ED3\u5E93\u6863\u6848\u5217\u8868",service:"mdm",apiPath:"/baseinfo/mdm/warehouse/list"})},{path:["master-data","unit","list"],def:S({description:"\u5355\u4F4D\u6570\u636E\u5217\u8868",service:"mdm",apiPath:"/baseinfo/mdm/unit/list"})},{path:["master-data","area","list"],def:S({description:"\u533A\u57DF\u6863\u6848\u5217\u8868",service:"mdm",apiPath:"/baseinfo/mdm/area/list"})},{path:["master-data","region","tree"],def:bt({description:"\u7701\u5E02\u533A\u6811",service:"baseinfo",apiPath:"/baseinfo/common/region/tree"})},{path:["supply-chain","supplier","list"],def:S({description:"\u4F9B\u5E94\u5546\u6863\u6848\u5217\u8868",service:"mdm",apiPath:"/baseinfo/mdm/supplier/list"})},{path:["supply-chain","product-category","tree"],def:bt({description:"\u5546\u54C1\u5206\u7C7B\u6811",service:"mdm",apiPath:"/baseinfo/mdm/product/category/tree/list"})},{path:["supply-chain","product","list"],def:S({description:"\u5546\u54C1\u6863\u6848\u5217\u8868\uFF08SKU \u7EF4\u5EA6\uFF09",service:"mdm",apiPath:"/baseinfo/mdm/product/sku/list"})},{path:["user-center","org","tree"],def:bt({description:"\u7EC4\u7EC7\u67B6\u6784\u6811",service:"user-center",apiPath:"/user-center/org/tree"})},{path:["user-center","user","list"],def:S({description:"\u7528\u6237\u5217\u8868",service:"user-center",apiPath:"/user-center/user/list"})}];ht();var E=[{path:["report","query"],def:ce},{path:["report","config","get"],def:fr},{path:["report","config","enable"],def:gr},{path:["report","config","disable"],def:yr},{path:["report","config","create"],def:_r},{path:["report","config","update"],def:Cr},{path:["report","config","dict"],def:Or},...Ar],Qn=["env","format","compact","slim","agent","verbose","dry-run","as-phone"];function pe(r){return r.option("--env <env>","Target environment (dev/test/prod)","prod").option("--format <format>","Output format: auto(\u9ED8\u8BA4,minified columns/rows)/json(\u5E26\u7F29\u8FDB,\u7ED9\u4EBA\u8BFB)/raw(\u539F\u6837)","auto").option("--compact","Compact JSON: minified data only, no wrapper",!1).option("--slim","Compact + strip null/empty values",!1).option("--agent","Compact + strip nulls + shorten field names (optimized for LLM)",!1).option("--verbose","Print debug info",!1).option("--dry-run","Preview request without executing",!1).option("--as-phone <phone>","Agent mode: act as phone number")}function Dr(r){return r.replace(/-([a-z])/g,(t,e)=>e.toUpperCase())}function Bn(){let r=new Set;for(let e of Qn)r.add(`--${e}`);for(let{def:e}of E)for(let n of Object.keys(e.args))r.add(`--${n}`);for(let e of Object.keys(P.args))r.add(`--${e}`);let t=["report","params","date","start-date","end-date","region","store-id","channel","order-field","order-dir"];for(let e of t)r.add(`--${e}`);return r}function zn(r,t){if(!r.startsWith("--"))return r;let e=r.indexOf("="),n=e===-1?r:r.slice(0,e),o=e===-1?"":r.slice(e);if(t.has(n))return r;let i=`--${Dr(n.slice(2))}`,s=[...t].find(a=>Dr(a.slice(2))===i.slice(2));return s?`${s}${o}`:r}function Xn(r,t){return r.map(e=>zn(e,t))}function kr(r,t){for(let[e,n]of Object.entries(t)){let o=n.type==="boolean"?`--${e}`:n.required?`--${e} <${n.type}>`:`--${e} [${n.type}]`;r.option(o,n.description??"",n.default)}return r}function X(r){let t=r.optsWithGlobals();Ve({env:t.env,asPhone:t.asPhone,verbose:t.verbose,dryRun:t.dryRun})}function Y(r,t,e){let n=()=>oe(t,{commandPath:e});r.helpInformation=n}function le(r){let t=r.optsWithGlobals(),e=t.format??"auto",n="none";return t.agent?n="agent":t.slim?n="slim":t.compact&&(n="compact"),n==="none"&&e==="auto"&&(n="compact"),{format:e==="auto"?"json":e,compactMode:n}}var Zn=[["report","config"]];function to(r){return Zn.some(t=>t.every((e,n)=>r[n]===e))}function eo(r,t,e){let n=t[t.length-1],o=r.command(n).description(e.meta.description);kr(o,e.args),Y(o,E,t),o.action(async()=>{X(o);let i=o.opts(),s=le(o),a=o.optsWithGlobals(),d=(a.format??"auto")==="auto"&&!a.agent&&!a.slim&&!a.compact&&to(t)?"raw":s.format,{compactMode:p}=s;await dt(d,p,async()=>{if(e.run)return e.run({args:i,request:q});let u=e.api.method==="GET";return q({service:e.api.service,method:e.api.method,path:e.api.path,...u?{query:i}:{body:i}})})})}async function ro(){let r=Bn(),t=new Re;t.name("yybpc-cli").version(z).description("Internal service CLI"),Y(t,E),pe(t);let e=new Map;function n(l,m){let y=m.join(" "),g=e.get(y);if(g)return g;let w=m[m.length-1],C=l.command(w).description(`${w} commands`);return pe(C),Y(C,E,m),e.set(y,C),C}for(let{path:l,def:m}of E){let y=t;for(let g=0;g<l.length-1;g++)y=n(y,l.slice(0,g+1));eo(y,l,m)}let o=n(t,["report"]),i=o.command("list").description(P.description);kr(i,P.args),Y(i,E,["report","list"]),i.action(async()=>{X(i);try{let{runReportList:l}=await Promise.resolve().then(()=>(ht(),ze));await l(i.opts())}catch(l){console.error(Q(l)),process.exit(1)}});let a=n(t,["report","config"]).command("guide").description(F.description);pe(a),a.action(async()=>{X(a);try{let{runGuide:l}=await Promise.resolve().then(()=>(yt(),tr));await l(q)}catch(l){console.error(Q(l)),process.exit(1)}});let c=o.command("get <reportId> <date> [endDate]").description("Compatibility alias for yybpc-cli report query");Y(c,E,["report","query"]),c.action(async(l,m,y)=>{X(c);let{format:g,compactMode:w}=le(c);await dt(g,w,async()=>{let{runReportQuery:C}=await Promise.resolve().then(()=>(Ot(),ue));return C({reportId:l,date:m,endDate:y},q)})});let d=o.command("data").description("Compatibility alias for yybpc-cli report query").requiredOption("--report <reportId>","Legacy alias for --report-id").option("--params <json>","Legacy alias for --param-json; may also include startDate/endDate").option("--date <date>","Single date shortcut (YYYY-MM-DD)").option("--start-date <date>","Start date (YYYY-MM-DD)").option("--end-date <date>","End date (YYYY-MM-DD)").option("--region <value>","Region IDs").option("--store-id <value>","Store IDs").option("--channel <value>","Channel IDs").option("--order-field <field>","Sort field").option("--order-dir <dir>","Sort direction");Y(d,E,["report","query"]),d.action(async()=>{X(d);let{format:l,compactMode:m}=le(d);await dt(l,m,async()=>{let{runReportQuery:y}=await Promise.resolve().then(()=>(Ot(),ue));return y(d.opts(),q)})});let p=t.command("auth",{hidden:!0}).description("Authentication management");p.command("set-token <token>").description("Manually set satoken for human login").action(async l=>{let{runSetToken:m}=await Promise.resolve().then(()=>(Rr(),Sr));await m(l)}),p.command("logout").description("Clear local session").action(async()=>{let{runLogout:l}=await Promise.resolve().then(()=>(Er(),Tr));await l()}),p.command("status").description("Show current login status").action(async()=>{let{runStatus:l}=await Promise.resolve().then(()=>(xr(),vr));await l()});let u=t.command("help [command...]").description("Show complete command reference (yybpc-cli help, yybpc-cli help <domain>, yybpc-cli help <domain> <cmd>)").option("--json","Output as JSON");u.action(l=>{let m=l.length>0?l:void 0,y=u.opts().json??!1;if(!y){let g=m?.join(" ")??"";if(!m||e.has(g)){let C=m?e.get(g):t;process.stdout.write(C.helpInformation());return}if(E.find(C=>C.path.length===m.length&&C.path.every((U,Z)=>U===m[Z]))){let C=m.slice(0,-1).join(" "),Z=(m.length>1?e.get(C):t)?.commands.find(Pr=>Pr.name()===m[m.length-1]);if(Z){process.stdout.write(Z.helpInformation());return}}if(m.length===2&&m[0]==="report"&&m[1]==="list"){process.stdout.write(i.helpInformation());return}}process.stdout.write(oe(E,{commandPath:m,json:y}))}),await t.parseAsync(Xn(process.argv,r))}ro().catch(r=>{console.error(Q(r)),process.exit(1)});export{ro as main,Xn as normalizeArgv};
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@yybpc/cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "公司内部服务统一 CLI(报表查询 + 中台主档/供应链/用户中心)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"yybpc-cli": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/index.js"
|
|
11
|
+
],
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=18"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"dev": "tsx src/index.ts",
|
|
17
|
+
"build": "tsup",
|
|
18
|
+
"build:sea": "bash scripts/build-sea.sh",
|
|
19
|
+
"build:sea:linux": "bash scripts/build-sea-linux.sh",
|
|
20
|
+
"typecheck": "tsc --noEmit",
|
|
21
|
+
"prepublishOnly": "tsup"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@types/node": "^22.10.0",
|
|
25
|
+
"commander": "^14.0.3",
|
|
26
|
+
"tsup": "^8.3.5",
|
|
27
|
+
"tsx": "^4.19.2",
|
|
28
|
+
"typescript": "^5.7.2"
|
|
29
|
+
}
|
|
30
|
+
}
|