@itcase/config
v1.7.13
Published
ITCase Config
Readme
ITCase Config
Набор готовых конфигураций для инструментов разработки, используемых в проектах ITCase. Этот пакет содержит стандартизированные настройки для commitlint, lint-staged, PostCSS, semantic-release и SVGR.
Установка
npm install --save-dev @itcase/configДоступные конфигурации
Пакет предоставляет следующие конфигурации:
Commitlint — проверка формата сообщений коммитов
createCommitlintProjectConfig(SCOPES)— для разработкиcreateCommitlintReleaseConfig(SCOPES)— для релизных ветокcommitlint/commitizenAdapter.js— адаптер Commitizen (type → scope → subScope → subject)
Smart commit — CLI
smart-commit(Cursor Agent → preview → commit)Husky — общие git-хуки в
husky-hooks/- В git только
.husky/config; обёртки и_run.shсоздаётitcase-config-husky-installприnpm i
- В git только
Lint-staged — запуск линтеров для измененных файлов
lintStaged— eslint, stylelint;tsc --noEmit, если в staged есть.ts/.tsxlintStagedMonorepo— то же, но typecheck черезnpm run typecheckпо workspaces- обе конфигурации блокируют коммит, если в
package.jsonесть локальные зависимостиfile:/link:
PostCSS — обработка CSS
postcss/index.js— стандартная конфигурацияpostcss/nextVite.js— для Next.js/Vite проектов
Semantic Release — автоматическое управление версиями
semantic-release/config.js— конфигурацияsemantic-release/index.js— стандартная конфигурацияsemantic-release/indexLerna.js— для Lerna монорепозиториевsemantic-release/indexVSMarketplace.js— для VS Code расширений
SVGR — преобразование SVG в React компоненты
svgr/index.js— реэкспортsvgr/svgrConfigBase.js— общие plugins и svgosvgr/svgrConfigWeb.js— вебsvgr/svgrConfigReactNative.js— React Native (native: true)svgr/webpack.js— интеграция с Webpack
Подключение Lint-staged
В корне проекта lint-staged.config.mjs:
import { lintStaged } from '@itcase/config/lint-staged/index.js'
export default lintStagedДля монорепозитория с npm run typecheck — lintStagedMonorepo.
Подключение Commitlint
- Установите зависимости в проекте:
npm install --save-dev @itcase/config @commitlint/cli @commitlint/config-conventional conventional-changelog-conventionalcommits- Создайте в корне проекта файл
commitlint.config.mjs:
import {
createCommitlintProjectConfig,
createCommitlintReleaseConfig,
} from '@itcase/config/commitlint/index.js'
const SCOPES = {
auth: [],
common: [],
dashboard: [],
logbook: ['events', 'filters'],
map: ['layers', 'controls', 'markers'],
report: ['monitoring', 'analytics', 'export', 'filters'],
other: [],
}
export default process.env.RELEASE_BRANCH === 'true'
? createCommitlintReleaseConfig(SCOPES)
: createCommitlintProjectConfig(SCOPES)Git-хуки подключаются из
husky-hooks/— см. раздел Подключение Husky ниже.(Опционально) Интерактивное оформление коммитов через Commitizen. Установите:
npm install --save-dev commitizen @commitlint/cz-commitlintДобавьте файл .cz.json
{ "path": "@itcase/config/commitlint/commitizenAdapter.js" }Smart commit
smart-commit — Cursor Agent (ask) планирует коммиты по SCOPES, печатает сообщения, спрашивает [y/N]. Перед коммитом ждёт и снимает устаревший .git/index.lock, если его никто не держит. Lockfile (package-lock.json и аналоги) всегда кладётся в тот же коммит, что и соседний package.json; при одном только bump deps агент не вызывается.
[random pixel animation]
Drafting commit messages… (12s)
Agent started (Composer)
Reading src/foo.ts
Commits:
• feat(other): add smart-commit cli
• docs(docs): document smart-commit usage
Create 2 commit(s)? [y/N]Нужны Cursor Agent + логин (agent login / CURSOR_API_KEY) и commitlint.config.* с SCOPES.
В проекте с @itcase/config добавьте в package.json:
{
"scripts": {
"smart-commit": "smart-commit",
"smart-commit:dry": "smart-commit --dry-run"
}
}Запуск:
npm run smart-commit:dry
npm run smart-commit
make smart-commit-dry # если есть Makefile
make smart-commitВ самом @itcase/config (разработка пакета):
npm run smart-commit:dry
npm run smart-commit:yes
make smart-commit-dryЕсли agent нет в PATH (command not found):
curl https://cursor.com/install -fsS | bash
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
agent --version
agent loginCLI ставится в ~/.local/bin. Логин в Cursor IDE этот CLI не авторизует.
Без браузера (CI): export CURSOR_API_KEY=… вместо agent login.
Обновление CLI: agent update.
Пока Agent думает, в терминале крутится pixel-анимация (случайно nyan cat, dancing banana или упячка) + статус (Ns), а под ними живой лог агента (log-update). Пока процесс агента жив, CLI его не убивает по таймауту. Принудительно: --cat / --banana / --upyachka. Для полного лога: npm run smart-commit -- --verbose --dry-run.
Важно: в npm есть одноимённый пакет
smart-commit. Используйтеnpm run smart-commitиз проекта с@itcase/config— bin берётся изnode_modules.npx smart-commitбез локальной установки может подтянуть чужой пакет; CLI перед запуском проверяет, что выполняется именно@itcase/config.
Подключение Semantic Release
Обычный пакет:
import { semanticReleasePackage } from '@itcase/config/semantic-release/index.js'
export default semanticReleasePackageМонорепозиторий:
import { semanticReleaseMonorepo } from '@itcase/config/semantic-release/index.js'
export default semanticReleaseMonorepoЗаметки монорепозитория печатает conventional-changelog-writer 9 из этого пакета. Writer 8, который ставит semantic-release, для conventional-changelog-conventionalcommits 10 оставляет в CHANGELOG.md только заголовок версии. Отдельный overrides в репозитории не нужен. Уже опубликованный релиз сам не перепишется.
Подключение Husky
В git кладите только .husky/config. Обёртки хуков и _run.sh создаёт itcase-config-husky-install при npm i. Логика хуков живёт в @itcase/config/husky-hooks.
{
"scripts": {
"prepare": "husky && itcase-config-husky-install"
}
}Пока бинарь ещё не в установленной версии пакета:
{
"scripts": {
"prepare": "husky && node node_modules/@itcase/config/husky-hooks/install-launcher.js"
}
}В .gitignore:
.husky/*
!.husky/configitcase-config-husky-install копирует _run.sh, создаёт обёртки и при отсутствии восстанавливает config из config.example. Свои полные хуки не перезаписывает. npm i --ignore-scripts файлы не создаст.
.husky/config:
PROTECTED_BRANCHES="master"
RELEASE_BRANCHES="master"Образец: husky-hooks/config.example.
