From fc369d047e13cba9443fe36c0b6bb2ce3beaf61c Mon Sep 17 00:00:00 2001 From: simosmik Date: Wed, 18 Feb 2026 09:45:14 +0000 Subject: [PATCH] refactor(releases): Create a contributing guide and proper release notes using a release-it plugin --- .release-it.json | 33 +++- CONTRIBUTING.md | 156 +++++++++++++++++ README.ja.md | 26 +-- README.ko.md | 26 +-- README.md | 26 +-- README.zh-CN.md | 26 +-- package-lock.json | 422 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 8 files changed, 609 insertions(+), 107 deletions(-) create mode 100644 CONTRIBUTING.md diff --git a/.release-it.json b/.release-it.json index d70c66a..d2d33f0 100644 --- a/.release-it.json +++ b/.release-it.json @@ -2,20 +2,39 @@ "git": { "commitMessage": "Release ${version}", "tagName": "v${version}", - "changelog": "git log --pretty=format:\"* %s (%h)\" ${from}...${to}" + "requireBranch": "main", + "requireCleanWorkingDir": true }, "npm": { "publish": true }, "github": { "release": true, - "releaseName": "CloudCLI UI v${version}", - "releaseNotes": { - "commit": "* ${commit.subject} (${sha}){ - thanks @${author.login}!}", - "excludeMatches": ["viper151"] - } + "releaseName": "CloudCLI UI v${version}" }, "hooks": { "before:init": ["npm run build"] + }, + "plugins": { + "@release-it/conventional-changelog": { + "infile": "CHANGELOG.md", + "header": "# Changelog\n\nAll notable changes to CloudCLI UI will be documented in this file.\n", + "preset": { + "name": "conventionalcommits", + "types": [ + { "type": "feat", "section": "New Features" }, + { "type": "feature", "section": "New Features" }, + { "type": "fix", "section": "Bug Fixes" }, + { "type": "perf", "section": "Performance" }, + { "type": "refactor", "section": "Refactoring" }, + { "type": "docs", "section": "Documentation" }, + { "type": "style", "section": "Styling" }, + { "type": "chore", "section": "Maintenance" }, + { "type": "ci", "section": "CI/CD" }, + { "type": "test", "section": "Tests" }, + { "type": "build", "section": "Build" } + ] + } + } } -} \ No newline at end of file +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..4d44682 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,156 @@ +# Contributing to CloudCLI UI + +Thanks for your interest in contributing to CloudCLI UI! Before you start, please take a moment to read through this guide. + +## Before You Start + +- **Search first.** Check [existing issues](https://github.com/siteboon/claudecodeui/issues) and [pull requests](https://github.com/siteboon/claudecodeui/pulls) to avoid duplicating work. +- **Discuss first** for new features. Open an [issue](https://github.com/siteboon/claudecodeui/issues/new) to discuss your idea before investing time in implementation. We may already have plans or opinions on how it should work. +- **Bug fixes are always welcome.** If you spot a bug, feel free to open a PR directly. + +## Prerequisites + +- [Node.js](https://nodejs.org/) 22 or later +- [Claude Code CLI](https://docs.anthropic.com/en/docs/claude-code) installed and configured + +## Getting Started + +1. Fork the repository +2. Clone your fork: + ```bash + git clone https://github.com//claudecodeui.git + cd claudecodeui + ``` +3. Install dependencies: + ```bash + npm install + ``` +4. Start the development server: + ```bash + npm run dev + ``` +5. Create a branch for your changes: + ```bash + git checkout -b feat/your-feature-name + ``` + +## Project Structure + +``` +claudecodeui/ +├── src/ # React frontend (Vite + Tailwind) +│ ├── components/ # UI components +│ ├── contexts/ # React context providers +│ ├── hooks/ # Custom React hooks +│ ├── i18n/ # Internationalization and translations +│ ├── lib/ # Shared frontend libraries +│ ├── types/ # TypeScript type definitions +│ └── utils/ # Frontend utilities +├── server/ # Express backend +│ ├── routes/ # API route handlers +│ ├── middleware/ # Express middleware +│ ├── database/ # SQLite database layer +│ └── tools/ # CLI tool integrations +├── shared/ # Code shared between client and server +└── public/ # Static assets, icons, PWA manifest +``` + +## Development Workflow + +- `npm run dev` — Start both the frontend and backend in development mode +- `npm run build` — Create a production build +- `npm run server` — Start only the backend server +- `npm run client` — Start only the Vite dev server + +## Making Changes + +### Bug Fixes + +- Reference the issue number in your PR if one exists +- Describe how to reproduce the bug in your PR description +- Add a screenshot or recording for visual bugs + +### New Features + +- Keep the scope focused — one feature per PR +- Include screenshots or recordings for UI changes + +### Documentation + +- Documentation improvements are always welcome +- Keep language clear and concise + +## Commit Convention + +We follow [Conventional Commits](https://conventionalcommits.org/) to generate release notes automatically. Every commit message should follow this format: + +``` +(optional scope): +``` + +Use imperative, present tense: "add feature" not "added feature" or "adds feature". + +### Types + +| Type | Description | +|------|-------------| +| `feat` | A new feature | +| `fix` | A bug fix | +| `perf` | A performance improvement | +| `refactor` | Code change that neither fixes a bug nor adds a feature | +| `docs` | Documentation only | +| `style` | CSS, formatting, visual changes | +| `chore` | Maintenance, dependencies, config | +| `ci` | CI/CD pipeline changes | +| `test` | Adding or updating tests | +| `build` | Build system changes | + +### Examples + +```bash +feat: add conversation search +feat(i18n): add Japanese language support +fix: redirect unauthenticated users to login +fix(editor): syntax highlighting for .env files +perf: lazy load code editor component +refactor(chat): extract message list component +docs: update API configuration guide +``` + +### Breaking Changes + +Add `!` after the type or include `BREAKING CHANGE:` in the commit footer: + +```bash +feat!: redesign settings page layout +``` + +## Pull Requests + +- Give your PR a clear, descriptive title following the commit convention above +- Fill in the PR description with what changed and why +- Link any related issues +- Include screenshots for UI changes +- Make sure the build passes (`npm run build`) +- Keep PRs focused — avoid unrelated changes + +## Releases + +Releases are managed by maintainers using [release-it](https://github.com/release-it/release-it) with the [conventional changelog plugin](https://github.com/release-it/conventional-changelog). + +```bash +npm run release # interactive (prompts for version bump) +npm run release -- patch # patch release +npm run release -- minor # minor release +``` + +This automatically: +- Bumps the version based on commit types (`feat` = minor, `fix` = patch) +- Generates categorized release notes +- Updates `CHANGELOG.md` +- Creates a git tag and GitHub Release +- Publishes to npm + +## License + +By contributing, you agree that your contributions will be licensed under the [GPL-3.0 License](LICENSE). \ No newline at end of file diff --git a/README.ja.md b/README.ja.md index c71b85f..0fcce17 100644 --- a/README.ja.md +++ b/README.ja.md @@ -289,31 +289,7 @@ Claude Code、Cursor、Codex のセッションが利用可能な場合、自動 ### コントリビューション -コントリビューションを歓迎します!以下のガイドラインに従ってください: - -#### はじめに -1. リポジトリを **Fork** する -2. Fork を **クローン**: `git clone ` -3. 依存関係を **インストール**: `npm install` -4. フィーチャーブランチを **作成**: `git checkout -b feature/amazing-feature` - -#### 開発プロセス -1. 既存のコードスタイルに従って **変更を加える** -2. **徹底的にテスト** - すべての機能が正しく動作することを確認 -3. **品質チェックを実行**: `npm run lint && npm run format` -4. [Conventional Commits](https://conventionalcommits.org/) に従った説明的なメッセージで **コミット** -5. ブランチに **プッシュ**: `git push origin feature/amazing-feature` -6. 以下を含む **プルリクエストを提出**: - - 変更内容の明確な説明 - - UI 変更の場合はスクリーンショット - - 該当する場合はテスト結果 - -#### コントリビューション内容 -- **バグ修正** - 安定性の向上に貢献 -- **新機能** - 機能の強化(まず Issue で議論してください) -- **ドキュメント** - ガイドと API ドキュメントの改善 -- **UI/UX の改善** - より良いユーザー体験 -- **パフォーマンス最適化** - より高速に +コントリビューションを歓迎します!コミット規約、開発ワークフロー、リリースプロセスの詳細は [Contributing Guide](CONTRIBUTING.md) をご覧ください。 ## トラブルシューティング diff --git a/README.ko.md b/README.ko.md index d12c174..b9c8a75 100644 --- a/README.ko.md +++ b/README.ko.md @@ -288,31 +288,7 @@ Claude Code, Cursor 또는 Codex 세션을 사용할 수 있을 때 자동으로 ### 기여하기 -기여를 환영합니다! 다음 가이드라인을 따라주세요: - -#### 시작하기 -1. 리포지토리를 **Fork**합니다 -2. Fork를 **클론**: `git clone ` -3. 의존성 **설치**: `npm install` -4. 기능 브랜치 **생성**: `git checkout -b feature/amazing-feature` - -#### 개발 프로세스 -1. 기존 코드 스타일을 따라 **변경 사항을 적용**합니다 -2. **철저하게 테스트** - 모든 기능이 올바르게 작동하는지 확인 -3. **품질 검사 실행**: `npm run lint && npm run format` -4. [Conventional Commits](https://conventionalcommits.org/)를 따르는 설명적 메시지로 **커밋** -5. 브랜치에 **푸시**: `git push origin feature/amazing-feature` -6. 다음을 포함하여 **풀 리퀘스트를 제출**: - - 변경 사항에 대한 명확한 설명 - - UI 변경 시 스크린샷 - - 해당되는 경우 테스트 결과 - -#### 기여 내용 -- **버그 수정** - 안정성 향상에 도움 -- **새로운 기능** - 기능 향상 (먼저 이슈에서 논의) -- **문서** - 가이드 및 API 문서 개선 -- **UI/UX 개선** - 더 나은 사용자 경험 -- **성능 최적화** - 더 빠르게 만들기 +기여를 환영합니다! 커밋 규칙, 개발 워크플로우, 릴리스 프로세스에 대한 자세한 내용은 [Contributing Guide](CONTRIBUTING.md)를 참조해주세요. ## 문제 해결 diff --git a/README.md b/README.md index 5adf8cd..f0e7f7f 100644 --- a/README.md +++ b/README.md @@ -291,31 +291,7 @@ session counts ### Contributing -We welcome contributions! Please follow these guidelines: - -#### Getting Started -1. **Fork** the repository -2. **Clone** your fork: `git clone ` -3. **Install** dependencies: `npm install` -4. **Create** a feature branch: `git checkout -b feature/amazing-feature` - -#### Development Process -1. **Make your changes** following the existing code style -2. **Test thoroughly** - ensure all features work correctly -3. **Run quality checks**: `npm run lint && npm run format` -4. **Commit** with descriptive messages following [Conventional Commits](https://conventionalcommits.org/) -5. **Push** to your branch: `git push origin feature/amazing-feature` -6. **Submit** a Pull Request with: - - Clear description of changes - - Screenshots for UI changes - - Test results if applicable - -#### What to Contribute -- **Bug fixes** - Help us improve stability -- **New features** - Enhance functionality (discuss in issues first) -- **Documentation** - Improve guides and API docs -- **UI/UX improvements** - Better user experience -- **Performance optimizations** - Make it faster +We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details on commit conventions, development workflow, and release process. ## Troubleshooting diff --git a/README.zh-CN.md b/README.zh-CN.md index 2a06dfa..dccca4b 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -290,31 +290,7 @@ Claude Code UI 支持 **[TaskMaster AI](https://github.com/eyaltoledano/claude-t ### 贡献 -我们欢迎贡献!请遵循以下指南: - -#### 入门 -1. **Fork** 仓库 -2. **克隆** 您的 fork: `git clone ` -3. **安装** 依赖: `npm install` -4. **创建** 特性分支: `git checkout -b feature/amazing-feature` - -#### 开发流程 -1. **进行更改**,遵循现有代码风格 -2. **彻底测试** - 确保所有功能正常工作 -3. **运行质量检查**: `npm run lint && npm run format` -4. **提交**,遵循 [Conventional Commits](https://conventionalcommits.org/)的描述性消息 -5. **推送** 到您的分支: `git push origin feature/amazing-feature` -6. **提交** 拉取请求,包括: - - 更改的清晰描述 - - UI 更改的截图 - - 适用时的测试结果 - -#### 贡献内容 -- **错误修复** - 帮助我们提高稳定性 -- **新功能** - 增强功能(先在 issue 中讨论) -- **文档** - 改进指南和 API 文档 -- **UI/UX 改进** - 更好的用户体验 -- **性能优化** - 让它更快 +我们欢迎贡献!有关提交规范、开发流程和发布流程的详细信息,请参阅 [Contributing Guide](CONTRIBUTING.md)。 ## 故障排除 diff --git a/package-lock.json b/package-lock.json index a1c4061..e94d715 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,6 +69,7 @@ "cloudcli": "server/cli.js" }, "devDependencies": { + "@release-it/conventional-changelog": "^10.0.5", "@types/node": "^22.19.7", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17", @@ -689,6 +690,46 @@ "w3c-keyname": "^2.2.4" } }, + "node_modules/@conventional-changelog/git-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-2.5.1.tgz", + "integrity": "sha512-lAw7iA5oTPWOLjiweb7DlGEMDEvzqzLLa6aWOly2FSZ64IwLE8T458rC+o+WvI31Doz6joM7X2DoNog7mX8r4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/child-process-utils": "^1.0.0", + "@simple-libs/stream-utils": "^1.1.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.1.0" + }, + "peerDependenciesMeta": { + "conventional-commits-filter": { + "optional": true + }, + "conventional-commits-parser": { + "optional": true + } + } + }, + "node_modules/@conventional-changelog/git-client/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@emnapi/runtime": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz", @@ -2668,6 +2709,41 @@ "node": ">=14" } }, + "node_modules/@release-it/conventional-changelog": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/@release-it/conventional-changelog/-/conventional-changelog-10.0.5.tgz", + "integrity": "sha512-Dxul3YlUsDLbIg+aR6T0QR/VyKwuJNR3GZM8mKVEwFO8GpH2H5vgnN7kacEvq/Qk5puDadOVbhbUq/KBjraemQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@conventional-changelog/git-client": "^2.5.1", + "concat-stream": "^2.0.0", + "conventional-changelog": "^7.1.1", + "conventional-changelog-angular": "^8.1.0", + "conventional-changelog-conventionalcommits": "^9.1.0", + "conventional-recommended-bump": "^11.2.0", + "semver": "^7.7.3" + }, + "engines": { + "node": "^20.12.0 || >=22.0.0" + }, + "peerDependencies": { + "release-it": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@release-it/conventional-changelog/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@remix-run/router": { "version": "1.23.0", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.0.tgz", @@ -2981,6 +3057,39 @@ "win32" ] }, + "node_modules/@simple-libs/child-process-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-1.0.1.tgz", + "integrity": "sha512-3nWd8irxvDI6v856wpPCHZ+08iQR0oHTZfzAZmnbsLzf+Sf1odraP6uKOHDZToXq3RPRV/LbqGVlSCogm9cJjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.1.0", + "@types/node": "^22.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, + "node_modules/@simple-libs/stream-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.1.0.tgz", + "integrity": "sha512-6rsHTjodIn/t90lv5snQjRPVtOosM7Vp0AKdrObymq45ojlgVwnpAqdc+0OBBrpEiy31zZ6/TKeIVqV1HwvnuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^22.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, "node_modules/@tailwindcss/typography": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.16.tgz", @@ -3122,6 +3231,13 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/parse-path": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", @@ -3462,6 +3578,13 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, "node_modules/ast-types": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", @@ -4374,6 +4497,17 @@ "node": ">= 6" } }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4469,6 +4603,143 @@ "node": ">= 0.6" } }, + "node_modules/conventional-changelog": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-7.1.1.tgz", + "integrity": "sha512-rlqa8Lgh8YzT3Akruk05DR79j5gN9NCglHtJZwpi6vxVeaoagz+84UAtKQj/sT+RsfGaZkt3cdFCjcN6yjr5sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@conventional-changelog/git-client": "^2.5.1", + "@types/normalize-package-data": "^2.4.4", + "conventional-changelog-preset-loader": "^5.0.0", + "conventional-changelog-writer": "^8.2.0", + "conventional-commits-parser": "^6.2.0", + "fd-package-json": "^2.0.0", + "meow": "^13.0.0", + "normalize-package-data": "^7.0.0" + }, + "bin": { + "conventional-changelog": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.1.0.tgz", + "integrity": "sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.1.0.tgz", + "integrity": "sha512-MnbEysR8wWa8dAEvbj5xcBgJKQlX/m0lhS8DsyAAWDHdfs2faDJxTgzRYlRYpXSe7UiKrIIlB4TrBKU9q9DgkA==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-5.0.0.tgz", + "integrity": "sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-8.2.0.tgz", + "integrity": "sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^5.0.0", + "handlebars": "^4.7.7", + "meow": "^13.0.0", + "semver": "^7.5.2" + }, + "bin": { + "conventional-changelog-writer": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-filter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-5.0.0.tgz", + "integrity": "sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-commits-parser": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.1.tgz", + "integrity": "sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "meow": "^13.0.0" + }, + "bin": { + "conventional-commits-parser": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-11.2.0.tgz", + "integrity": "sha512-lqIdmw330QdMBgfL0e6+6q5OMKyIpy4OZNmepit6FS3GldhkG+70drZjuZ0A5NFpze5j85dlYs3GabQXl6sMHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@conventional-changelog/git-client": "^2.5.1", + "conventional-changelog-preset-loader": "^5.0.0", + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.1.0", + "meow": "^13.0.0" + }, + "bin": { + "conventional-recommended-bump": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", @@ -4764,6 +5035,19 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "license": "MIT" }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/dotenv": { "version": "17.2.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.2.tgz", @@ -5290,6 +5574,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/fd-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fd-package-json/-/fd-package-json-2.0.0.tgz", + "integrity": "sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "walk-up-path": "^4.0.0" + } + }, "node_modules/file-selector": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", @@ -6056,6 +6350,26 @@ "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==", "license": "CC0-1.0" }, + "node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/html-parse-stringify": { "version": "3.0.1", "resolved": "https://registry.npmmirror.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", @@ -6538,6 +6852,16 @@ "node": ">=0.12.0" } }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -7315,6 +7639,19 @@ "node": ">= 0.6" } }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -8512,6 +8849,34 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/normalize-package-data": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.1.tgz", + "integrity": "sha512-linxNAT6M0ebEYZOx2tO6vBEFsVgnPpv+AVjk0wJHfaUIbq31Jm3T6vvZaarnOeWDh8ShnwXuaAyM7WT3RzErA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^8.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -10886,6 +11251,42 @@ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", "dev": true }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -12213,6 +12614,17 @@ "node": ">= 0.4.0" } }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -12385,6 +12797,16 @@ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", "license": "MIT" }, + "node_modules/walk-up-path": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", + "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/web-namespaces": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", diff --git a/package.json b/package.json index 47e6491..38985d9 100644 --- a/package.json +++ b/package.json @@ -98,6 +98,7 @@ "ws": "^8.14.2" }, "devDependencies": { + "@release-it/conventional-changelog": "^10.0.5", "@types/node": "^22.19.7", "@types/react": "^18.2.43", "@types/react-dom": "^18.2.17",