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.15
to
0.0.16
+15
-0
CHANGELOG.md
# @armit/cli
## 0.0.16
### Patch Changes
- [`a8112d2`](https://github.com/armitjs/armit/commit/a8112d250100e67b1a29ebe0205aace5f64b81ae) Thanks [@tianyingchun](https://github.com/tianyingchun)! - upgrade package deps
- [`4767be2`](https://github.com/armitjs/armit/commit/4767be207626f68e217294b955e76877404913b5) Thanks [@tianyingchun](https://github.com/tianyingchun)! - bump version
- Updated dependencies [[`a8112d2`](https://github.com/armitjs/armit/commit/a8112d250100e67b1a29ebe0205aace5f64b81ae), [`4767be2`](https://github.com/armitjs/armit/commit/4767be207626f68e217294b955e76877404913b5), [`eb708b7`](https://github.com/armitjs/armit/commit/eb708b7c8addb03c7fce654b7936c88df7175fab)]:
- @armit/generate-template-files@0.0.15
- @armit/file-utility@0.0.15
- @armit/commander@0.0.15
- @armit/terminal@0.0.15
- @armit/package@0.0.15
## 0.0.15

@@ -4,0 +19,0 @@

+1
-1

@@ -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","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":"AAAA,OAAS,QAAAA,MAAY,YACrB,OAAS,kBAAAC,EAAgB,aAAAC,MAAiB,mBAE1C,OAAS,cAAAC,MAAkB,sBAC3B,OACE,mBAAAC,EACA,kBAAAC,EACA,mBAAAC,MACK,iBCRP,OAAS,iBAAAC,MAAqB,mBCA9B,OAAS,YAAAC,EAAU,WAAAC,MAAe,KAElC,OAAS,mBAAAC,MAAuB,mBAChC,OAAS,cAAAC,EAAY,iBAAAC,MAAqB,kBAC1C,OAAOC,MAAY,UAUZ,IAAMC,EAAN,cAAiCJ,CAAiC,CACvE,MAAM,QAAS,CACb,MAAMC,EAAW,QAAS,CACxB,MAAO,OACP,SAAU,WACV,cAAe,CACjB,CAAC,EACD,QAAQ,IACNC,EACE,CAAC,UAAW,MAAM,EAClB,KAAK,KAAK,OACZ,EAAE,qCAAqC,CACzC,EACA,KAAK,yBAAyB,CAChC,CAEQ,0BAA2B,CACjC,QAAQ,KAAK,EAAE,EACf,QAAQ,KACNA,EAAc,CAAC,OAAO,EAAG,KAAK,KAAK,OAAO,EAAE,6BAAwB,CACtE,EACA,QAAQ,KACN,sBACAA,EACE,CAAC,SAAS,EACV,KAAK,KAAK,OACZ,EAAE,IAAIC,EAAOL,EAAS,EAAGC,EAAQ,CAAC,GAAG,CACvC,EACA,QAAQ,KACN,sBACAG,EAAc,CAAC,SAAS,EAAG,KAAK,KAAK,OAAO,EAAE,IAAI,QAAQ,SAAS,CACrE,EACA,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,CAC/B,CAEQ,yBAA0B,CAChC,QAAQ,KACNA,EACE,CAAC,OAAO,EACR,KAAK,KAAK,OACZ,EAAE,sCAAiC,CACrC,EACA,GAAI,CACF,KAAK,qBAAqB,CAC5B,MAAE,CACA,QAAQ,MACNA,EACE,CAAC,KAAK,EACN,KAAK,KAAK,OACZ,EACE,iGACF,CACF,CACF,CACF,CAEQ,sBAAuB,CAC7B,GAAI,KAAK,eAAgB,CACvB,IAAMG,EAAwC,OAAO,OACnD,CAAC,EACD,KAAK,eAAe,aACpB,KAAK,eAAe,gBACpB,KAAK,eAAe,gBACtB,EACMC,EAAoB,KAAK,wBAAwBD,CAAY,EACnE,KAAK,iBAAiBC,CAAiB,EAAE,QAASC,GAChD,QAAQ,KACN,MAAQA,EAAW,KACnBL,EAAc,CAAC,SAAS,EAAG,KAAK,KAAK,OAAO,EAAE,GAAGK,EAAW,SAAS,CACvE,CACF,EACA,QAAQ,KAAK,GAAG,CAClB,CACF,CAEQ,wBAAwBF,EAAuC,CACrE,IAAMC,EAA8C,CAAC,EACrD,cAAO,KAAKD,CAAY,EAAE,QAASG,GAAQ,CACrCA,EAAI,SAAS,QAAQ,GACvBF,EAAkB,KAAK,CACrB,KAAM,GAAGE,EAAI,QAAQ,WAAY,EAAE,mBACnC,QAASH,EAAaG,EACxB,CAAC,CAEL,CAAC,EACMF,CACT,CAEQ,mBAAoB,CACtB,KAAK,iBACP,QAAQ,KAAK,EAAE,EACf,QAAQ,KACNJ,EAAc,CAAC,OAAO,EAAG,KAAK,KAAK,OAAO,EAAE,qBAAgB,CAC9D,EACA,QAAQ,KACN,0BACAA,EACE,CAAC,SAAS,EACV,KAAK,KAAK,OACZ,EAAE,GAAG,KAAK,eAAe,SAAW,IAAI,EACxC;AAAA,CACF,EAEJ,CAEQ,iBAAiBG,EAAmC,CAC1D,IAAMI,EAASJ,EAAa,KAC1B,CAACK,EAAaC,IACZA,EAAY,KAAK,OAASD,EAAY,KAAK,MAC/C,EAEME,EAASH,EAAO,IAAI,MAAM,OAChC,OAAAA,EAAO,QAASF,GAAe,CACzBA,EAAW,KAAK,OAASK,IAC3BL,EAAW,KAAO,KAAK,SAASA,EAAW,KAAMK,CAAM,GAEzDL,EAAW,KAAOA,EAAW,KAAK,OAAO,IAAI,EAC7CA,EAAW,QAAUA,EAAW,QAAQ,QAAQ,OAAQ,EAAE,CAC5D,CAAC,EACME,CACT,CAEQ,SAASI,EAAcD,EAAgB,CAC7C,KAAOC,EAAK,OAASD,GACnBC,EAAOA,EAAK,OAAO,GAAG,EAExB,OAAOA,CACT,CACF,ED3IO,IAAMC,EAAUjB,EACrB,OACA,CACE,QAAS,OACT,SAAU,gCACZ,EACAO,CACF,EEXA,OAAS,iBAAAP,MAAqB,mBCC9B,OAAS,mBAAAG,MAAuB,mBAChC,OAAS,iBAAAE,MAAqB,kBAIvB,IAAMa,EAAN,cAAgCf,CAAgC,CACrE,MAAM,QAAS,CACb,QAAQ,IACNE,EACE,CAAC,UAAW,MAAM,EAClB,KAAK,KAAK,OACZ,EAAE,qCAAqC,CACzC,CACF,CACF,EDXO,IAAMc,EAASnB,EACpB,MACA,CACE,QAAS,MACT,SAAU,uBACZ,EACAkB,CACF,EEXA,OAAS,iBAAAlB,MAAqB,mBCA9B,OAAS,QAAAP,EAAM,YAAA2B,MAAgB,OAE/B,OAAS,mBAAAjB,MAAuB,mBAChC,OAAS,YAAAkB,EAAU,YAAAC,MAAgB,sBACnC,OAAS,mBAAAvB,MAAuB,iBAChC,OAAS,iBAAAM,MAAqB,kBCCvB,SAASkB,EAAgBC,EAAKC,EAAQ,EAAM,CACjD,OAAK,MAAM,QAAQD,CAAG,EAGfC,EAAQ,EACXD,EAAI,OAAO,CAACE,EAAKC,IAAQD,EAAI,OAAOH,EAAaI,EAAKF,EAAQ,CAAC,CAAC,EAAG,CAAC,CAAC,EACrED,EAAI,MAAM,EAJLA,CAKX,CCPO,SAASI,EAAeJ,EAAUK,EAAsB,CAC7D,OAAIA,GAAU,KACL,MAAM,KAAK,IAAI,IAAIL,CAAG,CAAC,EAGvB,CAAC,GAAG,IAAI,IAAIA,EAAI,IAAKM,GAAS,CAACA,EAAKD,GAAQC,CAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAEvE,CCNO,IAAMC,EAAiCC,GAA+B,CAC3E,IAAMC,EAAiBV,EACrBS,EAAO,IAAKF,GACHA,EACJ,MAAM,SAAS,EACf,OAAO,OAAO,EACd,IAAKI,GAAMA,EAAE,KAAK,CAAC,CACvB,CACH,EAAE,OAAO,OAAO,EAEhB,OAAON,EAAYK,CAAc,CACnC,EH2BO,IAAME,EAAN,cAA0BhC,CAAiC,CAChE,MAAM,QAAS,CACb,OAAO,KAAK,WAAW,CACzB,CAEA,MAAc,YAAa,CACzB,IAAMiC,EAAc3C,EAAK,KAAK,KAAK,IAAK,KAAK,KAAK,QAAQ,EACpD4C,EAAUN,EAA8B,KAAK,KAAK,MAAM,EACxDO,EAAW,MAAMjB,EAASgB,EAAS,CACvC,IAAKD,EACL,OAAQ,KAAK,KAAK,MACpB,CAAC,EACIE,EAAS,QAGZ,QAAQ,KACNjC,EAAc,CAAC,OAAO,EAAG,KAAK,KAAK,OAAO,EAAE,wBAAmB,CACjE,EACAiC,EAAS,QAASC,GAAS,CACzB,QAAQ,KACN,GAAGlC,EAAc,CAAC,MAAM,EAAG,KAAK,KAAK,OAAO,EAAE,UAAK,IAAIA,EACrD,CAAC,SAAS,EACV,KAAK,KAAK,OACZ,EAAEe,EAASgB,EAAaG,CAAI,CAAC,GAC/B,CACF,CAAC,EACD,QAAQ,KAAK,GAAG,EAChB,MAAM,KAAK,MAAMD,EAAUF,CAAW,GAdtC,KAAK,OAAO,KAAK,wBAAwB,CAgB7C,CAEA,MAAM,MAAME,EAAoBF,EAAoC,CAClE,IAAMI,EAAa/C,EAAK,KAAK,KAAK,IAAK,KAAK,KAAK,EAAE,EAE7CgD,EAAoB1C,EAAgB,CACxC,IAAK,KAAK,KAAK,GACjB,CAAC,EACK2C,EAAcjD,EAClB+C,EACA,IAAIC,GAAmB,MAAQ,UAAU,QACvC,MACA,GACF,KAAK,KAAK,IAAI,OAChB,EACA,MAAMnB,EAASgB,EAAUI,EAAa,CACpC,eAAgBN,CAClB,CAAC,CACH,CACF,EDzFO,IAAMO,EAAU3C,EACrB,OACA,CACE,QAAS,OACT,SAAU,+CACV,QAAQ4C,EAAM,CACZ,OAAOA,EACJ,QACC,4BACA,uCACF,EACC,OAAO,SAAU,CAChB,MAAO,IACP,KAAM,QACN,QAAS,CAAC,IAAI,EACd,SAAU,0CACZ,CAAC,EACA,OAAO,SAAU,CAChB,MAAO,IACP,KAAM,QACN,QAAS,CAAC,6BAA6B,EACvC,SAAU,yDACZ,CAAC,EACA,OAAO,WAAY,CAClB,MAAO,IACP,KAAM,SACN,QAAS,SACT,SAAU,mDACZ,CAAC,EACA,OAAO,KAAM,CACZ,MAAO,IACP,KAAM,SACN,QAAS,WACT,SACE,+DACJ,CAAC,EACA,OAAO,MAAO,CACb,MAAO,IACP,KAAM,SACN,QAAS,QAAQ,IAAI,EACrB,SAAU,wCACZ,CAAC,CACL,CACF,EACAT,CACF,ELnCA,eAAsBU,GACpBC,EAA8B,CAAC,EACb,CAElB,IAAMC,EAAanD,EAAW,YAAY,GAAG,EAGvCoD,EAAcjD,EAAgB,CAClC,IAAKgD,CACP,CAAC,EAEGC,GAEF,MAAMlD,EAAe,CACnB,IAAK,CACH,KAAMkD,GAAa,MAAQ,GAC3B,QAASA,GAAa,SAAW,EACnC,EACA,wBAAyB,EAC3B,CAAC,EAGH,IAAMC,EAAWpD,EAAgBkD,EAAY,QAAQ,GAAK,GAGpDG,EAAkB,MAAMxD,EAC5B,CAAC,EACD,CAAC,mCAAoC,iCAAiC,EACtE,CAAC,QAAQ,IAAI,EAAGD,EAAKwD,EAAU,KAAK,CAAC,CACvC,EAGME,EAAWxD,EAAU,CACzB,MAAO,SACP,YAAAqD,EACA,GAAGF,CACL,CAAC,EACE,SAAS3B,CAAM,EACf,SAASF,CAAO,EAChB,SAAS0B,CAAO,EAGnB,OAAW,CAAE,OAAAS,CAAO,IAAKF,EACnBE,GACFD,EAAS,SAASC,CAAM,EAG5B,OAAOD,CACT","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"]}
{"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.15",
"version": "0.0.16",
"homepage": "https://github.com/armitjs/armit",

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

"dependencies": {
"@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",
"@armit/commander": "^0.0.15",
"@armit/file-utility": "^0.0.15",
"@armit/generate-template-files": "^0.0.15",
"@armit/package": "^0.0.15",
"@armit/terminal": "^0.0.15",
"import-local": "3.1.0",

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

"devDependencies": {
"@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",
"@armit/eslint-config-bases": "^0.0.11",
"@types/node": "18.14.2",
"@vitest/coverage-istanbul": "0.29.2",
"@vitest/ui": "0.29.2",
"eslint": "8.35.0",
"npm-run-all": "4.1.5",
"prettier": "2.8.3",
"prettier": "2.8.4",
"rimraf": "4.1.2",
"ts-node": "10.9.1",
"tsup": "6.5.0",
"typescript": "4.9.4",
"vite": "4.0.4",
"tsup": "6.6.3",
"typescript": "4.9.5",
"vite": "4.1.4",
"vite-tsconfig-paths": "4.0.5",
"vitest": "0.28.3"
"vitest": "0.29.2"
},

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