@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.
Files changed (56) hide show
  1. package/README.md +47 -2
  2. package/dist/CommandManager.d.mts +28 -0
  3. package/dist/CommandManager.d.ts +28 -0
  4. package/dist/CommandManager.js +22 -0
  5. package/dist/CommandManager.js.map +1 -0
  6. package/dist/CommandManager.mjs +14 -0
  7. package/dist/CommandManager.mjs.map +1 -0
  8. package/dist/OptionHandler.d.mts +2 -0
  9. package/dist/OptionHandler.d.ts +2 -0
  10. package/dist/OptionHandler.js +1 -1
  11. package/dist/OptionHandler.js.map +1 -1
  12. package/dist/OptionHandler.mjs +1 -1
  13. package/dist/OptionHandler.mjs.map +1 -1
  14. package/dist/command/ArgsCommand.d.mts +11 -0
  15. package/dist/command/ArgsCommand.d.ts +11 -0
  16. package/dist/command/ArgsCommand.js +18 -0
  17. package/dist/command/ArgsCommand.js.map +1 -0
  18. package/dist/command/ArgsCommand.mjs +12 -0
  19. package/dist/command/ArgsCommand.mjs.map +1 -0
  20. package/dist/command/PromptsCommand.d.mts +10 -0
  21. package/dist/command/PromptsCommand.d.ts +10 -0
  22. package/dist/command/PromptsCommand.js +18 -0
  23. package/dist/command/PromptsCommand.js.map +1 -0
  24. package/dist/command/PromptsCommand.mjs +12 -0
  25. package/dist/command/PromptsCommand.mjs.map +1 -0
  26. package/dist/command/command.interface.d.mts +20 -0
  27. package/dist/command/command.interface.d.ts +20 -0
  28. package/dist/command/command.interface.js +16 -0
  29. package/dist/command/command.interface.js.map +1 -0
  30. package/dist/command/command.interface.mjs +10 -0
  31. package/dist/command/command.interface.mjs.map +1 -0
  32. package/dist/command/index.d.mts +4 -0
  33. package/dist/command/index.d.ts +4 -0
  34. package/dist/command/index.js +21 -0
  35. package/dist/command/index.js.map +1 -0
  36. package/dist/command/index.mjs +13 -0
  37. package/dist/command/index.mjs.map +1 -0
  38. package/dist/index.d.mts +6 -1
  39. package/dist/index.d.ts +6 -1
  40. package/dist/index.js +16 -9
  41. package/dist/index.js.map +1 -1
  42. package/dist/index.mjs +5 -3
  43. package/dist/index.mjs.map +1 -1
  44. package/dist/package.d.mts +3 -0
  45. package/dist/package.d.ts +3 -0
  46. package/dist/package.js +12 -0
  47. package/dist/package.js.map +1 -0
  48. package/dist/package.mjs +10 -0
  49. package/dist/package.mjs.map +1 -0
  50. package/package.json +5 -3
  51. package/dist/Cli.d.mts +0 -28
  52. package/dist/Cli.d.ts +0 -28
  53. package/dist/Cli.js +0 -19
  54. package/dist/Cli.js.map +0 -1
  55. package/dist/Cli.mjs +0 -12
  56. package/dist/Cli.mjs.map +0 -1
package/dist/Cli.js.map DELETED
@@ -1 +0,0 @@
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 DELETED
@@ -1,12 +0,0 @@
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 DELETED
@@ -1 +0,0 @@
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"]}