@tikkhun/cli-core 0.0.4 → 0.0.5
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/README.md +47 -2
- package/dist/CommandManager.d.mts +28 -0
- package/dist/CommandManager.d.ts +28 -0
- package/dist/CommandManager.js +22 -0
- package/dist/CommandManager.js.map +1 -0
- package/dist/CommandManager.mjs +14 -0
- package/dist/CommandManager.mjs.map +1 -0
- package/dist/OptionHandler.d.mts +2 -0
- package/dist/OptionHandler.d.ts +2 -0
- package/dist/OptionHandler.js +1 -1
- package/dist/OptionHandler.js.map +1 -1
- package/dist/OptionHandler.mjs +1 -1
- package/dist/OptionHandler.mjs.map +1 -1
- package/dist/command/ArgsCommand.d.mts +11 -0
- package/dist/command/ArgsCommand.d.ts +11 -0
- package/dist/command/ArgsCommand.js +18 -0
- package/dist/command/ArgsCommand.js.map +1 -0
- package/dist/command/ArgsCommand.mjs +12 -0
- package/dist/command/ArgsCommand.mjs.map +1 -0
- package/dist/command/PromptsCommand.d.mts +10 -0
- package/dist/command/PromptsCommand.d.ts +10 -0
- package/dist/command/PromptsCommand.js +18 -0
- package/dist/command/PromptsCommand.js.map +1 -0
- package/dist/command/PromptsCommand.mjs +12 -0
- package/dist/command/PromptsCommand.mjs.map +1 -0
- package/dist/command/command.interface.d.mts +20 -0
- package/dist/command/command.interface.d.ts +20 -0
- package/dist/command/command.interface.js +16 -0
- package/dist/command/command.interface.js.map +1 -0
- package/dist/command/command.interface.mjs +10 -0
- package/dist/command/command.interface.mjs.map +1 -0
- package/dist/command/index.d.mts +4 -0
- package/dist/command/index.d.ts +4 -0
- package/dist/command/index.js +21 -0
- package/dist/command/index.js.map +1 -0
- package/dist/command/index.mjs +13 -0
- package/dist/command/index.mjs.map +1 -0
- package/dist/index.d.mts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +16 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -3
- package/dist/index.mjs.map +1 -1
- package/dist/package.d.mts +3 -0
- package/dist/package.d.ts +3 -0
- package/dist/package.js +12 -0
- package/dist/package.js.map +1 -0
- package/dist/package.mjs +10 -0
- package/dist/package.mjs.map +1 -0
- package/package.json +5 -3
- package/dist/Cli.d.mts +0 -28
- package/dist/Cli.d.ts +0 -28
- package/dist/Cli.js +0 -19
- package/dist/Cli.js.map +0 -1
- package/dist/Cli.mjs +0 -12
- package/dist/Cli.mjs.map +0 -1
package/README.md
CHANGED
@@ -1,8 +1,53 @@
|
|
1
|
-
# cli-
|
1
|
+
# cli-core
|
2
|
+
|
3
|
+
用于创建cli的简便工具
|
2
4
|
|
3
5
|
## 使用
|
4
6
|
|
5
7
|
```javascript
|
8
|
+
import { Command } from '../lib';
|
9
|
+
const cli = new Command({
|
10
|
+
version: '1.1.1',
|
11
|
+
description: 'hahaha',
|
12
|
+
defaultOptions: {
|
13
|
+
n: 1,
|
14
|
+
s: '123',
|
15
|
+
b: true,
|
16
|
+
o: {
|
17
|
+
n: 1,
|
18
|
+
s: '123',
|
19
|
+
b: true,
|
20
|
+
},
|
21
|
+
},
|
22
|
+
excludeOptions: ['o.b'],
|
23
|
+
optionTypes: {
|
24
|
+
n: 'number',
|
25
|
+
s: 'string',
|
26
|
+
b: 'boolean',
|
27
|
+
o: {
|
28
|
+
n: 'number',
|
29
|
+
s: 'string',
|
30
|
+
b: 'boolean',
|
31
|
+
},
|
32
|
+
},
|
33
|
+
optionTitles: {
|
34
|
+
n: 'numbertitle',
|
35
|
+
s: 'stringtitle',
|
36
|
+
b: 'booleantitle',
|
37
|
+
o: {
|
38
|
+
n: 'numbertitleooo',
|
39
|
+
s: 'stringtitleooo',
|
40
|
+
b: 'booleantitleooo',
|
41
|
+
},
|
42
|
+
},
|
43
|
+
});
|
44
|
+
cli.start((option) => {
|
45
|
+
console.log(`option`, option);
|
46
|
+
});
|
47
|
+
```
|
6
48
|
|
49
|
+
## 1.0
|
7
50
|
|
8
|
-
|
51
|
+
除了命令行传参 args 的方式 可能有的同志更喜欢 问答式(prompts) 的方式
|
52
|
+
|
53
|
+
所以我们提供两种cli类型的构建 你可以通过types 去设置他
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { CommandOptions, Action } from './command/command.interface.mjs';
|
2
|
+
import { ArgsCommand } from './command/ArgsCommand.mjs';
|
3
|
+
import { PromptsCommand } from './command/PromptsCommand.mjs';
|
4
|
+
import { Logger } from '@tikkhun/logger';
|
5
|
+
import 'commander';
|
6
|
+
|
7
|
+
declare enum CommandTypes {
|
8
|
+
'prompts' = "prompts",
|
9
|
+
'args' = "args"
|
10
|
+
}
|
11
|
+
interface CommandManagerOptions extends CommandOptions {
|
12
|
+
name: string;
|
13
|
+
types: CommandTypes[];
|
14
|
+
}
|
15
|
+
declare class CommandManager {
|
16
|
+
static readonly DEFAULT_OPTIONS: CommandManagerOptions;
|
17
|
+
logger: Logger;
|
18
|
+
options: CommandManagerOptions;
|
19
|
+
argsCommand?: ArgsCommand;
|
20
|
+
promptsCommand?: PromptsCommand;
|
21
|
+
constructor(options: Partial<CommandManagerOptions>);
|
22
|
+
welcome(): void;
|
23
|
+
init(): void;
|
24
|
+
start(action: Action): void;
|
25
|
+
}
|
26
|
+
declare const Cli: typeof CommandManager;
|
27
|
+
|
28
|
+
export { Cli, CommandManager, type CommandManagerOptions, CommandTypes };
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { CommandOptions, Action } from './command/command.interface.js';
|
2
|
+
import { ArgsCommand } from './command/ArgsCommand.js';
|
3
|
+
import { PromptsCommand } from './command/PromptsCommand.js';
|
4
|
+
import { Logger } from '@tikkhun/logger';
|
5
|
+
import 'commander';
|
6
|
+
|
7
|
+
declare enum CommandTypes {
|
8
|
+
'prompts' = "prompts",
|
9
|
+
'args' = "args"
|
10
|
+
}
|
11
|
+
interface CommandManagerOptions extends CommandOptions {
|
12
|
+
name: string;
|
13
|
+
types: CommandTypes[];
|
14
|
+
}
|
15
|
+
declare class CommandManager {
|
16
|
+
static readonly DEFAULT_OPTIONS: CommandManagerOptions;
|
17
|
+
logger: Logger;
|
18
|
+
options: CommandManagerOptions;
|
19
|
+
argsCommand?: ArgsCommand;
|
20
|
+
promptsCommand?: PromptsCommand;
|
21
|
+
constructor(options: Partial<CommandManagerOptions>);
|
22
|
+
welcome(): void;
|
23
|
+
init(): void;
|
24
|
+
start(action: Action): void;
|
25
|
+
}
|
26
|
+
declare const Cli: typeof CommandManager;
|
27
|
+
|
28
|
+
export { Cli, CommandManager, type CommandManagerOptions, CommandTypes };
|
@@ -0,0 +1,22 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var w = require('lodash');
|
4
|
+
var utilsCore = require('@tikkhun/utils-core');
|
5
|
+
var commander = require('commander');
|
6
|
+
var prompts = require('@inquirer/prompts');
|
7
|
+
var logger = require('@tikkhun/logger');
|
8
|
+
|
9
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
10
|
+
|
11
|
+
var w__default = /*#__PURE__*/_interopDefault(w);
|
12
|
+
|
13
|
+
/**
|
14
|
+
@tikkhun/cli-core
|
15
|
+
*/
|
16
|
+
var P=Object.defineProperty,E=Object.defineProperties;var L=Object.getOwnPropertyDescriptors;var g=Object.getOwnPropertySymbols;var b=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable;var C=(s,t,o)=>t in s?P(s,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):s[t]=o,x=(s,t)=>{for(var o in t||(t={}))b.call(t,o)&&C(s,o,t[o]);if(g)for(var o of g(t))A.call(t,o)&&C(s,o,t[o]);return s},S=(s,t)=>E(s,L(t));var R=(s,t)=>{var o={};for(var n in s)b.call(s,n)&&t.indexOf(n)<0&&(o[n]=s[n]);if(s!=null&&g)for(var n of g(s))t.indexOf(n)<0&&A.call(s,n)&&(o[n]=s[n]);return o};var l=(s,t,o)=>new Promise((n,i)=>{var r=e=>{try{c(o.next(e));}catch(O){i(O);}},a=e=>{try{c(o.throw(e));}catch(O){i(O);}},c=e=>e.done?n(e.value):Promise.resolve(e.value).then(r,a);c((o=o.apply(s,t)).next());});var{merge:V}=w__default.default,f=class f{constructor(t){this.options=V(f.DEFAULT_CLI_OPTIONS,t),this.init();}};f.DEFAULT_CLI_OPTIONS={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}};var p=f;var d={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string",select:"select"},I=["true",!0,"1",1];var m=class s{constructor(t){this.schema=t;}static getTypeValue(t,o){return o===d.array?t.split(","):o===d.object?JSON.parse(t):o===d.keyValueArray?t?t.split(",").map(n=>{if(!n)return;let[i,r]=n.split("=");return {key:i,value:r}}).filter(n=>n):[]:o===d.number?Number(t):o===d.boolean?!!I.includes(t):t}static toType(t,o){let n={};return Object.entries(t).forEach(([i,r])=>{let a=o[i];typeof r=="object"?n[i]=s.toType(r,a):n[i]=s.getTypeValue(r,a);}),n}toType(t){return s.toType(t,this.schema)}static toString(t){let o={};return Object.entries(t).forEach(([n,i])=>{o[n]=s.toStringValue(i);}),o}static toStringValue(t){if(Array.isArray(t)){let o=t[0];return typeof o=="object"&&o.hasOwnProperty("key")&&o.hasOwnProperty("value")?t.map(n=>`${n.key}=${n.value}`).toString():t.toString()}return typeof t=="object"?s.toString(t):""+t}};var{get:Y}=w__default.default,y=class extends p{init(){this.program=commander.createCommand(),this.addOptions();}addOptions(){let t=m.toString(this.options.defaultOptions),o=utilsCore.jsonToList({delimiter:".",json:t}),n=utilsCore.flatJson({delimiter:".",data:this.options.optionTypes});o.forEach(({key:i,value:r})=>{if(this.options.excludeOptions.includes(i))return;let a=n[i];this.program.option(`--${i} <${a}>`,Y(this.options.optionTitles,i),r);});}start(t){this.program.action(o=>{let n=utilsCore.unflatJson({delimiter:".",data:o}),i=m.toType(n,this.options.optionTypes);t(i);}).parse(process.argv);}};var u=class extends p{init(){let t=utilsCore.jsonToList({delimiter:".",json:this.options.defaultOptions}),o=utilsCore.flatJson({delimiter:".",data:this.options.optionTypes}),n=utilsCore.flatJson({delimiter:".",data:this.options.optionTitles});this.program=()=>l(this,null,function*(){let i={};for(let{key:r,value:a}of t){let c=o[r];if(!c)continue;let e=n[r];e&&(i[r]=(yield this.getActionResult(c,e))||a);}return i});}getActionResult(t,o){return l(this,null,function*(){return yield prompts.input({message:o})})}start(t){return l(this,null,function*(){let o=yield this.program(),n=utilsCore.unflatJson({delimiter:".",data:o}),i=m.toType(n,this.options.optionTypes);t(i);})}};var v=(o=>(o.prompts="prompts",o.args="args",o))(v||{}),h=class h{constructor(t){this.options=w.merge(h.DEFAULT_OPTIONS,t),this.logger=new logger.Logger(this.options.name),this.welcome(),this.init();}welcome(){this.logger.log("Welcome!"),this.logger.log("version: "+this.options.version),this.logger.log("description: "+this.options.description);}init(){let n=this.options,{types:t}=n,o=R(n,["types"]);if(!t||!t.length)throw new Error("types is undefined");t.includes("args")&&(this.argsCommand=new y(o)),t.includes("prompts")&&(this.promptsCommand=new u(o));}start(t){var o;this.argsCommand?(this.argsCommand.program.command("question").action(()=>{var n;(n=this.promptsCommand)==null||n.start(t);}),this.argsCommand.start(t)):(o=this.promptsCommand)==null||o.start(t);}};h.DEFAULT_OPTIONS=S(x({},p.DEFAULT_CLI_OPTIONS),{types:["args"],name:""});var T=h,Ot=T;
|
17
|
+
|
18
|
+
exports.Cli = Ot;
|
19
|
+
exports.CommandManager = T;
|
20
|
+
exports.CommandTypes = v;
|
21
|
+
//# sourceMappingURL=CommandManager.js.map
|
22
|
+
//# sourceMappingURL=CommandManager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../lib/command/command.interface.ts","../lib/command/ArgsCommand.ts","../lib/OptionHandler.ts","../lib/command/PromptsCommand.ts","../lib/CommandManager.ts"],"names":["merge","_","_AbstractCommand","options","AbstractCommand","TYPES","asTrueValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","get","ArgsCommand","createCommand","stringOptions","optionList","jsonToList","optionTypeMap","flatJson","action","jsonOptions","unflatJson","typedOptions","PromptsCommand","defaultOptionList","flattedOptionType","flattedOptionTitle","__async","result","title","message","input","unflattedOptions","typedResults","CommandTypes","_CommandManager","Logger","_a","types","__objRest","__spreadProps","__spreadValues","CommandManager","Cli"],"mappings":"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","file":"CommandManager.js","sourcesContent":["import _ from 'lodash';\nconst { merge } = _;\nexport interface Action {\n (options: any): void;\n}\nexport interface CommandOptions {\n version: string;\n description: string;\n defaultOptions: Record<string, any>;\n excludeOptions: string[];\n optionTypes: Record<string, any>;\n optionTitles: Record<string, any>;\n}\n\nexport abstract class AbstractCommand {\n static DEFAULT_CLI_OPTIONS: CommandOptions = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n };\n\n options: CommandOptions;\n constructor(options?: Partial<CommandOptions>) {\n this.options = merge(AbstractCommand.DEFAULT_CLI_OPTIONS, options);\n this.init();\n }\n abstract init(): void;\n abstract start(action: (options: any) => any): void;\n}\n","import { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { OptionHandler } from '../OptionHandler';\nimport { AbstractCommand, Action } from './command.interface';\nimport { Command, createCommand } from 'commander';\nimport _ from 'lodash';\nconst { get } = _;\nexport class ArgsCommand extends AbstractCommand {\n program: Command | undefined;\n init(): void {\n this.program = createCommand();\n this.addOptions();\n }\n private addOptions() {\n const stringOptions = OptionHandler.toString(this.options.defaultOptions);\n const optionList = jsonToList({ delimiter: '.', json: stringOptions });\n const optionTypeMap = flatJson({ delimiter: '.', data: this.options.optionTypes });\n optionList.forEach(({ key, value }) => {\n if (this.options.excludeOptions.includes(key)) {\n return;\n }\n const type = optionTypeMap[key];\n this.program!.option(`--${key} <${type}>`, get(this.options.optionTitles, key), value);\n });\n }\n start(action: Action) {\n this.program!.action((stringOptions) => {\n const jsonOptions = unflatJson({\n delimiter: '.',\n data: stringOptions,\n });\n const typedOptions = OptionHandler.toType(jsonOptions, this.options.optionTypes);\n action(typedOptions);\n }).parse(process.argv);\n }\n}\n","export const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n select: 'select', // 几个中进行选择 选择一项\n} as const;\nexport type TYPES = keyof typeof TYPES;\nexport const asTrueValues = ['true', true, '1', 1];\nexport const asFalseValues = ['false', false, '', 0];\nexport class OptionHandler {\n schema: Record<string, any>;\n constructor(schema: Record<string, any>) {\n this.schema = schema;\n }\n static getTypeValue(value: string, type: string) {\n if (type === TYPES.array) {\n return value.split(',');\n }\n if (type === TYPES.object) {\n return JSON.parse(value);\n }\n if (type === TYPES.keyValueArray) {\n if (!value) return [];\n return value\n .split(',')\n .map((strItem) => {\n if (!strItem) return undefined;\n const [key, value] = strItem.split('=');\n return { key, value };\n })\n .filter((i) => i);\n }\n if (type === TYPES.number) {\n return Number(value);\n }\n if (type === TYPES.boolean) {\n if (asTrueValues.includes(value)) return true;\n return false;\n }\n return value;\n }\n static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n const type = schema[key];\n if (typeof value === 'object') {\n _obj[key] = OptionHandler.toType(value, type);\n } else {\n _obj[key] = OptionHandler.getTypeValue(value as string, type);\n }\n });\n return _obj;\n }\n toType(obj: Record<string, any>) {\n return OptionHandler.toType(obj, this.schema);\n }\n static toString(obj: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n _obj[key] = OptionHandler.toStringValue(value);\n });\n return _obj;\n }\n static toStringValue(value: any) {\n if (Array.isArray(value)) {\n const item1 = value[0];\n // 有点魔法 key value 的值让他们用=表示\n if (typeof item1 === 'object' && item1.hasOwnProperty('key') && item1.hasOwnProperty('value')) {\n return value.map((item) => `${item.key}=${item.value}`).toString();\n }\n return value.toString();\n }\n if (typeof value === 'object') {\n return OptionHandler.toString(value);\n }\n return '' + value;\n }\n}\n","/**\n * @author\n * @file PromptsCommand.ts\n * @fileBase PromptsCommand\n * @path packages\\cli-core\\lib\\cli\\PromptsCommand.ts\n * @from\n * @desc\n * @todo\n *\n *\n * @done\n * @example\n */\nimport { input } from '@inquirer/prompts';\nimport { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { OptionHandler, TYPES } from '../OptionHandler';\nimport { AbstractCommand, Action } from './command.interface';\n// const actionMap = {\n// [TYPES.array]: input,\n// [TYPES.keyValueArray]: input,\n// [TYPES.number]: number,\n// [TYPES.string]: input,\n// [TYPES.select]: select,\n// };\nexport class PromptsCommand extends AbstractCommand {\n program: any;\n init() {\n const defaultOptionList = jsonToList({ delimiter: '.', json: this.options.defaultOptions });\n const flattedOptionType = flatJson({\n delimiter: '.',\n data: this.options.optionTypes,\n });\n const flattedOptionTitle = flatJson({\n delimiter: '.',\n data: this.options.optionTitles,\n });\n this.program = async () => {\n const result: Record<string, any> = {};\n for (const { key, value } of defaultOptionList) {\n const type = flattedOptionType[key];\n if (!type) {\n continue;\n }\n const title = flattedOptionTitle[key];\n if (!title) {\n continue;\n }\n result[key] = (await this.getActionResult(type, title)) || value;\n }\n return result;\n };\n }\n private async getActionResult(type: TYPES, message: string) {\n return await input({ message });\n }\n async start(action: Action) {\n const options = await this.program();\n const unflattedOptions = unflatJson({ delimiter: '.', data: options });\n const typedResults = OptionHandler.toType(unflattedOptions, this.options.optionTypes);\n action(typedResults);\n }\n}\n","import { merge } from 'lodash';\nimport { AbstractCommand, Action, CommandOptions } from './command/command.interface';\nimport { ArgsCommand } from './command/ArgsCommand';\nimport { PromptsCommand } from './command/PromptsCommand';\nimport { Logger } from '@tikkhun/logger';\nexport enum CommandTypes {\n 'prompts' = 'prompts',\n 'args' = 'args',\n}\nexport interface CommandManagerOptions extends CommandOptions {\n name: string;\n types: CommandTypes[];\n}\nexport class CommandManager {\n static readonly DEFAULT_OPTIONS: CommandManagerOptions = {\n ...AbstractCommand.DEFAULT_CLI_OPTIONS,\n types: [CommandTypes.args],\n name: '',\n };\n logger: Logger;\n options: CommandManagerOptions;\n argsCommand?: ArgsCommand;\n promptsCommand?: PromptsCommand;\n constructor(options: Partial<CommandManagerOptions>) {\n this.options = merge(CommandManager.DEFAULT_OPTIONS, options);\n this.logger = new Logger(this.options.name);\n this.welcome();\n this.init();\n }\n welcome() {\n this.logger.log('Welcome!');\n this.logger.log('version: ' + this.options.version);\n this.logger.log('description: ' + this.options.description);\n }\n init() {\n const { types, ...options } = this.options;\n if (!types || !types.length) {\n throw new Error('types is undefined');\n }\n if (types.includes(CommandTypes.args)) {\n this.argsCommand = new ArgsCommand(options);\n }\n if (types.includes(CommandTypes.prompts)) {\n this.promptsCommand = new PromptsCommand(options);\n }\n }\n start(action: Action) {\n if (this.argsCommand) {\n this.argsCommand.program!.command('question').action(() => {\n this.promptsCommand?.start(action);\n });\n this.argsCommand.start(action);\n } else {\n this.promptsCommand?.start(action);\n }\n }\n}\n// alias\nexport const Cli = CommandManager;\n"]}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import w, { merge } from 'lodash';
|
2
|
+
import { jsonToList, flatJson, unflatJson } from '@tikkhun/utils-core';
|
3
|
+
import { createCommand } from 'commander';
|
4
|
+
import { input } from '@inquirer/prompts';
|
5
|
+
import { Logger } from '@tikkhun/logger';
|
6
|
+
|
7
|
+
/**
|
8
|
+
@tikkhun/cli-core
|
9
|
+
*/
|
10
|
+
var P=Object.defineProperty,E=Object.defineProperties;var L=Object.getOwnPropertyDescriptors;var g=Object.getOwnPropertySymbols;var b=Object.prototype.hasOwnProperty,A=Object.prototype.propertyIsEnumerable;var C=(s,t,o)=>t in s?P(s,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):s[t]=o,x=(s,t)=>{for(var o in t||(t={}))b.call(t,o)&&C(s,o,t[o]);if(g)for(var o of g(t))A.call(t,o)&&C(s,o,t[o]);return s},S=(s,t)=>E(s,L(t));var R=(s,t)=>{var o={};for(var n in s)b.call(s,n)&&t.indexOf(n)<0&&(o[n]=s[n]);if(s!=null&&g)for(var n of g(s))t.indexOf(n)<0&&A.call(s,n)&&(o[n]=s[n]);return o};var l=(s,t,o)=>new Promise((n,i)=>{var r=e=>{try{c(o.next(e));}catch(O){i(O);}},a=e=>{try{c(o.throw(e));}catch(O){i(O);}},c=e=>e.done?n(e.value):Promise.resolve(e.value).then(r,a);c((o=o.apply(s,t)).next());});var{merge:V}=w,f=class f{constructor(t){this.options=V(f.DEFAULT_CLI_OPTIONS,t),this.init();}};f.DEFAULT_CLI_OPTIONS={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}};var p=f;var d={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string",select:"select"},I=["true",!0,"1",1];var m=class s{constructor(t){this.schema=t;}static getTypeValue(t,o){return o===d.array?t.split(","):o===d.object?JSON.parse(t):o===d.keyValueArray?t?t.split(",").map(n=>{if(!n)return;let[i,r]=n.split("=");return {key:i,value:r}}).filter(n=>n):[]:o===d.number?Number(t):o===d.boolean?!!I.includes(t):t}static toType(t,o){let n={};return Object.entries(t).forEach(([i,r])=>{let a=o[i];typeof r=="object"?n[i]=s.toType(r,a):n[i]=s.getTypeValue(r,a);}),n}toType(t){return s.toType(t,this.schema)}static toString(t){let o={};return Object.entries(t).forEach(([n,i])=>{o[n]=s.toStringValue(i);}),o}static toStringValue(t){if(Array.isArray(t)){let o=t[0];return typeof o=="object"&&o.hasOwnProperty("key")&&o.hasOwnProperty("value")?t.map(n=>`${n.key}=${n.value}`).toString():t.toString()}return typeof t=="object"?s.toString(t):""+t}};var{get:Y}=w,y=class extends p{init(){this.program=createCommand(),this.addOptions();}addOptions(){let t=m.toString(this.options.defaultOptions),o=jsonToList({delimiter:".",json:t}),n=flatJson({delimiter:".",data:this.options.optionTypes});o.forEach(({key:i,value:r})=>{if(this.options.excludeOptions.includes(i))return;let a=n[i];this.program.option(`--${i} <${a}>`,Y(this.options.optionTitles,i),r);});}start(t){this.program.action(o=>{let n=unflatJson({delimiter:".",data:o}),i=m.toType(n,this.options.optionTypes);t(i);}).parse(process.argv);}};var u=class extends p{init(){let t=jsonToList({delimiter:".",json:this.options.defaultOptions}),o=flatJson({delimiter:".",data:this.options.optionTypes}),n=flatJson({delimiter:".",data:this.options.optionTitles});this.program=()=>l(this,null,function*(){let i={};for(let{key:r,value:a}of t){let c=o[r];if(!c)continue;let e=n[r];e&&(i[r]=(yield this.getActionResult(c,e))||a);}return i});}getActionResult(t,o){return l(this,null,function*(){return yield input({message:o})})}start(t){return l(this,null,function*(){let o=yield this.program(),n=unflatJson({delimiter:".",data:o}),i=m.toType(n,this.options.optionTypes);t(i);})}};var v=(o=>(o.prompts="prompts",o.args="args",o))(v||{}),h=class h{constructor(t){this.options=merge(h.DEFAULT_OPTIONS,t),this.logger=new Logger(this.options.name),this.welcome(),this.init();}welcome(){this.logger.log("Welcome!"),this.logger.log("version: "+this.options.version),this.logger.log("description: "+this.options.description);}init(){let n=this.options,{types:t}=n,o=R(n,["types"]);if(!t||!t.length)throw new Error("types is undefined");t.includes("args")&&(this.argsCommand=new y(o)),t.includes("prompts")&&(this.promptsCommand=new u(o));}start(t){var o;this.argsCommand?(this.argsCommand.program.command("question").action(()=>{var n;(n=this.promptsCommand)==null||n.start(t);}),this.argsCommand.start(t)):(o=this.promptsCommand)==null||o.start(t);}};h.DEFAULT_OPTIONS=S(x({},p.DEFAULT_CLI_OPTIONS),{types:["args"],name:""});var T=h,Ot=T;
|
11
|
+
|
12
|
+
export { Ot as Cli, T as CommandManager, v as CommandTypes };
|
13
|
+
//# sourceMappingURL=CommandManager.mjs.map
|
14
|
+
//# sourceMappingURL=CommandManager.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../lib/command/command.interface.ts","../lib/command/ArgsCommand.ts","../lib/OptionHandler.ts","../lib/command/PromptsCommand.ts","../lib/CommandManager.ts"],"names":["merge","_","_AbstractCommand","options","AbstractCommand","TYPES","asTrueValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","get","ArgsCommand","createCommand","stringOptions","optionList","jsonToList","optionTypeMap","flatJson","action","jsonOptions","unflatJson","typedOptions","PromptsCommand","defaultOptionList","flattedOptionType","flattedOptionTitle","__async","result","title","message","input","unflattedOptions","typedResults","CommandTypes","_CommandManager","Logger","_a","types","__objRest","__spreadProps","__spreadValues","CommandManager","Cli"],"mappings":"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","file":"CommandManager.mjs","sourcesContent":["import _ from 'lodash';\nconst { merge } = _;\nexport interface Action {\n (options: any): void;\n}\nexport interface CommandOptions {\n version: string;\n description: string;\n defaultOptions: Record<string, any>;\n excludeOptions: string[];\n optionTypes: Record<string, any>;\n optionTitles: Record<string, any>;\n}\n\nexport abstract class AbstractCommand {\n static DEFAULT_CLI_OPTIONS: CommandOptions = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n };\n\n options: CommandOptions;\n constructor(options?: Partial<CommandOptions>) {\n this.options = merge(AbstractCommand.DEFAULT_CLI_OPTIONS, options);\n this.init();\n }\n abstract init(): void;\n abstract start(action: (options: any) => any): void;\n}\n","import { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { OptionHandler } from '../OptionHandler';\nimport { AbstractCommand, Action } from './command.interface';\nimport { Command, createCommand } from 'commander';\nimport _ from 'lodash';\nconst { get } = _;\nexport class ArgsCommand extends AbstractCommand {\n program: Command | undefined;\n init(): void {\n this.program = createCommand();\n this.addOptions();\n }\n private addOptions() {\n const stringOptions = OptionHandler.toString(this.options.defaultOptions);\n const optionList = jsonToList({ delimiter: '.', json: stringOptions });\n const optionTypeMap = flatJson({ delimiter: '.', data: this.options.optionTypes });\n optionList.forEach(({ key, value }) => {\n if (this.options.excludeOptions.includes(key)) {\n return;\n }\n const type = optionTypeMap[key];\n this.program!.option(`--${key} <${type}>`, get(this.options.optionTitles, key), value);\n });\n }\n start(action: Action) {\n this.program!.action((stringOptions) => {\n const jsonOptions = unflatJson({\n delimiter: '.',\n data: stringOptions,\n });\n const typedOptions = OptionHandler.toType(jsonOptions, this.options.optionTypes);\n action(typedOptions);\n }).parse(process.argv);\n }\n}\n","export const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n select: 'select', // 几个中进行选择 选择一项\n} as const;\nexport type TYPES = keyof typeof TYPES;\nexport const asTrueValues = ['true', true, '1', 1];\nexport const asFalseValues = ['false', false, '', 0];\nexport class OptionHandler {\n schema: Record<string, any>;\n constructor(schema: Record<string, any>) {\n this.schema = schema;\n }\n static getTypeValue(value: string, type: string) {\n if (type === TYPES.array) {\n return value.split(',');\n }\n if (type === TYPES.object) {\n return JSON.parse(value);\n }\n if (type === TYPES.keyValueArray) {\n if (!value) return [];\n return value\n .split(',')\n .map((strItem) => {\n if (!strItem) return undefined;\n const [key, value] = strItem.split('=');\n return { key, value };\n })\n .filter((i) => i);\n }\n if (type === TYPES.number) {\n return Number(value);\n }\n if (type === TYPES.boolean) {\n if (asTrueValues.includes(value)) return true;\n return false;\n }\n return value;\n }\n static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n const type = schema[key];\n if (typeof value === 'object') {\n _obj[key] = OptionHandler.toType(value, type);\n } else {\n _obj[key] = OptionHandler.getTypeValue(value as string, type);\n }\n });\n return _obj;\n }\n toType(obj: Record<string, any>) {\n return OptionHandler.toType(obj, this.schema);\n }\n static toString(obj: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n _obj[key] = OptionHandler.toStringValue(value);\n });\n return _obj;\n }\n static toStringValue(value: any) {\n if (Array.isArray(value)) {\n const item1 = value[0];\n // 有点魔法 key value 的值让他们用=表示\n if (typeof item1 === 'object' && item1.hasOwnProperty('key') && item1.hasOwnProperty('value')) {\n return value.map((item) => `${item.key}=${item.value}`).toString();\n }\n return value.toString();\n }\n if (typeof value === 'object') {\n return OptionHandler.toString(value);\n }\n return '' + value;\n }\n}\n","/**\n * @author\n * @file PromptsCommand.ts\n * @fileBase PromptsCommand\n * @path packages\\cli-core\\lib\\cli\\PromptsCommand.ts\n * @from\n * @desc\n * @todo\n *\n *\n * @done\n * @example\n */\nimport { input } from '@inquirer/prompts';\nimport { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { OptionHandler, TYPES } from '../OptionHandler';\nimport { AbstractCommand, Action } from './command.interface';\n// const actionMap = {\n// [TYPES.array]: input,\n// [TYPES.keyValueArray]: input,\n// [TYPES.number]: number,\n// [TYPES.string]: input,\n// [TYPES.select]: select,\n// };\nexport class PromptsCommand extends AbstractCommand {\n program: any;\n init() {\n const defaultOptionList = jsonToList({ delimiter: '.', json: this.options.defaultOptions });\n const flattedOptionType = flatJson({\n delimiter: '.',\n data: this.options.optionTypes,\n });\n const flattedOptionTitle = flatJson({\n delimiter: '.',\n data: this.options.optionTitles,\n });\n this.program = async () => {\n const result: Record<string, any> = {};\n for (const { key, value } of defaultOptionList) {\n const type = flattedOptionType[key];\n if (!type) {\n continue;\n }\n const title = flattedOptionTitle[key];\n if (!title) {\n continue;\n }\n result[key] = (await this.getActionResult(type, title)) || value;\n }\n return result;\n };\n }\n private async getActionResult(type: TYPES, message: string) {\n return await input({ message });\n }\n async start(action: Action) {\n const options = await this.program();\n const unflattedOptions = unflatJson({ delimiter: '.', data: options });\n const typedResults = OptionHandler.toType(unflattedOptions, this.options.optionTypes);\n action(typedResults);\n }\n}\n","import { merge } from 'lodash';\nimport { AbstractCommand, Action, CommandOptions } from './command/command.interface';\nimport { ArgsCommand } from './command/ArgsCommand';\nimport { PromptsCommand } from './command/PromptsCommand';\nimport { Logger } from '@tikkhun/logger';\nexport enum CommandTypes {\n 'prompts' = 'prompts',\n 'args' = 'args',\n}\nexport interface CommandManagerOptions extends CommandOptions {\n name: string;\n types: CommandTypes[];\n}\nexport class CommandManager {\n static readonly DEFAULT_OPTIONS: CommandManagerOptions = {\n ...AbstractCommand.DEFAULT_CLI_OPTIONS,\n types: [CommandTypes.args],\n name: '',\n };\n logger: Logger;\n options: CommandManagerOptions;\n argsCommand?: ArgsCommand;\n promptsCommand?: PromptsCommand;\n constructor(options: Partial<CommandManagerOptions>) {\n this.options = merge(CommandManager.DEFAULT_OPTIONS, options);\n this.logger = new Logger(this.options.name);\n this.welcome();\n this.init();\n }\n welcome() {\n this.logger.log('Welcome!');\n this.logger.log('version: ' + this.options.version);\n this.logger.log('description: ' + this.options.description);\n }\n init() {\n const { types, ...options } = this.options;\n if (!types || !types.length) {\n throw new Error('types is undefined');\n }\n if (types.includes(CommandTypes.args)) {\n this.argsCommand = new ArgsCommand(options);\n }\n if (types.includes(CommandTypes.prompts)) {\n this.promptsCommand = new PromptsCommand(options);\n }\n }\n start(action: Action) {\n if (this.argsCommand) {\n this.argsCommand.program!.command('question').action(() => {\n this.promptsCommand?.start(action);\n });\n this.argsCommand.start(action);\n } else {\n this.promptsCommand?.start(action);\n }\n }\n}\n// alias\nexport const Cli = CommandManager;\n"]}
|
package/dist/OptionHandler.d.mts
CHANGED
@@ -5,7 +5,9 @@ declare const TYPES: {
|
|
5
5
|
readonly number: "number";
|
6
6
|
readonly object: "object";
|
7
7
|
readonly string: "string";
|
8
|
+
readonly select: "select";
|
8
9
|
};
|
10
|
+
type TYPES = keyof typeof TYPES;
|
9
11
|
declare const asTrueValues: (string | number | boolean)[];
|
10
12
|
declare const asFalseValues: (string | number | boolean)[];
|
11
13
|
declare class OptionHandler {
|
package/dist/OptionHandler.d.ts
CHANGED
@@ -5,7 +5,9 @@ declare const TYPES: {
|
|
5
5
|
readonly number: "number";
|
6
6
|
readonly object: "object";
|
7
7
|
readonly string: "string";
|
8
|
+
readonly select: "select";
|
8
9
|
};
|
10
|
+
type TYPES = keyof typeof TYPES;
|
9
11
|
declare const asTrueValues: (string | number | boolean)[];
|
10
12
|
declare const asFalseValues: (string | number | boolean)[];
|
11
13
|
declare class OptionHandler {
|
package/dist/OptionHandler.js
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
/**
|
4
4
|
@tikkhun/cli-core
|
5
5
|
*/
|
6
|
-
var i={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string"},y=["true",!0,"1",1],u=["false",!1,"",0],c=class
|
6
|
+
var i={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string",select:"select"},y=["true",!0,"1",1],u=["false",!1,"",0],c=class s{constructor(r){this.schema=r;}static getTypeValue(r,t){return t===i.array?r.split(","):t===i.object?JSON.parse(r):t===i.keyValueArray?r?r.split(",").map(e=>{if(!e)return;let[n,o]=e.split("=");return {key:n,value:o}}).filter(e=>e):[]:t===i.number?Number(r):t===i.boolean?!!y.includes(r):r}static toType(r,t){let e={};return Object.entries(r).forEach(([n,o])=>{let a=t[n];typeof o=="object"?e[n]=s.toType(o,a):e[n]=s.getTypeValue(o,a);}),e}toType(r){return s.toType(r,this.schema)}static toString(r){let t={};return Object.entries(r).forEach(([e,n])=>{t[e]=s.toStringValue(n);}),t}static toStringValue(r){if(Array.isArray(r)){let t=r[0];return typeof t=="object"&&t.hasOwnProperty("key")&&t.hasOwnProperty("value")?r.map(e=>`${e.key}=${e.value}`).toString():r.toString()}return typeof r=="object"?s.toString(r):""+r}};
|
7
7
|
|
8
8
|
exports.OptionHandler = c;
|
9
9
|
exports.TYPES = i;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../lib/OptionHandler.ts"],"names":["TYPES","asTrueValues","asFalseValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item"],"mappings":";;;;;
|
1
|
+
{"version":3,"sources":["../lib/OptionHandler.ts"],"names":["TYPES","asTrueValues","asFalseValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item"],"mappings":"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","file":"OptionHandler.js","sourcesContent":["export const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n select: 'select', // 几个中进行选择 选择一项\n} as const;\nexport type TYPES = keyof typeof TYPES;\nexport const asTrueValues = ['true', true, '1', 1];\nexport const asFalseValues = ['false', false, '', 0];\nexport class OptionHandler {\n schema: Record<string, any>;\n constructor(schema: Record<string, any>) {\n this.schema = schema;\n }\n static getTypeValue(value: string, type: string) {\n if (type === TYPES.array) {\n return value.split(',');\n }\n if (type === TYPES.object) {\n return JSON.parse(value);\n }\n if (type === TYPES.keyValueArray) {\n if (!value) return [];\n return value\n .split(',')\n .map((strItem) => {\n if (!strItem) return undefined;\n const [key, value] = strItem.split('=');\n return { key, value };\n })\n .filter((i) => i);\n }\n if (type === TYPES.number) {\n return Number(value);\n }\n if (type === TYPES.boolean) {\n if (asTrueValues.includes(value)) return true;\n return false;\n }\n return value;\n }\n static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n const type = schema[key];\n if (typeof value === 'object') {\n _obj[key] = OptionHandler.toType(value, type);\n } else {\n _obj[key] = OptionHandler.getTypeValue(value as string, type);\n }\n });\n return _obj;\n }\n toType(obj: Record<string, any>) {\n return OptionHandler.toType(obj, this.schema);\n }\n static toString(obj: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n _obj[key] = OptionHandler.toStringValue(value);\n });\n return _obj;\n }\n static toStringValue(value: any) {\n if (Array.isArray(value)) {\n const item1 = value[0];\n // 有点魔法 key value 的值让他们用=表示\n if (typeof item1 === 'object' && item1.hasOwnProperty('key') && item1.hasOwnProperty('value')) {\n return value.map((item) => `${item.key}=${item.value}`).toString();\n }\n return value.toString();\n }\n if (typeof value === 'object') {\n return OptionHandler.toString(value);\n }\n return '' + value;\n }\n}\n"]}
|
package/dist/OptionHandler.mjs
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
/**
|
2
2
|
@tikkhun/cli-core
|
3
3
|
*/
|
4
|
-
var i={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string"},y=["true",!0,"1",1],u=["false",!1,"",0],c=class
|
4
|
+
var i={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string",select:"select"},y=["true",!0,"1",1],u=["false",!1,"",0],c=class s{constructor(r){this.schema=r;}static getTypeValue(r,t){return t===i.array?r.split(","):t===i.object?JSON.parse(r):t===i.keyValueArray?r?r.split(",").map(e=>{if(!e)return;let[n,o]=e.split("=");return {key:n,value:o}}).filter(e=>e):[]:t===i.number?Number(r):t===i.boolean?!!y.includes(r):r}static toType(r,t){let e={};return Object.entries(r).forEach(([n,o])=>{let a=t[n];typeof o=="object"?e[n]=s.toType(o,a):e[n]=s.getTypeValue(o,a);}),e}toType(r){return s.toType(r,this.schema)}static toString(r){let t={};return Object.entries(r).forEach(([e,n])=>{t[e]=s.toStringValue(n);}),t}static toStringValue(r){if(Array.isArray(r)){let t=r[0];return typeof t=="object"&&t.hasOwnProperty("key")&&t.hasOwnProperty("value")?r.map(e=>`${e.key}=${e.value}`).toString():r.toString()}return typeof r=="object"?s.toString(r):""+r}};
|
5
5
|
|
6
6
|
export { c as OptionHandler, i as TYPES, u as asFalseValues, y as asTrueValues };
|
7
7
|
//# sourceMappingURL=OptionHandler.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../lib/OptionHandler.ts"],"names":["TYPES","asTrueValues","asFalseValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item"],"mappings":";;;
|
1
|
+
{"version":3,"sources":["../lib/OptionHandler.ts"],"names":["TYPES","asTrueValues","asFalseValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item"],"mappings":"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","file":"OptionHandler.mjs","sourcesContent":["export const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n select: 'select', // 几个中进行选择 选择一项\n} as const;\nexport type TYPES = keyof typeof TYPES;\nexport const asTrueValues = ['true', true, '1', 1];\nexport const asFalseValues = ['false', false, '', 0];\nexport class OptionHandler {\n schema: Record<string, any>;\n constructor(schema: Record<string, any>) {\n this.schema = schema;\n }\n static getTypeValue(value: string, type: string) {\n if (type === TYPES.array) {\n return value.split(',');\n }\n if (type === TYPES.object) {\n return JSON.parse(value);\n }\n if (type === TYPES.keyValueArray) {\n if (!value) return [];\n return value\n .split(',')\n .map((strItem) => {\n if (!strItem) return undefined;\n const [key, value] = strItem.split('=');\n return { key, value };\n })\n .filter((i) => i);\n }\n if (type === TYPES.number) {\n return Number(value);\n }\n if (type === TYPES.boolean) {\n if (asTrueValues.includes(value)) return true;\n return false;\n }\n return value;\n }\n static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n const type = schema[key];\n if (typeof value === 'object') {\n _obj[key] = OptionHandler.toType(value, type);\n } else {\n _obj[key] = OptionHandler.getTypeValue(value as string, type);\n }\n });\n return _obj;\n }\n toType(obj: Record<string, any>) {\n return OptionHandler.toType(obj, this.schema);\n }\n static toString(obj: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n _obj[key] = OptionHandler.toStringValue(value);\n });\n return _obj;\n }\n static toStringValue(value: any) {\n if (Array.isArray(value)) {\n const item1 = value[0];\n // 有点魔法 key value 的值让他们用=表示\n if (typeof item1 === 'object' && item1.hasOwnProperty('key') && item1.hasOwnProperty('value')) {\n return value.map((item) => `${item.key}=${item.value}`).toString();\n }\n return value.toString();\n }\n if (typeof value === 'object') {\n return OptionHandler.toString(value);\n }\n return '' + value;\n }\n}\n"]}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { AbstractCommand, Action } from './command.interface.mjs';
|
2
|
+
import { Command } from 'commander';
|
3
|
+
|
4
|
+
declare class ArgsCommand extends AbstractCommand {
|
5
|
+
program: Command | undefined;
|
6
|
+
init(): void;
|
7
|
+
private addOptions;
|
8
|
+
start(action: Action): void;
|
9
|
+
}
|
10
|
+
|
11
|
+
export { ArgsCommand };
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { AbstractCommand, Action } from './command.interface.js';
|
2
|
+
import { Command } from 'commander';
|
3
|
+
|
4
|
+
declare class ArgsCommand extends AbstractCommand {
|
5
|
+
program: Command | undefined;
|
6
|
+
init(): void;
|
7
|
+
private addOptions;
|
8
|
+
start(action: Action): void;
|
9
|
+
}
|
10
|
+
|
11
|
+
export { ArgsCommand };
|
@@ -0,0 +1,18 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var utilsCore = require('@tikkhun/utils-core');
|
4
|
+
var g = require('lodash');
|
5
|
+
var commander = require('commander');
|
6
|
+
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
8
|
+
|
9
|
+
var g__default = /*#__PURE__*/_interopDefault(g);
|
10
|
+
|
11
|
+
/**
|
12
|
+
@tikkhun/cli-core
|
13
|
+
*/
|
14
|
+
var e={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string",select:"select"},f=["true",!0,"1",1];var a=class s{constructor(t){this.schema=t;}static getTypeValue(t,o){return o===e.array?t.split(","):o===e.object?JSON.parse(t):o===e.keyValueArray?t?t.split(",").map(r=>{if(!r)return;let[n,i]=r.split("=");return {key:n,value:i}}).filter(r=>r):[]:o===e.number?Number(t):o===e.boolean?!!f.includes(t):t}static toType(t,o){let r={};return Object.entries(t).forEach(([n,i])=>{let p=o[n];typeof i=="object"?r[n]=s.toType(i,p):r[n]=s.getTypeValue(i,p);}),r}toType(t){return s.toType(t,this.schema)}static toString(t){let o={};return Object.entries(t).forEach(([r,n])=>{o[r]=s.toStringValue(n);}),o}static toStringValue(t){if(Array.isArray(t)){let o=t[0];return typeof o=="object"&&o.hasOwnProperty("key")&&o.hasOwnProperty("value")?t.map(r=>`${r.key}=${r.value}`).toString():t.toString()}return typeof t=="object"?s.toString(t):""+t}};var{merge:m}=g__default.default,d=class d{constructor(t){this.options=m(d.DEFAULT_CLI_OPTIONS,t),this.init();}};d.DEFAULT_CLI_OPTIONS={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}};var c=d;var {get:b}=g__default.default,y=class extends c{init(){this.program=commander.createCommand(),this.addOptions();}addOptions(){let t=a.toString(this.options.defaultOptions),o=utilsCore.jsonToList({delimiter:".",json:t}),r=utilsCore.flatJson({delimiter:".",data:this.options.optionTypes});o.forEach(({key:n,value:i})=>{if(this.options.excludeOptions.includes(n))return;let p=r[n];this.program.option(`--${n} <${p}>`,b(this.options.optionTitles,n),i);});}start(t){this.program.action(o=>{let r=utilsCore.unflatJson({delimiter:".",data:o}),n=a.toType(r,this.options.optionTypes);t(n);}).parse(process.argv);}};
|
15
|
+
|
16
|
+
exports.ArgsCommand = y;
|
17
|
+
//# sourceMappingURL=ArgsCommand.js.map
|
18
|
+
//# sourceMappingURL=ArgsCommand.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../lib/OptionHandler.ts","../../lib/command/command.interface.ts","../../lib/command/ArgsCommand.ts"],"names":["TYPES","asTrueValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","merge","_","_AbstractCommand","options","AbstractCommand","get","ArgsCommand","createCommand","stringOptions","optionList","jsonToList","optionTypeMap","flatJson","action","jsonOptions","unflatJson","typedOptions"],"mappings":"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","file":"ArgsCommand.js","sourcesContent":["export const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n select: 'select', // 几个中进行选择 选择一项\n} as const;\nexport type TYPES = keyof typeof TYPES;\nexport const asTrueValues = ['true', true, '1', 1];\nexport const asFalseValues = ['false', false, '', 0];\nexport class OptionHandler {\n schema: Record<string, any>;\n constructor(schema: Record<string, any>) {\n this.schema = schema;\n }\n static getTypeValue(value: string, type: string) {\n if (type === TYPES.array) {\n return value.split(',');\n }\n if (type === TYPES.object) {\n return JSON.parse(value);\n }\n if (type === TYPES.keyValueArray) {\n if (!value) return [];\n return value\n .split(',')\n .map((strItem) => {\n if (!strItem) return undefined;\n const [key, value] = strItem.split('=');\n return { key, value };\n })\n .filter((i) => i);\n }\n if (type === TYPES.number) {\n return Number(value);\n }\n if (type === TYPES.boolean) {\n if (asTrueValues.includes(value)) return true;\n return false;\n }\n return value;\n }\n static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n const type = schema[key];\n if (typeof value === 'object') {\n _obj[key] = OptionHandler.toType(value, type);\n } else {\n _obj[key] = OptionHandler.getTypeValue(value as string, type);\n }\n });\n return _obj;\n }\n toType(obj: Record<string, any>) {\n return OptionHandler.toType(obj, this.schema);\n }\n static toString(obj: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n _obj[key] = OptionHandler.toStringValue(value);\n });\n return _obj;\n }\n static toStringValue(value: any) {\n if (Array.isArray(value)) {\n const item1 = value[0];\n // 有点魔法 key value 的值让他们用=表示\n if (typeof item1 === 'object' && item1.hasOwnProperty('key') && item1.hasOwnProperty('value')) {\n return value.map((item) => `${item.key}=${item.value}`).toString();\n }\n return value.toString();\n }\n if (typeof value === 'object') {\n return OptionHandler.toString(value);\n }\n return '' + value;\n }\n}\n","import _ from 'lodash';\nconst { merge } = _;\nexport interface Action {\n (options: any): void;\n}\nexport interface CommandOptions {\n version: string;\n description: string;\n defaultOptions: Record<string, any>;\n excludeOptions: string[];\n optionTypes: Record<string, any>;\n optionTitles: Record<string, any>;\n}\n\nexport abstract class AbstractCommand {\n static DEFAULT_CLI_OPTIONS: CommandOptions = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n };\n\n options: CommandOptions;\n constructor(options?: Partial<CommandOptions>) {\n this.options = merge(AbstractCommand.DEFAULT_CLI_OPTIONS, options);\n this.init();\n }\n abstract init(): void;\n abstract start(action: (options: any) => any): void;\n}\n","import { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { OptionHandler } from '../OptionHandler';\nimport { AbstractCommand, Action } from './command.interface';\nimport { Command, createCommand } from 'commander';\nimport _ from 'lodash';\nconst { get } = _;\nexport class ArgsCommand extends AbstractCommand {\n program: Command | undefined;\n init(): void {\n this.program = createCommand();\n this.addOptions();\n }\n private addOptions() {\n const stringOptions = OptionHandler.toString(this.options.defaultOptions);\n const optionList = jsonToList({ delimiter: '.', json: stringOptions });\n const optionTypeMap = flatJson({ delimiter: '.', data: this.options.optionTypes });\n optionList.forEach(({ key, value }) => {\n if (this.options.excludeOptions.includes(key)) {\n return;\n }\n const type = optionTypeMap[key];\n this.program!.option(`--${key} <${type}>`, get(this.options.optionTitles, key), value);\n });\n }\n start(action: Action) {\n this.program!.action((stringOptions) => {\n const jsonOptions = unflatJson({\n delimiter: '.',\n data: stringOptions,\n });\n const typedOptions = OptionHandler.toType(jsonOptions, this.options.optionTypes);\n action(typedOptions);\n }).parse(process.argv);\n }\n}\n"]}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { jsonToList, flatJson, unflatJson } from '@tikkhun/utils-core';
|
2
|
+
import g from 'lodash';
|
3
|
+
import { createCommand } from 'commander';
|
4
|
+
|
5
|
+
/**
|
6
|
+
@tikkhun/cli-core
|
7
|
+
*/
|
8
|
+
var e={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string",select:"select"},f=["true",!0,"1",1];var a=class s{constructor(t){this.schema=t;}static getTypeValue(t,o){return o===e.array?t.split(","):o===e.object?JSON.parse(t):o===e.keyValueArray?t?t.split(",").map(r=>{if(!r)return;let[n,i]=r.split("=");return {key:n,value:i}}).filter(r=>r):[]:o===e.number?Number(t):o===e.boolean?!!f.includes(t):t}static toType(t,o){let r={};return Object.entries(t).forEach(([n,i])=>{let p=o[n];typeof i=="object"?r[n]=s.toType(i,p):r[n]=s.getTypeValue(i,p);}),r}toType(t){return s.toType(t,this.schema)}static toString(t){let o={};return Object.entries(t).forEach(([r,n])=>{o[r]=s.toStringValue(n);}),o}static toStringValue(t){if(Array.isArray(t)){let o=t[0];return typeof o=="object"&&o.hasOwnProperty("key")&&o.hasOwnProperty("value")?t.map(r=>`${r.key}=${r.value}`).toString():t.toString()}return typeof t=="object"?s.toString(t):""+t}};var{merge:m}=g,d=class d{constructor(t){this.options=m(d.DEFAULT_CLI_OPTIONS,t),this.init();}};d.DEFAULT_CLI_OPTIONS={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}};var c=d;var {get:b}=g,y=class extends c{init(){this.program=createCommand(),this.addOptions();}addOptions(){let t=a.toString(this.options.defaultOptions),o=jsonToList({delimiter:".",json:t}),r=flatJson({delimiter:".",data:this.options.optionTypes});o.forEach(({key:n,value:i})=>{if(this.options.excludeOptions.includes(n))return;let p=r[n];this.program.option(`--${n} <${p}>`,b(this.options.optionTitles,n),i);});}start(t){this.program.action(o=>{let r=unflatJson({delimiter:".",data:o}),n=a.toType(r,this.options.optionTypes);t(n);}).parse(process.argv);}};
|
9
|
+
|
10
|
+
export { y as ArgsCommand };
|
11
|
+
//# sourceMappingURL=ArgsCommand.mjs.map
|
12
|
+
//# sourceMappingURL=ArgsCommand.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../lib/OptionHandler.ts","../../lib/command/command.interface.ts","../../lib/command/ArgsCommand.ts"],"names":["TYPES","asTrueValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","merge","_","_AbstractCommand","options","AbstractCommand","get","ArgsCommand","createCommand","stringOptions","optionList","jsonToList","optionTypeMap","flatJson","action","jsonOptions","unflatJson","typedOptions"],"mappings":"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","file":"ArgsCommand.mjs","sourcesContent":["export const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n select: 'select', // 几个中进行选择 选择一项\n} as const;\nexport type TYPES = keyof typeof TYPES;\nexport const asTrueValues = ['true', true, '1', 1];\nexport const asFalseValues = ['false', false, '', 0];\nexport class OptionHandler {\n schema: Record<string, any>;\n constructor(schema: Record<string, any>) {\n this.schema = schema;\n }\n static getTypeValue(value: string, type: string) {\n if (type === TYPES.array) {\n return value.split(',');\n }\n if (type === TYPES.object) {\n return JSON.parse(value);\n }\n if (type === TYPES.keyValueArray) {\n if (!value) return [];\n return value\n .split(',')\n .map((strItem) => {\n if (!strItem) return undefined;\n const [key, value] = strItem.split('=');\n return { key, value };\n })\n .filter((i) => i);\n }\n if (type === TYPES.number) {\n return Number(value);\n }\n if (type === TYPES.boolean) {\n if (asTrueValues.includes(value)) return true;\n return false;\n }\n return value;\n }\n static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n const type = schema[key];\n if (typeof value === 'object') {\n _obj[key] = OptionHandler.toType(value, type);\n } else {\n _obj[key] = OptionHandler.getTypeValue(value as string, type);\n }\n });\n return _obj;\n }\n toType(obj: Record<string, any>) {\n return OptionHandler.toType(obj, this.schema);\n }\n static toString(obj: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n _obj[key] = OptionHandler.toStringValue(value);\n });\n return _obj;\n }\n static toStringValue(value: any) {\n if (Array.isArray(value)) {\n const item1 = value[0];\n // 有点魔法 key value 的值让他们用=表示\n if (typeof item1 === 'object' && item1.hasOwnProperty('key') && item1.hasOwnProperty('value')) {\n return value.map((item) => `${item.key}=${item.value}`).toString();\n }\n return value.toString();\n }\n if (typeof value === 'object') {\n return OptionHandler.toString(value);\n }\n return '' + value;\n }\n}\n","import _ from 'lodash';\nconst { merge } = _;\nexport interface Action {\n (options: any): void;\n}\nexport interface CommandOptions {\n version: string;\n description: string;\n defaultOptions: Record<string, any>;\n excludeOptions: string[];\n optionTypes: Record<string, any>;\n optionTitles: Record<string, any>;\n}\n\nexport abstract class AbstractCommand {\n static DEFAULT_CLI_OPTIONS: CommandOptions = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n };\n\n options: CommandOptions;\n constructor(options?: Partial<CommandOptions>) {\n this.options = merge(AbstractCommand.DEFAULT_CLI_OPTIONS, options);\n this.init();\n }\n abstract init(): void;\n abstract start(action: (options: any) => any): void;\n}\n","import { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { OptionHandler } from '../OptionHandler';\nimport { AbstractCommand, Action } from './command.interface';\nimport { Command, createCommand } from 'commander';\nimport _ from 'lodash';\nconst { get } = _;\nexport class ArgsCommand extends AbstractCommand {\n program: Command | undefined;\n init(): void {\n this.program = createCommand();\n this.addOptions();\n }\n private addOptions() {\n const stringOptions = OptionHandler.toString(this.options.defaultOptions);\n const optionList = jsonToList({ delimiter: '.', json: stringOptions });\n const optionTypeMap = flatJson({ delimiter: '.', data: this.options.optionTypes });\n optionList.forEach(({ key, value }) => {\n if (this.options.excludeOptions.includes(key)) {\n return;\n }\n const type = optionTypeMap[key];\n this.program!.option(`--${key} <${type}>`, get(this.options.optionTitles, key), value);\n });\n }\n start(action: Action) {\n this.program!.action((stringOptions) => {\n const jsonOptions = unflatJson({\n delimiter: '.',\n data: stringOptions,\n });\n const typedOptions = OptionHandler.toType(jsonOptions, this.options.optionTypes);\n action(typedOptions);\n }).parse(process.argv);\n }\n}\n"]}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var prompts = require('@inquirer/prompts');
|
4
|
+
var utilsCore = require('@tikkhun/utils-core');
|
5
|
+
var O = require('lodash');
|
6
|
+
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
8
|
+
|
9
|
+
var O__default = /*#__PURE__*/_interopDefault(O);
|
10
|
+
|
11
|
+
/**
|
12
|
+
@tikkhun/cli-core
|
13
|
+
*/
|
14
|
+
var y=(s,t,n)=>new Promise((o,r)=>{var e=i=>{try{c(n.next(i));}catch(d){r(d);}},a=i=>{try{c(n.throw(i));}catch(d){r(d);}},c=i=>i.done?o(i.value):Promise.resolve(i.value).then(e,a);c((n=n.apply(s,t)).next());});var p={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string",select:"select"},T=["true",!0,"1",1];var u=class s{constructor(t){this.schema=t;}static getTypeValue(t,n){return n===p.array?t.split(","):n===p.object?JSON.parse(t):n===p.keyValueArray?t?t.split(",").map(o=>{if(!o)return;let[r,e]=o.split("=");return {key:r,value:e}}).filter(o=>o):[]:n===p.number?Number(t):n===p.boolean?!!T.includes(t):t}static toType(t,n){let o={};return Object.entries(t).forEach(([r,e])=>{let a=n[r];typeof e=="object"?o[r]=s.toType(e,a):o[r]=s.getTypeValue(e,a);}),o}toType(t){return s.toType(t,this.schema)}static toString(t){let n={};return Object.entries(t).forEach(([o,r])=>{n[o]=s.toStringValue(r);}),n}static toStringValue(t){if(Array.isArray(t)){let n=t[0];return typeof n=="object"&&n.hasOwnProperty("key")&&n.hasOwnProperty("value")?t.map(o=>`${o.key}=${o.value}`).toString():t.toString()}return typeof t=="object"?s.toString(t):""+t}};var{merge:b}=O__default.default,l=class l{constructor(t){this.options=b(l.DEFAULT_CLI_OPTIONS,t),this.init();}};l.DEFAULT_CLI_OPTIONS={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}};var f=l;var m=class extends f{init(){let t=utilsCore.jsonToList({delimiter:".",json:this.options.defaultOptions}),n=utilsCore.flatJson({delimiter:".",data:this.options.optionTypes}),o=utilsCore.flatJson({delimiter:".",data:this.options.optionTitles});this.program=()=>y(this,null,function*(){let r={};for(let{key:e,value:a}of t){let c=n[e];if(!c)continue;let i=o[e];i&&(r[e]=(yield this.getActionResult(c,i))||a);}return r});}getActionResult(t,n){return y(this,null,function*(){return yield prompts.input({message:n})})}start(t){return y(this,null,function*(){let n=yield this.program(),o=utilsCore.unflatJson({delimiter:".",data:n}),r=u.toType(o,this.options.optionTypes);t(r);})}};
|
15
|
+
|
16
|
+
exports.PromptsCommand = m;
|
17
|
+
//# sourceMappingURL=PromptsCommand.js.map
|
18
|
+
//# sourceMappingURL=PromptsCommand.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../lib/OptionHandler.ts","../../lib/command/command.interface.ts","../../lib/command/PromptsCommand.ts"],"names":["TYPES","asTrueValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","merge","_","_AbstractCommand","options","AbstractCommand","PromptsCommand","defaultOptionList","jsonToList","flattedOptionType","flatJson","flattedOptionTitle","__async","result","title","message","input","action","unflattedOptions","unflatJson","typedResults"],"mappings":"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","file":"PromptsCommand.js","sourcesContent":["export const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n select: 'select', // 几个中进行选择 选择一项\n} as const;\nexport type TYPES = keyof typeof TYPES;\nexport const asTrueValues = ['true', true, '1', 1];\nexport const asFalseValues = ['false', false, '', 0];\nexport class OptionHandler {\n schema: Record<string, any>;\n constructor(schema: Record<string, any>) {\n this.schema = schema;\n }\n static getTypeValue(value: string, type: string) {\n if (type === TYPES.array) {\n return value.split(',');\n }\n if (type === TYPES.object) {\n return JSON.parse(value);\n }\n if (type === TYPES.keyValueArray) {\n if (!value) return [];\n return value\n .split(',')\n .map((strItem) => {\n if (!strItem) return undefined;\n const [key, value] = strItem.split('=');\n return { key, value };\n })\n .filter((i) => i);\n }\n if (type === TYPES.number) {\n return Number(value);\n }\n if (type === TYPES.boolean) {\n if (asTrueValues.includes(value)) return true;\n return false;\n }\n return value;\n }\n static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n const type = schema[key];\n if (typeof value === 'object') {\n _obj[key] = OptionHandler.toType(value, type);\n } else {\n _obj[key] = OptionHandler.getTypeValue(value as string, type);\n }\n });\n return _obj;\n }\n toType(obj: Record<string, any>) {\n return OptionHandler.toType(obj, this.schema);\n }\n static toString(obj: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n _obj[key] = OptionHandler.toStringValue(value);\n });\n return _obj;\n }\n static toStringValue(value: any) {\n if (Array.isArray(value)) {\n const item1 = value[0];\n // 有点魔法 key value 的值让他们用=表示\n if (typeof item1 === 'object' && item1.hasOwnProperty('key') && item1.hasOwnProperty('value')) {\n return value.map((item) => `${item.key}=${item.value}`).toString();\n }\n return value.toString();\n }\n if (typeof value === 'object') {\n return OptionHandler.toString(value);\n }\n return '' + value;\n }\n}\n","import _ from 'lodash';\nconst { merge } = _;\nexport interface Action {\n (options: any): void;\n}\nexport interface CommandOptions {\n version: string;\n description: string;\n defaultOptions: Record<string, any>;\n excludeOptions: string[];\n optionTypes: Record<string, any>;\n optionTitles: Record<string, any>;\n}\n\nexport abstract class AbstractCommand {\n static DEFAULT_CLI_OPTIONS: CommandOptions = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n };\n\n options: CommandOptions;\n constructor(options?: Partial<CommandOptions>) {\n this.options = merge(AbstractCommand.DEFAULT_CLI_OPTIONS, options);\n this.init();\n }\n abstract init(): void;\n abstract start(action: (options: any) => any): void;\n}\n","/**\n * @author\n * @file PromptsCommand.ts\n * @fileBase PromptsCommand\n * @path packages\\cli-core\\lib\\cli\\PromptsCommand.ts\n * @from\n * @desc\n * @todo\n *\n *\n * @done\n * @example\n */\nimport { input } from '@inquirer/prompts';\nimport { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { OptionHandler, TYPES } from '../OptionHandler';\nimport { AbstractCommand, Action } from './command.interface';\n// const actionMap = {\n// [TYPES.array]: input,\n// [TYPES.keyValueArray]: input,\n// [TYPES.number]: number,\n// [TYPES.string]: input,\n// [TYPES.select]: select,\n// };\nexport class PromptsCommand extends AbstractCommand {\n program: any;\n init() {\n const defaultOptionList = jsonToList({ delimiter: '.', json: this.options.defaultOptions });\n const flattedOptionType = flatJson({\n delimiter: '.',\n data: this.options.optionTypes,\n });\n const flattedOptionTitle = flatJson({\n delimiter: '.',\n data: this.options.optionTitles,\n });\n this.program = async () => {\n const result: Record<string, any> = {};\n for (const { key, value } of defaultOptionList) {\n const type = flattedOptionType[key];\n if (!type) {\n continue;\n }\n const title = flattedOptionTitle[key];\n if (!title) {\n continue;\n }\n result[key] = (await this.getActionResult(type, title)) || value;\n }\n return result;\n };\n }\n private async getActionResult(type: TYPES, message: string) {\n return await input({ message });\n }\n async start(action: Action) {\n const options = await this.program();\n const unflattedOptions = unflatJson({ delimiter: '.', data: options });\n const typedResults = OptionHandler.toType(unflattedOptions, this.options.optionTypes);\n action(typedResults);\n }\n}\n"]}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { input } from '@inquirer/prompts';
|
2
|
+
import { jsonToList, flatJson, unflatJson } from '@tikkhun/utils-core';
|
3
|
+
import O from 'lodash';
|
4
|
+
|
5
|
+
/**
|
6
|
+
@tikkhun/cli-core
|
7
|
+
*/
|
8
|
+
var y=(s,t,n)=>new Promise((o,r)=>{var e=i=>{try{c(n.next(i));}catch(d){r(d);}},a=i=>{try{c(n.throw(i));}catch(d){r(d);}},c=i=>i.done?o(i.value):Promise.resolve(i.value).then(e,a);c((n=n.apply(s,t)).next());});var p={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string",select:"select"},T=["true",!0,"1",1];var u=class s{constructor(t){this.schema=t;}static getTypeValue(t,n){return n===p.array?t.split(","):n===p.object?JSON.parse(t):n===p.keyValueArray?t?t.split(",").map(o=>{if(!o)return;let[r,e]=o.split("=");return {key:r,value:e}}).filter(o=>o):[]:n===p.number?Number(t):n===p.boolean?!!T.includes(t):t}static toType(t,n){let o={};return Object.entries(t).forEach(([r,e])=>{let a=n[r];typeof e=="object"?o[r]=s.toType(e,a):o[r]=s.getTypeValue(e,a);}),o}toType(t){return s.toType(t,this.schema)}static toString(t){let n={};return Object.entries(t).forEach(([o,r])=>{n[o]=s.toStringValue(r);}),n}static toStringValue(t){if(Array.isArray(t)){let n=t[0];return typeof n=="object"&&n.hasOwnProperty("key")&&n.hasOwnProperty("value")?t.map(o=>`${o.key}=${o.value}`).toString():t.toString()}return typeof t=="object"?s.toString(t):""+t}};var{merge:b}=O,l=class l{constructor(t){this.options=b(l.DEFAULT_CLI_OPTIONS,t),this.init();}};l.DEFAULT_CLI_OPTIONS={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}};var f=l;var m=class extends f{init(){let t=jsonToList({delimiter:".",json:this.options.defaultOptions}),n=flatJson({delimiter:".",data:this.options.optionTypes}),o=flatJson({delimiter:".",data:this.options.optionTitles});this.program=()=>y(this,null,function*(){let r={};for(let{key:e,value:a}of t){let c=n[e];if(!c)continue;let i=o[e];i&&(r[e]=(yield this.getActionResult(c,i))||a);}return r});}getActionResult(t,n){return y(this,null,function*(){return yield input({message:n})})}start(t){return y(this,null,function*(){let n=yield this.program(),o=unflatJson({delimiter:".",data:n}),r=u.toType(o,this.options.optionTypes);t(r);})}};
|
9
|
+
|
10
|
+
export { m as PromptsCommand };
|
11
|
+
//# sourceMappingURL=PromptsCommand.mjs.map
|
12
|
+
//# sourceMappingURL=PromptsCommand.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../lib/OptionHandler.ts","../../lib/command/command.interface.ts","../../lib/command/PromptsCommand.ts"],"names":["TYPES","asTrueValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","merge","_","_AbstractCommand","options","AbstractCommand","PromptsCommand","defaultOptionList","jsonToList","flattedOptionType","flatJson","flattedOptionTitle","__async","result","title","message","input","action","unflattedOptions","unflatJson","typedResults"],"mappings":"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","file":"PromptsCommand.mjs","sourcesContent":["export const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n select: 'select', // 几个中进行选择 选择一项\n} as const;\nexport type TYPES = keyof typeof TYPES;\nexport const asTrueValues = ['true', true, '1', 1];\nexport const asFalseValues = ['false', false, '', 0];\nexport class OptionHandler {\n schema: Record<string, any>;\n constructor(schema: Record<string, any>) {\n this.schema = schema;\n }\n static getTypeValue(value: string, type: string) {\n if (type === TYPES.array) {\n return value.split(',');\n }\n if (type === TYPES.object) {\n return JSON.parse(value);\n }\n if (type === TYPES.keyValueArray) {\n if (!value) return [];\n return value\n .split(',')\n .map((strItem) => {\n if (!strItem) return undefined;\n const [key, value] = strItem.split('=');\n return { key, value };\n })\n .filter((i) => i);\n }\n if (type === TYPES.number) {\n return Number(value);\n }\n if (type === TYPES.boolean) {\n if (asTrueValues.includes(value)) return true;\n return false;\n }\n return value;\n }\n static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n const type = schema[key];\n if (typeof value === 'object') {\n _obj[key] = OptionHandler.toType(value, type);\n } else {\n _obj[key] = OptionHandler.getTypeValue(value as string, type);\n }\n });\n return _obj;\n }\n toType(obj: Record<string, any>) {\n return OptionHandler.toType(obj, this.schema);\n }\n static toString(obj: Record<string, any>) {\n const _obj: Record<string, any> = {};\n Object.entries(obj).forEach(([key, value]) => {\n _obj[key] = OptionHandler.toStringValue(value);\n });\n return _obj;\n }\n static toStringValue(value: any) {\n if (Array.isArray(value)) {\n const item1 = value[0];\n // 有点魔法 key value 的值让他们用=表示\n if (typeof item1 === 'object' && item1.hasOwnProperty('key') && item1.hasOwnProperty('value')) {\n return value.map((item) => `${item.key}=${item.value}`).toString();\n }\n return value.toString();\n }\n if (typeof value === 'object') {\n return OptionHandler.toString(value);\n }\n return '' + value;\n }\n}\n","import _ from 'lodash';\nconst { merge } = _;\nexport interface Action {\n (options: any): void;\n}\nexport interface CommandOptions {\n version: string;\n description: string;\n defaultOptions: Record<string, any>;\n excludeOptions: string[];\n optionTypes: Record<string, any>;\n optionTitles: Record<string, any>;\n}\n\nexport abstract class AbstractCommand {\n static DEFAULT_CLI_OPTIONS: CommandOptions = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n };\n\n options: CommandOptions;\n constructor(options?: Partial<CommandOptions>) {\n this.options = merge(AbstractCommand.DEFAULT_CLI_OPTIONS, options);\n this.init();\n }\n abstract init(): void;\n abstract start(action: (options: any) => any): void;\n}\n","/**\n * @author\n * @file PromptsCommand.ts\n * @fileBase PromptsCommand\n * @path packages\\cli-core\\lib\\cli\\PromptsCommand.ts\n * @from\n * @desc\n * @todo\n *\n *\n * @done\n * @example\n */\nimport { input } from '@inquirer/prompts';\nimport { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { OptionHandler, TYPES } from '../OptionHandler';\nimport { AbstractCommand, Action } from './command.interface';\n// const actionMap = {\n// [TYPES.array]: input,\n// [TYPES.keyValueArray]: input,\n// [TYPES.number]: number,\n// [TYPES.string]: input,\n// [TYPES.select]: select,\n// };\nexport class PromptsCommand extends AbstractCommand {\n program: any;\n init() {\n const defaultOptionList = jsonToList({ delimiter: '.', json: this.options.defaultOptions });\n const flattedOptionType = flatJson({\n delimiter: '.',\n data: this.options.optionTypes,\n });\n const flattedOptionTitle = flatJson({\n delimiter: '.',\n data: this.options.optionTitles,\n });\n this.program = async () => {\n const result: Record<string, any> = {};\n for (const { key, value } of defaultOptionList) {\n const type = flattedOptionType[key];\n if (!type) {\n continue;\n }\n const title = flattedOptionTitle[key];\n if (!title) {\n continue;\n }\n result[key] = (await this.getActionResult(type, title)) || value;\n }\n return result;\n };\n }\n private async getActionResult(type: TYPES, message: string) {\n return await input({ message });\n }\n async start(action: Action) {\n const options = await this.program();\n const unflattedOptions = unflatJson({ delimiter: '.', data: options });\n const typedResults = OptionHandler.toType(unflattedOptions, this.options.optionTypes);\n action(typedResults);\n }\n}\n"]}
|