Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@armit/cli

Package Overview
Dependencies
Maintainers
1
Versions
86
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@armit/cli - npm Package Compare versions

Comparing version
0.0.14
to
0.0.15
+19
-0
CHANGELOG.md
# @armit/cli
## 0.0.15
### Patch Changes
- [`68e9db6`](https://github.com/armitjs/armit/commit/68e9db6ef5f359d977a98eeb013155dbe773830e) Thanks [@tianyingchun](https://github.com/tianyingchun)! - migrate armit/logger to seperate repo
- [`929bd02`](https://github.com/armitjs/armit/commit/929bd0207ae5d47d39e84f052fe10b848267ea96) Thanks [@tianyingchun](https://github.com/tianyingchun)! - upgrade package dependencies
- [`f74db20`](https://github.com/armitjs/armit/commit/f74db2003a2e769f319778008deab5f49044a9dc) Thanks [@tianyingchun](https://github.com/tianyingchun)! - refactor logger
- [`c10cd76`](https://github.com/armitjs/armit/commit/c10cd76a313a4f0c5386214e86bc2c7efba43039) Thanks [@tianyingchun](https://github.com/tianyingchun)! - upgrade package deps
- Updated dependencies [[`68e9db6`](https://github.com/armitjs/armit/commit/68e9db6ef5f359d977a98eeb013155dbe773830e), [`c8bf37d`](https://github.com/armitjs/armit/commit/c8bf37d7f4a3affaef71aa0cf66e8b9b98d07661), [`929bd02`](https://github.com/armitjs/armit/commit/929bd0207ae5d47d39e84f052fe10b848267ea96), [`f74db20`](https://github.com/armitjs/armit/commit/f74db2003a2e769f319778008deab5f49044a9dc), [`c10cd76`](https://github.com/armitjs/armit/commit/c10cd76a313a4f0c5386214e86bc2c7efba43039)]:
- @armit/generate-template-files@0.0.14
- @armit/commander@0.0.14
- @armit/file-utility@0.0.14
- @armit/terminal@0.0.14
- @armit/package@0.0.14
## 0.0.14

@@ -4,0 +23,0 @@

+5
-5

@@ -6,11 +6,11 @@ import { join as join$1 } from 'node:path';

import { platform, release } from 'os';
import { showBanner } from '@armit/terminal';
import v from 'os-name';
import { showBanner, terminalColor } from '@armit/terminal';
import k from 'os-name';
import { join, relative } from 'path';
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"],` ${v(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((i,a)=>a.name.length-i.name.length),o=r[0]?.name?.length;return r.forEach(i=>{i.name.length<o&&(i.name=this.rightPad(i.name,o)),i.name=i.name.concat(" :"),i.version=i.version.replace(/\^|~/,"");}),r}rightPad(e,r){for(;e.length<r;)e=e.concat(" ");return e}};var g=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 f=createCommand("new",{command:"new",describe:"Create armit project."},s);function c(t,e=1){return Array.isArray(t)?e>0?t.reduce((r,o)=>r.concat(c(o,e-1)),[]):t.slice():t}function d(t,e){return e==null?Array.from(new Set(t)):[...new Map(t.map(r=>[r[e],r])).values()]}var h=t=>{let e=c(t.map(r=>r.split(/\s*;\s*/).filter(Boolean).map(o=>o.trim()))).filter(Boolean);return d(e)};var m=class extends AbstractHandler{async handle(){return this.prepareZip()}async prepareZip(){let e=join(this.args.cwd,this.args.basePath),r=h(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(i=>{console.info(`${this.logger.chalk(["cyan"]," \u27A9 ")}${this.logger.chalk(["magenta"],relative(e,i))}`);}),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),i=readPackageData({cwd:this.args.cwd}),a=join(o,`${(i?.name||"unknow").replace(/\//g,"-")}-${Date.now()}.zip`);await zipFiles(e,a,{relativePathTo:r});}};var u=createCommand("pack",{command:"pack",describe:"Extract filtered files compress to zip file.",builder(t){return t.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 ke(t={}){let e=getDirname(import.meta.url),r=readPackageData({cwd:e});r&&await updateNotifier({pkg:{name:r?.name||"",version:r?.version||""},shouldNotifyInNpmScript:!0});let o=searchParentDir(e,"@armit")||"",i=await loadCliPlugins([],["@armit/cli-plugin-*/package.json","armit-cli-plugin-*/package.json"],[process.cwd(),join$1(o,"../")]),a=createCli({group:"@armit",packageJson:r,...t}).register(f).register(g).register(u);for(let{plugin:p}of i)p&&a.register(p);return a}
var s=class extends AbstractHandler{async handle(){await showBanner("armit",{align:"left",gradient:"red,blue",letterSpacing:3}),console.log(terminalColor(["magenta","bold"],this.args.noColor)(" CLI tool for armitjs applications")),this.displaySystemInformation();}displaySystemInformation(){console.info(""),console.info(terminalColor(["green"],this.args.noColor)(" \u2714 System Information")),console.info(" OS Version :",terminalColor(["magenta"],this.args.noColor)(` ${k(platform(),release())}`)),console.info(" NodeJS Version :",terminalColor(["magenta"],this.args.noColor)(` ${process.version}`)),this.displayCliVersion(),this.displayArmitInformation();}displayArmitInformation(){console.info(terminalColor(["green"],this.args.noColor)(" \u2714 @armit Platform Information"));try{this.displayArmitVersions();}catch{console.error(terminalColor(["red"],this.args.noColor)(" \u{1F63C} cannot read your project package.json file, are you inside your project directory?"));}}displayArmitVersions(){if(this.cliPackageJson){let r=Object.assign({},this.cliPackageJson.dependencies,this.cliPackageJson.devDependencies,this.cliPackageJson.peerDependencies),o=this.collectNestDependencies(r);this.dependencyformat(o).forEach(e=>console.info(" "+e.name,terminalColor(["magenta"],this.args.noColor)(`${e.version}`))),console.info(" ");}}collectNestDependencies(r){let o=[];return Object.keys(r).forEach(e=>{e.includes("@armit")&&o.push({name:`${e.replace(/@armit\//,"")} \u279E version`,version:r[e]});}),o}displayCliVersion(){this.cliPackageJson&&(console.info(""),console.info(terminalColor(["green"],this.args.noColor)(" \u2714 @armit CLI")),console.info(" @armit CLI Version :",terminalColor(["magenta"],this.args.noColor)(`${this.cliPackageJson.version||""}`),`
`));}dependencyformat(r){let o=r.sort((i,n)=>n.name.length-i.name.length),e=o[0]?.name?.length;return o.forEach(i=>{i.name.length<e&&(i.name=this.rightPad(i.name,e)),i.name=i.name.concat(" :"),i.version=i.version.replace(/\^|~/,"");}),o}rightPad(r,o){for(;r.length<o;)r=r.concat(" ");return r}};var d=createCommand("info",{command:"info",describe:"Display armit project details."},s);var m=class extends AbstractHandler{async handle(){console.log(terminalColor(["magenta","bold"],this.args.noColor)(" CLI tool for armitjs applications"));}};var h=createCommand("new",{command:"new",describe:"Create armit project."},m);function c(t,r=1){return Array.isArray(t)?r>0?t.reduce((o,e)=>o.concat(c(e,r-1)),[]):t.slice():t}function C(t,r){return r==null?Array.from(new Set(t)):[...new Map(t.map(o=>[o[r],o])).values()]}var u=t=>{let r=c(t.map(o=>o.split(/\s*;\s*/).filter(Boolean).map(e=>e.trim()))).filter(Boolean);return C(r)};var l=class extends AbstractHandler{async handle(){return this.prepareZip()}async prepareZip(){let r=join(this.args.cwd,this.args.basePath),o=u(this.args.filter),e=await fileWalk(o,{cwd:r,ignore:this.args.ignore});e.length?(console.info(terminalColor(["green"],this.args.noColor)("\u2714 All ziped files")),e.forEach(i=>{console.info(`${terminalColor(["cyan"],this.args.noColor)(" \u27A9 ")}${terminalColor(["magenta"],this.args.noColor)(relative(r,i))}`);}),console.info(" "),await this.toZip(e,r)):this.logger.warn("No matched files found");}async toZip(r,o){let e=join(this.args.cwd,this.args.to),i=readPackageData({cwd:this.args.cwd}),n=join(e,`${(i?.name||"unknow").replace(/\//g,"-")}-${Date.now()}.zip`);await zipFiles(r,n,{relativePathTo:o});}};var y=createCommand("pack",{command:"pack",describe:"Extract filtered files compress to zip file.",builder(t){return t.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);async function kr(t={}){let r=getDirname(import.meta.url),o=readPackageData({cwd:r});o&&await updateNotifier({pkg:{name:o?.name||"",version:o?.version||""},shouldNotifyInNpmScript:!0});let e=searchParentDir(r,"@armit")||"",i=await loadCliPlugins([],["@armit/cli-plugin-*/package.json","armit-cli-plugin-*/package.json"],[process.cwd(),join$1(e,"../")]),n=createCli({group:"@armit",packageJson:o,...t}).register(h).register(d).register(y);for(let{plugin:f}of i)f&&n.register(f);return n}
export { ke as bootstrap };
export { kr 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/new/define.ts","../src/new/handler.ts","../src/pack/define.ts","../src/pack/handler.ts","../src/utils/array-flatten.ts","../src/utils/array-unique.ts","../src/utils/normalize-option.ts"],"names":["join","loadCliPlugins","createCli","getDirname","searchParentDir","updateNotifier","readPackageData","createCommand","platform","release","AbstractHandler","showBanner","osName","InfoCommandHandler","dependencies","armitDependencies","dependency","key","sorted","dependencyA","dependencyB","length","name","infoCmd","NewCommandHandler","newCmd","relative","fileWalk","zipFiles","arrayFlatten","arr","depth","acc","val","arrayUnique","byKey","item","normalizeOptionSemicolonParts","option","semicolonParts","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 { loadCliPlugins, createCli } from '@armit/commander';\nimport type { CliMain, CliOption } from '@armit/commander';\nimport { getDirname } from '@armit/file-utility';\nimport {\n searchParentDir,\n updateNotifier,\n readPackageData,\n} from '@armit/package';\n\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 = readPackageData({\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 = searchParentDir(curDirName, '@armit') || '';\n\n // Load all available cli plugins\n const externalPlugins = await loadCliPlugins(\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/commander';\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/commander';\nimport { AbstractHandler } from '@armit/commander';\nimport { showBanner } from '@armit/terminal';\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/commander';\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/commander';\nimport { AbstractHandler } from '@armit/commander';\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/commander';\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/commander';\nimport { AbstractHandler } from '@armit/commander';\nimport { fileWalk, zipFiles } from '@armit/file-utility';\nimport { readPackageData } from '@armit/package';\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 = readPackageData({\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","/**\n * Creates a new array with all sub-array elements concatenated into it recursively up to the specified depth.\n * @param arr The array to flatten.\n * @param depth default 1\n * @returns A new array with the sub-array elements concatenated into it.\n */\nexport function arrayFlatten<T>(arr, depth = 1): T {\n if (!Array.isArray(arr)) {\n return arr;\n }\n return depth > 0\n ? arr.reduce((acc, val) => acc.concat(arrayFlatten(val, depth - 1)), [])\n : arr.slice();\n}\n","/**\n * Returns an array with only unique values. Objects are compared by reference,\n * unless the `byKey` argument is supplied, in which case matching properties will\n * be used to check duplicates\n */\n\nexport function arrayUnique<T>(arr: T[], byKey?: keyof T): T[] {\n if (byKey === null || byKey === undefined) {\n return Array.from(new Set(arr));\n } else {\n // Based on https://stackoverflow.com/a/58429784/772859\n return [...new Map(arr.map((item) => [item[byKey], item])).values()];\n }\n}\n","import { arrayFlatten } from './array-flatten.js';\nimport { arrayUnique } from './array-unique.js';\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/array-flatten.ts","../src/utils/array-unique.ts","../src/utils/normalize-option.ts"],"names":["join","loadCliPlugins","createCli","getDirname","searchParentDir","updateNotifier","readPackageData","createCommand","platform","release","AbstractHandler","showBanner","terminalColor","osName","InfoCommandHandler","dependencies","armitDependencies","dependency","key","sorted","dependencyA","dependencyB","length","name","infoCmd","NewCommandHandler","newCmd","relative","fileWalk","zipFiles","arrayFlatten","arr","depth","acc","val","arrayUnique","byKey","item","normalizeOptionSemicolonParts","option","semicolonParts","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 { loadCliPlugins, createCli } from '@armit/commander';\nimport type { CliMain, CliOption } from '@armit/commander';\nimport { getDirname } from '@armit/file-utility';\nimport {\n searchParentDir,\n updateNotifier,\n readPackageData,\n} from '@armit/package';\n\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 = readPackageData({\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 = searchParentDir(curDirName, '@armit') || '';\n\n // Load all available cli plugins\n const externalPlugins = await loadCliPlugins(\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/commander';\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/commander';\nimport { AbstractHandler } from '@armit/commander';\nimport { showBanner, terminalColor } from '@armit/terminal';\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 terminalColor(\n ['magenta', 'bold'],\n this.args.noColor\n )(` CLI tool for armitjs applications`)\n );\n this.displaySystemInformation();\n }\n\n private displaySystemInformation() {\n console.info('');\n console.info(\n terminalColor(['green'], this.args.noColor)(' ✔ System Information')\n );\n console.info(\n ' OS Version :',\n terminalColor(\n ['magenta'],\n this.args.noColor\n )(` ${osName(platform(), release())}`)\n );\n console.info(\n ' NodeJS Version :',\n terminalColor(['magenta'], this.args.noColor)(` ${process.version}`)\n );\n this.displayCliVersion();\n this.displayArmitInformation();\n }\n\n private displayArmitInformation() {\n console.info(\n terminalColor(\n ['green'],\n this.args.noColor\n )(' ✔ @armit Platform Information')\n );\n try {\n this.displayArmitVersions();\n } catch {\n console.error(\n terminalColor(\n ['red'],\n this.args.noColor\n )(\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 terminalColor(['magenta'], this.args.noColor)(`${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(\n terminalColor(['green'], this.args.noColor)(' ✔ @armit CLI')\n );\n console.info(\n ' @armit CLI Version :',\n terminalColor(\n ['magenta'],\n this.args.noColor\n )(`${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/commander';\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/commander';\nimport { AbstractHandler } from '@armit/commander';\nimport { terminalColor } from '@armit/terminal';\n\nexport type NewCommandArgs = CommandArgv;\n\nexport class NewCommandHandler extends AbstractHandler<NewCommandArgs> {\n async handle() {\n console.log(\n terminalColor(\n ['magenta', 'bold'],\n this.args.noColor\n )(` CLI tool for armitjs applications`)\n );\n }\n}\n","import { createCommand } from '@armit/commander';\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/commander';\nimport { AbstractHandler } from '@armit/commander';\nimport { fileWalk, zipFiles } from '@armit/file-utility';\nimport { readPackageData } from '@armit/package';\nimport { terminalColor } from '@armit/terminal';\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(\n terminalColor(['green'], this.args.noColor)('✔ All ziped files')\n );\n allFiles.forEach((file) => {\n console.info(\n `${terminalColor(['cyan'], this.args.noColor)(' ➩ ')}${terminalColor(\n ['magenta'],\n this.args.noColor\n )(relative(fileFromCwd, file))}`\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 = readPackageData({\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","/**\n * Creates a new array with all sub-array elements concatenated into it recursively up to the specified depth.\n * @param arr The array to flatten.\n * @param depth default 1\n * @returns A new array with the sub-array elements concatenated into it.\n */\nexport function arrayFlatten<T>(arr, depth = 1): T {\n if (!Array.isArray(arr)) {\n return arr;\n }\n return depth > 0\n ? arr.reduce((acc, val) => acc.concat(arrayFlatten(val, depth - 1)), [])\n : arr.slice();\n}\n","/**\n * Returns an array with only unique values. Objects are compared by reference,\n * unless the `byKey` argument is supplied, in which case matching properties will\n * be used to check duplicates\n */\n\nexport function arrayUnique<T>(arr: T[], byKey?: keyof T): T[] {\n if (byKey === null || byKey === undefined) {\n return Array.from(new Set(arr));\n } else {\n // Based on https://stackoverflow.com/a/58429784/772859\n return [...new Map(arr.map((item) => [item[byKey], item])).values()];\n }\n}\n","import { arrayFlatten } from './array-flatten.js';\nimport { arrayUnique } from './array-unique.js';\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"]}
{
"name": "@armit/cli",
"version": "0.0.14",
"version": "0.0.15",
"homepage": "https://github.com/armitjs/armit",

@@ -49,7 +49,7 @@ "repository": {

"dependencies": {
"@armit/commander": "^0.0.13",
"@armit/file-utility": "^0.0.13",
"@armit/generate-template-files": "^0.0.13",
"@armit/package": "^0.0.13",
"@armit/terminal": "^0.0.13",
"@armit/commander": "^0.0.14",
"@armit/file-utility": "^0.0.14",
"@armit/generate-template-files": "^0.0.14",
"@armit/package": "^0.0.14",
"@armit/terminal": "^0.0.14",
"import-local": "3.1.0",

@@ -59,16 +59,16 @@ "os-name": "5.1.0"

"devDependencies": {
"@armit/eslint-config-bases": "^0.0.9",
"@types/node": "18.11.17",
"@vitest/coverage-istanbul": "0.26.2",
"@vitest/ui": "0.26.2",
"eslint": "8.30.0",
"@armit/eslint-config-bases": "^0.0.10",
"@types/node": "18.11.18",
"@vitest/coverage-istanbul": "0.28.3",
"@vitest/ui": "0.28.3",
"eslint": "8.33.0",
"npm-run-all": "4.1.5",
"prettier": "2.8.1",
"rimraf": "3.0.2",
"prettier": "2.8.3",
"rimraf": "4.1.2",
"ts-node": "10.9.1",
"tsup": "6.5.0",
"typescript": "4.9.4",
"vite": "4.0.3",
"vite-tsconfig-paths": "4.0.3",
"vitest": "0.26.2"
"vite": "4.0.4",
"vite-tsconfig-paths": "4.0.5",
"vitest": "0.28.3"
},

@@ -75,0 +75,0 @@ "engines": {