@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 ADDED
@@ -0,0 +1,8 @@
1
+ # cli-utils
2
+
3
+ ## 使用
4
+
5
+ ```javascript
6
+
7
+
8
+ ```
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
@@ -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.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
@@ -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":"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","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"]}
@@ -0,0 +1,3 @@
1
+ export { OptionHandler, TYPES, asFalseValues, asTrueValues } from './OptionHandler.mjs';
2
+ export { Cli, CliOptions, DEFAULT_CLI_OPTIONS } from './Cli.mjs';
3
+ import 'commander';
@@ -0,0 +1,3 @@
1
+ export { OptionHandler, TYPES, asFalseValues, asTrueValues } from './OptionHandler.js';
2
+ export { Cli, CliOptions, DEFAULT_CLI_OPTIONS } from './Cli.js';
3
+ import 'commander';
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
+ }