@foxford/cli 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/fox.js +2 -1
  2. package/fox.js.map +1 -1
  3. package/package.json +2 -2
package/fox.js CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env node
1
2
  "use strict";
2
3
  var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
@@ -1668,7 +1669,7 @@ var import_chalk12 = __toESM(require("chalk"));
1668
1669
  // package.json
1669
1670
  var package_default = {
1670
1671
  name: "@foxford/cli",
1671
- version: "1.2.2",
1672
+ version: "1.2.3",
1672
1673
  description: "Foxford Cli",
1673
1674
  keywords: [
1674
1675
  "foxford",
package/fox.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logger/index.ts","../src/program/abstract.action.ts","../src/program/abstract.command.ts","../src/lib/runners/runner.ts","../src/lib/runners/ffmpeg.runner.ts","../src/lib/runners/shell.runner.ts","../src/lib/runners/node.runner.ts","../src/lib/runners/npm.runner.ts","../src/lib/runners/pnpm.runner.ts","../src/helpers/env.ts","../src/helpers/logger.ts","../src/lib/runners/script.runner.ts","../src/lib/runners/tinypng.runner.ts","../src/lib/runners/runner.factory.ts","../src/lib/runners/index.ts","../src/program/program.ts","../src/program/index.ts","../src/lib/ui/banner.ts","../src/lib/ui/prefixes.ts","../src/lib/ui/index.ts","../src/processes/codemod/action.ts","../src/lib/collection/collection.ts","../src/lib/collection/abstract.collection.ts","../src/lib/utils/formatting.ts","../src/lib/collection/fox-codemod.collection.ts","../src/lib/collection/collection.factory.ts","../src/lib/collection/index.ts","../src/processes/codemod/command.ts","../src/processes/codemod/index.ts","../src/processes/deploy/providers/abstract.provider.ts","../src/processes/deploy/providers/npm.ts","../src/processes/deploy/providers/s3.ts","../src/processes/deploy/action.ts","../src/processes/deploy/command.ts","../src/processes/deploy/index.ts","../src/processes/info/action.ts","../src/processes/info/command.ts","../src/processes/info/index.ts","../src/processes/optimize/action.ts","../src/processes/optimize/command.ts","../src/processes/optimize/index.ts","../src/bin/fox.ts","../package.json","../src/program/loader.ts"],"sourcesContent":["import { log } from '@foxford/logger'\n\nimport type { HierarchicalLogger } from '@foxford/logger'\n\nconst logger: HierarchicalLogger = log.getLogger('cli')\nlogger.setLevel('info')\n\nexport { logger }\n","import type * as FoxfordTools from '../types'\n\nexport abstract class AbstractAction<Options = FoxfordTools.ProcessInput[]> {\n constructor(protected program: FoxfordTools.Program) {}\n public abstract handle(options?: Options, params?: string[]): Promise<void>\n}\n","import type { AbstractAction } from './abstract.action'\nimport type * as FoxfordTools from '../types'\n\nexport abstract class AbstractCommand<Options = unknown> {\n constructor(protected action: AbstractAction<Options>) {}\n\n public abstract id: string\n\n public abstract load(program: FoxfordTools.Program): Promise<void> | void\n}\n","export enum Runner {\n NPM = 'NPM',\n PNPM = 'PNPM',\n FFMPEG = 'FFMPEG',\n TINYPNG = 'TINYPNG',\n NODE = 'NODE',\n PACKAGE_JSON_SCRIPT = 'PACKAGE_JSON_SCRIPT',\n}\n","import path from 'node:path'\n\nimport chalk from 'chalk'\nimport ffmpeg from 'fluent-ffmpeg'\n\nimport type { RunnerOptions } from './abstract.runner'\n\ninterface RunnerPayload {\n resource: string\n output?: string\n extraFlags?: string[]\n}\n\nexport class FFMpegRunner {\n options: RunnerOptions\n\n constructor(options?: RunnerOptions) {\n this.options = options ?? ({} as RunnerOptions)\n }\n\n public async run(payload: RunnerPayload): Promise<string | null> {\n return new Promise<null | string>((resolve, reject) => {\n ffmpeg(payload.resource)\n .output(payload.output ?? path.basename(payload.resource))\n .outputOptions([\n '-hide_banner',\n '-movflags +faststart',\n '-pix_fmt yuv420p',\n '-c:v libx264',\n '-preset:v veryslow',\n '-profile:v high',\n '-level 3.1',\n '-tune:v ssim',\n '-r 30',\n '-g 180',\n '-keyint_min 180',\n '-sc_threshold 0',\n '-max_muxing_queue_size 1024',\n // '-vf scale=1920:-1',\n '-f mp4',\n ...(payload.extraFlags ?? []),\n ])\n .on('end', function () {\n resolve(payload.resource)\n })\n .on('error', function (err) {\n console.log()\n console.log(chalk.redBright('Cannot process video: ' + err.message))\n reject(err)\n })\n .run()\n })\n }\n}\n","import { spawn, execSync } from 'child_process'\n\nimport chalk from 'chalk'\n\nimport type { RunnerOptions } from './abstract.runner'\nimport type { ChildProcess, SpawnOptions, ExecSyncOptionsWithStringEncoding } from 'child_process'\n\nexport class ShellRunner {\n protected binary: string\n protected options: RunnerOptions\n\n constructor(binary: string, options?: RunnerOptions) {\n this.binary = binary\n this.options = options ?? { cwd: process.cwd() }\n }\n\n public async run(\n command: string,\n args: string[] = [],\n options: SpawnOptions = {},\n collect = false\n ): Promise<unknown> {\n const spawnOptions: SpawnOptions = {\n cwd: this.options.cwd,\n stdio: collect ? 'pipe' : 'inherit',\n shell: true,\n ...options,\n }\n return new Promise((resolve, reject) => {\n const child: ChildProcess = spawn(`${this.binary}`, [command, ...args], spawnOptions)\n if (collect && child.stdout) {\n child.stdout.on('data', (data) => resolve(data.toString().replace(/\\r\\n|\\n/, '')))\n }\n child.on('close', (code) => {\n if (code === 0) {\n resolve(child.stdout)\n } else {\n console.error(chalk.red(`\\n Не удалось выполнить команду: ${this.binary} ${command} ${args} `))\n reject(code)\n }\n })\n })\n }\n\n public runSync(command: string): string {\n const spawnOptions: ExecSyncOptionsWithStringEncoding = {\n cwd: this.options.cwd,\n encoding: 'utf-8',\n }\n return execSync(`${this.binary} ${command}`, spawnOptions)\n }\n\n /**\n * @param command\n * @returns The entire command that will be ran when calling `run(command)`.\n */\n public rawFullCommand(command: string): string {\n const commandArgs: string[] = [command]\n return `${this.binary} ${commandArgs.join(' ')}`\n }\n}\n","import { ShellRunner } from './shell.runner'\n\nimport type { RunnerOptions } from './abstract.runner'\n\nexport class NodeRunner extends ShellRunner {\n constructor(options?: RunnerOptions) {\n super('node', options)\n }\n}\n","import { ShellRunner } from './shell.runner'\n\nimport type { RunnerOptions } from './abstract.runner'\n\nexport class NpmRunner extends ShellRunner {\n constructor(options?: RunnerOptions) {\n super('npm', options)\n }\n}\n","import { ShellRunner } from './shell.runner'\n\nimport type { RunnerOptions } from './abstract.runner'\n\nexport class PnpmRunner extends ShellRunner {\n constructor(options?: RunnerOptions) {\n super('pnpm', options)\n }\n}\n","import path from 'node:path'\n\nimport dotenv from 'dotenv'\nimport dotenvExpand from 'dotenv-expand'\nimport fs from 'fs-extra'\n\ntype Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T\n\nfunction truthy<T>(value: T): value is Truthy<T> {\n return !!value\n}\n\nexport function loadEnv(pkgPath: string) {\n const dotenvFiles = [\n Boolean(process.env.NODE_ENV) && path.join(pkgPath, `.env.${process.env.NODE_ENV}.local`),\n Boolean(process.env.NODE_ENV) && path.join(pkgPath, `.env.${process.env.NODE_ENV}`),\n Boolean(process.env.NODE_ENV) === false && path.join(pkgPath, `.env.development`),\n // Don't include `.env.local` for `test` environment\n // since normally you expect tests to produce the same\n // results for everyone\n process.env.NODE_ENV !== 'test' && path.join(pkgPath, `.env.local`),\n path.join(pkgPath, '.env'),\n ].filter(truthy)\n\n dotenvFiles.forEach((dotenvFile) => {\n if (fs.existsSync(dotenvFile)) {\n dotenvExpand.expand(\n dotenv.config({\n path: dotenvFile,\n })\n )\n }\n })\n\n return dotenvFiles\n}\n","import type { Chalk } from 'chalk'\n\nexport const label = (chalk: Chalk, label: string) => chalk.black(` ${label} `)\n","import chalk from 'chalk'\n\nimport { PnpmRunner } from './pnpm.runner'\nimport { loadEnv } from '../../helpers/env'\nimport { label } from '../../helpers/logger'\n\nimport type { RunnerOptions } from './abstract.runner'\nimport type * as FoxfordTools from '../../types'\n\nconst getLabel = (pkgName: string) => {\n return label(chalk.bgGreen, pkgName) + chalk.white(' ')\n}\n\nconst getFailLabel = (pkgName: string) => {\n return label(chalk.bgRed, pkgName) + chalk.white(' ')\n}\n\ninterface RunnerPayload {\n pkg: FoxfordTools.Package\n}\n\nexport class ScriptRunner {\n options: RunnerOptions\n\n constructor(options?: RunnerOptions) {\n this.options = options ?? ({} as RunnerOptions)\n }\n\n async run(script: string, { pkg }: RunnerPayload) {\n const label = getLabel(pkg.localName.toUpperCase())\n const failLabel = getFailLabel(pkg.localName.toUpperCase())\n console.log(label + chalk.blue(`Start ${chalk.white.underline(script)} process`))\n if (this.options.verbose) {\n console.log(label + chalk.blue(`Print typescript config`))\n console.log()\n }\n console.log(\n label + chalk.blue(`Env ${chalk.magenta('process.env.NODE_ENV')} is ${chalk.yellow(process.env.NODE_ENV)}`)\n )\n console.log(\n label +\n chalk.blue(`Env ${chalk.magenta('process.env.NODE_OPTIONS')} is ${chalk.yellow(process.env.NODE_OPTIONS)}`)\n )\n try {\n console.log(label + chalk.blue(`Load .env files`))\n const envFiles = loadEnv(pkg.path)\n console.log(JSON.stringify(envFiles, null, 2))\n } catch (err) {\n if (err instanceof Error) {\n console.log(failLabel + chalk.red(err.message))\n process.exit(1)\n }\n }\n\n const pnpmRunner = new PnpmRunner()\n\n pnpmRunner.run('run', [`--filter ${pkg.localName}`, script], {\n env: Object.assign(process.env, { FORCE_COLOR: '1' }),\n cwd: pkg.path,\n })\n }\n}\n","import chalk from 'chalk'\nimport tinify from 'tinify'\n\nimport type { RunnerOptions } from './abstract.runner'\n\ninterface TinyPngRunnerOptions extends RunnerOptions {\n token?: string\n}\n\ninterface RunnerPayload {\n resource: string\n output?: string\n extraFlags?: string[]\n}\n\nexport class TinyPngRunner {\n options: TinyPngRunnerOptions\n\n constructor(options?: TinyPngRunnerOptions) {\n this.options = options ?? ({} as TinyPngRunnerOptions)\n\n if (!options?.token) throw new Error('You must specify process.env.TINIFY_API_KEY env variable with tinify key')\n }\n\n public async run(payload: RunnerPayload): Promise<null | string> {\n const source = tinify.fromFile(payload.resource)\n tinify.key = this.options?.token ?? ''\n\n try {\n await source.toFile(payload.output ?? payload.resource)\n } catch (err) {\n if (err instanceof Error) console.log(chalk.redBright('Cannot compress resource with tinify: ' + err.message))\n }\n\n return payload.resource\n }\n\n public runSync(): string {\n throw new TypeError('this method not implemented')\n }\n}\n","import { FFMpegRunner } from './ffmpeg.runner'\nimport { NodeRunner } from './node.runner'\nimport { NpmRunner } from './npm.runner'\nimport { PnpmRunner } from './pnpm.runner'\nimport { Runner } from './runner'\nimport { ScriptRunner } from './script.runner'\nimport { TinyPngRunner } from './tinypng.runner'\n\nimport type { RunnerOptions } from './abstract.runner'\n\nconst RunnerMap = {\n [Runner.NPM]: NpmRunner,\n [Runner.PNPM]: PnpmRunner,\n [Runner.NODE]: NodeRunner,\n [Runner.PACKAGE_JSON_SCRIPT]: ScriptRunner,\n [Runner.FFMPEG]: FFMpegRunner,\n [Runner.TINYPNG]: TinyPngRunner,\n}\n\ntype RunnerTypeMap = typeof RunnerMap\n\nexport class RunnerFactory {\n public static create<R extends Runner>(\n runner: R,\n options?: ConstructorParameters<RunnerTypeMap[R]>[0]\n ): InstanceType<RunnerTypeMap[R]> {\n const RunnerClass = RunnerMap[runner]\n\n if (!RunnerClass) {\n throw new Error(`Unknown runner ${runner}`)\n }\n\n return new RunnerClass(options as RunnerOptions) as InstanceType<RunnerTypeMap[R]>\n }\n}\n","export * from './runner'\nexport * from './runner.factory'\nexport type * from './abstract.runner'\n","import path from 'node:path'\n\nimport { Command } from 'commander'\nimport dotenv from 'dotenv'\nimport { existsSync } from 'fs-extra'\nimport { $, fs } from 'zx'\n\nimport { Runner, RunnerFactory } from '../lib/runners/index'\nimport { logger } from '../logger'\n\nimport type { AbstractCommand } from './abstract.command'\nimport type * as FoxfordTools from '../types'\n\nexport class Program extends Command implements FoxfordTools.Program {\n packageManager: string\n rootPath: string\n logger = logger\n private commandList: Array<AbstractCommand> = []\n\n constructor(packageManager: string, rootPath: string) {\n super()\n\n $.verbose = false\n\n const dotenvFiles = [\n path.resolve('./.env.local'),\n path.resolve('./.env'),\n path.resolve(__dirname, '../.env.local'),\n path.resolve(__dirname, '../.env'),\n ]\n\n dotenvFiles.forEach((dotenvFile) => {\n if (existsSync(dotenvFile)) {\n dotenv.config({\n path: dotenvFile,\n })\n }\n })\n\n this.packageManager = packageManager\n this.rootPath = rootPath\n }\n\n static async init(): Promise<Program> {\n const detector = await import('package-manager-detector')\n\n let packageManager: string = 'npm'\n let rootPath: string = process.cwd()\n\n const detectResult = await detector.detect({\n strategies: ['packageManager-field', 'devEngines-field', 'lockfile', 'install-metadata'],\n })\n\n if (detectResult) {\n packageManager = detectResult.name\n logger.info(`Определен менеджер пакетов: \"${packageManager}\"`)\n } else {\n logger.warn(`Невозможно определить менеджер пакетов. Дефолт: \"${packageManager}\"`)\n }\n\n if (packageManager === 'npm') {\n rootPath = path.dirname(RunnerFactory.create(Runner.NPM).runSync('root'))\n } else if (packageManager === 'pnpm') {\n rootPath = path.dirname(RunnerFactory.create(Runner.PNPM).runSync('root'))\n }\n\n return new Program(packageManager, rootPath)\n }\n\n public async getPluginPaths(): Promise<Array<{ path: string; pkgJson: FoxfordTools.PackageJson }>> {\n const nodeModulesPlugins = []\n const readPkgUp = await import('read-package-up')\n const result = await readPkgUp.readPackageUp({ cwd: this.rootPath })\n\n if (!result) {\n throw new Error('Unable to find package.json')\n }\n const { packageJson } = result\n\n const dependencies = { ...packageJson.dependencies, ...packageJson.devDependencies }\n\n for (const [name] of Object.entries(dependencies)) {\n // Игнорируем пакеты с типами и другие специфические пакеты\n if (this.shouldSkipPackage(name)) continue\n if (name === packageJson.name) continue\n\n let packageDir: string | null = null\n\n // Попытка найти пакет с помощью require.resolve\n try {\n const packagePath = require.resolve(name, { paths: [this.rootPath] })\n packageDir = path.dirname(packagePath)\n } catch {\n // logger.debug(`Error resolving package ${name} with require.resolve:`, error)\n }\n\n // Fallback: если require.resolve не сработал, пробуем найти пакет вручную\n if (!packageDir) {\n try {\n packageDir = path.join(this.rootPath, 'node_modules', name)\n if (!(await fs.pathExists(packageDir))) {\n logger.debug(`Package directory not found for ${name}`)\n continue\n }\n } catch (error) {\n logger.debug(`Error finding package directory for ${name}:`, error)\n continue\n }\n }\n\n // Теперь у нас есть packageDir, пробуем прочитать package.json\n try {\n const result = await readPkgUp.readPackageUp({ cwd: packageDir })\n if (!result) {\n logger.debug(`Unable to find package.json for ${name}`)\n continue\n }\n\n const { packageJson, path: packageJsonPath } = result\n\n if (packageJson.keywords && packageJson.keywords.includes('foxford-cli-plugin')) {\n nodeModulesPlugins.push({\n path: packageJsonPath,\n pkgJson: packageJson as FoxfordTools.PackageJson,\n })\n }\n } catch (error) {\n logger.debug(`Error reading package.json for ${name}:`, error)\n }\n }\n\n return nodeModulesPlugins\n }\n\n private shouldSkipPackage(name: string): boolean {\n return (\n name.startsWith('@types/') ||\n name.startsWith('@foxford/types') ||\n name === '@foxford/cli' ||\n name === 'typescript' ||\n name.includes('eslint') ||\n name.includes('@babel') ||\n name.includes('react')\n )\n }\n\n defineCommand(command: AbstractCommand) {\n this.commandList.push(command)\n }\n\n getCommands() {\n return this.commandList\n }\n}\n","export * from './abstract.action'\nexport * from './abstract.command'\nexport * from './program'\n","export const BANNER = `\n·▄▄▄ ▐▄• ▄ ·▄▄▄ ▄▄▄ ·▄▄▄▄ \n▐▄▄·▪ █▌█▌▪▐▄▄·▪ ▀▄ █·██▪ ██ \n██▪ ▄█▀▄ ·██· ██▪ ▄█▀▄ ▐▀▀▄ ▐█· ▐█▌\n██▌.▐█▌.▐▌▪▐█·█▌██▌.▐█▌.▐▌▐█•█▌██. ██ \n▀▀▀ ▀█▄▀▪•▀▀ ▀▀▀▀▀ ▀█▄▀▪.▀ ▀▀▀▀▀▀• \n`\n","import chalk from 'chalk'\n\nexport const ERROR_PREFIX = chalk.bgRgb(210, 0, 75).bold.rgb(0, 0, 0)(' Error ')\nexport const INFO_PREFIX = chalk.bgRgb(60, 190, 100).bold.rgb(0, 0, 0)(' Info ')\n","export * from './banner'\nexport * from './prefixes'\n","import { Runner, RunnerFactory } from '../../lib/runners'\nimport { AbstractAction } from '../../program'\n\nimport type { CodemodOptions } from './types'\n\nexport class CodemodAction extends AbstractAction<CodemodOptions> {\n public async handle(options: CodemodOptions) {\n const flags = []\n\n if (options.dry) flags.push('--dry')\n if (options.verbose) flags.push('--verbose')\n\n console.log('options', options)\n console.log('flags', flags)\n console.log('extra', options.extra)\n\n const runner = RunnerFactory.create(Runner.NODE, {\n verbose: options.verbose,\n })\n\n runner.run('', [], {\n cwd: process.cwd(),\n })\n\n return\n }\n}\n","export enum Collection {\n FOX_CODEMODS = '@foxford/codemods',\n}\n","import type * as FoxfordTools from '../../types'\n\nexport interface CollectionItem {\n name: string\n alias: string\n description: string\n}\n\nexport abstract class AbstractCollection {\n constructor(protected collection: string) {}\n\n public async execute(_name: string, _inputs: FoxfordTools.ProcessInput[], _extraFlags?: string[], _cwd?: string) {\n return\n }\n\n public abstract getItems(): Promise<CollectionItem[]>\n}\n","/**\n *\n * @param str\n * @returns formated string\n * @description normalizes input to supported path and file name format.\n * Changes camelCase strings to kebab-case, replaces spaces with dash and keeps underscores.\n */\nexport function normalizeToKebabOrSnakeCase(str: string) {\n const STRING_DASHERIZE_REGEXP = /\\s/g\n const STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g\n return str.replace(STRING_DECAMELIZE_REGEXP, '$1-$2').toLowerCase().replace(STRING_DASHERIZE_REGEXP, '-')\n}\n","import path from 'node:path'\n\nimport chalk from 'chalk'\nimport fs from 'fs-extra'\n\nimport { AbstractCollection } from './abstract.collection'\nimport { Collection } from './collection'\nimport { normalizeToKebabOrSnakeCase } from '../utils/formatting'\n\nimport type { CollectionItem } from './abstract.collection'\n\ninterface Codemod extends CollectionItem {\n runner: string\n}\n\nexport class FoxCodemodCollection extends AbstractCollection {\n private codemods: Codemod[] = []\n private loaded = false\n\n constructor() {\n super(Collection.FOX_CODEMODS)\n }\n\n private async load() {\n const pathCollection = require.resolve(Collection.FOX_CODEMODS)\n\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const pkgJson = require(path.join(path.dirname(pathCollection), 'package.json'))\n\n if (!pkgJson.codemods) {\n console.log(\n chalk.red('May be you must specify \"codemods\" section in your package.json with path to collection.json')\n )\n process.exit(1)\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const collectionPath = path.join(path.dirname(pathCollection), pkgJson.codemods ?? '')\n\n if (!fs.existsSync(collectionPath)) {\n console.log(\n chalk.red('Collection path specified in \"codemods\" section in your package.json is not valid: ', collectionPath)\n )\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const collectionJson = require(collectionPath)\n this.codemods = collectionJson.codemods.map((codemod: Codemod) => ({\n ...codemod,\n name: normalizeToKebabOrSnakeCase(codemod.name),\n }))\n } catch {\n console.log(chalk.red('Collection json is not valid'))\n }\n\n this.loaded = true\n }\n\n public async getItems(): Promise<Codemod[]> {\n if (!this.loaded) {\n try {\n await this.load()\n } catch {\n //\n }\n }\n return this.codemods\n }\n}\n","// import { Runner, RunnerFactory } from '../runners'\n// import { SchematicRunner } from '../runners/schematic.runner'\nimport { Collection } from './collection'\nimport { FoxCodemodCollection } from './fox-codemod.collection'\n\nimport type { AbstractCollection } from './abstract.collection'\n\nexport class CollectionFactory {\n public static create(collection: Collection | string): AbstractCollection {\n // const schematicRunner = RunnerFactory.create(Runner.SCHEMATIC) as SchematicRunner\n\n if (collection === Collection.FOX_CODEMODS) {\n return new FoxCodemodCollection()\n }\n\n return new FoxCodemodCollection()\n }\n}\n","export * from './collection.factory'\nexport * from './collection'\nexport * from './abstract.collection'\n","import chalk from 'chalk'\nimport Table from 'cli-table3'\nimport { Option, Command } from 'commander'\n\nimport { Collection, CollectionFactory } from '../../lib/collection'\nimport { AbstractCommand } from '../../program'\n\nimport type { CodemodOptions } from './types'\nimport type { CollectionItem, AbstractCollection } from '../../lib/collection'\nimport type * as FoxfordTools from '../../types'\n\nexport class CodemodCommand extends AbstractCommand<CodemodOptions> {\n id = 'codemod'\n\n private items: CollectionItem[] = []\n\n private buildRunCommand() {\n const verbose = new Option('--verbose', 'Вывод данных')\n const dry = new Option('--dry', 'Прогон без изменений')\n\n const run = new Command('run')\n\n run\n .description('Запусить кодмод с именем <name>')\n .argument('<name>', 'Имя кодмода (codemod --list)')\n .argument('<input...>', 'Glob паттерн файлов для которых будет применим кодмод')\n .addOption(verbose)\n .addOption(dry)\n .allowUnknownOption(true)\n .showHelpAfterError()\n .action(async (name: string, input: string[], options: CodemodOptions, command: FoxfordTools.Program) => {\n // console.log('extra', extra)\n if (!this.items.filter((item) => item.name === name)) {\n console.error('Name not found')\n return\n }\n\n const unknownOptions = command.parseOptions(command.args)?.unknown ?? []\n\n const paths = input.filter((item) => !unknownOptions.includes(item))\n\n if (unknownOptions.length) {\n options.extra = unknownOptions\n }\n\n options.paths = paths\n\n await this.action.handle(options)\n })\n\n return run\n }\n\n private buildListCommand() {\n const run = new Command('list')\n\n run\n .description('Вывести полный список доступных кодмодов')\n .showHelpAfterError()\n .action(async () => {\n const list = await this.getCollectionItems()\n console.log(\n `Доступные кодмоды из ${chalk.bold(this.getCollection())}:\\n` + this.buildSchematicsListAsTable(list)\n )\n })\n\n return run\n }\n\n private async getCollectionItems() {\n const list = await this.getItems(this.getCollection())\n this.items = list\n return list\n }\n\n public async load(program: FoxfordTools.Program) {\n const codemod = new Command('codemod')\n codemod\n .addHelpText(\n 'before',\n `\\n---------------------------------------\\n${chalk.greenBright(\n '🛠 Codemod manager'\n )}\\n---------------------------------------\\n`\n )\n .usage('<command>')\n .helpOption(false)\n // .allowUnknownOption()\n .description(await this.buildDescription())\n .summary('Управление кодмодами')\n .addCommand(this.buildRunCommand())\n .addCommand(this.buildListCommand())\n .action(async (options) => {\n if (!options || Object.keys(options).length === 0) {\n codemod.outputHelp()\n return\n }\n\n await this.action.handle(options)\n })\n\n program.addCommand(codemod)\n }\n\n private buildSchematicsListAsTable(items: CollectionItem[]): string {\n const leftMargin = ' '\n const tableConfig = {\n head: ['name', 'description'],\n chars: {\n left: leftMargin.concat('│'),\n 'top-left': leftMargin.concat('┌'),\n 'bottom-left': leftMargin.concat('└'),\n mid: '',\n 'left-mid': '',\n 'mid-mid': '',\n 'right-mid': '',\n },\n }\n const table: Table.Table = new Table(tableConfig)\n for (const item of items) {\n table.push([chalk.green(item.name), item.description])\n }\n\n return table.toString()\n }\n\n private getCollection(): string {\n return Collection.FOX_CODEMODS\n }\n\n private async getItems(collection: string): Promise<CollectionItem[]> {\n const abstractCollection: AbstractCollection = CollectionFactory.create(collection)\n this.items = await abstractCollection.getItems()\n return this.items\n }\n\n private async buildDescription(): Promise<string> {\n const list = await this.getCollectionItems()\n const shortList = list.slice(0, 20)\n return (\n `Доступные кодмоды из ${chalk.bold(this.getCollection())}:\\n` +\n this.buildSchematicsListAsTable(shortList) +\n chalk.yellowBright(`\\n\\nЧтобы увидеть полный список кодмодов используйте команду `) +\n chalk.greenBright(`codemod list`)\n )\n }\n}\n","import { CodemodAction } from './action'\nimport { CodemodCommand } from './command'\n\nimport type * as FoxfordTools from '../../types'\n\nexport default (program: FoxfordTools.Program) => {\n program.defineCommand(new CodemodCommand(new CodemodAction(program)))\n}\n","import { fs, path } from 'zx'\n\nimport { logger } from '../../../logger'\n\nimport type * as FoxfordTools from '../../../types'\nimport type { DeployOptions } from '../types'\nimport type { HierarchicalLogger } from '@foxford/logger'\n\n/**\n *\n * Методы провайдера не выбрасывают ошибки.\n *\n * Обработка ошибок должна происходить в методах классов, которые наследуются от класса провайдера.\n */\nexport abstract class DeployProvider {\n cwd: string\n logger: HierarchicalLogger\n buildDir: string\n\n constructor(public providerName: string) {\n this.cwd = process.cwd()\n this.logger = logger.getLogger(providerName)\n this.buildDir = './build'\n }\n\n /**\n * Генерирует строку версии пакета на основе цели и SHA коммита.\n *\n * @param version - Версия пакета из package.json\n * @param sha - Короткий SHA коммита, используемый в строке бета-версии.\n * @returns Строка, представляющая версию пакета.\n * Для цели 'latest' возвращает текущую версию пакета.\n * Для цели 'beta' возвращает строку версии в формате:\n * \"<текущая_версия>-beta-<sha>-<текущая_дата>\"\n */\n public getBetaPackageVersion(version: string, sha: string): string {\n const now = new Date()\n const year = now.getFullYear()\n const month = String(now.getMonth() + 1).padStart(2, '0')\n const day = String(now.getDate()).padStart(2, '0')\n const date = `${year}${month}${day}`\n return `${version}-beta-${sha}-${date}`\n }\n\n /**\n * Читает и парсит файл package.json из текущей рабочей директории.\n *\n * Эта функция пытается найти и прочитать файл package.json в текущей\n * рабочей директории. Если файл найден, он читается синхронно и парсится как JSON.\n *\n * @returns Распарсенное содержимое файла package.json или null.\n */\n public readPackageJson(pkgPath: string): FoxfordTools.PackageJson | null {\n const packageJsonPath = path.resolve(pkgPath, 'package.json')\n\n if (!fs.existsSync(packageJsonPath)) {\n return null\n }\n\n try {\n const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8')\n return JSON.parse(packageJsonContent)\n } catch (error) {\n this.logger.error(`Ошибка при чтении или парсинге package.json: ${(error as Error).message}`)\n return null\n }\n }\n\n public abstract deploy(params: Omit<DeployOptions, 'provider'>): Promise<void>\n}\n","import { fs, $, path, cd } from 'zx'\n\nimport { DeployProvider } from './abstract.provider'\nimport { logger } from '../../../logger'\n\nimport type * as FoxfordTools from '../../../types'\nimport type { DeployNpmOptions } from '../types'\n\nfunction sleep(ms: number) {\n if (process.env.NODE_ENV === 'test') {\n return Promise.resolve()\n }\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport class NpmDeploy extends DeployProvider {\n versionLists: string[] = []\n dry: string = ''\n noGitChecks: string = ''\n\n constructor() {\n super('npm')\n }\n\n /**\n * Возвращает сообщение об устаревании с текущим SHA коммита.\n *\n * @returns Промис, который разрешается строкой сообщения об устаревании.\n */\n private async getDeprecationMessage(): Promise<string> {\n const commitSha = (await $`git rev-parse --short HEAD`).toString().trim()\n return `deprecated by ${commitSha}`\n }\n\n /**\n * Создает или обновляет файл .npmrc с токеном аутентификации для реестра npm.\n *\n * Этот метод добавляет конфигурацию аутентификации в файл .npmrc,\n * обеспечивая безопасный доступ к реестру npm для публикации пакетов.\n * Он использует переменную окружения NPM_TOKEN для аутентификации.\n *\n * @returns Промис, который разрешается, когда файл .npmrc успешно обновлен.\n * @throws Выбрасывает ошибку, если операция с файлом не удалась или если NPM_TOKEN не установлен.\n */\n private async touchNpmrc(): Promise<void> {\n const authStr = '//registry.npmjs.org/:_authToken=${NPM_TOKEN}'\n await $`echo ${authStr} >> .npmrc`\n }\n\n /**\n * Фильтрует устаревшие версии из заданного списка версий пакета.\n *\n * Этот метод проверяет каждую версию в реестре npm, чтобы определить, является ли она устаревшей.\n * Он использует команду `npm view` для получения статуса устаревания каждой версии.\n *\n * @param pkgName - Имя пакета в регистре.\n * @param versions - Массив строк версий для проверки на устаревание.\n * @returns Промис, который разрешается в массив строк версий, которые не являются устаревшими.\n */\n private async getNotDeprecatedVersions(pkgName: string, versions: string[]): Promise<string[]> {\n const notDeprecatedVersions = []\n for (const ver of versions) {\n const cmd = ['npm', 'view', `${pkgName}@${ver}`, 'deprecated']\n const result = await $`${cmd}`\n\n if (!result.toString().trim().includes('deprecated by')) {\n notDeprecatedVersions.push(ver)\n }\n }\n return notDeprecatedVersions\n }\n\n /**\n * Получает список всех версий текущего пакета из реестра npm.\n *\n * Этот метод выполняет команду npm для получения всех версий пакета,\n * указанного в файле package.json. Затем он парсит JSON-ответ\n * и сохраняет результат в свойстве `versionLists` класса.\n *\n * @param pkgName - Имя пакета в регистре.\n *\n * @returns Промис, который разрешается в массив строк, где каждая строка\n * представляет версию пакета. Если парсинг не удался, возвращает\n * пустой массив.\n *\n * @throws Записывает ошибку в консоль, если парсинг JSON не удался, но не\n * выбрасывает исключение.\n */\n private async getVersionsList(pkgName: string): Promise<string[]> {\n logger.info('Getting versions list...')\n const outputProcess = await $`npm view ${pkgName} versions --json`\n const versionsListPo = outputProcess.toString()\n logger.info('Versions list recieved', versionsListPo)\n\n try {\n const parsed = JSON.parse(versionsListPo)\n\n if (Array.isArray(parsed)) {\n return parsed\n } else {\n // Если это не массив, но валидный JSON (например, строка), возвращаем её в массиве\n return [parsed]\n }\n } catch {\n logger.error('Error parsing versions list')\n return []\n }\n }\n\n /**\n * Получает список бэта версий на текущую версию из списка всех версий.\n *\n * @param currentVersion - Строка текущей версии для сравнения.\n * @returns Массив строк похожих версий.\n */\n private getBetaVersions(currentVersion: string): string[] {\n return this.versionLists.filter((ver) => {\n if (!ver.includes('beta')) return false\n if (ver === currentVersion) return false\n\n const semverFromVersion = currentVersion.match(/^[0-9]{1,9}.[0-9]{1,9}.[0-9]{1,9}/gi)\n if (!semverFromVersion) return false\n\n const matchedVersion = semverFromVersion[0] ?? null\n if (!matchedVersion) return false\n\n return ver.includes(matchedVersion)\n })\n }\n\n /**\n * Помечает предыдущие похожие версии пакета как устаревшие.\n *\n * Этот метод находит похожие версии на текущую версию, фильтрует уже устаревшие версии,\n * а затем помечает оставшиеся версии как устаревшие, используя команду npm deprecate.\n *\n * @param packageJson - package.json пакета.\n * @returns Промис, который разрешается, когда все похожие, не устаревшие версии были помечены как устаревшие или была попытка их пометить.\n */\n private async deprecatePrevBetaVersions(packageJson: FoxfordTools.PackageJson): Promise<void> {\n logger.info('Отмечаем предыдущие бэта версии как deprecated')\n\n this.versionLists = await this.getVersionsList(packageJson.name)\n const betaVersions = this.getBetaVersions(packageJson.version)\n logger.info('Найдены beta версии:', betaVersions)\n\n const notDeprecatedVersions = await this.getNotDeprecatedVersions(packageJson.name, betaVersions)\n logger.info('Beta версии без deprecated:', notDeprecatedVersions)\n\n const deprecationMessage = await this.getDeprecationMessage()\n\n for (const ver of notDeprecatedVersions) {\n await sleep(500)\n try {\n if (!this.dry) {\n const cmd = ['npm', 'deprecate', `${packageJson.name}@${ver}`, deprecationMessage].filter(\n (item) => item !== ''\n )\n logger.info('Помечаем версию как deprecated:', cmd)\n await $`${cmd}`\n }\n } catch (error) {\n logger.error(error)\n continue\n }\n }\n }\n\n /**\n * Удаляет бета-версии пакета, которые похожи на текущую версию.\n *\n * Этот метод получает все версии пакета, находит похожие версии на текущую,\n * и удаляет те, которые являются бета-версиями. Он использует команду npm unpublish с флагом --force.\n *\n * @param packageJson - package.json пакета.\n * @returns Промис, который разрешается, когда все бета-версии были удалены или была попытка их удалить.\n * @throws Записывает ошибки в консоль, если удаление не удалось для какой-либо версии, но продолжает со следующей версией.\n */\n private async unpublishBetaVersions(packageJson: FoxfordTools.PackageJson): Promise<void> {\n logger.info('Разпубликовываем beta версии')\n this.versionLists = await this.getVersionsList(packageJson.name)\n logger.info('Список версий: ', this.versionLists)\n\n const betaVersions = this.getBetaVersions(packageJson.version)\n logger.info('Список для разпубликации и депрекейта: ', betaVersions)\n\n const deprecationMessage = await this.getDeprecationMessage()\n\n for (const ver of betaVersions) {\n if (!ver.includes('beta')) continue\n\n try {\n const deprecate = ['npm', 'deprecate', `${packageJson.name}@${ver}`, deprecationMessage].filter(\n (item) => item !== ''\n )\n logger.info('Помечаем версию как deprecated:', deprecate)\n await $`${deprecate}`\n\n const unpublish = ['npm', 'unpublish', `${packageJson.name}@${ver}`, '--force', this.dry].filter(\n (item) => item !== ''\n )\n logger.info('Разпубликовывем версию:', unpublish)\n await $`${unpublish}`\n } catch (error) {\n logger.error(error)\n continue\n }\n\n await sleep(500)\n }\n }\n\n /**\n * Разворачивает пакет в реестре npm.\n *\n * Этот метод обрабатывает весь процесс развертывания, включая управление версиями,\n * обновление package.json, публикацию npm и пост-публикационные действия, такие как пометка\n * предыдущих версий как устаревших или удаление бета-версий.\n *\n * @param params - Параметры развертывания.\n * @param params.dry - Если true, выполняет пробный запуск без фактической публикации.\n * @param params.target - Цель развертывания, либо 'beta', либо 'latest'. По умолчанию 'beta'.\n *\n * @throws Завершает процесс, если директория сборки не найдена.\n * @returns Промис, который разрешается, когда процесс развертывания завершен.\n */\n async deploy(params: DeployNpmOptions) {\n logger.info('Начинаем процесс деплоя в NPM', params)\n const localDir = path.join(process.cwd(), params.localDir ?? this.buildDir)\n\n if (!fs.existsSync(localDir)) {\n logger.error(`Директория \"${localDir}\" не существует`)\n process.exit(1)\n }\n\n const packageJson = this.readPackageJson(localDir)\n\n if (!packageJson) {\n logger.error('package.json не найден в текущей директории')\n process.exit(1)\n }\n\n if (params.dry === true) this.dry = '--dry-run'\n if (params.skipGitChecks) this.noGitChecks = '--no-git-checks'\n\n logger.info('Меняем директорию на', localDir)\n cd(localDir)\n\n logger.info('Получаем sha коммита')\n const commitSha = (await $`git rev-parse --short HEAD`).toString().replace('\\n', '')\n logger.info('Коммит:', commitSha)\n\n const target = params.target ?? 'beta'\n logger.info('Целевая версия:', target)\n\n await this.touchNpmrc()\n logger.info('Создаем .npmrc')\n\n if (target === 'beta') {\n packageJson.version = packageJson.version.includes('beta')\n ? packageJson.version\n : this.getBetaPackageVersion(packageJson.version, commitSha)\n }\n\n packageJson.sha = commitSha\n logger.info('Версия пакета:', packageJson.version)\n\n if (packageJson.scripts && packageJson.scripts.postinstall) {\n packageJson.scripts = {\n postinstall: packageJson.scripts.postinstall,\n }\n } else {\n packageJson.scripts = {}\n }\n\n if (packageJson.devDependencies) {\n delete packageJson.devDependencies\n }\n\n logger.info('Публикуемый package.json', packageJson)\n\n await fs.writeJson('package.json', packageJson, {\n spaces: 2,\n })\n\n const cmd = [\n params.packageManager ?? 'npm',\n 'publish',\n '--access=public',\n `--tag=${target}`,\n this.dry,\n this.noGitChecks,\n ].filter((item) => item !== '')\n logger.info('Публикуем с аргументами:', cmd)\n\n await $`${cmd}`\n\n if (target === 'beta') {\n await this.deprecatePrevBetaVersions(packageJson)\n } else {\n await this.unpublishBetaVersions(packageJson)\n }\n }\n}\n","import { fs, $, path } from 'zx'\n\nimport { DeployProvider } from './abstract.provider'\nimport { logger } from '../../../logger'\n\nimport type { DeployS3Options } from '../types'\n\nexport class S3Deploy extends DeployProvider {\n constructor() {\n super('s3')\n }\n\n /**\n * Определяет цель развертывания на основе текущей ветки Git.\n *\n * @returns {'latest' | 'beta'} 'latest' для ветки master, 'beta' для всех остальных.\n */\n getTarget(): 'latest' | 'beta' {\n const { GITHUB_REF_NAME } = process.env\n\n if (GITHUB_REF_NAME === 'master') return 'latest'\n\n return 'beta'\n }\n\n /**\n * Формирует путь для ресурсов в хранилище.\n *\n * @param segments - Cегменты пути.\n * @returns Путь для цели развертывания.\n */\n getRemotePath(...segments: (string | undefined)[]): string {\n return segments\n .filter(Boolean)\n .join(path.posix.sep)\n .replace(/[/\\\\]+/g, path.posix.sep)\n .replace(/^\\//, '')\n }\n\n /**\n * Выполняет команду rclone copy.\n *\n * @param localDir - Путь до локальных ресурсов.\n * @param bucket - Имя бакета в хранилище.\n * @param remoteDir - Удаленный путь для загрузки ресурсов.\n * @param flags - Дополнительные аргументы.\n * @returns Результат выполнения команды.\n */\n async exec(localDir: string, bucket: string, remoteDir?: string, flags?: string[]): Promise<void> {\n const cmd = ['rclone', 'copy', localDir]\n\n if (remoteDir) {\n cmd.push(`myremote:${bucket}/${remoteDir}`)\n } else {\n cmd.push(`myremote:${bucket}/`)\n }\n\n if (flags) {\n cmd.push(...flags)\n }\n\n logger.info('Запуск деплоя:', cmd)\n\n await $`${cmd}`\n\n logger.info('Деплой успешно завершен:', cmd)\n }\n\n /**\n * Выполняет процесс развертывания в хранилище по S3.\n *\n * Этот метод копирует файлы из локальной директории в удаленные директории хранилища,\n * используя rclone. Он обрабатывает как версионные, так и целевые пути.\n *\n * @param {DeployS3Options} params - Параметры развертывания.\n * @param {string} [params.localDir] - Локальная директория для копирования (по умолчанию this.buildDir).\n * @param {string} [params.bucket] - Имя бакета хранилища (по умолчанию из env или 'dist.ngcdn.ru').\n * @param {string} [params.packageName] - Имя пакета (по умолчанию из package.json).\n * @param {string} [params.endpoint] - Endpoint хранилища.\n * @param {string} [params.region] - Регион хранилища.\n * @param {'latest' | 'beta'} [params.target] - Цель развертывания (по умолчанию определяется автоматически).\n * @param {boolean} [params.dry] - Если true, выполняет пробный запуск без фактической загрузки.\n *\n * @throws Завершает процесс, если локальная директория не существует.\n */\n async deploy(params: DeployS3Options) {\n logger.info('Начинаем процесс деплоя в хранилище', params)\n const { SELECTEL_USER, SELECTEL_PASSWORD, BUCKET } = process.env\n\n if (!SELECTEL_USER || !SELECTEL_PASSWORD) {\n logger.warn('Не указаны переменные окружения SELECTEL_USER или SELECTEL_PASSWORD')\n process.exit(1)\n }\n\n const localDir = path.join(process.cwd(), params.localDir ?? this.buildDir)\n\n if (!fs.existsSync(localDir)) {\n logger.error(`Директория \"${localDir}\" не существует`)\n process.exit(1)\n }\n\n const bucket = params.bucket ?? BUCKET\n\n if (!bucket) {\n logger.error('Бакет не определен')\n process.exit(1)\n }\n\n logger.info('Бакет:', bucket)\n\n const packageJson = this.readPackageJson(localDir)\n\n const remoteDirs = []\n\n if (packageJson) {\n const commitSha = (await $`git rev-parse --short HEAD`).toString().replace('\\n', '')\n logger.info('Коммит:', commitSha)\n\n if (params.packageName) {\n packageJson.name = params.packageName\n }\n\n const target = params.target ?? this.getTarget()\n logger.info('Целевая версия:', target)\n\n if (target === 'beta') {\n packageJson.version = packageJson.version.includes('beta')\n ? packageJson.version\n : this.getBetaPackageVersion(packageJson.version, commitSha)\n }\n logger.info('Версия пакета:', packageJson.version)\n\n packageJson.sha = commitSha\n\n if (packageJson.scripts && packageJson.scripts.postinstall) {\n packageJson.scripts = {\n postinstall: packageJson.scripts.postinstall,\n }\n } else {\n packageJson.scripts = {}\n }\n\n logger.info('Публикуемый package.json', packageJson)\n\n await fs.writeJson(path.resolve(localDir, 'package.json'), packageJson, {\n spaces: 2,\n })\n\n remoteDirs.push(\n this.getRemotePath(params.remoteDir, packageJson.name, packageJson.version),\n this.getRemotePath(params.remoteDir, packageJson.name, target)\n )\n } else {\n logger.warn('package.json не найден в текущей директории')\n\n if (params.remoteDir) {\n remoteDirs.push(params.remoteDir)\n }\n }\n\n logger.info('Удаленные директории:', remoteDirs)\n\n $.env.RCLONE_CONFIG_MYREMOTE_TYPE = 's3'\n $.env.RCLONE_CONFIG_MYREMOTE_PROVIDER = 'Other'\n $.env.RCLONE_CONFIG_MYREMOTE_ACCESS_KEY_ID = SELECTEL_USER\n $.env.RCLONE_CONFIG_MYREMOTE_SECRET_ACCESS_KEY = SELECTEL_PASSWORD\n $.env.RCLONE_CONFIG_MYREMOTE_ENDPOINT = params.endpoint ?? 's3.ru-1.storage.selcloud.ru'\n $.env.RCLONE_CONFIG_MYREMOTE_REGION = params.region ?? 'ru-1'\n\n const execFlags = ['--progress']\n\n if (params.dry) {\n execFlags.push('--dry-run')\n }\n\n if (!remoteDirs.length) {\n await this.exec(localDir, bucket, undefined, execFlags)\n process.exit(0)\n }\n\n await Promise.all(\n remoteDirs.map((remoteDir) => {\n return this.exec(localDir, bucket, remoteDir, execFlags)\n })\n )\n }\n}\n","import { AbstractAction } from '../../program'\nimport { NpmDeploy } from './providers/npm'\nimport { S3Deploy } from './providers/s3'\n\nimport type { DeployProvider } from './providers/abstract.provider'\nimport type { DeployOptions } from './types'\n\nexport class DeployAction extends AbstractAction<DeployOptions> {\n public async handle(params: DeployOptions) {\n let provider: DeployProvider\n\n switch (params.provider) {\n case 'npm':\n provider = new NpmDeploy()\n break\n case 's3':\n provider = new S3Deploy()\n break\n default:\n throw new Error(`Unsupported deploy provider: ${params.provider}`)\n }\n\n await provider.deploy(params)\n }\n}\n","import { Command, Option } from 'commander'\n\nimport { AbstractCommand } from '../../program'\n\nimport type { DeployOptions } from './types'\nimport type * as FoxfordTools from '../../types'\n\nexport class DeployCommand extends AbstractCommand<DeployOptions> {\n id = 'deploy'\n public async load(program: FoxfordTools.Program) {\n const deployCommand = new Command('deploy').description('Задеплоить пакет')\n\n const targetOption = new Option('--target <target>', 'Релиз beta или latest')\n .choices(['beta', 'latest'])\n .default('beta')\n const localDirOption = new Option('--local-dir <path>', 'Из какой локальной директории загрузить содержимое')\n const dryOption = new Option('--dry', 'Запуск без выполнения операции').default(false)\n\n const s3Command = new Command('s3')\n .description('Деплой пакета по s3 в хранилище')\n .option('--bucket <name>', 'В какой бакет загрузить пакет')\n .option('--package-name <name>', 'Имя пакета вместо packageJson.name')\n .option('--remote-dir <dir>', 'Целевая директория в хранилище')\n .action(async (params) => {\n await this.action.handle({ ...params, provider: 's3' })\n })\n\n s3Command.addOption(targetOption)\n s3Command.addOption(localDirOption)\n s3Command.addOption(dryOption)\n\n const npmCommand = new Command('npm')\n .description('Деплой пакета в npm')\n .option('--skip-git-checks', 'Отключение git проверок при публикации')\n .action(async (params) => {\n await this.action.handle({ ...params, provider: 'npm', packageManager: program.packageManager })\n })\n\n npmCommand.addOption(targetOption)\n npmCommand.addOption(localDirOption)\n npmCommand.addOption(dryOption)\n\n deployCommand.addCommand(s3Command)\n deployCommand.addCommand(npmCommand)\n\n program.addCommand(deployCommand)\n }\n}\n","import { DeployAction } from './action'\nimport { DeployCommand } from './command'\n\nimport type * as FoxfordTools from '../../types'\n\nexport default (program: FoxfordTools.Program) => {\n program.defineCommand(new DeployCommand(new DeployAction(program)))\n}\n","import { platform, release } from 'os'\n\nimport chalk from 'chalk'\nimport { filesize } from 'filesize'\nimport osName from 'os-name'\nimport si from 'systeminformation'\nimport { $ } from 'zx'\n\nimport { BANNER } from '../../lib/ui'\nimport { AbstractAction } from '../../program'\n\nexport class InfoAction extends AbstractAction {\n public async handle() {\n this.displayBanner()\n await this.displaySystemInformation()\n }\n\n private displayBanner() {\n console.info(chalk.red(BANNER))\n }\n\n private async displaySystemInformation(): Promise<void> {\n console.info(chalk.green('[System Information]'))\n console.info('OS Version :', chalk.blue(osName(platform(), release())))\n console.info('NodeJS Version :', chalk.blue(process.version))\n const where = await $`which node`\n console.info('NodeJS path :', where.toString())\n console.info('NODE_OPTIONS :', chalk.blue(process.env.NODE_OPTIONS))\n if (where.toString().includes('nvm')) {\n console.info('NVM_DIR :', chalk.blue(process.env.NVM_DIR))\n }\n console.log()\n const cpu = await si.cpu()\n const mem = await si.mem()\n console.info('CPU Family:', chalk.blue(`${cpu.vendor} ${cpu.brand}`))\n console.info('CPU Ph Cores:', chalk.blue(cpu.cores))\n console.info('CPU Speed:', chalk.blue(`${cpu.speed}GHz`))\n console.info('Memory:', chalk.blue(`${filesize(mem.total)}`))\n console.info('Memory Free:', chalk.blue(`${filesize(mem.free)}`))\n console.info('Memory Used:', chalk.blue(`${filesize(mem.used)}`))\n console.info('Memory Available:', chalk.blue(`${filesize(mem.available)}`))\n }\n\n rightPad(name: string, length: number): string {\n while (name.length < length) {\n // eslint-disable-next-line no-param-reassign\n name = name.concat(' ')\n }\n return name\n }\n}\n","import { AbstractCommand } from '../../program'\n\nimport type { Command } from 'commander'\n\nexport class InfoCommand extends AbstractCommand {\n id = 'info'\n public async load(program: Command) {\n program\n .command('info')\n .alias('i')\n .description('Показать инфо')\n .action(async () => {\n await this.action.handle()\n })\n }\n}\n","import { InfoAction } from './action'\nimport { InfoCommand } from './command'\n\nimport type * as FoxfordTools from '../../types'\n\nexport default (program: FoxfordTools.Program) => {\n program.defineCommand(new InfoCommand(new InfoAction(program)))\n}\n","import fs from 'fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\nimport progress from 'cli-progress'\nimport Table from 'cli-table3'\nimport { filesize } from 'filesize'\nimport { glob } from 'glob'\nimport inquirer from 'inquirer'\n\nimport { Runner, RunnerFactory } from '../../lib/runners'\nimport { AbstractAction } from '../../program'\n\nimport type { OptimizeOptions } from './types'\n\ninterface ResourceTask {\n __originalPath: string\n __originalStat?: fs.Stats\n __optimizedStat?: fs.Stats\n __optimizedPath: string\n err?: string | Error\n status: boolean\n diff?: string\n}\n\nexport class OptimizeAction extends AbstractAction<OptimizeOptions> {\n public async handle(options: OptimizeOptions, extraFlags: string[] = []) {\n const resources = await glob(path.join(process.cwd(), options.filePath!), { ignore: 'node_modules/**' })\n\n console.log(chalk.white(`Найдено ${chalk.green(resources.length)} ресурсов для оптимизации`))\n console.log(\n chalk.yellowBright(`Если вы хотите увидеть список ресурсов, воспользуйтесь опцией ${chalk.green('--list')}`)\n )\n\n if (options.list) console.log(resources)\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n message: 'Продолжить?',\n choices: [\n { name: 'Yes', value: 1 },\n { name: 'No', value: 0 },\n ],\n default: 1,\n name: 'continue',\n },\n ])\n\n if (!answers.continue) return\n\n console.log()\n const bar = new progress.SingleBar({ fps: 25 }, progress.Presets.shades_classic)\n bar.start(resources.length, 0)\n\n const ft = await import('file-type')\n\n const promises = resources.map(async (resource) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const fileType = await ft.fileTypeFromFile(resource)\n if (!fileType)\n return {\n __originalPath: resource,\n __optimizedPath: resource,\n status: false,\n }\n\n const { mime } = fileType\n\n let runner\n\n const outputPath = options.replace\n ? resource\n : path.join(path.dirname(resource), `${options.prefix ?? ''}${path.basename(resource)}`)\n\n switch (mime) {\n case 'image/png':\n case 'image/jpeg':\n runner = RunnerFactory.create(Runner.TINYPNG, {\n token: process.env.TINIFY_API_KEY ?? '',\n verbose: true,\n })\n break\n case 'video/mp4':\n runner = RunnerFactory.create(Runner.FFMPEG, {\n verbose: true,\n })\n break\n default:\n console.log(chalk.yellowBright(`Unsupported mime type for ${chalk.white(resource)}`))\n }\n\n if (!runner) {\n return {\n __originalPath: resource,\n __optimizedPath: resource,\n status: false,\n }\n }\n\n try {\n const beforeStat = fs.statSync(resource)\n await runner.run({\n resource,\n output: outputPath,\n extraFlags,\n })\n const afterStat = fs.statSync(outputPath)\n\n return {\n __originalPath: resource,\n __originalStat: beforeStat,\n __optimizedPath: resource,\n __optimizedStat: afterStat,\n status: true,\n }\n } catch (err) {\n return {\n __originalPath: resource,\n __optimizedPath: resource,\n status: false,\n err: err as string,\n }\n } finally {\n bar.increment()\n }\n })\n\n try {\n const result = await Promise.all(promises)\n bar.stop()\n console.log()\n this.printResult(result)\n } catch (err) {\n bar.stop()\n console.log()\n console.log(chalk.redBright('Ошибка при оптимизации:', err))\n }\n }\n\n private printResult(result: ResourceTask[]) {\n const statusTable = this.buildStatusTable(result)\n console.log(statusTable)\n this.showUncompletedFiles(result)\n }\n\n private showUncompletedFiles(results: ResourceTask[]) {\n const failed = results.filter((item) => item.status === false)\n if (failed.length > 0) {\n console.log(chalk.redBright('Список необработанных файлов'))\n console.log(failed.map((item) => item.__originalPath))\n }\n }\n\n private buildStatusTable = (results: ResourceTask[]) => {\n const success = results.filter((item) => item.status === true)\n const failed = results.filter((item) => item.status === false)\n const leftMargin = ''\n const table = new Table({\n head: ['Обработано', 'Не обработано', 'Изменение размера'],\n chars: {\n left: leftMargin.concat('│'),\n 'top-left': leftMargin.concat('┌'),\n 'bottom-left': leftMargin.concat('└'),\n mid: '',\n 'left-mid': '',\n 'mid-mid': '',\n 'right-mid': '',\n },\n })\n\n const sumFilesize = results.reduce((acc, task) => {\n if (task.__originalStat && task.__optimizedStat) {\n // eslint-disable-next-line no-param-reassign\n acc += task.__originalStat.size - task.__optimizedStat.size\n }\n return acc\n }, 0)\n\n const sumPrefix = sumFilesize >= 0 ? '-' : '+'\n\n table.push([\n chalk.greenBright(success.length),\n chalk.redBright(failed.length),\n sumFilesize >= 0\n ? chalk.greenBright(`${sumPrefix}${filesize(sumFilesize)}`)\n : chalk.redBright(`${sumPrefix}${filesize(Math.abs(sumFilesize))}`),\n ])\n\n return table.toString()\n }\n}\n","import chalk from 'chalk'\n\nimport { AbstractCommand } from '../../program'\n\nimport type { OptimizeOptions } from './types'\nimport type * as FoxfordTools from '../../types'\n\nexport class OptimizeCommand extends AbstractCommand<OptimizeOptions> {\n id = 'optimize'\n\n public async load(program: FoxfordTools.Program) {\n program\n .command('optimize [path] [extraFlags...]')\n .alias('opt')\n .option('-l, --list', 'Вывести список файлов для оптимизации', false)\n .option('-r, --replace', 'Заменить исходный файл', false)\n .option('-p, --prefix', 'Префикс в имени оптимайзнутого файла', '__')\n .description('Оптимизировать ресурс(jpg,png,mp4)')\n .action(async (path: string, extraFlags: string[], option) => {\n if (!path) {\n console.log(chalk.yellow('Укажите путь до ресурса(поддерживается glob)'))\n process.exit(1)\n }\n\n await this.action.handle(\n {\n filePath: path,\n list: option.list,\n replace: option.replace,\n prefix: option.prefix,\n },\n extraFlags\n )\n })\n }\n}\n","import { OptimizeAction } from './action'\nimport { OptimizeCommand } from './command'\n\nimport type * as FoxfordTools from '../../types'\n\nexport default (program: FoxfordTools.Program) => {\n program.defineCommand(new OptimizeCommand(new OptimizeAction(program)))\n}\n","import chalk from 'chalk'\n\nimport pkg from '../../package.json'\nimport { logger } from '../logger'\nimport { Program } from '../program'\nimport { CommandLoader } from '../program/loader'\n\nconst PROGRAM_NAME = 'fox'\n\nconst welcomeText = `${chalk.green(`Привет✌️ , Foxford разработчик🤓`)}\n${chalk.magenta(`Эта штука призвана помочь тебе в кодогенерации и в чем-нибудь ещё🍿`)}\n${chalk.yellowBright('Чай наливай себе сам 🍮🍪')}\n`\n\nconst bootstrap = async () => {\n logger.debug('Start program')\n const program = await Program.init()\n\n program\n .version(pkg.version, '-v, --version', 'Показать текущую версию тулзы')\n .name(PROGRAM_NAME)\n .description(welcomeText)\n .usage('<command> [options]')\n .helpOption(false)\n .addHelpCommand(false)\n\n logger.debug('Load processes')\n await CommandLoader.load(program)\n logger.debug('Loading complete')\n\n logger.debug('Parse process.argv', process.argv)\n await program.parseAsync(process.argv)\n\n if (!process.argv.slice(2).length) {\n program.outputHelp()\n }\n}\n\nbootstrap()\n","{\n \"name\": \"@foxford/cli\",\n \"version\": \"1.2.2\",\n \"description\": \"Foxford Cli\",\n \"keywords\": [\n \"foxford\",\n \"cli\",\n \"tool\"\n ],\n \"homepage\": \"https://github.com/foxford/stoege\",\n \"bugs\": \"https://github.com/foxford/stoege/issues\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/foxford/stoege.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Foxford Co\",\n \"maintainers\": [\n {\n \"name\": \"Roman Olin\",\n \"email\": \"r.v.olin@foxford.ru\",\n \"team\": \"@frontend/core\"\n }\n ],\n \"main\": \"./README.mdx\",\n \"types\": \"./src/types/index.ts\",\n \"exports\": {\n \"./README.mdx\": \"./README.mdx\",\n \".\": {\n \"types\": \"./src/types/index.ts\"\n }\n },\n \"bin\": {\n \"fox-dev\": \"./scripts/dev.js\",\n \"fox\": \"./scripts/prod.js\"\n },\n \"scripts\": {\n \"============================ BUILD =============================\": \"\",\n \"build\": \"tsup\",\n \"prebuild\": \"pnpm -w run build:workspace-deps \\\"$PWD\\\"\",\n \"postbuild\": \"pnpm run build-dts\",\n \"build-dts\": \"dts-bundle-generator -o build/fox.d.ts src/types/index.ts --no-banner --external-inlines=commander loglevel --sort --inline-declare-externals\",\n \"============================ DEPLOY =============================\": \"\",\n \"deploy\": \"fox deploy npm\",\n \"============================ LINT =============================\": \"\",\n \"lint:clean\": \"rm -f .eslintcache\",\n \"lint:type-check\": \"tsc --noEmit --pretty\",\n \"lint:eslint\": \"eslint --cache --cache-strategy content --max-warnings=0 ./\",\n \"============================ TEST =============================\": \"\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\"\n },\n \"dependencies\": {\n \"@foxford/logger\": \"workspace:*\",\n \"@tsconfig/node16\": \"16.1.3\",\n \"@types/cli-progress\": \"3.11.5\",\n \"@types/fluent-ffmpeg\": \"2.1.24\",\n \"chalk\": \"4.1.0\",\n \"cli-progress\": \"3.12.0\",\n \"cli-table3\": \"0.6.5\",\n \"commander\": \"13.1.0\",\n \"dotenv\": \"16.4.5\",\n \"dotenv-expand\": \"11.0.6\",\n \"file-type\": \"19.0.0\",\n \"filesize\": \"10.1.2\",\n \"fluent-ffmpeg\": \"2.1.2\",\n \"fs-extra\": \"11.2.0\",\n \"glob\": \"10.4.2\",\n \"inquirer\": \"12.4.3\",\n \"os-name\": \"4.0.1\",\n \"package-manager-detector\": \"1.3.0\",\n \"read-package-up\": \"11.0.0\",\n \"systeminformation\": \"5.25.11\",\n \"tinify\": \"1.7.1\",\n \"tsx\": \"4.15.7\",\n \"typescript\": \"5.8.3\",\n \"yaml\": \"2.4.5\",\n \"zx\": \"8.5.4\"\n },\n \"devDependencies\": {\n \"@foxford/eslint-config\": \"workspace:*\",\n \"@foxford/typescript-config\": \"workspace:*\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"tsup\": \"8.4.0\",\n \"vitest\": \"3.0.9\"\n }\n}\n","import { createRequire } from 'node:module'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\nimport fs from 'fs-extra'\n\nimport { ERROR_PREFIX } from '../lib/ui'\nimport { logger } from '../logger'\n\nimport type * as FoxfordTools from '../types'\nimport type { NormalizedPackageJson } from 'read-package-up'\n\nconst log = logger.getLogger('command-loader')\n\nexport class CommandLoader {\n static PROCESSES_DIR = path.resolve(__dirname, '..', 'processes')\n\n public static async load(program: FoxfordTools.Program): Promise<void> {\n if (process.env.NODE_ENV === 'production') {\n await this.loadProductionProcesses(program)\n } else {\n await this.loadDevelopmentProcesses(program)\n }\n\n await Promise.all(program.getCommands().map(async (command) => await command.load(program)))\n this.handleInvalidCommand(program)\n }\n\n static async loadProductionProcesses(program: FoxfordTools.Program) {\n try {\n for (const [processName, moduleLoader] of Object.entries({\n codemod: () => import('../processes/codemod'),\n deploy: () => import('../processes/deploy'),\n info: () => import('../processes/info'),\n optimize: () => import('../processes/optimize')\n })) {\n try {\n log.debug(`Загружаем модуль: ${chalk.cyan(processName)}`)\n const module = await moduleLoader()\n module.default(program)\n } catch (err) {\n log.error(`Ошибка при загрузке модуля \"${processName}\":`, err)\n }\n }\n } catch (err) {\n log.error('Ошибка при загрузке процессов:', err)\n }\n\n try {\n await this.loadPlugins(program)\n } catch (err) {\n log.error('Ошибка при чтении плагина:', err)\n }\n }\n\n static async loadDevelopmentProcesses(program: FoxfordTools.Program) {\n if (!(await fs.pathExists(CommandLoader.PROCESSES_DIR))) {\n log.error(`Директория процессов не найдена: ${CommandLoader.PROCESSES_DIR}`)\n return\n }\n\n try {\n const processes = await this.getProcesses(CommandLoader.PROCESSES_DIR)\n for (const processName of processes) {\n try {\n log.debug(`Загружаем модуль: ${chalk.cyan(processName)}`)\n const modulePath = path.join(CommandLoader.PROCESSES_DIR, processName)\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const module = require(modulePath)\n module.default(program)\n } catch (err) {\n log.error(`Ошибка при загрузке модуля \"${processName}\":`, err)\n }\n }\n } catch (err) {\n log.error('Ошибка при чтении процессов:', err)\n }\n\n try {\n await this.loadPlugins(program)\n } catch (err) {\n log.error('Ошибка при чтении плагина:', err)\n }\n }\n\n private static getModulePath(packageJson: NormalizedPackageJson): string {\n let modulePath: string = ''\n\n if (packageJson.exports) {\n // Используем exports для определения точки входа\n if (typeof packageJson.exports === 'string') {\n modulePath = packageJson.exports\n } else if ((packageJson.exports as Record<string, unknown>)['.']) {\n // Если есть экспорт по умолчанию\n const defaultExport = (packageJson.exports as Record<string, string>)['.'] as string | Record<string, string>\n if (typeof defaultExport === 'string') {\n modulePath = defaultExport\n } else {\n if (packageJson.type === 'module') {\n modulePath = defaultExport.import as string\n } else {\n modulePath = defaultExport.require as string\n }\n }\n }\n } else if (packageJson.main) {\n // Fallback на main, если exports не определен\n modulePath = packageJson.main as string\n } else {\n // Если ни exports, ни main не определены, используем index.js\n modulePath = 'index.js'\n }\n\n return modulePath\n }\n\n private static async loadPlugins(program: FoxfordTools.Program) {\n const plugins = await program.getPluginPaths()\n\n for (const plugin of plugins) {\n log.debug(`Загружаем модуль: ${chalk.cyan(plugin.pkgJson.name)}`)\n const dirname = path.dirname(plugin.path)\n\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const module = require(`${plugin.pkgJson.name}`)\n module.default(program)\n continue\n }\n\n let targetPath = path.resolve(dirname)\n\n if (fs.existsSync(path.resolve(targetPath, 'build'))) {\n targetPath = path.resolve(targetPath, 'build')\n }\n\n if (fs.existsSync(path.join(targetPath, 'package.json'))) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const packageJson = require(path.join(targetPath, 'package.json'))\n\n try {\n const require = createRequire(__filename)\n let module\n\n const modulePath = this.getModulePath(packageJson)\n\n if (packageJson.type === 'module') {\n // Если это ES модуль\n module = await import(path.join(targetPath, modulePath))\n } else {\n // Если это CommonJS модуль\n module = require(path.join(targetPath, modulePath))\n }\n\n if (typeof module.default === 'function') {\n module.default(program)\n } else if (typeof module === 'function') {\n module(program)\n } else {\n log.warn(`Модуль \"${plugin.pkgJson.name}\" не экспортирует функцию по умолчанию`)\n }\n } catch (error) {\n log.error(`Ошибка при загрузке модуля \"${plugin.pkgJson.name}\":`, error)\n }\n }\n }\n }\n\n private static async getProcesses(processesPath: string): Promise<string[]> {\n const files = await fs.readdir(processesPath)\n\n return files\n .filter((file) => {\n const filePath = path.join(processesPath, file, 'index.ts')\n const stat = fs.statSync(filePath)\n return stat.isFile()\n })\n .map((file) => path.parse(file).name)\n }\n\n private static handleInvalidCommand(program: FoxfordTools.Program) {\n program.on('command:*', () => {\n console.error(`\\n${ERROR_PREFIX} Неверная команда: ${chalk.red('%s')}`, program.args.join(' '))\n console.log(`Смотри ${chalk.red('--help')} для вывода доступного списка команд.\\n`)\n process.exit(1)\n })\n }\n}\n"],"mappings":"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","names":["ffmpeg","path","chalk","import_chalk","chalk","path","fs","dotenvExpand","dotenv","import_node_path","init_logger","chalk","label","import_chalk","init_logger","chalk","label","import_chalk","tinify","chalk","import_node_path","import_dotenv","import_fs_extra","path","dotenv","result","packageJson","init_program","import_chalk","chalk","init_program","import_node_path","import_chalk","import_fs_extra","path","chalk","fs","init_collection","import_chalk","import_commander","init_collection","init_program","chalk","Table","import_zx","import_zx","import_zx","init_action","init_program","import_commander","init_command","init_program","init_action","init_command","import_chalk","import_zx","init_action","init_program","chalk","osName","si","init_command","init_program","init_action","init_command","import_node_path","import_chalk","import_cli_table3","import_filesize","init_action","init_program","Table","chalk","path","inquirer","progress","fs","import_chalk","init_command","init_program","path","chalk","init_action","init_command","import_chalk","init_program","import_node_path","import_chalk","import_fs_extra","log","chalk","module","fs","path","require","chalk"]}
1
+ {"version":3,"sources":["../src/logger/index.ts","../src/program/abstract.action.ts","../src/program/abstract.command.ts","../src/lib/runners/runner.ts","../src/lib/runners/ffmpeg.runner.ts","../src/lib/runners/shell.runner.ts","../src/lib/runners/node.runner.ts","../src/lib/runners/npm.runner.ts","../src/lib/runners/pnpm.runner.ts","../src/helpers/env.ts","../src/helpers/logger.ts","../src/lib/runners/script.runner.ts","../src/lib/runners/tinypng.runner.ts","../src/lib/runners/runner.factory.ts","../src/lib/runners/index.ts","../src/program/program.ts","../src/program/index.ts","../src/lib/ui/banner.ts","../src/lib/ui/prefixes.ts","../src/lib/ui/index.ts","../src/processes/codemod/action.ts","../src/lib/collection/collection.ts","../src/lib/collection/abstract.collection.ts","../src/lib/utils/formatting.ts","../src/lib/collection/fox-codemod.collection.ts","../src/lib/collection/collection.factory.ts","../src/lib/collection/index.ts","../src/processes/codemod/command.ts","../src/processes/codemod/index.ts","../src/processes/deploy/providers/abstract.provider.ts","../src/processes/deploy/providers/npm.ts","../src/processes/deploy/providers/s3.ts","../src/processes/deploy/action.ts","../src/processes/deploy/command.ts","../src/processes/deploy/index.ts","../src/processes/info/action.ts","../src/processes/info/command.ts","../src/processes/info/index.ts","../src/processes/optimize/action.ts","../src/processes/optimize/command.ts","../src/processes/optimize/index.ts","../src/bin/fox.ts","../package.json","../src/program/loader.ts"],"sourcesContent":["import { log } from '@foxford/logger'\n\nimport type { HierarchicalLogger } from '@foxford/logger'\n\nconst logger: HierarchicalLogger = log.getLogger('cli')\nlogger.setLevel('info')\n\nexport { logger }\n","import type * as FoxfordTools from '../types'\n\nexport abstract class AbstractAction<Options = FoxfordTools.ProcessInput[]> {\n constructor(protected program: FoxfordTools.Program) {}\n public abstract handle(options?: Options, params?: string[]): Promise<void>\n}\n","import type { AbstractAction } from './abstract.action'\nimport type * as FoxfordTools from '../types'\n\nexport abstract class AbstractCommand<Options = unknown> {\n constructor(protected action: AbstractAction<Options>) {}\n\n public abstract id: string\n\n public abstract load(program: FoxfordTools.Program): Promise<void> | void\n}\n","export enum Runner {\n NPM = 'NPM',\n PNPM = 'PNPM',\n FFMPEG = 'FFMPEG',\n TINYPNG = 'TINYPNG',\n NODE = 'NODE',\n PACKAGE_JSON_SCRIPT = 'PACKAGE_JSON_SCRIPT',\n}\n","import path from 'node:path'\n\nimport chalk from 'chalk'\nimport ffmpeg from 'fluent-ffmpeg'\n\nimport type { RunnerOptions } from './abstract.runner'\n\ninterface RunnerPayload {\n resource: string\n output?: string\n extraFlags?: string[]\n}\n\nexport class FFMpegRunner {\n options: RunnerOptions\n\n constructor(options?: RunnerOptions) {\n this.options = options ?? ({} as RunnerOptions)\n }\n\n public async run(payload: RunnerPayload): Promise<string | null> {\n return new Promise<null | string>((resolve, reject) => {\n ffmpeg(payload.resource)\n .output(payload.output ?? path.basename(payload.resource))\n .outputOptions([\n '-hide_banner',\n '-movflags +faststart',\n '-pix_fmt yuv420p',\n '-c:v libx264',\n '-preset:v veryslow',\n '-profile:v high',\n '-level 3.1',\n '-tune:v ssim',\n '-r 30',\n '-g 180',\n '-keyint_min 180',\n '-sc_threshold 0',\n '-max_muxing_queue_size 1024',\n // '-vf scale=1920:-1',\n '-f mp4',\n ...(payload.extraFlags ?? []),\n ])\n .on('end', function () {\n resolve(payload.resource)\n })\n .on('error', function (err) {\n console.log()\n console.log(chalk.redBright('Cannot process video: ' + err.message))\n reject(err)\n })\n .run()\n })\n }\n}\n","import { spawn, execSync } from 'child_process'\n\nimport chalk from 'chalk'\n\nimport type { RunnerOptions } from './abstract.runner'\nimport type { ChildProcess, SpawnOptions, ExecSyncOptionsWithStringEncoding } from 'child_process'\n\nexport class ShellRunner {\n protected binary: string\n protected options: RunnerOptions\n\n constructor(binary: string, options?: RunnerOptions) {\n this.binary = binary\n this.options = options ?? { cwd: process.cwd() }\n }\n\n public async run(\n command: string,\n args: string[] = [],\n options: SpawnOptions = {},\n collect = false\n ): Promise<unknown> {\n const spawnOptions: SpawnOptions = {\n cwd: this.options.cwd,\n stdio: collect ? 'pipe' : 'inherit',\n shell: true,\n ...options,\n }\n return new Promise((resolve, reject) => {\n const child: ChildProcess = spawn(`${this.binary}`, [command, ...args], spawnOptions)\n if (collect && child.stdout) {\n child.stdout.on('data', (data) => resolve(data.toString().replace(/\\r\\n|\\n/, '')))\n }\n child.on('close', (code) => {\n if (code === 0) {\n resolve(child.stdout)\n } else {\n console.error(chalk.red(`\\n Не удалось выполнить команду: ${this.binary} ${command} ${args} `))\n reject(code)\n }\n })\n })\n }\n\n public runSync(command: string): string {\n const spawnOptions: ExecSyncOptionsWithStringEncoding = {\n cwd: this.options.cwd,\n encoding: 'utf-8',\n }\n return execSync(`${this.binary} ${command}`, spawnOptions)\n }\n\n /**\n * @param command\n * @returns The entire command that will be ran when calling `run(command)`.\n */\n public rawFullCommand(command: string): string {\n const commandArgs: string[] = [command]\n return `${this.binary} ${commandArgs.join(' ')}`\n }\n}\n","import { ShellRunner } from './shell.runner'\n\nimport type { RunnerOptions } from './abstract.runner'\n\nexport class NodeRunner extends ShellRunner {\n constructor(options?: RunnerOptions) {\n super('node', options)\n }\n}\n","import { ShellRunner } from './shell.runner'\n\nimport type { RunnerOptions } from './abstract.runner'\n\nexport class NpmRunner extends ShellRunner {\n constructor(options?: RunnerOptions) {\n super('npm', options)\n }\n}\n","import { ShellRunner } from './shell.runner'\n\nimport type { RunnerOptions } from './abstract.runner'\n\nexport class PnpmRunner extends ShellRunner {\n constructor(options?: RunnerOptions) {\n super('pnpm', options)\n }\n}\n","import path from 'node:path'\n\nimport dotenv from 'dotenv'\nimport dotenvExpand from 'dotenv-expand'\nimport fs from 'fs-extra'\n\ntype Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T\n\nfunction truthy<T>(value: T): value is Truthy<T> {\n return !!value\n}\n\nexport function loadEnv(pkgPath: string) {\n const dotenvFiles = [\n Boolean(process.env.NODE_ENV) && path.join(pkgPath, `.env.${process.env.NODE_ENV}.local`),\n Boolean(process.env.NODE_ENV) && path.join(pkgPath, `.env.${process.env.NODE_ENV}`),\n Boolean(process.env.NODE_ENV) === false && path.join(pkgPath, `.env.development`),\n // Don't include `.env.local` for `test` environment\n // since normally you expect tests to produce the same\n // results for everyone\n process.env.NODE_ENV !== 'test' && path.join(pkgPath, `.env.local`),\n path.join(pkgPath, '.env'),\n ].filter(truthy)\n\n dotenvFiles.forEach((dotenvFile) => {\n if (fs.existsSync(dotenvFile)) {\n dotenvExpand.expand(\n dotenv.config({\n path: dotenvFile,\n })\n )\n }\n })\n\n return dotenvFiles\n}\n","import type { Chalk } from 'chalk'\n\nexport const label = (chalk: Chalk, label: string) => chalk.black(` ${label} `)\n","import chalk from 'chalk'\n\nimport { PnpmRunner } from './pnpm.runner'\nimport { loadEnv } from '../../helpers/env'\nimport { label } from '../../helpers/logger'\n\nimport type { RunnerOptions } from './abstract.runner'\nimport type * as FoxfordTools from '../../types'\n\nconst getLabel = (pkgName: string) => {\n return label(chalk.bgGreen, pkgName) + chalk.white(' ')\n}\n\nconst getFailLabel = (pkgName: string) => {\n return label(chalk.bgRed, pkgName) + chalk.white(' ')\n}\n\ninterface RunnerPayload {\n pkg: FoxfordTools.Package\n}\n\nexport class ScriptRunner {\n options: RunnerOptions\n\n constructor(options?: RunnerOptions) {\n this.options = options ?? ({} as RunnerOptions)\n }\n\n async run(script: string, { pkg }: RunnerPayload) {\n const label = getLabel(pkg.localName.toUpperCase())\n const failLabel = getFailLabel(pkg.localName.toUpperCase())\n console.log(label + chalk.blue(`Start ${chalk.white.underline(script)} process`))\n if (this.options.verbose) {\n console.log(label + chalk.blue(`Print typescript config`))\n console.log()\n }\n console.log(\n label + chalk.blue(`Env ${chalk.magenta('process.env.NODE_ENV')} is ${chalk.yellow(process.env.NODE_ENV)}`)\n )\n console.log(\n label +\n chalk.blue(`Env ${chalk.magenta('process.env.NODE_OPTIONS')} is ${chalk.yellow(process.env.NODE_OPTIONS)}`)\n )\n try {\n console.log(label + chalk.blue(`Load .env files`))\n const envFiles = loadEnv(pkg.path)\n console.log(JSON.stringify(envFiles, null, 2))\n } catch (err) {\n if (err instanceof Error) {\n console.log(failLabel + chalk.red(err.message))\n process.exit(1)\n }\n }\n\n const pnpmRunner = new PnpmRunner()\n\n pnpmRunner.run('run', [`--filter ${pkg.localName}`, script], {\n env: Object.assign(process.env, { FORCE_COLOR: '1' }),\n cwd: pkg.path,\n })\n }\n}\n","import chalk from 'chalk'\nimport tinify from 'tinify'\n\nimport type { RunnerOptions } from './abstract.runner'\n\ninterface TinyPngRunnerOptions extends RunnerOptions {\n token?: string\n}\n\ninterface RunnerPayload {\n resource: string\n output?: string\n extraFlags?: string[]\n}\n\nexport class TinyPngRunner {\n options: TinyPngRunnerOptions\n\n constructor(options?: TinyPngRunnerOptions) {\n this.options = options ?? ({} as TinyPngRunnerOptions)\n\n if (!options?.token) throw new Error('You must specify process.env.TINIFY_API_KEY env variable with tinify key')\n }\n\n public async run(payload: RunnerPayload): Promise<null | string> {\n const source = tinify.fromFile(payload.resource)\n tinify.key = this.options?.token ?? ''\n\n try {\n await source.toFile(payload.output ?? payload.resource)\n } catch (err) {\n if (err instanceof Error) console.log(chalk.redBright('Cannot compress resource with tinify: ' + err.message))\n }\n\n return payload.resource\n }\n\n public runSync(): string {\n throw new TypeError('this method not implemented')\n }\n}\n","import { FFMpegRunner } from './ffmpeg.runner'\nimport { NodeRunner } from './node.runner'\nimport { NpmRunner } from './npm.runner'\nimport { PnpmRunner } from './pnpm.runner'\nimport { Runner } from './runner'\nimport { ScriptRunner } from './script.runner'\nimport { TinyPngRunner } from './tinypng.runner'\n\nimport type { RunnerOptions } from './abstract.runner'\n\nconst RunnerMap = {\n [Runner.NPM]: NpmRunner,\n [Runner.PNPM]: PnpmRunner,\n [Runner.NODE]: NodeRunner,\n [Runner.PACKAGE_JSON_SCRIPT]: ScriptRunner,\n [Runner.FFMPEG]: FFMpegRunner,\n [Runner.TINYPNG]: TinyPngRunner,\n}\n\ntype RunnerTypeMap = typeof RunnerMap\n\nexport class RunnerFactory {\n public static create<R extends Runner>(\n runner: R,\n options?: ConstructorParameters<RunnerTypeMap[R]>[0]\n ): InstanceType<RunnerTypeMap[R]> {\n const RunnerClass = RunnerMap[runner]\n\n if (!RunnerClass) {\n throw new Error(`Unknown runner ${runner}`)\n }\n\n return new RunnerClass(options as RunnerOptions) as InstanceType<RunnerTypeMap[R]>\n }\n}\n","export * from './runner'\nexport * from './runner.factory'\nexport type * from './abstract.runner'\n","import path from 'node:path'\n\nimport { Command } from 'commander'\nimport dotenv from 'dotenv'\nimport { existsSync } from 'fs-extra'\nimport { $, fs } from 'zx'\n\nimport { Runner, RunnerFactory } from '../lib/runners/index'\nimport { logger } from '../logger'\n\nimport type { AbstractCommand } from './abstract.command'\nimport type * as FoxfordTools from '../types'\n\nexport class Program extends Command implements FoxfordTools.Program {\n packageManager: string\n rootPath: string\n logger = logger\n private commandList: Array<AbstractCommand> = []\n\n constructor(packageManager: string, rootPath: string) {\n super()\n\n $.verbose = false\n\n const dotenvFiles = [\n path.resolve('./.env.local'),\n path.resolve('./.env'),\n path.resolve(__dirname, '../.env.local'),\n path.resolve(__dirname, '../.env'),\n ]\n\n dotenvFiles.forEach((dotenvFile) => {\n if (existsSync(dotenvFile)) {\n dotenv.config({\n path: dotenvFile,\n })\n }\n })\n\n this.packageManager = packageManager\n this.rootPath = rootPath\n }\n\n static async init(): Promise<Program> {\n const detector = await import('package-manager-detector')\n\n let packageManager: string = 'npm'\n let rootPath: string = process.cwd()\n\n const detectResult = await detector.detect({\n strategies: ['packageManager-field', 'devEngines-field', 'lockfile', 'install-metadata'],\n })\n\n if (detectResult) {\n packageManager = detectResult.name\n logger.info(`Определен менеджер пакетов: \"${packageManager}\"`)\n } else {\n logger.warn(`Невозможно определить менеджер пакетов. Дефолт: \"${packageManager}\"`)\n }\n\n if (packageManager === 'npm') {\n rootPath = path.dirname(RunnerFactory.create(Runner.NPM).runSync('root'))\n } else if (packageManager === 'pnpm') {\n rootPath = path.dirname(RunnerFactory.create(Runner.PNPM).runSync('root'))\n }\n\n return new Program(packageManager, rootPath)\n }\n\n public async getPluginPaths(): Promise<Array<{ path: string; pkgJson: FoxfordTools.PackageJson }>> {\n const nodeModulesPlugins = []\n const readPkgUp = await import('read-package-up')\n const result = await readPkgUp.readPackageUp({ cwd: this.rootPath })\n\n if (!result) {\n throw new Error('Unable to find package.json')\n }\n const { packageJson } = result\n\n const dependencies = { ...packageJson.dependencies, ...packageJson.devDependencies }\n\n for (const [name] of Object.entries(dependencies)) {\n // Игнорируем пакеты с типами и другие специфические пакеты\n if (this.shouldSkipPackage(name)) continue\n if (name === packageJson.name) continue\n\n let packageDir: string | null = null\n\n // Попытка найти пакет с помощью require.resolve\n try {\n const packagePath = require.resolve(name, { paths: [this.rootPath] })\n packageDir = path.dirname(packagePath)\n } catch {\n // logger.debug(`Error resolving package ${name} with require.resolve:`, error)\n }\n\n // Fallback: если require.resolve не сработал, пробуем найти пакет вручную\n if (!packageDir) {\n try {\n packageDir = path.join(this.rootPath, 'node_modules', name)\n if (!(await fs.pathExists(packageDir))) {\n logger.debug(`Package directory not found for ${name}`)\n continue\n }\n } catch (error) {\n logger.debug(`Error finding package directory for ${name}:`, error)\n continue\n }\n }\n\n // Теперь у нас есть packageDir, пробуем прочитать package.json\n try {\n const result = await readPkgUp.readPackageUp({ cwd: packageDir })\n if (!result) {\n logger.debug(`Unable to find package.json for ${name}`)\n continue\n }\n\n const { packageJson, path: packageJsonPath } = result\n\n if (packageJson.keywords && packageJson.keywords.includes('foxford-cli-plugin')) {\n nodeModulesPlugins.push({\n path: packageJsonPath,\n pkgJson: packageJson as FoxfordTools.PackageJson,\n })\n }\n } catch (error) {\n logger.debug(`Error reading package.json for ${name}:`, error)\n }\n }\n\n return nodeModulesPlugins\n }\n\n private shouldSkipPackage(name: string): boolean {\n return (\n name.startsWith('@types/') ||\n name.startsWith('@foxford/types') ||\n name === '@foxford/cli' ||\n name === 'typescript' ||\n name.includes('eslint') ||\n name.includes('@babel') ||\n name.includes('react')\n )\n }\n\n defineCommand(command: AbstractCommand) {\n this.commandList.push(command)\n }\n\n getCommands() {\n return this.commandList\n }\n}\n","export * from './abstract.action'\nexport * from './abstract.command'\nexport * from './program'\n","export const BANNER = `\n·▄▄▄ ▐▄• ▄ ·▄▄▄ ▄▄▄ ·▄▄▄▄ \n▐▄▄·▪ █▌█▌▪▐▄▄·▪ ▀▄ █·██▪ ██ \n██▪ ▄█▀▄ ·██· ██▪ ▄█▀▄ ▐▀▀▄ ▐█· ▐█▌\n██▌.▐█▌.▐▌▪▐█·█▌██▌.▐█▌.▐▌▐█•█▌██. ██ \n▀▀▀ ▀█▄▀▪•▀▀ ▀▀▀▀▀ ▀█▄▀▪.▀ ▀▀▀▀▀▀• \n`\n","import chalk from 'chalk'\n\nexport const ERROR_PREFIX = chalk.bgRgb(210, 0, 75).bold.rgb(0, 0, 0)(' Error ')\nexport const INFO_PREFIX = chalk.bgRgb(60, 190, 100).bold.rgb(0, 0, 0)(' Info ')\n","export * from './banner'\nexport * from './prefixes'\n","import { Runner, RunnerFactory } from '../../lib/runners'\nimport { AbstractAction } from '../../program'\n\nimport type { CodemodOptions } from './types'\n\nexport class CodemodAction extends AbstractAction<CodemodOptions> {\n public async handle(options: CodemodOptions) {\n const flags = []\n\n if (options.dry) flags.push('--dry')\n if (options.verbose) flags.push('--verbose')\n\n console.log('options', options)\n console.log('flags', flags)\n console.log('extra', options.extra)\n\n const runner = RunnerFactory.create(Runner.NODE, {\n verbose: options.verbose,\n })\n\n runner.run('', [], {\n cwd: process.cwd(),\n })\n\n return\n }\n}\n","export enum Collection {\n FOX_CODEMODS = '@foxford/codemods',\n}\n","import type * as FoxfordTools from '../../types'\n\nexport interface CollectionItem {\n name: string\n alias: string\n description: string\n}\n\nexport abstract class AbstractCollection {\n constructor(protected collection: string) {}\n\n public async execute(_name: string, _inputs: FoxfordTools.ProcessInput[], _extraFlags?: string[], _cwd?: string) {\n return\n }\n\n public abstract getItems(): Promise<CollectionItem[]>\n}\n","/**\n *\n * @param str\n * @returns formated string\n * @description normalizes input to supported path and file name format.\n * Changes camelCase strings to kebab-case, replaces spaces with dash and keeps underscores.\n */\nexport function normalizeToKebabOrSnakeCase(str: string) {\n const STRING_DASHERIZE_REGEXP = /\\s/g\n const STRING_DECAMELIZE_REGEXP = /([a-z\\d])([A-Z])/g\n return str.replace(STRING_DECAMELIZE_REGEXP, '$1-$2').toLowerCase().replace(STRING_DASHERIZE_REGEXP, '-')\n}\n","import path from 'node:path'\n\nimport chalk from 'chalk'\nimport fs from 'fs-extra'\n\nimport { AbstractCollection } from './abstract.collection'\nimport { Collection } from './collection'\nimport { normalizeToKebabOrSnakeCase } from '../utils/formatting'\n\nimport type { CollectionItem } from './abstract.collection'\n\ninterface Codemod extends CollectionItem {\n runner: string\n}\n\nexport class FoxCodemodCollection extends AbstractCollection {\n private codemods: Codemod[] = []\n private loaded = false\n\n constructor() {\n super(Collection.FOX_CODEMODS)\n }\n\n private async load() {\n const pathCollection = require.resolve(Collection.FOX_CODEMODS)\n\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const pkgJson = require(path.join(path.dirname(pathCollection), 'package.json'))\n\n if (!pkgJson.codemods) {\n console.log(\n chalk.red('May be you must specify \"codemods\" section in your package.json with path to collection.json')\n )\n process.exit(1)\n }\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const collectionPath = path.join(path.dirname(pathCollection), pkgJson.codemods ?? '')\n\n if (!fs.existsSync(collectionPath)) {\n console.log(\n chalk.red('Collection path specified in \"codemods\" section in your package.json is not valid: ', collectionPath)\n )\n }\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const collectionJson = require(collectionPath)\n this.codemods = collectionJson.codemods.map((codemod: Codemod) => ({\n ...codemod,\n name: normalizeToKebabOrSnakeCase(codemod.name),\n }))\n } catch {\n console.log(chalk.red('Collection json is not valid'))\n }\n\n this.loaded = true\n }\n\n public async getItems(): Promise<Codemod[]> {\n if (!this.loaded) {\n try {\n await this.load()\n } catch {\n //\n }\n }\n return this.codemods\n }\n}\n","// import { Runner, RunnerFactory } from '../runners'\n// import { SchematicRunner } from '../runners/schematic.runner'\nimport { Collection } from './collection'\nimport { FoxCodemodCollection } from './fox-codemod.collection'\n\nimport type { AbstractCollection } from './abstract.collection'\n\nexport class CollectionFactory {\n public static create(collection: Collection | string): AbstractCollection {\n // const schematicRunner = RunnerFactory.create(Runner.SCHEMATIC) as SchematicRunner\n\n if (collection === Collection.FOX_CODEMODS) {\n return new FoxCodemodCollection()\n }\n\n return new FoxCodemodCollection()\n }\n}\n","export * from './collection.factory'\nexport * from './collection'\nexport * from './abstract.collection'\n","import chalk from 'chalk'\nimport Table from 'cli-table3'\nimport { Option, Command } from 'commander'\n\nimport { Collection, CollectionFactory } from '../../lib/collection'\nimport { AbstractCommand } from '../../program'\n\nimport type { CodemodOptions } from './types'\nimport type { CollectionItem, AbstractCollection } from '../../lib/collection'\nimport type * as FoxfordTools from '../../types'\n\nexport class CodemodCommand extends AbstractCommand<CodemodOptions> {\n id = 'codemod'\n\n private items: CollectionItem[] = []\n\n private buildRunCommand() {\n const verbose = new Option('--verbose', 'Вывод данных')\n const dry = new Option('--dry', 'Прогон без изменений')\n\n const run = new Command('run')\n\n run\n .description('Запусить кодмод с именем <name>')\n .argument('<name>', 'Имя кодмода (codemod --list)')\n .argument('<input...>', 'Glob паттерн файлов для которых будет применим кодмод')\n .addOption(verbose)\n .addOption(dry)\n .allowUnknownOption(true)\n .showHelpAfterError()\n .action(async (name: string, input: string[], options: CodemodOptions, command: FoxfordTools.Program) => {\n // console.log('extra', extra)\n if (!this.items.filter((item) => item.name === name)) {\n console.error('Name not found')\n return\n }\n\n const unknownOptions = command.parseOptions(command.args)?.unknown ?? []\n\n const paths = input.filter((item) => !unknownOptions.includes(item))\n\n if (unknownOptions.length) {\n options.extra = unknownOptions\n }\n\n options.paths = paths\n\n await this.action.handle(options)\n })\n\n return run\n }\n\n private buildListCommand() {\n const run = new Command('list')\n\n run\n .description('Вывести полный список доступных кодмодов')\n .showHelpAfterError()\n .action(async () => {\n const list = await this.getCollectionItems()\n console.log(\n `Доступные кодмоды из ${chalk.bold(this.getCollection())}:\\n` + this.buildSchematicsListAsTable(list)\n )\n })\n\n return run\n }\n\n private async getCollectionItems() {\n const list = await this.getItems(this.getCollection())\n this.items = list\n return list\n }\n\n public async load(program: FoxfordTools.Program) {\n const codemod = new Command('codemod')\n codemod\n .addHelpText(\n 'before',\n `\\n---------------------------------------\\n${chalk.greenBright(\n '🛠 Codemod manager'\n )}\\n---------------------------------------\\n`\n )\n .usage('<command>')\n .helpOption(false)\n // .allowUnknownOption()\n .description(await this.buildDescription())\n .summary('Управление кодмодами')\n .addCommand(this.buildRunCommand())\n .addCommand(this.buildListCommand())\n .action(async (options) => {\n if (!options || Object.keys(options).length === 0) {\n codemod.outputHelp()\n return\n }\n\n await this.action.handle(options)\n })\n\n program.addCommand(codemod)\n }\n\n private buildSchematicsListAsTable(items: CollectionItem[]): string {\n const leftMargin = ' '\n const tableConfig = {\n head: ['name', 'description'],\n chars: {\n left: leftMargin.concat('│'),\n 'top-left': leftMargin.concat('┌'),\n 'bottom-left': leftMargin.concat('└'),\n mid: '',\n 'left-mid': '',\n 'mid-mid': '',\n 'right-mid': '',\n },\n }\n const table: Table.Table = new Table(tableConfig)\n for (const item of items) {\n table.push([chalk.green(item.name), item.description])\n }\n\n return table.toString()\n }\n\n private getCollection(): string {\n return Collection.FOX_CODEMODS\n }\n\n private async getItems(collection: string): Promise<CollectionItem[]> {\n const abstractCollection: AbstractCollection = CollectionFactory.create(collection)\n this.items = await abstractCollection.getItems()\n return this.items\n }\n\n private async buildDescription(): Promise<string> {\n const list = await this.getCollectionItems()\n const shortList = list.slice(0, 20)\n return (\n `Доступные кодмоды из ${chalk.bold(this.getCollection())}:\\n` +\n this.buildSchematicsListAsTable(shortList) +\n chalk.yellowBright(`\\n\\nЧтобы увидеть полный список кодмодов используйте команду `) +\n chalk.greenBright(`codemod list`)\n )\n }\n}\n","import { CodemodAction } from './action'\nimport { CodemodCommand } from './command'\n\nimport type * as FoxfordTools from '../../types'\n\nexport default (program: FoxfordTools.Program) => {\n program.defineCommand(new CodemodCommand(new CodemodAction(program)))\n}\n","import { fs, path } from 'zx'\n\nimport { logger } from '../../../logger'\n\nimport type * as FoxfordTools from '../../../types'\nimport type { DeployOptions } from '../types'\nimport type { HierarchicalLogger } from '@foxford/logger'\n\n/**\n *\n * Методы провайдера не выбрасывают ошибки.\n *\n * Обработка ошибок должна происходить в методах классов, которые наследуются от класса провайдера.\n */\nexport abstract class DeployProvider {\n cwd: string\n logger: HierarchicalLogger\n buildDir: string\n\n constructor(public providerName: string) {\n this.cwd = process.cwd()\n this.logger = logger.getLogger(providerName)\n this.buildDir = './build'\n }\n\n /**\n * Генерирует строку версии пакета на основе цели и SHA коммита.\n *\n * @param version - Версия пакета из package.json\n * @param sha - Короткий SHA коммита, используемый в строке бета-версии.\n * @returns Строка, представляющая версию пакета.\n * Для цели 'latest' возвращает текущую версию пакета.\n * Для цели 'beta' возвращает строку версии в формате:\n * \"<текущая_версия>-beta-<sha>-<текущая_дата>\"\n */\n public getBetaPackageVersion(version: string, sha: string): string {\n const now = new Date()\n const year = now.getFullYear()\n const month = String(now.getMonth() + 1).padStart(2, '0')\n const day = String(now.getDate()).padStart(2, '0')\n const date = `${year}${month}${day}`\n return `${version}-beta-${sha}-${date}`\n }\n\n /**\n * Читает и парсит файл package.json из текущей рабочей директории.\n *\n * Эта функция пытается найти и прочитать файл package.json в текущей\n * рабочей директории. Если файл найден, он читается синхронно и парсится как JSON.\n *\n * @returns Распарсенное содержимое файла package.json или null.\n */\n public readPackageJson(pkgPath: string): FoxfordTools.PackageJson | null {\n const packageJsonPath = path.resolve(pkgPath, 'package.json')\n\n if (!fs.existsSync(packageJsonPath)) {\n return null\n }\n\n try {\n const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8')\n return JSON.parse(packageJsonContent)\n } catch (error) {\n this.logger.error(`Ошибка при чтении или парсинге package.json: ${(error as Error).message}`)\n return null\n }\n }\n\n public abstract deploy(params: Omit<DeployOptions, 'provider'>): Promise<void>\n}\n","import { fs, $, path, cd } from 'zx'\n\nimport { DeployProvider } from './abstract.provider'\nimport { logger } from '../../../logger'\n\nimport type * as FoxfordTools from '../../../types'\nimport type { DeployNpmOptions } from '../types'\n\nfunction sleep(ms: number) {\n if (process.env.NODE_ENV === 'test') {\n return Promise.resolve()\n }\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\nexport class NpmDeploy extends DeployProvider {\n versionLists: string[] = []\n dry: string = ''\n noGitChecks: string = ''\n\n constructor() {\n super('npm')\n }\n\n /**\n * Возвращает сообщение об устаревании с текущим SHA коммита.\n *\n * @returns Промис, который разрешается строкой сообщения об устаревании.\n */\n private async getDeprecationMessage(): Promise<string> {\n const commitSha = (await $`git rev-parse --short HEAD`).toString().trim()\n return `deprecated by ${commitSha}`\n }\n\n /**\n * Создает или обновляет файл .npmrc с токеном аутентификации для реестра npm.\n *\n * Этот метод добавляет конфигурацию аутентификации в файл .npmrc,\n * обеспечивая безопасный доступ к реестру npm для публикации пакетов.\n * Он использует переменную окружения NPM_TOKEN для аутентификации.\n *\n * @returns Промис, который разрешается, когда файл .npmrc успешно обновлен.\n * @throws Выбрасывает ошибку, если операция с файлом не удалась или если NPM_TOKEN не установлен.\n */\n private async touchNpmrc(): Promise<void> {\n const authStr = '//registry.npmjs.org/:_authToken=${NPM_TOKEN}'\n await $`echo ${authStr} >> .npmrc`\n }\n\n /**\n * Фильтрует устаревшие версии из заданного списка версий пакета.\n *\n * Этот метод проверяет каждую версию в реестре npm, чтобы определить, является ли она устаревшей.\n * Он использует команду `npm view` для получения статуса устаревания каждой версии.\n *\n * @param pkgName - Имя пакета в регистре.\n * @param versions - Массив строк версий для проверки на устаревание.\n * @returns Промис, который разрешается в массив строк версий, которые не являются устаревшими.\n */\n private async getNotDeprecatedVersions(pkgName: string, versions: string[]): Promise<string[]> {\n const notDeprecatedVersions = []\n for (const ver of versions) {\n const cmd = ['npm', 'view', `${pkgName}@${ver}`, 'deprecated']\n const result = await $`${cmd}`\n\n if (!result.toString().trim().includes('deprecated by')) {\n notDeprecatedVersions.push(ver)\n }\n }\n return notDeprecatedVersions\n }\n\n /**\n * Получает список всех версий текущего пакета из реестра npm.\n *\n * Этот метод выполняет команду npm для получения всех версий пакета,\n * указанного в файле package.json. Затем он парсит JSON-ответ\n * и сохраняет результат в свойстве `versionLists` класса.\n *\n * @param pkgName - Имя пакета в регистре.\n *\n * @returns Промис, который разрешается в массив строк, где каждая строка\n * представляет версию пакета. Если парсинг не удался, возвращает\n * пустой массив.\n *\n * @throws Записывает ошибку в консоль, если парсинг JSON не удался, но не\n * выбрасывает исключение.\n */\n private async getVersionsList(pkgName: string): Promise<string[]> {\n logger.info('Getting versions list...')\n const outputProcess = await $`npm view ${pkgName} versions --json`\n const versionsListPo = outputProcess.toString()\n logger.info('Versions list recieved', versionsListPo)\n\n try {\n const parsed = JSON.parse(versionsListPo)\n\n if (Array.isArray(parsed)) {\n return parsed\n } else {\n // Если это не массив, но валидный JSON (например, строка), возвращаем её в массиве\n return [parsed]\n }\n } catch {\n logger.error('Error parsing versions list')\n return []\n }\n }\n\n /**\n * Получает список бэта версий на текущую версию из списка всех версий.\n *\n * @param currentVersion - Строка текущей версии для сравнения.\n * @returns Массив строк похожих версий.\n */\n private getBetaVersions(currentVersion: string): string[] {\n return this.versionLists.filter((ver) => {\n if (!ver.includes('beta')) return false\n if (ver === currentVersion) return false\n\n const semverFromVersion = currentVersion.match(/^[0-9]{1,9}.[0-9]{1,9}.[0-9]{1,9}/gi)\n if (!semverFromVersion) return false\n\n const matchedVersion = semverFromVersion[0] ?? null\n if (!matchedVersion) return false\n\n return ver.includes(matchedVersion)\n })\n }\n\n /**\n * Помечает предыдущие похожие версии пакета как устаревшие.\n *\n * Этот метод находит похожие версии на текущую версию, фильтрует уже устаревшие версии,\n * а затем помечает оставшиеся версии как устаревшие, используя команду npm deprecate.\n *\n * @param packageJson - package.json пакета.\n * @returns Промис, который разрешается, когда все похожие, не устаревшие версии были помечены как устаревшие или была попытка их пометить.\n */\n private async deprecatePrevBetaVersions(packageJson: FoxfordTools.PackageJson): Promise<void> {\n logger.info('Отмечаем предыдущие бэта версии как deprecated')\n\n this.versionLists = await this.getVersionsList(packageJson.name)\n const betaVersions = this.getBetaVersions(packageJson.version)\n logger.info('Найдены beta версии:', betaVersions)\n\n const notDeprecatedVersions = await this.getNotDeprecatedVersions(packageJson.name, betaVersions)\n logger.info('Beta версии без deprecated:', notDeprecatedVersions)\n\n const deprecationMessage = await this.getDeprecationMessage()\n\n for (const ver of notDeprecatedVersions) {\n await sleep(500)\n try {\n if (!this.dry) {\n const cmd = ['npm', 'deprecate', `${packageJson.name}@${ver}`, deprecationMessage].filter(\n (item) => item !== ''\n )\n logger.info('Помечаем версию как deprecated:', cmd)\n await $`${cmd}`\n }\n } catch (error) {\n logger.error(error)\n continue\n }\n }\n }\n\n /**\n * Удаляет бета-версии пакета, которые похожи на текущую версию.\n *\n * Этот метод получает все версии пакета, находит похожие версии на текущую,\n * и удаляет те, которые являются бета-версиями. Он использует команду npm unpublish с флагом --force.\n *\n * @param packageJson - package.json пакета.\n * @returns Промис, который разрешается, когда все бета-версии были удалены или была попытка их удалить.\n * @throws Записывает ошибки в консоль, если удаление не удалось для какой-либо версии, но продолжает со следующей версией.\n */\n private async unpublishBetaVersions(packageJson: FoxfordTools.PackageJson): Promise<void> {\n logger.info('Разпубликовываем beta версии')\n this.versionLists = await this.getVersionsList(packageJson.name)\n logger.info('Список версий: ', this.versionLists)\n\n const betaVersions = this.getBetaVersions(packageJson.version)\n logger.info('Список для разпубликации и депрекейта: ', betaVersions)\n\n const deprecationMessage = await this.getDeprecationMessage()\n\n for (const ver of betaVersions) {\n if (!ver.includes('beta')) continue\n\n try {\n const deprecate = ['npm', 'deprecate', `${packageJson.name}@${ver}`, deprecationMessage].filter(\n (item) => item !== ''\n )\n logger.info('Помечаем версию как deprecated:', deprecate)\n await $`${deprecate}`\n\n const unpublish = ['npm', 'unpublish', `${packageJson.name}@${ver}`, '--force', this.dry].filter(\n (item) => item !== ''\n )\n logger.info('Разпубликовывем версию:', unpublish)\n await $`${unpublish}`\n } catch (error) {\n logger.error(error)\n continue\n }\n\n await sleep(500)\n }\n }\n\n /**\n * Разворачивает пакет в реестре npm.\n *\n * Этот метод обрабатывает весь процесс развертывания, включая управление версиями,\n * обновление package.json, публикацию npm и пост-публикационные действия, такие как пометка\n * предыдущих версий как устаревших или удаление бета-версий.\n *\n * @param params - Параметры развертывания.\n * @param params.dry - Если true, выполняет пробный запуск без фактической публикации.\n * @param params.target - Цель развертывания, либо 'beta', либо 'latest'. По умолчанию 'beta'.\n *\n * @throws Завершает процесс, если директория сборки не найдена.\n * @returns Промис, который разрешается, когда процесс развертывания завершен.\n */\n async deploy(params: DeployNpmOptions) {\n logger.info('Начинаем процесс деплоя в NPM', params)\n const localDir = path.join(process.cwd(), params.localDir ?? this.buildDir)\n\n if (!fs.existsSync(localDir)) {\n logger.error(`Директория \"${localDir}\" не существует`)\n process.exit(1)\n }\n\n const packageJson = this.readPackageJson(localDir)\n\n if (!packageJson) {\n logger.error('package.json не найден в текущей директории')\n process.exit(1)\n }\n\n if (params.dry === true) this.dry = '--dry-run'\n if (params.skipGitChecks) this.noGitChecks = '--no-git-checks'\n\n logger.info('Меняем директорию на', localDir)\n cd(localDir)\n\n logger.info('Получаем sha коммита')\n const commitSha = (await $`git rev-parse --short HEAD`).toString().replace('\\n', '')\n logger.info('Коммит:', commitSha)\n\n const target = params.target ?? 'beta'\n logger.info('Целевая версия:', target)\n\n await this.touchNpmrc()\n logger.info('Создаем .npmrc')\n\n if (target === 'beta') {\n packageJson.version = packageJson.version.includes('beta')\n ? packageJson.version\n : this.getBetaPackageVersion(packageJson.version, commitSha)\n }\n\n packageJson.sha = commitSha\n logger.info('Версия пакета:', packageJson.version)\n\n if (packageJson.scripts && packageJson.scripts.postinstall) {\n packageJson.scripts = {\n postinstall: packageJson.scripts.postinstall,\n }\n } else {\n packageJson.scripts = {}\n }\n\n if (packageJson.devDependencies) {\n delete packageJson.devDependencies\n }\n\n logger.info('Публикуемый package.json', packageJson)\n\n await fs.writeJson('package.json', packageJson, {\n spaces: 2,\n })\n\n const cmd = [\n params.packageManager ?? 'npm',\n 'publish',\n '--access=public',\n `--tag=${target}`,\n this.dry,\n this.noGitChecks,\n ].filter((item) => item !== '')\n logger.info('Публикуем с аргументами:', cmd)\n\n await $`${cmd}`\n\n if (target === 'beta') {\n await this.deprecatePrevBetaVersions(packageJson)\n } else {\n await this.unpublishBetaVersions(packageJson)\n }\n }\n}\n","import { fs, $, path } from 'zx'\n\nimport { DeployProvider } from './abstract.provider'\nimport { logger } from '../../../logger'\n\nimport type { DeployS3Options } from '../types'\n\nexport class S3Deploy extends DeployProvider {\n constructor() {\n super('s3')\n }\n\n /**\n * Определяет цель развертывания на основе текущей ветки Git.\n *\n * @returns {'latest' | 'beta'} 'latest' для ветки master, 'beta' для всех остальных.\n */\n getTarget(): 'latest' | 'beta' {\n const { GITHUB_REF_NAME } = process.env\n\n if (GITHUB_REF_NAME === 'master') return 'latest'\n\n return 'beta'\n }\n\n /**\n * Формирует путь для ресурсов в хранилище.\n *\n * @param segments - Cегменты пути.\n * @returns Путь для цели развертывания.\n */\n getRemotePath(...segments: (string | undefined)[]): string {\n return segments\n .filter(Boolean)\n .join(path.posix.sep)\n .replace(/[/\\\\]+/g, path.posix.sep)\n .replace(/^\\//, '')\n }\n\n /**\n * Выполняет команду rclone copy.\n *\n * @param localDir - Путь до локальных ресурсов.\n * @param bucket - Имя бакета в хранилище.\n * @param remoteDir - Удаленный путь для загрузки ресурсов.\n * @param flags - Дополнительные аргументы.\n * @returns Результат выполнения команды.\n */\n async exec(localDir: string, bucket: string, remoteDir?: string, flags?: string[]): Promise<void> {\n const cmd = ['rclone', 'copy', localDir]\n\n if (remoteDir) {\n cmd.push(`myremote:${bucket}/${remoteDir}`)\n } else {\n cmd.push(`myremote:${bucket}/`)\n }\n\n if (flags) {\n cmd.push(...flags)\n }\n\n logger.info('Запуск деплоя:', cmd)\n\n await $`${cmd}`\n\n logger.info('Деплой успешно завершен:', cmd)\n }\n\n /**\n * Выполняет процесс развертывания в хранилище по S3.\n *\n * Этот метод копирует файлы из локальной директории в удаленные директории хранилища,\n * используя rclone. Он обрабатывает как версионные, так и целевые пути.\n *\n * @param {DeployS3Options} params - Параметры развертывания.\n * @param {string} [params.localDir] - Локальная директория для копирования (по умолчанию this.buildDir).\n * @param {string} [params.bucket] - Имя бакета хранилища (по умолчанию из env или 'dist.ngcdn.ru').\n * @param {string} [params.packageName] - Имя пакета (по умолчанию из package.json).\n * @param {string} [params.endpoint] - Endpoint хранилища.\n * @param {string} [params.region] - Регион хранилища.\n * @param {'latest' | 'beta'} [params.target] - Цель развертывания (по умолчанию определяется автоматически).\n * @param {boolean} [params.dry] - Если true, выполняет пробный запуск без фактической загрузки.\n *\n * @throws Завершает процесс, если локальная директория не существует.\n */\n async deploy(params: DeployS3Options) {\n logger.info('Начинаем процесс деплоя в хранилище', params)\n const { SELECTEL_USER, SELECTEL_PASSWORD, BUCKET } = process.env\n\n if (!SELECTEL_USER || !SELECTEL_PASSWORD) {\n logger.warn('Не указаны переменные окружения SELECTEL_USER или SELECTEL_PASSWORD')\n process.exit(1)\n }\n\n const localDir = path.join(process.cwd(), params.localDir ?? this.buildDir)\n\n if (!fs.existsSync(localDir)) {\n logger.error(`Директория \"${localDir}\" не существует`)\n process.exit(1)\n }\n\n const bucket = params.bucket ?? BUCKET\n\n if (!bucket) {\n logger.error('Бакет не определен')\n process.exit(1)\n }\n\n logger.info('Бакет:', bucket)\n\n const packageJson = this.readPackageJson(localDir)\n\n const remoteDirs = []\n\n if (packageJson) {\n const commitSha = (await $`git rev-parse --short HEAD`).toString().replace('\\n', '')\n logger.info('Коммит:', commitSha)\n\n if (params.packageName) {\n packageJson.name = params.packageName\n }\n\n const target = params.target ?? this.getTarget()\n logger.info('Целевая версия:', target)\n\n if (target === 'beta') {\n packageJson.version = packageJson.version.includes('beta')\n ? packageJson.version\n : this.getBetaPackageVersion(packageJson.version, commitSha)\n }\n logger.info('Версия пакета:', packageJson.version)\n\n packageJson.sha = commitSha\n\n if (packageJson.scripts && packageJson.scripts.postinstall) {\n packageJson.scripts = {\n postinstall: packageJson.scripts.postinstall,\n }\n } else {\n packageJson.scripts = {}\n }\n\n logger.info('Публикуемый package.json', packageJson)\n\n await fs.writeJson(path.resolve(localDir, 'package.json'), packageJson, {\n spaces: 2,\n })\n\n remoteDirs.push(\n this.getRemotePath(params.remoteDir, packageJson.name, packageJson.version),\n this.getRemotePath(params.remoteDir, packageJson.name, target)\n )\n } else {\n logger.warn('package.json не найден в текущей директории')\n\n if (params.remoteDir) {\n remoteDirs.push(params.remoteDir)\n }\n }\n\n logger.info('Удаленные директории:', remoteDirs)\n\n $.env.RCLONE_CONFIG_MYREMOTE_TYPE = 's3'\n $.env.RCLONE_CONFIG_MYREMOTE_PROVIDER = 'Other'\n $.env.RCLONE_CONFIG_MYREMOTE_ACCESS_KEY_ID = SELECTEL_USER\n $.env.RCLONE_CONFIG_MYREMOTE_SECRET_ACCESS_KEY = SELECTEL_PASSWORD\n $.env.RCLONE_CONFIG_MYREMOTE_ENDPOINT = params.endpoint ?? 's3.ru-1.storage.selcloud.ru'\n $.env.RCLONE_CONFIG_MYREMOTE_REGION = params.region ?? 'ru-1'\n\n const execFlags = ['--progress']\n\n if (params.dry) {\n execFlags.push('--dry-run')\n }\n\n if (!remoteDirs.length) {\n await this.exec(localDir, bucket, undefined, execFlags)\n process.exit(0)\n }\n\n await Promise.all(\n remoteDirs.map((remoteDir) => {\n return this.exec(localDir, bucket, remoteDir, execFlags)\n })\n )\n }\n}\n","import { AbstractAction } from '../../program'\nimport { NpmDeploy } from './providers/npm'\nimport { S3Deploy } from './providers/s3'\n\nimport type { DeployProvider } from './providers/abstract.provider'\nimport type { DeployOptions } from './types'\n\nexport class DeployAction extends AbstractAction<DeployOptions> {\n public async handle(params: DeployOptions) {\n let provider: DeployProvider\n\n switch (params.provider) {\n case 'npm':\n provider = new NpmDeploy()\n break\n case 's3':\n provider = new S3Deploy()\n break\n default:\n throw new Error(`Unsupported deploy provider: ${params.provider}`)\n }\n\n await provider.deploy(params)\n }\n}\n","import { Command, Option } from 'commander'\n\nimport { AbstractCommand } from '../../program'\n\nimport type { DeployOptions } from './types'\nimport type * as FoxfordTools from '../../types'\n\nexport class DeployCommand extends AbstractCommand<DeployOptions> {\n id = 'deploy'\n public async load(program: FoxfordTools.Program) {\n const deployCommand = new Command('deploy').description('Задеплоить пакет')\n\n const targetOption = new Option('--target <target>', 'Релиз beta или latest')\n .choices(['beta', 'latest'])\n .default('beta')\n const localDirOption = new Option('--local-dir <path>', 'Из какой локальной директории загрузить содержимое')\n const dryOption = new Option('--dry', 'Запуск без выполнения операции').default(false)\n\n const s3Command = new Command('s3')\n .description('Деплой пакета по s3 в хранилище')\n .option('--bucket <name>', 'В какой бакет загрузить пакет')\n .option('--package-name <name>', 'Имя пакета вместо packageJson.name')\n .option('--remote-dir <dir>', 'Целевая директория в хранилище')\n .action(async (params) => {\n await this.action.handle({ ...params, provider: 's3' })\n })\n\n s3Command.addOption(targetOption)\n s3Command.addOption(localDirOption)\n s3Command.addOption(dryOption)\n\n const npmCommand = new Command('npm')\n .description('Деплой пакета в npm')\n .option('--skip-git-checks', 'Отключение git проверок при публикации')\n .action(async (params) => {\n await this.action.handle({ ...params, provider: 'npm', packageManager: program.packageManager })\n })\n\n npmCommand.addOption(targetOption)\n npmCommand.addOption(localDirOption)\n npmCommand.addOption(dryOption)\n\n deployCommand.addCommand(s3Command)\n deployCommand.addCommand(npmCommand)\n\n program.addCommand(deployCommand)\n }\n}\n","import { DeployAction } from './action'\nimport { DeployCommand } from './command'\n\nimport type * as FoxfordTools from '../../types'\n\nexport default (program: FoxfordTools.Program) => {\n program.defineCommand(new DeployCommand(new DeployAction(program)))\n}\n","import { platform, release } from 'os'\n\nimport chalk from 'chalk'\nimport { filesize } from 'filesize'\nimport osName from 'os-name'\nimport si from 'systeminformation'\nimport { $ } from 'zx'\n\nimport { BANNER } from '../../lib/ui'\nimport { AbstractAction } from '../../program'\n\nexport class InfoAction extends AbstractAction {\n public async handle() {\n this.displayBanner()\n await this.displaySystemInformation()\n }\n\n private displayBanner() {\n console.info(chalk.red(BANNER))\n }\n\n private async displaySystemInformation(): Promise<void> {\n console.info(chalk.green('[System Information]'))\n console.info('OS Version :', chalk.blue(osName(platform(), release())))\n console.info('NodeJS Version :', chalk.blue(process.version))\n const where = await $`which node`\n console.info('NodeJS path :', where.toString())\n console.info('NODE_OPTIONS :', chalk.blue(process.env.NODE_OPTIONS))\n if (where.toString().includes('nvm')) {\n console.info('NVM_DIR :', chalk.blue(process.env.NVM_DIR))\n }\n console.log()\n const cpu = await si.cpu()\n const mem = await si.mem()\n console.info('CPU Family:', chalk.blue(`${cpu.vendor} ${cpu.brand}`))\n console.info('CPU Ph Cores:', chalk.blue(cpu.cores))\n console.info('CPU Speed:', chalk.blue(`${cpu.speed}GHz`))\n console.info('Memory:', chalk.blue(`${filesize(mem.total)}`))\n console.info('Memory Free:', chalk.blue(`${filesize(mem.free)}`))\n console.info('Memory Used:', chalk.blue(`${filesize(mem.used)}`))\n console.info('Memory Available:', chalk.blue(`${filesize(mem.available)}`))\n }\n\n rightPad(name: string, length: number): string {\n while (name.length < length) {\n // eslint-disable-next-line no-param-reassign\n name = name.concat(' ')\n }\n return name\n }\n}\n","import { AbstractCommand } from '../../program'\n\nimport type { Command } from 'commander'\n\nexport class InfoCommand extends AbstractCommand {\n id = 'info'\n public async load(program: Command) {\n program\n .command('info')\n .alias('i')\n .description('Показать инфо')\n .action(async () => {\n await this.action.handle()\n })\n }\n}\n","import { InfoAction } from './action'\nimport { InfoCommand } from './command'\n\nimport type * as FoxfordTools from '../../types'\n\nexport default (program: FoxfordTools.Program) => {\n program.defineCommand(new InfoCommand(new InfoAction(program)))\n}\n","import fs from 'fs'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\nimport progress from 'cli-progress'\nimport Table from 'cli-table3'\nimport { filesize } from 'filesize'\nimport { glob } from 'glob'\nimport inquirer from 'inquirer'\n\nimport { Runner, RunnerFactory } from '../../lib/runners'\nimport { AbstractAction } from '../../program'\n\nimport type { OptimizeOptions } from './types'\n\ninterface ResourceTask {\n __originalPath: string\n __originalStat?: fs.Stats\n __optimizedStat?: fs.Stats\n __optimizedPath: string\n err?: string | Error\n status: boolean\n diff?: string\n}\n\nexport class OptimizeAction extends AbstractAction<OptimizeOptions> {\n public async handle(options: OptimizeOptions, extraFlags: string[] = []) {\n const resources = await glob(path.join(process.cwd(), options.filePath!), { ignore: 'node_modules/**' })\n\n console.log(chalk.white(`Найдено ${chalk.green(resources.length)} ресурсов для оптимизации`))\n console.log(\n chalk.yellowBright(`Если вы хотите увидеть список ресурсов, воспользуйтесь опцией ${chalk.green('--list')}`)\n )\n\n if (options.list) console.log(resources)\n\n const answers = await inquirer.prompt([\n {\n type: 'list',\n message: 'Продолжить?',\n choices: [\n { name: 'Yes', value: 1 },\n { name: 'No', value: 0 },\n ],\n default: 1,\n name: 'continue',\n },\n ])\n\n if (!answers.continue) return\n\n console.log()\n const bar = new progress.SingleBar({ fps: 25 }, progress.Presets.shades_classic)\n bar.start(resources.length, 0)\n\n const ft = await import('file-type')\n\n const promises = resources.map(async (resource) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const fileType = await ft.fileTypeFromFile(resource)\n if (!fileType)\n return {\n __originalPath: resource,\n __optimizedPath: resource,\n status: false,\n }\n\n const { mime } = fileType\n\n let runner\n\n const outputPath = options.replace\n ? resource\n : path.join(path.dirname(resource), `${options.prefix ?? ''}${path.basename(resource)}`)\n\n switch (mime) {\n case 'image/png':\n case 'image/jpeg':\n runner = RunnerFactory.create(Runner.TINYPNG, {\n token: process.env.TINIFY_API_KEY ?? '',\n verbose: true,\n })\n break\n case 'video/mp4':\n runner = RunnerFactory.create(Runner.FFMPEG, {\n verbose: true,\n })\n break\n default:\n console.log(chalk.yellowBright(`Unsupported mime type for ${chalk.white(resource)}`))\n }\n\n if (!runner) {\n return {\n __originalPath: resource,\n __optimizedPath: resource,\n status: false,\n }\n }\n\n try {\n const beforeStat = fs.statSync(resource)\n await runner.run({\n resource,\n output: outputPath,\n extraFlags,\n })\n const afterStat = fs.statSync(outputPath)\n\n return {\n __originalPath: resource,\n __originalStat: beforeStat,\n __optimizedPath: resource,\n __optimizedStat: afterStat,\n status: true,\n }\n } catch (err) {\n return {\n __originalPath: resource,\n __optimizedPath: resource,\n status: false,\n err: err as string,\n }\n } finally {\n bar.increment()\n }\n })\n\n try {\n const result = await Promise.all(promises)\n bar.stop()\n console.log()\n this.printResult(result)\n } catch (err) {\n bar.stop()\n console.log()\n console.log(chalk.redBright('Ошибка при оптимизации:', err))\n }\n }\n\n private printResult(result: ResourceTask[]) {\n const statusTable = this.buildStatusTable(result)\n console.log(statusTable)\n this.showUncompletedFiles(result)\n }\n\n private showUncompletedFiles(results: ResourceTask[]) {\n const failed = results.filter((item) => item.status === false)\n if (failed.length > 0) {\n console.log(chalk.redBright('Список необработанных файлов'))\n console.log(failed.map((item) => item.__originalPath))\n }\n }\n\n private buildStatusTable = (results: ResourceTask[]) => {\n const success = results.filter((item) => item.status === true)\n const failed = results.filter((item) => item.status === false)\n const leftMargin = ''\n const table = new Table({\n head: ['Обработано', 'Не обработано', 'Изменение размера'],\n chars: {\n left: leftMargin.concat('│'),\n 'top-left': leftMargin.concat('┌'),\n 'bottom-left': leftMargin.concat('└'),\n mid: '',\n 'left-mid': '',\n 'mid-mid': '',\n 'right-mid': '',\n },\n })\n\n const sumFilesize = results.reduce((acc, task) => {\n if (task.__originalStat && task.__optimizedStat) {\n // eslint-disable-next-line no-param-reassign\n acc += task.__originalStat.size - task.__optimizedStat.size\n }\n return acc\n }, 0)\n\n const sumPrefix = sumFilesize >= 0 ? '-' : '+'\n\n table.push([\n chalk.greenBright(success.length),\n chalk.redBright(failed.length),\n sumFilesize >= 0\n ? chalk.greenBright(`${sumPrefix}${filesize(sumFilesize)}`)\n : chalk.redBright(`${sumPrefix}${filesize(Math.abs(sumFilesize))}`),\n ])\n\n return table.toString()\n }\n}\n","import chalk from 'chalk'\n\nimport { AbstractCommand } from '../../program'\n\nimport type { OptimizeOptions } from './types'\nimport type * as FoxfordTools from '../../types'\n\nexport class OptimizeCommand extends AbstractCommand<OptimizeOptions> {\n id = 'optimize'\n\n public async load(program: FoxfordTools.Program) {\n program\n .command('optimize [path] [extraFlags...]')\n .alias('opt')\n .option('-l, --list', 'Вывести список файлов для оптимизации', false)\n .option('-r, --replace', 'Заменить исходный файл', false)\n .option('-p, --prefix', 'Префикс в имени оптимайзнутого файла', '__')\n .description('Оптимизировать ресурс(jpg,png,mp4)')\n .action(async (path: string, extraFlags: string[], option) => {\n if (!path) {\n console.log(chalk.yellow('Укажите путь до ресурса(поддерживается glob)'))\n process.exit(1)\n }\n\n await this.action.handle(\n {\n filePath: path,\n list: option.list,\n replace: option.replace,\n prefix: option.prefix,\n },\n extraFlags\n )\n })\n }\n}\n","import { OptimizeAction } from './action'\nimport { OptimizeCommand } from './command'\n\nimport type * as FoxfordTools from '../../types'\n\nexport default (program: FoxfordTools.Program) => {\n program.defineCommand(new OptimizeCommand(new OptimizeAction(program)))\n}\n","#!/usr/bin/env node\nimport chalk from 'chalk'\n\nimport pkg from '../../package.json'\nimport { logger } from '../logger'\nimport { Program } from '../program'\nimport { CommandLoader } from '../program/loader'\n\nconst PROGRAM_NAME = 'fox'\n\nconst welcomeText = `${chalk.green(`Привет✌️ , Foxford разработчик🤓`)}\n${chalk.magenta(`Эта штука призвана помочь тебе в кодогенерации и в чем-нибудь ещё🍿`)}\n${chalk.yellowBright('Чай наливай себе сам 🍮🍪')}\n`\n\nconst bootstrap = async () => {\n logger.debug('Start program')\n const program = await Program.init()\n\n program\n .version(pkg.version, '-v, --version', 'Показать текущую версию тулзы')\n .name(PROGRAM_NAME)\n .description(welcomeText)\n .usage('<command> [options]')\n .helpOption(false)\n .addHelpCommand(false)\n\n logger.debug('Load processes')\n await CommandLoader.load(program)\n logger.debug('Loading complete')\n\n logger.debug('Parse process.argv', process.argv)\n await program.parseAsync(process.argv)\n\n if (!process.argv.slice(2).length) {\n program.outputHelp()\n }\n}\n\nbootstrap()\n","{\n \"name\": \"@foxford/cli\",\n \"version\": \"1.2.3\",\n \"description\": \"Foxford Cli\",\n \"keywords\": [\n \"foxford\",\n \"cli\",\n \"tool\"\n ],\n \"homepage\": \"https://github.com/foxford/stoege\",\n \"bugs\": \"https://github.com/foxford/stoege/issues\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/foxford/stoege.git\"\n },\n \"license\": \"MIT\",\n \"author\": \"Foxford Co\",\n \"maintainers\": [\n {\n \"name\": \"Roman Olin\",\n \"email\": \"r.v.olin@foxford.ru\",\n \"team\": \"@frontend/core\"\n }\n ],\n \"main\": \"./README.mdx\",\n \"types\": \"./src/types/index.ts\",\n \"exports\": {\n \"./README.mdx\": \"./README.mdx\",\n \".\": {\n \"types\": \"./src/types/index.ts\"\n }\n },\n \"bin\": {\n \"fox-dev\": \"./scripts/dev.js\",\n \"fox\": \"./scripts/prod.js\"\n },\n \"scripts\": {\n \"============================ BUILD =============================\": \"\",\n \"build\": \"tsup\",\n \"prebuild\": \"pnpm -w run build:workspace-deps \\\"$PWD\\\"\",\n \"postbuild\": \"pnpm run build-dts\",\n \"build-dts\": \"dts-bundle-generator -o build/fox.d.ts src/types/index.ts --no-banner --external-inlines=commander loglevel --sort --inline-declare-externals\",\n \"============================ DEPLOY =============================\": \"\",\n \"deploy\": \"fox deploy npm\",\n \"============================ LINT =============================\": \"\",\n \"lint:clean\": \"rm -f .eslintcache\",\n \"lint:type-check\": \"tsc --noEmit --pretty\",\n \"lint:eslint\": \"eslint --cache --cache-strategy content --max-warnings=0 ./\",\n \"============================ TEST =============================\": \"\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\"\n },\n \"dependencies\": {\n \"@foxford/logger\": \"workspace:*\",\n \"@tsconfig/node16\": \"16.1.3\",\n \"@types/cli-progress\": \"3.11.5\",\n \"@types/fluent-ffmpeg\": \"2.1.24\",\n \"chalk\": \"4.1.0\",\n \"cli-progress\": \"3.12.0\",\n \"cli-table3\": \"0.6.5\",\n \"commander\": \"13.1.0\",\n \"dotenv\": \"16.4.5\",\n \"dotenv-expand\": \"11.0.6\",\n \"file-type\": \"19.0.0\",\n \"filesize\": \"10.1.2\",\n \"fluent-ffmpeg\": \"2.1.2\",\n \"fs-extra\": \"11.2.0\",\n \"glob\": \"10.4.2\",\n \"inquirer\": \"12.4.3\",\n \"os-name\": \"4.0.1\",\n \"package-manager-detector\": \"1.3.0\",\n \"read-package-up\": \"11.0.0\",\n \"systeminformation\": \"5.25.11\",\n \"tinify\": \"1.7.1\",\n \"tsx\": \"4.15.7\",\n \"typescript\": \"5.8.3\",\n \"yaml\": \"2.4.5\",\n \"zx\": \"8.5.4\"\n },\n \"devDependencies\": {\n \"@foxford/eslint-config\": \"workspace:*\",\n \"@foxford/typescript-config\": \"workspace:*\",\n \"dts-bundle-generator\": \"9.5.1\",\n \"tsup\": \"8.4.0\",\n \"vitest\": \"3.0.9\"\n }\n}\n","import { createRequire } from 'node:module'\nimport path from 'node:path'\n\nimport chalk from 'chalk'\nimport fs from 'fs-extra'\n\nimport { ERROR_PREFIX } from '../lib/ui'\nimport { logger } from '../logger'\n\nimport type * as FoxfordTools from '../types'\nimport type { NormalizedPackageJson } from 'read-package-up'\n\nconst log = logger.getLogger('command-loader')\n\nexport class CommandLoader {\n static PROCESSES_DIR = path.resolve(__dirname, '..', 'processes')\n\n public static async load(program: FoxfordTools.Program): Promise<void> {\n if (process.env.NODE_ENV === 'production') {\n await this.loadProductionProcesses(program)\n } else {\n await this.loadDevelopmentProcesses(program)\n }\n\n await Promise.all(program.getCommands().map(async (command) => await command.load(program)))\n this.handleInvalidCommand(program)\n }\n\n static async loadProductionProcesses(program: FoxfordTools.Program) {\n try {\n for (const [processName, moduleLoader] of Object.entries({\n codemod: () => import('../processes/codemod'),\n deploy: () => import('../processes/deploy'),\n info: () => import('../processes/info'),\n optimize: () => import('../processes/optimize')\n })) {\n try {\n log.debug(`Загружаем модуль: ${chalk.cyan(processName)}`)\n const module = await moduleLoader()\n module.default(program)\n } catch (err) {\n log.error(`Ошибка при загрузке модуля \"${processName}\":`, err)\n }\n }\n } catch (err) {\n log.error('Ошибка при загрузке процессов:', err)\n }\n\n try {\n await this.loadPlugins(program)\n } catch (err) {\n log.error('Ошибка при чтении плагина:', err)\n }\n }\n\n static async loadDevelopmentProcesses(program: FoxfordTools.Program) {\n if (!(await fs.pathExists(CommandLoader.PROCESSES_DIR))) {\n log.error(`Директория процессов не найдена: ${CommandLoader.PROCESSES_DIR}`)\n return\n }\n\n try {\n const processes = await this.getProcesses(CommandLoader.PROCESSES_DIR)\n for (const processName of processes) {\n try {\n log.debug(`Загружаем модуль: ${chalk.cyan(processName)}`)\n const modulePath = path.join(CommandLoader.PROCESSES_DIR, processName)\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const module = require(modulePath)\n module.default(program)\n } catch (err) {\n log.error(`Ошибка при загрузке модуля \"${processName}\":`, err)\n }\n }\n } catch (err) {\n log.error('Ошибка при чтении процессов:', err)\n }\n\n try {\n await this.loadPlugins(program)\n } catch (err) {\n log.error('Ошибка при чтении плагина:', err)\n }\n }\n\n private static getModulePath(packageJson: NormalizedPackageJson): string {\n let modulePath: string = ''\n\n if (packageJson.exports) {\n // Используем exports для определения точки входа\n if (typeof packageJson.exports === 'string') {\n modulePath = packageJson.exports\n } else if ((packageJson.exports as Record<string, unknown>)['.']) {\n // Если есть экспорт по умолчанию\n const defaultExport = (packageJson.exports as Record<string, string>)['.'] as string | Record<string, string>\n if (typeof defaultExport === 'string') {\n modulePath = defaultExport\n } else {\n if (packageJson.type === 'module') {\n modulePath = defaultExport.import as string\n } else {\n modulePath = defaultExport.require as string\n }\n }\n }\n } else if (packageJson.main) {\n // Fallback на main, если exports не определен\n modulePath = packageJson.main as string\n } else {\n // Если ни exports, ни main не определены, используем index.js\n modulePath = 'index.js'\n }\n\n return modulePath\n }\n\n private static async loadPlugins(program: FoxfordTools.Program) {\n const plugins = await program.getPluginPaths()\n\n for (const plugin of plugins) {\n log.debug(`Загружаем модуль: ${chalk.cyan(plugin.pkgJson.name)}`)\n const dirname = path.dirname(plugin.path)\n\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const module = require(`${plugin.pkgJson.name}`)\n module.default(program)\n continue\n }\n\n let targetPath = path.resolve(dirname)\n\n if (fs.existsSync(path.resolve(targetPath, 'build'))) {\n targetPath = path.resolve(targetPath, 'build')\n }\n\n if (fs.existsSync(path.join(targetPath, 'package.json'))) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const packageJson = require(path.join(targetPath, 'package.json'))\n\n try {\n const require = createRequire(__filename)\n let module\n\n const modulePath = this.getModulePath(packageJson)\n\n if (packageJson.type === 'module') {\n // Если это ES модуль\n module = await import(path.join(targetPath, modulePath))\n } else {\n // Если это CommonJS модуль\n module = require(path.join(targetPath, modulePath))\n }\n\n if (typeof module.default === 'function') {\n module.default(program)\n } else if (typeof module === 'function') {\n module(program)\n } else {\n log.warn(`Модуль \"${plugin.pkgJson.name}\" не экспортирует функцию по умолчанию`)\n }\n } catch (error) {\n log.error(`Ошибка при загрузке модуля \"${plugin.pkgJson.name}\":`, error)\n }\n }\n }\n }\n\n private static async getProcesses(processesPath: string): Promise<string[]> {\n const files = await fs.readdir(processesPath)\n\n return files\n .filter((file) => {\n const filePath = path.join(processesPath, file, 'index.ts')\n const stat = fs.statSync(filePath)\n return stat.isFile()\n })\n .map((file) => path.parse(file).name)\n }\n\n private static handleInvalidCommand(program: FoxfordTools.Program) {\n program.on('command:*', () => {\n console.error(`\\n${ERROR_PREFIX} Неверная команда: ${chalk.red('%s')}`, program.args.join(' '))\n console.log(`Смотри ${chalk.red('--help')} для вывода доступного списка команд.\\n`)\n process.exit(1)\n })\n }\n}\n"],"mappings":"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","names":["ffmpeg","path","chalk","import_chalk","chalk","path","fs","dotenvExpand","dotenv","import_node_path","init_logger","chalk","label","import_chalk","init_logger","chalk","label","import_chalk","tinify","chalk","import_node_path","import_dotenv","import_fs_extra","path","dotenv","result","packageJson","init_program","import_chalk","chalk","init_program","import_node_path","import_chalk","import_fs_extra","path","chalk","fs","init_collection","import_chalk","import_commander","init_collection","init_program","chalk","Table","import_zx","import_zx","import_zx","init_action","init_program","import_commander","init_command","init_program","init_action","init_command","import_chalk","import_zx","init_action","init_program","chalk","osName","si","init_command","init_program","init_action","init_command","import_node_path","import_chalk","import_cli_table3","import_filesize","init_action","init_program","Table","chalk","path","inquirer","progress","fs","import_chalk","init_command","init_program","path","chalk","init_action","init_command","import_chalk","init_program","import_node_path","import_chalk","import_fs_extra","log","chalk","module","fs","path","require","chalk"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@foxford/cli",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "description": "Foxford Cli",
5
5
  "keywords": [
6
6
  "foxford",
@@ -62,6 +62,6 @@
62
62
  ],
63
63
  "main": "./fox.js",
64
64
  "types": "./fox.d.ts",
65
- "sha": "969ec9fe",
65
+ "sha": "79d8da0f",
66
66
  "scripts": {}
67
67
  }