@armit/cli
Advanced tools
+13
-0
| # @armit/cli | ||
| ## 0.2.6 | ||
| ### Patch Changes | ||
| - [`578a7c8`](https://github.com/armitjs/armit/commit/578a7c89178272ca2ce7d622305f6983490ec69e) Thanks [@tianyingchun](https://github.com/tianyingchun)! - bump version | ||
| - Updated dependencies [[`578a7c8`](https://github.com/armitjs/armit/commit/578a7c89178272ca2ce7d622305f6983490ec69e)]: | ||
| - @armit/generate-template-files@0.2.5 | ||
| - @armit/file-utility@0.2.4 | ||
| - @armit/commander@0.2.6 | ||
| - @armit/terminal@0.2.4 | ||
| - @armit/package@0.2.6 | ||
| ## 0.2.5 | ||
@@ -4,0 +17,0 @@ |
+1
-1
@@ -14,3 +14,3 @@ import { join as join$1 } from 'node:path'; | ||
| export { Dr as bootstrap }; | ||
| //# sourceMappingURL=out.js.map | ||
| //# sourceMappingURL=index.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","createCli","loadCliPlugins","getDirname","readPackageData","searchParentDir","updateNotifier","createCommand","platform","release","osName","AbstractHandler","showBanner","terminalColor","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 type { CliMain, CliOption } from '@armit/commander';\nimport { createCli, loadCliPlugins } from '@armit/commander';\nimport { getDirname } from '@armit/file-utility';\nimport {\n readPackageData,\n searchParentDir,\n updateNotifier,\n} from '@armit/package';\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 osName from 'os-name';\nimport type { CommandArgv } from '@armit/commander';\nimport { AbstractHandler } from '@armit/commander';\nimport { showBanner, terminalColor } from '@armit/terminal';\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/info/handler.ts","../src/info/define.ts","../src/new/define.ts","../src/new/handler.ts","../src/utils/array-flatten.ts","../src/utils/array-unique.ts","../src/utils/normalize-option.ts","../src/pack/handler.ts","../src/pack/define.ts","../src/bootstrap/bootstrap.ts"],"names":["InfoCommandHandler","AbstractHandler","showBanner","terminalColor","osName","platform","release","dependencies","armitDependencies","dependency","key","sorted","dependencyA","dependencyB","length","name","infoCmd","createCommand","NewCommandHandler","newCmd","arrayFlatten","arr","depth","acc","val","arrayUnique","byKey","item","normalizeOptionSemicolonParts","option","semicolonParts","s","PackCommand","fileFromCwd","join","pattern","allFiles","fileWalk","file","relative","fileFromTo","targetPackageJson","readPackageData","zipFileName","zipFiles","packCmd","args","bootstrap","options","curDirName","getDirname","packageJson","updateNotifier","armitDir","searchParentDir","externalPlugins","loadCliPlugins","armitCli","createCli","plugin"],"mappings":"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","file":"index.js","sourcesContent":["import { platform, release } from 'os';\nimport osName from 'os-name';\nimport type { CommandArgv } from '@armit/commander';\nimport { AbstractHandler } from '@armit/commander';\nimport { showBanner, terminalColor } from '@armit/terminal';\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 { 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 { 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","/**\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","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","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 } from 'node:path';\nimport type { CliMain, CliOption } from '@armit/commander';\nimport { createCli, loadCliPlugins } from '@armit/commander';\nimport { getDirname } from '@armit/file-utility';\nimport {\n readPackageData,\n searchParentDir,\n updateNotifier,\n} from '@armit/package';\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"]} |
+13
-13
| { | ||
| "name": "@armit/cli", | ||
| "version": "0.2.5", | ||
| "version": "0.2.6", | ||
| "homepage": "https://github.com/armitjs/armit", | ||
@@ -50,7 +50,7 @@ "repository": { | ||
| "dependencies": { | ||
| "@armit/commander": "^0.2.5", | ||
| "@armit/file-utility": "^0.2.3", | ||
| "@armit/generate-template-files": "^0.2.4", | ||
| "@armit/package": "^0.2.5", | ||
| "@armit/terminal": "^0.2.3", | ||
| "@armit/commander": "^0.2.6", | ||
| "@armit/file-utility": "^0.2.4", | ||
| "@armit/generate-template-files": "^0.2.5", | ||
| "@armit/package": "^0.2.6", | ||
| "@armit/terminal": "^0.2.4", | ||
| "@hyperse/exec-program": "^1.0.6", | ||
@@ -61,13 +61,13 @@ "os-name": "^6.0.0" | ||
| "@hyperse/eslint-config-hyperse": "^1.0.10", | ||
| "@types/node": "20.14.10", | ||
| "@vitest/coverage-istanbul": "2.0.2", | ||
| "@vitest/ui": "2.0.2", | ||
| "@types/node": "20.14.12", | ||
| "@vitest/coverage-istanbul": "2.0.4", | ||
| "@vitest/ui": "2.0.4", | ||
| "eslint": "^9.7.0", | ||
| "npm-run-all": "4.1.5", | ||
| "rimraf": "6.0.1", | ||
| "tsup": "8.1.0", | ||
| "typescript": "5.5.3", | ||
| "vite": "5.3.3", | ||
| "tsup": "8.2.2", | ||
| "typescript": "5.5.4", | ||
| "vite": "5.3.4", | ||
| "vite-tsconfig-paths": "4.3.2", | ||
| "vitest": "2.0.2" | ||
| "vitest": "2.0.4" | ||
| }, | ||
@@ -74,0 +74,0 @@ "engines": { |
66461
3.54%Updated
Updated
Updated
Updated