@tikkhun/cli-core 0.0.4
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 +8 -0
- package/dist/Cli.d.mts +28 -0
- package/dist/Cli.d.ts +28 -0
- package/dist/Cli.js +19 -0
- package/dist/Cli.js.map +1 -0
- package/dist/Cli.mjs +12 -0
- package/dist/Cli.mjs.map +1 -0
- package/dist/OptionHandler.d.mts +21 -0
- package/dist/OptionHandler.d.ts +21 -0
- package/dist/OptionHandler.js +13 -0
- package/dist/OptionHandler.js.map +1 -0
- package/dist/OptionHandler.mjs +8 -0
- package/dist/OptionHandler.mjs.map +1 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +12 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +46 -0
package/README.md
ADDED
package/dist/Cli.d.mts
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
import { Command } from 'commander';
|
2
|
+
|
3
|
+
interface CliOptions {
|
4
|
+
version: string;
|
5
|
+
description: string;
|
6
|
+
defaultOptions: Record<string, any>;
|
7
|
+
excludeOptions: string[];
|
8
|
+
optionTypes: Record<string, any>;
|
9
|
+
optionTitles: Record<string, any>;
|
10
|
+
}
|
11
|
+
declare const DEFAULT_CLI_OPTIONS: {
|
12
|
+
version: string;
|
13
|
+
description: string;
|
14
|
+
defaultOptions: {};
|
15
|
+
excludeOptions: never[];
|
16
|
+
optionTypes: {};
|
17
|
+
optionTitles: {};
|
18
|
+
};
|
19
|
+
declare class Cli {
|
20
|
+
options: CliOptions;
|
21
|
+
program: Command;
|
22
|
+
constructor(options?: Partial<CliOptions>);
|
23
|
+
private addOptionToCommand;
|
24
|
+
init(): void;
|
25
|
+
start(action: (options: any) => any): void;
|
26
|
+
}
|
27
|
+
|
28
|
+
export { Cli, type CliOptions, DEFAULT_CLI_OPTIONS };
|
package/dist/Cli.d.ts
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
import { Command } from 'commander';
|
2
|
+
|
3
|
+
interface CliOptions {
|
4
|
+
version: string;
|
5
|
+
description: string;
|
6
|
+
defaultOptions: Record<string, any>;
|
7
|
+
excludeOptions: string[];
|
8
|
+
optionTypes: Record<string, any>;
|
9
|
+
optionTitles: Record<string, any>;
|
10
|
+
}
|
11
|
+
declare const DEFAULT_CLI_OPTIONS: {
|
12
|
+
version: string;
|
13
|
+
description: string;
|
14
|
+
defaultOptions: {};
|
15
|
+
excludeOptions: never[];
|
16
|
+
optionTypes: {};
|
17
|
+
optionTitles: {};
|
18
|
+
};
|
19
|
+
declare class Cli {
|
20
|
+
options: CliOptions;
|
21
|
+
program: Command;
|
22
|
+
constructor(options?: Partial<CliOptions>);
|
23
|
+
private addOptionToCommand;
|
24
|
+
init(): void;
|
25
|
+
start(action: (options: any) => any): void;
|
26
|
+
}
|
27
|
+
|
28
|
+
export { Cli, type CliOptions, DEFAULT_CLI_OPTIONS };
|
package/dist/Cli.js
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var utilsCore = require('@tikkhun/utils-core');
|
4
|
+
var commander = require('commander');
|
5
|
+
var f = require('lodash');
|
6
|
+
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
8
|
+
|
9
|
+
var f__default = /*#__PURE__*/_interopDefault(f);
|
10
|
+
|
11
|
+
/**
|
12
|
+
@tikkhun/cli-core
|
13
|
+
*/
|
14
|
+
var e={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string"},d=["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?!!d.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 {get:l}=f__default.default,h={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}},c=class{constructor(t){this.options=Object.assign(h,t),this.program=commander.createCommand(),this.init();}addOptionToCommand(){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}>`,l(this.options.optionTitles,n),i);});}init(){this.program.version(this.options.version),this.program.description(this.options.description),this.addOptionToCommand();}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.Cli = c;
|
17
|
+
exports.DEFAULT_CLI_OPTIONS = h;
|
18
|
+
//# sourceMappingURL=Cli.js.map
|
19
|
+
//# sourceMappingURL=Cli.js.map
|
package/dist/Cli.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../lib/OptionHandler.ts","../lib/Cli.ts"],"names":["TYPES","asTrueValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","get","_","DEFAULT_CLI_OPTIONS","Cli","options","createCommand","stringOptions","optionList","jsonToList","optionTypeMap","flatJson","action","jsonOptions","unflatJson","typedOptions"],"mappings":";;;;;;;;;;;;;AAEO,IAAMA,CAAAA,CAAQ,CACnB,KAAA,CAAO,QACP,aAAe,CAAA,eAAA,CACf,OAAS,CAAA,SAAA,CACT,MAAQ,CAAA,QAAA,CACR,OAAQ,QACR,CAAA,MAAA,CAAQ,QACV,CAAA,CACaC,CAAe,CAAA,CAAC,OAAQ,CAAM,CAAA,CAAA,GAAA,CAAK,CAAC,CAAA,CAE1C,IAAMC,CAAAA,CAAN,MAAMC,CAAc,CAEzB,WAAYC,CAAAA,CAAAA,CAA6B,CACvC,IAAA,CAAK,OAASA,EAChB,CACA,OAAO,YAAA,CAAaC,CAAeC,CAAAA,CAAAA,CAAc,CAC/C,OAAIA,CAAAA,GAASN,CAAM,CAAA,KAAA,CACVK,CAAM,CAAA,KAAA,CAAM,GAAG,CAEpBC,CAAAA,CAAAA,GAASN,CAAM,CAAA,MAAA,CACV,IAAK,CAAA,KAAA,CAAMK,CAAK,CAErBC,CAAAA,CAAAA,GAASN,CAAM,CAAA,aAAA,CACZK,CACEA,CAAAA,CAAAA,CACJ,MAAM,GAAG,CAAA,CACT,GAAKE,CAAAA,CAAAA,EAAY,CAChB,GAAI,CAACA,CAAS,CAAA,OACd,GAAM,CAACC,CAAKH,CAAAA,CAAK,EAAIE,CAAQ,CAAA,KAAA,CAAM,GAAG,CAAA,CACtC,OAAO,CAAE,IAAAC,CAAK,CAAA,KAAA,CAAAH,CAAM,CACtB,CAAC,CAAA,CACA,OAAQI,CAAMA,EAAAA,CAAC,CARC,CAAA,EAUjBH,CAAAA,CAAAA,GAASN,EAAM,MACV,CAAA,MAAA,CAAOK,CAAK,CAAA,CAEjBC,CAASN,GAAAA,CAAAA,CAAM,QACb,CAAAC,CAAAA,CAAAA,CAAa,QAASI,CAAAA,CAAK,CAG1BA,CAAAA,CACT,CACA,OAAO,MAAA,CAAOK,CAAsDN,CAAAA,CAAAA,CAA6B,CAC/F,IAAMO,EAA4B,EAAC,CACnC,OAAO,MAAA,CAAA,OAAA,CAAQD,CAAG,CAAA,CAAE,QAAQ,CAAC,CAACF,CAAKH,CAAAA,CAAK,CAAM,GAAA,CAC5C,IAAMC,CAAOF,CAAAA,CAAAA,CAAOI,CAAG,CAAA,CACnB,OAAOH,CAAAA,EAAU,SACnBM,CAAKH,CAAAA,CAAG,CAAIL,CAAAA,CAAAA,CAAc,MAAOE,CAAAA,CAAAA,CAAOC,CAAI,CAE5CK,CAAAA,CAAAA,CAAKH,CAAG,CAAA,CAAIL,CAAc,CAAA,YAAA,CAAaE,EAAiBC,CAAI,EAEhE,CAAC,CAAA,CACMK,CACT,CACA,OAAOD,CAA0B,CAAA,CAC/B,OAAOP,CAAAA,CAAc,MAAOO,CAAAA,CAAAA,CAAK,KAAK,MAAM,CAC9C,CACA,OAAO,QAASA,CAAAA,CAAAA,CAA0B,CACxC,IAAMC,CAAAA,CAA4B,EAAC,CACnC,OAAO,MAAA,CAAA,OAAA,CAAQD,CAAG,CAAE,CAAA,OAAA,CAAQ,CAAC,CAACF,CAAKH,CAAAA,CAAK,IAAM,CAC5CM,CAAAA,CAAKH,CAAG,CAAA,CAAIL,CAAc,CAAA,aAAA,CAAcE,CAAK,EAC/C,CAAC,CACMM,CAAAA,CACT,CACA,OAAO,cAAcN,CAAY,CAAA,CAC/B,GAAI,KAAA,CAAM,OAAQA,CAAAA,CAAK,EAAG,CACxB,IAAMO,EAAQP,CAAM,CAAA,CAAC,EAErB,OAAI,OAAOO,CAAU,EAAA,QAAA,EAAYA,CAAM,CAAA,cAAA,CAAe,KAAK,CAAKA,EAAAA,CAAAA,CAAM,cAAe,CAAA,OAAO,CACnFP,CAAAA,CAAAA,CAAM,IAAKQ,CAAS,EAAA,CAAA,EAAGA,CAAK,CAAA,GAAG,CAAIA,CAAAA,EAAAA,CAAAA,CAAK,KAAK,CAAE,CAAA,CAAA,CAAE,QAAS,EAAA,CAE5DR,CAAM,CAAA,QAAA,EACf,CACA,OAAI,OAAOA,CAAAA,EAAU,QACZF,CAAAA,CAAAA,CAAc,SAASE,CAAK,CAAA,CAE9B,EAAKA,CAAAA,CACd,CAEF,CAAA,KChEM,CAAE,GAAA,CAAAS,CAAI,CAAA,CAAIC,kBASHC,CAAAA,CAAAA,CAAsB,CACjC,OAAS,CAAA,EAAA,CACT,WAAa,CAAA,EAAA,CACb,cAAgB,CAAA,GAChB,cAAgB,CAAA,EAChB,CAAA,WAAA,CAAa,EAAC,CACd,aAAc,EAChB,CAEaC,CAAAA,CAAAA,CAAN,KAAU,CAGf,YAAYC,CAA+B,CAAA,CACzC,IAAK,CAAA,OAAA,CAAU,MAAO,CAAA,MAAA,CAAOF,EAAqBE,CAAO,CAAA,CACzD,IAAK,CAAA,OAAA,CAAUC,uBAAc,EAAA,CAC7B,KAAK,IAAK,GACZ,CACQ,kBAAA,EAAqB,CAC3B,IAAMC,EAAgBlB,CAAc,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,CAAQ,cAAc,CAAA,CAClEmB,EAAaC,oBAAW,CAAA,CAAE,SAAW,CAAA,GAAA,CAAK,IAAMF,CAAAA,CAAc,CAAC,CAC/DG,CAAAA,CAAAA,CAAgBC,kBAAS,CAAA,CAAE,SAAW,CAAA,GAAA,CAAK,KAAM,IAAK,CAAA,OAAA,CAAQ,WAAY,CAAC,CACjFH,CAAAA,CAAAA,CAAW,QAAQ,CAAC,CAAE,GAAAb,CAAAA,CAAAA,CAAK,KAAAH,CAAAA,CAAM,IAAM,CACrC,GAAI,IAAK,CAAA,OAAA,CAAQ,cAAe,CAAA,QAAA,CAASG,CAAG,CAC1C,CAAA,OAEF,IAAMF,CAAAA,CAAOiB,CAAcf,CAAAA,CAAG,EAC9B,IAAK,CAAA,OAAA,CAAQ,MAAO,CAAA,CAAA,EAAA,EAAKA,CAAG,CAAA,EAAA,EAAKF,CAAI,CAAKQ,CAAAA,CAAAA,CAAAA,CAAAA,CAAI,IAAK,CAAA,OAAA,CAAQ,YAAcN,CAAAA,CAAG,EAAGH,CAAK,EACtF,CAAC,EACH,CACA,IAAA,EAAO,CACL,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA,IAAA,CAAK,OAAQ,CAAA,OAAO,EACzC,IAAK,CAAA,OAAA,CAAQ,WAAY,CAAA,IAAA,CAAK,OAAQ,CAAA,WAAW,EACjD,IAAK,CAAA,kBAAA,GACP,CACA,KAAMoB,CAAAA,CAAAA,CAA+B,CACnC,IAAK,CAAA,OAAA,CACF,MAAQL,CAAAA,CAAAA,EAAkB,CACzB,IAAMM,EAAcC,oBAAW,CAAA,CAC7B,SAAW,CAAA,GAAA,CACX,IAAMP,CAAAA,CACR,CAAC,CACKQ,CAAAA,CAAAA,CAAe1B,CAAc,CAAA,MAAA,CAAOwB,CAAa,CAAA,IAAA,CAAK,QAAQ,WAAW,CAAA,CAC/ED,CAAOG,CAAAA,CAAY,EACrB,CAAC,EACA,KAAM,CAAA,OAAA,CAAQ,IAAI,EACvB,CACF","file":"Cli.js","sourcesContent":["import { Command } from \"commander\";\n\nexport const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n} as const;\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","/**\n * @author\n * @file Cli.ts\n * @fileBase Cli\n * @path packages\\cli-core\\lib\\Cli.ts\n * @from\n * @desc\n * @todo\n *\n *\n * @done\n * @example\n */\nimport { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { Command, createCommand } from 'commander';\nimport _ from 'lodash';\nimport { OptionHandler } from './OptionHandler';\nconst { get } = _;\nexport interface CliOptions {\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}\nexport const DEFAULT_CLI_OPTIONS = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n};\n\nexport class Cli {\n options: CliOptions;\n program: Command;\n constructor(options?: Partial<CliOptions>) {\n this.options = Object.assign(DEFAULT_CLI_OPTIONS, options);\n this.program = createCommand();\n this.init();\n }\n private addOptionToCommand() {\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 init() {\n this.program.version(this.options.version);\n this.program.description(this.options.description);\n this.addOptionToCommand();\n }\n start(action: (options: any) => any) {\n this.program\n .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 })\n .parse(process.argv);\n }\n}\n"]}
|
package/dist/Cli.mjs
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
import { jsonToList, flatJson, unflatJson } from '@tikkhun/utils-core';
|
2
|
+
import { createCommand } from 'commander';
|
3
|
+
import f from 'lodash';
|
4
|
+
|
5
|
+
/**
|
6
|
+
@tikkhun/cli-core
|
7
|
+
*/
|
8
|
+
var e={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string"},d=["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?!!d.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 {get:l}=f,h={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}},c=class{constructor(t){this.options=Object.assign(h,t),this.program=createCommand(),this.init();}addOptionToCommand(){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}>`,l(this.options.optionTitles,n),i);});}init(){this.program.version(this.options.version),this.program.description(this.options.description),this.addOptionToCommand();}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 { c as Cli, h as DEFAULT_CLI_OPTIONS };
|
11
|
+
//# sourceMappingURL=Cli.mjs.map
|
12
|
+
//# sourceMappingURL=Cli.mjs.map
|
package/dist/Cli.mjs.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../lib/OptionHandler.ts","../lib/Cli.ts"],"names":["TYPES","asTrueValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","get","_","DEFAULT_CLI_OPTIONS","Cli","options","createCommand","stringOptions","optionList","jsonToList","optionTypeMap","flatJson","action","jsonOptions","unflatJson","typedOptions"],"mappings":"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","file":"Cli.mjs","sourcesContent":["import { Command } from \"commander\";\n\nexport const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n} as const;\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","/**\n * @author\n * @file Cli.ts\n * @fileBase Cli\n * @path packages\\cli-core\\lib\\Cli.ts\n * @from\n * @desc\n * @todo\n *\n *\n * @done\n * @example\n */\nimport { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { Command, createCommand } from 'commander';\nimport _ from 'lodash';\nimport { OptionHandler } from './OptionHandler';\nconst { get } = _;\nexport interface CliOptions {\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}\nexport const DEFAULT_CLI_OPTIONS = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n};\n\nexport class Cli {\n options: CliOptions;\n program: Command;\n constructor(options?: Partial<CliOptions>) {\n this.options = Object.assign(DEFAULT_CLI_OPTIONS, options);\n this.program = createCommand();\n this.init();\n }\n private addOptionToCommand() {\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 init() {\n this.program.version(this.options.version);\n this.program.description(this.options.description);\n this.addOptionToCommand();\n }\n start(action: (options: any) => any) {\n this.program\n .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 })\n .parse(process.argv);\n }\n}\n"]}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
declare const TYPES: {
|
2
|
+
readonly array: "array";
|
3
|
+
readonly keyValueArray: "keyValueArray";
|
4
|
+
readonly boolean: "boolean";
|
5
|
+
readonly number: "number";
|
6
|
+
readonly object: "object";
|
7
|
+
readonly string: "string";
|
8
|
+
};
|
9
|
+
declare const asTrueValues: (string | number | boolean)[];
|
10
|
+
declare const asFalseValues: (string | number | boolean)[];
|
11
|
+
declare class OptionHandler {
|
12
|
+
schema: Record<string, any>;
|
13
|
+
constructor(schema: Record<string, any>);
|
14
|
+
static getTypeValue(value: string, type: string): any;
|
15
|
+
static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>): Record<string, any>;
|
16
|
+
toType(obj: Record<string, any>): Record<string, any>;
|
17
|
+
static toString(obj: Record<string, any>): Record<string, any>;
|
18
|
+
static toStringValue(value: any): string | Record<string, any>;
|
19
|
+
}
|
20
|
+
|
21
|
+
export { OptionHandler, TYPES, asFalseValues, asTrueValues };
|
@@ -0,0 +1,21 @@
|
|
1
|
+
declare const TYPES: {
|
2
|
+
readonly array: "array";
|
3
|
+
readonly keyValueArray: "keyValueArray";
|
4
|
+
readonly boolean: "boolean";
|
5
|
+
readonly number: "number";
|
6
|
+
readonly object: "object";
|
7
|
+
readonly string: "string";
|
8
|
+
};
|
9
|
+
declare const asTrueValues: (string | number | boolean)[];
|
10
|
+
declare const asFalseValues: (string | number | boolean)[];
|
11
|
+
declare class OptionHandler {
|
12
|
+
schema: Record<string, any>;
|
13
|
+
constructor(schema: Record<string, any>);
|
14
|
+
static getTypeValue(value: string, type: string): any;
|
15
|
+
static toType(obj: Record<string, string | Record<string, string>>, schema: Record<string, any>): Record<string, any>;
|
16
|
+
toType(obj: Record<string, any>): Record<string, any>;
|
17
|
+
static toString(obj: Record<string, any>): Record<string, any>;
|
18
|
+
static toStringValue(value: any): string | Record<string, any>;
|
19
|
+
}
|
20
|
+
|
21
|
+
export { OptionHandler, TYPES, asFalseValues, asTrueValues };
|
@@ -0,0 +1,13 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
/**
|
4
|
+
@tikkhun/cli-core
|
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 o{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,s]=e.split("=");return {key:n,value:s}}).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,s])=>{let a=t[n];typeof s=="object"?e[n]=o.toType(s,a):e[n]=o.getTypeValue(s,a);}),e}toType(r){return o.toType(r,this.schema)}static toString(r){let t={};return Object.entries(r).forEach(([e,n])=>{t[e]=o.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"?o.toString(r):""+r}};
|
7
|
+
|
8
|
+
exports.OptionHandler = c;
|
9
|
+
exports.TYPES = i;
|
10
|
+
exports.asFalseValues = u;
|
11
|
+
exports.asTrueValues = y;
|
12
|
+
//# sourceMappingURL=OptionHandler.js.map
|
13
|
+
//# sourceMappingURL=OptionHandler.js.map
|
@@ -0,0 +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":"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","file":"OptionHandler.js","sourcesContent":["import { Command } from \"commander\";\n\nexport const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n} as const;\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"]}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
/**
|
2
|
+
@tikkhun/cli-core
|
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 o{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,s]=e.split("=");return {key:n,value:s}}).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,s])=>{let a=t[n];typeof s=="object"?e[n]=o.toType(s,a):e[n]=o.getTypeValue(s,a);}),e}toType(r){return o.toType(r,this.schema)}static toString(r){let t={};return Object.entries(r).forEach(([e,n])=>{t[e]=o.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"?o.toString(r):""+r}};
|
5
|
+
|
6
|
+
export { c as OptionHandler, i as TYPES, u as asFalseValues, y as asTrueValues };
|
7
|
+
//# sourceMappingURL=OptionHandler.mjs.map
|
8
|
+
//# sourceMappingURL=OptionHandler.mjs.map
|
@@ -0,0 +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":";;;AAEO,IAAMA,CAAQ,CAAA,CACnB,KAAO,CAAA,OAAA,CACP,aAAe,CAAA,eAAA,CACf,OAAS,CAAA,SAAA,CACT,MAAQ,CAAA,QAAA,CACR,MAAQ,CAAA,QAAA,CACR,MAAQ,CAAA,QACV,CACaC,CAAAA,CAAAA,CAAe,CAAC,MAAA,CAAQ,CAAM,CAAA,CAAA,GAAA,CAAK,CAAC,CAAA,CACpCC,CAAgB,CAAA,CAAC,OAAS,CAAA,CAAA,CAAA,CAAO,EAAI,CAAA,CAAC,CACtCC,CAAAA,CAAAA,CAAN,MAAMC,CAAc,CAEzB,WAAA,CAAYC,CAA6B,CAAA,CACvC,IAAK,CAAA,MAAA,CAASA,EAChB,CACA,OAAO,YAAA,CAAaC,CAAeC,CAAAA,CAAAA,CAAc,CAC/C,OAAIA,CAASP,GAAAA,CAAAA,CAAM,KACVM,CAAAA,CAAAA,CAAM,KAAM,CAAA,GAAG,CAEpBC,CAAAA,CAAAA,GAASP,CAAM,CAAA,MAAA,CACV,IAAK,CAAA,KAAA,CAAMM,CAAK,CAAA,CAErBC,IAASP,CAAM,CAAA,aAAA,CACZM,CACEA,CAAAA,CAAAA,CACJ,KAAM,CAAA,GAAG,CACT,CAAA,GAAA,CAAKE,CAAY,EAAA,CAChB,GAAI,CAACA,CAAS,CAAA,OACd,GAAM,CAACC,CAAKH,CAAAA,CAAK,CAAIE,CAAAA,CAAAA,CAAQ,KAAM,CAAA,GAAG,CACtC,CAAA,OAAO,CAAE,GAAA,CAAAC,CAAK,CAAA,KAAA,CAAAH,CAAM,CACtB,CAAC,CAAA,CACA,OAAQI,CAAMA,EAAAA,CAAC,CARC,CAAA,EAUjBH,CAAAA,CAAAA,GAASP,CAAM,CAAA,MAAA,CACV,MAAOM,CAAAA,CAAK,CAEjBC,CAAAA,CAAAA,GAASP,CAAM,CAAA,OAAA,CACb,CAAAC,CAAAA,CAAAA,CAAa,QAASK,CAAAA,CAAK,CAG1BA,CAAAA,CACT,CACA,OAAO,MAAOK,CAAAA,CAAAA,CAAsDN,CAA6B,CAAA,CAC/F,IAAMO,CAAAA,CAA4B,EAAC,CACnC,OAAO,MAAA,CAAA,OAAA,CAAQD,CAAG,CAAE,CAAA,OAAA,CAAQ,CAAC,CAACF,CAAKH,CAAAA,CAAK,CAAM,GAAA,CAC5C,IAAMC,CAAAA,CAAOF,CAAOI,CAAAA,CAAG,CACnB,CAAA,OAAOH,CAAU,EAAA,QAAA,CACnBM,CAAKH,CAAAA,CAAG,CAAIL,CAAAA,CAAAA,CAAc,MAAOE,CAAAA,CAAAA,CAAOC,CAAI,CAAA,CAE5CK,CAAKH,CAAAA,CAAG,CAAIL,CAAAA,CAAAA,CAAc,YAAaE,CAAAA,CAAAA,CAAiBC,CAAI,EAEhE,CAAC,CAAA,CACMK,CACT,CACA,MAAOD,CAAAA,CAAAA,CAA0B,CAC/B,OAAOP,CAAc,CAAA,MAAA,CAAOO,CAAK,CAAA,IAAA,CAAK,MAAM,CAC9C,CACA,OAAO,QAASA,CAAAA,CAAAA,CAA0B,CACxC,IAAMC,CAA4B,CAAA,EAClC,CAAA,OAAA,MAAA,CAAO,OAAQD,CAAAA,CAAG,CAAE,CAAA,OAAA,CAAQ,CAAC,CAACF,CAAKH,CAAAA,CAAK,IAAM,CAC5CM,CAAAA,CAAKH,CAAG,CAAA,CAAIL,CAAc,CAAA,aAAA,CAAcE,CAAK,EAC/C,CAAC,CAAA,CACMM,CACT,CACA,OAAO,aAAA,CAAcN,CAAY,CAAA,CAC/B,GAAI,KAAA,CAAM,OAAQA,CAAAA,CAAK,CAAG,CAAA,CACxB,IAAMO,CAAAA,CAAQP,CAAM,CAAA,CAAC,CAErB,CAAA,OAAI,OAAOO,CAAAA,EAAU,QAAYA,EAAAA,CAAAA,CAAM,eAAe,KAAK,CAAA,EAAKA,CAAM,CAAA,cAAA,CAAe,OAAO,CAAA,CACnFP,CAAM,CAAA,GAAA,CAAKQ,CAAS,EAAA,CAAA,EAAGA,CAAK,CAAA,GAAG,CAAIA,CAAAA,EAAAA,CAAAA,CAAK,KAAK,CAAA,CAAE,CAAE,CAAA,QAAA,EAEnDR,CAAAA,CAAAA,CAAM,QAAS,EACxB,CACA,OAAI,OAAOA,CAAAA,EAAU,QACZF,CAAAA,CAAAA,CAAc,QAASE,CAAAA,CAAK,CAE9B,CAAA,EAAA,CAAKA,CACd,CAEF","file":"OptionHandler.mjs","sourcesContent":["import { Command } from \"commander\";\n\nexport const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n} as const;\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"]}
|
package/dist/index.d.mts
ADDED
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
var utilsCore = require('@tikkhun/utils-core');
|
4
|
+
var commander = require('commander');
|
5
|
+
var u = require('lodash');
|
6
|
+
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
8
|
+
|
9
|
+
var u__default = /*#__PURE__*/_interopDefault(u);
|
10
|
+
|
11
|
+
/**
|
12
|
+
@tikkhun/cli-core
|
13
|
+
*/
|
14
|
+
var e={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string"},d=["true",!0,"1",1],O=["false",!1,"",0],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?!!d.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 {get:l}=u__default.default,h={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}},c=class{constructor(t){this.options=Object.assign(h,t),this.program=commander.createCommand(),this.init();}addOptionToCommand(){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}>`,l(this.options.optionTitles,n),i);});}init(){this.program.version(this.options.version),this.program.description(this.options.description),this.addOptionToCommand();}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.Cli = c;
|
17
|
+
exports.DEFAULT_CLI_OPTIONS = h;
|
18
|
+
exports.OptionHandler = a;
|
19
|
+
exports.TYPES = e;
|
20
|
+
exports.asFalseValues = O;
|
21
|
+
exports.asTrueValues = d;
|
22
|
+
//# sourceMappingURL=index.js.map
|
23
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../lib/OptionHandler.ts","../lib/Cli.ts"],"names":["TYPES","asTrueValues","asFalseValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","get","_","DEFAULT_CLI_OPTIONS","Cli","options","createCommand","stringOptions","optionList","jsonToList","optionTypeMap","flatJson","action","jsonOptions","unflatJson","typedOptions"],"mappings":"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","file":"index.js","sourcesContent":["import { Command } from \"commander\";\n\nexport const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n} as const;\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","/**\n * @author\n * @file Cli.ts\n * @fileBase Cli\n * @path packages\\cli-core\\lib\\Cli.ts\n * @from\n * @desc\n * @todo\n *\n *\n * @done\n * @example\n */\nimport { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { Command, createCommand } from 'commander';\nimport _ from 'lodash';\nimport { OptionHandler } from './OptionHandler';\nconst { get } = _;\nexport interface CliOptions {\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}\nexport const DEFAULT_CLI_OPTIONS = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n};\n\nexport class Cli {\n options: CliOptions;\n program: Command;\n constructor(options?: Partial<CliOptions>) {\n this.options = Object.assign(DEFAULT_CLI_OPTIONS, options);\n this.program = createCommand();\n this.init();\n }\n private addOptionToCommand() {\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 init() {\n this.program.version(this.options.version);\n this.program.description(this.options.description);\n this.addOptionToCommand();\n }\n start(action: (options: any) => any) {\n this.program\n .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 })\n .parse(process.argv);\n }\n}\n"]}
|
package/dist/index.mjs
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
import { jsonToList, flatJson, unflatJson } from '@tikkhun/utils-core';
|
2
|
+
import { createCommand } from 'commander';
|
3
|
+
import u from 'lodash';
|
4
|
+
|
5
|
+
/**
|
6
|
+
@tikkhun/cli-core
|
7
|
+
*/
|
8
|
+
var e={array:"array",keyValueArray:"keyValueArray",boolean:"boolean",number:"number",object:"object",string:"string"},d=["true",!0,"1",1],O=["false",!1,"",0],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?!!d.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 {get:l}=u,h={version:"",description:"",defaultOptions:{},excludeOptions:[],optionTypes:{},optionTitles:{}},c=class{constructor(t){this.options=Object.assign(h,t),this.program=createCommand(),this.init();}addOptionToCommand(){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}>`,l(this.options.optionTitles,n),i);});}init(){this.program.version(this.options.version),this.program.description(this.options.description),this.addOptionToCommand();}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 { c as Cli, h as DEFAULT_CLI_OPTIONS, a as OptionHandler, e as TYPES, O as asFalseValues, d as asTrueValues };
|
11
|
+
//# sourceMappingURL=index.mjs.map
|
12
|
+
//# sourceMappingURL=index.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../lib/OptionHandler.ts","../lib/Cli.ts"],"names":["TYPES","asTrueValues","asFalseValues","OptionHandler","_OptionHandler","schema","value","type","strItem","key","i","obj","_obj","item1","item","get","_","DEFAULT_CLI_OPTIONS","Cli","options","createCommand","stringOptions","optionList","jsonToList","optionTypeMap","flatJson","action","jsonOptions","unflatJson","typedOptions"],"mappings":"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","file":"index.mjs","sourcesContent":["import { Command } from \"commander\";\n\nexport const TYPES = {\n array: 'array',\n keyValueArray: 'keyValueArray',\n boolean: 'boolean',\n number: 'number',\n object: 'object',\n string: 'string',\n} as const;\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","/**\n * @author\n * @file Cli.ts\n * @fileBase Cli\n * @path packages\\cli-core\\lib\\Cli.ts\n * @from\n * @desc\n * @todo\n *\n *\n * @done\n * @example\n */\nimport { flatJson, jsonToList, unflatJson } from '@tikkhun/utils-core';\nimport { Command, createCommand } from 'commander';\nimport _ from 'lodash';\nimport { OptionHandler } from './OptionHandler';\nconst { get } = _;\nexport interface CliOptions {\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}\nexport const DEFAULT_CLI_OPTIONS = {\n version: '',\n description: '',\n defaultOptions: {},\n excludeOptions: [],\n optionTypes: {},\n optionTitles: {},\n};\n\nexport class Cli {\n options: CliOptions;\n program: Command;\n constructor(options?: Partial<CliOptions>) {\n this.options = Object.assign(DEFAULT_CLI_OPTIONS, options);\n this.program = createCommand();\n this.init();\n }\n private addOptionToCommand() {\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 init() {\n this.program.version(this.options.version);\n this.program.description(this.options.description);\n this.addOptionToCommand();\n }\n start(action: (options: any) => any) {\n this.program\n .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 })\n .parse(process.argv);\n }\n}\n"]}
|
package/package.json
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
{
|
2
|
+
"name": "@tikkhun/cli-core",
|
3
|
+
"version": "0.0.4",
|
4
|
+
"description": "",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"module": "dist/index.mjs",
|
7
|
+
"types": "dist/index.d.ts",
|
8
|
+
"exports": {
|
9
|
+
".": {
|
10
|
+
"import": {
|
11
|
+
"types": "./dist/index.d.mts",
|
12
|
+
"default": "./dist/index.mjs"
|
13
|
+
},
|
14
|
+
"require": {
|
15
|
+
"default": "./dist/index.js",
|
16
|
+
"types": "./dist/index.d.ts"
|
17
|
+
}
|
18
|
+
}
|
19
|
+
},
|
20
|
+
"files": [
|
21
|
+
"dist"
|
22
|
+
],
|
23
|
+
"publishConfig": {
|
24
|
+
"access": "public"
|
25
|
+
},
|
26
|
+
"keywords": [],
|
27
|
+
"author": "",
|
28
|
+
"license": "ISC",
|
29
|
+
"dependencies": {
|
30
|
+
"@tikkhun/utils-core": "^0.0.4",
|
31
|
+
"commander": "^12.1.0",
|
32
|
+
"lodash": "^4.17.21"
|
33
|
+
},
|
34
|
+
"devDependencies": {
|
35
|
+
"@types/lodash": "^4.17.7",
|
36
|
+
"@types/node": "^20.3.1",
|
37
|
+
"ts-node": "^10.9.2",
|
38
|
+
"tsup": "^8.2.4",
|
39
|
+
"vitest": "^2.0.5"
|
40
|
+
},
|
41
|
+
"scripts": {
|
42
|
+
"build": "tsup",
|
43
|
+
"dev": "ts-node ./src/index.ts",
|
44
|
+
"test": "vitest"
|
45
|
+
}
|
46
|
+
}
|