# super-publisher

> Цель этого пакеты предоставить возможность делать интерактивную публикацию пакетов в монорепозетории.

Latest version **0.2.0** (published 2021-12-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install super-publisher
pnpm add super-publisher
yarn add super-publisher
bun add super-publisher
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.2.0 |
| Published | 2021-12-05 |
| First published | 2021-12-05 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 15 |
| Unpacked size | 22.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Maintainers | slecksy |

## Links

- npm: https://www.npmjs.com/package/super-publisher
- npm.io page: https://npm.io/package/super-publisher

## Dependencies (15)

- [ora](https://npm.io/package/ora.md) ^3.1.0
- [glob](https://npm.io/package/glob.md) ^7.1.3
- [axios](https://npm.io/package/axios.md) ^0.21.2
- [chalk](https://npm.io/package/chalk.md) ^2.4.2
- [execa](https://npm.io/package/execa.md) ^4.0.3
- [figlet](https://npm.io/package/figlet.md) ^1.2.1
- [semver](https://npm.io/package/semver.md) ^5.6.0
- [fs-extra](https://npm.io/package/fs-extra.md) ^9.0.1
- [inquirer](https://npm.io/package/inquirer.md) ^6.2.2
- [chaostest](https://npm.io/package/chaostest.md) 10.1.5
- [commander](https://npm.io/package/commander.md) ^2.19.0
- [simple-git](https://npm.io/package/simple-git.md) ^1.107.0
- [markdownlint](https://npm.io/package/markdownlint.md) ^0.18.0
- [pretty-error](https://npm.io/package/pretty-error.md) ^2.1.1
- [changelog-parser](https://npm.io/package/changelog-parser.md) ^2.6.0

## Recent versions

- 0.2.0 (latest) — 2021-12-05

## README

# super-publisher

Цель этого пакеты предоставить возможность делать интерактивную публикацию пакетов в монорепозетории.

## Как использовать?
### Установка
`npm i super-publisher -D`

### Использование
`super-publisher`

### Конфигурация
`.publisher`

```js
const chosePackages = require('super-publisher/tasks/chosePackages');
const lint = require('super-publisher/tasks/prettier');
const test = require('super-publisher/tasks/jest');
const showGitDiff = require('super-publisher/tasks/showGitDiff');
const choseNextVersion = require('super-publisher/tasks/choseNextVersion');
const npmVersion = require('super-publisher/tasks/npmVersion');
const gitCommit = require('super-publisher/tasks/gitCommit');
const gitPush = require('super-publisher/tasks/gitPush');
const npmPublish = require('super-publisher/tasks/npmPublish');

module.export = async (args) => {
  const cwd = await chosePackages(args.root);
  await lint(cwd);
  await test({ rootDir: cwd });
  await showGitDiff();
  const nextNameNpmVersion = await choseNextVersion(glob.sync('package.json', { cwd })[0]); 
  const nextNpmVersion = await npmVersion(nextNameNpmVersion);
  await gitCommit(nextNpmVersion);
  await gitPush();
  await npmPublish(cwd);
}
```

## Что делает текущая конфигурация publisher?
 
0. Выводит интерактивную консоль с выбором пакетов (chosePackages)
0. Проверяет стаилгайд (lint)
0. Запускает тесты (test)
0. Показыват git-diff (showGitDiff)
0. Предлагает выбор версии (choseNextVersion)
0. Обновляет package.json (npmVersion)
0. Делает commit (gitCommit)
0. Делает push (gitPush)
0. Публикует версию (npmPublish)

## Система расширений

Для каждого репозетория нам может понадобиться свой набор шагов, по этому мы сделали систему задач расширяемой.

- Задача это просто функция, которая делает какое-то полезное действие.
- Задача может конфигурироваться.
- Задачи асинхронны.
- У задачи обязательно должно быть имя. 
- Конкуренция между задачами решается очередностью их подключения.

Давайте рассмотрим пример расширения выбора версии(choseNextVersion)
```js
const path = require('path');
const inquirer = require('inquirer');
const fs = require('fs-extra');

const task = require('super-publisher/task');
const { generateVersionPackage } = require('./utils');

module.export = (pkgPath) => task('choseNextVersion', async (opt) => {
  const value = await inquirer.prompt([{
    type: 'list',
    name: 'version',
    message: 'Select the version component:',
    choices: generateVersionPackage(fs.readJSON(pkgPath).version)
  }]);
  if (!value.version.length) {
    throw new Error('No selected version component');
  }
  return value.version[0];
})
```

У плагина есть один аргумент - объект с данными, его можно модифицировать(он сквозной на все задачи), 
так же можно вернуть из функции значение.

В объекте с данными есть полезные свойства:
`logMessage`-  выводит сообщение в консоль, привязанное к текушей задачи.

---
_Source: https://npm.io/package/super-publisher · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
