# Команды

> Каждая команда dxcl и флаги, которые имеют значение.

Source: https://docxcelerate.com/ru/docs/cli/commands/

CLI называется `dxcl` и поставляется внутри пакета `docxcelerate`. Запустите её
разово через `npx docxcelerate <command>` или установите пакет и вызывайте
`dxcl` напрямую — см. [Начните отсюда](/ru/docs/start-here/).

## dxcl init

Создаёт workspace и устанавливает его зависимости.

```sh
dxcl init my-documents
dxcl init my-documents --dir workspaces
dxcl init my-documents --blank
```

Запустите без аргументов, чтобы пройти пошаговую настройку, которая спросит
шаблон и адрес API.

| Флаг | Действие |
| --- | --- |
| `--dir <path>` | Создать workspace внутри `<path>` |
| `--blank` | Пропустить документ-пример |
| `--official-server` | Направить `upload.endpoint` на официальный движок |
| `--api-endpoint <url>` | Направить `upload.endpoint` на ваш собственный сервис |
| `--no-api-endpoint` | Оставить `upload.endpoint` пустым |

## dxcl document new

Создаёт проект документа внутри workspace.

```sh
dxcl document new tenancy-renewal --title "Tenancy Renewal"
```

Пишет `documents/tenancy-renewal/` с файлами `document.project.ts`,
`document.tsx`, `document-style.ts`, `preview-data.ts`, `types.ts` и каталогами
`derivers/` и `nodes/`. О том, за что отвечает каждый файл, — [проекты
документов](/ru/docs/document-projects/).

## dxcl document node

Генерирует компонент узла и регистрирует его.

```sh
dxcl document node documents/tenancy-renewal next-steps --type paragraph
dxcl document node documents/tenancy-renewal signature  --type image
dxcl document node documents/tenancy-renewal rent-trend --type graph
```

| Флаг | Значения |
| --- | --- |
| `--type` | [`paragraph`](/ru/docs/nodes/paragraph/), [`image`](/ru/docs/nodes/image/), [`graph`](/ru/docs/nodes/graph/) |

Генератор пишет `nodes/<name>.node.tsx` и обновляет `nodes/index.ts`. Он **не**
размещает узел в вашем шаблоне — добавьте его в `document.tsx` в то место
документа, которому он принадлежит.

Записанный узел начинается со своего содержимого. Генерируемым узел делают
заданные на нём промпты, а это компонент решает уже с данными на руках — так что
выбирать здесь нечего. См. [как писать узлы](/ru/docs/writing-nodes/).

## dxcl list

Печатает реестр: все темы и все готовые компоненты, которые поставляются с
пакетом.

```sh
dxcl list
dxcl list themes
dxcl list components
```

Тот же каталог можно просмотреть в разделах [темы](/ru/themes/) и
[компоненты](/ru/components/), где у каждой записи есть предпросмотр,
построенный тем же рендерером, который поставляется с CLI.

## dxcl show

Печатает одну запись целиком — что это, что она читает и куда лягут её файлы.

```sh
dxcl show slate-report
dxcl show payment-summary
```

## dxcl add

Устанавливает темы и компоненты в проект документа.

```sh
dxcl add slate-report
dxcl add letterhead signature-block
dxcl add payment-summary --project documents/arrears-notice
```

| Флаг | Действие |
| --- | --- |
| `--project <dir>` | Проект документа, в который устанавливать |
| `--force` | Перезаписать файлы, которые уже есть |

Без `--project` команда берёт проект документа, в котором вы находитесь, или
единственный внутри `documents/`. Если проектов несколько и ни один не
подразумевается, она скажет об этом, а не станет гадать.

**Компонент** копируется как исходный код — `nodes/<name>.node.tsx` — и
реэкспортируется из `nodes/index.ts`. Дальше это ваш файл: у него нет версии,
его никогда не обновят за вашей спиной, а править его — предполагаемый
следующий шаг, а не форк. Чего команда не делает, так это не правит ваш тип
данных, поэтому поля, которые читает компонент, печатаются, чтобы вы их
добавили. Разместить его в `document.tsx` тоже вам, по той же причине, по
которой генератор узлов этого не трогает.

**Тема** записывается как `document-style.ts` проекта, который
`document.project.ts` и так пробрасывает, — значит, следующий предпросмотр уже
будет в теме. Файл импортирует тему и разворачивает её, так что переопределить
один отступ — это строка, а не форк:

```ts
export const documentStyle: DocumentStyle = themeStyle(slateReportTheme, {
  page: { margins: { topMm: 20 } },
});
```

Установка второй темы заменяет `document-style.ts`, которого никто не касался.
Как только вы написали в него сами, для замены понадобится `--force` — весь
смысл файла в том, что он ваш.
