@armit/cli
Advanced tools
+22
-0
| # @armit/cli | ||
| ## 0.0.11 | ||
| ### Patch Changes | ||
| - [`b16c135`](https://github.com/armitjs/armit/commit/b16c1355feb29e64d22d84066f39a93f35c8ca65) Thanks [@tianyingchun](https://github.com/tianyingchun)! - upgrade package deps | ||
| - [`9f4bc0b`](https://github.com/armitjs/armit/commit/9f4bc0bacc509309fd045a7f2bbe3fe61466560e) Thanks [@tianyingchun](https://github.com/tianyingchun)! - add cli `new` command | ||
| - [`8bcb4eb`](https://github.com/armitjs/armit/commit/8bcb4eb3f1f36c8c7ab8e0483eaf4b6610646964) Thanks [@tianyingchun](https://github.com/tianyingchun)! - add draft cli new command | ||
| - [`2c1f06b`](https://github.com/armitjs/armit/commit/2c1f06bc8de10ee63744f88138e7fed8e8d596b1) Thanks [@tianyingchun](https://github.com/tianyingchun)! - upgrade deps | ||
| - [`1153545`](https://github.com/armitjs/armit/commit/11535454cbce9c7cf4e07eec814f3436e3e73385) Thanks [@tianyingchun](https://github.com/tianyingchun)! - upgrade package deps | ||
| - [`e6f4dac`](https://github.com/armitjs/armit/commit/e6f4dac2c390f212f4264c1be188525707c23c7c) Thanks [@tianyingchun](https://github.com/tianyingchun)! - add cli argv parser | ||
| - [`0bc7053`](https://github.com/armitjs/armit/commit/0bc7053465fac9339dddbd2fe97b2f00d3da448f) Thanks [@tianyingchun](https://github.com/tianyingchun)! - fix incorrect bootstrap typings | ||
| - Updated dependencies [[`c078e90`](https://github.com/armitjs/armit/commit/c078e9027d3555cbcfa4bf1018eab7a7ffc964b8), [`a43779d`](https://github.com/armitjs/armit/commit/a43779ddd871471d40d7a1677ff884df50956ab9), [`2d7934c`](https://github.com/armitjs/armit/commit/2d7934c0bb70a4acc27f7ee346c259bb73e79e7a), [`b16c135`](https://github.com/armitjs/armit/commit/b16c1355feb29e64d22d84066f39a93f35c8ca65), [`6fc18f1`](https://github.com/armitjs/armit/commit/6fc18f1908ee307c9a3c390db7a1177eeba9a16b), [`2c1f06b`](https://github.com/armitjs/armit/commit/2c1f06bc8de10ee63744f88138e7fed8e8d596b1), [`8b3f604`](https://github.com/armitjs/armit/commit/8b3f60445ab203509cdb9ae3acb7b3305a414263), [`1153545`](https://github.com/armitjs/armit/commit/11535454cbce9c7cf4e07eec814f3436e3e73385), [`519c72e`](https://github.com/armitjs/armit/commit/519c72e5c41460a38340622c5b6d9edb05d71c72), [`e6f4dac`](https://github.com/armitjs/armit/commit/e6f4dac2c390f212f4264c1be188525707c23c7c), [`d573988`](https://github.com/armitjs/armit/commit/d57398849529b1a5d114e64f03d9dc82e6100da8), [`2840c33`](https://github.com/armitjs/armit/commit/2840c331b1fc484aee3a86b8adb490fb240e8884), [`93f90d0`](https://github.com/armitjs/armit/commit/93f90d0fdb71a4c7e6567e1317ab940d6cd49299), [`fa97ab9`](https://github.com/armitjs/armit/commit/fa97ab9d8dbfd4f42ed8feb9b3edbd636b3ba2a9), [`09e0bcb`](https://github.com/armitjs/armit/commit/09e0bcb6342c447301d0a4a359f9a8ada3f2def4)]: | ||
| - @armit/common@0.0.11 | ||
| - @armit/generate-template-files@0.0.11 | ||
| ## 0.0.10 | ||
@@ -4,0 +26,0 @@ |
+3
-1
@@ -1,3 +0,5 @@ | ||
| declare const bootstrap: (options?: any) => Promise<any>; | ||
| import { CliOption, CliMain } from '@armit/common'; | ||
| declare function bootstrap(options?: Partial<CliOption>): Promise<CliMain>; | ||
| export { bootstrap }; |
+7
-5
@@ -1,10 +0,12 @@ | ||
| import { join, relative } from 'path'; | ||
| import { join as join$1 } from 'node:path'; | ||
| import { createCommand, AbstractHandler, showBanner, fileWalk, getPackageData, zipFiles, getDirname, updateNotifier, findParentDir, loadPlugins, createCli, arrayFlatten, arrayUnique } from '@armit/common'; | ||
| import { platform, release } from 'os'; | ||
| import k from 'os-name'; | ||
| import u from 'os-name'; | ||
| import { join, relative } from 'path'; | ||
| var s=class extends AbstractHandler{async handle(){await showBanner("armit",{align:"left",gradient:"red,blue",letterSpacing:3}),console.log(this.logger.chalk(["magenta","bold"]," CLI tool for armitjs applications")),this.displaySystemInformation();}displaySystemInformation(){console.info(""),console.info(this.logger.chalk(["green"]," \u2714 System Information")),console.info(" OS Version :",this.logger.chalk(["magenta"],` ${k(platform(),release())}`)),console.info(" NodeJS Version :",this.logger.chalk(["magenta"],` ${process.version}`)),this.displayCliVersion(),this.displayArmitInformation();}displayArmitInformation(){console.info(this.logger.chalk(["green"]," \u2714 @armit Platform Information"));try{this.displayArmitVersions();}catch{console.error(this.logger.chalk(["red"]," \u{1F63C} cannot read your project package.json file, are you inside your project directory?"));}}displayArmitVersions(){if(this.cliPackageJson){let t=Object.assign({},this.cliPackageJson.dependencies,this.cliPackageJson.devDependencies,this.cliPackageJson.peerDependencies),e=this.collectNestDependencies(t);this.dependencyformat(e).forEach(r=>console.info(" "+r.name,this.logger.chalk(["magenta"],`${r.version}`))),console.info(" ");}}collectNestDependencies(t){let e=[];return Object.keys(t).forEach(r=>{r.includes("@armit")&&e.push({name:`${r.replace(/@armit\//,"")} \u279E version`,version:t[r]});}),e}displayCliVersion(){this.cliPackageJson&&(console.info(""),console.info(this.logger.chalk(["green"]," \u2714 @armit CLI")),console.info(" @armit CLI Version :",this.logger.chalk(["magenta"],`${this.cliPackageJson.version||""}`),` | ||
| `));}dependencyformat(t){var o,n;let e=t.sort((i,f)=>f.name.length-i.name.length),r=(n=(o=e[0])==null?void 0:o.name)==null?void 0:n.length;return e.forEach(i=>{i.name.length<r&&(i.name=this.rightPad(i.name,r)),i.name=i.name.concat(" :"),i.version=i.version.replace(/\^|~/,"");}),e}rightPad(t,e){for(;t.length<e;)t=t.concat(" ");return t}};var m=createCommand("info",{command:"info",describe:"Display armit project details."},s);var p=a=>{let t=arrayFlatten(a.map(e=>e.split(/\s*;\s*/).filter(Boolean).map(r=>r.trim()))).filter(Boolean);return arrayUnique(t)};var l=class extends AbstractHandler{async handle(){return this.prepareZip()}async prepareZip(){let t=join(this.args.cwd,this.args.basePath),e=p(this.args.filter),r=await fileWalk(e,{cwd:t,ignore:this.args.ignore});r.length?(console.info(this.logger.chalk(["green"],"\u2714 All ziped files")),r.forEach(o=>{console.info(`${this.logger.chalk(["cyan"]," \u27A9 ")}${this.logger.chalk(["magenta"],relative(t,o))}`);}),console.info(" "),await this.toZip(r,t)):this.logger.warn("No matched files found");}async toZip(t,e){let r=join(this.args.cwd,this.args.to),o=getPackageData({cwd:this.args.cwd}),n=join(r,`${((o==null?void 0:o.name)||"unknow").replace(/\//g,"-")}-${Date.now()}.zip`);await zipFiles(t,n,{relativePathTo:e});}};var g=createCommand("pack",{command:"pack",describe:"Extract filtered files compress to zip file.",builder(a){return a.example('$0 pack -f="a;b;c" -f="a"',"Using `globby` to filter files to zip").option("filter",{alias:"f",type:"array",default:["**"],describe:"Filter matched files that will be packed"}).option("ignore",{alias:"i",type:"array",default:["**/*.{png,jpg,jpeg,gif,svg}"],describe:"Ignore pattern will removed matched files from `filter`"}).option("basePath",{alias:"b",type:"string",default:"public",describe:"The path that will be ignored relative to `cwd()`"}).option("to",{alias:"t",type:"string",default:"packages",describe:"The directory where zip file saved to, it relative to `cwd()`"}).option("cwd",{alias:"c",type:"string",default:process.cwd(),describe:"The directory to start searching from."})}},l);var te=async a=>{let t=getDirname(import.meta.url),e=getPackageData({cwd:t});e&&await updateNotifier({pkg:{name:(e==null?void 0:e.name)||"",version:(e==null?void 0:e.version)||""},shouldNotifyInNpmScript:!0});let r=findParentDir(t,"@armit")||"",o=await loadPlugins([],["@armit/cli-plugin-*/package.json","armit-cli-plugin-*/package.json"],[process.cwd(),join(r,"../")]),n=createCli({group:"@armit",packageJson:e,...a}).register(m).register(g);for(let{plugin:i}of o)i&&n.register(i);return n}; | ||
| var n=class extends AbstractHandler{async handle(){await showBanner("armit",{align:"left",gradient:"red,blue",letterSpacing:3}),console.log(this.logger.chalk(["magenta","bold"]," CLI tool for armitjs applications")),this.displaySystemInformation();}displaySystemInformation(){console.info(""),console.info(this.logger.chalk(["green"]," \u2714 System Information")),console.info(" OS Version :",this.logger.chalk(["magenta"],` ${u(platform(),release())}`)),console.info(" NodeJS Version :",this.logger.chalk(["magenta"],` ${process.version}`)),this.displayCliVersion(),this.displayArmitInformation();}displayArmitInformation(){console.info(this.logger.chalk(["green"]," \u2714 @armit Platform Information"));try{this.displayArmitVersions();}catch{console.error(this.logger.chalk(["red"]," \u{1F63C} cannot read your project package.json file, are you inside your project directory?"));}}displayArmitVersions(){if(this.cliPackageJson){let e=Object.assign({},this.cliPackageJson.dependencies,this.cliPackageJson.devDependencies,this.cliPackageJson.peerDependencies),r=this.collectNestDependencies(e);this.dependencyformat(r).forEach(o=>console.info(" "+o.name,this.logger.chalk(["magenta"],`${o.version}`))),console.info(" ");}}collectNestDependencies(e){let r=[];return Object.keys(e).forEach(o=>{o.includes("@armit")&&r.push({name:`${o.replace(/@armit\//,"")} \u279E version`,version:e[o]});}),r}displayCliVersion(){this.cliPackageJson&&(console.info(""),console.info(this.logger.chalk(["green"]," \u2714 @armit CLI")),console.info(" @armit CLI Version :",this.logger.chalk(["magenta"],`${this.cliPackageJson.version||""}`),` | ||
| `));}dependencyformat(e){let r=e.sort((t,a)=>a.name.length-t.name.length),o=r[0]?.name?.length;return r.forEach(t=>{t.name.length<o&&(t.name=this.rightPad(t.name,o)),t.name=t.name.concat(" :"),t.version=t.version.replace(/\^|~/,"");}),r}rightPad(e,r){for(;e.length<r;)e=e.concat(" ");return e}};var p=createCommand("info",{command:"info",describe:"Display armit project details."},n);var s=class extends AbstractHandler{async handle(){console.log(this.logger.chalk(["magenta","bold"]," CLI tool for armitjs applications"));}};var g=createCommand("new",{command:"new",describe:"Create armit project."},s);var d=i=>{let e=arrayFlatten(i.map(r=>r.split(/\s*;\s*/).filter(Boolean).map(o=>o.trim()))).filter(Boolean);return arrayUnique(e)};var m=class extends AbstractHandler{async handle(){return this.prepareZip()}async prepareZip(){let e=join(this.args.cwd,this.args.basePath),r=d(this.args.filter),o=await fileWalk(r,{cwd:e,ignore:this.args.ignore});o.length?(console.info(this.logger.chalk(["green"],"\u2714 All ziped files")),o.forEach(t=>{console.info(`${this.logger.chalk(["cyan"]," \u27A9 ")}${this.logger.chalk(["magenta"],relative(e,t))}`);}),console.info(" "),await this.toZip(o,e)):this.logger.warn("No matched files found");}async toZip(e,r){let o=join(this.args.cwd,this.args.to),t=getPackageData({cwd:this.args.cwd}),a=join(o,`${(t?.name||"unknow").replace(/\//g,"-")}-${Date.now()}.zip`);await zipFiles(e,a,{relativePathTo:r});}};var f=createCommand("pack",{command:"pack",describe:"Extract filtered files compress to zip file.",builder(i){return i.example('$0 pack -f="a;b;c" -f="a"',"Using `globby` to filter files to zip").option("filter",{alias:"f",type:"array",default:["**"],describe:"Filter matched files that will be packed"}).option("ignore",{alias:"i",type:"array",default:["**/*.{png,jpg,jpeg,gif,svg}"],describe:"Ignore pattern will removed matched files from `filter`"}).option("basePath",{alias:"b",type:"string",default:"public",describe:"The path that will be ignored relative to `cwd()`"}).option("to",{alias:"t",type:"string",default:"packages",describe:"The directory where zip file saved to, it relative to `cwd()`"}).option("cwd",{alias:"c",type:"string",default:process.cwd(),describe:"The directory to start searching from."})}},m);async function le(i={}){let e=getDirname(import.meta.url),r=getPackageData({cwd:e});r&&await updateNotifier({pkg:{name:r?.name||"",version:r?.version||""},shouldNotifyInNpmScript:!0});let o=findParentDir(e,"@armit")||"",t=await loadPlugins([],["@armit/cli-plugin-*/package.json","armit-cli-plugin-*/package.json"],[process.cwd(),join$1(o,"../")]),a=createCli({group:"@armit",packageJson:r,...i}).register(g).register(p).register(f);for(let{plugin:l}of t)l&&a.register(l);return a} | ||
| export { te as bootstrap }; | ||
| export { le as bootstrap }; | ||
| //# sourceMappingURL=out.js.map | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["../src/bootstrap/bootstrap.ts","../src/info/define.ts","../src/info/handler.ts","../src/pack/define.ts","../src/pack/handler.ts","../src/utils/normalize-option.ts"],"names":["join","getDirname","createCli","findParentDir","loadPlugins","updateNotifier","getPackageData","createCommand","platform","release","showBanner","AbstractHandler","osName","InfoCommandHandler","dependencies","armitDependencies","dependency","key","_a","_b","sorted","dependencyA","dependencyB","length","name","infoCmd","relative","fileWalk","zipFiles","arrayUnique","arrayFlatten","normalizeOptionSemicolonParts","option","semicolonParts","item","s","PackCommand","fileFromCwd","pattern","allFiles","file","fileFromTo","targetPackageJson","zipFileName","packCmd","args","bootstrap","options","curDirName","packageJson","armitDir","externalPlugins","armitCli","plugin"],"mappings":"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","sourcesContent":["import { join } from 'node:path';\nimport type { CliOption } from '@armit/common';\nimport {\n getDirname,\n createCli,\n findParentDir,\n loadPlugins,\n updateNotifier,\n getPackageData,\n} from '@armit/common';\nimport { infoCmd } from '../info/define.js';\nimport { packCmd } from '../pack/define.js';\n\nexport const bootstrap = async (options?: Partial<CliOption>) => {\n // __dirname\n const curDirName = getDirname(import.meta.url);\n\n // Read cli package json data.\n const packageJson = getPackageData({\n cwd: curDirName,\n });\n\n if (packageJson) {\n // Check if newer cli version here.\n await updateNotifier({\n pkg: {\n name: packageJson?.name || '',\n version: packageJson?.version || '',\n },\n shouldNotifyInNpmScript: true,\n });\n }\n\n const armitDir = findParentDir(curDirName, '@armit') || '';\n\n // Load all available cli plugins\n const externalPlugins = await loadPlugins(\n [],\n ['@armit/cli-plugin-*/package.json', 'armit-cli-plugin-*/package.json'],\n [process.cwd(), join(armitDir, '../')]\n );\n\n // Register built-in commands.\n const armitCli = createCli({\n group: '@armit',\n packageJson,\n ...options,\n })\n .register(infoCmd)\n .register(packCmd);\n\n // Register external plugins.\n for (const { plugin } of externalPlugins) {\n if (plugin) {\n armitCli.register(plugin);\n }\n }\n return armitCli;\n};\n","import { createCommand } from '@armit/common';\nimport type { InfoCommandArgs } from './handler.js';\nimport { InfoCommandHandler } from './handler.js';\n\nexport const infoCmd = createCommand<InfoCommandArgs>(\n 'info',\n {\n command: 'info',\n describe: 'Display armit project details.',\n },\n InfoCommandHandler\n);\n","import { platform, release } from 'os';\nimport type { CommandArgv } from '@armit/common';\nimport { showBanner, AbstractHandler } from '@armit/common';\nimport osName from 'os-name';\n\nexport type InfoCommandArgs = CommandArgv;\n\ninterface ProjectDependency {\n name: string;\n version: string;\n latestVersion?: string;\n}\n\nexport class InfoCommandHandler extends AbstractHandler<InfoCommandArgs> {\n async handle() {\n await showBanner(`armit`, {\n align: 'left',\n gradient: 'red,blue',\n letterSpacing: 3,\n });\n console.log(\n this.logger.chalk(\n ['magenta', 'bold'],\n ` CLI tool for armitjs applications`\n )\n );\n this.displaySystemInformation();\n }\n\n private displaySystemInformation() {\n console.info('');\n console.info(this.logger.chalk(['green'], ' ✔ System Information'));\n console.info(\n ' OS Version :',\n this.logger.chalk(['magenta'], ` ${osName(platform(), release())}`)\n );\n console.info(\n ' NodeJS Version :',\n this.logger.chalk(['magenta'], ` ${process.version}`)\n );\n this.displayCliVersion();\n this.displayArmitInformation();\n }\n\n private displayArmitInformation() {\n console.info(\n this.logger.chalk(['green'], ' ✔ @armit Platform Information')\n );\n try {\n this.displayArmitVersions();\n } catch {\n console.error(\n this.logger.chalk(\n ['red'],\n ` 😼 cannot read your project package.json file, are you inside your project directory?`\n )\n );\n }\n }\n\n private displayArmitVersions() {\n if (this.cliPackageJson) {\n const dependencies: Record<string, unknown> = Object.assign(\n {},\n this.cliPackageJson.dependencies,\n this.cliPackageJson.devDependencies,\n this.cliPackageJson.peerDependencies\n );\n const armitDependencies = this.collectNestDependencies(dependencies);\n this.dependencyformat(armitDependencies).forEach((dependency) =>\n console.info(\n ' ' + dependency.name,\n this.logger.chalk(['magenta'], `${dependency.version}`)\n )\n );\n console.info(' ');\n }\n }\n\n private collectNestDependencies(dependencies: Record<string, unknown>) {\n const armitDependencies: Array<ProjectDependency> = [];\n Object.keys(dependencies).forEach((key) => {\n if (key.includes('@armit')) {\n armitDependencies.push({\n name: `${key.replace(/@armit\\//, '')} ➞ version`,\n version: dependencies[key] as string,\n });\n }\n });\n return armitDependencies;\n }\n\n private displayCliVersion() {\n if (this.cliPackageJson) {\n console.info('');\n console.info(this.logger.chalk(['green'], ' ✔ @armit CLI'));\n console.info(\n ' @armit CLI Version :',\n this.logger.chalk(['magenta'], `${this.cliPackageJson.version || ''}`),\n '\\n'\n );\n }\n }\n\n private dependencyformat(dependencies: ProjectDependency[]) {\n const sorted = dependencies.sort(\n (dependencyA, dependencyB) =>\n dependencyB.name.length - dependencyA.name.length\n );\n // Maybe dependencies is an empty array.\n const length = sorted[0]?.name?.length;\n sorted.forEach((dependency) => {\n if (dependency.name.length < length) {\n dependency.name = this.rightPad(dependency.name, length);\n }\n dependency.name = dependency.name.concat(' :');\n dependency.version = dependency.version.replace(/\\^|~/, '');\n });\n return sorted;\n }\n\n private rightPad(name: string, length: number) {\n while (name.length < length) {\n name = name.concat(' ');\n }\n return name;\n }\n}\n","import { createCommand } from '@armit/common';\nimport type { PackCommandArgs } from './handler.js';\nimport { PackCommand } from './handler.js';\n\nexport const packCmd = createCommand<PackCommandArgs>(\n 'pack',\n {\n command: 'pack',\n describe: 'Extract filtered files compress to zip file.',\n builder(args) {\n return args\n .example(\n `$0 pack -f=\"a;b;c\" -f=\"a\"`,\n 'Using `globby` to filter files to zip'\n )\n .option('filter', {\n alias: 'f',\n type: 'array',\n default: ['**'],\n describe: 'Filter matched files that will be packed',\n })\n .option('ignore', {\n alias: 'i',\n type: 'array',\n default: ['**/*.{png,jpg,jpeg,gif,svg}'],\n describe: 'Ignore pattern will removed matched files from `filter`',\n })\n .option('basePath', {\n alias: 'b',\n type: 'string',\n default: 'public',\n describe: 'The path that will be ignored relative to `cwd()`',\n })\n .option('to', {\n alias: 't',\n type: 'string',\n default: 'packages',\n describe:\n 'The directory where zip file saved to, it relative to `cwd()`',\n })\n .option('cwd', {\n alias: 'c',\n type: 'string',\n default: process.cwd(),\n describe: 'The directory to start searching from.',\n });\n },\n },\n PackCommand\n);\n","import { join, relative } from 'path';\nimport type { CommandArgv } from '@armit/common';\nimport {\n getPackageData,\n fileWalk,\n zipFiles,\n AbstractHandler,\n} from '@armit/common';\nimport { normalizeOptionSemicolonParts } from '../utils/index.js';\n\nexport type PackCommandArgs = CommandArgv<{\n /**\n * The filter pattern using globby (fast-glob)\n * multiple pattern separated using semicolon `;`\n * @alias -f\n * @default [`**`]\n */\n filter: string[];\n\n /**\n * Reverse pattern will removed matched files from `filter`\n * @default [`**\\/*.{png,jpg,jpeg,gif,svg}`]\n */\n ignore: string[];\n\n /**\n * The base relative path will be ignore related to process.cwd()\n * @alias -e\n * @default `public`\n */\n basePath: string;\n\n /**\n * The directory where the zip will save to\n * it's relative to process.cwd()\n * @alias -t\n * @default `packages`\n */\n to: string;\n\n /**\n * The directory to start searching from.\n * @default process.cwd()\n */\n cwd: string;\n}>;\n\nexport class PackCommand extends AbstractHandler<PackCommandArgs> {\n async handle() {\n return this.prepareZip();\n }\n\n private async prepareZip() {\n const fileFromCwd = join(this.args.cwd, this.args.basePath);\n const pattern = normalizeOptionSemicolonParts(this.args.filter);\n const allFiles = await fileWalk(pattern, {\n cwd: fileFromCwd,\n ignore: this.args.ignore,\n });\n if (!allFiles.length) {\n this.logger.warn('No matched files found');\n } else {\n console.info(this.logger.chalk(['green'], '✔ All ziped files'));\n allFiles.forEach((file) => {\n console.info(\n `${this.logger.chalk(['cyan'], ' ➩ ')}${this.logger.chalk(\n ['magenta'],\n relative(fileFromCwd, file)\n )}`\n );\n });\n console.info(' ');\n await this.toZip(allFiles, fileFromCwd);\n }\n }\n\n async toZip(allFiles: string[], fileFromCwd: string): Promise<void> {\n const fileFromTo = join(this.args.cwd, this.args.to);\n // Try to read target project package.json.\n const targetPackageJson = getPackageData({\n cwd: this.args.cwd,\n });\n const zipFileName = join(\n fileFromTo,\n `${(targetPackageJson?.name || 'unknow').replace(\n /\\//g,\n '-'\n )}-${Date.now()}.zip`\n );\n await zipFiles(allFiles, zipFileName, {\n relativePathTo: fileFromCwd,\n });\n }\n}\n","import { arrayUnique, arrayFlatten } from '@armit/common';\n\n/**\n * normalize yargs --filter --modules option into standard globby patterns\n * @param option The given yargs -f (--filter) = \"a;b;c\"\n */\nexport const normalizeOptionSemicolonParts = (option: string[]): string[] => {\n const semicolonParts = arrayFlatten<string[]>(\n option.map((item) => {\n return item\n .split(/\\s*;\\s*/)\n .filter(Boolean)\n .map((s) => s.trim());\n })\n ).filter(Boolean);\n\n return arrayUnique(semicolonParts);\n};\n"]} | ||
| {"version":3,"sources":["../src/bootstrap/bootstrap.ts","../src/info/define.ts","../src/info/handler.ts","../src/new/define.ts","../src/new/handler.ts","../src/pack/define.ts","../src/pack/handler.ts","../src/utils/normalize-option.ts"],"names":["join","getDirname","createCli","findParentDir","loadPlugins","updateNotifier","getPackageData","createCommand","platform","release","showBanner","AbstractHandler","osName","InfoCommandHandler","dependencies","armitDependencies","dependency","key","sorted","dependencyA","dependencyB","length","name","infoCmd","NewCommandHandler","newCmd","relative","fileWalk","zipFiles","arrayUnique","arrayFlatten","normalizeOptionSemicolonParts","option","semicolonParts","item","s","PackCommand","fileFromCwd","pattern","allFiles","file","fileFromTo","targetPackageJson","zipFileName","packCmd","args","bootstrap","options","curDirName","packageJson","armitDir","externalPlugins","armitCli","plugin"],"mappings":"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","sourcesContent":["import { join } from 'node:path';\nimport type { CliMain, CliOption } from '@armit/common';\nimport {\n getDirname,\n createCli,\n findParentDir,\n loadPlugins,\n updateNotifier,\n getPackageData,\n} from '@armit/common';\nimport { infoCmd } from '../info/define.js';\nimport { newCmd } from '../new/define.js';\nimport { packCmd } from '../pack/define.js';\n\nexport async function bootstrap(\n options: Partial<CliOption> = {}\n): Promise<CliMain> {\n // __dirname\n const curDirName = getDirname(import.meta.url);\n\n // Read cli package json data.\n const packageJson = getPackageData({\n cwd: curDirName,\n });\n\n if (packageJson) {\n // Check if newer cli version here.\n await updateNotifier({\n pkg: {\n name: packageJson?.name || '',\n version: packageJson?.version || '',\n },\n shouldNotifyInNpmScript: true,\n });\n }\n\n const armitDir = findParentDir(curDirName, '@armit') || '';\n\n // Load all available cli plugins\n const externalPlugins = await loadPlugins(\n [],\n ['@armit/cli-plugin-*/package.json', 'armit-cli-plugin-*/package.json'],\n [process.cwd(), join(armitDir, '../')]\n );\n\n // Register built-in commands.\n const armitCli = createCli({\n group: '@armit',\n packageJson,\n ...options,\n })\n .register(newCmd)\n .register(infoCmd)\n .register(packCmd);\n\n // Register external plugins.\n for (const { plugin } of externalPlugins) {\n if (plugin) {\n armitCli.register(plugin);\n }\n }\n return armitCli;\n}\n","import { createCommand } from '@armit/common';\nimport type { InfoCommandArgs } from './handler.js';\nimport { InfoCommandHandler } from './handler.js';\n\nexport const infoCmd = createCommand<InfoCommandArgs>(\n 'info',\n {\n command: 'info',\n describe: 'Display armit project details.',\n },\n InfoCommandHandler\n);\n","import { platform, release } from 'os';\nimport type { CommandArgv } from '@armit/common';\nimport { showBanner, AbstractHandler } from '@armit/common';\nimport osName from 'os-name';\n\nexport type InfoCommandArgs = CommandArgv;\n\ninterface ProjectDependency {\n name: string;\n version: string;\n latestVersion?: string;\n}\n\nexport class InfoCommandHandler extends AbstractHandler<InfoCommandArgs> {\n async handle() {\n await showBanner(`armit`, {\n align: 'left',\n gradient: 'red,blue',\n letterSpacing: 3,\n });\n console.log(\n this.logger.chalk(\n ['magenta', 'bold'],\n ` CLI tool for armitjs applications`\n )\n );\n this.displaySystemInformation();\n }\n\n private displaySystemInformation() {\n console.info('');\n console.info(this.logger.chalk(['green'], ' ✔ System Information'));\n console.info(\n ' OS Version :',\n this.logger.chalk(['magenta'], ` ${osName(platform(), release())}`)\n );\n console.info(\n ' NodeJS Version :',\n this.logger.chalk(['magenta'], ` ${process.version}`)\n );\n this.displayCliVersion();\n this.displayArmitInformation();\n }\n\n private displayArmitInformation() {\n console.info(\n this.logger.chalk(['green'], ' ✔ @armit Platform Information')\n );\n try {\n this.displayArmitVersions();\n } catch {\n console.error(\n this.logger.chalk(\n ['red'],\n ` 😼 cannot read your project package.json file, are you inside your project directory?`\n )\n );\n }\n }\n\n private displayArmitVersions() {\n if (this.cliPackageJson) {\n const dependencies: Record<string, unknown> = Object.assign(\n {},\n this.cliPackageJson.dependencies,\n this.cliPackageJson.devDependencies,\n this.cliPackageJson.peerDependencies\n );\n const armitDependencies = this.collectNestDependencies(dependencies);\n this.dependencyformat(armitDependencies).forEach((dependency) =>\n console.info(\n ' ' + dependency.name,\n this.logger.chalk(['magenta'], `${dependency.version}`)\n )\n );\n console.info(' ');\n }\n }\n\n private collectNestDependencies(dependencies: Record<string, unknown>) {\n const armitDependencies: Array<ProjectDependency> = [];\n Object.keys(dependencies).forEach((key) => {\n if (key.includes('@armit')) {\n armitDependencies.push({\n name: `${key.replace(/@armit\\//, '')} ➞ version`,\n version: dependencies[key] as string,\n });\n }\n });\n return armitDependencies;\n }\n\n private displayCliVersion() {\n if (this.cliPackageJson) {\n console.info('');\n console.info(this.logger.chalk(['green'], ' ✔ @armit CLI'));\n console.info(\n ' @armit CLI Version :',\n this.logger.chalk(['magenta'], `${this.cliPackageJson.version || ''}`),\n '\\n'\n );\n }\n }\n\n private dependencyformat(dependencies: ProjectDependency[]) {\n const sorted = dependencies.sort(\n (dependencyA, dependencyB) =>\n dependencyB.name.length - dependencyA.name.length\n );\n // Maybe dependencies is an empty array.\n const length = sorted[0]?.name?.length;\n sorted.forEach((dependency) => {\n if (dependency.name.length < length) {\n dependency.name = this.rightPad(dependency.name, length);\n }\n dependency.name = dependency.name.concat(' :');\n dependency.version = dependency.version.replace(/\\^|~/, '');\n });\n return sorted;\n }\n\n private rightPad(name: string, length: number) {\n while (name.length < length) {\n name = name.concat(' ');\n }\n return name;\n }\n}\n","import { createCommand } from '@armit/common';\nimport type { NewCommandArgs } from './handler.js';\nimport { NewCommandHandler } from './handler.js';\n\nexport const newCmd = createCommand<NewCommandArgs>(\n 'new',\n {\n command: 'new',\n describe: 'Create armit project.',\n },\n NewCommandHandler\n);\n","import type { CommandArgv } from '@armit/common';\nimport { AbstractHandler } from '@armit/common';\n\nexport type NewCommandArgs = CommandArgv;\n\nexport class NewCommandHandler extends AbstractHandler<NewCommandArgs> {\n async handle() {\n console.log(\n this.logger.chalk(\n ['magenta', 'bold'],\n ` CLI tool for armitjs applications`\n )\n );\n }\n}\n","import { createCommand } from '@armit/common';\nimport type { PackCommandArgs } from './handler.js';\nimport { PackCommand } from './handler.js';\n\nexport const packCmd = createCommand<PackCommandArgs>(\n 'pack',\n {\n command: 'pack',\n describe: 'Extract filtered files compress to zip file.',\n builder(args) {\n return args\n .example(\n `$0 pack -f=\"a;b;c\" -f=\"a\"`,\n 'Using `globby` to filter files to zip'\n )\n .option('filter', {\n alias: 'f',\n type: 'array',\n default: ['**'],\n describe: 'Filter matched files that will be packed',\n })\n .option('ignore', {\n alias: 'i',\n type: 'array',\n default: ['**/*.{png,jpg,jpeg,gif,svg}'],\n describe: 'Ignore pattern will removed matched files from `filter`',\n })\n .option('basePath', {\n alias: 'b',\n type: 'string',\n default: 'public',\n describe: 'The path that will be ignored relative to `cwd()`',\n })\n .option('to', {\n alias: 't',\n type: 'string',\n default: 'packages',\n describe:\n 'The directory where zip file saved to, it relative to `cwd()`',\n })\n .option('cwd', {\n alias: 'c',\n type: 'string',\n default: process.cwd(),\n describe: 'The directory to start searching from.',\n });\n },\n },\n PackCommand\n);\n","import { join, relative } from 'path';\nimport type { CommandArgv } from '@armit/common';\nimport {\n getPackageData,\n fileWalk,\n zipFiles,\n AbstractHandler,\n} from '@armit/common';\nimport { normalizeOptionSemicolonParts } from '../utils/index.js';\n\nexport type PackCommandArgs = CommandArgv<{\n /**\n * The filter pattern using globby (fast-glob)\n * multiple pattern separated using semicolon `;`\n * @alias -f\n * @default [`**`]\n */\n filter: string[];\n\n /**\n * Reverse pattern will removed matched files from `filter`\n * @default [`**\\/*.{png,jpg,jpeg,gif,svg}`]\n */\n ignore: string[];\n\n /**\n * The base relative path will be ignore related to process.cwd()\n * @alias -e\n * @default `public`\n */\n basePath: string;\n\n /**\n * The directory where the zip will save to\n * it's relative to process.cwd()\n * @alias -t\n * @default `packages`\n */\n to: string;\n\n /**\n * The directory to start searching from.\n * @default process.cwd()\n */\n cwd: string;\n}>;\n\nexport class PackCommand extends AbstractHandler<PackCommandArgs> {\n async handle() {\n return this.prepareZip();\n }\n\n private async prepareZip() {\n const fileFromCwd = join(this.args.cwd, this.args.basePath);\n const pattern = normalizeOptionSemicolonParts(this.args.filter);\n const allFiles = await fileWalk(pattern, {\n cwd: fileFromCwd,\n ignore: this.args.ignore,\n });\n if (!allFiles.length) {\n this.logger.warn('No matched files found');\n } else {\n console.info(this.logger.chalk(['green'], '✔ All ziped files'));\n allFiles.forEach((file) => {\n console.info(\n `${this.logger.chalk(['cyan'], ' ➩ ')}${this.logger.chalk(\n ['magenta'],\n relative(fileFromCwd, file)\n )}`\n );\n });\n console.info(' ');\n await this.toZip(allFiles, fileFromCwd);\n }\n }\n\n async toZip(allFiles: string[], fileFromCwd: string): Promise<void> {\n const fileFromTo = join(this.args.cwd, this.args.to);\n // Try to read target project package.json.\n const targetPackageJson = getPackageData({\n cwd: this.args.cwd,\n });\n const zipFileName = join(\n fileFromTo,\n `${(targetPackageJson?.name || 'unknow').replace(\n /\\//g,\n '-'\n )}-${Date.now()}.zip`\n );\n await zipFiles(allFiles, zipFileName, {\n relativePathTo: fileFromCwd,\n });\n }\n}\n","import { arrayUnique, arrayFlatten } from '@armit/common';\n\n/**\n * normalize yargs --filter --modules option into standard globby patterns\n * @param option The given yargs -f (--filter) = \"a;b;c\"\n */\nexport const normalizeOptionSemicolonParts = (option: string[]): string[] => {\n const semicolonParts = arrayFlatten<string[]>(\n option.map((item) => {\n return item\n .split(/\\s*;\\s*/)\n .filter(Boolean)\n .map((s) => s.trim());\n })\n ).filter(Boolean);\n\n return arrayUnique(semicolonParts);\n};\n"]} |
+14
-13
| { | ||
| "name": "@armit/cli", | ||
| "version": "0.0.10", | ||
| "version": "0.0.11", | ||
| "homepage": "https://github.com/armitjs/armit", | ||
@@ -48,3 +48,4 @@ "repository": { | ||
| "dependencies": { | ||
| "@armit/common": "^0.0.10", | ||
| "@armit/common": "^0.0.11", | ||
| "@armit/generate-template-files": "^0.0.11", | ||
| "import-local": "3.1.0", | ||
@@ -54,16 +55,16 @@ "os-name": "5.0.1" | ||
| "devDependencies": { | ||
| "@armit/eslint-config-bases": "^0.0.7", | ||
| "@types/node": "18.11.4", | ||
| "@vitest/coverage-istanbul": "0.24.3", | ||
| "@vitest/ui": "0.24.3", | ||
| "eslint": "8.26.0", | ||
| "@armit/eslint-config-bases": "^0.0.8", | ||
| "@types/node": "18.11.9", | ||
| "@vitest/coverage-istanbul": "0.25.3", | ||
| "@vitest/ui": "0.25.3", | ||
| "eslint": "8.28.0", | ||
| "npm-run-all": "4.1.5", | ||
| "prettier": "2.7.1", | ||
| "prettier": "2.8.0", | ||
| "rimraf": "3.0.2", | ||
| "ts-node": "10.9.1", | ||
| "tsup": "6.3.0", | ||
| "typescript": "4.8.4", | ||
| "vite": "3.1.8", | ||
| "vite-tsconfig-paths": "3.5.2", | ||
| "vitest": "0.24.3" | ||
| "tsup": "6.5.0", | ||
| "typescript": "4.9.3", | ||
| "vite": "3.2.4", | ||
| "vite-tsconfig-paths": "3.6.0", | ||
| "vitest": "0.25.3" | ||
| }, | ||
@@ -70,0 +71,0 @@ "engines": { |
+53
-0
@@ -19,2 +19,6 @@ # @armit/cli | ||
| bootstrap().then((cli) => { | ||
| // Register customized plugins chain. | ||
| cli.register(pluginA).register(pluginB); | ||
| // Parse progress arguments. | ||
| cli.parse(process.argv.slice(2)); | ||
@@ -24,4 +28,53 @@ }); | ||
| ## Create a custom armitjs-based plugin chain e.g. `arm test` | ||
| - armit-cli-plugin-`test`/package.json | ||
| ```json | ||
| "type": "module", | ||
| "exports": { | ||
| ".": { | ||
| "import": "./index.js" | ||
| }, | ||
| "./package.json": "./package.json" | ||
| }, | ||
| ``` | ||
| - armit-cli-plugin-`test`/src/index.ts | ||
| ```ts | ||
| import type { CommandArgv } from "@armit/common"; | ||
| import { AbstractHandler, createCommand } from "@armit/common"; | ||
| type TestCmdArgs = CommandArgv<{ | ||
| test: number; | ||
| }>; | ||
| class CmdTestHandle extends AbstractHandler<TestCmdArgs> { | ||
| handle(): void | Promise<void> { | ||
| console.log("this is test command handle"); | ||
| this.logger.debug("this is debug message for test command"); | ||
| } | ||
| } | ||
| const cmdTest = createCommand( | ||
| "test", | ||
| { | ||
| command: "test", | ||
| describe: "Display armit project details.", | ||
| builder: (yargs) => { | ||
| return yargs.example(`$0 cmd test `, "cli testing").option("test", { | ||
| type: "number", | ||
| alias: "t", | ||
| default: true, | ||
| describe: `cli option test describe`, | ||
| }); | ||
| }, | ||
| }, | ||
| CmdTestHandle | ||
| ); | ||
| // As default export | ||
| export default cmdTest; | ||
| ``` | ||
| ## Contributing | ||
| Contributions are happily accepted. I respond to all PR's and can offer guidance on where to make changes. For contributing tips see CONTRIBUTING.md |
34444
18.56%43
10.26%79
203.85%4
33.33%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
Updated