9eabb75
commit 9eabb75
69 files changed
+11929 -2875
Showing 30 changed files+7519-2258
This diff is too large and has been truncated. Displaying first 30 files.
.astro/settings.json.env.example.gitignoreDEPLOYMENT.mdREADME.mdREADME.md.backupREADME_NEW.mdVercel Deploy.mdastro.config.mjsbun.lockcli/.npmignorecli/CHANGELOG.mdcli/LICENSEcli/README.mdcli/bin/och.tscli/package-lock.jsoncli/package.jsoncli/src/smoke.test.tscli/tsconfig.jsondocs-site/api.htmldocs-site/cli.htmldocs-site/deployment.htmldocs-site/getting-started.htmldocs-site/index.htmldocs-site/styles.cssdocs/GDRIVE_STACK.mddocs/GRAFANA_SETUP.mddocs/publishing.mdpackage.jsonpackages/sdk/package-lock.json
▼.astro/settings.json
+1-1
| @@ -1,5 +1,5 @@ | ||
1 | 1 | { |
2 | 2 | "_variables": { |
3 | - "lastUpdateCheck": 1767130145089 | |
3 | + "lastUpdateCheck": 1768601342501 | |
4 | 4 | } |
5 | 5 | } |
6 | 6 | |
▼.env.example
+6-2
| @@ -24,12 +24,16 @@ DATABASE_URL=./data/opencodehub.db | ||
24 | 24 | # DATABASE_DRIVER=mongodb |
25 | 25 | # DATABASE_URL=mongodb://localhost:27017/opencodehub |
26 | 26 | |
27 | -# Turso example: | |
27 | +# Turso example (Recommended for Vercel): | |
28 | 28 | # DATABASE_DRIVER=turso |
29 | 29 | # DATABASE_URL=libsql://your-database.turso.io |
30 | 30 | # DATABASE_AUTH_TOKEN=your-auth-token |
31 | 31 | |
32 | -# Redis example: | |
32 | +# Upstash Redis (Required for Vercel Sessions): | |
33 | +UPSTASH_REDIS_REST_URL=https://your-redis.upstash.io | |
34 | +UPSTASH_REDIS_REST_TOKEN=your-token | |
35 | + | |
36 | +# Redis example (Self-hosted): | |
33 | 37 | # DATABASE_DRIVER=redis |
34 | 38 | # DATABASE_URL=redis://localhost:6379 |
35 | 39 | |
36 | 40 | |
▼.gitignore
+1-0
| @@ -49,3 +49,4 @@ drizzle/meta/ | ||
49 | 49 | # Monaco Editor cache |
50 | 50 | .monaco/ |
51 | 51 | .vercel |
52 | +scripts/ | |
52 | 53 | |
▼DEPLOYMENT.md
+11-0
| @@ -93,9 +93,20 @@ STORAGE_TYPE=s3 | ||
93 | 93 | STORAGE_BUCKET=opencodehub-production |
94 | 94 | STORAGE_REGION=us-east-1 |
95 | 95 | S3_ACCESS_KEY=<your-access-key> |
96 | +S3_ACCESS_KEY=<your-access-key> | |
96 | 97 | S3_SECRET_KEY=<your-secret-key> |
97 | 98 | ``` |
98 | 99 | |
100 | +**Google Drive + Turso Stack:** | |
101 | +See [docs/GDRIVE_STACK.md](docs/GDRIVE_STACK.md) for detailed setup. | |
102 | +```bash | |
103 | +STORAGE_TYPE=gdrive | |
104 | +GOOGLE_CLIENT_ID=... | |
105 | +GOOGLE_CLIENT_SECRET=... | |
106 | +GOOGLE_REFRESH_TOKEN=... | |
107 | +GOOGLE_FOLDER_ID=... | |
108 | +``` | |
109 | + | |
99 | 110 | **Optional but Recommended:** |
100 | 111 | ```bash |
101 | 112 | # Error Monitoring |
102 | 113 | |
▼README.md
+26-11
| @@ -1,7 +1,7 @@ | ||
1 | 1 | # OpenCodeHub |
2 | 2 | |
3 | 3 | <p align="center"> |
4 | - <img src="public/logo.png" alt="OpenCodeHub Logo" width="200"> | |
4 | + <img src="public/logo.svg" alt="OpenCodeHub Logo" width="200"> | |
5 | 5 | </p> |
6 | 6 | |
7 | 7 | <p align="center"> |
| @@ -66,6 +66,7 @@ | ||
66 | 66 | - **Universal Database Adapter** - PostgreSQL, MySQL, SQLite, MongoDB, Turso, PlanetScale |
67 | 67 | - **Flexible Storage** - Local, S3, MinIO, Google Drive, Azure Blob, R2 |
68 | 68 | - **Production-Ready** - Rate limiting, CSRF, input validation, error monitoring |
69 | +- **Comprehensive Docs** - Integrated documentation site with guides and API reference | |
69 | 70 | |
70 | 71 | --- |
71 | 72 | |
| @@ -128,11 +129,6 @@ docker-compose exec app bun run scripts/seed-admin.ts | ||
128 | 129 | # Access at http://localhost:3000 |
129 | 130 | ``` |
130 | 131 | |
131 | -# Advanced Features Documentation Insert | |
132 | - | |
133 | -**Insert this content into README.md after line 131 (after Docker installation section, before Configuration section)** | |
134 | - | |
135 | 132 | --- |
136 | 133 | |
137 | 134 | ## 🎯 OCH CLI - Command Line Interface |
| @@ -209,7 +205,7 @@ och status # Show stack status (alias: st) | ||
209 | 205 | |
210 | 206 | #### How It Works |
211 | 207 | |
212 | -``` | |
208 | +```text | |
213 | 209 | main |
214 | 210 | └── PR #123: Add database schema |
215 | 211 | └── PR #124: Add authentication service |
| @@ -322,7 +318,7 @@ AI provides: | ||
322 | 318 | - **Fix Suggestions**: Actionable improvements |
323 | 319 | |
324 | 320 | **Example:** |
325 | -``` | |
321 | +```text | |
326 | 322 | 🔴 CRITICAL: SQL Injection Vulnerability |
327 | 323 | File: src/api/users.ts:45 |
328 | 324 | Issue: User input directly concatenated into SQL query |
| @@ -436,12 +432,12 @@ Position PR Title Status | ||
436 | 432 | #### Viewing Metrics |
437 | 433 | |
438 | 434 | **Personal Dashboard:** |
439 | -``` | |
435 | +```text | |
440 | 436 | /metrics/me |
441 | 437 | ``` |
442 | 438 | |
443 | 439 | **Team Dashboard (Admin):** |
444 | -``` | |
440 | +```text | |
445 | 441 | /admin/metrics |
446 | 442 | ``` |
447 | 443 | |
| @@ -454,7 +450,7 @@ och metrics show --repo owner/repo | ||
454 | 450 | |
455 | 451 | #### Example Metrics View |
456 | 452 | |
457 | -``` | |
453 | +```text | |
458 | 454 | 📊 Your Metrics (Last 30 Days) |
459 | 455 | |
460 | 456 | PR Velocity |
| @@ -1045,7 +1041,7 @@ Content-Type: application/json | ||
1045 | 1041 | ### Rate Limits |
1046 | 1042 | |
1047 | 1043 | All endpoints return rate limit headers: |
1048 | -``` | |
1044 | +```http | |
1049 | 1045 | X-RateLimit-Limit: 100 |
1050 | 1046 | X-RateLimit-Remaining: 95 |
1051 | 1047 | X-RateLimit-Reset: 2026-01-01T15:30:00Z |
| @@ -1197,6 +1193,24 @@ curl http://localhost:3000/api/health | ||
1197 | 1193 | |
1198 | 1194 | --- |
1199 | 1195 | |
1196 | +## 🗺️ Roadmap | |
1197 | + | |
1198 | +We are constantly improving OpenCodeHub to make it the ultimate self-hosted development platform. | |
1199 | + | |
1200 | +### Q2 2026: Advanced AI Agents | |
1201 | +- [ ] **Auto-Fix Agents**: Autonomous agents that can silently fix lint errors and simple bugs. | |
1202 | +- [ ] **Test Generation**: Automatically generate unit and integration tests for new code. | |
1203 | + | |
1204 | +### Q3 2026: Federation & Social | |
1205 | +- [ ] **ActivityPub Support**: Follow users and repositories across different OpenCodeHub instances. | |
1206 | +- [ ] **Federated Merge Requests**: Cross-instance collaboration (like Email but better). | |
1207 | + | |
1208 | +### Q4 2026: Ecosystem Expansion | |
1209 | +- [ ] **Mobile App**: Native iOS and Android apps for reviewing code on the go. | |
1210 | +- [ ] **IDE Extensions**: dedicated VS Code and JetBrains plugins. | |
1211 | + | |
1212 | +--- | |
1213 | + | |
1200 | 1214 | ## 🤝 Contributing |
1201 | 1215 | |
1202 | 1216 | We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. |
1203 | 1217 | |
▼README.md.backup
+0-715
| @@ -1,728 +0,0 @@ | ||
1 | -# OpenCodeHub | |
2 | - | |
3 | -<p align="center"> | |
4 | - <img src="public/logo.png" alt="OpenCodeHub Logo" width="200"> | |
5 | -</p> | |
6 | - | |
7 | -<p align="center"> | |
8 | - <strong>A powerful, self-hosted Git platform with CI/CD, code review, and enterprise-grade security</strong> | |
9 | -</p> | |
10 | - | |
11 | -<p align="center"> | |
12 | - <a href="#-features">Features</a> • | |
13 | - <a href="#-quick-start">Quick Start</a> • | |
14 | - <a href="#%EF%B8%8F-configuration">Configuration</a> • | |
15 | - <a href="#-security">Security</a> • | |
16 | - <a href="#-production-deployment">Production</a> • | |
17 | - <a href="#-api">API</a> • | |
18 | - <a href="#-contributing">Contributing</a> | |
19 | -</p> | |
20 | - | |
21 | - | |
22 | -## 🎉 Production Ready! | |
23 | - | |
24 | -**All critical security vulnerabilities are now fixed. OpenCodeHub is production-ready!** 🎊 | |
25 | - | |
26 | -✅ **Rate Limiting** - Prevents brute force attacks | |
27 | -✅ **CSRF Protection** - Cross-site request forgery defense | |
28 | -✅ **Input Validation** - SQL injection & XSS prevention | |
29 | -✅ **Hook Authentication** - Secure git operations | |
30 | -✅ **Environment Validation** - Safe configuration management | |
31 | - | |
32 | -📚 **See [DEPLOYMENT.md](DEPLOYMENT.md) for complete deployment guide** with SSL setup, Nginx configuration, monitoring, database backups, and production best practices. | |
33 | - | |
34 | - | |
35 | -## 🚀 Features | |
36 | - | |
37 | -### Git Hosting & Collaboration | |
38 | -- **Full Git Support** - SSH and HTTP/HTTPS protocols with authentication | |
39 | -- **Repository Management** - Create, fork, archive, and transfer repositories | |
40 | -- **Branch Protection** - Enforce PR requirements, approvals, and code review policies | |
41 | -- **Pull Requests** - Code review with inline comments and approval workflows | |
42 | -- **Issues & Milestones** - Bug tracking with labels, assignees, and custom fields | |
43 | -- **Wiki** - Built-in documentation with markdown support | |
44 | -- **Organizations** - Team management with role-based access control (RBAC) | |
45 | - | |
46 | -### CI/CD & Automation | |
47 | -- **GitHub Actions Compatible** - Run workflows defined in `.github/workflows/` | |
48 | -- **Self-hosted Runners** - Docker-based job execution with artifact support | |
49 | -- **Merge Queue** - Automated PR merge management with conflict detection | |
50 | -- **Webhooks** - Real-time event notifications to external services | |
51 | -- **Secrets Management** - Encrypted storage for CI/CD credentials | |
52 | - | |
53 | -### Security Features ✅ | |
54 | -- **Rate Limiting** - Prevents brute force attacks (5 login attempts per 15min) | |
55 | -- **CSRF Protection** - Double-submit cookie pattern for all state-changing operations | |
56 | -- **Input Validation** - Zod schemas prevent injection attacks | |
57 | -- **Hook Authentication** - Shared secrets protect internal git hooks | |
58 | -- **Session Management** - Automatic expiration and rotation | |
59 | -- **Audit Logging** - Complete activity tracking for compliance | |
60 | - | |
61 | -### Modern Tech Stack | |
62 | -- **Astro + React** - Fast, modern frontend with island architecture | |
63 | -- **TailwindCSS + shadcn/ui** - Beautiful, accessible UI components | |
64 | -- **Universal Database Adapter** - PostgreSQL, MySQL, SQLite, MongoDB, Turso, PlanetScale | |
65 | -- **Flexible Storage** - Local, S3, MinIO, Google Drive, Azure Blob, R2 | |
66 | -- **Production-Ready** - Rate limiting, CSRF, input validation, error monitoring | |
67 | - | |
68 | - | |
69 | -## 📦 Quick Start | |
70 | - | |
71 | -### Prerequisites | |
72 | -- **Node.js** 18+ or **Bun** 1.0+ | |
73 | -- **Database**: PostgreSQL 14+ (recommended) / MySQL 8+ / SQLite 3.35+ | |
74 | -- **Git** 2.30+ | |
75 | -- **Docker** (optional, for CI/CD runners) | |
76 | - | |
77 | -### Installation (5 minutes) | |
78 | - | |
79 | -```bash | |
80 | -# 1. Clone the repository | |
81 | -git clone https://github.com/swadhinbiswas/OpencodeHub.git | |
82 | -cd OpenCodeHub | |
83 | - | |
84 | -# 2. Install dependencies | |
85 | -npm install | |
86 | -# or | |
87 | -bun install | |
88 | - | |
89 | -# 3. Set up environment | |
90 | -cp .env.example .env | |
91 | - | |
92 | -# 4. Configure your .env file (see Configuration section) | |
93 | -nano .env # Set at minimum: JWT_SECRET, SESSION_SECRET, INTERNAL_HOOK_SECRET, SITE_URL | |
94 | - | |
95 | -# 5. Run database migrations | |
96 | -npm run db:push | |
97 | -# or generate migrations for version control: | |
98 | -npm run db:generate | |
99 | - | |
100 | -# 6. Seed an admin user | |
101 | -bun run scripts/seed-admin.ts | |
102 | -# Enter username, email, password when prompted | |
103 | - | |
104 | -# 7. Start development server | |
105 | -npm run dev | |
106 | -# Application available at http://localhost:3000 | |
107 | -``` | |
108 | - | |
109 | -### Using Docker (Recommended for Production) | |
110 | - | |
111 | -```bash | |
112 | -# 1. Clone and configure | |
113 | -git clone https://github.com/swadhinbiswas/OpencodeHub.git | |
114 | -cd OpenCodeHub | |
115 | -cp .env.example .env | |
116 | - | |
117 | -# 2. Edit .env with production values (see Production Deployment section) | |
118 | - | |
119 | -# 3. Start services | |
120 | -docker-compose up -d | |
121 | - | |
122 | -# 4. Create admin user | |
123 | -docker-compose exec app bun run scripts/seed-admin.ts | |
124 | - | |
125 | -# Access at http://localhost:3000 | |
126 | -``` | |
127 | - | |
128 | - | |
129 | -## ⚙️ Configuration | |
130 | - | |
131 | -### Critical Environment Variables | |
132 | - | |
133 | -These **MUST** be set before deploying to production: | |
134 | - | |
135 | -```env | |
136 | -# Security (CRITICAL - Generate strong secrets!) | |
137 | -JWT_SECRET=<run: openssl rand -hex 32> | |
138 | -SESSION_SECRET=<run: openssl rand -hex 32> | |
139 | -INTERNAL_HOOK_SECRET=<run: openssl rand -hex 32> | |
140 | - | |
141 | -# Application URLs (CRITICAL) | |
142 | -SITE_URL=https://your-domain.com # Must be HTTPS in production | |
143 | -PORT=3000 | |
144 | -HOST=0.0.0.0 | |
145 | -``` | |
146 | - | |
147 | -### Database Configuration | |
148 | - | |
149 | -**PostgreSQL (Recommended for Production):** | |
150 | -```env | |
151 | -DATABASE_DRIVER=postgres | |
152 | -DATABASE_URL=postgresql://user:password@localhost:5432/opencodehub | |
153 | -``` | |
154 | - | |
155 | -**MySQL:** | |
156 | -```env | |
157 | -DATABASE_DRIVER=mysql | |
158 | -DATABASE_URL=mysql://user:password@localhost:3306/opencodehub | |
159 | -``` | |
160 | - | |
161 | -**SQLite (Development Only):** | |
162 | -```env | |
163 | -DATABASE_DRIVER=sqlite | |
164 | -DATABASE_URL=./data/opencodehub.db | |
165 | -``` | |
166 | - | |
167 | -### Storage Configuration | |
168 | - | |
169 | -Storage can be configured via Admin Panel (`/admin/storage`) or environment variables: | |
170 | - | |
171 | -**Local Storage:** | |
172 | -```env | |
173 | -STORAGE_TYPE=local | |
174 | -STORAGE_PATH=./data/storage | |
175 | -``` | |
176 | - | |
177 | -**S3/MinIO/R2:** | |
178 | -```env | |
179 | -STORAGE_TYPE=s3 | |
180 | -STORAGE_BUCKET=opencodehub | |
181 | -STORAGE_REGION=us-east-1 | |
182 | -STORAGE_ENDPOINT=https://s3.amazonaws.com | |
183 | -S3_ACCESS_KEY=your-access-key | |
184 | -S3_SECRET_KEY=your-secret-key | |
185 | -``` | |
186 | - | |
187 | -**Google Drive (via Admin Panel):** | |
188 | -- Navigate to `/admin/storage` | |
189 | -- Select "Google Drive" | |
190 | -- Enter Client ID, Secret, and Refresh Token | |
191 | -- Test connection before saving | |
192 | - | |
193 | -### Security Configuration | |
194 | - | |
195 | -**Rate Limiting:** | |
196 | -```env | |
197 | -RATE_LIMIT_AUTH=5 # Login attempts per 15 minutes | |
198 | -RATE_LIMIT_API=100 # API requests per minute | |
199 | -RATE_LIMIT_GIT=200 # Git operations per minute | |
200 | -RATE_LIMIT_SKIP_DEV=false # Never skip in production | |
201 | -``` | |
202 | - | |
203 | -**CSRF Protection:** | |
204 | -```env | |
205 | -CSRF_SKIP_DEV=false # Never skip in production | |
206 | -``` | |
207 | - | |
208 | -### Optional Services | |
209 | - | |
210 | -**Email (SMTP):** | |
211 | -```env | |
212 | -SMTP_HOST=smtp.example.com | |
213 | -SMTP_PORT=587 | |
214 | ||
215 | -SMTP_PASSWORD=your-smtp-password | |
216 | ||
217 | -``` | |
218 | - | |
219 | -**Redis (Caching & Sessions):** | |
220 | -```env | |
221 | -REDIS_URL=redis://localhost:6379 | |
222 | -``` | |
223 | - | |
224 | -**Error Monitoring (Sentry):** | |
225 | -```env | |
226 | -SENTRY_DSN=https://... | |
227 | -ENABLE_TRACING=true | |
228 | -``` | |
229 | - | |
230 | - | |
231 | -## 🔒 Security | |
232 | - | |
233 | -OpenCodeHub implements **production-grade security** out of the box: | |
234 | - | |
235 | -### Implemented Security Features | |
236 | - | |
237 | -✅ **Authentication & Authorization** | |
238 | -- JWT-based sessions with automatic expiration | |
239 | -- Bcrypt password hashing (10 rounds) | |
240 | -- 2FA/TOTP support | |
241 | -- Role-based access control (RBAC) | |
242 | - | |
243 | -✅ **Attack Prevention** | |
244 | -- **Rate Limiting**: Prevents brute force (5 login attempts per 15min) | |
245 | -- **CSRF Protection**: Double-submit cookie pattern on all state-changing operations | |
246 | -- **Input Validation**: Zod schemas prevent SQL injection and XSS | |
247 | -- **XSS Sanitization**: Markdown rendered with `rehype-sanitize` | |
248 | - | |
249 | -✅ **Operational Security** | |
250 | -- **Audit Logging**: All admin actions logged to database | |
251 | -- **Hook Authentication**: Git hooks protected with shared secrets | |
252 | -- **Session Management**: Automatic cleanup and rotation | |
253 | -- **Environment Validation**: Startup checks for missing/weak secrets | |
254 | - | |
255 | -### Security Best Practices | |
256 | - | |
257 | -1. **Always use HTTPS** in production (Let's Encrypt recommended) | |
258 | -2. **Rotate secrets** regularly (especially after team changes) | |
259 | -3. **Enable 2FA** for all admin accounts | |
260 | -4. **Monitor audit logs** for suspicious activity | |
261 | -5. **Keep dependencies updated**: Run `npm audit` weekly | |
262 | - | |
263 | -### Reporting Security Issues | |
264 | - | |
265 | -Please report security vulnerabilities to **[email protected]**. Do not create public issues. | |
266 | - | |
267 | - | |
268 | -## 🚀 Production Deployment | |
269 | - | |
270 | -### Pre-Deployment Checklist | |
271 | - | |
272 | -Before going live, ensure: | |
273 | - | |
274 | -- [ ] **Secrets**: All secrets generated with `openssl rand -hex 32` | |
275 | -- [ ] **HTTPS**: SSL certificate configured (Let's Encrypt recommended) | |
276 | -- [ ] **Database**: PostgreSQL with backups enabled | |
277 | -- [ ] **Storage**: S3/R2 configured (not local filesystem) | |
278 | -- [ ] **Monitoring**: Error tracking (Sentry) and APM configured | |
279 | -- [ ] **Rate Limits**: Configured for expected traffic | |
280 | -- [ ] **Admin Account**: Created via `bun run scripts/seed-admin.ts` | |
281 | -- [ ] **Environment Validation**: Test with `bun run src/lib/env-validation.ts` | |
282 | -- [ ] **Database Migrations**: Generated with `npm run db:generate` | |
283 | - | |
284 | -### Production Environment Variables | |
285 | - | |
286 | -```env | |
287 | -# Application | |
288 | -NODE_ENV=production | |
289 | -SITE_URL=https://git.yourcompany.com | |
290 | -PORT=3000 | |
291 | - | |
292 | -# Security (CRITICAL - Generate with: openssl rand -hex 32) | |
293 | -JWT_SECRET=<64-char-random-hex> | |
294 | -SESSION_SECRET=<64-char-random-hex> | |
295 | -INTERNAL_HOOK_SECRET=<64-char-random-hex> | |
296 | - | |
297 | -# Database (Use connection pooling) | |
298 | -DATABASE_DRIVER=postgres | |
299 | -DATABASE_URL=postgresql://user:password@db-host:5432/opencodehub?pool_timeout=30 | |
300 | - | |
301 | -# Storage (Use cloud storage) | |
302 | -STORAGE_TYPE=s3 | |
303 | -STORAGE_BUCKET=opencodehub-prod | |
304 | -STORAGE_REGION=us-east-1 | |
305 | - | |
306 | -# Rate Limiting (Adjust based on traffic) | |
307 | -RATE_LIMIT_AUTH=5 | |
308 | -RATE_LIMIT_API=200 | |
309 | -RATE_LIMIT_GIT=500 | |
310 | - | |
311 | -# Monitoring | |
312 | -SENTRY_DSN=https://your-sentry-dsn | |
313 | -LOG_LEVEL=info | |
314 | - | |
315 | -# Features | |
316 | -ENABLE_REGISTRATION=true # Set false for invite-only | |
317 | -``` | |
318 | - | |
319 | -### Docker Production Deployment | |
320 | - | |
321 | -```yaml | |
322 | -# docker-compose.prod.yml | |
323 | -version: '3.8' | |
324 | - | |
325 | -services: | |
326 | - app: | |
327 | - image: opencodehub:latest | |
328 | - restart: always | |
329 | - ports: | |
330 | - - "3000:3000" | |
331 | - env_file: .env.production | |
332 | - depends_on: | |
333 | - - postgres | |
334 | - - redis | |
335 | - volumes: | |
336 | - - ./data:/app/data | |
337 | - healthcheck: | |
338 | - test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"] | |
339 | - interval: 30s | |
340 | - timeout: 10s | |
341 | - retries: 3 | |
342 | - | |
343 | - postgres: | |
344 | - image: postgres:15-alpine | |
345 | - restart: always | |
346 | - environment: | |
347 | - POSTGRES_DB: opencodehub | |
348 | - POSTGRES_USER: opencodehub | |
349 | - POSTGRES_PASSWORD: <strong-password> | |
350 | - volumes: | |
351 | - - postgres_data:/var/lib/postgresql/data | |
352 | - | |
353 | - redis: | |
354 | - image: redis:7-alpine | |
355 | - restart: always | |
356 | - | |
357 | -volumes: | |
358 | - postgres_data: | |
359 | -``` | |
360 | - | |
361 | -```bash | |
362 | -# Deploy | |
363 | -docker-compose -f docker-compose.prod.yml up -d | |
364 | - | |
365 | -# Monitor logs | |
366 | -docker-compose -f docker-compose.prod.yml logs -f app | |
367 | - | |
368 | -# Health check | |
369 | -curl https://git.yourcompany.com/api/health | |
370 | -``` | |
371 | - | |
372 | -### Reverse Proxy (Nginx) | |
373 | - | |
374 | -```nginx | |
375 | -server { | |
376 | - listen 443 ssl http2; | |
377 | - server_name git.yourcompany.com; | |
378 | - | |
379 | - ssl_certificate /path/to/cert.pem; | |
380 | - ssl_certificate_key /path/to/key.pem; | |
381 | - | |
382 | - location / { | |
383 | - proxy_pass http://localhost:3000; | |
384 | - proxy_set_header Host $host; | |
385 | - proxy_set_header X-Real-IP $remote_addr; | |
386 | - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
387 | - proxy_set_header X-Forwarded-Proto $scheme; | |
388 | - } | |
389 | - | |
390 | - # Git operations (larger timeouts) | |
391 | - location ~ ^/[^/]+/[^/]+\.git/ { | |
392 | - proxy_pass http://localhost:3000; | |
393 | - proxy_read_timeout 300s; | |
394 | - proxy_send_timeout 300s; | |
395 | - proxy_buffer_size 128k; | |
396 | - proxy_buffers 4 256k; | |
397 | - } | |
398 | -} | |
399 | -``` | |
400 | - | |
401 | -### Database Backups | |
402 | - | |
403 | -```bash | |
404 | -# PostgreSQL backup script (cron daily) | |
405 | -#!/bin/bash | |
406 | -pg_dump -U opencodehub opencodehub | gzip > /backups/opencodehub-$(date +\%Y\%m\%d).sql.gz | |
407 | - | |
408 | -# Retain last 30 days | |
409 | -find /backups -name "opencodehub-*.sql.gz" -mtime +30 -delete | |
410 | -``` | |
411 | - | |
412 | - | |
413 | -## 📚 API Documentation | |
414 | - | |
415 | -### Authentication | |
416 | - | |
417 | -All authenticated endpoints require a session cookie or `Authorization: Bearer <token>` header. | |
418 | - | |
419 | -**Register:** | |
420 | -```bash | |
421 | -POST /api/auth/register | |
422 | -Content-Type: application/json | |
423 | - | |
424 | -{ | |
425 | - "username": "johndoe", | |
426 | - "email": "[email protected]", | |
427 | - "password": "SecureP@ssw0rd", | |
428 | - "displayName": "John Doe" | |
429 | -} | |
430 | - | |
431 | -# Response: 201 Created | |
432 | -{ | |
433 | - "user": { "id": "...", "username": "johndoe", ... }, | |
434 | - "token": "eyJ...", | |
435 | - "expiresAt": "2026-01-08T00:00:00Z" | |
436 | -} | |
437 | -``` | |
438 | - | |
439 | -**Login:** | |
440 | -```bash | |
441 | -POST /api/auth/login | |
442 | -Content-Type: application/json | |
443 | - | |
444 | -{ | |
445 | - "login": "[email protected]", # username or email | |
446 | - "password": "SecureP@ssw0rd" | |
447 | -} | |
448 | - | |
449 | -# With 2FA: | |
450 | -{ | |
451 | - "login": "[email protected]", | |
452 | - "password": "SecureP@ssw0rd", | |
453 | - "totpCode": "123456" | |
454 | -} | |
455 | -``` | |
456 | - | |
457 | -### Repositories | |
458 | - | |
459 | -**Create Repository:** | |
460 | -```bash | |
461 | -POST /api/repos | |
462 | -Authorization: Bearer <token> | |
463 | -Content-Type: application/json | |
464 | - | |
465 | -{ | |
466 | - "name": "my-project", | |
467 | - "description": "My awesome project", | |
468 | - "visibility": "public" # public, private, internal | |
469 | -} | |
470 | -``` | |
471 | - | |
472 | -**Branch Protection:** | |
473 | -```bash | |
474 | -POST /api/repos/{repoId}/branch-protection | |
475 | -Authorization: Bearer <token> | |
476 | -Content-Type: application/json | |
477 | - | |
478 | -{ | |
479 | - "pattern": "main", | |
480 | - "requiresPr": true, | |
481 | - "requiredApprovals": 2, | |
482 | - "dismissStaleReviews": true | |
483 | -} | |
484 | -``` | |
485 | - | |
486 | -### Admin Endpoints | |
487 | - | |
488 | -**List Users (Admin Only):** | |
489 | -```bash | |
490 | -GET /admin/users?q=search&page=1 | |
491 | -Cookie: och_session=... | |
492 | -``` | |
493 | - | |
494 | -**Update Storage Config (Admin Only):** | |
495 | -```bash | |
496 | -POST /api/admin/config/storage | |
497 | -Cookie: och_session=... | |
498 | -Content-Type: application/json | |
499 | - | |
500 | -{ | |
501 | - "type": "s3", | |
502 | - "bucket": "my-bucket", | |
503 | - "region": "us-east-1", | |
504 | - ... | |
505 | -} | |
506 | -``` | |
507 | - | |
508 | -### Rate Limits | |
509 | - | |
510 | -All endpoints return rate limit headers: | |
511 | -``` | |
512 | -X-RateLimit-Limit: 100 | |
513 | -X-RateLimit-Remaining: 95 | |
514 | -X-RateLimit-Reset: 2026-01-01T15:30:00Z | |
515 | -Retry-After: 30 (when rate limited) | |
516 | -``` | |
517 | - | |
518 | -**Full API documentation:** `/api/docs` (OpenAPI spec coming soon) | |
519 | - | |
520 | - | |
521 | -## 🔧 Usage Guide | |
522 | - | |
523 | -### Creating Your First Repository | |
524 | - | |
525 | -1. **Log in** to your account | |
526 | -2. Click the **+** button → **New Repository** | |
527 | -3. Fill in details: | |
528 | - - **Name**: alphanumeric, hyphens, underscores | |
529 | - - **Description**: Optional | |
530 | - - **Visibility**: public/private | |
531 | -4. Click **Create Repository** | |
532 | - | |
533 | -### Cl | |
534 | - | |
535 | -oning Repositories | |
536 | - | |
537 | -**SSH (Recommended):** | |
538 | -```bash | |
539 | -# Add your SSH key in Settings → SSH Keys | |
540 | -git clone [email protected]:username/repo.git | |
541 | -``` | |
542 | - | |
543 | -**HTTPS:** | |
544 | -```bash | |
545 | -git clone https://your-domain.com/username/repo.git | |
546 | -# Username: your-username | |
547 | -# Password: your-password or personal access token | |
548 | -``` | |
549 | - | |
550 | -### Setting Up Branch Protection | |
551 | - | |
552 | -1. Navigate to **Repository → Settings → Branches** | |
553 | -2. Click **Add Rule** | |
554 | -3. Configure: | |
555 | - - **Pattern**: `main` or `release/*` | |
556 | - - **Require PR**: ✅ | |
557 | - - **Required Approvals**: 2 | |
558 | - - **Dismiss Stale Reviews**: ✅ | |
559 | -4. **Save Rule** | |
560 | - | |
561 | -### CI/CD Workflows | |
562 | - | |
563 | -Create `.github/workflows/ci.yml`: | |
564 | - | |
565 | -```yaml | |
566 | -name: CI | |
567 | - | |
568 | -on: | |
569 | - push: | |
570 | - branches: [main, develop] | |
571 | - pull_request: | |
572 | - branches: [main] | |
573 | - | |
574 | -jobs: | |
575 | - test: | |
576 | - runs-on: ubuntu-latest | |
577 | - steps: | |
578 | - - uses: actions/checkout@v4 | |
579 | - | |
580 | - - name: Setup Node.js | |
581 | - uses: actions/setup-node@v4 | |
582 | - with: | |
583 | - node-version: '20' | |
584 | - | |
585 | - - name: Install | |
586 | - run: npm ci | |
587 | - | |
588 | - - name: Test | |
589 | - run: npm test | |
590 | - | |
591 | - - name: Build | |
592 | - run: npm run build | |
593 | - | |
594 | - - name: Upload Artifacts | |
595 | - uses: actions/upload-artifact@v3 | |
596 | - with: | |
597 | - name: dist | |
598 | - path: dist/ | |
599 | -``` | |
600 | - | |
601 | - | |
602 | -## 🐛 Troubleshooting | |
603 | - | |
604 | -### Common Issues | |
605 | - | |
606 | -**"Rate limit exceeded" on login:** | |
607 | -- Default: 5 attempts per 15 minutes | |
608 | -- Solution: Wait 15 minutes or adjust `RATE_LIMIT_AUTH` in `.env` | |
609 | - | |
610 | -**"CSRF token validation failed":** | |
611 | -- Ensure cookies are enabled | |
612 | -- Check `SITE_URL` matches your actual domain | |
613 | -- Verify HTTPS in production | |
614 | - | |
615 | -**"Unauthorized" on git hooks:** | |
616 | -- Check `INTERNAL_HOOK_SECRET` is set | |
617 | -- Verify hooks have correct secret in curl headers | |
618 | -- Re-run `git init` on repositories to reinstall hooks | |
619 | - | |
620 | -**Database connection errors:** | |
621 | -- Verify `DATABASE_URL` format | |
622 | -- Check database server is running | |
623 | -- Ensure user has correct permissions | |
624 | - | |
625 | -**Storage upload fails:** | |
626 | -- Test connection in `/admin/storage` | |
627 | -- Verify S3 credentials and bucket permissions | |
628 | -- Check firewall rules for external storage | |
629 | - | |
630 | -### Debug Mode | |
631 | - | |
632 | -```env | |
633 | -# Enable detailed logging | |
634 | -LOG_LEVEL=debug | |
635 | -NODE_ENV=development | |
636 | - | |
637 | -# View logs | |
638 | -tail -f data/logs/opencodehub.log | |
639 | -``` | |
640 | - | |
641 | -### Health Check | |
642 | - | |
643 | -```bash | |
644 | -curl http://localhost:3000/api/health | |
645 | - | |
646 | -# Response: | |
647 | -{ | |
648 | - "status": "ok", | |
649 | - "checks": { | |
650 | - "database": "ok", | |
651 | - "storage": "ok", | |
652 | - "redis": "ok" // if configured | |
653 | - }, | |
654 | - "uptime": 123456, | |
655 | - "version": "1.0.0" | |
656 | -} | |
657 | -``` | |
658 | - | |
659 | - | |
660 | -## 🤝 Contributing | |
661 | - | |
662 | -We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. | |
663 | - | |
664 | -### Development Setup | |
665 | - | |
666 | -```bash | |
667 | -# Fork and clone | |
668 | -git clone https://github.com/swadhinbiswas/OpencodeHub.git | |
669 | -cd OpencodeHub | |
670 | - | |
671 | -# Install dependencies | |
672 | -bun install | |
673 | - | |
674 | -# Run in development | |
675 | -bun run dev | |
676 | - | |
677 | -# Run tests | |
678 | -bun test | |
679 | - | |
680 | -# Lint | |
681 | -bun run lint | |
682 | -``` | |
683 | - | |
684 | -### Submitting Changes | |
685 | - | |
686 | -1. Create a feature branch (`git checkout -b feature/amazing-feature`) | |
687 | -2. Make your changes | |
688 | -3. Add tests | |
689 | -4. Run `bun test` and `bun run lint` | |
690 | -5. Commit (`git commit -m 'Add amazing feature'`) | |
691 | -6. Push (`git push origin feature/amazing-feature`) | |
692 | -7. Open a Pull Request | |
693 | - | |
694 | - | |
695 | -## 📄 License | |
696 | - | |
697 | -MIT License - see [LICENSE](LICENSE) for details. | |
698 | - | |
699 | - | |
700 | -## 🙏 Acknowledgments | |
701 | - | |
702 | -- [Astro](https://astro.build/) - Web framework | |
703 | -- [shadcn/ui](https://ui.shadcn.com/) - UI components | |
704 | -- [Drizzle ORM](https://orm.drizzle.team/) - Database toolkit | |
705 | -- [simple-git](https://github.com/steveukx/git-js) - Git operations | |
706 | -- [Monaco Editor](https://microsoft.github.io/monaco-editor/) - Code editor | |
707 | -- [Zod](https://zod.dev/) - Schema validation | |
708 | - | |
709 | - | |
710 | -<p align="center"> | |
711 | - <strong>Made with ❤️ for the open source community</strong> | |
712 | - <br> | |
713 | - <a href="https://github.com/swadhinbiswas/OpencodeHub/issues">Report Bug</a> • | |
714 | - <a href="https://github.com/swadhinbiswas/OpencodeHub/issues">Request Feature</a> | |
715 | -</p> | |
716 | 0 | |
▼README_NEW.md
+0-1236
| @@ -1,1258 +0,0 @@ | ||
1 | -# OpenCodeHub | |
2 | - | |
3 | -<p align="center"> | |
4 | - <img src="public/logo.png" alt="OpenCodeHub Logo" width="200"> | |
5 | -</p> | |
6 | - | |
7 | -<p align="center"> | |
8 | - <strong>A powerful, self-hosted Git platform with CI/CD, code review, and enterprise-grade security</strong> | |
9 | -</p> | |
10 | - | |
11 | -<p align="center"> | |
12 | - <a href="#-features">Features</a> • | |
13 | - <a href="#-quick-start">Quick Start</a> • | |
14 | - <a href="#%EF%B8%8F-configuration">Configuration</a> • | |
15 | - <a href="#-security">Security</a> • | |
16 | - <a href="#-production-deployment">Production</a> • | |
17 | - <a href="#-api">API</a> • | |
18 | - <a href="#-contributing">Contributing</a> | |
19 | -</p> | |
20 | - | |
21 | - | |
22 | -## 🎉 Production Ready! | |
23 | - | |
24 | -**All critical security vulnerabilities are now fixed. OpenCodeHub is production-ready!** 🎊 | |
25 | - | |
26 | -✅ **Rate Limiting** - Prevents brute force attacks | |
27 | -✅ **CSRF Protection** - Cross-site request forgery defense | |
28 | -✅ **Input Validation** - SQL injection & XSS prevention | |
29 | -✅ **Hook Authentication** - Secure git operations | |
30 | -✅ **Environment Validation** - Safe configuration management | |
31 | - | |
32 | -📚 **See [DEPLOYMENT.md](DEPLOYMENT.md) for complete deployment guide** with SSL setup, Nginx configuration, monitoring, database backups, and production best practices. | |
33 | - | |
34 | - | |
35 | -## 🚀 Features | |
36 | - | |
37 | -### Git Hosting & Collaboration | |
38 | -- **Full Git Support** - SSH and HTTP/HTTPS protocols with authentication | |
39 | -- **Repository Management** - Create, fork, archive, and transfer repositories | |
40 | -- **Branch Protection** - Enforce PR requirements, approvals, and code review policies | |
41 | -- **Pull Requests** - Code review with inline comments and approval workflows | |
42 | -- **Issues & Milestones** - Bug tracking with labels, assignees, and custom fields | |
43 | -- **Wiki** - Built-in documentation with markdown support | |
44 | -- **Organizations** - Team management with role-based access control (RBAC) | |
45 | - | |
46 | -### CI/CD & Automation | |
47 | -- **GitHub Actions Compatible** - Run workflows defined in `.github/workflows/` | |
48 | -- **Self-hosted Runners** - Docker-based job execution with artifact support | |
49 | -- **Merge Queue** - Automated PR merge management with conflict detection | |
50 | -- **Webhooks** - Real-time event notifications to external services | |
51 | -- **Secrets Management** - Encrypted storage for CI/CD credentials | |
52 | - | |
53 | -### Security Features ✅ | |
54 | -- **Rate Limiting** - Prevents brute force attacks (5 login attempts per 15min) | |
55 | -- **CSRF Protection** - Double-submit cookie pattern for all state-changing operations | |
56 | -- **Input Validation** - Zod schemas prevent injection attacks | |
57 | -- **Hook Authentication** - Shared secrets protect internal git hooks | |
58 | -- **Session Management** - Automatic expiration and rotation | |
59 | -- **Audit Logging** - Complete activity tracking for compliance | |
60 | - | |
61 | -### Modern Tech Stack | |
62 | -- **Astro + React** - Fast, modern frontend with island architecture | |
63 | -- **TailwindCSS + shadcn/ui** - Beautiful, accessible UI components | |
64 | -- **Universal Database Adapter** - PostgreSQL, MySQL, SQLite, MongoDB, Turso, PlanetScale | |
65 | -- **Flexible Storage** - Local, S3, MinIO, Google Drive, Azure Blob, R2 | |
66 | -- **Production-Ready** - Rate limiting, CSRF, input validation, error monitoring | |
67 | - | |
68 | - | |
69 | -## 📦 Quick Start | |
70 | - | |
71 | -### Prerequisites | |
72 | -- **Node.js** 18+ or **Bun** 1.0+ | |
73 | -- **Database**: PostgreSQL 14+ (recommended) / MySQL 8+ / SQLite 3.35+ | |
74 | -- **Git** 2.30+ | |
75 | -- **Docker** (optional, for CI/CD runners) | |
76 | - | |
77 | -### Installation (5 minutes) | |
78 | - | |
79 | -```bash | |
80 | -# 1. Clone the repository | |
81 | -git clone https://github.com/swadhinbiswas/OpencodeHub.git | |
82 | -cd OpenCodeHub | |
83 | - | |
84 | -# 2. Install dependencies | |
85 | -npm install | |
86 | -# or | |
87 | -bun install | |
88 | - | |
89 | -# 3. Set up environment | |
90 | -cp .env.example .env | |
91 | - | |
92 | -# 4. Configure your .env file (see Configuration section) | |
93 | -nano .env # Set at minimum: JWT_SECRET, SESSION_SECRET, INTERNAL_HOOK_SECRET, SITE_URL | |
94 | - | |
95 | -# 5. Run database migrations | |
96 | -npm run db:push | |
97 | -# or generate migrations for version control: | |
98 | -npm run db:generate | |
99 | - | |
100 | -# 6. Seed an admin user | |
101 | -bun run scripts/seed-admin.ts | |
102 | -# Enter username, email, password when prompted | |
103 | - | |
104 | -# 7. Start development server | |
105 | -npm run dev | |
106 | -# Application available at http://localhost:3000 | |
107 | -``` | |
108 | - | |
109 | -### Using Docker (Recommended for Production) | |
110 | - | |
111 | -```bash | |
112 | -# 1. Clone and configure | |
113 | -git clone https://github.com/swadhinbiswas/OpencodeHub.git | |
114 | -cd OpenCodeHub | |
115 | -cp .env.example .env | |
116 | - | |
117 | -# 2. Edit .env with production values (see Production Deployment section) | |
118 | - | |
119 | -# 3. Start services | |
120 | -docker-compose up -d | |
121 | - | |
122 | -# 4. Create admin user | |
123 | -docker-compose exec app bun run scripts/seed-admin.ts | |
124 | - | |
125 | -# Access at http://localhost:3000 | |
126 | -``` | |
127 | - | |
128 | -# Advanced Features Documentation Insert | |
129 | - | |
130 | -**Insert this content into README.md after line 131 (after Docker installation section, before Configuration section)** | |
131 | - | |
132 | - | |
133 | -## 🎯 OCH CLI - Command Line Interface | |
134 | - | |
135 | -Powerful CLI for stack-first PR workflows. | |
136 | - | |
137 | -### Installation | |
138 | - | |
139 | -```bash | |
140 | -# Install globally | |
141 | -npm install -g opencodehub-cli | |
142 | - | |
143 | -# Or use with npx | |
144 | -npx opencodehub-cli | |
145 | - | |
146 | -# Verify installation | |
147 | -och --version | |
148 | -``` | |
149 | - | |
150 | -### Quick Setup | |
151 | - | |
152 | -```bash | |
153 | -# 1. Login to your OpenCode Hub instance | |
154 | -och auth login --url https://git.yourcompany.com | |
155 | - | |
156 | -# 2. Navigate to your repository | |
157 | -cd your-repo | |
158 | - | |
159 | -# 3. Initialize | |
160 | -och init --url https://git.yourcompany.com | |
161 | -``` | |
162 | - | |
163 | -### CLI Commands Reference | |
164 | - | |
165 | -**Authentication:** | |
166 | -```bash | |
167 | -och auth login # Interactive login | |
168 | -och auth login --token TOKEN # Login with token | |
169 | -och auth logout # Logout | |
170 | -och auth whoami # Show current user | |
171 | -``` | |
172 | - | |
173 | -**Stack Management:** | |
174 | -```bash | |
175 | -och stack create \u003cname\u003e # Create new stacked branch | |
176 | -och stack view # View current stack (alias: ls) | |
177 | -och stack submit # Push and create PRs | |
178 | -och stack submit --draft # Create as draft PRs | |
179 | -och stack sync # Rebase stack on latest | |
180 | -och stack reorder # Reorder branches in stack | |
181 | -``` | |
182 | - | |
183 | -**Repository:** | |
184 | -```bash | |
185 | -och init # Initialize repo for OpenCodeHub | |
186 | -och sync # Bidirectional sync with remote | |
187 | -och status # Show stack status (alias: st) | |
188 | -``` | |
189 | - | |
190 | - | |
191 | -## 🚀 Advanced Features | |
192 | - | |
193 | -### 📚 Stacked Pull Requests | |
194 | - | |
195 | -**Ship faster by breaking large features into reviewable chunks.** | |
196 | - | |
197 | -#### Why Stacked PRs? | |
198 | - | |
199 | -- **Faster Reviews**: Smaller, focused PRs get reviewed quicker | |
200 | -- **Parallel Development**: Build on unmerged PRs while waiting for review | |
201 | -- **Clean History**: Each PR represents one logical change | |
202 | -- **Risk Reduction**: Deploy incrementally, rollback easily | |
203 | - | |
204 | -#### How It Works | |
205 | - | |
206 | -``` | |
207 | -main | |
208 | - └── PR #123: Add database schema | |
209 | - └── PR #124: Add authentication service | |
210 | - └── PR #125: Add login UI | |
211 | -``` | |
212 | - | |
213 | -Each PR builds on the previous one. When #123 merges, #124 automatically rebases. | |
214 | - | |
215 | -#### Creating a Stack | |
216 | - | |
217 | -**Using CLI:** | |
218 | -```bash | |
219 | -# 1. Create base branch | |
220 | -git checkout -b feature/auth | |
221 | -git commit -m "Add user table schema" | |
222 | -och stack create auth-schema | |
223 | - | |
224 | -# 2. Create stacked branch | |
225 | -och stack create auth-service | |
226 | -git commit -m "Add authentication service" | |
227 | - | |
228 | -# 3. Create final layer | |
229 | -och stack create auth-ui | |
230 | -git commit -m "Add login UI" | |
231 | - | |
232 | -# 4. Submit entire stack | |
233 | -och stack submit | |
234 | -``` | |
235 | - | |
236 | -**Using Web UI:** | |
237 | -1. Create first PR normally | |
238 | -2. When creating second PR, select "Stack on PR #123" | |
239 | -3. System tracks dependencies automatically | |
240 | - | |
241 | -#### Stack Features | |
242 | - | |
243 | -✅ **Auto-Rebasing**: When base PR merges, dependent PRs rebase automatically | |
244 | -✅ **Dependency Visualization**: See entire stack in PR view | |
245 | -✅ **Smart Merge Queue**: Merges in correct order | |
246 | -✅ **Conflict Detection**: Alerts on rebase conflicts | |
247 | - | |
248 | - | |
249 | -### 🤖 AI Code Review | |
250 | - | |
251 | -**Get instant feedback from AI reviewers powered by GPT-4 or Claude.** | |
252 | - | |
253 | -#### Setup | |
254 | - | |
255 | -**1. Configure AI Provider:** | |
256 | -```env | |
257 | -# In .env | |
258 | -AI_PROVIDER=openai # or anthropic | |
259 | -OPENAI_API_KEY=sk-... | |
260 | -# or | |
261 | -ANTHROPIC_API_KEY=sk-ant-... | |
262 | -``` | |
263 | - | |
264 | -**2. Enable for Repository:** | |
265 | -Navigate to **Repository → Settings → AI Review** | |
266 | -- ✅ Enable AI Review | |
267 | -- Set review triggers (on PR open, on push, manual) | |
268 | -- Configure review rules | |
269 | - | |
270 | -#### What AI Reviews Catch | |
271 | - | |
272 | -🔍 **Security Vulnerabilities** | |
273 | -- SQL injection risks | |
274 | -- XSS vulnerabilities | |
275 | -- Authentication bypasses | |
276 | -- Secrets in code | |
277 | - | |
278 | -⚡ **Performance Issues** | |
279 | -- N+1 queries | |
280 | -- Inefficient algorithms | |
281 | -- Memory leaks | |
282 | -- Blocking operations | |
283 | - | |
284 | -📝 **Code Quality** | |
285 | -- Best practice violations | |
286 | -- Code smells | |
287 | -- Incomplete error handling | |
288 | -- Missing documentation | |
289 | - | |
290 | -🐛 **Potential Bugs** | |
291 | -- Null pointer exceptions | |
292 | -- Race conditions | |
293 | -- Off-by-one errors | |
294 | -- Logic flaws | |
295 | - | |
296 | -#### Using AI Review | |
297 | - | |
298 | -**Automatic (Recommended):** | |
299 | -AI review runs automatically on every PR based on configured triggers. | |
300 | - | |
301 | -**Manual:** | |
302 | -```bash | |
303 | -# Via CLI | |
304 | -och review ai \u003cPR_NUMBER\u003e | |
305 | - | |
306 | -# Via web UI: Click "Request AI Review" button on PR | |
307 | -``` | |
308 | - | |
309 | -#### Review Output | |
310 | - | |
311 | -AI provides: | |
312 | -- **Severity Score**: Critical / High / Medium / Low / Info | |
313 | -- **Specific Line Comments**: Inline code suggestions | |
314 | -- **Summary Report**: Overall code quality assessment | |
315 | -- **Fix Suggestions**: Actionable improvements | |
316 | - | |
317 | -**Example:** | |
318 | -``` | |
319 | -🔴 CRITICAL: SQL Injection Vulnerability | |
320 | -File: src/api/users.ts:45 | |
321 | -Issue: User input directly concatenated into SQL query | |
322 | -Fix: Use parameterized queries or ORM | |
323 | - | |
324 | -🟡 MEDIUM: Performance Concern | |
325 | -File: src/lib/data.ts:128 | |
326 | -Issue: N+1 query in loop (1000+ iterations) | |
327 | -Fix: Use batch loading or eager loading | |
328 | -``` | |
329 | - | |
330 | - | |
331 | -### 🔀 Smart Merge Queue | |
332 | - | |
333 | -**Stack-aware merge queue with automatic conflict resolution and CI optimization.** | |
334 | - | |
335 | -#### Features | |
336 | - | |
337 | -**Stack-Aware Merging:** | |
338 | -- Detects PR dependencies | |
339 | -- Merges in correct order automatically | |
340 | -- Handles entire stacks atomically | |
341 | - | |
342 | -**CI Optimization:** | |
343 | -- Batches compatible PRs | |
344 | -- Runs CI once for multiple PRs | |
345 | -- Reduces CI cost by ~60% | |
346 | - | |
347 | -**Automatic Rebasing:** | |
348 | -- Detects conflicts early | |
349 | -- Auto-rebases on base changes | |
350 | -- Alerts author on conflicts | |
351 | - | |
352 | -**Smart Ordering:** | |
353 | -- Priority-based queue | |
354 | -- Dependency resolution | |
355 | -- Hotfix fast-tracking | |
356 | - | |
357 | -#### Using Merge Queue | |
358 | - | |
359 | -**Add to Queue:** | |
360 | -```bash | |
361 | -# Via CLI | |
362 | -och queue add \u003cPR_NUMBER\u003e | |
363 | - | |
364 | -# Via Web UI | |
365 | -Click "Add to Merge Queue" button on approved PR | |
366 | -``` | |
367 | - | |
368 | -**Queue Status:** | |
369 | -```bash | |
370 | -# View queue | |
371 | -och queue list | |
372 | - | |
373 | -# Output: | |
374 | -Position PR Title Status | |
375 | -1 #125 Add login UI ⏳ Running CI | |
376 | -2 #124 Auth service ⏸️ Waiting (depends on #123) | |
377 | -3 #123 Database schema ✅ Ready to merge | |
378 | -``` | |
379 | - | |
380 | -**How It Works:** | |
381 | - | |
382 | -1. **PR Added**: Queue analyzes dependencies | |
383 | -2. **Position Assigned**: Ordered by priority and dependencies | |
384 | -3. **CI Running**: Runs tests in parallel where possible | |
385 | -4. **Auto-Merge**: Merges when ready, rebases dependents | |
386 | -5. **Notification**: Author notified on completion | |
387 | - | |
388 | -#### Queue Configuration | |
389 | - | |
390 | -**Repository → Settings → Merge Queue:** | |
391 | -- **Require CI**: Only merge if all checks pass | |
392 | -- **Batch Window**: Wait time to batch PRs (default: 5min) | |
393 | -- **Max Batch Size**: Max PRs to merge together (default: 3) | |
394 | -- **Auto-Rebase**: Rebase on conflicts vs. remove from queue | |
395 | - | |
396 | - | |
397 | -### 📊 Developer Metrics | |
398 | - | |
399 | -**Track team velocity, review efficiency, and identify bottlenecks.** | |
400 | - | |
401 | -#### Available Metrics | |
402 | - | |
403 | -**PR Velocity:** | |
404 | -- PRs merged per week | |
405 | -- Average time to merge | |
406 | -- Stack success rate | |
407 | -- Review cycle time | |
408 | - | |
409 | -**Review Efficiency:** | |
410 | -- Average review time | |
411 | -- Reviews per day | |
412 | -- Review quality score | |
413 | -- Reviewer responsiveness | |
414 | - | |
415 | -**Team Performance:** | |
416 | -- Lines changed per PR | |
417 | -- PR size distribution | |
418 | -- Revert rate | |
419 | -- CI success rate | |
420 | - | |
421 | -**Stack Metrics:** | |
422 | -- % PRs that use stacks | |
423 | -- Average stack depth | |
424 | -- Stack merge success rate | |
425 | -- Time saved vs. monolithic PRs | |
426 | - | |
427 | -#### Viewing Metrics | |
428 | - | |
429 | -**Personal Dashboard:** | |
430 | -``` | |
431 | -/metrics/me | |
432 | -``` | |
433 | - | |
434 | -**Team Dashboard (Admin):** | |
435 | -``` | |
436 | -/admin/metrics | |
437 | -``` | |
438 | - | |
439 | -**Via CLI:** | |
440 | -```bash | |
441 | -och metrics show | |
442 | -och metrics show --user @username | |
443 | -och metrics show --repo owner/repo | |
444 | -``` | |
445 | - | |
446 | -#### Example Metrics View | |
447 | - | |
448 | -``` | |
449 | -📊 Your Metrics (Last 30 Days) | |
450 | - | |
451 | -PR Velocity | |
452 | -├─ PRs Merged ━━━━━━━━━━━━━━ 24 (+12%) | |
453 | -├─ Avg Time to Merge ━━━━━━━━━━━━━━ 8.2 hours (-3h) | |
454 | -└─ Stack Usage ━━━━━━━━━━━━━━ 65% (+15%) | |
455 | - | |
456 | -Review Efficiency | |
457 | -├─ Reviews Given ━━━━━━━━━━━━━━ 18 | |
458 | -├─ Avg Review Time ━━━━━━━━━━━━━━ 22 min | |
459 | -└─ Approval Rate ━━━━━━━━━━━━━━ 94% | |
460 | -``` | |
461 | - | |
462 | - | |
463 | -### 💬 Slack Notifications | |
464 | - | |
465 | -**Get actionable PR notifications directly in Slack.** | |
466 | - | |
467 | -#### Setup | |
468 | - | |
469 | -**1. Create Slack App:** | |
470 | -1. Go to https://api.slack.com/apps | |
471 | -2. Create New App → From Scratch | |
472 | -3. Add OAuth Scopes: | |
473 | - - `chat:write` | |
474 | - - `chat:write.public` | |
475 | - - `users:read` | |
476 | -4. Install to workspace | |
477 | - | |
478 | -**2. Connect to OpenCodeHub:** | |
479 | -Navigate to **Admin → Integrations → Slack** | |
480 | -``` | |
481 | -Workspace Name: Your Team | |
482 | -Bot Token: xoxb-... | |
483 | -Signing Secret: ... | |
484 | -``` | |
485 | - | |
486 | -**3. Map Channels:** | |
487 | -**Repository → Settings → Slack** | |
488 | -``` | |
489 | -#engineering → All PR events | |
490 | -#deployments → Merges only | |
491 | -#security → Security findings | |
492 | -``` | |
493 | - | |
494 | -**4. Map Users (Optional):** | |
495 | -Users can link their Slack account: | |
496 | -**Settings → Integrations → Connect Slack** | |
497 | - | |
498 | -#### Notification Types | |
499 | - | |
500 | -**PR Events:** | |
501 | -- 🎉 PR opened | |
502 | -- ✅ PR approved | |
503 | -- 🔀 PR merged | |
504 | -- ❌ PR closed | |
505 | -- 💬 Review requested | |
506 | -- 🔴 Changes requested | |
507 | - | |
508 | -**CI/CD Events:** | |
509 | -- ✅ Build passed | |
510 | -- ❌ Build failed | |
511 | -- 🚀 Deployment started | |
512 | -- ✅ Deployment successful | |
513 | - | |
514 | -**Code Review:** | |
515 | -- 🤖 AI review completed | |
516 | -- 🔍 Security issue found | |
517 | -- ⚠️ Performance concern | |
518 | - | |
519 | -**Merge Queue:** | |
520 | -- ⏭️ Added to queue | |
521 | -- ✅ Merged from queue | |
522 | -- ⚠️ Removed (conflict) | |
523 | - | |
524 | -#### Interactive Actions | |
525 | - | |
526 | -Notifications include action buttons: | |
527 | -``` | |
528 | -[swadhin] opened PR#125: Add login UI | |
529 | -Stack: #123 → #124 → #125 • files →32 • LoC +420/-18 | |
530 | - | |
531 | -[Approve] [Request Changes] [View PR] [Add to Queue] | |
532 | -``` | |
533 | - | |
534 | -Click buttons to: | |
535 | -- Approve/reject directly from Slack | |
536 | -- Request changes with comment | |
537 | -- Add to merge queue | |
538 | -- View full PR | |
539 | - | |
540 | - | |
541 | -## 💡 Workflow Examples | |
542 | - | |
543 | -### Example 1: Complete Stacked PR Flow | |
544 | - | |
545 | -```bash | |
546 | -# 1. Start new feature | |
547 | -git checkout main | |
548 | -git pull | |
549 | -git checkout -b feature/user-profiles | |
550 | - | |
551 | -# 2. First PR: Database layer | |
552 | -git add migrations/ | |
553 | -git commit -m "Add user profile tables" | |
554 | -och stack create profile-db | |
555 | -och stack submit | |
556 | - | |
557 | -# → Creates PR #301 | |
558 | - | |
559 | -# 3. Second PR: Backend API | |
560 | -git add src/api/profiles/ | |
561 | -git commit -m "Add profile API" | |
562 | -och stack create profile-api | |
563 | -och stack submit | |
564 | - | |
565 | -# → Creates PR #302 (stacked on #301) | |
566 | - | |
567 | -# 4. Third PR: Frontend | |
568 | -git add src/pages/profile/ | |
569 | -git commit -m "Add profile UI" | |
570 | -och stack create profile-ui | |
571 | -och stack submit | |
572 | - | |
573 | -# → Creates PR #303 (stacked on #302) | |
574 | - | |
575 | -# 5. View stack | |
576 | -och stack view | |
577 | -``` | |
578 | - | |
579 | -**Output:** | |
580 | -``` | |
581 | -📚 Current Stack | |
582 | - | |
583 | -main (base) | |
584 | - └─ #301: profile-db ✅ Approved | |
585 | - └─ #302: profile-api 🔍 In Review | |
586 | - └─ #303: profile-ui ⏳ AI Review Running | |
587 | -``` | |
588 | - | |
589 | -### Example 2: Using AI Review + Merge Queue | |
590 | - | |
591 | -```bash | |
592 | -# 1. Create PR | |
593 | -git push origin feature-branch | |
594 | - | |
595 | -# 2. Request AI review | |
596 | -och review ai 304 | |
597 | - | |
598 | -# 3. Fix AI suggestions | |
599 | -# ... make changes based on review ... | |
600 | -git commit -m "Fix security issues from AI review" | |
601 | -git push | |
602 | - | |
603 | -# 4. Get human review | |
604 | -# Team reviews via web UI | |
605 | - | |
606 | -# 5. Add to merge queue when approved | |
607 | -och queue add 304 | |
608 | - | |
609 | -# Queue handles: | |
610 | -# - Waiting for CI | |
611 | -# - Merging when ready | |
612 | -# - Notifying on Slack | |
613 | -``` | |
614 | - | |
615 | -### Example 3: Team Collaboration | |
616 | - | |
617 | -```bash | |
618 | -# Developer A: Creates base | |
619 | -git checkout -b api/payments | |
620 | -# ... implements payment models ... | |
621 | -git commit -m "Add payment models" | |
622 | -git push | |
623 | - | |
624 | -# Developer B: Builds on A's work (before merge!) | |
625 | -git checkout api/payments | |
626 | -git checkout -b api/payment-processing | |
627 | -# ... implements payment processing ... | |
628 | -git commit -m "Add payment processing" | |
629 | -git push | |
630 | -# Create PR stacked on A's PR | |
631 | - | |
632 | -# Developer C: Builds on B's work | |
633 | -git checkout api/payment-processing | |
634 | -git checkout -b ui/payment-form | |
635 | -# ... implements payment UI ... | |
636 | -``` | |
637 | - | |
638 | -**Result**: 3 parallel PRs, all reviewed separately, merged in order. | |
639 | - | |
640 | - | |
641 | -## 📖 Additional Resources | |
642 | - | |
643 | -- **Full CLI Reference**: `cli/README.md` | |
644 | -- **API Documentation**: `/api/docs` | |
645 | -- **Stacked PR Guide**: `/docs#stacked-prs` | |
646 | -- **Slack Integration Guide**: `/docs#slack` | |
647 | - | |
648 | - | |
649 | - | |
650 | -## ⚙️ Configuration | |
651 | - | |
652 | -### Critical Environment Variables | |
653 | - | |
654 | -These **MUST** be set before deploying to production: | |
655 | - | |
656 | -```env | |
657 | -# Security (CRITICAL - Generate strong secrets!) | |
658 | -JWT_SECRET=<run: openssl rand -hex 32> | |
659 | -SESSION_SECRET=<run: openssl rand -hex 32> | |
660 | -INTERNAL_HOOK_SECRET=<run: openssl rand -hex 32> | |
661 | - | |
662 | -# Application URLs (CRITICAL) | |
663 | -SITE_URL=https://your-domain.com # Must be HTTPS in production | |
664 | -PORT=3000 | |
665 | -HOST=0.0.0.0 | |
666 | -``` | |
667 | - | |
668 | -### Database Configuration | |
669 | - | |
670 | -**PostgreSQL (Recommended for Production):** | |
671 | -```env | |
672 | -DATABASE_DRIVER=postgres | |
673 | -DATABASE_URL=postgresql://user:password@localhost:5432/opencodehub | |
674 | -``` | |
675 | - | |
676 | -**MySQL:** | |
677 | -```env | |
678 | -DATABASE_DRIVER=mysql | |
679 | -DATABASE_URL=mysql://user:password@localhost:3306/opencodehub | |
680 | -``` | |
681 | - | |
682 | -**SQLite (Development Only):** | |
683 | -```env | |
684 | -DATABASE_DRIVER=sqlite | |
685 | -DATABASE_URL=./data/opencodehub.db | |
686 | -``` | |
687 | - | |
688 | -### Storage Configuration | |
689 | - | |
690 | -Storage can be configured via Admin Panel (`/admin/storage`) or environment variables: | |
691 | - | |
692 | -**Local Storage:** | |
693 | -```env | |
694 | -STORAGE_TYPE=local | |
695 | -STORAGE_PATH=./data/storage | |
696 | -``` | |
697 | - | |
698 | -**S3/MinIO/R2:** | |
699 | -```env | |
700 | -STORAGE_TYPE=s3 | |
701 | -STORAGE_BUCKET=opencodehub | |
702 | -STORAGE_REGION=us-east-1 | |
703 | -STORAGE_ENDPOINT=https://s3.amazonaws.com | |
704 | -S3_ACCESS_KEY=your-access-key | |
705 | -S3_SECRET_KEY=your-secret-key | |
706 | -``` | |
707 | - | |
708 | -**Google Drive (via Admin Panel):** | |
709 | -- Navigate to `/admin/storage` | |
710 | -- Select "Google Drive" | |
711 | -- Enter Client ID, Secret, and Refresh Token | |
712 | -- Test connection before saving | |
713 | - | |
714 | -### Security Configuration | |
715 | - | |
716 | -**Rate Limiting:** | |
717 | -```env | |
718 | -RATE_LIMIT_AUTH=5 # Login attempts per 15 minutes | |
719 | -RATE_LIMIT_API=100 # API requests per minute | |
720 | -RATE_LIMIT_GIT=200 # Git operations per minute | |
721 | -RATE_LIMIT_SKIP_DEV=false # Never skip in production | |
722 | -``` | |
723 | - | |
724 | -**CSRF Protection:** | |
725 | -```env | |
726 | -CSRF_SKIP_DEV=false # Never skip in production | |
727 | -``` | |
728 | - | |
729 | -### Optional Services | |
730 | - | |
731 | -**Email (SMTP):** | |
732 | -```env | |
733 | -SMTP_HOST=smtp.example.com | |
734 | -SMTP_PORT=587 | |
735 | ||
736 | -SMTP_PASSWORD=your-smtp-password | |
737 | ||
738 | -``` | |
739 | - | |
740 | -**Redis (Caching & Sessions):** | |
741 | -```env | |
742 | -REDIS_URL=redis://localhost:6379 | |
743 | -``` | |
744 | - | |
745 | -**Error Monitoring (Sentry):** | |
746 | -```env | |
747 | -SENTRY_DSN=https://... | |
748 | -ENABLE_TRACING=true | |
749 | -``` | |
750 | - | |
751 | - | |
752 | -## 🔒 Security | |
753 | - | |
754 | -OpenCodeHub implements **production-grade security** out of the box: | |
755 | - | |
756 | -### Implemented Security Features | |
757 | - | |
758 | -✅ **Authentication & Authorization** | |
759 | -- JWT-based sessions with automatic expiration | |
760 | -- Bcrypt password hashing (10 rounds) | |
761 | -- 2FA/TOTP support | |
762 | -- Role-based access control (RBAC) | |
763 | - | |
764 | -✅ **Attack Prevention** | |
765 | -- **Rate Limiting**: Prevents brute force (5 login attempts per 15min) | |
766 | -- **CSRF Protection**: Double-submit cookie pattern on all state-changing operations | |
767 | -- **Input Validation**: Zod schemas prevent SQL injection and XSS | |
768 | -- **XSS Sanitization**: Markdown rendered with `rehype-sanitize` | |
769 | - | |
770 | -✅ **Operational Security** | |
771 | -- **Audit Logging**: All admin actions logged to database | |
772 | -- **Hook Authentication**: Git hooks protected with shared secrets | |
773 | -- **Session Management**: Automatic cleanup and rotation | |
774 | -- **Environment Validation**: Startup checks for missing/weak secrets | |
775 | - | |
776 | -### Security Best Practices | |
777 | - | |
778 | -1. **Always use HTTPS** in production (Let's Encrypt recommended) | |
779 | -2. **Rotate secrets** regularly (especially after team changes) | |
780 | -3. **Enable 2FA** for all admin accounts | |
781 | -4. **Monitor audit logs** for suspicious activity | |
782 | -5. **Keep dependencies updated**: Run `npm audit` weekly | |
783 | - | |
784 | -### Reporting Security Issues | |
785 | - | |
786 | -Please report security vulnerabilities to **[email protected]**. Do not create public issues. | |
787 | - | |
788 | - | |
789 | -## 🚀 Production Deployment | |
790 | - | |
791 | -### Pre-Deployment Checklist | |
792 | - | |
793 | -Before going live, ensure: | |
794 | - | |
795 | -- [ ] **Secrets**: All secrets generated with `openssl rand -hex 32` | |
796 | -- [ ] **HTTPS**: SSL certificate configured (Let's Encrypt recommended) | |
797 | -- [ ] **Database**: PostgreSQL with backups enabled | |
798 | -- [ ] **Storage**: S3/R2 configured (not local filesystem) | |
799 | -- [ ] **Monitoring**: Error tracking (Sentry) and APM configured | |
800 | -- [ ] **Rate Limits**: Configured for expected traffic | |
801 | -- [ ] **Admin Account**: Created via `bun run scripts/seed-admin.ts` | |
802 | -- [ ] **Environment Validation**: Test with `bun run src/lib/env-validation.ts` | |
803 | -- [ ] **Database Migrations**: Generated with `npm run db:generate` | |
804 | - | |
805 | -### Production Environment Variables | |
806 | - | |
807 | -```env | |
808 | -# Application | |
809 | -NODE_ENV=production | |
810 | -SITE_URL=https://git.yourcompany.com | |
811 | -PORT=3000 | |
812 | - | |
813 | -# Security (CRITICAL - Generate with: openssl rand -hex 32) | |
814 | -JWT_SECRET=<64-char-random-hex> | |
815 | -SESSION_SECRET=<64-char-random-hex> | |
816 | -INTERNAL_HOOK_SECRET=<64-char-random-hex> | |
817 | - | |
818 | -# Database (Use connection pooling) | |
819 | -DATABASE_DRIVER=postgres | |
820 | -DATABASE_URL=postgresql://user:password@db-host:5432/opencodehub?pool_timeout=30 | |
821 | - | |
822 | -# Storage (Use cloud storage) | |
823 | -STORAGE_TYPE=s3 | |
824 | -STORAGE_BUCKET=opencodehub-prod | |
825 | -STORAGE_REGION=us-east-1 | |
826 | - | |
827 | -# Rate Limiting (Adjust based on traffic) | |
828 | -RATE_LIMIT_AUTH=5 | |
829 | -RATE_LIMIT_API=200 | |
830 | -RATE_LIMIT_GIT=500 | |
831 | - | |
832 | -# Monitoring | |
833 | -SENTRY_DSN=https://your-sentry-dsn | |
834 | -LOG_LEVEL=info | |
835 | - | |
836 | -# Features | |
837 | -ENABLE_REGISTRATION=true # Set false for invite-only | |
838 | -``` | |
839 | - | |
840 | -### Docker Production Deployment | |
841 | - | |
842 | -```yaml | |
843 | -# docker-compose.prod.yml | |
844 | -version: '3.8' | |
845 | - | |
846 | -services: | |
847 | - app: | |
848 | - image: opencodehub:latest | |
849 | - restart: always | |
850 | - ports: | |
851 | - - "3000:3000" | |
852 | - env_file: .env.production | |
853 | - depends_on: | |
854 | - - postgres | |
855 | - - redis | |
856 | - volumes: | |
857 | - - ./data:/app/data | |
858 | - healthcheck: | |
859 | - test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"] | |
860 | - interval: 30s | |
861 | - timeout: 10s | |
862 | - retries: 3 | |
863 | - | |
864 | - postgres: | |
865 | - image: postgres:15-alpine | |
866 | - restart: always | |
867 | - environment: | |
868 | - POSTGRES_DB: opencodehub | |
869 | - POSTGRES_USER: opencodehub | |
870 | - POSTGRES_PASSWORD: <strong-password> | |
871 | - volumes: | |
872 | - - postgres_data:/var/lib/postgresql/data | |
873 | - | |
874 | - redis: | |
875 | - image: redis:7-alpine | |
876 | - restart: always | |
877 | - | |
878 | -volumes: | |
879 | - postgres_data: | |
880 | -``` | |
881 | - | |
882 | -```bash | |
883 | -# Deploy | |
884 | -docker-compose -f docker-compose.prod.yml up -d | |
885 | - | |
886 | -# Monitor logs | |
887 | -docker-compose -f docker-compose.prod.yml logs -f app | |
888 | - | |
889 | -# Health check | |
890 | -curl https://git.yourcompany.com/api/health | |
891 | -``` | |
892 | - | |
893 | -### Reverse Proxy (Nginx) | |
894 | - | |
895 | -```nginx | |
896 | -server { | |
897 | - listen 443 ssl http2; | |
898 | - server_name git.yourcompany.com; | |
899 | - | |
900 | - ssl_certificate /path/to/cert.pem; | |
901 | - ssl_certificate_key /path/to/key.pem; | |
902 | - | |
903 | - location / { | |
904 | - proxy_pass http://localhost:3000; | |
905 | - proxy_set_header Host $host; | |
906 | - proxy_set_header X-Real-IP $remote_addr; | |
907 | - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
908 | - proxy_set_header X-Forwarded-Proto $scheme; | |
909 | - } | |
910 | - | |
911 | - # Git operations (larger timeouts) | |
912 | - location ~ ^/[^/]+/[^/]+\.git/ { | |
913 | - proxy_pass http://localhost:3000; | |
914 | - proxy_read_timeout 300s; | |
915 | - proxy_send_timeout 300s; | |
916 | - proxy_buffer_size 128k; | |
917 | - proxy_buffers 4 256k; | |
918 | - } | |
919 | -} | |
920 | -``` | |
921 | - | |
922 | -### Database Backups | |
923 | - | |
924 | -```bash | |
925 | -# PostgreSQL backup script (cron daily) | |
926 | -#!/bin/bash | |
927 | -pg_dump -U opencodehub opencodehub | gzip > /backups/opencodehub-$(date +\%Y\%m\%d).sql.gz | |
928 | - | |
929 | -# Retain last 30 days | |
930 | -find /backups -name "opencodehub-*.sql.gz" -mtime +30 -delete | |
931 | -``` | |
932 | - | |
933 | - | |
934 | -## 📚 API Documentation | |
935 | - | |
936 | -### Authentication | |
937 | - | |
938 | -All authenticated endpoints require a session cookie or `Authorization: Bearer <token>` header. | |
939 | - | |
940 | -**Register:** | |
941 | -```bash | |
942 | -POST /api/auth/register | |
943 | -Content-Type: application/json | |
944 | - | |
945 | -{ | |
946 | - "username": "johndoe", | |
947 | - "email": "[email protected]", | |
948 | - "password": "SecureP@ssw0rd", | |
949 | - "displayName": "John Doe" | |
950 | -} | |
951 | - | |
952 | -# Response: 201 Created | |
953 | -{ | |
954 | - "user": { "id": "...", "username": "johndoe", ... }, | |
955 | - "token": "eyJ...", | |
956 | - "expiresAt": "2026-01-08T00:00:00Z" | |
957 | -} | |
958 | -``` | |
959 | - | |
960 | -**Login:** | |
961 | -```bash | |
962 | -POST /api/auth/login | |
963 | -Content-Type: application/json | |
964 | - | |
965 | -{ | |
966 | - "login": "[email protected]", # username or email | |
967 | - "password": "SecureP@ssw0rd" | |
968 | -} | |
969 | - | |
970 | -# With 2FA: | |
971 | -{ | |
972 | - "login": "[email protected]", | |
973 | - "password": "SecureP@ssw0rd", | |
974 | - "totpCode": "123456" | |
975 | -} | |
976 | -``` | |
977 | - | |
978 | -### Repositories | |
979 | - | |
980 | -**Create Repository:** | |
981 | -```bash | |
982 | -POST /api/repos | |
983 | -Authorization: Bearer <token> | |
984 | -Content-Type: application/json | |
985 | - | |
986 | -{ | |
987 | - "name": "my-project", | |
988 | - "description": "My awesome project", | |
989 | - "visibility": "public" # public, private, internal | |
990 | -} | |
991 | -``` | |
992 | - | |
993 | -**Branch Protection:** | |
994 | -```bash | |
995 | -POST /api/repos/{repoId}/branch-protection | |
996 | -Authorization: Bearer <token> | |
997 | -Content-Type: application/json | |
998 | - | |
999 | -{ | |
1000 | - "pattern": "main", | |
1001 | - "requiresPr": true, | |
1002 | - "requiredApprovals": 2, | |
1003 | - "dismissStaleReviews": true | |
1004 | -} | |
1005 | -``` | |
1006 | - | |
1007 | -### Admin Endpoints | |
1008 | - | |
1009 | -**List Users (Admin Only):** | |
1010 | -```bash | |
1011 | -GET /admin/users?q=search&page=1 | |
1012 | -Cookie: och_session=... | |
1013 | -``` | |
1014 | - | |
1015 | -**Update Storage Config (Admin Only):** | |
1016 | -```bash | |
1017 | -POST /api/admin/config/storage | |
1018 | -Cookie: och_session=... | |
1019 | -Content-Type: application/json | |
1020 | - | |
1021 | -{ | |
1022 | - "type": "s3", | |
1023 | - "bucket": "my-bucket", | |
1024 | - "region": "us-east-1", | |
1025 | - ... | |
1026 | -} | |
1027 | -``` | |
1028 | - | |
1029 | -### Rate Limits | |
1030 | - | |
1031 | -All endpoints return rate limit headers: | |
1032 | -``` | |
1033 | -X-RateLimit-Limit: 100 | |
1034 | -X-RateLimit-Remaining: 95 | |
1035 | -X-RateLimit-Reset: 2026-01-01T15:30:00Z | |
1036 | -Retry-After: 30 (when rate limited) | |
1037 | -``` | |
1038 | - | |
1039 | -**Full API documentation:** `/api/docs` (OpenAPI spec coming soon) | |
1040 | - | |
1041 | - | |
1042 | -## 🔧 Usage Guide | |
1043 | - | |
1044 | -### Creating Your First Repository | |
1045 | - | |
1046 | -1. **Log in** to your account | |
1047 | -2. Click the **+** button → **New Repository** | |
1048 | -3. Fill in details: | |
1049 | - - **Name**: alphanumeric, hyphens, underscores | |
1050 | - - **Description**: Optional | |
1051 | - - **Visibility**: public/private | |
1052 | -4. Click **Create Repository** | |
1053 | - | |
1054 | -### Cl | |
1055 | - | |
1056 | -oning Repositories | |
1057 | - | |
1058 | -**SSH (Recommended):** | |
1059 | -```bash | |
1060 | -# Add your SSH key in Settings → SSH Keys | |
1061 | -git clone [email protected]:username/repo.git | |
1062 | -``` | |
1063 | - | |
1064 | -**HTTPS:** | |
1065 | -```bash | |
1066 | -git clone https://your-domain.com/username/repo.git | |
1067 | -# Username: your-username | |
1068 | -# Password: your-password or personal access token | |
1069 | -``` | |
1070 | - | |
1071 | -### Setting Up Branch Protection | |
1072 | - | |
1073 | -1. Navigate to **Repository → Settings → Branches** | |
1074 | -2. Click **Add Rule** | |
1075 | -3. Configure: | |
1076 | - - **Pattern**: `main` or `release/*` | |
1077 | - - **Require PR**: ✅ | |
1078 | - - **Required Approvals**: 2 | |
1079 | - - **Dismiss Stale Reviews**: ✅ | |
1080 | -4. **Save Rule** | |
1081 | - | |
1082 | -### CI/CD Workflows | |
1083 | - | |
1084 | -Create `.github/workflows/ci.yml`: | |
1085 | - | |
1086 | -```yaml | |
1087 | -name: CI | |
1088 | - | |
1089 | -on: | |
1090 | - push: | |
1091 | - branches: [main, develop] | |
1092 | - pull_request: | |
1093 | - branches: [main] | |
1094 | - | |
1095 | -jobs: | |
1096 | - test: | |
1097 | - runs-on: ubuntu-latest | |
1098 | - steps: | |
1099 | - - uses: actions/checkout@v4 | |
1100 | - | |
1101 | - - name: Setup Node.js | |
1102 | - uses: actions/setup-node@v4 | |
1103 | - with: | |
1104 | - node-version: '20' | |
1105 | - | |
1106 | - - name: Install | |
1107 | - run: npm ci | |
1108 | - | |
1109 | - - name: Test | |
1110 | - run: npm test | |
1111 | - | |
1112 | - - name: Build | |
1113 | - run: npm run build | |
1114 | - | |
1115 | - - name: Upload Artifacts | |
1116 | - uses: actions/upload-artifact@v3 | |
1117 | - with: | |
1118 | - name: dist | |
1119 | - path: dist/ | |
1120 | -``` | |
1121 | - | |
1122 | - | |
1123 | -## 🐛 Troubleshooting | |
1124 | - | |
1125 | -### Common Issues | |
1126 | - | |
1127 | -**"Rate limit exceeded" on login:** | |
1128 | -- Default: 5 attempts per 15 minutes | |
1129 | -- Solution: Wait 15 minutes or adjust `RATE_LIMIT_AUTH` in `.env` | |
1130 | - | |
1131 | -**"CSRF token validation failed":** | |
1132 | -- Ensure cookies are enabled | |
1133 | -- Check `SITE_URL` matches your actual domain | |
1134 | -- Verify HTTPS in production | |
1135 | - | |
1136 | -**"Unauthorized" on git hooks:** | |
1137 | -- Check `INTERNAL_HOOK_SECRET` is set | |
1138 | -- Verify hooks have correct secret in curl headers | |
1139 | -- Re-run `git init` on repositories to reinstall hooks | |
1140 | - | |
1141 | -**Database connection errors:** | |
1142 | -- Verify `DATABASE_URL` format | |
1143 | -- Check database server is running | |
1144 | -- Ensure user has correct permissions | |
1145 | - | |
1146 | -**Storage upload fails:** | |
1147 | -- Test connection in `/admin/storage` | |
1148 | -- Verify S3 credentials and bucket permissions | |
1149 | -- Check firewall rules for external storage | |
1150 | - | |
1151 | -### Debug Mode | |
1152 | - | |
1153 | -```env | |
1154 | -# Enable detailed logging | |
1155 | -LOG_LEVEL=debug | |
1156 | -NODE_ENV=development | |
1157 | - | |
1158 | -# View logs | |
1159 | -tail -f data/logs/opencodehub.log | |
1160 | -``` | |
1161 | - | |
1162 | -### Health Check | |
1163 | - | |
1164 | -```bash | |
1165 | -curl http://localhost:3000/api/health | |
1166 | - | |
1167 | -# Response: | |
1168 | -{ | |
1169 | - "status": "ok", | |
1170 | - "checks": { | |
1171 | - "database": "ok", | |
1172 | - "storage": "ok", | |
1173 | - "redis": "ok" // if configured | |
1174 | - }, | |
1175 | - "uptime": 123456, | |
1176 | - "version": "1.0.0" | |
1177 | -} | |
1178 | -``` | |
1179 | - | |
1180 | - | |
1181 | -## 🤝 Contributing | |
1182 | - | |
1183 | -We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. | |
1184 | - | |
1185 | -### Development Setup | |
1186 | - | |
1187 | -```bash | |
1188 | -# Fork and clone | |
1189 | -git clone https://github.com/swadhinbiswas/OpencodeHub.git | |
1190 | -cd OpencodeHub | |
1191 | - | |
1192 | -# Install dependencies | |
1193 | -bun install | |
1194 | - | |
1195 | -# Run in development | |
1196 | -bun run dev | |
1197 | - | |
1198 | -# Run tests | |
1199 | -bun test | |
1200 | - | |
1201 | -# Lint | |
1202 | -bun run lint | |
1203 | -``` | |
1204 | - | |
1205 | -### Submitting Changes | |
1206 | - | |
1207 | -1. Create a feature branch (`git checkout -b feature/amazing-feature`) | |
1208 | -2. Make your changes | |
1209 | -3. Add tests | |
1210 | -4. Run `bun test` and `bun run lint` | |
1211 | -5. Commit (`git commit -m 'Add amazing feature'`) | |
1212 | -6. Push (`git push origin feature/amazing-feature`) | |
1213 | -7. Open a Pull Request | |
1214 | - | |
1215 | - | |
1216 | -## 📄 License | |
1217 | - | |
1218 | -MIT License - see [LICENSE](LICENSE) for details. | |
1219 | - | |
1220 | - | |
1221 | -## 🙏 Acknowledgments | |
1222 | - | |
1223 | -- [Astro](https://astro.build/) - Web framework | |
1224 | -- [shadcn/ui](https://ui.shadcn.com/) - UI components | |
1225 | -- [Drizzle ORM](https://orm.drizzle.team/) - Database toolkit | |
1226 | -- [simple-git](https://github.com/steveukx/git-js) - Git operations | |
1227 | -- [Monaco Editor](https://microsoft.github.io/monaco-editor/) - Code editor | |
1228 | -- [Zod](https://zod.dev/) - Schema validation | |
1229 | - | |
1230 | - | |
1231 | -<p align="center"> | |
1232 | - <strong>Made with ❤️ for the open source community</strong> | |
1233 | - <br> | |
1234 | - <a href="https://github.com/swadhinbiswas/OpencodeHub/issues">Report Bug</a> • | |
1235 | - <a href="https://github.com/swadhinbiswas/OpencodeHub/issues">Request Feature</a> | |
1236 | -</p> | |
1237 | 0 | |
▼Vercel Deploy.md
+1-1
| @@ -372,7 +372,7 @@ openssl rand -base64 32 # INTERNAL_HOOK_SECRET | ||
372 | 372 | ### 5.1. Install Vercel CLI (Optional) |
373 | 373 | |
374 | 374 | ```bash |
375 | -npm install -g vercel | |
375 | +bun install -g vercel | |
376 | 376 | vercel login |
377 | 377 | ``` |
378 | 378 | |
379 | 379 | |
▼astro.config.mjs
+5-3
| @@ -1,4 +1,4 @@ | ||
1 | -import node from "@astrojs/node"; | |
1 | +import vercel from "@astrojs/vercel/serverless"; | |
2 | 2 | import react from "@astrojs/react"; |
3 | 3 | import tailwind from "@astrojs/tailwind"; |
4 | 4 | import { defineConfig } from "astro/config"; |
| @@ -11,8 +11,10 @@ export default defineConfig({ | ||
11 | 11 | }), |
12 | 12 | ], |
13 | 13 | output: "server", |
14 | - adapter: node({ | |
15 | - mode: "standalone", | |
14 | + adapter: vercel({ | |
15 | + webAnalytics: { | |
16 | + enabled: true, | |
17 | + }, | |
16 | 18 | }), |
17 | 19 | server: { |
18 | 20 | port: 3000, |
19 | 21 | |
▼bun.lock
+43-1
| @@ -8,6 +8,7 @@ | ||
8 | 8 | "@astrojs/node": "^8.3.0", |
9 | 9 | "@astrojs/react": "^3.6.0", |
10 | 10 | "@astrojs/tailwind": "^5.1.0", |
11 | + "@astrojs/vercel": "^9.0.2", | |
11 | 12 | "@aws-sdk/client-s3": "^3.948.0", |
12 | 13 | "@aws-sdk/s3-request-presigner": "^3.948.0", |
13 | 14 | "@libsql/client": "^0.15.15", |
| @@ -70,6 +71,7 @@ | ||
70 | 71 | "otplib": "^12.0.1", |
71 | 72 | "pg": "^8.16.3", |
72 | 73 | "pino": "^10.1.0", |
74 | + "pino-loki": "^3.0.0", | |
73 | 75 | "postgres": "^3.4.7", |
74 | 76 | "prom-client": "^15.1.3", |
75 | 77 | "react": "^18.3.1", |
| @@ -118,7 +120,7 @@ | ||
118 | 120 | |
119 | 121 | "@astrojs/compiler": ["@astrojs/[email protected]", "", {}, "sha512-mqVORhUJViA28fwHYaWmsXSzLO9osbdZ5ImUfxBarqsYdMlPbqAqGJCxsNzvppp1BEzc1mJNjOVvQqeDN8Vspw=="], |
120 | 122 | |
121 | - "@astrojs/internal-helpers": ["@astrojs/[email protected]", "", {}, "sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g=="], | |
123 | + "@astrojs/internal-helpers": ["@astrojs/[email protected]", "", {}, "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA=="], | |
122 | 124 | |
123 | 125 | "@astrojs/markdown-remark": ["@astrojs/[email protected]", "", { "dependencies": { "@astrojs/prism": "3.1.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "import-meta-resolve": "^4.1.0", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.1", "remark-smartypants": "^3.0.2", "shiki": "^1.22.0", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.0.0", "unist-util-visit-parents": "^6.0.1", "vfile": "^6.0.3" } }, "sha512-r0Ikqr0e6ozPb5bvhup1qdWnSPUvQu6tub4ZLYaKyG50BXZ0ej6FhGz3GpChKpH7kglRFPObJd/bDyf2VM9pkg=="], |
124 | 126 | |
| @@ -132,6 +134,8 @@ | ||
132 | 134 | |
133 | 135 | "@astrojs/telemetry": ["@astrojs/[email protected]", "", { "dependencies": { "ci-info": "^4.0.0", "debug": "^4.3.4", "dlv": "^1.1.3", "dset": "^3.1.3", "is-docker": "^3.0.0", "is-wsl": "^3.0.0", "which-pm-runs": "^1.1.0" } }, "sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA=="], |
134 | 136 | |
137 | + "@astrojs/vercel": ["@astrojs/[email protected]", "", { "dependencies": { "@astrojs/internal-helpers": "0.7.5", "@vercel/analytics": "^1.5.0", "@vercel/functions": "^2.2.13", "@vercel/nft": "0.30.4", "@vercel/routing-utils": "^5.3.0", "esbuild": "^0.25.0", "tinyglobby": "^0.2.15" }, "peerDependencies": { "astro": "^5.0.0" } }, "sha512-L/pQal/5fity/rLmQ5KsqYaVphhNI+Eui+WnLbuqZ7Vf9ocmwX6v0pSDqSejgTQMoMQJq4FPWR8XAtsxMB4Yfw=="], | |
138 | + | |
135 | 139 | "@aws-crypto/crc32": ["@aws-crypto/[email protected]", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg=="], |
136 | 140 | |
137 | 141 | "@aws-crypto/crc32c": ["@aws-crypto/[email protected]", "", { "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", "tslib": "^2.6.2" } }, "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag=="], |
| @@ -1026,6 +1030,16 @@ | ||
1026 | 1030 | |
1027 | 1031 | "@upstash/redis": ["@upstash/[email protected]", "", { "dependencies": { "uncrypto": "^0.1.3" } }, "sha512-9zN2UV9QJGPnXfWU3yZBLVQaqqENDh7g+Y4J2vJuSxBCi9FQ0aUOtaXlzuFhnsiZvCqM+eS27ic+tgmkWUsfOg=="], |
1028 | 1032 | |
1033 | + "@vercel/analytics": ["@vercel/[email protected]", "", { "peerDependencies": { "@remix-run/react": "^2", "@sveltejs/kit": "^1 || ^2", "next": ">= 13", "react": "^18 || ^19 || ^19.0.0-rc", "svelte": ">= 4", "vue": "^3", "vue-router": "^4" }, "optionalPeers": ["@remix-run/react", "@sveltejs/kit", "next", "react", "svelte", "vue", "vue-router"] }, "sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg=="], | |
1034 | + | |
1035 | + "@vercel/functions": ["@vercel/[email protected]", "", { "dependencies": { "@vercel/oidc": "2.0.2" }, "peerDependencies": { "@aws-sdk/credential-provider-web-identity": "*" }, "optionalPeers": ["@aws-sdk/credential-provider-web-identity"] }, "sha512-14ArBSIIcOBx9nrEgaJb4Bw+en1gl6eSoJWh8qjifLl5G3E4dRXCFOT8HP+w66vb9Wqyd1lAQBrmRhRwOj9X9A=="], | |
1036 | + | |
1037 | + "@vercel/nft": ["@vercel/[email protected]", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0", "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^10.5.0", "graceful-fs": "^4.2.9", "node-gyp-build": "^4.2.2", "picomatch": "^4.0.2", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" } }, "sha512-wE6eAGSXScra60N2l6jWvNtVK0m+sh873CpfZW4KI2v8EHuUQp+mSEi4T+IcdPCSEDgCdAS/7bizbhQlkjzrSA=="], | |
1038 | + | |
1039 | + "@vercel/oidc": ["@vercel/[email protected]", "", { "dependencies": { "@types/ms": "2.1.0", "ms": "2.1.3" } }, "sha512-59PBFx3T+k5hLTEWa3ggiMpGRz1OVvl9eN8SUai+A43IsqiOuAe7qPBf+cray/Fj6mkgnxm/D7IAtjc8zSHi7g=="], | |
1040 | + | |
1041 | + "@vercel/routing-utils": ["@vercel/[email protected]", "", { "dependencies": { "path-to-regexp": "6.1.0", "path-to-regexp-updated": "npm:[email protected]" }, "optionalDependencies": { "ajv": "^6.12.3" } }, "sha512-HlqFRdB6Dm20xgEWtEatchf9X28NifweXPdDoEGyj5ItngaiqpywtkgkuiAk3xK9eAu2oXM36wEJbDDTxMblUg=="], | |
1042 | + | |
1029 | 1043 | "@vitejs/plugin-react": ["@vitejs/[email protected]", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], |
1030 | 1044 | |
1031 | 1045 | "@vitest/expect": ["@vitest/[email protected]", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.0.15", "@vitest/utils": "4.0.15", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" } }, "sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w=="], |
| @@ -1056,6 +1070,8 @@ | ||
1056 | 1070 | |
1057 | 1071 | "agent-base": ["[email protected]", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], |
1058 | 1072 | |
1073 | + "ajv": ["[email protected]", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], | |
1074 | + | |
1059 | 1075 | "ansi-align": ["[email protected]", "", { "dependencies": { "string-width": "^4.1.0" } }, "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w=="], |
1060 | 1076 | |
1061 | 1077 | "ansi-regex": ["[email protected]", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], |
| @@ -1084,6 +1100,8 @@ | ||
1084 | 1100 | |
1085 | 1101 | "async-lock": ["[email protected]", "", {}, "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ=="], |
1086 | 1102 | |
1103 | + "async-sema": ["[email protected]", "", {}, "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg=="], | |
1104 | + | |
1087 | 1105 | "atomic-sleep": ["[email protected]", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], |
1088 | 1106 | |
1089 | 1107 | "autoprefixer": ["[email protected]", "", { "dependencies": { "browserslist": "^4.27.0", "caniuse-lite": "^1.0.30001754", "fraction.js": "^5.3.4", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg=="], |
| @@ -1402,10 +1420,14 @@ | ||
1402 | 1420 | |
1403 | 1421 | "fast-copy": ["[email protected]", "", {}, "sha512-+uUOQlhsaswsizHFmEFAQhB3lSiQ+lisxl50N6ZP0wywlZeWsIESxSi9ftPEps8UGfiBzyYP7x27zA674WUvXw=="], |
1404 | 1422 | |
1423 | + "fast-deep-equal": ["[email protected]", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], | |
1424 | + | |
1405 | 1425 | "fast-fifo": ["[email protected]", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], |
1406 | 1426 | |
1407 | 1427 | "fast-glob": ["[email protected]", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], |
1408 | 1428 | |
1429 | + "fast-json-stable-stringify": ["[email protected]", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], | |
1430 | + | |
1409 | 1431 | "fast-safe-stringify": ["[email protected]", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], |
1410 | 1432 | |
1411 | 1433 | "fast-xml-parser": ["[email protected]", "", { "dependencies": { "strnum": "^2.1.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ=="], |
| @@ -1646,6 +1668,8 @@ | ||
1646 | 1668 | |
1647 | 1669 | "json-bigint": ["[email protected]", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="], |
1648 | 1670 | |
1671 | + "json-schema-traverse": ["[email protected]", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], | |
1672 | + | |
1649 | 1673 | "json5": ["[email protected]", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], |
1650 | 1674 | |
1651 | 1675 | "jsonfile": ["[email protected]", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], |
| @@ -1872,6 +1896,8 @@ | ||
1872 | 1896 | |
1873 | 1897 | "node-gyp": ["[email protected]", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "graceful-fs": "^4.2.6", "make-fetch-happen": "^14.0.3", "nopt": "^8.0.0", "proc-log": "^5.0.0", "semver": "^7.3.5", "tar": "^7.4.3", "tinyglobby": "^0.2.12", "which": "^5.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ=="], |
1874 | 1898 | |
1899 | + "node-gyp-build": ["[email protected]", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], | |
1900 | + | |
1875 | 1901 | "node-gyp-build-optional-packages": ["[email protected]", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], |
1876 | 1902 | |
1877 | 1903 | "node-releases": ["[email protected]", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], |
| @@ -1942,6 +1968,10 @@ | ||
1942 | 1968 | |
1943 | 1969 | "path-scurry": ["[email protected]", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], |
1944 | 1970 | |
1971 | + "path-to-regexp": ["[email protected]", "", {}, "sha512-h9DqehX3zZZDCEm+xbfU0ZmwCGFCAAraPJWMXJ4+v32NjZJilVg3k1TcKsRgIb8IQ/izZSaydDc1OhJCZvs2Dw=="], | |
1972 | + | |
1973 | + "path-to-regexp-updated": ["[email protected]", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="], | |
1974 | + | |
1945 | 1975 | "pathe": ["[email protected]", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], |
1946 | 1976 | |
1947 | 1977 | "pg": ["[email protected]", "", { "dependencies": { "pg-connection-string": "^2.9.1", "pg-pool": "^3.10.1", "pg-protocol": "^1.10.3", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.2.7" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-enxc1h0jA/aq5oSDMvqyW3q89ra6XIIDZgCX9vkMrnz5DFTw/Ny3Li2lFQ+pt3L6MCgm/5o2o8HW9hiJji+xvw=="], |
| @@ -1972,6 +2002,8 @@ | ||
1972 | 2002 | |
1973 | 2003 | "pino-abstract-transport": ["[email protected]", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg=="], |
1974 | 2004 | |
2005 | + "pino-loki": ["[email protected]", "", { "dependencies": { "pino-abstract-transport": "^3.0.0", "pump": "^3.0.3" }, "bin": { "pino-loki": "dist/cli.mjs" } }, "sha512-9TyUW5syTjp2nT70QcijJtIWUzdYUj+olQ7+fWNfm1/HrDGEWt86Q4ACzClH6DM6GBwtQimRDgneNczP+p4ypA=="], | |
2006 | + | |
1975 | 2007 | "pino-pretty": ["[email protected]", "", { "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", "fast-copy": "^4.0.0", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^3.0.0", "pump": "^3.0.0", "secure-json-parse": "^4.0.0", "sonic-boom": "^4.0.1", "strip-json-comments": "^5.0.2" }, "bin": { "pino-pretty": "bin.js" } }, "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg=="], |
1976 | 2008 | |
1977 | 2009 | "pino-std-serializers": ["[email protected]", "", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], |
| @@ -2044,6 +2076,8 @@ | ||
2044 | 2076 | |
2045 | 2077 | "pump": ["[email protected]", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], |
2046 | 2078 | |
2079 | + "punycode": ["[email protected]", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], | |
2080 | + | |
2047 | 2081 | "qs": ["[email protected]", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ=="], |
2048 | 2082 | |
2049 | 2083 | "queue-microtask": ["[email protected]", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], |
| @@ -2120,6 +2154,8 @@ | ||
2120 | 2154 | |
2121 | 2155 | "resolve-alpn": ["[email protected]", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], |
2122 | 2156 | |
2157 | + "resolve-from": ["[email protected]", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], | |
2158 | + | |
2123 | 2159 | "resolve-pkg-maps": ["[email protected]", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], |
2124 | 2160 | |
2125 | 2161 | "responselike": ["[email protected]", "", { "dependencies": { "lowercase-keys": "^3.0.0" } }, "sha512-cGk8IbWEAnaCpdAt1BHzJ3Ahz5ewDJa0KseTsE3qIRMJ3C698W8psM7byCeWVpd/Ha7FUYzuRVzXoKoM6nRUbA=="], |
| @@ -2378,6 +2414,8 @@ | ||
2378 | 2414 | |
2379 | 2415 | "update-browserslist-db": ["[email protected]", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA=="], |
2380 | 2416 | |
2417 | + "uri-js": ["[email protected]", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], | |
2418 | + | |
2381 | 2419 | "url-template": ["[email protected]", "", {}, "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw=="], |
2382 | 2420 | |
2383 | 2421 | "use-callback-ref": ["[email protected]", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], |
| @@ -2584,10 +2622,14 @@ | ||
2584 | 2622 | |
2585 | 2623 | "@types/ssh2/@types/node": ["@types/[email protected]", "", { "dependencies": { "undici-types": "~5.26.4" } }, "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg=="], |
2586 | 2624 | |
2625 | + "@vercel/nft/estree-walker": ["[email protected]", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], | |
2626 | + | |
2587 | 2627 | "ansi-align/string-width": ["[email protected]", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], |
2588 | 2628 | |
2589 | 2629 | "anymatch/picomatch": ["[email protected]", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], |
2590 | 2630 | |
2631 | + "astro/@astrojs/internal-helpers": ["@astrojs/[email protected]", "", {}, "sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g=="], | |
2632 | + | |
2591 | 2633 | "astro/esbuild": ["[email protected]", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], |
2592 | 2634 | |
2593 | 2635 | "astro/tinyexec": ["[email protected]", "", {}, "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA=="], |
2594 | 2636 | |
▼cli/.npmignore
+15-0
| @@ -0,0 +1,15 @@ | ||
1 | +# Ignore source files (dist is included) | |
2 | +src/ | |
3 | +tsconfig.json | |
4 | + | |
5 | +# Dev files | |
6 | +*.test.ts | |
7 | +*.spec.ts | |
8 | +.vscode/ | |
9 | +.idea/ | |
10 | + | |
11 | +# Other | |
12 | +node_modules/ | |
13 | +coverage/ | |
14 | +.env | |
15 | +.env.* | |
0 | 16 | |
▼cli/CHANGELOG.md
+27-0
| @@ -0,0 +1,27 @@ | ||
1 | +# Changelog | |
2 | + | |
3 | +All notable changes to this project will be documented in this file. | |
4 | + | |
5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), | |
6 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). | |
7 | + | |
8 | +## [1.0.0] - 2026-01-17 | |
9 | + | |
10 | +### Added | |
11 | +- Initial release of OpenCodeHub CLI | |
12 | +- `och auth` - Authentication commands (login, logout, whoami) | |
13 | +- `och stack` - Stack management (create, view, submit, sync, reorder) | |
14 | +- `och init` - Repository initialization | |
15 | +- `och status` - Stack status display | |
16 | +- `och config` - Configuration management | |
17 | +- Support for stacked pull requests | |
18 | +- Interactive prompts with Inquirer.js | |
19 | +- Progress spinners with Ora | |
20 | +- Colorful output with Chalk | |
21 | + | |
22 | +### Features | |
23 | +- Stack-first PR workflow | |
24 | +- Automatic PR dependency linking | |
25 | +- Smart stack rebasing | |
26 | +- Token-based authentication for CI/CD | |
27 | +- Cross-platform support (Windows, macOS, Linux) | |
0 | 28 | |
▼cli/LICENSE
+21-0
| @@ -0,0 +1,21 @@ | ||
1 | +MIT License | |
2 | + | |
3 | +Copyright (c) 2024-2026 Swadhin Biswas | |
4 | + | |
5 | +Permission is hereby granted, free of charge, to any person obtaining a copy | |
6 | +of this software and associated documentation files (the "Software"), to deal | |
7 | +in the Software without restriction, including without limitation the rights | |
8 | +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
9 | +copies of the Software, and to permit persons to whom the Software is | |
10 | +furnished to do so, subject to the following conditions: | |
11 | + | |
12 | +The above copyright notice and this permission notice shall be included in all | |
13 | +copies or substantial portions of the Software. | |
14 | + | |
15 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
16 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
17 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
18 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
19 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
20 | +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
21 | +SOFTWARE. | |
0 | 22 | |
▼cli/README.md
+124-278
| @@ -1,365 +1,211 @@ | ||
1 | -# OCH CLI - OpenCodeHub Command Line Interface | |
1 | +<p align="center"> | |
2 | + <img src="https://raw.githubusercontent.com/swadhinbiswas/OpenCodeHub/main/public/logo.svg" alt="OpenCodeHub CLI" width="120" /> | |
3 | +</p> | |
2 | 4 | |
3 | -**Stack-first PR workflows from your terminal.** | |
5 | +<h1 align="center">OpenCodeHub CLI</h1> | |
4 | 6 | |
5 | -## Installation | |
7 | +<p align="center"> | |
8 | + <strong>Stack-first PR workflows from your terminal</strong> | |
9 | +</p> | |
10 | + | |
11 | +<p align="center"> | |
12 | + <a href="https://www.npmjs.com/package/opencodehub-cli"><img src="https://img.shields.io/npm/v/opencodehub-cli.svg?style=flat-square" alt="npm version" /></a> | |
13 | + <a href="https://www.npmjs.com/package/opencodehub-cli"><img src="https://img.shields.io/npm/dm/opencodehub-cli.svg?style=flat-square" alt="npm downloads" /></a> | |
14 | + <a href="https://github.com/swadhinbiswas/OpencodeHub/blob/main/cli/LICENSE"><img src="https://img.shields.io/npm/l/opencodehub-cli.svg?style=flat-square" alt="license" /></a> | |
15 | + <a href="https://github.com/swadhinbiswas/OpencodeHub"><img src="https://img.shields.io/github/stars/swadhinbiswas/OpenCodeHub?style=flat-square" alt="GitHub stars" /></a> | |
16 | +</p> | |
17 | + | |
18 | +<p align="center"> | |
19 | + <a href="#-installation">Installation</a> • | |
20 | + <a href="#-quick-start">Quick Start</a> • | |
21 | + <a href="#-commands">Commands</a> • | |
22 | + <a href="#-workflow-examples">Examples</a> • | |
23 | + <a href="#-contributing">Contributing</a> | |
24 | +</p> | |
25 | + | |
26 | +--- | |
27 | + | |
28 | +## ✨ Features | |
29 | + | |
30 | +- 📚 **Stacked PRs** - Create dependent pull requests that automatically update when parent changes | |
31 | +- 🔄 **Smart Sync** - Rebase entire stacks with a single command | |
32 | +- 🚀 **Fast Workflow** - Submit, update, and manage PRs without leaving your terminal | |
33 | +- 🔗 **GitHub/GitLab Alternative** - Works with self-hosted OpenCodeHub instances | |
34 | +- 🎯 **Zero Config** - Works out of the box with sensible defaults | |
35 | + | |
36 | +## 📦 Installation | |
6 | 37 | |
7 | 38 | ```bash |
8 | -# Install globally | |
39 | +# Install globally with npm | |
9 | 40 | npm install -g opencodehub-cli |
10 | 41 | |
11 | -# Or use with npx (no installation needed) | |
12 | -npx opencodehub-cli | |
42 | +# Or with yarn | |
43 | +yarn global add opencodehub-cli | |
44 | + | |
45 | +# Or with pnpm | |
46 | +pnpm add -g opencodehub-cli | |
13 | 47 | |
14 | 48 | # Verify installation |
15 | 49 | och --version |
16 | 50 | ``` |
17 | 51 | |
18 | -## Quick Start | |
52 | +## 🚀 Quick Start | |
19 | 53 | |
20 | 54 | ```bash |
21 | 55 | # 1. Login to your OpenCodeHub instance |
22 | 56 | och auth login |
23 | 57 | |
24 | -# Enter your email and password when prompted | |
25 | -# Or use a personal access token: | |
26 | -och auth login --token YOUR_TOKEN | |
27 | - | |
28 | 58 | # 2. Navigate to your repository |
29 | 59 | cd your-repo |
30 | 60 | |
31 | 61 | # 3. Initialize (one-time setup) |
32 | 62 | och init --url https://git.yourcompany.com |
33 | 63 | |
34 | -# 4. You're ready! Try: | |
35 | -och status | |
64 | +# 4. Create your first stack | |
65 | +och stack create my-feature | |
66 | + | |
67 | +# 5. Make changes, commit, and submit | |
68 | +git add . && git commit -m "Add feature" | |
69 | +och stack submit | |
36 | 70 | ``` |
37 | 71 | |
38 | -## Commands | |
72 | +## 📖 Commands | |
39 | 73 | |
40 | 74 | ### Authentication |
41 | 75 | |
42 | -```bash | |
43 | -# Interactive login | |
44 | -och auth login | |
45 | - | |
46 | -# Login with server URL | |
47 | -och auth login --url https://git.yourcompany.com | |
48 | - | |
49 | -# Login with token (CI/CD) | |
50 | -och auth login --token YOUR_ACCESS_TOKEN | |
51 | - | |
52 | -# Check who you're logged in as | |
53 | -och auth whoami | |
54 | - | |
55 | -# Logout | |
56 | -och auth logout | |
57 | -``` | |
76 | +| Command | Description | | |
77 | +|---------|-------------| | |
78 | +| `och auth login` | Interactive login | | |
79 | +| `och auth login --token TOKEN` | Login with access token (for CI/CD) | | |
80 | +| `och auth whoami` | Show current user | | |
81 | +| `och auth logout` | Clear stored credentials | | |
58 | 82 | |
59 | 83 | ### Stack Management |
60 | 84 | |
61 | -**Create Stacked Branches:** | |
62 | -```bash | |
63 | -# Create a new branch in current stack | |
64 | -och stack create \u003cbranch-name\u003e | |
65 | - | |
66 | -# Example: | |
67 | -git checkout main | |
68 | -och stack create database-schema | |
69 | -# Make changes, commit | |
70 | -och stack create auth-service | |
71 | -# Make changes, commit | |
72 | -``` | |
73 | - | |
74 | -**View Stack:** | |
75 | -```bash | |
76 | -# See all branches in current stack | |
77 | -och stack view | |
78 | - | |
79 | -# Short alias: | |
80 | -och stack ls | |
81 | - | |
82 | -# Example output: | |
83 | -# 📚 Current Stack | |
84 | -# ┌─ main (base) | |
85 | -# ├─ stack/database-schema ✓ Pushed | |
86 | -# └─ stack/auth-service * Current | |
87 | -``` | |
88 | - | |
89 | -**Submit Stack:** | |
90 | -```bash | |
91 | -# Push current branch and create/update PR | |
92 | -och stack submit | |
93 | - | |
94 | -# Create as draft PR | |
95 | -och stack submit --draft | |
96 | - | |
97 | -# This will: | |
98 | -# - Push your branch to origin | |
99 | -# - Create PR or update existing one | |
100 | -# - Link it to parent PR if in a stack | |
101 | -``` | |
102 | - | |
103 | -**Sync Stack:** | |
104 | -```bash | |
105 | -# Rebase entire stack on latest main | |
106 | -och stack sync | |
107 | - | |
108 | -# This handles: | |
109 | -# - Fetching latest from origin | |
110 | -# - Rebasing each branch in order | |
111 | -# - Detecting and reporting conflicts | |
112 | -``` | |
113 | - | |
114 | -**Reorder Stack:** | |
115 | -```bash | |
116 | -# Interactively reorder branches | |
117 | -och stack reorder | |
118 | - | |
119 | -# Choose new order from list | |
120 | -# Stack dependencies will be updated | |
121 | -``` | |
85 | +| Command | Description | | |
86 | +|---------|-------------| | |
87 | +| `och stack create <name>` | Create a new branch in current stack | | |
88 | +| `och stack view` / `och stack ls` | View all branches in current stack | | |
89 | +| `och stack submit` | Push and create/update PR | | |
90 | +| `och stack submit --draft` | Submit as draft PR | | |
91 | +| `och stack sync` | Rebase entire stack on latest main | | |
92 | +| `och stack reorder` | Interactively reorder branches | | |
122 | 93 | |
123 | 94 | ### Repository Operations |
124 | 95 | |
125 | -```bash | |
126 | -# Initialize repo for OpenCodeHub | |
127 | -och init [--url \u003cserver-url\u003e] | |
128 | - | |
129 | -# Show current stack status | |
130 | -och status | |
131 | -# Alias: och st | |
96 | +| Command | Description | | |
97 | +|---------|-------------| | |
98 | +| `och init` | Initialize repo for OpenCodeHub | | |
99 | +| `och status` / `och st` | Show current stack status | | |
100 | +| `och sync` | Sync with remote | | |
132 | 101 | |
133 | -# Sync with remote (bi-directional) | |
134 | -och sync | |
135 | -``` | |
102 | +## 🔄 Workflow Examples | |
136 | 103 | |
137 | -## Workflow Examples | |
138 | - | |
139 | -### Example 1: Create a Feature Stack | |
104 | +### Creating a Feature Stack | |
140 | 105 | |
141 | 106 | ```bash |
142 | 107 | # Start from main |
143 | -git checkout main | |
144 | -git pull | |
108 | +git checkout main && git pull | |
145 | 109 | |
146 | 110 | # Create base layer |
147 | -och stack create user-models | |
148 | -# ... edit files ... | |
149 | -git add . | |
111 | +och stack create database-schema | |
112 | +# ... make changes ... | |
150 | 113 | git commit -m "Add user database models" |
151 | 114 | |
152 | -# Create middleware layer (builds on user-models) | |
153 | -och stack create auth-middleware | |
154 | -# ... edit files ... | |
155 | -git add . | |
156 | -git commit -m "Add authentication middleware" | |
157 | - | |
158 | -# Create UI layer (builds on auth-middleware) | |
159 | -och stack create login-page | |
160 | -# ... edit files ... | |
161 | -git add . | |
162 | -git commit -m "Add login page UI" | |
115 | +# Create next layer (builds on database-schema) | |
116 | +och stack create auth-service | |
117 | +# ... make changes ... | |
118 | +git commit -m "Add authentication service" | |
163 | 119 | |
164 | 120 | # Submit entire stack |
165 | 121 | och stack submit |
166 | 122 | |
167 | 123 | # Result: |
168 | -# PR #301: Add user database models (main ← user-models) | |
169 | -# PR #302: Add auth middleware (user-models ← auth-middleware) | |
170 | -# PR #303: Add login page (auth-middleware ← login-page) | |
124 | +# PR #1: Add user database models (main ← database-schema) | |
125 | +# PR #2: Add auth service (database-schema ← auth-service) | |
171 | 126 | ``` |
172 | 127 | |
173 | -### Example 2: Update Stack After Review | |
128 | +### Updating After Review | |
174 | 129 | |
175 | 130 | ```bash |
176 | -# You're on stack/login-page | |
177 | -# Reviewer requested changes | |
178 | - | |
179 | -# Make changes | |
180 | -git add . | |
181 | -git commit -m "Address review feedback" | |
131 | +# Make requested changes | |
132 | +git add . && git commit -m "Address review feedback" | |
182 | 133 | |
183 | 134 | # Resubmit (updates PR automatically) |
184 | 135 | och stack submit |
185 | 136 | |
186 | -# If base changed, sync the whole stack | |
137 | +# If main changed, sync the whole stack | |
187 | 138 | och stack sync |
188 | 139 | ``` |
189 | 140 | |
190 | -### Example 3: collaboration on Stacks | |
141 | +## ⚙️ Configuration | |
191 | 142 | |
192 | -```bash | |
193 | -# Teammate created a stack, you want to build on it | |
194 | -git fetch | |
195 | -git checkout their-branch | |
143 | +OCH CLI stores configuration in `~/.ochrc`. | |
196 | 144 | |
197 | -# Create your branch on top | |
198 | -och stack create my-feature | |
199 | -# ... make changes ... | |
200 | -git commit -m "My changes" | |
201 | - | |
202 | -# Submit (will link your PR to theirs) | |
203 | -och stack submit | |
204 | -``` | |
205 | - | |
206 | -## Configuration | |
207 | - | |
208 | -OCH CLI stores configuration in `~/.ochrc` (JSON format). | |
209 | - | |
210 | -**View config:** | |
211 | 145 | ```bash |
146 | +# View config | |
212 | 147 | och config list |
213 | -``` | |
214 | 148 | |
215 | -**Set config:** | |
216 | -```bash | |
149 | +# Set config | |
217 | 150 | och config set host https://git.yourcompany.com |
218 | -och config set token YOUR_TOKEN | |
219 | -``` | |
220 | - | |
221 | -**Config file structure:** | |
222 | -```json | |
223 | -{ | |
224 | - "host": "https://git.yourcompany.com", | |
225 | - "token": "your-access-token", | |
226 | - "defaultBranch": "main" | |
227 | -} | |
228 | -``` | |
229 | - | |
230 | -## Troubleshooting | |
231 | - | |
232 | -### "Not logged in" Error | |
233 | - | |
234 | -```bash | |
235 | -# Check auth status | |
236 | -och auth whoami | |
237 | - | |
238 | -# If not logged in: | |
239 | -och auth login | |
240 | -``` | |
241 | - | |
242 | -### "No stack found" Error | |
243 | - | |
244 | -```bash | |
245 | -# Ensure you're in a git repository | |
246 | -git status | |
247 | - | |
248 | -# Initialize if needed | |
249 | -och init | |
250 | - | |
251 | -# Check current branch | |
252 | -git branch | |
151 | +och config set defaultBranch main | |
253 | 152 | ``` |
254 | 153 | |
255 | -### Permission Denied | |
256 | - | |
257 | -```bash | |
258 | -# Verify your token has correct permissions | |
259 | -och auth whoami | |
260 | - | |
261 | -# Login again with fresh token | |
262 | -och auth logout | |
263 | -och auth login --token NEW_TOKEN | |
264 | -``` | |
265 | - | |
266 | -### Stack Sync Conflicts | |
267 | - | |
268 | -```bash | |
269 | -# If sync encounters conflicts: | |
270 | -# 1. Resolve conflicts in each branch | |
271 | -# 2. Continue sync: | |
272 | -git rebase --continue | |
273 | - | |
274 | -# 3. Or abort and do manual rebase: | |
275 | -git rebase --abort | |
276 | -git checkout main | |
277 | -git pull | |
278 | -git checkout your-branch | |
279 | -git rebase main | |
280 | -``` | |
281 | - | |
282 | -## CI/CD Usage | |
154 | +## 🔧 CI/CD Usage | |
283 | 155 | |
284 | 156 | ```yaml |
285 | -# .github/workflows/deploy.yml | |
286 | -name: Deploy Stack | |
287 | -on: | |
288 | - push: | |
289 | - branches: ['stack/**'] | |
157 | +# .github/workflows/pr.yml | |
158 | +name: Submit PR | |
159 | +on: push | |
290 | 160 | |
291 | 161 | jobs: |
292 | - deploy: | |
162 | + submit: | |
293 | 163 | runs-on: ubuntu-latest |
294 | 164 | steps: |
295 | - - uses: actions/checkout@v3 | |
296 | - | |
165 | + - uses: actions/checkout@v4 | |
166 | + | |
297 | 167 | - name: Setup Node |
298 | - uses: actions/setup-node@v3 | |
299 | - | |
300 | - - name: Install OCH CLI | |
168 | + uses: actions/setup-node@v4 | |
169 | + with: | |
170 | + node-version: '20' | |
171 | + | |
172 | + - name: Install CLI | |
301 | 173 | run: npm install -g opencodehub-cli |
302 | - | |
303 | - - name: Login | |
304 | - run: och auth login --token ${{ secrets.OCH_TOKEN }} | |
305 | - | |
306 | - - name: Submit PR | |
307 | - run: och stack submit | |
174 | + | |
175 | + - name: Login & Submit | |
176 | + run: | | |
177 | + och auth login --token ${{ secrets.OCH_TOKEN }} | |
178 | + och stack submit | |
308 | 179 | ``` |
309 | 180 | |
310 | -## Advanced Features | |
311 | - | |
312 | -### Custom PR Templates | |
313 | - | |
314 | -Create `.github/pull_request_template.md` in your repo: | |
315 | - | |
316 | -```markdown | |
317 | -## Description | |
318 | -<!-- What does this PR do? --> | |
319 | - | |
320 | -## Stack Position | |
321 | -<!-- Part of stack: #XXX → This PR → #YYY --> | |
322 | - | |
323 | -## Checklist | |
324 | -- [ ] Tests pass | |
325 | -- [ ] Docs updated | |
326 | -``` | |
181 | +## 🤝 Contributing | |
327 | 182 | |
328 | -### Hooks | |
329 | - | |
330 | -OCH CLI supports git hooks for validation: | |
183 | +We welcome contributions! Please see our [Contributing Guide](https://github.com/swadhinbiswas/OpencodeHub/blob/main/CONTRIBUTING.md). | |
331 | 184 | |
332 | 185 | ```bash |
333 | -# .git/hooks/pre-push | |
334 | -#!/bin/bash | |
335 | -# Validate stack before push | |
336 | -och stack verify || exit 1 | |
337 | -``` | |
338 | - | |
339 | -## API Integration | |
186 | +# Clone the repo | |
187 | +git clone https://github.com/swadhinbiswas/OpencodeHub.git | |
188 | +cd OpenCodeHub/cli | |
340 | 189 | |
341 | -OCH CLI uses OpenCodeHub REST API. Token permissions needed: | |
342 | -- `repo` - Repository read/write | |
343 | -- `pr` - Pull request create/update | |
344 | -- `user` - Read user profile | |
190 | +# Install dependencies | |
191 | +npm install | |
345 | 192 | |
346 | -Generate token: `https://your-server/settings/tokens` | |
347 | - | |
348 | -## Contributing | |
349 | - | |
350 | -OCH CLI is open source! Contribute at: | |
351 | -https://github.com/swadhinbiswas/OpencodeHub/tree/main/cli | |
193 | +# Run in development mode | |
194 | +npm run dev | |
195 | +``` | |
352 | 196 | |
353 | -## Support | |
197 | +## 📝 License | |
354 | 198 | |
355 | -- **Documentation**: https://git.yourcompany.com/docs | |
356 | -- **Issues**: https://github.com/swadhinbiswas/OpencodeHub/issues | |
357 | -- **Discussions**: https://github.com/swadhinbiswas/OpencodeHub/discussions | |
199 | +MIT License - see [LICENSE](./LICENSE) for details. | |
358 | 200 | |
359 | -## changelog | |
201 | +## 🔗 Links | |
360 | 202 | |
361 | -See [CHANGELOG.md](./CHANGELOG.md) for version history. | |
203 | +- [OpenCodeHub](https://github.com/swadhinbiswas/OpencodeHub) - The main project | |
204 | +- [Documentation](https://github.com/swadhinbiswas/OpencodeHub#readme) | |
205 | +- [Report Issues](https://github.com/swadhinbiswas/OpencodeHub/issues) | |
362 | 206 | |
363 | -## License | |
207 | +--- | |
364 | 208 | |
365 | -MIT License - see [LICENSE](../LICENSE) | |
209 | +<p align="center"> | |
210 | + Made with ❤️ by <a href="https://github.com/swadhinbiswas">Swadhin Biswas</a> | |
211 | +</p> | |
366 | 212 | |
▼cli/bin/och.ts
+1-1
| @@ -59,4 +59,4 @@ program | ||
59 | 59 | // TODO: Show current stack |
60 | 60 | }); |
61 | 61 | |
62 | -program.parse(); | |
62 | +program.parse(process.argv); | |
63 | 63 | |
▼cli/package-lock.json
+2679-0
| @@ -0,0 +1,2679 @@ | ||
1 | +{ | |
2 | + "name": "opencodehub-cli", | |
3 | + "version": "1.0.1", | |
4 | + "lockfileVersion": 3, | |
5 | + "requires": true, | |
6 | + "packages": { | |
7 | + "": { | |
8 | + "name": "opencodehub-cli", | |
9 | + "version": "1.0.1", | |
10 | + "license": "MIT", | |
11 | + "dependencies": { | |
12 | + "chalk": "^5.3.0", | |
13 | + "commander": "^12.0.0", | |
14 | + "conf": "^12.0.0", | |
15 | + "inquirer": "^9.2.0", | |
16 | + "ora": "^8.0.0", | |
17 | + "simple-git": "^3.25.0" | |
18 | + }, | |
19 | + "bin": { | |
20 | + "och": "dist/bin/och.js" | |
21 | + }, | |
22 | + "devDependencies": { | |
23 | + "@types/inquirer": "^9.0.9", | |
24 | + "@types/node": "^20.14.9", | |
25 | + "tsx": "^4.15.0", | |
26 | + "typescript": "^5.5.2", | |
27 | + "vitest": "^4.0.15" | |
28 | + }, | |
29 | + "engines": { | |
30 | + "node": ">=18.0.0" | |
31 | + } | |
32 | + }, | |
33 | + "node_modules/@esbuild/aix-ppc64": { | |
34 | + "version": "0.27.2", | |
35 | + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", | |
36 | + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", | |
37 | + "cpu": [ | |
38 | + "ppc64" | |
39 | + ], | |
40 | + "dev": true, | |
41 | + "license": "MIT", | |
42 | + "optional": true, | |
43 | + "os": [ | |
44 | + "aix" | |
45 | + ], | |
46 | + "engines": { | |
47 | + "node": ">=18" | |
48 | + } | |
49 | + }, | |
50 | + "node_modules/@esbuild/android-arm": { | |
51 | + "version": "0.27.2", | |
52 | + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", | |
53 | + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", | |
54 | + "cpu": [ | |
55 | + "arm" | |
56 | + ], | |
57 | + "dev": true, | |
58 | + "license": "MIT", | |
59 | + "optional": true, | |
60 | + "os": [ | |
61 | + "android" | |
62 | + ], | |
63 | + "engines": { | |
64 | + "node": ">=18" | |
65 | + } | |
66 | + }, | |
67 | + "node_modules/@esbuild/android-arm64": { | |
68 | + "version": "0.27.2", | |
69 | + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", | |
70 | + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", | |
71 | + "cpu": [ | |
72 | + "arm64" | |
73 | + ], | |
74 | + "dev": true, | |
75 | + "license": "MIT", | |
76 | + "optional": true, | |
77 | + "os": [ | |
78 | + "android" | |
79 | + ], | |
80 | + "engines": { | |
81 | + "node": ">=18" | |
82 | + } | |
83 | + }, | |
84 | + "node_modules/@esbuild/android-x64": { | |
85 | + "version": "0.27.2", | |
86 | + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", | |
87 | + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", | |
88 | + "cpu": [ | |
89 | + "x64" | |
90 | + ], | |
91 | + "dev": true, | |
92 | + "license": "MIT", | |
93 | + "optional": true, | |
94 | + "os": [ | |
95 | + "android" | |
96 | + ], | |
97 | + "engines": { | |
98 | + "node": ">=18" | |
99 | + } | |
100 | + }, | |
101 | + "node_modules/@esbuild/darwin-arm64": { | |
102 | + "version": "0.27.2", | |
103 | + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", | |
104 | + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", | |
105 | + "cpu": [ | |
106 | + "arm64" | |
107 | + ], | |
108 | + "dev": true, | |
109 | + "license": "MIT", | |
110 | + "optional": true, | |
111 | + "os": [ | |
112 | + "darwin" | |
113 | + ], | |
114 | + "engines": { | |
115 | + "node": ">=18" | |
116 | + } | |
117 | + }, | |
118 | + "node_modules/@esbuild/darwin-x64": { | |
119 | + "version": "0.27.2", | |
120 | + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", | |
121 | + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", | |
122 | + "cpu": [ | |
123 | + "x64" | |
124 | + ], | |
125 | + "dev": true, | |
126 | + "license": "MIT", | |
127 | + "optional": true, | |
128 | + "os": [ | |
129 | + "darwin" | |
130 | + ], | |
131 | + "engines": { | |
132 | + "node": ">=18" | |
133 | + } | |
134 | + }, | |
135 | + "node_modules/@esbuild/freebsd-arm64": { | |
136 | + "version": "0.27.2", | |
137 | + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", | |
138 | + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", | |
139 | + "cpu": [ | |
140 | + "arm64" | |
141 | + ], | |
142 | + "dev": true, | |
143 | + "license": "MIT", | |
144 | + "optional": true, | |
145 | + "os": [ | |
146 | + "freebsd" | |
147 | + ], | |
148 | + "engines": { | |
149 | + "node": ">=18" | |
150 | + } | |
151 | + }, | |
152 | + "node_modules/@esbuild/freebsd-x64": { | |
153 | + "version": "0.27.2", | |
154 | + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", | |
155 | + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", | |
156 | + "cpu": [ | |
157 | + "x64" | |
158 | + ], | |
159 | + "dev": true, | |
160 | + "license": "MIT", | |
161 | + "optional": true, | |
162 | + "os": [ | |
163 | + "freebsd" | |
164 | + ], | |
165 | + "engines": { | |
166 | + "node": ">=18" | |
167 | + } | |
168 | + }, | |
169 | + "node_modules/@esbuild/linux-arm": { | |
170 | + "version": "0.27.2", | |
171 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", | |
172 | + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", | |
173 | + "cpu": [ | |
174 | + "arm" | |
175 | + ], | |
176 | + "dev": true, | |
177 | + "license": "MIT", | |
178 | + "optional": true, | |
179 | + "os": [ | |
180 | + "linux" | |
181 | + ], | |
182 | + "engines": { | |
183 | + "node": ">=18" | |
184 | + } | |
185 | + }, | |
186 | + "node_modules/@esbuild/linux-arm64": { | |
187 | + "version": "0.27.2", | |
188 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", | |
189 | + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", | |
190 | + "cpu": [ | |
191 | + "arm64" | |
192 | + ], | |
193 | + "dev": true, | |
194 | + "license": "MIT", | |
195 | + "optional": true, | |
196 | + "os": [ | |
197 | + "linux" | |
198 | + ], | |
199 | + "engines": { | |
200 | + "node": ">=18" | |
201 | + } | |
202 | + }, | |
203 | + "node_modules/@esbuild/linux-ia32": { | |
204 | + "version": "0.27.2", | |
205 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", | |
206 | + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", | |
207 | + "cpu": [ | |
208 | + "ia32" | |
209 | + ], | |
210 | + "dev": true, | |
211 | + "license": "MIT", | |
212 | + "optional": true, | |
213 | + "os": [ | |
214 | + "linux" | |
215 | + ], | |
216 | + "engines": { | |
217 | + "node": ">=18" | |
218 | + } | |
219 | + }, | |
220 | + "node_modules/@esbuild/linux-loong64": { | |
221 | + "version": "0.27.2", | |
222 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", | |
223 | + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", | |
224 | + "cpu": [ | |
225 | + "loong64" | |
226 | + ], | |
227 | + "dev": true, | |
228 | + "license": "MIT", | |
229 | + "optional": true, | |
230 | + "os": [ | |
231 | + "linux" | |
232 | + ], | |
233 | + "engines": { | |
234 | + "node": ">=18" | |
235 | + } | |
236 | + }, | |
237 | + "node_modules/@esbuild/linux-mips64el": { | |
238 | + "version": "0.27.2", | |
239 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", | |
240 | + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", | |
241 | + "cpu": [ | |
242 | + "mips64el" | |
243 | + ], | |
244 | + "dev": true, | |
245 | + "license": "MIT", | |
246 | + "optional": true, | |
247 | + "os": [ | |
248 | + "linux" | |
249 | + ], | |
250 | + "engines": { | |
251 | + "node": ">=18" | |
252 | + } | |
253 | + }, | |
254 | + "node_modules/@esbuild/linux-ppc64": { | |
255 | + "version": "0.27.2", | |
256 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", | |
257 | + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", | |
258 | + "cpu": [ | |
259 | + "ppc64" | |
260 | + ], | |
261 | + "dev": true, | |
262 | + "license": "MIT", | |
263 | + "optional": true, | |
264 | + "os": [ | |
265 | + "linux" | |
266 | + ], | |
267 | + "engines": { | |
268 | + "node": ">=18" | |
269 | + } | |
270 | + }, | |
271 | + "node_modules/@esbuild/linux-riscv64": { | |
272 | + "version": "0.27.2", | |
273 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", | |
274 | + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", | |
275 | + "cpu": [ | |
276 | + "riscv64" | |
277 | + ], | |
278 | + "dev": true, | |
279 | + "license": "MIT", | |
280 | + "optional": true, | |
281 | + "os": [ | |
282 | + "linux" | |
283 | + ], | |
284 | + "engines": { | |
285 | + "node": ">=18" | |
286 | + } | |
287 | + }, | |
288 | + "node_modules/@esbuild/linux-s390x": { | |
289 | + "version": "0.27.2", | |
290 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", | |
291 | + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", | |
292 | + "cpu": [ | |
293 | + "s390x" | |
294 | + ], | |
295 | + "dev": true, | |
296 | + "license": "MIT", | |
297 | + "optional": true, | |
298 | + "os": [ | |
299 | + "linux" | |
300 | + ], | |
301 | + "engines": { | |
302 | + "node": ">=18" | |
303 | + } | |
304 | + }, | |
305 | + "node_modules/@esbuild/linux-x64": { | |
306 | + "version": "0.27.2", | |
307 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", | |
308 | + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", | |
309 | + "cpu": [ | |
310 | + "x64" | |
311 | + ], | |
312 | + "dev": true, | |
313 | + "license": "MIT", | |
314 | + "optional": true, | |
315 | + "os": [ | |
316 | + "linux" | |
317 | + ], | |
318 | + "engines": { | |
319 | + "node": ">=18" | |
320 | + } | |
321 | + }, | |
322 | + "node_modules/@esbuild/netbsd-arm64": { | |
323 | + "version": "0.27.2", | |
324 | + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", | |
325 | + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", | |
326 | + "cpu": [ | |
327 | + "arm64" | |
328 | + ], | |
329 | + "dev": true, | |
330 | + "license": "MIT", | |
331 | + "optional": true, | |
332 | + "os": [ | |
333 | + "netbsd" | |
334 | + ], | |
335 | + "engines": { | |
336 | + "node": ">=18" | |
337 | + } | |
338 | + }, | |
339 | + "node_modules/@esbuild/netbsd-x64": { | |
340 | + "version": "0.27.2", | |
341 | + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", | |
342 | + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", | |
343 | + "cpu": [ | |
344 | + "x64" | |
345 | + ], | |
346 | + "dev": true, | |
347 | + "license": "MIT", | |
348 | + "optional": true, | |
349 | + "os": [ | |
350 | + "netbsd" | |
351 | + ], | |
352 | + "engines": { | |
353 | + "node": ">=18" | |
354 | + } | |
355 | + }, | |
356 | + "node_modules/@esbuild/openbsd-arm64": { | |
357 | + "version": "0.27.2", | |
358 | + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", | |
359 | + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", | |
360 | + "cpu": [ | |
361 | + "arm64" | |
362 | + ], | |
363 | + "dev": true, | |
364 | + "license": "MIT", | |
365 | + "optional": true, | |
366 | + "os": [ | |
367 | + "openbsd" | |
368 | + ], | |
369 | + "engines": { | |
370 | + "node": ">=18" | |
371 | + } | |
372 | + }, | |
373 | + "node_modules/@esbuild/openbsd-x64": { | |
374 | + "version": "0.27.2", | |
375 | + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", | |
376 | + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", | |
377 | + "cpu": [ | |
378 | + "x64" | |
379 | + ], | |
380 | + "dev": true, | |
381 | + "license": "MIT", | |
382 | + "optional": true, | |
383 | + "os": [ | |
384 | + "openbsd" | |
385 | + ], | |
386 | + "engines": { | |
387 | + "node": ">=18" | |
388 | + } | |
389 | + }, | |
390 | + "node_modules/@esbuild/openharmony-arm64": { | |
391 | + "version": "0.27.2", | |
392 | + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", | |
393 | + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", | |
394 | + "cpu": [ | |
395 | + "arm64" | |
396 | + ], | |
397 | + "dev": true, | |
398 | + "license": "MIT", | |
399 | + "optional": true, | |
400 | + "os": [ | |
401 | + "openharmony" | |
402 | + ], | |
403 | + "engines": { | |
404 | + "node": ">=18" | |
405 | + } | |
406 | + }, | |
407 | + "node_modules/@esbuild/sunos-x64": { | |
408 | + "version": "0.27.2", | |
409 | + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", | |
410 | + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", | |
411 | + "cpu": [ | |
412 | + "x64" | |
413 | + ], | |
414 | + "dev": true, | |
415 | + "license": "MIT", | |
416 | + "optional": true, | |
417 | + "os": [ | |
418 | + "sunos" | |
419 | + ], | |
420 | + "engines": { | |
421 | + "node": ">=18" | |
422 | + } | |
423 | + }, | |
424 | + "node_modules/@esbuild/win32-arm64": { | |
425 | + "version": "0.27.2", | |
426 | + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", | |
427 | + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", | |
428 | + "cpu": [ | |
429 | + "arm64" | |
430 | + ], | |
431 | + "dev": true, | |
432 | + "license": "MIT", | |
433 | + "optional": true, | |
434 | + "os": [ | |
435 | + "win32" | |
436 | + ], | |
437 | + "engines": { | |
438 | + "node": ">=18" | |
439 | + } | |
440 | + }, | |
441 | + "node_modules/@esbuild/win32-ia32": { | |
442 | + "version": "0.27.2", | |
443 | + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", | |
444 | + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", | |
445 | + "cpu": [ | |
446 | + "ia32" | |
447 | + ], | |
448 | + "dev": true, | |
449 | + "license": "MIT", | |
450 | + "optional": true, | |
451 | + "os": [ | |
452 | + "win32" | |
453 | + ], | |
454 | + "engines": { | |
455 | + "node": ">=18" | |
456 | + } | |
457 | + }, | |
458 | + "node_modules/@esbuild/win32-x64": { | |
459 | + "version": "0.27.2", | |
460 | + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", | |
461 | + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", | |
462 | + "cpu": [ | |
463 | + "x64" | |
464 | + ], | |
465 | + "dev": true, | |
466 | + "license": "MIT", | |
467 | + "optional": true, | |
468 | + "os": [ | |
469 | + "win32" | |
470 | + ], | |
471 | + "engines": { | |
472 | + "node": ">=18" | |
473 | + } | |
474 | + }, | |
475 | + "node_modules/@inquirer/external-editor": { | |
476 | + "version": "1.0.3", | |
477 | + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", | |
478 | + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", | |
479 | + "license": "MIT", | |
480 | + "dependencies": { | |
481 | + "chardet": "^2.1.1", | |
482 | + "iconv-lite": "^0.7.0" | |
483 | + }, | |
484 | + "engines": { | |
485 | + "node": ">=18" | |
486 | + }, | |
487 | + "peerDependencies": { | |
488 | + "@types/node": ">=18" | |
489 | + }, | |
490 | + "peerDependenciesMeta": { | |
491 | + "@types/node": { | |
492 | + "optional": true | |
493 | + } | |
494 | + } | |
495 | + }, | |
496 | + "node_modules/@inquirer/figures": { | |
497 | + "version": "1.0.15", | |
498 | + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", | |
499 | + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", | |
500 | + "license": "MIT", | |
501 | + "engines": { | |
502 | + "node": ">=18" | |
503 | + } | |
504 | + }, | |
505 | + "node_modules/@jridgewell/sourcemap-codec": { | |
506 | + "version": "1.5.5", | |
507 | + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", | |
508 | + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", | |
509 | + "dev": true, | |
510 | + "license": "MIT" | |
511 | + }, | |
512 | + "node_modules/@kwsites/file-exists": { | |
513 | + "version": "1.1.1", | |
514 | + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", | |
515 | + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", | |
516 | + "license": "MIT", | |
517 | + "dependencies": { | |
518 | + "debug": "^4.1.1" | |
519 | + } | |
520 | + }, | |
521 | + "node_modules/@kwsites/promise-deferred": { | |
522 | + "version": "1.1.1", | |
523 | + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", | |
524 | + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", | |
525 | + "license": "MIT" | |
526 | + }, | |
527 | + "node_modules/@rollup/rollup-android-arm-eabi": { | |
528 | + "version": "4.55.1", | |
529 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", | |
530 | + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", | |
531 | + "cpu": [ | |
532 | + "arm" | |
533 | + ], | |
534 | + "dev": true, | |
535 | + "license": "MIT", | |
536 | + "optional": true, | |
537 | + "os": [ | |
538 | + "android" | |
539 | + ] | |
540 | + }, | |
541 | + "node_modules/@rollup/rollup-android-arm64": { | |
542 | + "version": "4.55.1", | |
543 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", | |
544 | + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", | |
545 | + "cpu": [ | |
546 | + "arm64" | |
547 | + ], | |
548 | + "dev": true, | |
549 | + "license": "MIT", | |
550 | + "optional": true, | |
551 | + "os": [ | |
552 | + "android" | |
553 | + ] | |
554 | + }, | |
555 | + "node_modules/@rollup/rollup-darwin-arm64": { | |
556 | + "version": "4.55.1", | |
557 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", | |
558 | + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", | |
559 | + "cpu": [ | |
560 | + "arm64" | |
561 | + ], | |
562 | + "dev": true, | |
563 | + "license": "MIT", | |
564 | + "optional": true, | |
565 | + "os": [ | |
566 | + "darwin" | |
567 | + ] | |
568 | + }, | |
569 | + "node_modules/@rollup/rollup-darwin-x64": { | |
570 | + "version": "4.55.1", | |
571 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", | |
572 | + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", | |
573 | + "cpu": [ | |
574 | + "x64" | |
575 | + ], | |
576 | + "dev": true, | |
577 | + "license": "MIT", | |
578 | + "optional": true, | |
579 | + "os": [ | |
580 | + "darwin" | |
581 | + ] | |
582 | + }, | |
583 | + "node_modules/@rollup/rollup-freebsd-arm64": { | |
584 | + "version": "4.55.1", | |
585 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", | |
586 | + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", | |
587 | + "cpu": [ | |
588 | + "arm64" | |
589 | + ], | |
590 | + "dev": true, | |
591 | + "license": "MIT", | |
592 | + "optional": true, | |
593 | + "os": [ | |
594 | + "freebsd" | |
595 | + ] | |
596 | + }, | |
597 | + "node_modules/@rollup/rollup-freebsd-x64": { | |
598 | + "version": "4.55.1", | |
599 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", | |
600 | + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", | |
601 | + "cpu": [ | |
602 | + "x64" | |
603 | + ], | |
604 | + "dev": true, | |
605 | + "license": "MIT", | |
606 | + "optional": true, | |
607 | + "os": [ | |
608 | + "freebsd" | |
609 | + ] | |
610 | + }, | |
611 | + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { | |
612 | + "version": "4.55.1", | |
613 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", | |
614 | + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", | |
615 | + "cpu": [ | |
616 | + "arm" | |
617 | + ], | |
618 | + "dev": true, | |
619 | + "license": "MIT", | |
620 | + "optional": true, | |
621 | + "os": [ | |
622 | + "linux" | |
623 | + ] | |
624 | + }, | |
625 | + "node_modules/@rollup/rollup-linux-arm-musleabihf": { | |
626 | + "version": "4.55.1", | |
627 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", | |
628 | + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", | |
629 | + "cpu": [ | |
630 | + "arm" | |
631 | + ], | |
632 | + "dev": true, | |
633 | + "license": "MIT", | |
634 | + "optional": true, | |
635 | + "os": [ | |
636 | + "linux" | |
637 | + ] | |
638 | + }, | |
639 | + "node_modules/@rollup/rollup-linux-arm64-gnu": { | |
640 | + "version": "4.55.1", | |
641 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", | |
642 | + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", | |
643 | + "cpu": [ | |
644 | + "arm64" | |
645 | + ], | |
646 | + "dev": true, | |
647 | + "license": "MIT", | |
648 | + "optional": true, | |
649 | + "os": [ | |
650 | + "linux" | |
651 | + ] | |
652 | + }, | |
653 | + "node_modules/@rollup/rollup-linux-arm64-musl": { | |
654 | + "version": "4.55.1", | |
655 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", | |
656 | + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", | |
657 | + "cpu": [ | |
658 | + "arm64" | |
659 | + ], | |
660 | + "dev": true, | |
661 | + "license": "MIT", | |
662 | + "optional": true, | |
663 | + "os": [ | |
664 | + "linux" | |
665 | + ] | |
666 | + }, | |
667 | + "node_modules/@rollup/rollup-linux-loong64-gnu": { | |
668 | + "version": "4.55.1", | |
669 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", | |
670 | + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", | |
671 | + "cpu": [ | |
672 | + "loong64" | |
673 | + ], | |
674 | + "dev": true, | |
675 | + "license": "MIT", | |
676 | + "optional": true, | |
677 | + "os": [ | |
678 | + "linux" | |
679 | + ] | |
680 | + }, | |
681 | + "node_modules/@rollup/rollup-linux-loong64-musl": { | |
682 | + "version": "4.55.1", | |
683 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", | |
684 | + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", | |
685 | + "cpu": [ | |
686 | + "loong64" | |
687 | + ], | |
688 | + "dev": true, | |
689 | + "license": "MIT", | |
690 | + "optional": true, | |
691 | + "os": [ | |
692 | + "linux" | |
693 | + ] | |
694 | + }, | |
695 | + "node_modules/@rollup/rollup-linux-ppc64-gnu": { | |
696 | + "version": "4.55.1", | |
697 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", | |
698 | + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", | |
699 | + "cpu": [ | |
700 | + "ppc64" | |
701 | + ], | |
702 | + "dev": true, | |
703 | + "license": "MIT", | |
704 | + "optional": true, | |
705 | + "os": [ | |
706 | + "linux" | |
707 | + ] | |
708 | + }, | |
709 | + "node_modules/@rollup/rollup-linux-ppc64-musl": { | |
710 | + "version": "4.55.1", | |
711 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", | |
712 | + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", | |
713 | + "cpu": [ | |
714 | + "ppc64" | |
715 | + ], | |
716 | + "dev": true, | |
717 | + "license": "MIT", | |
718 | + "optional": true, | |
719 | + "os": [ | |
720 | + "linux" | |
721 | + ] | |
722 | + }, | |
723 | + "node_modules/@rollup/rollup-linux-riscv64-gnu": { | |
724 | + "version": "4.55.1", | |
725 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", | |
726 | + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", | |
727 | + "cpu": [ | |
728 | + "riscv64" | |
729 | + ], | |
730 | + "dev": true, | |
731 | + "license": "MIT", | |
732 | + "optional": true, | |
733 | + "os": [ | |
734 | + "linux" | |
735 | + ] | |
736 | + }, | |
737 | + "node_modules/@rollup/rollup-linux-riscv64-musl": { | |
738 | + "version": "4.55.1", | |
739 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", | |
740 | + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", | |
741 | + "cpu": [ | |
742 | + "riscv64" | |
743 | + ], | |
744 | + "dev": true, | |
745 | + "license": "MIT", | |
746 | + "optional": true, | |
747 | + "os": [ | |
748 | + "linux" | |
749 | + ] | |
750 | + }, | |
751 | + "node_modules/@rollup/rollup-linux-s390x-gnu": { | |
752 | + "version": "4.55.1", | |
753 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", | |
754 | + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", | |
755 | + "cpu": [ | |
756 | + "s390x" | |
757 | + ], | |
758 | + "dev": true, | |
759 | + "license": "MIT", | |
760 | + "optional": true, | |
761 | + "os": [ | |
762 | + "linux" | |
763 | + ] | |
764 | + }, | |
765 | + "node_modules/@rollup/rollup-linux-x64-gnu": { | |
766 | + "version": "4.55.1", | |
767 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", | |
768 | + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", | |
769 | + "cpu": [ | |
770 | + "x64" | |
771 | + ], | |
772 | + "dev": true, | |
773 | + "license": "MIT", | |
774 | + "optional": true, | |
775 | + "os": [ | |
776 | + "linux" | |
777 | + ] | |
778 | + }, | |
779 | + "node_modules/@rollup/rollup-linux-x64-musl": { | |
780 | + "version": "4.55.1", | |
781 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", | |
782 | + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", | |
783 | + "cpu": [ | |
784 | + "x64" | |
785 | + ], | |
786 | + "dev": true, | |
787 | + "license": "MIT", | |
788 | + "optional": true, | |
789 | + "os": [ | |
790 | + "linux" | |
791 | + ] | |
792 | + }, | |
793 | + "node_modules/@rollup/rollup-openbsd-x64": { | |
794 | + "version": "4.55.1", | |
795 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", | |
796 | + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", | |
797 | + "cpu": [ | |
798 | + "x64" | |
799 | + ], | |
800 | + "dev": true, | |
801 | + "license": "MIT", | |
802 | + "optional": true, | |
803 | + "os": [ | |
804 | + "openbsd" | |
805 | + ] | |
806 | + }, | |
807 | + "node_modules/@rollup/rollup-openharmony-arm64": { | |
808 | + "version": "4.55.1", | |
809 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", | |
810 | + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", | |
811 | + "cpu": [ | |
812 | + "arm64" | |
813 | + ], | |
814 | + "dev": true, | |
815 | + "license": "MIT", | |
816 | + "optional": true, | |
817 | + "os": [ | |
818 | + "openharmony" | |
819 | + ] | |
820 | + }, | |
821 | + "node_modules/@rollup/rollup-win32-arm64-msvc": { | |
822 | + "version": "4.55.1", | |
823 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", | |
824 | + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", | |
825 | + "cpu": [ | |
826 | + "arm64" | |
827 | + ], | |
828 | + "dev": true, | |
829 | + "license": "MIT", | |
830 | + "optional": true, | |
831 | + "os": [ | |
832 | + "win32" | |
833 | + ] | |
834 | + }, | |
835 | + "node_modules/@rollup/rollup-win32-ia32-msvc": { | |
836 | + "version": "4.55.1", | |
837 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", | |
838 | + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", | |
839 | + "cpu": [ | |
840 | + "ia32" | |
841 | + ], | |
842 | + "dev": true, | |
843 | + "license": "MIT", | |
844 | + "optional": true, | |
845 | + "os": [ | |
846 | + "win32" | |
847 | + ] | |
848 | + }, | |
849 | + "node_modules/@rollup/rollup-win32-x64-gnu": { | |
850 | + "version": "4.55.1", | |
851 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", | |
852 | + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", | |
853 | + "cpu": [ | |
854 | + "x64" | |
855 | + ], | |
856 | + "dev": true, | |
857 | + "license": "MIT", | |
858 | + "optional": true, | |
859 | + "os": [ | |
860 | + "win32" | |
861 | + ] | |
862 | + }, | |
863 | + "node_modules/@rollup/rollup-win32-x64-msvc": { | |
864 | + "version": "4.55.1", | |
865 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", | |
866 | + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", | |
867 | + "cpu": [ | |
868 | + "x64" | |
869 | + ], | |
870 | + "dev": true, | |
871 | + "license": "MIT", | |
872 | + "optional": true, | |
873 | + "os": [ | |
874 | + "win32" | |
875 | + ] | |
876 | + }, | |
877 | + "node_modules/@standard-schema/spec": { | |
878 | + "version": "1.1.0", | |
879 | + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", | |
880 | + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", | |
881 | + "dev": true, | |
882 | + "license": "MIT" | |
883 | + }, | |
884 | + "node_modules/@types/chai": { | |
885 | + "version": "5.2.3", | |
886 | + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", | |
887 | + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", | |
888 | + "dev": true, | |
889 | + "license": "MIT", | |
890 | + "dependencies": { | |
891 | + "@types/deep-eql": "*", | |
892 | + "assertion-error": "^2.0.1" | |
893 | + } | |
894 | + }, | |
895 | + "node_modules/@types/deep-eql": { | |
896 | + "version": "4.0.2", | |
897 | + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", | |
898 | + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", | |
899 | + "dev": true, | |
900 | + "license": "MIT" | |
901 | + }, | |
902 | + "node_modules/@types/estree": { | |
903 | + "version": "1.0.8", | |
904 | + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", | |
905 | + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", | |
906 | + "dev": true, | |
907 | + "license": "MIT" | |
908 | + }, | |
909 | + "node_modules/@types/inquirer": { | |
910 | + "version": "9.0.9", | |
911 | + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.9.tgz", | |
912 | + "integrity": "sha512-/mWx5136gts2Z2e5izdoRCo46lPp5TMs9R15GTSsgg/XnZyxDWVqoVU3R9lWnccKpqwsJLvRoxbCjoJtZB7DSw==", | |
913 | + "dev": true, | |
914 | + "license": "MIT", | |
915 | + "dependencies": { | |
916 | + "@types/through": "*", | |
917 | + "rxjs": "^7.2.0" | |
918 | + } | |
919 | + }, | |
920 | + "node_modules/@types/node": { | |
921 | + "version": "20.19.30", | |
922 | + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz", | |
923 | + "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==", | |
924 | + "devOptional": true, | |
925 | + "license": "MIT", | |
926 | + "peer": true, | |
927 | + "dependencies": { | |
928 | + "undici-types": "~6.21.0" | |
929 | + } | |
930 | + }, | |
931 | + "node_modules/@types/through": { | |
932 | + "version": "0.0.33", | |
933 | + "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz", | |
934 | + "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==", | |
935 | + "dev": true, | |
936 | + "license": "MIT", | |
937 | + "dependencies": { | |
938 | + "@types/node": "*" | |
939 | + } | |
940 | + }, | |
941 | + "node_modules/@vitest/expect": { | |
942 | + "version": "4.0.17", | |
943 | + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.17.tgz", | |
944 | + "integrity": "sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==", | |
945 | + "dev": true, | |
946 | + "license": "MIT", | |
947 | + "dependencies": { | |
948 | + "@standard-schema/spec": "^1.0.0", | |
949 | + "@types/chai": "^5.2.2", | |
950 | + "@vitest/spy": "4.0.17", | |
951 | + "@vitest/utils": "4.0.17", | |
952 | + "chai": "^6.2.1", | |
953 | + "tinyrainbow": "^3.0.3" | |
954 | + }, | |
955 | + "funding": { | |
956 | + "url": "https://opencollective.com/vitest" | |
957 | + } | |
958 | + }, | |
959 | + "node_modules/@vitest/mocker": { | |
960 | + "version": "4.0.17", | |
961 | + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.17.tgz", | |
962 | + "integrity": "sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==", | |
963 | + "dev": true, | |
964 | + "license": "MIT", | |
965 | + "dependencies": { | |
966 | + "@vitest/spy": "4.0.17", | |
967 | + "estree-walker": "^3.0.3", | |
968 | + "magic-string": "^0.30.21" | |
969 | + }, | |
970 | + "funding": { | |
971 | + "url": "https://opencollective.com/vitest" | |
972 | + }, | |
973 | + "peerDependencies": { | |
974 | + "msw": "^2.4.9", | |
975 | + "vite": "^6.0.0 || ^7.0.0-0" | |
976 | + }, | |
977 | + "peerDependenciesMeta": { | |
978 | + "msw": { | |
979 | + "optional": true | |
980 | + }, | |
981 | + "vite": { | |
982 | + "optional": true | |
983 | + } | |
984 | + } | |
985 | + }, | |
986 | + "node_modules/@vitest/pretty-format": { | |
987 | + "version": "4.0.17", | |
988 | + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.17.tgz", | |
989 | + "integrity": "sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==", | |
990 | + "dev": true, | |
991 | + "license": "MIT", | |
992 | + "dependencies": { | |
993 | + "tinyrainbow": "^3.0.3" | |
994 | + }, | |
995 | + "funding": { | |
996 | + "url": "https://opencollective.com/vitest" | |
997 | + } | |
998 | + }, | |
999 | + "node_modules/@vitest/runner": { | |
1000 | + "version": "4.0.17", | |
1001 | + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.17.tgz", | |
1002 | + "integrity": "sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==", | |
1003 | + "dev": true, | |
1004 | + "license": "MIT", | |
1005 | + "dependencies": { | |
1006 | + "@vitest/utils": "4.0.17", | |
1007 | + "pathe": "^2.0.3" | |
1008 | + }, | |
1009 | + "funding": { | |
1010 | + "url": "https://opencollective.com/vitest" | |
1011 | + } | |
1012 | + }, | |
1013 | + "node_modules/@vitest/snapshot": { | |
1014 | + "version": "4.0.17", | |
1015 | + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.17.tgz", | |
1016 | + "integrity": "sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==", | |
1017 | + "dev": true, | |
1018 | + "license": "MIT", | |
1019 | + "dependencies": { | |
1020 | + "@vitest/pretty-format": "4.0.17", | |
1021 | + "magic-string": "^0.30.21", | |
1022 | + "pathe": "^2.0.3" | |
1023 | + }, | |
1024 | + "funding": { | |
1025 | + "url": "https://opencollective.com/vitest" | |
1026 | + } | |
1027 | + }, | |
1028 | + "node_modules/@vitest/spy": { | |
1029 | + "version": "4.0.17", | |
1030 | + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.17.tgz", | |
1031 | + "integrity": "sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==", | |
1032 | + "dev": true, | |
1033 | + "license": "MIT", | |
1034 | + "funding": { | |
1035 | + "url": "https://opencollective.com/vitest" | |
1036 | + } | |
1037 | + }, | |
1038 | + "node_modules/@vitest/utils": { | |
1039 | + "version": "4.0.17", | |
1040 | + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.17.tgz", | |
1041 | + "integrity": "sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==", | |
1042 | + "dev": true, | |
1043 | + "license": "MIT", | |
1044 | + "dependencies": { | |
1045 | + "@vitest/pretty-format": "4.0.17", | |
1046 | + "tinyrainbow": "^3.0.3" | |
1047 | + }, | |
1048 | + "funding": { | |
1049 | + "url": "https://opencollective.com/vitest" | |
1050 | + } | |
1051 | + }, | |
1052 | + "node_modules/ajv": { | |
1053 | + "version": "8.17.1", | |
1054 | + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", | |
1055 | + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", | |
1056 | + "license": "MIT", | |
1057 | + "dependencies": { | |
1058 | + "fast-deep-equal": "^3.1.3", | |
1059 | + "fast-uri": "^3.0.1", | |
1060 | + "json-schema-traverse": "^1.0.0", | |
1061 | + "require-from-string": "^2.0.2" | |
1062 | + }, | |
1063 | + "funding": { | |
1064 | + "type": "github", | |
1065 | + "url": "https://github.com/sponsors/epoberezkin" | |
1066 | + } | |
1067 | + }, | |
1068 | + "node_modules/ajv-formats": { | |
1069 | + "version": "2.1.1", | |
1070 | + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", | |
1071 | + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", | |
1072 | + "license": "MIT", | |
1073 | + "dependencies": { | |
1074 | + "ajv": "^8.0.0" | |
1075 | + }, | |
1076 | + "peerDependencies": { | |
1077 | + "ajv": "^8.0.0" | |
1078 | + }, | |
1079 | + "peerDependenciesMeta": { | |
1080 | + "ajv": { | |
1081 | + "optional": true | |
1082 | + } | |
1083 | + } | |
1084 | + }, | |
1085 | + "node_modules/ansi-escapes": { | |
1086 | + "version": "4.3.2", | |
1087 | + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", | |
1088 | + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", | |
1089 | + "license": "MIT", | |
1090 | + "dependencies": { | |
1091 | + "type-fest": "^0.21.3" | |
1092 | + }, | |
1093 | + "engines": { | |
1094 | + "node": ">=8" | |
1095 | + }, | |
1096 | + "funding": { | |
1097 | + "url": "https://github.com/sponsors/sindresorhus" | |
1098 | + } | |
1099 | + }, | |
1100 | + "node_modules/ansi-escapes/node_modules/type-fest": { | |
1101 | + "version": "0.21.3", | |
1102 | + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", | |
1103 | + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", | |
1104 | + "license": "(MIT OR CC0-1.0)", | |
1105 | + "engines": { | |
1106 | + "node": ">=10" | |
1107 | + }, | |
1108 | + "funding": { | |
1109 | + "url": "https://github.com/sponsors/sindresorhus" | |
1110 | + } | |
1111 | + }, | |
1112 | + "node_modules/ansi-regex": { | |
1113 | + "version": "5.0.1", | |
1114 | + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", | |
1115 | + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", | |
1116 | + "license": "MIT", | |
1117 | + "engines": { | |
1118 | + "node": ">=8" | |
1119 | + } | |
1120 | + }, | |
1121 | + "node_modules/ansi-styles": { | |
1122 | + "version": "4.3.0", | |
1123 | + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", | |
1124 | + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", | |
1125 | + "license": "MIT", | |
1126 | + "dependencies": { | |
1127 | + "color-convert": "^2.0.1" | |
1128 | + }, | |
1129 | + "engines": { | |
1130 | + "node": ">=8" | |
1131 | + }, | |
1132 | + "funding": { | |
1133 | + "url": "https://github.com/chalk/ansi-styles?sponsor=1" | |
1134 | + } | |
1135 | + }, | |
1136 | + "node_modules/assertion-error": { | |
1137 | + "version": "2.0.1", | |
1138 | + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", | |
1139 | + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", | |
1140 | + "dev": true, | |
1141 | + "license": "MIT", | |
1142 | + "engines": { | |
1143 | + "node": ">=12" | |
1144 | + } | |
1145 | + }, | |
1146 | + "node_modules/atomically": { | |
1147 | + "version": "2.1.0", | |
1148 | + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.0.tgz", | |
1149 | + "integrity": "sha512-+gDffFXRW6sl/HCwbta7zK4uNqbPjv4YJEAdz7Vu+FLQHe77eZ4bvbJGi4hE0QPeJlMYMA3piXEr1UL3dAwx7Q==", | |
1150 | + "license": "MIT", | |
1151 | + "dependencies": { | |
1152 | + "stubborn-fs": "^2.0.0", | |
1153 | + "when-exit": "^2.1.4" | |
1154 | + } | |
1155 | + }, | |
1156 | + "node_modules/base64-js": { | |
1157 | + "version": "1.5.1", | |
1158 | + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", | |
1159 | + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", | |
1160 | + "funding": [ | |
1161 | + { | |
1162 | + "type": "github", | |
1163 | + "url": "https://github.com/sponsors/feross" | |
1164 | + }, | |
1165 | + { | |
1166 | + "type": "patreon", | |
1167 | + "url": "https://www.patreon.com/feross" | |
1168 | + }, | |
1169 | + { | |
1170 | + "type": "consulting", | |
1171 | + "url": "https://feross.org/support" | |
1172 | + } | |
1173 | + ], | |
1174 | + "license": "MIT" | |
1175 | + }, | |
1176 | + "node_modules/bl": { | |
1177 | + "version": "4.1.0", | |
1178 | + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", | |
1179 | + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", | |
1180 | + "license": "MIT", | |
1181 | + "dependencies": { | |
1182 | + "buffer": "^5.5.0", | |
1183 | + "inherits": "^2.0.4", | |
1184 | + "readable-stream": "^3.4.0" | |
1185 | + } | |
1186 | + }, | |
1187 | + "node_modules/buffer": { | |
1188 | + "version": "5.7.1", | |
1189 | + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", | |
1190 | + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", | |
1191 | + "funding": [ | |
1192 | + { | |
1193 | + "type": "github", | |
1194 | + "url": "https://github.com/sponsors/feross" | |
1195 | + }, | |
1196 | + { | |
1197 | + "type": "patreon", | |
1198 | + "url": "https://www.patreon.com/feross" | |
1199 | + }, | |
1200 | + { | |
1201 | + "type": "consulting", | |
1202 | + "url": "https://feross.org/support" | |
1203 | + } | |
1204 | + ], | |
1205 | + "license": "MIT", | |
1206 | + "dependencies": { | |
1207 | + "base64-js": "^1.3.1", | |
1208 | + "ieee754": "^1.1.13" | |
1209 | + } | |
1210 | + }, | |
1211 | + "node_modules/chai": { | |
1212 | + "version": "6.2.2", | |
1213 | + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", | |
1214 | + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", | |
1215 | + "dev": true, | |
1216 | + "license": "MIT", | |
1217 | + "engines": { | |
1218 | + "node": ">=18" | |
1219 | + } | |
1220 | + }, | |
1221 | + "node_modules/chalk": { | |
1222 | + "version": "5.6.2", | |
1223 | + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", | |
1224 | + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", | |
1225 | + "license": "MIT", | |
1226 | + "engines": { | |
1227 | + "node": "^12.17.0 || ^14.13 || >=16.0.0" | |
1228 | + }, | |
1229 | + "funding": { | |
1230 | + "url": "https://github.com/chalk/chalk?sponsor=1" | |
1231 | + } | |
1232 | + }, | |
1233 | + "node_modules/chardet": { | |
1234 | + "version": "2.1.1", | |
1235 | + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", | |
1236 | + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", | |
1237 | + "license": "MIT" | |
1238 | + }, | |
1239 | + "node_modules/cli-cursor": { | |
1240 | + "version": "5.0.0", | |
1241 | + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", | |
1242 | + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", | |
1243 | + "license": "MIT", | |
1244 | + "dependencies": { | |
1245 | + "restore-cursor": "^5.0.0" | |
1246 | + }, | |
1247 | + "engines": { | |
1248 | + "node": ">=18" | |
1249 | + }, | |
1250 | + "funding": { | |
1251 | + "url": "https://github.com/sponsors/sindresorhus" | |
1252 | + } | |
1253 | + }, | |
1254 | + "node_modules/cli-spinners": { | |
1255 | + "version": "2.9.2", | |
1256 | + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", | |
1257 | + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", | |
1258 | + "license": "MIT", | |
1259 | + "engines": { | |
1260 | + "node": ">=6" | |
1261 | + }, | |
1262 | + "funding": { | |
1263 | + "url": "https://github.com/sponsors/sindresorhus" | |
1264 | + } | |
1265 | + }, | |
1266 | + "node_modules/cli-width": { | |
1267 | + "version": "4.1.0", | |
1268 | + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", | |
1269 | + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", | |
1270 | + "license": "ISC", | |
1271 | + "engines": { | |
1272 | + "node": ">= 12" | |
1273 | + } | |
1274 | + }, | |
1275 | + "node_modules/clone": { | |
1276 | + "version": "1.0.4", | |
1277 | + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", | |
1278 | + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", | |
1279 | + "license": "MIT", | |
1280 | + "engines": { | |
1281 | + "node": ">=0.8" | |
1282 | + } | |
1283 | + }, | |
1284 | + "node_modules/color-convert": { | |
1285 | + "version": "2.0.1", | |
1286 | + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", | |
1287 | + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", | |
1288 | + "license": "MIT", | |
1289 | + "dependencies": { | |
1290 | + "color-name": "~1.1.4" | |
1291 | + }, | |
1292 | + "engines": { | |
1293 | + "node": ">=7.0.0" | |
1294 | + } | |
1295 | + }, | |
1296 | + "node_modules/color-name": { | |
1297 | + "version": "1.1.4", | |
1298 | + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | |
1299 | + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", | |
1300 | + "license": "MIT" | |
1301 | + }, | |
1302 | + "node_modules/commander": { | |
1303 | + "version": "12.1.0", | |
1304 | + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", | |
1305 | + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", | |
1306 | + "license": "MIT", | |
1307 | + "engines": { | |
1308 | + "node": ">=18" | |
1309 | + } | |
1310 | + }, | |
1311 | + "node_modules/conf": { | |
1312 | + "version": "12.0.0", | |
1313 | + "resolved": "https://registry.npmjs.org/conf/-/conf-12.0.0.tgz", | |
1314 | + "integrity": "sha512-fIWyWUXrJ45cHCIQX+Ck1hrZDIf/9DR0P0Zewn3uNht28hbt5OfGUq8rRWsxi96pZWPyBEd0eY9ama01JTaknA==", | |
1315 | + "license": "MIT", | |
1316 | + "dependencies": { | |
1317 | + "ajv": "^8.12.0", | |
1318 | + "ajv-formats": "^2.1.1", | |
1319 | + "atomically": "^2.0.2", | |
1320 | + "debounce-fn": "^5.1.2", | |
1321 | + "dot-prop": "^8.0.2", | |
1322 | + "env-paths": "^3.0.0", | |
1323 | + "json-schema-typed": "^8.0.1", | |
1324 | + "semver": "^7.5.4", | |
1325 | + "uint8array-extras": "^0.3.0" | |
1326 | + }, | |
1327 | + "engines": { | |
1328 | + "node": ">=18" | |
1329 | + }, | |
1330 | + "funding": { | |
1331 | + "url": "https://github.com/sponsors/sindresorhus" | |
1332 | + } | |
1333 | + }, | |
1334 | + "node_modules/debounce-fn": { | |
1335 | + "version": "5.1.2", | |
1336 | + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-5.1.2.tgz", | |
1337 | + "integrity": "sha512-Sr4SdOZ4vw6eQDvPYNxHogvrxmCIld/VenC5JbNrFwMiwd7lY/Z18ZFfo+EWNG4DD9nFlAujWAo/wGuOPHmy5A==", | |
1338 | + "license": "MIT", | |
1339 | + "dependencies": { | |
1340 | + "mimic-fn": "^4.0.0" | |
1341 | + }, | |
1342 | + "engines": { | |
1343 | + "node": ">=12" | |
1344 | + }, | |
1345 | + "funding": { | |
1346 | + "url": "https://github.com/sponsors/sindresorhus" | |
1347 | + } | |
1348 | + }, | |
1349 | + "node_modules/debug": { | |
1350 | + "version": "4.4.3", | |
1351 | + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", | |
1352 | + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", | |
1353 | + "license": "MIT", | |
1354 | + "dependencies": { | |
1355 | + "ms": "^2.1.3" | |
1356 | + }, | |
1357 | + "engines": { | |
1358 | + "node": ">=6.0" | |
1359 | + }, | |
1360 | + "peerDependenciesMeta": { | |
1361 | + "supports-color": { | |
1362 | + "optional": true | |
1363 | + } | |
1364 | + } | |
1365 | + }, | |
1366 | + "node_modules/defaults": { | |
1367 | + "version": "1.0.4", | |
1368 | + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", | |
1369 | + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", | |
1370 | + "license": "MIT", | |
1371 | + "dependencies": { | |
1372 | + "clone": "^1.0.2" | |
1373 | + }, | |
1374 | + "funding": { | |
1375 | + "url": "https://github.com/sponsors/sindresorhus" | |
1376 | + } | |
1377 | + }, | |
1378 | + "node_modules/dot-prop": { | |
1379 | + "version": "8.0.2", | |
1380 | + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-8.0.2.tgz", | |
1381 | + "integrity": "sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==", | |
1382 | + "license": "MIT", | |
1383 | + "dependencies": { | |
1384 | + "type-fest": "^3.8.0" | |
1385 | + }, | |
1386 | + "engines": { | |
1387 | + "node": ">=16" | |
1388 | + }, | |
1389 | + "funding": { | |
1390 | + "url": "https://github.com/sponsors/sindresorhus" | |
1391 | + } | |
1392 | + }, | |
1393 | + "node_modules/emoji-regex": { | |
1394 | + "version": "8.0.0", | |
1395 | + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", | |
1396 | + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", | |
1397 | + "license": "MIT" | |
1398 | + }, | |
1399 | + "node_modules/env-paths": { | |
1400 | + "version": "3.0.0", | |
1401 | + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", | |
1402 | + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", | |
1403 | + "license": "MIT", | |
1404 | + "engines": { | |
1405 | + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" | |
1406 | + }, | |
1407 | + "funding": { | |
1408 | + "url": "https://github.com/sponsors/sindresorhus" | |
1409 | + } | |
1410 | + }, | |
1411 | + "node_modules/es-module-lexer": { | |
1412 | + "version": "1.7.0", | |
1413 | + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", | |
1414 | + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", | |
1415 | + "dev": true, | |
1416 | + "license": "MIT" | |
1417 | + }, | |
1418 | + "node_modules/esbuild": { | |
1419 | + "version": "0.27.2", | |
1420 | + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", | |
1421 | + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", | |
1422 | + "dev": true, | |
1423 | + "hasInstallScript": true, | |
1424 | + "license": "MIT", | |
1425 | + "bin": { | |
1426 | + "esbuild": "bin/esbuild" | |
1427 | + }, | |
1428 | + "engines": { | |
1429 | + "node": ">=18" | |
1430 | + }, | |
1431 | + "optionalDependencies": { | |
1432 | + "@esbuild/aix-ppc64": "0.27.2", | |
1433 | + "@esbuild/android-arm": "0.27.2", | |
1434 | + "@esbuild/android-arm64": "0.27.2", | |
1435 | + "@esbuild/android-x64": "0.27.2", | |
1436 | + "@esbuild/darwin-arm64": "0.27.2", | |
1437 | + "@esbuild/darwin-x64": "0.27.2", | |
1438 | + "@esbuild/freebsd-arm64": "0.27.2", | |
1439 | + "@esbuild/freebsd-x64": "0.27.2", | |
1440 | + "@esbuild/linux-arm": "0.27.2", | |
1441 | + "@esbuild/linux-arm64": "0.27.2", | |
1442 | + "@esbuild/linux-ia32": "0.27.2", | |
1443 | + "@esbuild/linux-loong64": "0.27.2", | |
1444 | + "@esbuild/linux-mips64el": "0.27.2", | |
1445 | + "@esbuild/linux-ppc64": "0.27.2", | |
1446 | + "@esbuild/linux-riscv64": "0.27.2", | |
1447 | + "@esbuild/linux-s390x": "0.27.2", | |
1448 | + "@esbuild/linux-x64": "0.27.2", | |
1449 | + "@esbuild/netbsd-arm64": "0.27.2", | |
1450 | + "@esbuild/netbsd-x64": "0.27.2", | |
1451 | + "@esbuild/openbsd-arm64": "0.27.2", | |
1452 | + "@esbuild/openbsd-x64": "0.27.2", | |
1453 | + "@esbuild/openharmony-arm64": "0.27.2", | |
1454 | + "@esbuild/sunos-x64": "0.27.2", | |
1455 | + "@esbuild/win32-arm64": "0.27.2", | |
1456 | + "@esbuild/win32-ia32": "0.27.2", | |
1457 | + "@esbuild/win32-x64": "0.27.2" | |
1458 | + } | |
1459 | + }, | |
1460 | + "node_modules/estree-walker": { | |
1461 | + "version": "3.0.3", | |
1462 | + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", | |
1463 | + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", | |
1464 | + "dev": true, | |
1465 | + "license": "MIT", | |
1466 | + "dependencies": { | |
1467 | + "@types/estree": "^1.0.0" | |
1468 | + } | |
1469 | + }, | |
1470 | + "node_modules/expect-type": { | |
1471 | + "version": "1.3.0", | |
1472 | + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", | |
1473 | + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", | |
1474 | + "dev": true, | |
1475 | + "license": "Apache-2.0", | |
1476 | + "engines": { | |
1477 | + "node": ">=12.0.0" | |
1478 | + } | |
1479 | + }, | |
1480 | + "node_modules/fast-deep-equal": { | |
1481 | + "version": "3.1.3", | |
1482 | + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", | |
1483 | + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", | |
1484 | + "license": "MIT" | |
1485 | + }, | |
1486 | + "node_modules/fast-uri": { | |
1487 | + "version": "3.1.0", | |
1488 | + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", | |
1489 | + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", | |
1490 | + "funding": [ | |
1491 | + { | |
1492 | + "type": "github", | |
1493 | + "url": "https://github.com/sponsors/fastify" | |
1494 | + }, | |
1495 | + { | |
1496 | + "type": "opencollective", | |
1497 | + "url": "https://opencollective.com/fastify" | |
1498 | + } | |
1499 | + ], | |
1500 | + "license": "BSD-3-Clause" | |
1501 | + }, | |
1502 | + "node_modules/fdir": { | |
1503 | + "version": "6.5.0", | |
1504 | + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", | |
1505 | + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", | |
1506 | + "dev": true, | |
1507 | + "license": "MIT", | |
1508 | + "engines": { | |
1509 | + "node": ">=12.0.0" | |
1510 | + }, | |
1511 | + "peerDependencies": { | |
1512 | + "picomatch": "^3 || ^4" | |
1513 | + }, | |
1514 | + "peerDependenciesMeta": { | |
1515 | + "picomatch": { | |
1516 | + "optional": true | |
1517 | + } | |
1518 | + } | |
1519 | + }, | |
1520 | + "node_modules/fsevents": { | |
1521 | + "version": "2.3.3", | |
1522 | + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", | |
1523 | + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", | |
1524 | + "dev": true, | |
1525 | + "hasInstallScript": true, | |
1526 | + "license": "MIT", | |
1527 | + "optional": true, | |
1528 | + "os": [ | |
1529 | + "darwin" | |
1530 | + ], | |
1531 | + "engines": { | |
1532 | + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" | |
1533 | + } | |
1534 | + }, | |
1535 | + "node_modules/get-east-asian-width": { | |
1536 | + "version": "1.4.0", | |
1537 | + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", | |
1538 | + "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", | |
1539 | + "license": "MIT", | |
1540 | + "engines": { | |
1541 | + "node": ">=18" | |
1542 | + }, | |
1543 | + "funding": { | |
1544 | + "url": "https://github.com/sponsors/sindresorhus" | |
1545 | + } | |
1546 | + }, | |
1547 | + "node_modules/get-tsconfig": { | |
1548 | + "version": "4.13.0", | |
1549 | + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", | |
1550 | + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", | |
1551 | + "dev": true, | |
1552 | + "license": "MIT", | |
1553 | + "dependencies": { | |
1554 | + "resolve-pkg-maps": "^1.0.0" | |
1555 | + }, | |
1556 | + "funding": { | |
1557 | + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" | |
1558 | + } | |
1559 | + }, | |
1560 | + "node_modules/has-flag": { | |
1561 | + "version": "4.0.0", | |
1562 | + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", | |
1563 | + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", | |
1564 | + "license": "MIT", | |
1565 | + "engines": { | |
1566 | + "node": ">=8" | |
1567 | + } | |
1568 | + }, | |
1569 | + "node_modules/iconv-lite": { | |
1570 | + "version": "0.7.2", | |
1571 | + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", | |
1572 | + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", | |
1573 | + "license": "MIT", | |
1574 | + "dependencies": { | |
1575 | + "safer-buffer": ">= 2.1.2 < 3.0.0" | |
1576 | + }, | |
1577 | + "engines": { | |
1578 | + "node": ">=0.10.0" | |
1579 | + }, | |
1580 | + "funding": { | |
1581 | + "type": "opencollective", | |
1582 | + "url": "https://opencollective.com/express" | |
1583 | + } | |
1584 | + }, | |
1585 | + "node_modules/ieee754": { | |
1586 | + "version": "1.2.1", | |
1587 | + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", | |
1588 | + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", | |
1589 | + "funding": [ | |
1590 | + { | |
1591 | + "type": "github", | |
1592 | + "url": "https://github.com/sponsors/feross" | |
1593 | + }, | |
1594 | + { | |
1595 | + "type": "patreon", | |
1596 | + "url": "https://www.patreon.com/feross" | |
1597 | + }, | |
1598 | + { | |
1599 | + "type": "consulting", | |
1600 | + "url": "https://feross.org/support" | |
1601 | + } | |
1602 | + ], | |
1603 | + "license": "BSD-3-Clause" | |
1604 | + }, | |
1605 | + "node_modules/inherits": { | |
1606 | + "version": "2.0.4", | |
1607 | + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | |
1608 | + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", | |
1609 | + "license": "ISC" | |
1610 | + }, | |
1611 | + "node_modules/inquirer": { | |
1612 | + "version": "9.3.8", | |
1613 | + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.8.tgz", | |
1614 | + "integrity": "sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==", | |
1615 | + "license": "MIT", | |
1616 | + "dependencies": { | |
1617 | + "@inquirer/external-editor": "^1.0.2", | |
1618 | + "@inquirer/figures": "^1.0.3", | |
1619 | + "ansi-escapes": "^4.3.2", | |
1620 | + "cli-width": "^4.1.0", | |
1621 | + "mute-stream": "1.0.0", | |
1622 | + "ora": "^5.4.1", | |
1623 | + "run-async": "^3.0.0", | |
1624 | + "rxjs": "^7.8.1", | |
1625 | + "string-width": "^4.2.3", | |
1626 | + "strip-ansi": "^6.0.1", | |
1627 | + "wrap-ansi": "^6.2.0", | |
1628 | + "yoctocolors-cjs": "^2.1.2" | |
1629 | + }, | |
1630 | + "engines": { | |
1631 | + "node": ">=18" | |
1632 | + } | |
1633 | + }, | |
1634 | + "node_modules/inquirer/node_modules/chalk": { | |
1635 | + "version": "4.1.2", | |
1636 | + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", | |
1637 | + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", | |
1638 | + "license": "MIT", | |
1639 | + "dependencies": { | |
1640 | + "ansi-styles": "^4.1.0", | |
1641 | + "supports-color": "^7.1.0" | |
1642 | + }, | |
1643 | + "engines": { | |
1644 | + "node": ">=10" | |
1645 | + }, | |
1646 | + "funding": { | |
1647 | + "url": "https://github.com/chalk/chalk?sponsor=1" | |
1648 | + } | |
1649 | + }, | |
1650 | + "node_modules/inquirer/node_modules/cli-cursor": { | |
1651 | + "version": "3.1.0", | |
1652 | + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", | |
1653 | + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", | |
1654 | + "license": "MIT", | |
1655 | + "dependencies": { | |
1656 | + "restore-cursor": "^3.1.0" | |
1657 | + }, | |
1658 | + "engines": { | |
1659 | + "node": ">=8" | |
1660 | + } | |
1661 | + }, | |
1662 | + "node_modules/inquirer/node_modules/is-interactive": { | |
1663 | + "version": "1.0.0", | |
1664 | + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", | |
1665 | + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", | |
1666 | + "license": "MIT", | |
1667 | + "engines": { | |
1668 | + "node": ">=8" | |
1669 | + } | |
1670 | + }, | |
1671 | + "node_modules/inquirer/node_modules/is-unicode-supported": { | |
1672 | + "version": "0.1.0", | |
1673 | + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", | |
1674 | + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", | |
1675 | + "license": "MIT", | |
1676 | + "engines": { | |
1677 | + "node": ">=10" | |
1678 | + }, | |
1679 | + "funding": { | |
1680 | + "url": "https://github.com/sponsors/sindresorhus" | |
1681 | + } | |
1682 | + }, | |
1683 | + "node_modules/inquirer/node_modules/log-symbols": { | |
1684 | + "version": "4.1.0", | |
1685 | + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", | |
1686 | + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", | |
1687 | + "license": "MIT", | |
1688 | + "dependencies": { | |
1689 | + "chalk": "^4.1.0", | |
1690 | + "is-unicode-supported": "^0.1.0" | |
1691 | + }, | |
1692 | + "engines": { | |
1693 | + "node": ">=10" | |
1694 | + }, | |
1695 | + "funding": { | |
1696 | + "url": "https://github.com/sponsors/sindresorhus" | |
1697 | + } | |
1698 | + }, | |
1699 | + "node_modules/inquirer/node_modules/mimic-fn": { | |
1700 | + "version": "2.1.0", | |
1701 | + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", | |
1702 | + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", | |
1703 | + "license": "MIT", | |
1704 | + "engines": { | |
1705 | + "node": ">=6" | |
1706 | + } | |
1707 | + }, | |
1708 | + "node_modules/inquirer/node_modules/onetime": { | |
1709 | + "version": "5.1.2", | |
1710 | + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", | |
1711 | + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", | |
1712 | + "license": "MIT", | |
1713 | + "dependencies": { | |
1714 | + "mimic-fn": "^2.1.0" | |
1715 | + }, | |
1716 | + "engines": { | |
1717 | + "node": ">=6" | |
1718 | + }, | |
1719 | + "funding": { | |
1720 | + "url": "https://github.com/sponsors/sindresorhus" | |
1721 | + } | |
1722 | + }, | |
1723 | + "node_modules/inquirer/node_modules/ora": { | |
1724 | + "version": "5.4.1", | |
1725 | + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", | |
1726 | + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", | |
1727 | + "license": "MIT", | |
1728 | + "dependencies": { | |
1729 | + "bl": "^4.1.0", | |
1730 | + "chalk": "^4.1.0", | |
1731 | + "cli-cursor": "^3.1.0", | |
1732 | + "cli-spinners": "^2.5.0", | |
1733 | + "is-interactive": "^1.0.0", | |
1734 | + "is-unicode-supported": "^0.1.0", | |
1735 | + "log-symbols": "^4.1.0", | |
1736 | + "strip-ansi": "^6.0.0", | |
1737 | + "wcwidth": "^1.0.1" | |
1738 | + }, | |
1739 | + "engines": { | |
1740 | + "node": ">=10" | |
1741 | + }, | |
1742 | + "funding": { | |
1743 | + "url": "https://github.com/sponsors/sindresorhus" | |
1744 | + } | |
1745 | + }, | |
1746 | + "node_modules/inquirer/node_modules/restore-cursor": { | |
1747 | + "version": "3.1.0", | |
1748 | + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", | |
1749 | + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", | |
1750 | + "license": "MIT", | |
1751 | + "dependencies": { | |
1752 | + "onetime": "^5.1.0", | |
1753 | + "signal-exit": "^3.0.2" | |
1754 | + }, | |
1755 | + "engines": { | |
1756 | + "node": ">=8" | |
1757 | + } | |
1758 | + }, | |
1759 | + "node_modules/inquirer/node_modules/signal-exit": { | |
1760 | + "version": "3.0.7", | |
1761 | + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", | |
1762 | + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", | |
1763 | + "license": "ISC" | |
1764 | + }, | |
1765 | + "node_modules/is-fullwidth-code-point": { | |
1766 | + "version": "3.0.0", | |
1767 | + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", | |
1768 | + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", | |
1769 | + "license": "MIT", | |
1770 | + "engines": { | |
1771 | + "node": ">=8" | |
1772 | + } | |
1773 | + }, | |
1774 | + "node_modules/is-interactive": { | |
1775 | + "version": "2.0.0", | |
1776 | + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", | |
1777 | + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", | |
1778 | + "license": "MIT", | |
1779 | + "engines": { | |
1780 | + "node": ">=12" | |
1781 | + }, | |
1782 | + "funding": { | |
1783 | + "url": "https://github.com/sponsors/sindresorhus" | |
1784 | + } | |
1785 | + }, | |
1786 | + "node_modules/is-unicode-supported": { | |
1787 | + "version": "2.1.0", | |
1788 | + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", | |
1789 | + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", | |
1790 | + "license": "MIT", | |
1791 | + "engines": { | |
1792 | + "node": ">=18" | |
1793 | + }, | |
1794 | + "funding": { | |
1795 | + "url": "https://github.com/sponsors/sindresorhus" | |
1796 | + } | |
1797 | + }, | |
1798 | + "node_modules/json-schema-traverse": { | |
1799 | + "version": "1.0.0", | |
1800 | + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", | |
1801 | + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", | |
1802 | + "license": "MIT" | |
1803 | + }, | |
1804 | + "node_modules/json-schema-typed": { | |
1805 | + "version": "8.0.2", | |
1806 | + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", | |
1807 | + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", | |
1808 | + "license": "BSD-2-Clause" | |
1809 | + }, | |
1810 | + "node_modules/log-symbols": { | |
1811 | + "version": "6.0.0", | |
1812 | + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", | |
1813 | + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", | |
1814 | + "license": "MIT", | |
1815 | + "dependencies": { | |
1816 | + "chalk": "^5.3.0", | |
1817 | + "is-unicode-supported": "^1.3.0" | |
1818 | + }, | |
1819 | + "engines": { | |
1820 | + "node": ">=18" | |
1821 | + }, | |
1822 | + "funding": { | |
1823 | + "url": "https://github.com/sponsors/sindresorhus" | |
1824 | + } | |
1825 | + }, | |
1826 | + "node_modules/log-symbols/node_modules/is-unicode-supported": { | |
1827 | + "version": "1.3.0", | |
1828 | + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", | |
1829 | + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", | |
1830 | + "license": "MIT", | |
1831 | + "engines": { | |
1832 | + "node": ">=12" | |
1833 | + }, | |
1834 | + "funding": { | |
1835 | + "url": "https://github.com/sponsors/sindresorhus" | |
1836 | + } | |
1837 | + }, | |
1838 | + "node_modules/magic-string": { | |
1839 | + "version": "0.30.21", | |
1840 | + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", | |
1841 | + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", | |
1842 | + "dev": true, | |
1843 | + "license": "MIT", | |
1844 | + "dependencies": { | |
1845 | + "@jridgewell/sourcemap-codec": "^1.5.5" | |
1846 | + } | |
1847 | + }, | |
1848 | + "node_modules/mimic-fn": { | |
1849 | + "version": "4.0.0", | |
1850 | + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", | |
1851 | + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", | |
1852 | + "license": "MIT", | |
1853 | + "engines": { | |
1854 | + "node": ">=12" | |
1855 | + }, | |
1856 | + "funding": { | |
1857 | + "url": "https://github.com/sponsors/sindresorhus" | |
1858 | + } | |
1859 | + }, | |
1860 | + "node_modules/mimic-function": { | |
1861 | + "version": "5.0.1", | |
1862 | + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", | |
1863 | + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", | |
1864 | + "license": "MIT", | |
1865 | + "engines": { | |
1866 | + "node": ">=18" | |
1867 | + }, | |
1868 | + "funding": { | |
1869 | + "url": "https://github.com/sponsors/sindresorhus" | |
1870 | + } | |
1871 | + }, | |
1872 | + "node_modules/ms": { | |
1873 | + "version": "2.1.3", | |
1874 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | |
1875 | + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", | |
1876 | + "license": "MIT" | |
1877 | + }, | |
1878 | + "node_modules/mute-stream": { | |
1879 | + "version": "1.0.0", | |
1880 | + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", | |
1881 | + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", | |
1882 | + "license": "ISC", | |
1883 | + "engines": { | |
1884 | + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" | |
1885 | + } | |
1886 | + }, | |
1887 | + "node_modules/nanoid": { | |
1888 | + "version": "3.3.11", | |
1889 | + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", | |
1890 | + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", | |
1891 | + "dev": true, | |
1892 | + "funding": [ | |
1893 | + { | |
1894 | + "type": "github", | |
1895 | + "url": "https://github.com/sponsors/ai" | |
1896 | + } | |
1897 | + ], | |
1898 | + "license": "MIT", | |
1899 | + "bin": { | |
1900 | + "nanoid": "bin/nanoid.cjs" | |
1901 | + }, | |
1902 | + "engines": { | |
1903 | + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" | |
1904 | + } | |
1905 | + }, | |
1906 | + "node_modules/obug": { | |
1907 | + "version": "2.1.1", | |
1908 | + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", | |
1909 | + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", | |
1910 | + "dev": true, | |
1911 | + "funding": [ | |
1912 | + "https://github.com/sponsors/sxzz", | |
1913 | + "https://opencollective.com/debug" | |
1914 | + ], | |
1915 | + "license": "MIT" | |
1916 | + }, | |
1917 | + "node_modules/onetime": { | |
1918 | + "version": "7.0.0", | |
1919 | + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", | |
1920 | + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", | |
1921 | + "license": "MIT", | |
1922 | + "dependencies": { | |
1923 | + "mimic-function": "^5.0.0" | |
1924 | + }, | |
1925 | + "engines": { | |
1926 | + "node": ">=18" | |
1927 | + }, | |
1928 | + "funding": { | |
1929 | + "url": "https://github.com/sponsors/sindresorhus" | |
1930 | + } | |
1931 | + }, | |
1932 | + "node_modules/ora": { | |
1933 | + "version": "8.2.0", | |
1934 | + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", | |
1935 | + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", | |
1936 | + "license": "MIT", | |
1937 | + "dependencies": { | |
1938 | + "chalk": "^5.3.0", | |
1939 | + "cli-cursor": "^5.0.0", | |
1940 | + "cli-spinners": "^2.9.2", | |
1941 | + "is-interactive": "^2.0.0", | |
1942 | + "is-unicode-supported": "^2.0.0", | |
1943 | + "log-symbols": "^6.0.0", | |
1944 | + "stdin-discarder": "^0.2.2", | |
1945 | + "string-width": "^7.2.0", | |
1946 | + "strip-ansi": "^7.1.0" | |
1947 | + }, | |
1948 | + "engines": { | |
1949 | + "node": ">=18" | |
1950 | + }, | |
1951 | + "funding": { | |
1952 | + "url": "https://github.com/sponsors/sindresorhus" | |
1953 | + } | |
1954 | + }, | |
1955 | + "node_modules/ora/node_modules/ansi-regex": { | |
1956 | + "version": "6.2.2", | |
1957 | + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", | |
1958 | + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", | |
1959 | + "license": "MIT", | |
1960 | + "engines": { | |
1961 | + "node": ">=12" | |
1962 | + }, | |
1963 | + "funding": { | |
1964 | + "url": "https://github.com/chalk/ansi-regex?sponsor=1" | |
1965 | + } | |
1966 | + }, | |
1967 | + "node_modules/ora/node_modules/emoji-regex": { | |
1968 | + "version": "10.6.0", | |
1969 | + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", | |
1970 | + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", | |
1971 | + "license": "MIT" | |
1972 | + }, | |
1973 | + "node_modules/ora/node_modules/string-width": { | |
1974 | + "version": "7.2.0", | |
1975 | + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", | |
1976 | + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", | |
1977 | + "license": "MIT", | |
1978 | + "dependencies": { | |
1979 | + "emoji-regex": "^10.3.0", | |
1980 | + "get-east-asian-width": "^1.0.0", | |
1981 | + "strip-ansi": "^7.1.0" | |
1982 | + }, | |
1983 | + "engines": { | |
1984 | + "node": ">=18" | |
1985 | + }, | |
1986 | + "funding": { | |
1987 | + "url": "https://github.com/sponsors/sindresorhus" | |
1988 | + } | |
1989 | + }, | |
1990 | + "node_modules/ora/node_modules/strip-ansi": { | |
1991 | + "version": "7.1.2", | |
1992 | + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", | |
1993 | + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", | |
1994 | + "license": "MIT", | |
1995 | + "dependencies": { | |
1996 | + "ansi-regex": "^6.0.1" | |
1997 | + }, | |
1998 | + "engines": { | |
1999 | + "node": ">=12" | |
2000 | + }, | |
2001 | + "funding": { | |
2002 | + "url": "https://github.com/chalk/strip-ansi?sponsor=1" | |
2003 | + } | |
2004 | + }, | |
2005 | + "node_modules/pathe": { | |
2006 | + "version": "2.0.3", | |
2007 | + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", | |
2008 | + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", | |
2009 | + "dev": true, | |
2010 | + "license": "MIT" | |
2011 | + }, | |
2012 | + "node_modules/picocolors": { | |
2013 | + "version": "1.1.1", | |
2014 | + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", | |
2015 | + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", | |
2016 | + "dev": true, | |
2017 | + "license": "ISC" | |
2018 | + }, | |
2019 | + "node_modules/picomatch": { | |
2020 | + "version": "4.0.3", | |
2021 | + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", | |
2022 | + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", | |
2023 | + "dev": true, | |
2024 | + "license": "MIT", | |
2025 | + "peer": true, | |
2026 | + "engines": { | |
2027 | + "node": ">=12" | |
2028 | + }, | |
2029 | + "funding": { | |
2030 | + "url": "https://github.com/sponsors/jonschlinkert" | |
2031 | + } | |
2032 | + }, | |
2033 | + "node_modules/postcss": { | |
2034 | + "version": "8.5.6", | |
2035 | + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", | |
2036 | + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", | |
2037 | + "dev": true, | |
2038 | + "funding": [ | |
2039 | + { | |
2040 | + "type": "opencollective", | |
2041 | + "url": "https://opencollective.com/postcss/" | |
2042 | + }, | |
2043 | + { | |
2044 | + "type": "tidelift", | |
2045 | + "url": "https://tidelift.com/funding/github/npm/postcss" | |
2046 | + }, | |
2047 | + { | |
2048 | + "type": "github", | |
2049 | + "url": "https://github.com/sponsors/ai" | |
2050 | + } | |
2051 | + ], | |
2052 | + "license": "MIT", | |
2053 | + "dependencies": { | |
2054 | + "nanoid": "^3.3.11", | |
2055 | + "picocolors": "^1.1.1", | |
2056 | + "source-map-js": "^1.2.1" | |
2057 | + }, | |
2058 | + "engines": { | |
2059 | + "node": "^10 || ^12 || >=14" | |
2060 | + } | |
2061 | + }, | |
2062 | + "node_modules/readable-stream": { | |
2063 | + "version": "3.6.2", | |
2064 | + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", | |
2065 | + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", | |
2066 | + "license": "MIT", | |
2067 | + "dependencies": { | |
2068 | + "inherits": "^2.0.3", | |
2069 | + "string_decoder": "^1.1.1", | |
2070 | + "util-deprecate": "^1.0.1" | |
2071 | + }, | |
2072 | + "engines": { | |
2073 | + "node": ">= 6" | |
2074 | + } | |
2075 | + }, | |
2076 | + "node_modules/require-from-string": { | |
2077 | + "version": "2.0.2", | |
2078 | + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", | |
2079 | + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", | |
2080 | + "license": "MIT", | |
2081 | + "engines": { | |
2082 | + "node": ">=0.10.0" | |
2083 | + } | |
2084 | + }, | |
2085 | + "node_modules/resolve-pkg-maps": { | |
2086 | + "version": "1.0.0", | |
2087 | + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", | |
2088 | + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", | |
2089 | + "dev": true, | |
2090 | + "license": "MIT", | |
2091 | + "funding": { | |
2092 | + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" | |
2093 | + } | |
2094 | + }, | |
2095 | + "node_modules/restore-cursor": { | |
2096 | + "version": "5.1.0", | |
2097 | + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", | |
2098 | + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", | |
2099 | + "license": "MIT", | |
2100 | + "dependencies": { | |
2101 | + "onetime": "^7.0.0", | |
2102 | + "signal-exit": "^4.1.0" | |
2103 | + }, | |
2104 | + "engines": { | |
2105 | + "node": ">=18" | |
2106 | + }, | |
2107 | + "funding": { | |
2108 | + "url": "https://github.com/sponsors/sindresorhus" | |
2109 | + } | |
2110 | + }, | |
2111 | + "node_modules/rollup": { | |
2112 | + "version": "4.55.1", | |
2113 | + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", | |
2114 | + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", | |
2115 | + "dev": true, | |
2116 | + "license": "MIT", | |
2117 | + "dependencies": { | |
2118 | + "@types/estree": "1.0.8" | |
2119 | + }, | |
2120 | + "bin": { | |
2121 | + "rollup": "dist/bin/rollup" | |
2122 | + }, | |
2123 | + "engines": { | |
2124 | + "node": ">=18.0.0", | |
2125 | + "npm": ">=8.0.0" | |
2126 | + }, | |
2127 | + "optionalDependencies": { | |
2128 | + "@rollup/rollup-android-arm-eabi": "4.55.1", | |
2129 | + "@rollup/rollup-android-arm64": "4.55.1", | |
2130 | + "@rollup/rollup-darwin-arm64": "4.55.1", | |
2131 | + "@rollup/rollup-darwin-x64": "4.55.1", | |
2132 | + "@rollup/rollup-freebsd-arm64": "4.55.1", | |
2133 | + "@rollup/rollup-freebsd-x64": "4.55.1", | |
2134 | + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", | |
2135 | + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", | |
2136 | + "@rollup/rollup-linux-arm64-gnu": "4.55.1", | |
2137 | + "@rollup/rollup-linux-arm64-musl": "4.55.1", | |
2138 | + "@rollup/rollup-linux-loong64-gnu": "4.55.1", | |
2139 | + "@rollup/rollup-linux-loong64-musl": "4.55.1", | |
2140 | + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", | |
2141 | + "@rollup/rollup-linux-ppc64-musl": "4.55.1", | |
2142 | + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", | |
2143 | + "@rollup/rollup-linux-riscv64-musl": "4.55.1", | |
2144 | + "@rollup/rollup-linux-s390x-gnu": "4.55.1", | |
2145 | + "@rollup/rollup-linux-x64-gnu": "4.55.1", | |
2146 | + "@rollup/rollup-linux-x64-musl": "4.55.1", | |
2147 | + "@rollup/rollup-openbsd-x64": "4.55.1", | |
2148 | + "@rollup/rollup-openharmony-arm64": "4.55.1", | |
2149 | + "@rollup/rollup-win32-arm64-msvc": "4.55.1", | |
2150 | + "@rollup/rollup-win32-ia32-msvc": "4.55.1", | |
2151 | + "@rollup/rollup-win32-x64-gnu": "4.55.1", | |
2152 | + "@rollup/rollup-win32-x64-msvc": "4.55.1", | |
2153 | + "fsevents": "~2.3.2" | |
2154 | + } | |
2155 | + }, | |
2156 | + "node_modules/run-async": { | |
2157 | + "version": "3.0.0", | |
2158 | + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", | |
2159 | + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", | |
2160 | + "license": "MIT", | |
2161 | + "engines": { | |
2162 | + "node": ">=0.12.0" | |
2163 | + } | |
2164 | + }, | |
2165 | + "node_modules/rxjs": { | |
2166 | + "version": "7.8.2", | |
2167 | + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", | |
2168 | + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", | |
2169 | + "license": "Apache-2.0", | |
2170 | + "dependencies": { | |
2171 | + "tslib": "^2.1.0" | |
2172 | + } | |
2173 | + }, | |
2174 | + "node_modules/safe-buffer": { | |
2175 | + "version": "5.2.1", | |
2176 | + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", | |
2177 | + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", | |
2178 | + "funding": [ | |
2179 | + { | |
2180 | + "type": "github", | |
2181 | + "url": "https://github.com/sponsors/feross" | |
2182 | + }, | |
2183 | + { | |
2184 | + "type": "patreon", | |
2185 | + "url": "https://www.patreon.com/feross" | |
2186 | + }, | |
2187 | + { | |
2188 | + "type": "consulting", | |
2189 | + "url": "https://feross.org/support" | |
2190 | + } | |
2191 | + ], | |
2192 | + "license": "MIT" | |
2193 | + }, | |
2194 | + "node_modules/safer-buffer": { | |
2195 | + "version": "2.1.2", | |
2196 | + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", | |
2197 | + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", | |
2198 | + "license": "MIT" | |
2199 | + }, | |
2200 | + "node_modules/semver": { | |
2201 | + "version": "7.7.3", | |
2202 | + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", | |
2203 | + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", | |
2204 | + "license": "ISC", | |
2205 | + "bin": { | |
2206 | + "semver": "bin/semver.js" | |
2207 | + }, | |
2208 | + "engines": { | |
2209 | + "node": ">=10" | |
2210 | + } | |
2211 | + }, | |
2212 | + "node_modules/siginfo": { | |
2213 | + "version": "2.0.0", | |
2214 | + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", | |
2215 | + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", | |
2216 | + "dev": true, | |
2217 | + "license": "ISC" | |
2218 | + }, | |
2219 | + "node_modules/signal-exit": { | |
2220 | + "version": "4.1.0", | |
2221 | + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", | |
2222 | + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", | |
2223 | + "license": "ISC", | |
2224 | + "engines": { | |
2225 | + "node": ">=14" | |
2226 | + }, | |
2227 | + "funding": { | |
2228 | + "url": "https://github.com/sponsors/isaacs" | |
2229 | + } | |
2230 | + }, | |
2231 | + "node_modules/simple-git": { | |
2232 | + "version": "3.30.0", | |
2233 | + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz", | |
2234 | + "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", | |
2235 | + "license": "MIT", | |
2236 | + "dependencies": { | |
2237 | + "@kwsites/file-exists": "^1.1.1", | |
2238 | + "@kwsites/promise-deferred": "^1.1.1", | |
2239 | + "debug": "^4.4.0" | |
2240 | + }, | |
2241 | + "funding": { | |
2242 | + "type": "github", | |
2243 | + "url": "https://github.com/steveukx/git-js?sponsor=1" | |
2244 | + } | |
2245 | + }, | |
2246 | + "node_modules/source-map-js": { | |
2247 | + "version": "1.2.1", | |
2248 | + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", | |
2249 | + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", | |
2250 | + "dev": true, | |
2251 | + "license": "BSD-3-Clause", | |
2252 | + "engines": { | |
2253 | + "node": ">=0.10.0" | |
2254 | + } | |
2255 | + }, | |
2256 | + "node_modules/stackback": { | |
2257 | + "version": "0.0.2", | |
2258 | + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", | |
2259 | + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", | |
2260 | + "dev": true, | |
2261 | + "license": "MIT" | |
2262 | + }, | |
2263 | + "node_modules/std-env": { | |
2264 | + "version": "3.10.0", | |
2265 | + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", | |
2266 | + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", | |
2267 | + "dev": true, | |
2268 | + "license": "MIT" | |
2269 | + }, | |
2270 | + "node_modules/stdin-discarder": { | |
2271 | + "version": "0.2.2", | |
2272 | + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", | |
2273 | + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", | |
2274 | + "license": "MIT", | |
2275 | + "engines": { | |
2276 | + "node": ">=18" | |
2277 | + }, | |
2278 | + "funding": { | |
2279 | + "url": "https://github.com/sponsors/sindresorhus" | |
2280 | + } | |
2281 | + }, | |
2282 | + "node_modules/string_decoder": { | |
2283 | + "version": "1.3.0", | |
2284 | + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", | |
2285 | + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", | |
2286 | + "license": "MIT", | |
2287 | + "dependencies": { | |
2288 | + "safe-buffer": "~5.2.0" | |
2289 | + } | |
2290 | + }, | |
2291 | + "node_modules/string-width": { | |
2292 | + "version": "4.2.3", | |
2293 | + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", | |
2294 | + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", | |
2295 | + "license": "MIT", | |
2296 | + "dependencies": { | |
2297 | + "emoji-regex": "^8.0.0", | |
2298 | + "is-fullwidth-code-point": "^3.0.0", | |
2299 | + "strip-ansi": "^6.0.1" | |
2300 | + }, | |
2301 | + "engines": { | |
2302 | + "node": ">=8" | |
2303 | + } | |
2304 | + }, | |
2305 | + "node_modules/strip-ansi": { | |
2306 | + "version": "6.0.1", | |
2307 | + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", | |
2308 | + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", | |
2309 | + "license": "MIT", | |
2310 | + "dependencies": { | |
2311 | + "ansi-regex": "^5.0.1" | |
2312 | + }, | |
2313 | + "engines": { | |
2314 | + "node": ">=8" | |
2315 | + } | |
2316 | + }, | |
2317 | + "node_modules/stubborn-fs": { | |
2318 | + "version": "2.0.0", | |
2319 | + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", | |
2320 | + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", | |
2321 | + "license": "MIT", | |
2322 | + "dependencies": { | |
2323 | + "stubborn-utils": "^1.0.1" | |
2324 | + } | |
2325 | + }, | |
2326 | + "node_modules/stubborn-utils": { | |
2327 | + "version": "1.0.2", | |
2328 | + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", | |
2329 | + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", | |
2330 | + "license": "MIT" | |
2331 | + }, | |
2332 | + "node_modules/supports-color": { | |
2333 | + "version": "7.2.0", | |
2334 | + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", | |
2335 | + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", | |
2336 | + "license": "MIT", | |
2337 | + "dependencies": { | |
2338 | + "has-flag": "^4.0.0" | |
2339 | + }, | |
2340 | + "engines": { | |
2341 | + "node": ">=8" | |
2342 | + } | |
2343 | + }, | |
2344 | + "node_modules/tinybench": { | |
2345 | + "version": "2.9.0", | |
2346 | + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", | |
2347 | + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", | |
2348 | + "dev": true, | |
2349 | + "license": "MIT" | |
2350 | + }, | |
2351 | + "node_modules/tinyexec": { | |
2352 | + "version": "1.0.2", | |
2353 | + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", | |
2354 | + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", | |
2355 | + "dev": true, | |
2356 | + "license": "MIT", | |
2357 | + "engines": { | |
2358 | + "node": ">=18" | |
2359 | + } | |
2360 | + }, | |
2361 | + "node_modules/tinyglobby": { | |
2362 | + "version": "0.2.15", | |
2363 | + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", | |
2364 | + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", | |
2365 | + "dev": true, | |
2366 | + "license": "MIT", | |
2367 | + "dependencies": { | |
2368 | + "fdir": "^6.5.0", | |
2369 | + "picomatch": "^4.0.3" | |
2370 | + }, | |
2371 | + "engines": { | |
2372 | + "node": ">=12.0.0" | |
2373 | + }, | |
2374 | + "funding": { | |
2375 | + "url": "https://github.com/sponsors/SuperchupuDev" | |
2376 | + } | |
2377 | + }, | |
2378 | + "node_modules/tinyrainbow": { | |
2379 | + "version": "3.0.3", | |
2380 | + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", | |
2381 | + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", | |
2382 | + "dev": true, | |
2383 | + "license": "MIT", | |
2384 | + "engines": { | |
2385 | + "node": ">=14.0.0" | |
2386 | + } | |
2387 | + }, | |
2388 | + "node_modules/tslib": { | |
2389 | + "version": "2.8.1", | |
2390 | + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", | |
2391 | + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", | |
2392 | + "license": "0BSD" | |
2393 | + }, | |
2394 | + "node_modules/tsx": { | |
2395 | + "version": "4.21.0", | |
2396 | + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", | |
2397 | + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", | |
2398 | + "dev": true, | |
2399 | + "license": "MIT", | |
2400 | + "peer": true, | |
2401 | + "dependencies": { | |
2402 | + "esbuild": "~0.27.0", | |
2403 | + "get-tsconfig": "^4.7.5" | |
2404 | + }, | |
2405 | + "bin": { | |
2406 | + "tsx": "dist/cli.mjs" | |
2407 | + }, | |
2408 | + "engines": { | |
2409 | + "node": ">=18.0.0" | |
2410 | + }, | |
2411 | + "optionalDependencies": { | |
2412 | + "fsevents": "~2.3.3" | |
2413 | + } | |
2414 | + }, | |
2415 | + "node_modules/type-fest": { | |
2416 | + "version": "3.13.1", | |
2417 | + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", | |
2418 | + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", | |
2419 | + "license": "(MIT OR CC0-1.0)", | |
2420 | + "engines": { | |
2421 | + "node": ">=14.16" | |
2422 | + }, | |
2423 | + "funding": { | |
2424 | + "url": "https://github.com/sponsors/sindresorhus" | |
2425 | + } | |
2426 | + }, | |
2427 | + "node_modules/typescript": { | |
2428 | + "version": "5.9.3", | |
2429 | + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", | |
2430 | + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", | |
2431 | + "dev": true, | |
2432 | + "license": "Apache-2.0", | |
2433 | + "bin": { | |
2434 | + "tsc": "bin/tsc", | |
2435 | + "tsserver": "bin/tsserver" | |
2436 | + }, | |
2437 | + "engines": { | |
2438 | + "node": ">=14.17" | |
2439 | + } | |
2440 | + }, | |
2441 | + "node_modules/uint8array-extras": { | |
2442 | + "version": "0.3.0", | |
2443 | + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-0.3.0.tgz", | |
2444 | + "integrity": "sha512-erJsJwQ0tKdwuqI0359U8ijkFmfiTcq25JvvzRVc1VP+2son1NJRXhxcAKJmAW3ajM8JSGAfsAXye8g4s+znxA==", | |
2445 | + "license": "MIT", | |
2446 | + "engines": { | |
2447 | + "node": ">=18" | |
2448 | + }, | |
2449 | + "funding": { | |
2450 | + "url": "https://github.com/sponsors/sindresorhus" | |
2451 | + } | |
2452 | + }, | |
2453 | + "node_modules/undici-types": { | |
2454 | + "version": "6.21.0", | |
2455 | + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", | |
2456 | + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", | |
2457 | + "devOptional": true, | |
2458 | + "license": "MIT" | |
2459 | + }, | |
2460 | + "node_modules/util-deprecate": { | |
2461 | + "version": "1.0.2", | |
2462 | + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | |
2463 | + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", | |
2464 | + "license": "MIT" | |
2465 | + }, | |
2466 | + "node_modules/vite": { | |
2467 | + "version": "7.3.1", | |
2468 | + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", | |
2469 | + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", | |
2470 | + "dev": true, | |
2471 | + "license": "MIT", | |
2472 | + "peer": true, | |
2473 | + "dependencies": { | |
2474 | + "esbuild": "^0.27.0", | |
2475 | + "fdir": "^6.5.0", | |
2476 | + "picomatch": "^4.0.3", | |
2477 | + "postcss": "^8.5.6", | |
2478 | + "rollup": "^4.43.0", | |
2479 | + "tinyglobby": "^0.2.15" | |
2480 | + }, | |
2481 | + "bin": { | |
2482 | + "vite": "bin/vite.js" | |
2483 | + }, | |
2484 | + "engines": { | |
2485 | + "node": "^20.19.0 || >=22.12.0" | |
2486 | + }, | |
2487 | + "funding": { | |
2488 | + "url": "https://github.com/vitejs/vite?sponsor=1" | |
2489 | + }, | |
2490 | + "optionalDependencies": { | |
2491 | + "fsevents": "~2.3.3" | |
2492 | + }, | |
2493 | + "peerDependencies": { | |
2494 | + "@types/node": "^20.19.0 || >=22.12.0", | |
2495 | + "jiti": ">=1.21.0", | |
2496 | + "less": "^4.0.0", | |
2497 | + "lightningcss": "^1.21.0", | |
2498 | + "sass": "^1.70.0", | |
2499 | + "sass-embedded": "^1.70.0", | |
2500 | + "stylus": ">=0.54.8", | |
2501 | + "sugarss": "^5.0.0", | |
2502 | + "terser": "^5.16.0", | |
2503 | + "tsx": "^4.8.1", | |
2504 | + "yaml": "^2.4.2" | |
2505 | + }, | |
2506 | + "peerDependenciesMeta": { | |
2507 | + "@types/node": { | |
2508 | + "optional": true | |
2509 | + }, | |
2510 | + "jiti": { | |
2511 | + "optional": true | |
2512 | + }, | |
2513 | + "less": { | |
2514 | + "optional": true | |
2515 | + }, | |
2516 | + "lightningcss": { | |
2517 | + "optional": true | |
2518 | + }, | |
2519 | + "sass": { | |
2520 | + "optional": true | |
2521 | + }, | |
2522 | + "sass-embedded": { | |
2523 | + "optional": true | |
2524 | + }, | |
2525 | + "stylus": { | |
2526 | + "optional": true | |
2527 | + }, | |
2528 | + "sugarss": { | |
2529 | + "optional": true | |
2530 | + }, | |
2531 | + "terser": { | |
2532 | + "optional": true | |
2533 | + }, | |
2534 | + "tsx": { | |
2535 | + "optional": true | |
2536 | + }, | |
2537 | + "yaml": { | |
2538 | + "optional": true | |
2539 | + } | |
2540 | + } | |
2541 | + }, | |
2542 | + "node_modules/vitest": { | |
2543 | + "version": "4.0.17", | |
2544 | + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.17.tgz", | |
2545 | + "integrity": "sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==", | |
2546 | + "dev": true, | |
2547 | + "license": "MIT", | |
2548 | + "dependencies": { | |
2549 | + "@vitest/expect": "4.0.17", | |
2550 | + "@vitest/mocker": "4.0.17", | |
2551 | + "@vitest/pretty-format": "4.0.17", | |
2552 | + "@vitest/runner": "4.0.17", | |
2553 | + "@vitest/snapshot": "4.0.17", | |
2554 | + "@vitest/spy": "4.0.17", | |
2555 | + "@vitest/utils": "4.0.17", | |
2556 | + "es-module-lexer": "^1.7.0", | |
2557 | + "expect-type": "^1.2.2", | |
2558 | + "magic-string": "^0.30.21", | |
2559 | + "obug": "^2.1.1", | |
2560 | + "pathe": "^2.0.3", | |
2561 | + "picomatch": "^4.0.3", | |
2562 | + "std-env": "^3.10.0", | |
2563 | + "tinybench": "^2.9.0", | |
2564 | + "tinyexec": "^1.0.2", | |
2565 | + "tinyglobby": "^0.2.15", | |
2566 | + "tinyrainbow": "^3.0.3", | |
2567 | + "vite": "^6.0.0 || ^7.0.0", | |
2568 | + "why-is-node-running": "^2.3.0" | |
2569 | + }, | |
2570 | + "bin": { | |
2571 | + "vitest": "vitest.mjs" | |
2572 | + }, | |
2573 | + "engines": { | |
2574 | + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" | |
2575 | + }, | |
2576 | + "funding": { | |
2577 | + "url": "https://opencollective.com/vitest" | |
2578 | + }, | |
2579 | + "peerDependencies": { | |
2580 | + "@edge-runtime/vm": "*", | |
2581 | + "@opentelemetry/api": "^1.9.0", | |
2582 | + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", | |
2583 | + "@vitest/browser-playwright": "4.0.17", | |
2584 | + "@vitest/browser-preview": "4.0.17", | |
2585 | + "@vitest/browser-webdriverio": "4.0.17", | |
2586 | + "@vitest/ui": "4.0.17", | |
2587 | + "happy-dom": "*", | |
2588 | + "jsdom": "*" | |
2589 | + }, | |
2590 | + "peerDependenciesMeta": { | |
2591 | + "@edge-runtime/vm": { | |
2592 | + "optional": true | |
2593 | + }, | |
2594 | + "@opentelemetry/api": { | |
2595 | + "optional": true | |
2596 | + }, | |
2597 | + "@types/node": { | |
2598 | + "optional": true | |
2599 | + }, | |
2600 | + "@vitest/browser-playwright": { | |
2601 | + "optional": true | |
2602 | + }, | |
2603 | + "@vitest/browser-preview": { | |
2604 | + "optional": true | |
2605 | + }, | |
2606 | + "@vitest/browser-webdriverio": { | |
2607 | + "optional": true | |
2608 | + }, | |
2609 | + "@vitest/ui": { | |
2610 | + "optional": true | |
2611 | + }, | |
2612 | + "happy-dom": { | |
2613 | + "optional": true | |
2614 | + }, | |
2615 | + "jsdom": { | |
2616 | + "optional": true | |
2617 | + } | |
2618 | + } | |
2619 | + }, | |
2620 | + "node_modules/wcwidth": { | |
2621 | + "version": "1.0.1", | |
2622 | + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", | |
2623 | + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", | |
2624 | + "license": "MIT", | |
2625 | + "dependencies": { | |
2626 | + "defaults": "^1.0.3" | |
2627 | + } | |
2628 | + }, | |
2629 | + "node_modules/when-exit": { | |
2630 | + "version": "2.1.5", | |
2631 | + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", | |
2632 | + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", | |
2633 | + "license": "MIT" | |
2634 | + }, | |
2635 | + "node_modules/why-is-node-running": { | |
2636 | + "version": "2.3.0", | |
2637 | + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", | |
2638 | + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", | |
2639 | + "dev": true, | |
2640 | + "license": "MIT", | |
2641 | + "dependencies": { | |
2642 | + "siginfo": "^2.0.0", | |
2643 | + "stackback": "0.0.2" | |
2644 | + }, | |
2645 | + "bin": { | |
2646 | + "why-is-node-running": "cli.js" | |
2647 | + }, | |
2648 | + "engines": { | |
2649 | + "node": ">=8" | |
2650 | + } | |
2651 | + }, | |
2652 | + "node_modules/wrap-ansi": { | |
2653 | + "version": "6.2.0", | |
2654 | + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", | |
2655 | + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", | |
2656 | + "license": "MIT", | |
2657 | + "dependencies": { | |
2658 | + "ansi-styles": "^4.0.0", | |
2659 | + "string-width": "^4.1.0", | |
2660 | + "strip-ansi": "^6.0.0" | |
2661 | + }, | |
2662 | + "engines": { | |
2663 | + "node": ">=8" | |
2664 | + } | |
2665 | + }, | |
2666 | + "node_modules/yoctocolors-cjs": { | |
2667 | + "version": "2.1.3", | |
2668 | + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", | |
2669 | + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", | |
2670 | + "license": "MIT", | |
2671 | + "engines": { | |
2672 | + "node": ">=18" | |
2673 | + }, | |
2674 | + "funding": { | |
2675 | + "url": "https://github.com/sponsors/sindresorhus" | |
2676 | + } | |
2677 | + } | |
2678 | + } | |
2679 | +} | |
0 | 2680 | |
▼cli/package.json
+35-8
| @@ -1,25 +1,44 @@ | ||
1 | 1 | { |
2 | 2 | "name": "opencodehub-cli", |
3 | - "version": "1.0.0", | |
4 | - "description": "CLI for OpenCodeHub - Stack-first PR workflows", | |
3 | + "version": "1.0.1", | |
4 | + "description": "Stack-first PR workflows from your terminal - CLI for OpenCodeHub", | |
5 | + "author": "Swadhin Biswas <[email protected]>", | |
6 | + "license": "MIT", | |
5 | 7 | "type": "module", |
6 | 8 | "bin": { |
7 | - "och": "./bin/och.js" | |
9 | + "och": "dist/bin/och.js" | |
10 | + }, | |
11 | + "files": [ | |
12 | + "bin", | |
13 | + "dist", | |
14 | + "README.md", | |
15 | + "LICENSE" | |
16 | + ], | |
17 | + "repository": { | |
18 | + "type": "git", | |
19 | + "url": "git+https://github.com/swadhinbiswas/OpencodeHub.git", | |
20 | + "directory": "cli" | |
21 | + }, | |
22 | + "homepage": "https://github.com/swadhinbiswas/OpencodeHub#readme", | |
23 | + "bugs": { | |
24 | + "url": "https://github.com/swadhinbiswas/OpencodeHub/issues" | |
8 | 25 | }, |
9 | 26 | "scripts": { |
10 | 27 | "build": "tsc", |
11 | 28 | "dev": "tsx bin/och.ts", |
12 | - "test": "vitest" | |
29 | + "prepublishOnly": "npm run build", | |
30 | + "test": "vitest run" | |
13 | 31 | }, |
14 | 32 | "dependencies": { |
15 | - "commander": "^12.0.0", | |
16 | 33 | "chalk": "^5.3.0", |
17 | - "ora": "^8.0.0", | |
18 | - "inquirer": "^9.2.0", | |
34 | + "commander": "^12.0.0", | |
19 | 35 | "conf": "^12.0.0", |
36 | + "inquirer": "^9.2.0", | |
37 | + "ora": "^8.0.0", | |
20 | 38 | "simple-git": "^3.25.0" |
21 | 39 | }, |
22 | 40 | "devDependencies": { |
41 | + "@types/inquirer": "^9.0.9", | |
23 | 42 | "@types/node": "^20.14.9", |
24 | 43 | "tsx": "^4.15.0", |
25 | 44 | "typescript": "^5.5.2", |
| @@ -30,8 +49,16 @@ | ||
30 | 49 | }, |
31 | 50 | "keywords": [ |
32 | 51 | "git", |
52 | + "github", | |
53 | + "gitlab", | |
33 | 54 | "stacked-prs", |
55 | + "stacked-diffs", | |
34 | 56 | "code-review", |
35 | - "cli" | |
57 | + "cli", | |
58 | + "devops", | |
59 | + "pull-request", | |
60 | + "pr", | |
61 | + "workflow", | |
62 | + "opencodehub" | |
36 | 63 | ] |
37 | 64 | } |
38 | 65 | |
▼cli/src/smoke.test.ts
+15-0
| @@ -0,0 +1,15 @@ | ||
1 | +import { describe, it, expect } from 'vitest'; | |
2 | +import { execSync } from 'child_process'; | |
3 | + | |
4 | +describe('CLI Smoke Test', () => { | |
5 | + it('should show help menu', () => { | |
6 | + const output = execSync('node dist/bin/och.js --help').toString(); | |
7 | + expect(output).toContain('OpenCodeHub CLI'); | |
8 | + expect(output).toContain('Usage: och'); | |
9 | + }); | |
10 | + | |
11 | + it('should show version', () => { | |
12 | + const output = execSync('node dist/bin/och.js --version').toString(); | |
13 | + expect(output).toMatch(/\d+\.\d+\.\d+/); | |
14 | + }); | |
15 | +}); | |
0 | 16 | |
▼cli/tsconfig.json
+1-1
| @@ -2,7 +2,7 @@ | ||
2 | 2 | "compilerOptions": { |
3 | 3 | "target": "ES2022", |
4 | 4 | "module": "ESNext", |
5 | - "moduleResolution": "node", | |
5 | + "moduleResolution": "bundler", | |
6 | 6 | "outDir": "./dist", |
7 | 7 | "rootDir": ".", |
8 | 8 | "strict": true, |
9 | 9 | |
▼docs-site/api.html
+133-0
| @@ -0,0 +1,133 @@ | ||
1 | +<!DOCTYPE html> | |
2 | +<html lang="en"> | |
3 | + | |
4 | +<head> | |
5 | + <meta charset="UTF-8"> | |
6 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
7 | + <title>API Reference - OpenCodeHub Docs</title> | |
8 | + <meta name="description" content="OpenCodeHub REST API reference"> | |
9 | + <link rel="icon" type="image/svg+xml" href="../public/logo.svg"> | |
10 | + <link | |
11 | + href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" | |
12 | + rel="stylesheet"> | |
13 | + <link rel="stylesheet" href="styles.css"> | |
14 | +</head> | |
15 | + | |
16 | +<body> | |
17 | + <header class="header"> | |
18 | + <a href="index.html" class="header-logo"> | |
19 | + <img src="../public/logo.svg" alt="OpenCodeHub" height="40"> | |
20 | + </a> | |
21 | + <nav class="header-nav"> | |
22 | + <a href="getting-started.html">Getting Started</a> | |
23 | + <a href="deployment.html">Deployment</a> | |
24 | + <a href="cli.html">CLI</a> | |
25 | + <a href="api.html">API</a> | |
26 | + </nav> | |
27 | + </header> | |
28 | + | |
29 | + <div class="layout"> | |
30 | + <aside class="sidebar"> | |
31 | + <div class="sidebar-section"> | |
32 | + <div class="sidebar-title">API</div> | |
33 | + <nav class="sidebar-nav"> | |
34 | + <a href="#auth" class="sidebar-link active">Authentication</a> | |
35 | + <a href="#repos" class="sidebar-link">Repositories</a> | |
36 | + <a href="#prs" class="sidebar-link">Pull Requests</a> | |
37 | + <a href="#webhooks" class="sidebar-link">Webhooks</a> | |
38 | + </nav> | |
39 | + </div> | |
40 | + </aside> | |
41 | + | |
42 | + <main class="main"> | |
43 | + <div class="content"> | |
44 | + <h1>🔌 API Reference</h1> | |
45 | + <p>RESTful API for programmatic access to OpenCodeHub.</p> | |
46 | + | |
47 | + <section id="auth"> | |
48 | + <h2>🔐 Authentication</h2> | |
49 | + <p>All API requests require authentication via Bearer token:</p> | |
50 | + <pre><code>Authorization: Bearer YOUR_API_TOKEN</code></pre> | |
51 | + <p>Create tokens in <strong>Settings → Developer → API Tokens</strong>.</p> | |
52 | + </section> | |
53 | + | |
54 | + <section id="repos"> | |
55 | + <h2>📁 Repositories</h2> | |
56 | + <table> | |
57 | + <tr> | |
58 | + <td><code>GET /api/repos</code></td> | |
59 | + <td>List repositories</td> | |
60 | + </tr> | |
61 | + <tr> | |
62 | + <td><code>GET /api/repos/:owner/:repo</code></td> | |
63 | + <td>Get repository</td> | |
64 | + </tr> | |
65 | + <tr> | |
66 | + <td><code>POST /api/repos</code></td> | |
67 | + <td>Create repository</td> | |
68 | + </tr> | |
69 | + <tr> | |
70 | + <td><code>DELETE /api/repos/:owner/:repo</code></td> | |
71 | + <td>Delete repository</td> | |
72 | + </tr> | |
73 | + </table> | |
74 | + <h3>Example</h3> | |
75 | + <pre><code>curl -H "Authorization: Bearer TOKEN" \ | |
76 | + https://git.example.com/api/repos/user/project</code></pre> | |
77 | + </section> | |
78 | + | |
79 | + <section id="prs"> | |
80 | + <h2>🔀 Pull Requests</h2> | |
81 | + <table> | |
82 | + <tr> | |
83 | + <td><code>GET /api/repos/:owner/:repo/pulls</code></td> | |
84 | + <td>List PRs</td> | |
85 | + </tr> | |
86 | + <tr> | |
87 | + <td><code>POST /api/repos/:owner/:repo/pulls</code></td> | |
88 | + <td>Create PR</td> | |
89 | + </tr> | |
90 | + <tr> | |
91 | + <td><code>PUT /api/repos/:owner/:repo/pulls/:id/merge</code></td> | |
92 | + <td>Merge PR</td> | |
93 | + </tr> | |
94 | + </table> | |
95 | + </section> | |
96 | + | |
97 | + <section id="webhooks"> | |
98 | + <h2>🔔 Webhooks</h2> | |
99 | + <p>Configure webhooks in <strong>Repository → Settings → Webhooks</strong>.</p> | |
100 | + <h3>Events</h3> | |
101 | + <table> | |
102 | + <tr> | |
103 | + <td><code>push</code></td> | |
104 | + <td>Code pushed to repository</td> | |
105 | + </tr> | |
106 | + <tr> | |
107 | + <td><code>pull_request</code></td> | |
108 | + <td>PR opened, closed, merged</td> | |
109 | + </tr> | |
110 | + <tr> | |
111 | + <td><code>issue</code></td> | |
112 | + <td>Issue created or updated</td> | |
113 | + </tr> | |
114 | + </table> | |
115 | + <h3>Payload Example</h3> | |
116 | + <pre><code>{ | |
117 | + "event": "pull_request", | |
118 | + "action": "opened", | |
119 | + "repository": {"name": "project", "owner": "user"}, | |
120 | + "pull_request": {"number": 42, "title": "Add feature"} | |
121 | +}</code></pre> | |
122 | + </section> | |
123 | + | |
124 | + <footer | |
125 | + style="margin-top: 4rem; padding-top: 2rem; border-top: 1px solid var(--border-primary); text-align: center; color: var(--text-muted);"> | |
126 | + <p>Made with ❤️ by <a href="https://github.com/swadhinbiswas">Swadhin Biswas</a></p> | |
127 | + </footer> | |
128 | + </div> | |
129 | + </main> | |
130 | + </div> | |
131 | +</body> | |
132 | + | |
133 | +</html> | |
0 | 134 | |
▼docs-site/cli.html
+141-0
| @@ -0,0 +1,141 @@ | ||
1 | +<!DOCTYPE html> | |
2 | +<html lang="en"> | |
3 | + | |
4 | +<head> | |
5 | + <meta charset="UTF-8"> | |
6 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
7 | + <title>CLI Reference - OpenCodeHub Docs</title> | |
8 | + <meta name="description" content="OpenCodeHub CLI reference - Stack-first PR workflows"> | |
9 | + <link rel="icon" type="image/svg+xml" href="../public/logo.svg"> | |
10 | + <link | |
11 | + href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" | |
12 | + rel="stylesheet"> | |
13 | + <link rel="stylesheet" href="styles.css"> | |
14 | +</head> | |
15 | + | |
16 | +<body> | |
17 | + <header class="header"> | |
18 | + <a href="index.html" class="header-logo"> | |
19 | + <img src="../public/logo.svg" alt="OpenCodeHub" height="40"> | |
20 | + </a> | |
21 | + <nav class="header-nav"> | |
22 | + <a href="getting-started.html">Getting Started</a> | |
23 | + <a href="deployment.html">Deployment</a> | |
24 | + <a href="cli.html">CLI</a> | |
25 | + <a href="api.html">API</a> | |
26 | + </nav> | |
27 | + </header> | |
28 | + | |
29 | + <div class="layout"> | |
30 | + <aside class="sidebar"> | |
31 | + <div class="sidebar-section"> | |
32 | + <div class="sidebar-title">CLI</div> | |
33 | + <nav class="sidebar-nav"> | |
34 | + <a href="#installation" class="sidebar-link active">Installation</a> | |
35 | + <a href="#auth" class="sidebar-link">Authentication</a> | |
36 | + <a href="#stacked-prs" class="sidebar-link">Stacked PRs</a> | |
37 | + <a href="#commands" class="sidebar-link">All Commands</a> | |
38 | + </nav> | |
39 | + </div> | |
40 | + </aside> | |
41 | + | |
42 | + <main class="main"> | |
43 | + <div class="content"> | |
44 | + <h1>💻 CLI Reference</h1> | |
45 | + <p>Stack-first PR workflows from your terminal.</p> | |
46 | + | |
47 | + <section id="installation"> | |
48 | + <h2>📦 Installation</h2> | |
49 | + <div class="command-line"> | |
50 | + <span class="command-prompt">$</span> | |
51 | + <span class="command-text">npm install -g opencodehub-cli</span> | |
52 | + </div> | |
53 | + <div class="command-line"> | |
54 | + <span class="command-prompt">$</span> | |
55 | + <span class="command-text">och --version</span> | |
56 | + </div> | |
57 | + </section> | |
58 | + | |
59 | + <section id="auth"> | |
60 | + <h2>🔐 Authentication</h2> | |
61 | + <table> | |
62 | + <tr> | |
63 | + <td><code>och auth login</code></td> | |
64 | + <td>Interactive login</td> | |
65 | + </tr> | |
66 | + <tr> | |
67 | + <td><code>och auth login --token TOKEN</code></td> | |
68 | + <td>CI/CD token login</td> | |
69 | + </tr> | |
70 | + <tr> | |
71 | + <td><code>och auth whoami</code></td> | |
72 | + <td>Show current user</td> | |
73 | + </tr> | |
74 | + <tr> | |
75 | + <td><code>och auth logout</code></td> | |
76 | + <td>Clear credentials</td> | |
77 | + </tr> | |
78 | + </table> | |
79 | + </section> | |
80 | + | |
81 | + <section id="stacked-prs"> | |
82 | + <h2>📚 Stacked PRs</h2> | |
83 | + <p>Create dependent pull requests that auto-update when parents change.</p> | |
84 | + <table> | |
85 | + <tr> | |
86 | + <td><code>och stack create <name></code></td> | |
87 | + <td>Create new branch in stack</td> | |
88 | + </tr> | |
89 | + <tr> | |
90 | + <td><code>och stack view</code></td> | |
91 | + <td>View current stack</td> | |
92 | + </tr> | |
93 | + <tr> | |
94 | + <td><code>och stack submit</code></td> | |
95 | + <td>Push and create PRs</td> | |
96 | + </tr> | |
97 | + <tr> | |
98 | + <td><code>och stack sync</code></td> | |
99 | + <td>Rebase stack on main</td> | |
100 | + </tr> | |
101 | + </table> | |
102 | + <h3>Example</h3> | |
103 | + <pre><code>och stack create database-schema | |
104 | +git commit -m "Add tables" | |
105 | +och stack create auth-service | |
106 | +git commit -m "Add auth" | |
107 | +och stack submit # Creates 2 stacked PRs</code></pre> | |
108 | + </section> | |
109 | + | |
110 | + <section id="commands"> | |
111 | + <h2>📋 All Commands</h2> | |
112 | + <table> | |
113 | + <tr> | |
114 | + <td><code>och init</code></td> | |
115 | + <td>Initialize repo for OpenCodeHub</td> | |
116 | + </tr> | |
117 | + <tr> | |
118 | + <td><code>och status</code></td> | |
119 | + <td>Show stack status</td> | |
120 | + </tr> | |
121 | + <tr> | |
122 | + <td><code>och sync</code></td> | |
123 | + <td>Sync with remote</td> | |
124 | + </tr> | |
125 | + <tr> | |
126 | + <td><code>och config list</code></td> | |
127 | + <td>List configuration</td> | |
128 | + </tr> | |
129 | + </table> | |
130 | + </section> | |
131 | + | |
132 | + <footer | |
133 | + style="margin-top: 4rem; padding-top: 2rem; border-top: 1px solid var(--border-primary); text-align: center; color: var(--text-muted);"> | |
134 | + <p>Made with ❤️ by <a href="https://github.com/swadhinbiswas">Swadhin Biswas</a></p> | |
135 | + </footer> | |
136 | + </div> | |
137 | + </main> | |
138 | + </div> | |
139 | +</body> | |
140 | + | |
141 | +</html> | |
0 | 142 | |
▼docs-site/deployment.html
+533-0
| @@ -0,0 +1,533 @@ | ||
1 | +<!DOCTYPE html> | |
2 | +<html lang="en"> | |
3 | + | |
4 | +<head> | |
5 | + <meta charset="UTF-8"> | |
6 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
7 | + <title>Deployment Guide - OpenCodeHub Docs</title> | |
8 | + <meta name="description" | |
9 | + content="Complete deployment guide for OpenCodeHub - Docker, Vercel, VPS deployment tutorials"> | |
10 | + <link rel="icon" type="image/svg+xml" href="../public/logo.svg"> | |
11 | + <link rel="preconnect" href="https://fonts.googleapis.com"> | |
12 | + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
13 | + <link | |
14 | + href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" | |
15 | + rel="stylesheet"> | |
16 | + <link rel="stylesheet" href="styles.css"> | |
17 | +</head> | |
18 | + | |
19 | +<body> | |
20 | + <!-- Header --> | |
21 | + <header class="header"> | |
22 | + <a href="index.html" class="header-logo"> | |
23 | + <img src="../public/logo.svg" alt="OpenCodeHub" height="40"> | |
24 | + </a> | |
25 | + <nav class="header-nav"> | |
26 | + <a href="getting-started.html">Getting Started</a> | |
27 | + <a href="deployment.html">Deployment</a> | |
28 | + <a href="cli.html">CLI</a> | |
29 | + <a href="api.html">API</a> | |
30 | + <a href="https://github.com/swadhinbiswas/OpencodeHub" class="btn-github" target="_blank"> | |
31 | + <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> | |
32 | + <path | |
33 | + d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /> | |
34 | + </svg> | |
35 | + GitHub | |
36 | + </a> | |
37 | + </nav> | |
38 | + </header> | |
39 | + | |
40 | + <div class="layout"> | |
41 | + <!-- Sidebar --> | |
42 | + <aside class="sidebar"> | |
43 | + <div class="sidebar-section"> | |
44 | + <div class="sidebar-title">Getting Started</div> | |
45 | + <nav class="sidebar-nav"> | |
46 | + <a href="getting-started.html" class="sidebar-link"> | |
47 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
48 | + <path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" /> | |
49 | + </svg> | |
50 | + Quick Start | |
51 | + </a> | |
52 | + </nav> | |
53 | + </div> | |
54 | + | |
55 | + <div class="sidebar-section"> | |
56 | + <div class="sidebar-title">Deployment</div> | |
57 | + <nav class="sidebar-nav"> | |
58 | + <a href="deployment.html" class="sidebar-link active"> | |
59 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
60 | + <rect x="2" y="3" width="20" height="14" rx="2" ry="2" /> | |
61 | + <path d="M8 21h8M12 17v4" /> | |
62 | + </svg> | |
63 | + Overview | |
64 | + </a> | |
65 | + <a href="#docker" class="sidebar-link"> | |
66 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
67 | + <path | |
68 | + d="M22 12.5c0 .5-.5 1-1 1h-2v-2h2c.5 0 1 .5 1 1zM2 12.5c0-.5.5-1 1-1h2v2H3c-.5 0-1-.5-1-1z" /> | |
69 | + <rect x="6" y="9" width="12" height="6" rx="1" /> | |
70 | + </svg> | |
71 | + Docker | |
72 | + </a> | |
73 | + <a href="#vercel" class="sidebar-link"> | |
74 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
75 | + <polygon points="12 2 2 22 22 22" /> | |
76 | + </svg> | |
77 | + Vercel | |
78 | + </a> | |
79 | + <a href="#vps" class="sidebar-link"> | |
80 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
81 | + <rect x="2" y="2" width="20" height="8" rx="2" ry="2" /> | |
82 | + <rect x="2" y="14" width="20" height="8" rx="2" ry="2" /> | |
83 | + <line x1="6" y1="6" x2="6.01" y2="6" /> | |
84 | + <line x1="6" y1="18" x2="6.01" y2="18" /> | |
85 | + </svg> | |
86 | + VPS / Linux | |
87 | + </a> | |
88 | + <a href="#ssl" class="sidebar-link"> | |
89 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
90 | + <rect x="3" y="11" width="18" height="11" rx="2" ry="2" /> | |
91 | + <path d="M7 11V7a5 5 0 0110 0v4" /> | |
92 | + </svg> | |
93 | + SSL Setup | |
94 | + </a> | |
95 | + </nav> | |
96 | + </div> | |
97 | + | |
98 | + <div class="sidebar-section"> | |
99 | + <div class="sidebar-title">CLI</div> | |
100 | + <nav class="sidebar-nav"> | |
101 | + <a href="cli.html" class="sidebar-link"> | |
102 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
103 | + <polyline points="4 17 10 11 4 5" /> | |
104 | + <line x1="12" y1="19" x2="20" y2="19" /> | |
105 | + </svg> | |
106 | + CLI Reference | |
107 | + </a> | |
108 | + </nav> | |
109 | + </div> | |
110 | + </aside> | |
111 | + | |
112 | + <!-- Main Content --> | |
113 | + <main class="main"> | |
114 | + <div class="content"> | |
115 | + <h1>🚀 Deployment Guide</h1> | |
116 | + <p> | |
117 | + Deploy OpenCodeHub to your preferred platform. Choose Docker for simplicity, | |
118 | + Vercel for serverless, or VPS for full control. | |
119 | + </p> | |
120 | + | |
121 | + <!-- Overview --> | |
122 | + <section> | |
123 | + <h2>📋 Deployment Options</h2> | |
124 | + | |
125 | + <table> | |
126 | + <thead> | |
127 | + <tr> | |
128 | + <th>Platform</th> | |
129 | + <th>Difficulty</th> | |
130 | + <th>Best For</th> | |
131 | + <th>Estimated Time</th> | |
132 | + </tr> | |
133 | + </thead> | |
134 | + <tbody> | |
135 | + <tr> | |
136 | + <td><strong>🐳 Docker</strong></td> | |
137 | + <td><span class="badge badge-primary">Easy</span></td> | |
138 | + <td>Quick setup, self-hosted</td> | |
139 | + <td>5-10 minutes</td> | |
140 | + </tr> | |
141 | + <tr> | |
142 | + <td><strong>▲ Vercel</strong></td> | |
143 | + <td><span class="badge badge-primary">Easy</span></td> | |
144 | + <td>Serverless, auto-scaling</td> | |
145 | + <td>10-15 minutes</td> | |
146 | + </tr> | |
147 | + <tr> | |
148 | + <td><strong>🖥️ VPS</strong></td> | |
149 | + <td><span class="badge">Medium</span></td> | |
150 | + <td>Full control, bare metal</td> | |
151 | + <td>30-45 minutes</td> | |
152 | + </tr> | |
153 | + </tbody> | |
154 | + </table> | |
155 | + </section> | |
156 | + | |
157 | + <!-- Docker --> | |
158 | + <section id="docker"> | |
159 | + <h2>🐳 Docker Deployment</h2> | |
160 | + <p>The fastest way to get OpenCodeHub running. Includes PostgreSQL and all dependencies.</p> | |
161 | + | |
162 | + <div class="alert alert-info"> | |
163 | + <div class="alert-title">💡 Prerequisites</div> | |
164 | + <p>Docker 20.10+ and Docker Compose installed on your system.</p> | |
165 | + </div> | |
166 | + | |
167 | + <div class="steps"> | |
168 | + <div class="step"> | |
169 | + <div class="step-title">Clone the Repository</div> | |
170 | + <div class="step-content"> | |
171 | + <div class="command-line"> | |
172 | + <span class="command-prompt">$</span> | |
173 | + <span class="command-text">git clone | |
174 | + https://github.com/swadhinbiswas/OpencodeHub.git && cd OpenCodeHub</span> | |
175 | + </div> | |
176 | + </div> | |
177 | + </div> | |
178 | + | |
179 | + <div class="step"> | |
180 | + <div class="step-title">Configure Environment</div> | |
181 | + <div class="step-content"> | |
182 | + <p>Copy the example environment file and configure your secrets:</p> | |
183 | + <div class="command-line"> | |
184 | + <span class="command-prompt">$</span> | |
185 | + <span class="command-text">cp .env.example .env</span> | |
186 | + </div> | |
187 | + <p>Generate secure secrets for production:</p> | |
188 | + <pre><code># Generate secrets (copy these to your .env file) | |
189 | +openssl rand -hex 32 # For JWT_SECRET | |
190 | +openssl rand -hex 32 # For SESSION_SECRET | |
191 | +openssl rand -hex 32 # For INTERNAL_HOOK_SECRET</code></pre> | |
192 | + </div> | |
193 | + </div> | |
194 | + | |
195 | + <div class="step"> | |
196 | + <div class="step-title">Start Services</div> | |
197 | + <div class="step-content"> | |
198 | + <div class="command-line"> | |
199 | + <span class="command-prompt">$</span> | |
200 | + <span class="command-text">docker-compose up -d</span> | |
201 | + </div> | |
202 | + <p>This starts PostgreSQL and the OpenCodeHub application.</p> | |
203 | + </div> | |
204 | + </div> | |
205 | + | |
206 | + <div class="step"> | |
207 | + <div class="step-title">Create Admin User</div> | |
208 | + <div class="step-content"> | |
209 | + <div class="command-line"> | |
210 | + <span class="command-prompt">$</span> | |
211 | + <span class="command-text">docker-compose exec app bun run | |
212 | + scripts/seed-admin.ts</span> | |
213 | + </div> | |
214 | + <p>Follow the prompts to create your administrator account.</p> | |
215 | + </div> | |
216 | + </div> | |
217 | + | |
218 | + <div class="step"> | |
219 | + <div class="step-title">Access Your Instance</div> | |
220 | + <div class="step-content"> | |
221 | + <p>Open <code>http://localhost:3000</code> in your browser and log in with your admin | |
222 | + credentials.</p> | |
223 | + </div> | |
224 | + </div> | |
225 | + </div> | |
226 | + | |
227 | + <div class="card"> | |
228 | + <h3 class="card-title">📁 Docker Compose Configuration</h3> | |
229 | + <pre><code>version: '3.8' | |
230 | +services: | |
231 | + app: | |
232 | + build: . | |
233 | + ports: | |
234 | + - "3000:3000" | |
235 | + environment: | |
236 | + - DATABASE_URL=postgresql://postgres:password@db:5432/opencodehub | |
237 | + - NODE_ENV=production | |
238 | + depends_on: | |
239 | + - db | |
240 | + volumes: | |
241 | + - ./repos:/app/repos | |
242 | + - ./data:/app/data | |
243 | + | |
244 | + db: | |
245 | + image: postgres:15-alpine | |
246 | + environment: | |
247 | + - POSTGRES_USER=postgres | |
248 | + - POSTGRES_PASSWORD=password | |
249 | + - POSTGRES_DB=opencodehub | |
250 | + volumes: | |
251 | + - postgres_data:/var/lib/postgresql/data | |
252 | + | |
253 | +volumes: | |
254 | + postgres_data:</code></pre> | |
255 | + </div> | |
256 | + </section> | |
257 | + | |
258 | + <!-- Vercel --> | |
259 | + <section id="vercel"> | |
260 | + <h2>▲ Vercel Deployment</h2> | |
261 | + <p>Deploy OpenCodeHub as a serverless application with automatic scaling.</p> | |
262 | + | |
263 | + <div class="alert alert-warning"> | |
264 | + <div class="alert-title">⚠️ Important Note</div> | |
265 | + <p>Git repository storage requires external storage (S3, R2, etc.) when using Vercel.</p> | |
266 | + </div> | |
267 | + | |
268 | + <div class="steps"> | |
269 | + <div class="step"> | |
270 | + <div class="step-title">Fork the Repository</div> | |
271 | + <div class="step-content"> | |
272 | + <p>Fork <a href="https://github.com/swadhinbiswas/OpencodeHub">OpenCodeHub on GitHub</a> | |
273 | + to your account.</p> | |
274 | + </div> | |
275 | + </div> | |
276 | + | |
277 | + <div class="step"> | |
278 | + <div class="step-title">Import to Vercel</div> | |
279 | + <div class="step-content"> | |
280 | + <p>Go to <a href="https://vercel.com/new">vercel.com/new</a> and import your forked | |
281 | + repository.</p> | |
282 | + </div> | |
283 | + </div> | |
284 | + | |
285 | + <div class="step"> | |
286 | + <div class="step-title">Configure Environment Variables</div> | |
287 | + <div class="step-content"> | |
288 | + <p>Add the following environment variables in Vercel project settings:</p> | |
289 | + <table> | |
290 | + <thead> | |
291 | + <tr> | |
292 | + <th>Variable</th> | |
293 | + <th>Description</th> | |
294 | + </tr> | |
295 | + </thead> | |
296 | + <tbody> | |
297 | + <tr> | |
298 | + <td><code>DATABASE_URL</code></td> | |
299 | + <td>PostgreSQL connection string (use Vercel Postgres or external)</td> | |
300 | + </tr> | |
301 | + <tr> | |
302 | + <td><code>JWT_SECRET</code></td> | |
303 | + <td>32+ character secret for JWT tokens</td> | |
304 | + </tr> | |
305 | + <tr> | |
306 | + <td><code>SESSION_SECRET</code></td> | |
307 | + <td>32+ character secret for sessions</td> | |
308 | + </tr> | |
309 | + <tr> | |
310 | + <td><code>SITE_URL</code></td> | |
311 | + <td>Your Vercel deployment URL</td> | |
312 | + </tr> | |
313 | + <tr> | |
314 | + <td><code>STORAGE_TYPE</code></td> | |
315 | + <td>Set to <code>s3</code> for cloud storage</td> | |
316 | + </tr> | |
317 | + </tbody> | |
318 | + </table> | |
319 | + </div> | |
320 | + </div> | |
321 | + | |
322 | + <div class="step"> | |
323 | + <div class="step-title">Deploy</div> | |
324 | + <div class="step-content"> | |
325 | + <p>Click "Deploy" and wait for the build to complete. Your instance will be available at | |
326 | + your Vercel URL.</p> | |
327 | + </div> | |
328 | + </div> | |
329 | + </div> | |
330 | + </section> | |
331 | + | |
332 | + <!-- VPS --> | |
333 | + <section id="vps"> | |
334 | + <h2>🖥️ VPS / Linux Deployment</h2> | |
335 | + <p>Full control deployment on any Linux server with systemd and Nginx.</p> | |
336 | + | |
337 | + <div class="alert alert-info"> | |
338 | + <div class="alert-title">💡 Recommended Specs</div> | |
339 | + <p>2+ CPU cores, 4GB+ RAM, 50GB+ SSD. Ubuntu 22.04 or Debian 12 recommended.</p> | |
340 | + </div> | |
341 | + | |
342 | + <div class="steps"> | |
343 | + <div class="step"> | |
344 | + <div class="step-title">Install Dependencies</div> | |
345 | + <div class="step-content"> | |
346 | + <pre><code># Update system | |
347 | +sudo apt update && sudo apt upgrade -y | |
348 | + | |
349 | +# Install Node.js 20 | |
350 | +curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - | |
351 | +sudo apt install -y nodejs | |
352 | + | |
353 | +# Install PostgreSQL | |
354 | +sudo apt install -y postgresql postgresql-contrib | |
355 | + | |
356 | +# Install Git and Nginx | |
357 | +sudo apt install -y git nginx certbot python3-certbot-nginx</code></pre> | |
358 | + </div> | |
359 | + </div> | |
360 | + | |
361 | + <div class="step"> | |
362 | + <div class="step-title">Setup PostgreSQL</div> | |
363 | + <div class="step-content"> | |
364 | + <pre><code># Create database and user | |
365 | +sudo -u postgres psql | |
366 | + | |
367 | +CREATE USER opencodehub WITH PASSWORD 'your-secure-password'; | |
368 | +CREATE DATABASE opencodehub OWNER opencodehub; | |
369 | +GRANT ALL PRIVILEGES ON DATABASE opencodehub TO opencodehub; | |
370 | +\q</code></pre> | |
371 | + </div> | |
372 | + </div> | |
373 | + | |
374 | + <div class="step"> | |
375 | + <div class="step-title">Clone and Configure</div> | |
376 | + <div class="step-content"> | |
377 | + <pre><code># Clone repository | |
378 | +cd /opt | |
379 | +sudo git clone https://github.com/swadhinbiswas/OpencodeHub.git | |
380 | +cd OpenCodeHub | |
381 | + | |
382 | +# Install dependencies | |
383 | +sudo npm install | |
384 | + | |
385 | +# Configure environment | |
386 | +sudo cp .env.example .env | |
387 | +sudo nano .env # Edit with your production values | |
388 | + | |
389 | +# Run migrations | |
390 | +sudo npm run db:push | |
391 | + | |
392 | +# Build for production | |
393 | +sudo npm run build</code></pre> | |
394 | + </div> | |
395 | + </div> | |
396 | + | |
397 | + <div class="step"> | |
398 | + <div class="step-title">Create Systemd Service</div> | |
399 | + <div class="step-content"> | |
400 | + <pre><code># Create service file | |
401 | +sudo nano /etc/systemd/system/opencodehub.service</code></pre> | |
402 | + <pre><code>[Unit] | |
403 | +Description=OpenCodeHub | |
404 | +After=network.target postgresql.service | |
405 | + | |
406 | +[Service] | |
407 | +Type=simple | |
408 | +User=www-data | |
409 | +WorkingDirectory=/opt/OpenCodeHub | |
410 | +ExecStart=/usr/bin/node dist/server/entry.mjs | |
411 | +Restart=on-failure | |
412 | +Environment=NODE_ENV=production | |
413 | + | |
414 | +[Install] | |
415 | +WantedBy=multi-user.target</code></pre> | |
416 | + <pre><code># Enable and start service | |
417 | +sudo systemctl enable opencodehub | |
418 | +sudo systemctl start opencodehub</code></pre> | |
419 | + </div> | |
420 | + </div> | |
421 | + | |
422 | + <div class="step"> | |
423 | + <div class="step-title">Configure Nginx</div> | |
424 | + <div class="step-content"> | |
425 | + <pre><code># Create Nginx config | |
426 | +sudo nano /etc/nginx/sites-available/opencodehub</code></pre> | |
427 | + <pre><code>server { | |
428 | + listen 80; | |
429 | + server_name git.yourdomain.com; | |
430 | + | |
431 | + location / { | |
432 | + proxy_pass http://127.0.0.1:3000; | |
433 | + proxy_http_version 1.1; | |
434 | + proxy_set_header Upgrade $http_upgrade; | |
435 | + proxy_set_header Connection 'upgrade'; | |
436 | + proxy_set_header Host $host; | |
437 | + proxy_set_header X-Real-IP $remote_addr; | |
438 | + proxy_cache_bypass $http_upgrade; | |
439 | + } | |
440 | +}</code></pre> | |
441 | + <pre><code># Enable site | |
442 | +sudo ln -s /etc/nginx/sites-available/opencodehub /etc/nginx/sites-enabled/ | |
443 | +sudo nginx -t && sudo systemctl reload nginx</code></pre> | |
444 | + </div> | |
445 | + </div> | |
446 | + </div> | |
447 | + </section> | |
448 | + | |
449 | + <!-- SSL --> | |
450 | + <section id="ssl"> | |
451 | + <h2>🔐 SSL Certificate Setup</h2> | |
452 | + <p>Secure your OpenCodeHub instance with HTTPS using Let's Encrypt.</p> | |
453 | + | |
454 | + <div class="steps"> | |
455 | + <div class="step"> | |
456 | + <div class="step-title">Install Certbot</div> | |
457 | + <div class="step-content"> | |
458 | + <div class="command-line"> | |
459 | + <span class="command-prompt">$</span> | |
460 | + <span class="command-text">sudo apt install certbot python3-certbot-nginx</span> | |
461 | + </div> | |
462 | + </div> | |
463 | + </div> | |
464 | + | |
465 | + <div class="step"> | |
466 | + <div class="step-title">Obtain Certificate</div> | |
467 | + <div class="step-content"> | |
468 | + <div class="command-line"> | |
469 | + <span class="command-prompt">$</span> | |
470 | + <span class="command-text">sudo certbot --nginx -d git.yourdomain.com</span> | |
471 | + </div> | |
472 | + <p>Follow the prompts. Certbot will automatically configure Nginx for HTTPS.</p> | |
473 | + </div> | |
474 | + </div> | |
475 | + | |
476 | + <div class="step"> | |
477 | + <div class="step-title">Auto-Renewal</div> | |
478 | + <div class="step-content"> | |
479 | + <p>Certbot automatically sets up certificate renewal. Test it with:</p> | |
480 | + <div class="command-line"> | |
481 | + <span class="command-prompt">$</span> | |
482 | + <span class="command-text">sudo certbot renew --dry-run</span> | |
483 | + </div> | |
484 | + </div> | |
485 | + </div> | |
486 | + </div> | |
487 | + </section> | |
488 | + | |
489 | + <!-- Production Checklist --> | |
490 | + <section> | |
491 | + <h2>✅ Production Checklist</h2> | |
492 | + | |
493 | + <div class="card"> | |
494 | + <h3 class="card-title">Before Going Live</h3> | |
495 | + <ul> | |
496 | + <li>✅ Set strong secrets (JWT_SECRET, SESSION_SECRET, INTERNAL_HOOK_SECRET)</li> | |
497 | + <li>✅ Configure HTTPS with valid SSL certificate</li> | |
498 | + <li>✅ Set correct SITE_URL in environment</li> | |
499 | + <li>✅ Enable rate limiting (RATE_LIMIT_SKIP_DEV=false)</li> | |
500 | + <li>✅ Enable CSRF protection (CSRF_SKIP_DEV=false)</li> | |
501 | + <li>✅ Configure database backups</li> | |
502 | + <li>✅ Set up monitoring and alerts</li> | |
503 | + <li>✅ Create admin account with 2FA</li> | |
504 | + </ul> | |
505 | + </div> | |
506 | + </section> | |
507 | + | |
508 | + <!-- Footer --> | |
509 | + <footer | |
510 | + style="margin-top: 4rem; padding-top: 2rem; border-top: 1px solid var(--border-primary); text-align: center; color: var(--text-muted);"> | |
511 | + <p> | |
512 | + Made with ❤️ by <a href="https://github.com/swadhinbiswas">Swadhin Biswas</a> • | |
513 | + <a href="https://github.com/swadhinbiswas/OpencodeHub">GitHub</a> | |
514 | + </p> | |
515 | + </footer> | |
516 | + </div> | |
517 | + </main> | |
518 | + </div> | |
519 | + | |
520 | + <script> | |
521 | + // Smooth scroll for anchor links | |
522 | + document.querySelectorAll('a[href^="#"]').forEach(anchor => { | |
523 | + anchor.addEventListener('click', function (e) { | |
524 | + e.preventDefault(); | |
525 | + document.querySelector(this.getAttribute('href')).scrollIntoView({ | |
526 | + behavior: 'smooth' | |
527 | + }); | |
528 | + }); | |
529 | + }); | |
530 | + </script> | |
531 | +</body> | |
532 | + | |
533 | +</html> | |
0 | 534 | |
▼docs-site/getting-started.html
+373-0
| @@ -0,0 +1,373 @@ | ||
1 | +<!DOCTYPE html> | |
2 | +<html lang="en"> | |
3 | + | |
4 | +<head> | |
5 | + <meta charset="UTF-8"> | |
6 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
7 | + <title>Getting Started - OpenCodeHub Docs</title> | |
8 | + <meta name="description" content="Get started with OpenCodeHub - Installation, configuration, and first steps"> | |
9 | + <link rel="icon" type="image/svg+xml" href="../public/logo.svg"> | |
10 | + <link rel="preconnect" href="https://fonts.googleapis.com"> | |
11 | + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
12 | + <link | |
13 | + href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" | |
14 | + rel="stylesheet"> | |
15 | + <link rel="stylesheet" href="styles.css"> | |
16 | +</head> | |
17 | + | |
18 | +<body> | |
19 | + <!-- Header --> | |
20 | + <header class="header"> | |
21 | + <a href="index.html" class="header-logo"> | |
22 | + <img src="../public/logo.svg" alt="OpenCodeHub" height="40"> | |
23 | + </a> | |
24 | + <nav class="header-nav"> | |
25 | + <a href="getting-started.html">Getting Started</a> | |
26 | + <a href="deployment.html">Deployment</a> | |
27 | + <a href="cli.html">CLI</a> | |
28 | + <a href="api.html">API</a> | |
29 | + <a href="https://github.com/swadhinbiswas/OpencodeHub" class="btn-github" target="_blank"> | |
30 | + <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> | |
31 | + <path | |
32 | + d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /> | |
33 | + </svg> | |
34 | + GitHub | |
35 | + </a> | |
36 | + </nav> | |
37 | + </header> | |
38 | + | |
39 | + <div class="layout"> | |
40 | + <!-- Sidebar --> | |
41 | + <aside class="sidebar"> | |
42 | + <div class="sidebar-section"> | |
43 | + <div class="sidebar-title">Getting Started</div> | |
44 | + <nav class="sidebar-nav"> | |
45 | + <a href="getting-started.html" class="sidebar-link active"> | |
46 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
47 | + <path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" /> | |
48 | + </svg> | |
49 | + Quick Start | |
50 | + </a> | |
51 | + <a href="#installation" class="sidebar-link"> | |
52 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
53 | + <path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3" /> | |
54 | + </svg> | |
55 | + Installation | |
56 | + </a> | |
57 | + <a href="#configuration" class="sidebar-link"> | |
58 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
59 | + <circle cx="12" cy="12" r="3" /> | |
60 | + <path | |
61 | + d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z" /> | |
62 | + </svg> | |
63 | + Configuration | |
64 | + </a> | |
65 | + <a href="#first-repo" class="sidebar-link"> | |
66 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
67 | + <path d="M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V5a2 2 0 012-2h5l2 3h9a2 2 0 012 2z" /> | |
68 | + </svg> | |
69 | + First Repository | |
70 | + </a> | |
71 | + </nav> | |
72 | + </div> | |
73 | + | |
74 | + <div class="sidebar-section"> | |
75 | + <div class="sidebar-title">Deployment</div> | |
76 | + <nav class="sidebar-nav"> | |
77 | + <a href="deployment.html" class="sidebar-link"> | |
78 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
79 | + <rect x="2" y="3" width="20" height="14" rx="2" ry="2" /> | |
80 | + <path d="M8 21h8M12 17v4" /> | |
81 | + </svg> | |
82 | + Overview | |
83 | + </a> | |
84 | + </nav> | |
85 | + </div> | |
86 | + | |
87 | + <div class="sidebar-section"> | |
88 | + <div class="sidebar-title">CLI</div> | |
89 | + <nav class="sidebar-nav"> | |
90 | + <a href="cli.html" class="sidebar-link"> | |
91 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
92 | + <polyline points="4 17 10 11 4 5" /> | |
93 | + <line x1="12" y1="19" x2="20" y2="19" /> | |
94 | + </svg> | |
95 | + CLI Reference | |
96 | + </a> | |
97 | + </nav> | |
98 | + </div> | |
99 | + </aside> | |
100 | + | |
101 | + <!-- Main Content --> | |
102 | + <main class="main"> | |
103 | + <div class="content"> | |
104 | + <h1>🚀 Getting Started</h1> | |
105 | + <p> | |
106 | + Get OpenCodeHub running locally in under 5 minutes. This guide covers installation, | |
107 | + configuration, and creating your first repository. | |
108 | + </p> | |
109 | + | |
110 | + <!-- Prerequisites --> | |
111 | + <section> | |
112 | + <h2>📋 Prerequisites</h2> | |
113 | + | |
114 | + <div class="feature-grid"> | |
115 | + <div class="card"> | |
116 | + <h3 class="card-title"> | |
117 | + <span>📦</span> Node.js 18+ | |
118 | + </h3> | |
119 | + <p class="card-description"> | |
120 | + JavaScript runtime for the application. <a href="https://nodejs.org">Download | |
121 | + Node.js</a> | |
122 | + </p> | |
123 | + </div> | |
124 | + <div class="card"> | |
125 | + <h3 class="card-title"> | |
126 | + <span>🗄️</span> Database | |
127 | + </h3> | |
128 | + <p class="card-description"> | |
129 | + PostgreSQL 14+ (recommended), MySQL 8+, or SQLite 3.35+ | |
130 | + </p> | |
131 | + </div> | |
132 | + <div class="card"> | |
133 | + <h3 class="card-title"> | |
134 | + <span>🔀</span> Git 2.30+ | |
135 | + </h3> | |
136 | + <p class="card-description"> | |
137 | + For repository management. Usually pre-installed on Linux/macOS. | |
138 | + </p> | |
139 | + </div> | |
140 | + </div> | |
141 | + </section> | |
142 | + | |
143 | + <!-- Installation --> | |
144 | + <section id="installation"> | |
145 | + <h2>📥 Installation</h2> | |
146 | + | |
147 | + <div class="steps"> | |
148 | + <div class="step"> | |
149 | + <div class="step-title">Clone the Repository</div> | |
150 | + <div class="step-content"> | |
151 | + <div class="command-line"> | |
152 | + <span class="command-prompt">$</span> | |
153 | + <span class="command-text">git clone | |
154 | + https://github.com/swadhinbiswas/OpencodeHub.git</span> | |
155 | + </div> | |
156 | + <div class="command-line"> | |
157 | + <span class="command-prompt">$</span> | |
158 | + <span class="command-text">cd OpenCodeHub</span> | |
159 | + </div> | |
160 | + </div> | |
161 | + </div> | |
162 | + | |
163 | + <div class="step"> | |
164 | + <div class="step-title">Install Dependencies</div> | |
165 | + <div class="step-content"> | |
166 | + <div class="command-line"> | |
167 | + <span class="command-prompt">$</span> | |
168 | + <span class="command-text">npm install</span> | |
169 | + </div> | |
170 | + <p>Or use Bun for faster installation:</p> | |
171 | + <div class="command-line"> | |
172 | + <span class="command-prompt">$</span> | |
173 | + <span class="command-text">bun install</span> | |
174 | + </div> | |
175 | + </div> | |
176 | + </div> | |
177 | + | |
178 | + <div class="step"> | |
179 | + <div class="step-title">Configure Environment</div> | |
180 | + <div class="step-content"> | |
181 | + <div class="command-line"> | |
182 | + <span class="command-prompt">$</span> | |
183 | + <span class="command-text">cp .env.example .env</span> | |
184 | + </div> | |
185 | + <p>Edit <code>.env</code> with your database connection and secrets.</p> | |
186 | + </div> | |
187 | + </div> | |
188 | + | |
189 | + <div class="step"> | |
190 | + <div class="step-title">Setup Database</div> | |
191 | + <div class="step-content"> | |
192 | + <div class="command-line"> | |
193 | + <span class="command-prompt">$</span> | |
194 | + <span class="command-text">npm run db:push</span> | |
195 | + </div> | |
196 | + <p>This creates all required database tables.</p> | |
197 | + </div> | |
198 | + </div> | |
199 | + | |
200 | + <div class="step"> | |
201 | + <div class="step-title">Create Admin User</div> | |
202 | + <div class="step-content"> | |
203 | + <div class="command-line"> | |
204 | + <span class="command-prompt">$</span> | |
205 | + <span class="command-text">bun run scripts/seed-admin.ts</span> | |
206 | + </div> | |
207 | + <p>Follow the prompts to set username, email, and password.</p> | |
208 | + </div> | |
209 | + </div> | |
210 | + | |
211 | + <div class="step"> | |
212 | + <div class="step-title">Start Server</div> | |
213 | + <div class="step-content"> | |
214 | + <div class="command-line"> | |
215 | + <span class="command-prompt">$</span> | |
216 | + <span class="command-text">npm run dev</span> | |
217 | + </div> | |
218 | + <p>Open <code>http://localhost:3000</code> in your browser!</p> | |
219 | + </div> | |
220 | + </div> | |
221 | + </div> | |
222 | + </section> | |
223 | + | |
224 | + <!-- Configuration --> | |
225 | + <section id="configuration"> | |
226 | + <h2>⚙️ Configuration</h2> | |
227 | + <p>Key environment variables to configure:</p> | |
228 | + | |
229 | + <table> | |
230 | + <thead> | |
231 | + <tr> | |
232 | + <th>Variable</th> | |
233 | + <th>Required</th> | |
234 | + <th>Description</th> | |
235 | + </tr> | |
236 | + </thead> | |
237 | + <tbody> | |
238 | + <tr> | |
239 | + <td><code>DATABASE_URL</code></td> | |
240 | + <td>✅</td> | |
241 | + <td>Database connection string</td> | |
242 | + </tr> | |
243 | + <tr> | |
244 | + <td><code>JWT_SECRET</code></td> | |
245 | + <td>✅</td> | |
246 | + <td>Secret for JWT tokens (32+ chars)</td> | |
247 | + </tr> | |
248 | + <tr> | |
249 | + <td><code>SESSION_SECRET</code></td> | |
250 | + <td>✅</td> | |
251 | + <td>Secret for sessions (32+ chars)</td> | |
252 | + </tr> | |
253 | + <tr> | |
254 | + <td><code>SITE_URL</code></td> | |
255 | + <td>✅</td> | |
256 | + <td>Your site URL (e.g., https://git.example.com)</td> | |
257 | + </tr> | |
258 | + <tr> | |
259 | + <td><code>INTERNAL_HOOK_SECRET</code></td> | |
260 | + <td>✅</td> | |
261 | + <td>Secret for Git hooks (32+ chars)</td> | |
262 | + </tr> | |
263 | + <tr> | |
264 | + <td><code>STORAGE_TYPE</code></td> | |
265 | + <td>❌</td> | |
266 | + <td>local, s3, gcs, or azure</td> | |
267 | + </tr> | |
268 | + </tbody> | |
269 | + </table> | |
270 | + | |
271 | + <div class="alert alert-success"> | |
272 | + <div class="alert-title">💡 Generating Secrets</div> | |
273 | + <p>Generate secure secrets with: <code>openssl rand -hex 32</code></p> | |
274 | + </div> | |
275 | + </section> | |
276 | + | |
277 | + <!-- First Repository --> | |
278 | + <section id="first-repo"> | |
279 | + <h2>📁 Create Your First Repository</h2> | |
280 | + | |
281 | + <div class="steps"> | |
282 | + <div class="step"> | |
283 | + <div class="step-title">Login to OpenCodeHub</div> | |
284 | + <div class="step-content"> | |
285 | + <p>Navigate to <code>http://localhost:3000/login</code> and sign in with your admin | |
286 | + credentials.</p> | |
287 | + </div> | |
288 | + </div> | |
289 | + | |
290 | + <div class="step"> | |
291 | + <div class="step-title">Create Repository</div> | |
292 | + <div class="step-content"> | |
293 | + <p>Click the <strong>+</strong> button in the header and select <strong>New | |
294 | + Repository</strong>.</p> | |
295 | + <p>Fill in the repository name, description, and visibility settings.</p> | |
296 | + </div> | |
297 | + </div> | |
298 | + | |
299 | + <div class="step"> | |
300 | + <div class="step-title">Clone Locally</div> | |
301 | + <div class="step-content"> | |
302 | + <div class="command-line"> | |
303 | + <span class="command-prompt">$</span> | |
304 | + <span class="command-text">git clone | |
305 | + http://localhost:3000/your-username/repo-name.git</span> | |
306 | + </div> | |
307 | + </div> | |
308 | + </div> | |
309 | + | |
310 | + <div class="step"> | |
311 | + <div class="step-title">Push Your Code</div> | |
312 | + <div class="step-content"> | |
313 | + <pre><code>cd repo-name | |
314 | +echo "# My Project" > README.md | |
315 | +git add . | |
316 | +git commit -m "Initial commit" | |
317 | +git push origin main</code></pre> | |
318 | + </div> | |
319 | + </div> | |
320 | + </div> | |
321 | + </section> | |
322 | + | |
323 | + <!-- Next Steps --> | |
324 | + <section> | |
325 | + <h2>📚 Next Steps</h2> | |
326 | + | |
327 | + <div class="feature-grid"> | |
328 | + <a href="cli.html" class="card" style="text-decoration: none;"> | |
329 | + <h3 class="card-title">💻 Install CLI</h3> | |
330 | + <p class="card-description"> | |
331 | + Set up the OCH CLI for stacked PRs and terminal workflows. | |
332 | + </p> | |
333 | + </a> | |
334 | + <a href="deployment.html" class="card" style="text-decoration: none;"> | |
335 | + <h3 class="card-title">🚀 Production Deploy</h3> | |
336 | + <p class="card-description"> | |
337 | + Deploy to Docker, Vercel, or your own VPS with SSL. | |
338 | + </p> | |
339 | + </a> | |
340 | + <a href="api.html" class="card" style="text-decoration: none;"> | |
341 | + <h3 class="card-title">🔌 API Integration</h3> | |
342 | + <p class="card-description"> | |
343 | + Integrate OpenCodeHub with your existing tools. | |
344 | + </p> | |
345 | + </a> | |
346 | + </div> | |
347 | + </section> | |
348 | + | |
349 | + <!-- Footer --> | |
350 | + <footer | |
351 | + style="margin-top: 4rem; padding-top: 2rem; border-top: 1px solid var(--border-primary); text-align: center; color: var(--text-muted);"> | |
352 | + <p> | |
353 | + Made with ❤️ by <a href="https://github.com/swadhinbiswas">Swadhin Biswas</a> • | |
354 | + <a href="https://github.com/swadhinbiswas/OpencodeHub">GitHub</a> | |
355 | + </p> | |
356 | + </footer> | |
357 | + </div> | |
358 | + </main> | |
359 | + </div> | |
360 | + | |
361 | + <script> | |
362 | + document.querySelectorAll('a[href^="#"]').forEach(anchor => { | |
363 | + anchor.addEventListener('click', function (e) { | |
364 | + e.preventDefault(); | |
365 | + document.querySelector(this.getAttribute('href')).scrollIntoView({ | |
366 | + behavior: 'smooth' | |
367 | + }); | |
368 | + }); | |
369 | + }); | |
370 | + </script> | |
371 | +</body> | |
372 | + | |
373 | +</html> | |
0 | 374 | |
▼docs-site/index.html
+335-0
| @@ -0,0 +1,335 @@ | ||
1 | +<!DOCTYPE html> | |
2 | +<html lang="en"> | |
3 | + | |
4 | +<head> | |
5 | + <meta charset="UTF-8"> | |
6 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
7 | + <title>OpenCodeHub Documentation</title> | |
8 | + <meta name="description" | |
9 | + content="Complete documentation for OpenCodeHub - Self-hosted Git platform with stacked PRs, AI review, and CI/CD"> | |
10 | + <link rel="icon" type="image/svg+xml" href="../public/logo.svg"> | |
11 | + <link rel="preconnect" href="https://fonts.googleapis.com"> | |
12 | + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
13 | + <link | |
14 | + href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap" | |
15 | + rel="stylesheet"> | |
16 | + <link rel="stylesheet" href="styles.css"> | |
17 | +</head> | |
18 | + | |
19 | +<body> | |
20 | + <!-- Header --> | |
21 | + <header class="header"> | |
22 | + <a href="index.html" class="header-logo"> | |
23 | + <img src="../public/logo.svg" alt="OpenCodeHub" height="40"> | |
24 | + </a> | |
25 | + <nav class="header-nav"> | |
26 | + <a href="getting-started.html">Getting Started</a> | |
27 | + <a href="deployment.html">Deployment</a> | |
28 | + <a href="cli.html">CLI</a> | |
29 | + <a href="api.html">API</a> | |
30 | + <a href="https://github.com/swadhinbiswas/OpencodeHub" class="btn-github" target="_blank"> | |
31 | + <svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"> | |
32 | + <path | |
33 | + d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /> | |
34 | + </svg> | |
35 | + GitHub | |
36 | + </a> | |
37 | + </nav> | |
38 | + </header> | |
39 | + | |
40 | + <div class="layout"> | |
41 | + <!-- Sidebar --> | |
42 | + <aside class="sidebar"> | |
43 | + <div class="sidebar-section"> | |
44 | + <div class="sidebar-title">Getting Started</div> | |
45 | + <nav class="sidebar-nav"> | |
46 | + <a href="getting-started.html" class="sidebar-link active"> | |
47 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
48 | + <path d="M13 2L3 14h9l-1 8 10-12h-9l1-8z" /> | |
49 | + </svg> | |
50 | + Quick Start | |
51 | + </a> | |
52 | + <a href="getting-started.html#installation" class="sidebar-link"> | |
53 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
54 | + <path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3" /> | |
55 | + </svg> | |
56 | + Installation | |
57 | + </a> | |
58 | + <a href="getting-started.html#configuration" class="sidebar-link"> | |
59 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
60 | + <circle cx="12" cy="12" r="3" /> | |
61 | + <path | |
62 | + d="M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z" /> | |
63 | + </svg> | |
64 | + Configuration | |
65 | + </a> | |
66 | + </nav> | |
67 | + </div> | |
68 | + | |
69 | + <div class="sidebar-section"> | |
70 | + <div class="sidebar-title">Deployment</div> | |
71 | + <nav class="sidebar-nav"> | |
72 | + <a href="deployment.html" class="sidebar-link"> | |
73 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
74 | + <rect x="2" y="3" width="20" height="14" rx="2" ry="2" /> | |
75 | + <path d="M8 21h8M12 17v4" /> | |
76 | + </svg> | |
77 | + Overview | |
78 | + </a> | |
79 | + <a href="deployment.html#docker" class="sidebar-link"> | |
80 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
81 | + <path | |
82 | + d="M22 12.5c0 .5-.5 1-1 1h-2v-2h2c.5 0 1 .5 1 1zM2 12.5c0-.5.5-1 1-1h2v2H3c-.5 0-1-.5-1-1z" /> | |
83 | + <rect x="6" y="9" width="12" height="6" rx="1" /> | |
84 | + <rect x="8" y="11" width="2" height="2" /> | |
85 | + <rect x="11" y="11" width="2" height="2" /> | |
86 | + <rect x="14" y="11" width="2" height="2" /> | |
87 | + </svg> | |
88 | + Docker | |
89 | + </a> | |
90 | + <a href="deployment.html#vercel" class="sidebar-link"> | |
91 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
92 | + <polygon points="12 2 2 22 22 22" /> | |
93 | + </svg> | |
94 | + Vercel | |
95 | + </a> | |
96 | + <a href="deployment.html#vps" class="sidebar-link"> | |
97 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
98 | + <rect x="2" y="2" width="20" height="8" rx="2" ry="2" /> | |
99 | + <rect x="2" y="14" width="20" height="8" rx="2" ry="2" /> | |
100 | + <line x1="6" y1="6" x2="6.01" y2="6" /> | |
101 | + <line x1="6" y1="18" x2="6.01" y2="18" /> | |
102 | + </svg> | |
103 | + VPS / Linux | |
104 | + </a> | |
105 | + </nav> | |
106 | + </div> | |
107 | + | |
108 | + <div class="sidebar-section"> | |
109 | + <div class="sidebar-title">CLI</div> | |
110 | + <nav class="sidebar-nav"> | |
111 | + <a href="cli.html" class="sidebar-link"> | |
112 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
113 | + <polyline points="4 17 10 11 4 5" /> | |
114 | + <line x1="12" y1="19" x2="20" y2="19" /> | |
115 | + </svg> | |
116 | + CLI Reference | |
117 | + </a> | |
118 | + <a href="cli.html#stacked-prs" class="sidebar-link"> | |
119 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
120 | + <path d="M16 4h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2" /> | |
121 | + <rect x="8" y="2" width="8" height="4" rx="1" ry="1" /> | |
122 | + </svg> | |
123 | + Stacked PRs | |
124 | + </a> | |
125 | + </nav> | |
126 | + </div> | |
127 | + | |
128 | + <div class="sidebar-section"> | |
129 | + <div class="sidebar-title">API</div> | |
130 | + <nav class="sidebar-nav"> | |
131 | + <a href="api.html" class="sidebar-link"> | |
132 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
133 | + <path d="M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z" /> | |
134 | + <polyline points="14 2 14 8 20 8" /> | |
135 | + <line x1="16" y1="13" x2="8" y2="13" /> | |
136 | + <line x1="16" y1="17" x2="8" y2="17" /> | |
137 | + <polyline points="10 9 9 9 8 9" /> | |
138 | + </svg> | |
139 | + REST API | |
140 | + </a> | |
141 | + <a href="api.html#webhooks" class="sidebar-link"> | |
142 | + <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"> | |
143 | + <path d="M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71" /> | |
144 | + <path d="M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71" /> | |
145 | + </svg> | |
146 | + Webhooks | |
147 | + </a> | |
148 | + </nav> | |
149 | + </div> | |
150 | + </aside> | |
151 | + | |
152 | + <!-- Main Content --> | |
153 | + <main class="main"> | |
154 | + <div class="content"> | |
155 | + <!-- Hero Section --> | |
156 | + <section class="hero animate-fade-in"> | |
157 | + <h1>OpenCodeHub Documentation</h1> | |
158 | + <p class="hero-subtitle"> | |
159 | + Everything you need to deploy, configure, and master OpenCodeHub - | |
160 | + the self-hosted Git platform with stacked PRs, AI review, and CI/CD. | |
161 | + </p> | |
162 | + <div class="hero-buttons"> | |
163 | + <a href="getting-started.html" class="btn btn-primary"> | |
164 | + <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" | |
165 | + stroke-width="2"> | |
166 | + <polygon points="5 3 19 12 5 21 5 3" /> | |
167 | + </svg> | |
168 | + Get Started | |
169 | + </a> | |
170 | + <a href="deployment.html" class="btn btn-secondary"> | |
171 | + <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" | |
172 | + stroke-width="2"> | |
173 | + <path | |
174 | + d="M21 16V8a2 2 0 00-1-1.73l-7-4a2 2 0 00-2 0l-7 4A2 2 0 003 8v8a2 2 0 001 1.73l7 4a2 2 0 002 0l7-4A2 2 0 0021 16z" /> | |
175 | + </svg> | |
176 | + Deploy Now | |
177 | + </a> | |
178 | + </div> | |
179 | + </section> | |
180 | + | |
181 | + <!-- Quick Install --> | |
182 | + <section> | |
183 | + <h2>⚡ Quick Install</h2> | |
184 | + <p>Get OpenCodeHub running in minutes with Docker:</p> | |
185 | + | |
186 | + <div class="command-line"> | |
187 | + <span class="command-prompt">$</span> | |
188 | + <span class="command-text">git clone https://github.com/swadhinbiswas/OpencodeHub && cd | |
189 | + OpenCodeHub</span> | |
190 | + <button class="command-copy" | |
191 | + onclick="copyCommand(this, 'git clone https://github.com/swadhinbiswas/OpencodeHub && cd OpenCodeHub')"> | |
192 | + <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" | |
193 | + stroke-width="2"> | |
194 | + <rect x="9" y="9" width="13" height="13" rx="2" ry="2" /> | |
195 | + <path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1" /> | |
196 | + </svg> | |
197 | + </button> | |
198 | + </div> | |
199 | + | |
200 | + <div class="command-line"> | |
201 | + <span class="command-prompt">$</span> | |
202 | + <span class="command-text">docker-compose up -d</span> | |
203 | + <button class="command-copy" onclick="copyCommand(this, 'docker-compose up -d')"> | |
204 | + <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" | |
205 | + stroke-width="2"> | |
206 | + <rect x="9" y="9" width="13" height="13" rx="2" ry="2" /> | |
207 | + <path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1" /> | |
208 | + </svg> | |
209 | + </button> | |
210 | + </div> | |
211 | + | |
212 | + <p>Then visit <code>http://localhost:3000</code> in your browser.</p> | |
213 | + </section> | |
214 | + | |
215 | + <!-- Features --> | |
216 | + <section> | |
217 | + <h2>✨ Key Features</h2> | |
218 | + <div class="feature-grid"> | |
219 | + <div class="card"> | |
220 | + <h3 class="card-title"> | |
221 | + <span>📚</span> Stacked Pull Requests | |
222 | + </h3> | |
223 | + <p class="card-description"> | |
224 | + Break large changes into reviewable chunks. Ship faster with dependent PRs that | |
225 | + automatically update. | |
226 | + </p> | |
227 | + </div> | |
228 | + <div class="card"> | |
229 | + <h3 class="card-title"> | |
230 | + <span>🤖</span> AI Code Review | |
231 | + </h3> | |
232 | + <p class="card-description"> | |
233 | + Instant feedback from GPT-4 or Claude. Catch security issues, bugs, and code smells | |
234 | + automatically. | |
235 | + </p> | |
236 | + </div> | |
237 | + <div class="card"> | |
238 | + <h3 class="card-title"> | |
239 | + <span>🔀</span> Smart Merge Queue | |
240 | + </h3> | |
241 | + <p class="card-description"> | |
242 | + Stack-aware CI optimization. Batch PRs, auto-rebase, and merge in the correct order. | |
243 | + </p> | |
244 | + </div> | |
245 | + <div class="card"> | |
246 | + <h3 class="card-title"> | |
247 | + <span>⚡</span> CI/CD Pipelines | |
248 | + </h3> | |
249 | + <p class="card-description"> | |
250 | + GitHub Actions-compatible workflows. Build, test, and deploy with self-hosted runners. | |
251 | + </p> | |
252 | + </div> | |
253 | + <div class="card"> | |
254 | + <h3 class="card-title"> | |
255 | + <span>🔒</span> Enterprise Security | |
256 | + </h3> | |
257 | + <p class="card-description"> | |
258 | + Rate limiting, CSRF protection, audit logging, 2FA, and encrypted secrets management. | |
259 | + </p> | |
260 | + </div> | |
261 | + <div class="card"> | |
262 | + <h3 class="card-title"> | |
263 | + <span>💻</span> Powerful CLI | |
264 | + </h3> | |
265 | + <p class="card-description"> | |
266 | + Stack-first workflows from your terminal. Manage PRs, sync stacks, and more. | |
267 | + </p> | |
268 | + </div> | |
269 | + </div> | |
270 | + </section> | |
271 | + | |
272 | + <!-- Documentation Sections --> | |
273 | + <section> | |
274 | + <h2>📖 Documentation</h2> | |
275 | + | |
276 | + <div class="card" style="cursor: pointer" onclick="location.href='getting-started.html'"> | |
277 | + <h3 class="card-title">🚀 Getting Started</h3> | |
278 | + <p class="card-description"> | |
279 | + Install OpenCodeHub, create your first repository, and configure your environment. | |
280 | + </p> | |
281 | + </div> | |
282 | + | |
283 | + <div class="card" style="cursor: pointer" onclick="location.href='deployment.html'"> | |
284 | + <h3 class="card-title">🌐 Deployment Guide</h3> | |
285 | + <p class="card-description"> | |
286 | + Deploy to Docker, Vercel, VPS, or any cloud provider with production-ready configurations. | |
287 | + </p> | |
288 | + </div> | |
289 | + | |
290 | + <div class="card" style="cursor: pointer" onclick="location.href='cli.html'"> | |
291 | + <h3 class="card-title">💻 CLI Reference</h3> | |
292 | + <p class="card-description"> | |
293 | + Complete command reference for the OpenCodeHub CLI. Stack management, authentication, and | |
294 | + more. | |
295 | + </p> | |
296 | + </div> | |
297 | + | |
298 | + <div class="card" style="cursor: pointer" onclick="location.href='api.html'"> | |
299 | + <h3 class="card-title">🔌 API Documentation</h3> | |
300 | + <p class="card-description"> | |
301 | + REST API reference, webhook events, and authentication for programmatic access. | |
302 | + </p> | |
303 | + </div> | |
304 | + </section> | |
305 | + | |
306 | + <!-- Footer --> | |
307 | + <footer | |
308 | + style="margin-top: 4rem; padding-top: 2rem; border-top: 1px solid var(--border-primary); text-align: center; color: var(--text-muted);"> | |
309 | + <p> | |
310 | + Made with ❤️ by <a href="https://github.com/swadhinbiswas">Swadhin Biswas</a> • | |
311 | + <a href="https://github.com/swadhinbiswas/OpencodeHub">GitHub</a> • | |
312 | + <a href="https://github.com/swadhinbiswas/OpencodeHub/blob/main/LICENSE">MIT License</a> | |
313 | + </p> | |
314 | + </footer> | |
315 | + </div> | |
316 | + </main> | |
317 | + </div> | |
318 | + | |
319 | + <script> | |
320 | + function copyCommand(button, text) { | |
321 | + navigator.clipboard.writeText(text); | |
322 | + button.classList.add('copied'); | |
323 | + setTimeout(() => button.classList.remove('copied'), 2000); | |
324 | + } | |
325 | + | |
326 | + // Update active sidebar link based on current page | |
327 | + document.querySelectorAll('.sidebar-link').forEach(link => { | |
328 | + if (link.href === window.location.href) { | |
329 | + link.classList.add('active'); | |
330 | + } | |
331 | + }); | |
332 | + </script> | |
333 | +</body> | |
334 | + | |
335 | +</html> | |
0 | 336 | |
▼docs-site/styles.css
+689-0
| @@ -0,0 +1,689 @@ | ||
1 | +/* OpenCodeHub Documentation Site - Professional Design System */ | |
2 | +:root { | |
3 | + /* Core Colors */ | |
4 | + --primary: #22c55e; | |
5 | + --primary-dark: #16a34a; | |
6 | + --primary-light: #4ade80; | |
7 | + --accent: #3b82f6; | |
8 | + --accent-light: #60a5fa; | |
9 | + | |
10 | + /* Dark Theme */ | |
11 | + --bg-primary: #0f172a; | |
12 | + --bg-secondary: #1e293b; | |
13 | + --bg-tertiary: #334155; | |
14 | + --bg-card: rgba(30, 41, 59, 0.8); | |
15 | + --bg-hover: rgba(51, 65, 85, 0.5); | |
16 | + | |
17 | + /* Text Colors */ | |
18 | + --text-primary: #f8fafc; | |
19 | + --text-secondary: #94a3b8; | |
20 | + --text-muted: #64748b; | |
21 | + | |
22 | + /* Border Colors */ | |
23 | + --border-primary: rgba(148, 163, 184, 0.1); | |
24 | + --border-hover: rgba(148, 163, 184, 0.2); | |
25 | + | |
26 | + /* Glassmorphism */ | |
27 | + --glass-bg: rgba(15, 23, 42, 0.8); | |
28 | + --glass-blur: blur(20px); | |
29 | + | |
30 | + /* Typography Scale */ | |
31 | + --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; | |
32 | + --text-xs: 0.75rem; | |
33 | + --text-sm: 0.875rem; | |
34 | + --text-base: 1rem; | |
35 | + --text-lg: 1.125rem; | |
36 | + --text-xl: 1.25rem; | |
37 | + --text-2xl: 1.5rem; | |
38 | + --text-3xl: 1.875rem; | |
39 | + --text-4xl: 2.25rem; | |
40 | + | |
41 | + /* Spacing */ | |
42 | + --spacing-1: 0.25rem; | |
43 | + --spacing-2: 0.5rem; | |
44 | + --spacing-3: 0.75rem; | |
45 | + --spacing-4: 1rem; | |
46 | + --spacing-6: 1.5rem; | |
47 | + --spacing-8: 2rem; | |
48 | + --spacing-12: 3rem; | |
49 | + --spacing-16: 4rem; | |
50 | + | |
51 | + /* Border Radius */ | |
52 | + --radius-sm: 0.375rem; | |
53 | + --radius-md: 0.5rem; | |
54 | + --radius-lg: 0.75rem; | |
55 | + --radius-xl: 1rem; | |
56 | + | |
57 | + /* Shadows */ | |
58 | + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3); | |
59 | + --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.3); | |
60 | + --shadow-lg: 0 10px 25px rgba(0, 0, 0, 0.4); | |
61 | + --shadow-glow: 0 0 40px rgba(34, 197, 94, 0.15); | |
62 | + | |
63 | + /* Transitions */ | |
64 | + --transition-fast: 150ms ease; | |
65 | + --transition-base: 200ms ease; | |
66 | + --transition-slow: 300ms ease; | |
67 | + | |
68 | + /* Layout */ | |
69 | + --sidebar-width: 280px; | |
70 | + --header-height: 64px; | |
71 | + --max-content-width: 900px; | |
72 | +} | |
73 | + | |
74 | +/* Reset */ | |
75 | +*, *::before, *::after { | |
76 | + box-sizing: border-box; | |
77 | + margin: 0; | |
78 | + padding: 0; | |
79 | +} | |
80 | + | |
81 | +html { | |
82 | + scroll-behavior: smooth; | |
83 | +} | |
84 | + | |
85 | +body { | |
86 | + font-family: var(--font-family); | |
87 | + font-size: var(--text-base); | |
88 | + line-height: 1.6; | |
89 | + color: var(--text-primary); | |
90 | + background: var(--bg-primary); | |
91 | + min-height: 100vh; | |
92 | + -webkit-font-smoothing: antialiased; | |
93 | + -moz-osx-font-smoothing: grayscale; | |
94 | +} | |
95 | + | |
96 | +/* Background Pattern */ | |
97 | +body::before { | |
98 | + content: ''; | |
99 | + position: fixed; | |
100 | + top: 0; | |
101 | + left: 0; | |
102 | + right: 0; | |
103 | + bottom: 0; | |
104 | + background: | |
105 | + radial-gradient(circle at 20% 20%, rgba(34, 197, 94, 0.05) 0%, transparent 50%), | |
106 | + radial-gradient(circle at 80% 80%, rgba(59, 130, 246, 0.05) 0%, transparent 50%); | |
107 | + pointer-events: none; | |
108 | + z-index: -1; | |
109 | +} | |
110 | + | |
111 | +a { | |
112 | + color: var(--primary); | |
113 | + text-decoration: none; | |
114 | + transition: color var(--transition-fast); | |
115 | +} | |
116 | + | |
117 | +a:hover { | |
118 | + color: var(--primary-light); | |
119 | +} | |
120 | + | |
121 | +/* Header */ | |
122 | +.header { | |
123 | + position: fixed; | |
124 | + top: 0; | |
125 | + left: 0; | |
126 | + right: 0; | |
127 | + height: var(--header-height); | |
128 | + background: var(--glass-bg); | |
129 | + backdrop-filter: var(--glass-blur); | |
130 | + border-bottom: 1px solid var(--border-primary); | |
131 | + display: flex; | |
132 | + align-items: center; | |
133 | + justify-content: space-between; | |
134 | + padding: 0 var(--spacing-6); | |
135 | + z-index: 100; | |
136 | +} | |
137 | + | |
138 | +.header-logo { | |
139 | + display: flex; | |
140 | + align-items: center; | |
141 | + gap: var(--spacing-3); | |
142 | +} | |
143 | + | |
144 | +.header-logo img { | |
145 | + height: 36px; | |
146 | + width: auto; | |
147 | +} | |
148 | + | |
149 | +.header-logo span { | |
150 | + font-size: var(--text-xl); | |
151 | + font-weight: 700; | |
152 | + background: linear-gradient(135deg, var(--text-primary), var(--text-secondary)); | |
153 | + -webkit-background-clip: text; | |
154 | + -webkit-text-fill-color: transparent; | |
155 | + background-clip: text; | |
156 | +} | |
157 | + | |
158 | +.header-nav { | |
159 | + display: flex; | |
160 | + align-items: center; | |
161 | + gap: var(--spacing-4); | |
162 | +} | |
163 | + | |
164 | +.header-nav a { | |
165 | + color: var(--text-secondary); | |
166 | + font-size: var(--text-sm); | |
167 | + font-weight: 500; | |
168 | + padding: var(--spacing-2) var(--spacing-3); | |
169 | + border-radius: var(--radius-md); | |
170 | + transition: all var(--transition-fast); | |
171 | +} | |
172 | + | |
173 | +.header-nav a:hover { | |
174 | + color: var(--text-primary); | |
175 | + background: var(--bg-hover); | |
176 | +} | |
177 | + | |
178 | +.btn-github { | |
179 | + display: flex; | |
180 | + align-items: center; | |
181 | + gap: var(--spacing-2); | |
182 | + background: var(--bg-tertiary); | |
183 | + padding: var(--spacing-2) var(--spacing-4); | |
184 | + border-radius: var(--radius-md); | |
185 | + color: var(--text-primary) !important; | |
186 | +} | |
187 | + | |
188 | +.btn-github:hover { | |
189 | + background: var(--bg-hover); | |
190 | +} | |
191 | + | |
192 | +/* Layout */ | |
193 | +.layout { | |
194 | + display: flex; | |
195 | + min-height: 100vh; | |
196 | + padding-top: var(--header-height); | |
197 | +} | |
198 | + | |
199 | +/* Sidebar */ | |
200 | +.sidebar { | |
201 | + position: fixed; | |
202 | + top: var(--header-height); | |
203 | + left: 0; | |
204 | + bottom: 0; | |
205 | + width: var(--sidebar-width); | |
206 | + background: var(--bg-secondary); | |
207 | + border-right: 1px solid var(--border-primary); | |
208 | + overflow-y: auto; | |
209 | + padding: var(--spacing-6); | |
210 | +} | |
211 | + | |
212 | +.sidebar-section { | |
213 | + margin-bottom: var(--spacing-6); | |
214 | +} | |
215 | + | |
216 | +.sidebar-title { | |
217 | + font-size: var(--text-xs); | |
218 | + font-weight: 600; | |
219 | + text-transform: uppercase; | |
220 | + letter-spacing: 0.05em; | |
221 | + color: var(--text-muted); | |
222 | + margin-bottom: var(--spacing-3); | |
223 | +} | |
224 | + | |
225 | +.sidebar-nav { | |
226 | + display: flex; | |
227 | + flex-direction: column; | |
228 | + gap: var(--spacing-1); | |
229 | +} | |
230 | + | |
231 | +.sidebar-link { | |
232 | + display: flex; | |
233 | + align-items: center; | |
234 | + gap: var(--spacing-3); | |
235 | + padding: var(--spacing-2) var(--spacing-3); | |
236 | + border-radius: var(--radius-md); | |
237 | + color: var(--text-secondary); | |
238 | + font-size: var(--text-sm); | |
239 | + transition: all var(--transition-fast); | |
240 | +} | |
241 | + | |
242 | +.sidebar-link:hover { | |
243 | + color: var(--text-primary); | |
244 | + background: var(--bg-hover); | |
245 | +} | |
246 | + | |
247 | +.sidebar-link.active { | |
248 | + color: var(--primary); | |
249 | + background: rgba(34, 197, 94, 0.1); | |
250 | +} | |
251 | + | |
252 | +.sidebar-link svg { | |
253 | + width: 18px; | |
254 | + height: 18px; | |
255 | + flex-shrink: 0; | |
256 | +} | |
257 | + | |
258 | +/* Main Content */ | |
259 | +.main { | |
260 | + margin-left: var(--sidebar-width); | |
261 | + flex: 1; | |
262 | + padding: var(--spacing-8); | |
263 | + max-width: calc(var(--max-content-width) + var(--spacing-16)); | |
264 | +} | |
265 | + | |
266 | +.content { | |
267 | + max-width: var(--max-content-width); | |
268 | +} | |
269 | + | |
270 | +/* Typography */ | |
271 | +h1, h2, h3, h4, h5, h6 { | |
272 | + font-weight: 600; | |
273 | + color: var(--text-primary); | |
274 | + margin-bottom: var(--spacing-4); | |
275 | +} | |
276 | + | |
277 | +h1 { | |
278 | + font-size: var(--text-4xl); | |
279 | + line-height: 1.2; | |
280 | + margin-bottom: var(--spacing-6); | |
281 | +} | |
282 | + | |
283 | +h2 { | |
284 | + font-size: var(--text-2xl); | |
285 | + margin-top: var(--spacing-12); | |
286 | + padding-bottom: var(--spacing-3); | |
287 | + border-bottom: 1px solid var(--border-primary); | |
288 | +} | |
289 | + | |
290 | +h3 { | |
291 | + font-size: var(--text-xl); | |
292 | + margin-top: var(--spacing-8); | |
293 | +} | |
294 | + | |
295 | +p { | |
296 | + margin-bottom: var(--spacing-4); | |
297 | + color: var(--text-secondary); | |
298 | +} | |
299 | + | |
300 | +/* Lists */ | |
301 | +ul, ol { | |
302 | + margin-bottom: var(--spacing-4); | |
303 | + padding-left: var(--spacing-6); | |
304 | +} | |
305 | + | |
306 | +li { | |
307 | + color: var(--text-secondary); | |
308 | + margin-bottom: var(--spacing-2); | |
309 | +} | |
310 | + | |
311 | +li::marker { | |
312 | + color: var(--primary); | |
313 | +} | |
314 | + | |
315 | +/* Code Blocks */ | |
316 | +code { | |
317 | + font-family: 'JetBrains Mono', 'Fira Code', monospace; | |
318 | + font-size: 0.9em; | |
319 | + background: var(--bg-tertiary); | |
320 | + padding: 0.2em 0.4em; | |
321 | + border-radius: var(--radius-sm); | |
322 | +} | |
323 | + | |
324 | +pre { | |
325 | + background: var(--bg-secondary); | |
326 | + border: 1px solid var(--border-primary); | |
327 | + border-radius: var(--radius-lg); | |
328 | + padding: var(--spacing-4); | |
329 | + overflow-x: auto; | |
330 | + margin-bottom: var(--spacing-6); | |
331 | +} | |
332 | + | |
333 | +pre code { | |
334 | + background: none; | |
335 | + padding: 0; | |
336 | + font-size: var(--text-sm); | |
337 | + line-height: 1.7; | |
338 | +} | |
339 | + | |
340 | +/* Cards */ | |
341 | +.card { | |
342 | + background: var(--bg-card); | |
343 | + border: 1px solid var(--border-primary); | |
344 | + border-radius: var(--radius-lg); | |
345 | + padding: var(--spacing-6); | |
346 | + margin-bottom: var(--spacing-4); | |
347 | + backdrop-filter: var(--glass-blur); | |
348 | + transition: all var(--transition-base); | |
349 | +} | |
350 | + | |
351 | +.card:hover { | |
352 | + border-color: var(--border-hover); | |
353 | + box-shadow: var(--shadow-md); | |
354 | +} | |
355 | + | |
356 | +.card-title { | |
357 | + font-size: var(--text-lg); | |
358 | + font-weight: 600; | |
359 | + margin-bottom: var(--spacing-2); | |
360 | + display: flex; | |
361 | + align-items: center; | |
362 | + gap: var(--spacing-2); | |
363 | +} | |
364 | + | |
365 | +.card-description { | |
366 | + color: var(--text-secondary); | |
367 | + font-size: var(--text-sm); | |
368 | +} | |
369 | + | |
370 | +/* Feature Grid */ | |
371 | +.feature-grid { | |
372 | + display: grid; | |
373 | + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); | |
374 | + gap: var(--spacing-4); | |
375 | + margin: var(--spacing-6) 0; | |
376 | +} | |
377 | + | |
378 | +/* Steps */ | |
379 | +.steps { | |
380 | + counter-reset: step; | |
381 | + margin: var(--spacing-6) 0; | |
382 | +} | |
383 | + | |
384 | +.step { | |
385 | + position: relative; | |
386 | + padding-left: var(--spacing-12); | |
387 | + margin-bottom: var(--spacing-6); | |
388 | +} | |
389 | + | |
390 | +.step::before { | |
391 | + counter-increment: step; | |
392 | + content: counter(step); | |
393 | + position: absolute; | |
394 | + left: 0; | |
395 | + top: 0; | |
396 | + width: 32px; | |
397 | + height: 32px; | |
398 | + background: linear-gradient(135deg, var(--primary), var(--primary-dark)); | |
399 | + color: white; | |
400 | + font-weight: 600; | |
401 | + font-size: var(--text-sm); | |
402 | + display: flex; | |
403 | + align-items: center; | |
404 | + justify-content: center; | |
405 | + border-radius: 50%; | |
406 | +} | |
407 | + | |
408 | +.step-title { | |
409 | + font-size: var(--text-lg); | |
410 | + font-weight: 600; | |
411 | + margin-bottom: var(--spacing-2); | |
412 | +} | |
413 | + | |
414 | +.step-content { | |
415 | + color: var(--text-secondary); | |
416 | +} | |
417 | + | |
418 | +/* Alerts */ | |
419 | +.alert { | |
420 | + padding: var(--spacing-4); | |
421 | + border-radius: var(--radius-lg); | |
422 | + margin-bottom: var(--spacing-4); | |
423 | + border-left: 4px solid; | |
424 | +} | |
425 | + | |
426 | +.alert-info { | |
427 | + background: rgba(59, 130, 246, 0.1); | |
428 | + border-color: var(--accent); | |
429 | +} | |
430 | + | |
431 | +.alert-warning { | |
432 | + background: rgba(234, 179, 8, 0.1); | |
433 | + border-color: #eab308; | |
434 | +} | |
435 | + | |
436 | +.alert-success { | |
437 | + background: rgba(34, 197, 94, 0.1); | |
438 | + border-color: var(--primary); | |
439 | +} | |
440 | + | |
441 | +.alert-title { | |
442 | + font-weight: 600; | |
443 | + margin-bottom: var(--spacing-2); | |
444 | +} | |
445 | + | |
446 | +/* Tables */ | |
447 | +table { | |
448 | + width: 100%; | |
449 | + border-collapse: collapse; | |
450 | + margin-bottom: var(--spacing-6); | |
451 | + background: var(--bg-card); | |
452 | + border-radius: var(--radius-lg); | |
453 | + overflow: hidden; | |
454 | +} | |
455 | + | |
456 | +th, td { | |
457 | + padding: var(--spacing-3) var(--spacing-4); | |
458 | + text-align: left; | |
459 | + border-bottom: 1px solid var(--border-primary); | |
460 | +} | |
461 | + | |
462 | +th { | |
463 | + background: var(--bg-tertiary); | |
464 | + font-weight: 600; | |
465 | + color: var(--text-primary); | |
466 | + font-size: var(--text-sm); | |
467 | +} | |
468 | + | |
469 | +td { | |
470 | + color: var(--text-secondary); | |
471 | + font-size: var(--text-sm); | |
472 | +} | |
473 | + | |
474 | +tr:last-child td { | |
475 | + border-bottom: none; | |
476 | +} | |
477 | + | |
478 | +/* Buttons */ | |
479 | +.btn { | |
480 | + display: inline-flex; | |
481 | + align-items: center; | |
482 | + gap: var(--spacing-2); | |
483 | + padding: var(--spacing-3) var(--spacing-6); | |
484 | + border-radius: var(--radius-md); | |
485 | + font-weight: 500; | |
486 | + font-size: var(--text-sm); | |
487 | + cursor: pointer; | |
488 | + transition: all var(--transition-fast); | |
489 | + border: none; | |
490 | +} | |
491 | + | |
492 | +.btn-primary { | |
493 | + background: linear-gradient(135deg, var(--primary), var(--primary-dark)); | |
494 | + color: white; | |
495 | + box-shadow: var(--shadow-glow); | |
496 | +} | |
497 | + | |
498 | +.btn-primary:hover { | |
499 | + transform: translateY(-2px); | |
500 | + box-shadow: 0 0 50px rgba(34, 197, 94, 0.25); | |
501 | + color: white; | |
502 | +} | |
503 | + | |
504 | +.btn-secondary { | |
505 | + background: var(--bg-tertiary); | |
506 | + color: var(--text-primary); | |
507 | +} | |
508 | + | |
509 | +.btn-secondary:hover { | |
510 | + background: var(--bg-hover); | |
511 | +} | |
512 | + | |
513 | +/* Hero Section */ | |
514 | +.hero { | |
515 | + text-align: center; | |
516 | + padding: var(--spacing-16) 0; | |
517 | + margin-bottom: var(--spacing-12); | |
518 | +} | |
519 | + | |
520 | +.hero h1 { | |
521 | + font-size: 3rem; | |
522 | + background: linear-gradient(135deg, var(--text-primary), var(--primary)); | |
523 | + -webkit-background-clip: text; | |
524 | + -webkit-text-fill-color: transparent; | |
525 | + background-clip: text; | |
526 | +} | |
527 | + | |
528 | +.hero-subtitle { | |
529 | + font-size: var(--text-xl); | |
530 | + color: var(--text-secondary); | |
531 | + margin-bottom: var(--spacing-8); | |
532 | + max-width: 600px; | |
533 | + margin-left: auto; | |
534 | + margin-right: auto; | |
535 | +} | |
536 | + | |
537 | +.hero-buttons { | |
538 | + display: flex; | |
539 | + gap: var(--spacing-4); | |
540 | + justify-content: center; | |
541 | +} | |
542 | + | |
543 | +/* Command Line */ | |
544 | +.command-line { | |
545 | + display: flex; | |
546 | + align-items: center; | |
547 | + background: var(--bg-secondary); | |
548 | + border: 1px solid var(--border-primary); | |
549 | + border-radius: var(--radius-lg); | |
550 | + padding: var(--spacing-4); | |
551 | + margin: var(--spacing-4) 0; | |
552 | + font-family: 'JetBrains Mono', monospace; | |
553 | +} | |
554 | + | |
555 | +.command-prompt { | |
556 | + color: var(--primary); | |
557 | + margin-right: var(--spacing-2); | |
558 | +} | |
559 | + | |
560 | +.command-text { | |
561 | + color: var(--text-primary); | |
562 | + flex: 1; | |
563 | +} | |
564 | + | |
565 | +.command-copy { | |
566 | + background: var(--bg-tertiary); | |
567 | + border: none; | |
568 | + color: var(--text-secondary); | |
569 | + padding: var(--spacing-2); | |
570 | + border-radius: var(--radius-sm); | |
571 | + cursor: pointer; | |
572 | + transition: all var(--transition-fast); | |
573 | +} | |
574 | + | |
575 | +.command-copy:hover { | |
576 | + color: var(--text-primary); | |
577 | + background: var(--bg-hover); | |
578 | +} | |
579 | + | |
580 | +/* Badges */ | |
581 | +.badge { | |
582 | + display: inline-flex; | |
583 | + align-items: center; | |
584 | + gap: var(--spacing-1); | |
585 | + padding: var(--spacing-1) var(--spacing-2); | |
586 | + background: var(--bg-tertiary); | |
587 | + border-radius: var(--radius-sm); | |
588 | + font-size: var(--text-xs); | |
589 | + color: var(--text-secondary); | |
590 | +} | |
591 | + | |
592 | +.badge-primary { | |
593 | + background: rgba(34, 197, 94, 0.2); | |
594 | + color: var(--primary-light); | |
595 | +} | |
596 | + | |
597 | +/* Responsive */ | |
598 | +@media (max-width: 1024px) { | |
599 | + .sidebar { | |
600 | + display: none; | |
601 | + } | |
602 | + | |
603 | + .main { | |
604 | + margin-left: 0; | |
605 | + } | |
606 | +} | |
607 | + | |
608 | +@media (max-width: 768px) { | |
609 | + .header { | |
610 | + padding: 0 var(--spacing-4); | |
611 | + } | |
612 | + | |
613 | + .header-nav { | |
614 | + display: none; | |
615 | + } | |
616 | + | |
617 | + .main { | |
618 | + padding: var(--spacing-4); | |
619 | + } | |
620 | + | |
621 | + h1 { | |
622 | + font-size: var(--text-3xl); | |
623 | + } | |
624 | + | |
625 | + .hero { | |
626 | + padding: var(--spacing-8) 0; | |
627 | + } | |
628 | + | |
629 | + .hero h1 { | |
630 | + font-size: var(--text-3xl); | |
631 | + } | |
632 | + | |
633 | + .hero-buttons { | |
634 | + flex-direction: column; | |
635 | + align-items: stretch; | |
636 | + } | |
637 | + | |
638 | + .feature-grid { | |
639 | + grid-template-columns: 1fr; | |
640 | + } | |
641 | +} | |
642 | + | |
643 | +/* Scrollbar */ | |
644 | +::-webkit-scrollbar { | |
645 | + width: 8px; | |
646 | + height: 8px; | |
647 | +} | |
648 | + | |
649 | +::-webkit-scrollbar-track { | |
650 | + background: var(--bg-secondary); | |
651 | +} | |
652 | + | |
653 | +::-webkit-scrollbar-thumb { | |
654 | + background: var(--bg-tertiary); | |
655 | + border-radius: 4px; | |
656 | +} | |
657 | + | |
658 | +::-webkit-scrollbar-thumb:hover { | |
659 | + background: var(--text-muted); | |
660 | +} | |
661 | + | |
662 | +/* Animations */ | |
663 | +@keyframes fadeIn { | |
664 | + from { opacity: 0; transform: translateY(10px); } | |
665 | + to { opacity: 1; transform: translateY(0); } | |
666 | +} | |
667 | + | |
668 | +.animate-fade-in { | |
669 | + animation: fadeIn 0.5s ease forwards; | |
670 | +} | |
671 | + | |
672 | +/* Copy button tooltip */ | |
673 | +.copied { | |
674 | + position: relative; | |
675 | +} | |
676 | + | |
677 | +.copied::after { | |
678 | + content: 'Copied!'; | |
679 | + position: absolute; | |
680 | + top: -30px; | |
681 | + left: 50%; | |
682 | + transform: translateX(-50%); | |
683 | + background: var(--primary); | |
684 | + color: white; | |
685 | + padding: 4px 8px; | |
686 | + border-radius: var(--radius-sm); | |
687 | + font-size: var(--text-xs); | |
688 | + animation: fadeIn 0.2s ease; | |
689 | +} | |
0 | 690 | |
▼docs/GDRIVE_STACK.md
+91-0
| @@ -0,0 +1,91 @@ | ||
1 | + | |
2 | +## ☁️ Google Drive + Turso + Gmail Stack | |
3 | + | |
4 | +This stack is ideal for cost-effective, serverless-style deployments where you want to minimize persistent volume usage and use managed services. | |
5 | + | |
6 | +### 1. Database: Turso (LibSQL) | |
7 | + | |
8 | +Turso is a managed SQLite-compatible database perfect for edge deployments. | |
9 | + | |
10 | +**Get Credentials:** | |
11 | +1. Create a database on [Turso](https://turso.tech). | |
12 | +2. Get your Database URL (e.g., `libsql://db-name-user.turso.io`). | |
13 | +3. Create an Auth Token. | |
14 | + | |
15 | +**Configuration:** | |
16 | +```env | |
17 | +DATABASE_DRIVER=libsql | |
18 | +DATABASE_URL=libsql://your-db.turso.io | |
19 | +DATABASE_AUTH_TOKEN=your-auth-token | |
20 | +``` | |
21 | + | |
22 | +### 2. Storage: Google Drive | |
23 | + | |
24 | +Store repositories and LFS objects in a Google Drive folder. | |
25 | + | |
26 | +**Get Credentials:** | |
27 | +1. Go to [Google Cloud Console](https://console.cloud.google.com). | |
28 | +2. Create a project and enable the **Google Drive API**. | |
29 | +3. Configure OAuth Consent Screen (Internal or External). | |
30 | +4. Create Credentials -> **OAuth Client ID** (Web Application). | |
31 | + - Set Redirect URI to `https://developers.google.com/oauthplayground` (for generating token). | |
32 | +5. Go to [OAuth 2.0 Playground](https://developers.google.com/oauthplayground). | |
33 | + - Step 1: Input your own scope: `https://www.googleapis.com/auth/drive.file` | |
34 | + - Step 2: Use your Client ID & Secret in settings. | |
35 | + - Step 3: Authorize and exchange for **Refresh Token**. | |
36 | +6. Create a folder in Google Drive and copy its **Folder ID** (from URL). | |
37 | + | |
38 | +**Configuration:** | |
39 | +```env | |
40 | +STORAGE_TYPE=gdrive | |
41 | +GOOGLE_CLIENT_ID=your-client-id | |
42 | +GOOGLE_CLIENT_SECRET=your-client-secret | |
43 | +GOOGLE_REFRESH_TOKEN=your-refresh-token | |
44 | +GOOGLE_FOLDER_ID=your-folder-id | |
45 | +``` | |
46 | + | |
47 | +### 3. Email: Google Mail (Gmail SMTP) | |
48 | + | |
49 | +Use Gmail to send system emails. | |
50 | + | |
51 | +**Get Credentials:** | |
52 | +1. Enable 2-Step Verification on your Google Account. | |
53 | +2. Go to **App Passwords** (Security settings). | |
54 | +3. Create a new App Password for "Mail". | |
55 | + | |
56 | +**Configuration:** | |
57 | +```env | |
58 | +SMTP_HOST=smtp.gmail.com | |
59 | +SMTP_PORT=587 | |
60 | ||
61 | +SMTP_PASSWORD=your-app-password | |
62 | +SMTP_FROM=OpenCodeHub <[email protected]> | |
63 | +``` | |
64 | + | |
65 | +### 4. Full `.env` Example | |
66 | + | |
67 | +```env | |
68 | +# Security | |
69 | +JWT_SECRET=<run: openssl rand -hex 32> | |
70 | +SESSION_SECRET=<run: openssl rand -hex 32> | |
71 | +INTERNAL_HOOK_SECRET=<run: openssl rand -hex 32> | |
72 | +SITE_URL=https://your-app.com | |
73 | + | |
74 | +# Turso Database | |
75 | +DATABASE_DRIVER=libsql | |
76 | +DATABASE_URL=libsql://... | |
77 | +DATABASE_AUTH_TOKEN=... | |
78 | + | |
79 | +# Google Drive Storage | |
80 | +STORAGE_TYPE=gdrive | |
81 | +GOOGLE_CLIENT_ID=... | |
82 | +GOOGLE_CLIENT_SECRET=... | |
83 | +GOOGLE_REFRESH_TOKEN=... | |
84 | +GOOGLE_FOLDER_ID=... | |
85 | + | |
86 | +# Gmail | |
87 | +SMTP_HOST=smtp.gmail.com | |
88 | +SMTP_PORT=587 | |
89 | +SMTP_USER=... | |
90 | +SMTP_PASSWORD=... | |
91 | +``` | |
0 | 92 | |
▼docs/GRAFANA_SETUP.md
+58-0
| @@ -0,0 +1,58 @@ | ||
1 | +# Setting up Grafana Cloud Logging (OTLP) | |
2 | + | |
3 | +This guide explains how to get the credentials required to stream logs from OpenCodeHub to Grafana Cloud using the OTLP (OpenTelemetry) protocol. | |
4 | + | |
5 | +## Prerequisites | |
6 | + | |
7 | +1. A verified account on [Grafana Cloud](https://grafana.com/products/cloud/). (They have a generous free tier). | |
8 | + | |
9 | +## Step-by-Step Guide | |
10 | + | |
11 | +1. **Log in** to your Grafana Cloud Portal at [grafana.com](https://grafana.com). | |
12 | +2. Navigate to **"My Account"** or the main dashboard. | |
13 | +3. Find your **Stack** and locate the **"OpenTelemetry"** or **"OTLP"** section. | |
14 | +4. Click on **"Configure"** or **"Details"**. | |
15 | + | |
16 | +## Finding Your Credentials | |
17 | + | |
18 | +You will need three values for your `.env` file: | |
19 | + | |
20 | +### 1. GRAFANA_OTLP_ENDPOINT | |
21 | +* The OTLP endpoint URL for your region. | |
22 | +* Examples: | |
23 | + - Asia-Pacific: `https://otlp-gateway-prod-ap-south-1.grafana.net/otlp/v1/logs` | |
24 | + - US: `https://otlp-gateway-prod-us-central-0.grafana.net/otlp/v1/logs` | |
25 | + - EU: `https://otlp-gateway-prod-eu-west-0.grafana.net/otlp/v1/logs` | |
26 | + | |
27 | +### 2. GRAFANA_INSTANCE_ID | |
28 | +* Your Loki/OTLP **Instance ID** (numeric). | |
29 | +* Found in the OTLP or Loki configuration section. | |
30 | + | |
31 | +### 3. GRAFANA_API_KEY | |
32 | +* Generate an API Key (Access Policy Token) with **logs:write** scope. | |
33 | +* Navigate to **Access Policies** → **Create Access Policy**. | |
34 | +* Give it a name (e.g., `opencodehub-logger`). | |
35 | +* Ensure it has scope/permission to `logs:write`. | |
36 | +* Copy the generated token. | |
37 | + | |
38 | +## Final Configuration | |
39 | + | |
40 | +Update your `.env` file: | |
41 | + | |
42 | +```bash | |
43 | +# Grafana Cloud OTLP Logging | |
44 | +GRAFANA_OTLP_ENDPOINT=https://otlp-gateway-prod-ap-south-1.grafana.net/otlp/v1/logs | |
45 | +GRAFANA_INSTANCE_ID=1273345 | |
46 | +GRAFANA_API_KEY=your_long_api_key_token_here | |
47 | +``` | |
48 | + | |
49 | +Restart your application for changes to take effect: | |
50 | +```bash | |
51 | +bun run dev | |
52 | +``` | |
53 | + | |
54 | +## Viewing Logs in Grafana | |
55 | + | |
56 | +1. Go to your Grafana Cloud dashboard | |
57 | +2. Navigate to **Explore** → Select **Loki** as the data source | |
58 | +3. Query logs with: `{service_name="opencodehub"}` | |
0 | 59 | |
▼docs/publishing.md
+43-0
| @@ -0,0 +1,43 @@ | ||
1 | +# Publishing Guide | |
2 | + | |
3 | +## NPM Registry | |
4 | + | |
5 | +To publish the OpenCodeHub CLI to the official npm registry: | |
6 | + | |
7 | +1. **Login to npm**: | |
8 | + ```bash | |
9 | + npm login | |
10 | + ``` | |
11 | + | |
12 | +2. **Run the publish script**: | |
13 | + ```bash | |
14 | + ./scripts/publish-cli.sh | |
15 | + ``` | |
16 | + | |
17 | +## GitHub Packages (Other Registry) | |
18 | + | |
19 | +To publish to GitHub Packages: | |
20 | + | |
21 | +1. **Configure `.npmrc`**: | |
22 | + Create a `.npmrc` file in `cli/` with: | |
23 | + ```ini | |
24 | + @swadhinbiswas:registry=https://npm.pkg.github.com | |
25 | + ``` | |
26 | + | |
27 | +2. **Update Package Name**: | |
28 | + In `cli/package.json`, change the name to allow scoped publishing: | |
29 | + ```json | |
30 | + "name": "@swadhinbiswas/opencodehub-cli" | |
31 | + ``` | |
32 | + | |
33 | +3. **Authenticate**: | |
34 | + Generate a Value Access Token (PAT) with `write:packages` scope on GitHub. | |
35 | + ```bash | |
36 | + npm login --scope=@swadhinbiswas --registry=https://npm.pkg.github.com | |
37 | + ``` | |
38 | + | |
39 | +4. **Publish**: | |
40 | + ```bash | |
41 | + cd cli | |
42 | + npm publish | |
43 | + ``` | |
0 | 44 | |
▼package.json
+2-0
| @@ -29,6 +29,7 @@ | ||
29 | 29 | "@astrojs/node": "^8.3.0", |
30 | 30 | "@astrojs/react": "^3.6.0", |
31 | 31 | "@astrojs/tailwind": "^5.1.0", |
32 | + "@astrojs/vercel": "^9.0.2", | |
32 | 33 | "@aws-sdk/client-s3": "^3.948.0", |
33 | 34 | "@aws-sdk/s3-request-presigner": "^3.948.0", |
34 | 35 | "@libsql/client": "^0.15.15", |
| @@ -91,6 +92,7 @@ | ||
91 | 92 | "otplib": "^12.0.1", |
92 | 93 | "pg": "^8.16.3", |
93 | 94 | "pino": "^10.1.0", |
95 | + "pino-loki": "^3.0.0", | |
94 | 96 | "postgres": "^3.4.7", |
95 | 97 | "prom-client": "^15.1.3", |
96 | 98 | "react": "^18.3.1", |
97 | 99 | |
▼packages/sdk/package-lock.json
+2109-0
| @@ -0,0 +1,2109 @@ | ||
1 | +{ | |
2 | + "name": "@opencodehub/sdk", | |
3 | + "version": "0.1.0", | |
4 | + "lockfileVersion": 3, | |
5 | + "requires": true, | |
6 | + "packages": { | |
7 | + "": { | |
8 | + "name": "@opencodehub/sdk", | |
9 | + "version": "0.1.0", | |
10 | + "license": "MIT", | |
11 | + "dependencies": { | |
12 | + "axios": "^1.6.0" | |
13 | + }, | |
14 | + "devDependencies": { | |
15 | + "typescript": "^5.0.0", | |
16 | + "vitest": "^1.0.0" | |
17 | + } | |
18 | + }, | |
19 | + "node_modules/@esbuild/aix-ppc64": { | |
20 | + "version": "0.21.5", | |
21 | + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", | |
22 | + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", | |
23 | + "cpu": [ | |
24 | + "ppc64" | |
25 | + ], | |
26 | + "dev": true, | |
27 | + "license": "MIT", | |
28 | + "optional": true, | |
29 | + "os": [ | |
30 | + "aix" | |
31 | + ], | |
32 | + "engines": { | |
33 | + "node": ">=12" | |
34 | + } | |
35 | + }, | |
36 | + "node_modules/@esbuild/android-arm": { | |
37 | + "version": "0.21.5", | |
38 | + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", | |
39 | + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", | |
40 | + "cpu": [ | |
41 | + "arm" | |
42 | + ], | |
43 | + "dev": true, | |
44 | + "license": "MIT", | |
45 | + "optional": true, | |
46 | + "os": [ | |
47 | + "android" | |
48 | + ], | |
49 | + "engines": { | |
50 | + "node": ">=12" | |
51 | + } | |
52 | + }, | |
53 | + "node_modules/@esbuild/android-arm64": { | |
54 | + "version": "0.21.5", | |
55 | + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", | |
56 | + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", | |
57 | + "cpu": [ | |
58 | + "arm64" | |
59 | + ], | |
60 | + "dev": true, | |
61 | + "license": "MIT", | |
62 | + "optional": true, | |
63 | + "os": [ | |
64 | + "android" | |
65 | + ], | |
66 | + "engines": { | |
67 | + "node": ">=12" | |
68 | + } | |
69 | + }, | |
70 | + "node_modules/@esbuild/android-x64": { | |
71 | + "version": "0.21.5", | |
72 | + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", | |
73 | + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", | |
74 | + "cpu": [ | |
75 | + "x64" | |
76 | + ], | |
77 | + "dev": true, | |
78 | + "license": "MIT", | |
79 | + "optional": true, | |
80 | + "os": [ | |
81 | + "android" | |
82 | + ], | |
83 | + "engines": { | |
84 | + "node": ">=12" | |
85 | + } | |
86 | + }, | |
87 | + "node_modules/@esbuild/darwin-arm64": { | |
88 | + "version": "0.21.5", | |
89 | + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", | |
90 | + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", | |
91 | + "cpu": [ | |
92 | + "arm64" | |
93 | + ], | |
94 | + "dev": true, | |
95 | + "license": "MIT", | |
96 | + "optional": true, | |
97 | + "os": [ | |
98 | + "darwin" | |
99 | + ], | |
100 | + "engines": { | |
101 | + "node": ">=12" | |
102 | + } | |
103 | + }, | |
104 | + "node_modules/@esbuild/darwin-x64": { | |
105 | + "version": "0.21.5", | |
106 | + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", | |
107 | + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", | |
108 | + "cpu": [ | |
109 | + "x64" | |
110 | + ], | |
111 | + "dev": true, | |
112 | + "license": "MIT", | |
113 | + "optional": true, | |
114 | + "os": [ | |
115 | + "darwin" | |
116 | + ], | |
117 | + "engines": { | |
118 | + "node": ">=12" | |
119 | + } | |
120 | + }, | |
121 | + "node_modules/@esbuild/freebsd-arm64": { | |
122 | + "version": "0.21.5", | |
123 | + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", | |
124 | + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", | |
125 | + "cpu": [ | |
126 | + "arm64" | |
127 | + ], | |
128 | + "dev": true, | |
129 | + "license": "MIT", | |
130 | + "optional": true, | |
131 | + "os": [ | |
132 | + "freebsd" | |
133 | + ], | |
134 | + "engines": { | |
135 | + "node": ">=12" | |
136 | + } | |
137 | + }, | |
138 | + "node_modules/@esbuild/freebsd-x64": { | |
139 | + "version": "0.21.5", | |
140 | + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", | |
141 | + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", | |
142 | + "cpu": [ | |
143 | + "x64" | |
144 | + ], | |
145 | + "dev": true, | |
146 | + "license": "MIT", | |
147 | + "optional": true, | |
148 | + "os": [ | |
149 | + "freebsd" | |
150 | + ], | |
151 | + "engines": { | |
152 | + "node": ">=12" | |
153 | + } | |
154 | + }, | |
155 | + "node_modules/@esbuild/linux-arm": { | |
156 | + "version": "0.21.5", | |
157 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", | |
158 | + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", | |
159 | + "cpu": [ | |
160 | + "arm" | |
161 | + ], | |
162 | + "dev": true, | |
163 | + "license": "MIT", | |
164 | + "optional": true, | |
165 | + "os": [ | |
166 | + "linux" | |
167 | + ], | |
168 | + "engines": { | |
169 | + "node": ">=12" | |
170 | + } | |
171 | + }, | |
172 | + "node_modules/@esbuild/linux-arm64": { | |
173 | + "version": "0.21.5", | |
174 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", | |
175 | + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", | |
176 | + "cpu": [ | |
177 | + "arm64" | |
178 | + ], | |
179 | + "dev": true, | |
180 | + "license": "MIT", | |
181 | + "optional": true, | |
182 | + "os": [ | |
183 | + "linux" | |
184 | + ], | |
185 | + "engines": { | |
186 | + "node": ">=12" | |
187 | + } | |
188 | + }, | |
189 | + "node_modules/@esbuild/linux-ia32": { | |
190 | + "version": "0.21.5", | |
191 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", | |
192 | + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", | |
193 | + "cpu": [ | |
194 | + "ia32" | |
195 | + ], | |
196 | + "dev": true, | |
197 | + "license": "MIT", | |
198 | + "optional": true, | |
199 | + "os": [ | |
200 | + "linux" | |
201 | + ], | |
202 | + "engines": { | |
203 | + "node": ">=12" | |
204 | + } | |
205 | + }, | |
206 | + "node_modules/@esbuild/linux-loong64": { | |
207 | + "version": "0.21.5", | |
208 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", | |
209 | + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", | |
210 | + "cpu": [ | |
211 | + "loong64" | |
212 | + ], | |
213 | + "dev": true, | |
214 | + "license": "MIT", | |
215 | + "optional": true, | |
216 | + "os": [ | |
217 | + "linux" | |
218 | + ], | |
219 | + "engines": { | |
220 | + "node": ">=12" | |
221 | + } | |
222 | + }, | |
223 | + "node_modules/@esbuild/linux-mips64el": { | |
224 | + "version": "0.21.5", | |
225 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", | |
226 | + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", | |
227 | + "cpu": [ | |
228 | + "mips64el" | |
229 | + ], | |
230 | + "dev": true, | |
231 | + "license": "MIT", | |
232 | + "optional": true, | |
233 | + "os": [ | |
234 | + "linux" | |
235 | + ], | |
236 | + "engines": { | |
237 | + "node": ">=12" | |
238 | + } | |
239 | + }, | |
240 | + "node_modules/@esbuild/linux-ppc64": { | |
241 | + "version": "0.21.5", | |
242 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", | |
243 | + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", | |
244 | + "cpu": [ | |
245 | + "ppc64" | |
246 | + ], | |
247 | + "dev": true, | |
248 | + "license": "MIT", | |
249 | + "optional": true, | |
250 | + "os": [ | |
251 | + "linux" | |
252 | + ], | |
253 | + "engines": { | |
254 | + "node": ">=12" | |
255 | + } | |
256 | + }, | |
257 | + "node_modules/@esbuild/linux-riscv64": { | |
258 | + "version": "0.21.5", | |
259 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", | |
260 | + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", | |
261 | + "cpu": [ | |
262 | + "riscv64" | |
263 | + ], | |
264 | + "dev": true, | |
265 | + "license": "MIT", | |
266 | + "optional": true, | |
267 | + "os": [ | |
268 | + "linux" | |
269 | + ], | |
270 | + "engines": { | |
271 | + "node": ">=12" | |
272 | + } | |
273 | + }, | |
274 | + "node_modules/@esbuild/linux-s390x": { | |
275 | + "version": "0.21.5", | |
276 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", | |
277 | + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", | |
278 | + "cpu": [ | |
279 | + "s390x" | |
280 | + ], | |
281 | + "dev": true, | |
282 | + "license": "MIT", | |
283 | + "optional": true, | |
284 | + "os": [ | |
285 | + "linux" | |
286 | + ], | |
287 | + "engines": { | |
288 | + "node": ">=12" | |
289 | + } | |
290 | + }, | |
291 | + "node_modules/@esbuild/linux-x64": { | |
292 | + "version": "0.21.5", | |
293 | + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", | |
294 | + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", | |
295 | + "cpu": [ | |
296 | + "x64" | |
297 | + ], | |
298 | + "dev": true, | |
299 | + "license": "MIT", | |
300 | + "optional": true, | |
301 | + "os": [ | |
302 | + "linux" | |
303 | + ], | |
304 | + "engines": { | |
305 | + "node": ">=12" | |
306 | + } | |
307 | + }, | |
308 | + "node_modules/@esbuild/netbsd-x64": { | |
309 | + "version": "0.21.5", | |
310 | + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", | |
311 | + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", | |
312 | + "cpu": [ | |
313 | + "x64" | |
314 | + ], | |
315 | + "dev": true, | |
316 | + "license": "MIT", | |
317 | + "optional": true, | |
318 | + "os": [ | |
319 | + "netbsd" | |
320 | + ], | |
321 | + "engines": { | |
322 | + "node": ">=12" | |
323 | + } | |
324 | + }, | |
325 | + "node_modules/@esbuild/openbsd-x64": { | |
326 | + "version": "0.21.5", | |
327 | + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", | |
328 | + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", | |
329 | + "cpu": [ | |
330 | + "x64" | |
331 | + ], | |
332 | + "dev": true, | |
333 | + "license": "MIT", | |
334 | + "optional": true, | |
335 | + "os": [ | |
336 | + "openbsd" | |
337 | + ], | |
338 | + "engines": { | |
339 | + "node": ">=12" | |
340 | + } | |
341 | + }, | |
342 | + "node_modules/@esbuild/sunos-x64": { | |
343 | + "version": "0.21.5", | |
344 | + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", | |
345 | + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", | |
346 | + "cpu": [ | |
347 | + "x64" | |
348 | + ], | |
349 | + "dev": true, | |
350 | + "license": "MIT", | |
351 | + "optional": true, | |
352 | + "os": [ | |
353 | + "sunos" | |
354 | + ], | |
355 | + "engines": { | |
356 | + "node": ">=12" | |
357 | + } | |
358 | + }, | |
359 | + "node_modules/@esbuild/win32-arm64": { | |
360 | + "version": "0.21.5", | |
361 | + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", | |
362 | + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", | |
363 | + "cpu": [ | |
364 | + "arm64" | |
365 | + ], | |
366 | + "dev": true, | |
367 | + "license": "MIT", | |
368 | + "optional": true, | |
369 | + "os": [ | |
370 | + "win32" | |
371 | + ], | |
372 | + "engines": { | |
373 | + "node": ">=12" | |
374 | + } | |
375 | + }, | |
376 | + "node_modules/@esbuild/win32-ia32": { | |
377 | + "version": "0.21.5", | |
378 | + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", | |
379 | + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", | |
380 | + "cpu": [ | |
381 | + "ia32" | |
382 | + ], | |
383 | + "dev": true, | |
384 | + "license": "MIT", | |
385 | + "optional": true, | |
386 | + "os": [ | |
387 | + "win32" | |
388 | + ], | |
389 | + "engines": { | |
390 | + "node": ">=12" | |
391 | + } | |
392 | + }, | |
393 | + "node_modules/@esbuild/win32-x64": { | |
394 | + "version": "0.21.5", | |
395 | + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", | |
396 | + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", | |
397 | + "cpu": [ | |
398 | + "x64" | |
399 | + ], | |
400 | + "dev": true, | |
401 | + "license": "MIT", | |
402 | + "optional": true, | |
403 | + "os": [ | |
404 | + "win32" | |
405 | + ], | |
406 | + "engines": { | |
407 | + "node": ">=12" | |
408 | + } | |
409 | + }, | |
410 | + "node_modules/@jest/schemas": { | |
411 | + "version": "29.6.3", | |
412 | + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", | |
413 | + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", | |
414 | + "dev": true, | |
415 | + "license": "MIT", | |
416 | + "dependencies": { | |
417 | + "@sinclair/typebox": "^0.27.8" | |
418 | + }, | |
419 | + "engines": { | |
420 | + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" | |
421 | + } | |
422 | + }, | |
423 | + "node_modules/@jridgewell/sourcemap-codec": { | |
424 | + "version": "1.5.5", | |
425 | + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", | |
426 | + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", | |
427 | + "dev": true, | |
428 | + "license": "MIT" | |
429 | + }, | |
430 | + "node_modules/@rollup/rollup-android-arm-eabi": { | |
431 | + "version": "4.55.1", | |
432 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.55.1.tgz", | |
433 | + "integrity": "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==", | |
434 | + "cpu": [ | |
435 | + "arm" | |
436 | + ], | |
437 | + "dev": true, | |
438 | + "license": "MIT", | |
439 | + "optional": true, | |
440 | + "os": [ | |
441 | + "android" | |
442 | + ] | |
443 | + }, | |
444 | + "node_modules/@rollup/rollup-android-arm64": { | |
445 | + "version": "4.55.1", | |
446 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.55.1.tgz", | |
447 | + "integrity": "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==", | |
448 | + "cpu": [ | |
449 | + "arm64" | |
450 | + ], | |
451 | + "dev": true, | |
452 | + "license": "MIT", | |
453 | + "optional": true, | |
454 | + "os": [ | |
455 | + "android" | |
456 | + ] | |
457 | + }, | |
458 | + "node_modules/@rollup/rollup-darwin-arm64": { | |
459 | + "version": "4.55.1", | |
460 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.55.1.tgz", | |
461 | + "integrity": "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==", | |
462 | + "cpu": [ | |
463 | + "arm64" | |
464 | + ], | |
465 | + "dev": true, | |
466 | + "license": "MIT", | |
467 | + "optional": true, | |
468 | + "os": [ | |
469 | + "darwin" | |
470 | + ] | |
471 | + }, | |
472 | + "node_modules/@rollup/rollup-darwin-x64": { | |
473 | + "version": "4.55.1", | |
474 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.55.1.tgz", | |
475 | + "integrity": "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==", | |
476 | + "cpu": [ | |
477 | + "x64" | |
478 | + ], | |
479 | + "dev": true, | |
480 | + "license": "MIT", | |
481 | + "optional": true, | |
482 | + "os": [ | |
483 | + "darwin" | |
484 | + ] | |
485 | + }, | |
486 | + "node_modules/@rollup/rollup-freebsd-arm64": { | |
487 | + "version": "4.55.1", | |
488 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.55.1.tgz", | |
489 | + "integrity": "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==", | |
490 | + "cpu": [ | |
491 | + "arm64" | |
492 | + ], | |
493 | + "dev": true, | |
494 | + "license": "MIT", | |
495 | + "optional": true, | |
496 | + "os": [ | |
497 | + "freebsd" | |
498 | + ] | |
499 | + }, | |
500 | + "node_modules/@rollup/rollup-freebsd-x64": { | |
501 | + "version": "4.55.1", | |
502 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.55.1.tgz", | |
503 | + "integrity": "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==", | |
504 | + "cpu": [ | |
505 | + "x64" | |
506 | + ], | |
507 | + "dev": true, | |
508 | + "license": "MIT", | |
509 | + "optional": true, | |
510 | + "os": [ | |
511 | + "freebsd" | |
512 | + ] | |
513 | + }, | |
514 | + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { | |
515 | + "version": "4.55.1", | |
516 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.55.1.tgz", | |
517 | + "integrity": "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==", | |
518 | + "cpu": [ | |
519 | + "arm" | |
520 | + ], | |
521 | + "dev": true, | |
522 | + "license": "MIT", | |
523 | + "optional": true, | |
524 | + "os": [ | |
525 | + "linux" | |
526 | + ] | |
527 | + }, | |
528 | + "node_modules/@rollup/rollup-linux-arm-musleabihf": { | |
529 | + "version": "4.55.1", | |
530 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.55.1.tgz", | |
531 | + "integrity": "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==", | |
532 | + "cpu": [ | |
533 | + "arm" | |
534 | + ], | |
535 | + "dev": true, | |
536 | + "license": "MIT", | |
537 | + "optional": true, | |
538 | + "os": [ | |
539 | + "linux" | |
540 | + ] | |
541 | + }, | |
542 | + "node_modules/@rollup/rollup-linux-arm64-gnu": { | |
543 | + "version": "4.55.1", | |
544 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.55.1.tgz", | |
545 | + "integrity": "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==", | |
546 | + "cpu": [ | |
547 | + "arm64" | |
548 | + ], | |
549 | + "dev": true, | |
550 | + "license": "MIT", | |
551 | + "optional": true, | |
552 | + "os": [ | |
553 | + "linux" | |
554 | + ] | |
555 | + }, | |
556 | + "node_modules/@rollup/rollup-linux-arm64-musl": { | |
557 | + "version": "4.55.1", | |
558 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.55.1.tgz", | |
559 | + "integrity": "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==", | |
560 | + "cpu": [ | |
561 | + "arm64" | |
562 | + ], | |
563 | + "dev": true, | |
564 | + "license": "MIT", | |
565 | + "optional": true, | |
566 | + "os": [ | |
567 | + "linux" | |
568 | + ] | |
569 | + }, | |
570 | + "node_modules/@rollup/rollup-linux-loong64-gnu": { | |
571 | + "version": "4.55.1", | |
572 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.55.1.tgz", | |
573 | + "integrity": "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==", | |
574 | + "cpu": [ | |
575 | + "loong64" | |
576 | + ], | |
577 | + "dev": true, | |
578 | + "license": "MIT", | |
579 | + "optional": true, | |
580 | + "os": [ | |
581 | + "linux" | |
582 | + ] | |
583 | + }, | |
584 | + "node_modules/@rollup/rollup-linux-loong64-musl": { | |
585 | + "version": "4.55.1", | |
586 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.55.1.tgz", | |
587 | + "integrity": "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==", | |
588 | + "cpu": [ | |
589 | + "loong64" | |
590 | + ], | |
591 | + "dev": true, | |
592 | + "license": "MIT", | |
593 | + "optional": true, | |
594 | + "os": [ | |
595 | + "linux" | |
596 | + ] | |
597 | + }, | |
598 | + "node_modules/@rollup/rollup-linux-ppc64-gnu": { | |
599 | + "version": "4.55.1", | |
600 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.55.1.tgz", | |
601 | + "integrity": "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==", | |
602 | + "cpu": [ | |
603 | + "ppc64" | |
604 | + ], | |
605 | + "dev": true, | |
606 | + "license": "MIT", | |
607 | + "optional": true, | |
608 | + "os": [ | |
609 | + "linux" | |
610 | + ] | |
611 | + }, | |
612 | + "node_modules/@rollup/rollup-linux-ppc64-musl": { | |
613 | + "version": "4.55.1", | |
614 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.55.1.tgz", | |
615 | + "integrity": "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==", | |
616 | + "cpu": [ | |
617 | + "ppc64" | |
618 | + ], | |
619 | + "dev": true, | |
620 | + "license": "MIT", | |
621 | + "optional": true, | |
622 | + "os": [ | |
623 | + "linux" | |
624 | + ] | |
625 | + }, | |
626 | + "node_modules/@rollup/rollup-linux-riscv64-gnu": { | |
627 | + "version": "4.55.1", | |
628 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.55.1.tgz", | |
629 | + "integrity": "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==", | |
630 | + "cpu": [ | |
631 | + "riscv64" | |
632 | + ], | |
633 | + "dev": true, | |
634 | + "license": "MIT", | |
635 | + "optional": true, | |
636 | + "os": [ | |
637 | + "linux" | |
638 | + ] | |
639 | + }, | |
640 | + "node_modules/@rollup/rollup-linux-riscv64-musl": { | |
641 | + "version": "4.55.1", | |
642 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.55.1.tgz", | |
643 | + "integrity": "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==", | |
644 | + "cpu": [ | |
645 | + "riscv64" | |
646 | + ], | |
647 | + "dev": true, | |
648 | + "license": "MIT", | |
649 | + "optional": true, | |
650 | + "os": [ | |
651 | + "linux" | |
652 | + ] | |
653 | + }, | |
654 | + "node_modules/@rollup/rollup-linux-s390x-gnu": { | |
655 | + "version": "4.55.1", | |
656 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.55.1.tgz", | |
657 | + "integrity": "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==", | |
658 | + "cpu": [ | |
659 | + "s390x" | |
660 | + ], | |
661 | + "dev": true, | |
662 | + "license": "MIT", | |
663 | + "optional": true, | |
664 | + "os": [ | |
665 | + "linux" | |
666 | + ] | |
667 | + }, | |
668 | + "node_modules/@rollup/rollup-linux-x64-gnu": { | |
669 | + "version": "4.55.1", | |
670 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.55.1.tgz", | |
671 | + "integrity": "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==", | |
672 | + "cpu": [ | |
673 | + "x64" | |
674 | + ], | |
675 | + "dev": true, | |
676 | + "license": "MIT", | |
677 | + "optional": true, | |
678 | + "os": [ | |
679 | + "linux" | |
680 | + ] | |
681 | + }, | |
682 | + "node_modules/@rollup/rollup-linux-x64-musl": { | |
683 | + "version": "4.55.1", | |
684 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.55.1.tgz", | |
685 | + "integrity": "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==", | |
686 | + "cpu": [ | |
687 | + "x64" | |
688 | + ], | |
689 | + "dev": true, | |
690 | + "license": "MIT", | |
691 | + "optional": true, | |
692 | + "os": [ | |
693 | + "linux" | |
694 | + ] | |
695 | + }, | |
696 | + "node_modules/@rollup/rollup-openbsd-x64": { | |
697 | + "version": "4.55.1", | |
698 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.55.1.tgz", | |
699 | + "integrity": "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==", | |
700 | + "cpu": [ | |
701 | + "x64" | |
702 | + ], | |
703 | + "dev": true, | |
704 | + "license": "MIT", | |
705 | + "optional": true, | |
706 | + "os": [ | |
707 | + "openbsd" | |
708 | + ] | |
709 | + }, | |
710 | + "node_modules/@rollup/rollup-openharmony-arm64": { | |
711 | + "version": "4.55.1", | |
712 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.55.1.tgz", | |
713 | + "integrity": "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==", | |
714 | + "cpu": [ | |
715 | + "arm64" | |
716 | + ], | |
717 | + "dev": true, | |
718 | + "license": "MIT", | |
719 | + "optional": true, | |
720 | + "os": [ | |
721 | + "openharmony" | |
722 | + ] | |
723 | + }, | |
724 | + "node_modules/@rollup/rollup-win32-arm64-msvc": { | |
725 | + "version": "4.55.1", | |
726 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.55.1.tgz", | |
727 | + "integrity": "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==", | |
728 | + "cpu": [ | |
729 | + "arm64" | |
730 | + ], | |
731 | + "dev": true, | |
732 | + "license": "MIT", | |
733 | + "optional": true, | |
734 | + "os": [ | |
735 | + "win32" | |
736 | + ] | |
737 | + }, | |
738 | + "node_modules/@rollup/rollup-win32-ia32-msvc": { | |
739 | + "version": "4.55.1", | |
740 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.55.1.tgz", | |
741 | + "integrity": "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==", | |
742 | + "cpu": [ | |
743 | + "ia32" | |
744 | + ], | |
745 | + "dev": true, | |
746 | + "license": "MIT", | |
747 | + "optional": true, | |
748 | + "os": [ | |
749 | + "win32" | |
750 | + ] | |
751 | + }, | |
752 | + "node_modules/@rollup/rollup-win32-x64-gnu": { | |
753 | + "version": "4.55.1", | |
754 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.55.1.tgz", | |
755 | + "integrity": "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==", | |
756 | + "cpu": [ | |
757 | + "x64" | |
758 | + ], | |
759 | + "dev": true, | |
760 | + "license": "MIT", | |
761 | + "optional": true, | |
762 | + "os": [ | |
763 | + "win32" | |
764 | + ] | |
765 | + }, | |
766 | + "node_modules/@rollup/rollup-win32-x64-msvc": { | |
767 | + "version": "4.55.1", | |
768 | + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.55.1.tgz", | |
769 | + "integrity": "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==", | |
770 | + "cpu": [ | |
771 | + "x64" | |
772 | + ], | |
773 | + "dev": true, | |
774 | + "license": "MIT", | |
775 | + "optional": true, | |
776 | + "os": [ | |
777 | + "win32" | |
778 | + ] | |
779 | + }, | |
780 | + "node_modules/@sinclair/typebox": { | |
781 | + "version": "0.27.8", | |
782 | + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", | |
783 | + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", | |
784 | + "dev": true, | |
785 | + "license": "MIT" | |
786 | + }, | |
787 | + "node_modules/@types/estree": { | |
788 | + "version": "1.0.8", | |
789 | + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", | |
790 | + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", | |
791 | + "dev": true, | |
792 | + "license": "MIT" | |
793 | + }, | |
794 | + "node_modules/@vitest/expect": { | |
795 | + "version": "1.6.1", | |
796 | + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.1.tgz", | |
797 | + "integrity": "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==", | |
798 | + "dev": true, | |
799 | + "license": "MIT", | |
800 | + "dependencies": { | |
801 | + "@vitest/spy": "1.6.1", | |
802 | + "@vitest/utils": "1.6.1", | |
803 | + "chai": "^4.3.10" | |
804 | + }, | |
805 | + "funding": { | |
806 | + "url": "https://opencollective.com/vitest" | |
807 | + } | |
808 | + }, | |
809 | + "node_modules/@vitest/runner": { | |
810 | + "version": "1.6.1", | |
811 | + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.1.tgz", | |
812 | + "integrity": "sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==", | |
813 | + "dev": true, | |
814 | + "license": "MIT", | |
815 | + "dependencies": { | |
816 | + "@vitest/utils": "1.6.1", | |
817 | + "p-limit": "^5.0.0", | |
818 | + "pathe": "^1.1.1" | |
819 | + }, | |
820 | + "funding": { | |
821 | + "url": "https://opencollective.com/vitest" | |
822 | + } | |
823 | + }, | |
824 | + "node_modules/@vitest/snapshot": { | |
825 | + "version": "1.6.1", | |
826 | + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.1.tgz", | |
827 | + "integrity": "sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==", | |
828 | + "dev": true, | |
829 | + "license": "MIT", | |
830 | + "dependencies": { | |
831 | + "magic-string": "^0.30.5", | |
832 | + "pathe": "^1.1.1", | |
833 | + "pretty-format": "^29.7.0" | |
834 | + }, | |
835 | + "funding": { | |
836 | + "url": "https://opencollective.com/vitest" | |
837 | + } | |
838 | + }, | |
839 | + "node_modules/@vitest/spy": { | |
840 | + "version": "1.6.1", | |
841 | + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.1.tgz", | |
842 | + "integrity": "sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==", | |
843 | + "dev": true, | |
844 | + "license": "MIT", | |
845 | + "dependencies": { | |
846 | + "tinyspy": "^2.2.0" | |
847 | + }, | |
848 | + "funding": { | |
849 | + "url": "https://opencollective.com/vitest" | |
850 | + } | |
851 | + }, | |
852 | + "node_modules/@vitest/utils": { | |
853 | + "version": "1.6.1", | |
854 | + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.1.tgz", | |
855 | + "integrity": "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==", | |
856 | + "dev": true, | |
857 | + "license": "MIT", | |
858 | + "dependencies": { | |
859 | + "diff-sequences": "^29.6.3", | |
860 | + "estree-walker": "^3.0.3", | |
861 | + "loupe": "^2.3.7", | |
862 | + "pretty-format": "^29.7.0" | |
863 | + }, | |
864 | + "funding": { | |
865 | + "url": "https://opencollective.com/vitest" | |
866 | + } | |
867 | + }, | |
868 | + "node_modules/acorn": { | |
869 | + "version": "8.15.0", | |
870 | + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", | |
871 | + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", | |
872 | + "dev": true, | |
873 | + "license": "MIT", | |
874 | + "bin": { | |
875 | + "acorn": "bin/acorn" | |
876 | + }, | |
877 | + "engines": { | |
878 | + "node": ">=0.4.0" | |
879 | + } | |
880 | + }, | |
881 | + "node_modules/acorn-walk": { | |
882 | + "version": "8.3.4", | |
883 | + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", | |
884 | + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", | |
885 | + "dev": true, | |
886 | + "license": "MIT", | |
887 | + "dependencies": { | |
888 | + "acorn": "^8.11.0" | |
889 | + }, | |
890 | + "engines": { | |
891 | + "node": ">=0.4.0" | |
892 | + } | |
893 | + }, | |
894 | + "node_modules/ansi-styles": { | |
895 | + "version": "5.2.0", | |
896 | + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", | |
897 | + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", | |
898 | + "dev": true, | |
899 | + "license": "MIT", | |
900 | + "engines": { | |
901 | + "node": ">=10" | |
902 | + }, | |
903 | + "funding": { | |
904 | + "url": "https://github.com/chalk/ansi-styles?sponsor=1" | |
905 | + } | |
906 | + }, | |
907 | + "node_modules/assertion-error": { | |
908 | + "version": "1.1.0", | |
909 | + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", | |
910 | + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", | |
911 | + "dev": true, | |
912 | + "license": "MIT", | |
913 | + "engines": { | |
914 | + "node": "*" | |
915 | + } | |
916 | + }, | |
917 | + "node_modules/asynckit": { | |
918 | + "version": "0.4.0", | |
919 | + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | |
920 | + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", | |
921 | + "license": "MIT" | |
922 | + }, | |
923 | + "node_modules/axios": { | |
924 | + "version": "1.13.2", | |
925 | + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", | |
926 | + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", | |
927 | + "license": "MIT", | |
928 | + "dependencies": { | |
929 | + "follow-redirects": "^1.15.6", | |
930 | + "form-data": "^4.0.4", | |
931 | + "proxy-from-env": "^1.1.0" | |
932 | + } | |
933 | + }, | |
934 | + "node_modules/cac": { | |
935 | + "version": "6.7.14", | |
936 | + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", | |
937 | + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", | |
938 | + "dev": true, | |
939 | + "license": "MIT", | |
940 | + "engines": { | |
941 | + "node": ">=8" | |
942 | + } | |
943 | + }, | |
944 | + "node_modules/call-bind-apply-helpers": { | |
945 | + "version": "1.0.2", | |
946 | + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", | |
947 | + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", | |
948 | + "license": "MIT", | |
949 | + "dependencies": { | |
950 | + "es-errors": "^1.3.0", | |
951 | + "function-bind": "^1.1.2" | |
952 | + }, | |
953 | + "engines": { | |
954 | + "node": ">= 0.4" | |
955 | + } | |
956 | + }, | |
957 | + "node_modules/chai": { | |
958 | + "version": "4.5.0", | |
959 | + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", | |
960 | + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", | |
961 | + "dev": true, | |
962 | + "license": "MIT", | |
963 | + "dependencies": { | |
964 | + "assertion-error": "^1.1.0", | |
965 | + "check-error": "^1.0.3", | |
966 | + "deep-eql": "^4.1.3", | |
967 | + "get-func-name": "^2.0.2", | |
968 | + "loupe": "^2.3.6", | |
969 | + "pathval": "^1.1.1", | |
970 | + "type-detect": "^4.1.0" | |
971 | + }, | |
972 | + "engines": { | |
973 | + "node": ">=4" | |
974 | + } | |
975 | + }, | |
976 | + "node_modules/check-error": { | |
977 | + "version": "1.0.3", | |
978 | + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", | |
979 | + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", | |
980 | + "dev": true, | |
981 | + "license": "MIT", | |
982 | + "dependencies": { | |
983 | + "get-func-name": "^2.0.2" | |
984 | + }, | |
985 | + "engines": { | |
986 | + "node": "*" | |
987 | + } | |
988 | + }, | |
989 | + "node_modules/combined-stream": { | |
990 | + "version": "1.0.8", | |
991 | + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", | |
992 | + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", | |
993 | + "license": "MIT", | |
994 | + "dependencies": { | |
995 | + "delayed-stream": "~1.0.0" | |
996 | + }, | |
997 | + "engines": { | |
998 | + "node": ">= 0.8" | |
999 | + } | |
1000 | + }, | |
1001 | + "node_modules/confbox": { | |
1002 | + "version": "0.1.8", | |
1003 | + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", | |
1004 | + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", | |
1005 | + "dev": true, | |
1006 | + "license": "MIT" | |
1007 | + }, | |
1008 | + "node_modules/cross-spawn": { | |
1009 | + "version": "7.0.6", | |
1010 | + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", | |
1011 | + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", | |
1012 | + "dev": true, | |
1013 | + "license": "MIT", | |
1014 | + "dependencies": { | |
1015 | + "path-key": "^3.1.0", | |
1016 | + "shebang-command": "^2.0.0", | |
1017 | + "which": "^2.0.1" | |
1018 | + }, | |
1019 | + "engines": { | |
1020 | + "node": ">= 8" | |
1021 | + } | |
1022 | + }, | |
1023 | + "node_modules/debug": { | |
1024 | + "version": "4.4.3", | |
1025 | + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", | |
1026 | + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", | |
1027 | + "dev": true, | |
1028 | + "license": "MIT", | |
1029 | + "dependencies": { | |
1030 | + "ms": "^2.1.3" | |
1031 | + }, | |
1032 | + "engines": { | |
1033 | + "node": ">=6.0" | |
1034 | + }, | |
1035 | + "peerDependenciesMeta": { | |
1036 | + "supports-color": { | |
1037 | + "optional": true | |
1038 | + } | |
1039 | + } | |
1040 | + }, | |
1041 | + "node_modules/deep-eql": { | |
1042 | + "version": "4.1.4", | |
1043 | + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", | |
1044 | + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", | |
1045 | + "dev": true, | |
1046 | + "license": "MIT", | |
1047 | + "dependencies": { | |
1048 | + "type-detect": "^4.0.0" | |
1049 | + }, | |
1050 | + "engines": { | |
1051 | + "node": ">=6" | |
1052 | + } | |
1053 | + }, | |
1054 | + "node_modules/delayed-stream": { | |
1055 | + "version": "1.0.0", | |
1056 | + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", | |
1057 | + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", | |
1058 | + "license": "MIT", | |
1059 | + "engines": { | |
1060 | + "node": ">=0.4.0" | |
1061 | + } | |
1062 | + }, | |
1063 | + "node_modules/diff-sequences": { | |
1064 | + "version": "29.6.3", | |
1065 | + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", | |
1066 | + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", | |
1067 | + "dev": true, | |
1068 | + "license": "MIT", | |
1069 | + "engines": { | |
1070 | + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" | |
1071 | + } | |
1072 | + }, | |
1073 | + "node_modules/dunder-proto": { | |
1074 | + "version": "1.0.1", | |
1075 | + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", | |
1076 | + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", | |
1077 | + "license": "MIT", | |
1078 | + "dependencies": { | |
1079 | + "call-bind-apply-helpers": "^1.0.1", | |
1080 | + "es-errors": "^1.3.0", | |
1081 | + "gopd": "^1.2.0" | |
1082 | + }, | |
1083 | + "engines": { | |
1084 | + "node": ">= 0.4" | |
1085 | + } | |
1086 | + }, | |
1087 | + "node_modules/es-define-property": { | |
1088 | + "version": "1.0.1", | |
1089 | + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", | |
1090 | + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", | |
1091 | + "license": "MIT", | |
1092 | + "engines": { | |
1093 | + "node": ">= 0.4" | |
1094 | + } | |
1095 | + }, | |
1096 | + "node_modules/es-errors": { | |
1097 | + "version": "1.3.0", | |
1098 | + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", | |
1099 | + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", | |
1100 | + "license": "MIT", | |
1101 | + "engines": { | |
1102 | + "node": ">= 0.4" | |
1103 | + } | |
1104 | + }, | |
1105 | + "node_modules/es-object-atoms": { | |
1106 | + "version": "1.1.1", | |
1107 | + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", | |
1108 | + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", | |
1109 | + "license": "MIT", | |
1110 | + "dependencies": { | |
1111 | + "es-errors": "^1.3.0" | |
1112 | + }, | |
1113 | + "engines": { | |
1114 | + "node": ">= 0.4" | |
1115 | + } | |
1116 | + }, | |
1117 | + "node_modules/es-set-tostringtag": { | |
1118 | + "version": "2.1.0", | |
1119 | + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", | |
1120 | + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", | |
1121 | + "license": "MIT", | |
1122 | + "dependencies": { | |
1123 | + "es-errors": "^1.3.0", | |
1124 | + "get-intrinsic": "^1.2.6", | |
1125 | + "has-tostringtag": "^1.0.2", | |
1126 | + "hasown": "^2.0.2" | |
1127 | + }, | |
1128 | + "engines": { | |
1129 | + "node": ">= 0.4" | |
1130 | + } | |
1131 | + }, | |
1132 | + "node_modules/esbuild": { | |
1133 | + "version": "0.21.5", | |
1134 | + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", | |
1135 | + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", | |
1136 | + "dev": true, | |
1137 | + "hasInstallScript": true, | |
1138 | + "license": "MIT", | |
1139 | + "bin": { | |
1140 | + "esbuild": "bin/esbuild" | |
1141 | + }, | |
1142 | + "engines": { | |
1143 | + "node": ">=12" | |
1144 | + }, | |
1145 | + "optionalDependencies": { | |
1146 | + "@esbuild/aix-ppc64": "0.21.5", | |
1147 | + "@esbuild/android-arm": "0.21.5", | |
1148 | + "@esbuild/android-arm64": "0.21.5", | |
1149 | + "@esbuild/android-x64": "0.21.5", | |
1150 | + "@esbuild/darwin-arm64": "0.21.5", | |
1151 | + "@esbuild/darwin-x64": "0.21.5", | |
1152 | + "@esbuild/freebsd-arm64": "0.21.5", | |
1153 | + "@esbuild/freebsd-x64": "0.21.5", | |
1154 | + "@esbuild/linux-arm": "0.21.5", | |
1155 | + "@esbuild/linux-arm64": "0.21.5", | |
1156 | + "@esbuild/linux-ia32": "0.21.5", | |
1157 | + "@esbuild/linux-loong64": "0.21.5", | |
1158 | + "@esbuild/linux-mips64el": "0.21.5", | |
1159 | + "@esbuild/linux-ppc64": "0.21.5", | |
1160 | + "@esbuild/linux-riscv64": "0.21.5", | |
1161 | + "@esbuild/linux-s390x": "0.21.5", | |
1162 | + "@esbuild/linux-x64": "0.21.5", | |
1163 | + "@esbuild/netbsd-x64": "0.21.5", | |
1164 | + "@esbuild/openbsd-x64": "0.21.5", | |
1165 | + "@esbuild/sunos-x64": "0.21.5", | |
1166 | + "@esbuild/win32-arm64": "0.21.5", | |
1167 | + "@esbuild/win32-ia32": "0.21.5", | |
1168 | + "@esbuild/win32-x64": "0.21.5" | |
1169 | + } | |
1170 | + }, | |
1171 | + "node_modules/estree-walker": { | |
1172 | + "version": "3.0.3", | |
1173 | + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", | |
1174 | + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", | |
1175 | + "dev": true, | |
1176 | + "license": "MIT", | |
1177 | + "dependencies": { | |
1178 | + "@types/estree": "^1.0.0" | |
1179 | + } | |
1180 | + }, | |
1181 | + "node_modules/execa": { | |
1182 | + "version": "8.0.1", | |
1183 | + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", | |
1184 | + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", | |
1185 | + "dev": true, | |
1186 | + "license": "MIT", | |
1187 | + "dependencies": { | |
1188 | + "cross-spawn": "^7.0.3", | |
1189 | + "get-stream": "^8.0.1", | |
1190 | + "human-signals": "^5.0.0", | |
1191 | + "is-stream": "^3.0.0", | |
1192 | + "merge-stream": "^2.0.0", | |
1193 | + "npm-run-path": "^5.1.0", | |
1194 | + "onetime": "^6.0.0", | |
1195 | + "signal-exit": "^4.1.0", | |
1196 | + "strip-final-newline": "^3.0.0" | |
1197 | + }, | |
1198 | + "engines": { | |
1199 | + "node": ">=16.17" | |
1200 | + }, | |
1201 | + "funding": { | |
1202 | + "url": "https://github.com/sindresorhus/execa?sponsor=1" | |
1203 | + } | |
1204 | + }, | |
1205 | + "node_modules/follow-redirects": { | |
1206 | + "version": "1.15.11", | |
1207 | + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", | |
1208 | + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", | |
1209 | + "funding": [ | |
1210 | + { | |
1211 | + "type": "individual", | |
1212 | + "url": "https://github.com/sponsors/RubenVerborgh" | |
1213 | + } | |
1214 | + ], | |
1215 | + "license": "MIT", | |
1216 | + "engines": { | |
1217 | + "node": ">=4.0" | |
1218 | + }, | |
1219 | + "peerDependenciesMeta": { | |
1220 | + "debug": { | |
1221 | + "optional": true | |
1222 | + } | |
1223 | + } | |
1224 | + }, | |
1225 | + "node_modules/form-data": { | |
1226 | + "version": "4.0.5", | |
1227 | + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", | |
1228 | + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", | |
1229 | + "license": "MIT", | |
1230 | + "dependencies": { | |
1231 | + "asynckit": "^0.4.0", | |
1232 | + "combined-stream": "^1.0.8", | |
1233 | + "es-set-tostringtag": "^2.1.0", | |
1234 | + "hasown": "^2.0.2", | |
1235 | + "mime-types": "^2.1.12" | |
1236 | + }, | |
1237 | + "engines": { | |
1238 | + "node": ">= 6" | |
1239 | + } | |
1240 | + }, | |
1241 | + "node_modules/fsevents": { | |
1242 | + "version": "2.3.3", | |
1243 | + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", | |
1244 | + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", | |
1245 | + "dev": true, | |
1246 | + "hasInstallScript": true, | |
1247 | + "license": "MIT", | |
1248 | + "optional": true, | |
1249 | + "os": [ | |
1250 | + "darwin" | |
1251 | + ], | |
1252 | + "engines": { | |
1253 | + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" | |
1254 | + } | |
1255 | + }, | |
1256 | + "node_modules/function-bind": { | |
1257 | + "version": "1.1.2", | |
1258 | + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", | |
1259 | + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", | |
1260 | + "license": "MIT", | |
1261 | + "funding": { | |
1262 | + "url": "https://github.com/sponsors/ljharb" | |
1263 | + } | |
1264 | + }, | |
1265 | + "node_modules/get-func-name": { | |
1266 | + "version": "2.0.2", | |
1267 | + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", | |
1268 | + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", | |
1269 | + "dev": true, | |
1270 | + "license": "MIT", | |
1271 | + "engines": { | |
1272 | + "node": "*" | |
1273 | + } | |
1274 | + }, | |
1275 | + "node_modules/get-intrinsic": { | |
1276 | + "version": "1.3.0", | |
1277 | + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", | |
1278 | + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", | |
1279 | + "license": "MIT", | |
1280 | + "dependencies": { | |
1281 | + "call-bind-apply-helpers": "^1.0.2", | |
1282 | + "es-define-property": "^1.0.1", | |
1283 | + "es-errors": "^1.3.0", | |
1284 | + "es-object-atoms": "^1.1.1", | |
1285 | + "function-bind": "^1.1.2", | |
1286 | + "get-proto": "^1.0.1", | |
1287 | + "gopd": "^1.2.0", | |
1288 | + "has-symbols": "^1.1.0", | |
1289 | + "hasown": "^2.0.2", | |
1290 | + "math-intrinsics": "^1.1.0" | |
1291 | + }, | |
1292 | + "engines": { | |
1293 | + "node": ">= 0.4" | |
1294 | + }, | |
1295 | + "funding": { | |
1296 | + "url": "https://github.com/sponsors/ljharb" | |
1297 | + } | |
1298 | + }, | |
1299 | + "node_modules/get-proto": { | |
1300 | + "version": "1.0.1", | |
1301 | + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", | |
1302 | + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", | |
1303 | + "license": "MIT", | |
1304 | + "dependencies": { | |
1305 | + "dunder-proto": "^1.0.1", | |
1306 | + "es-object-atoms": "^1.0.0" | |
1307 | + }, | |
1308 | + "engines": { | |
1309 | + "node": ">= 0.4" | |
1310 | + } | |
1311 | + }, | |
1312 | + "node_modules/get-stream": { | |
1313 | + "version": "8.0.1", | |
1314 | + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", | |
1315 | + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", | |
1316 | + "dev": true, | |
1317 | + "license": "MIT", | |
1318 | + "engines": { | |
1319 | + "node": ">=16" | |
1320 | + }, | |
1321 | + "funding": { | |
1322 | + "url": "https://github.com/sponsors/sindresorhus" | |
1323 | + } | |
1324 | + }, | |
1325 | + "node_modules/gopd": { | |
1326 | + "version": "1.2.0", | |
1327 | + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", | |
1328 | + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", | |
1329 | + "license": "MIT", | |
1330 | + "engines": { | |
1331 | + "node": ">= 0.4" | |
1332 | + }, | |
1333 | + "funding": { | |
1334 | + "url": "https://github.com/sponsors/ljharb" | |
1335 | + } | |
1336 | + }, | |
1337 | + "node_modules/has-symbols": { | |
1338 | + "version": "1.1.0", | |
1339 | + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", | |
1340 | + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", | |
1341 | + "license": "MIT", | |
1342 | + "engines": { | |
1343 | + "node": ">= 0.4" | |
1344 | + }, | |
1345 | + "funding": { | |
1346 | + "url": "https://github.com/sponsors/ljharb" | |
1347 | + } | |
1348 | + }, | |
1349 | + "node_modules/has-tostringtag": { | |
1350 | + "version": "1.0.2", | |
1351 | + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", | |
1352 | + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", | |
1353 | + "license": "MIT", | |
1354 | + "dependencies": { | |
1355 | + "has-symbols": "^1.0.3" | |
1356 | + }, | |
1357 | + "engines": { | |
1358 | + "node": ">= 0.4" | |
1359 | + }, | |
1360 | + "funding": { | |
1361 | + "url": "https://github.com/sponsors/ljharb" | |
1362 | + } | |
1363 | + }, | |
1364 | + "node_modules/hasown": { | |
1365 | + "version": "2.0.2", | |
1366 | + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", | |
1367 | + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", | |
1368 | + "license": "MIT", | |
1369 | + "dependencies": { | |
1370 | + "function-bind": "^1.1.2" | |
1371 | + }, | |
1372 | + "engines": { | |
1373 | + "node": ">= 0.4" | |
1374 | + } | |
1375 | + }, | |
1376 | + "node_modules/human-signals": { | |
1377 | + "version": "5.0.0", | |
1378 | + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", | |
1379 | + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", | |
1380 | + "dev": true, | |
1381 | + "license": "Apache-2.0", | |
1382 | + "engines": { | |
1383 | + "node": ">=16.17.0" | |
1384 | + } | |
1385 | + }, | |
1386 | + "node_modules/is-stream": { | |
1387 | + "version": "3.0.0", | |
1388 | + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", | |
1389 | + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", | |
1390 | + "dev": true, | |
1391 | + "license": "MIT", | |
1392 | + "engines": { | |
1393 | + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" | |
1394 | + }, | |
1395 | + "funding": { | |
1396 | + "url": "https://github.com/sponsors/sindresorhus" | |
1397 | + } | |
1398 | + }, | |
1399 | + "node_modules/isexe": { | |
1400 | + "version": "2.0.0", | |
1401 | + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", | |
1402 | + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", | |
1403 | + "dev": true, | |
1404 | + "license": "ISC" | |
1405 | + }, | |
1406 | + "node_modules/js-tokens": { | |
1407 | + "version": "9.0.1", | |
1408 | + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", | |
1409 | + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", | |
1410 | + "dev": true, | |
1411 | + "license": "MIT" | |
1412 | + }, | |
1413 | + "node_modules/local-pkg": { | |
1414 | + "version": "0.5.1", | |
1415 | + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", | |
1416 | + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", | |
1417 | + "dev": true, | |
1418 | + "license": "MIT", | |
1419 | + "dependencies": { | |
1420 | + "mlly": "^1.7.3", | |
1421 | + "pkg-types": "^1.2.1" | |
1422 | + }, | |
1423 | + "engines": { | |
1424 | + "node": ">=14" | |
1425 | + }, | |
1426 | + "funding": { | |
1427 | + "url": "https://github.com/sponsors/antfu" | |
1428 | + } | |
1429 | + }, | |
1430 | + "node_modules/loupe": { | |
1431 | + "version": "2.3.7", | |
1432 | + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", | |
1433 | + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", | |
1434 | + "dev": true, | |
1435 | + "license": "MIT", | |
1436 | + "dependencies": { | |
1437 | + "get-func-name": "^2.0.1" | |
1438 | + } | |
1439 | + }, | |
1440 | + "node_modules/magic-string": { | |
1441 | + "version": "0.30.21", | |
1442 | + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", | |
1443 | + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", | |
1444 | + "dev": true, | |
1445 | + "license": "MIT", | |
1446 | + "dependencies": { | |
1447 | + "@jridgewell/sourcemap-codec": "^1.5.5" | |
1448 | + } | |
1449 | + }, | |
1450 | + "node_modules/math-intrinsics": { | |
1451 | + "version": "1.1.0", | |
1452 | + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", | |
1453 | + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", | |
1454 | + "license": "MIT", | |
1455 | + "engines": { | |
1456 | + "node": ">= 0.4" | |
1457 | + } | |
1458 | + }, | |
1459 | + "node_modules/merge-stream": { | |
1460 | + "version": "2.0.0", | |
1461 | + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", | |
1462 | + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", | |
1463 | + "dev": true, | |
1464 | + "license": "MIT" | |
1465 | + }, | |
1466 | + "node_modules/mime-db": { | |
1467 | + "version": "1.52.0", | |
1468 | + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", | |
1469 | + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", | |
1470 | + "license": "MIT", | |
1471 | + "engines": { | |
1472 | + "node": ">= 0.6" | |
1473 | + } | |
1474 | + }, | |
1475 | + "node_modules/mime-types": { | |
1476 | + "version": "2.1.35", | |
1477 | + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", | |
1478 | + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", | |
1479 | + "license": "MIT", | |
1480 | + "dependencies": { | |
1481 | + "mime-db": "1.52.0" | |
1482 | + }, | |
1483 | + "engines": { | |
1484 | + "node": ">= 0.6" | |
1485 | + } | |
1486 | + }, | |
1487 | + "node_modules/mimic-fn": { | |
1488 | + "version": "4.0.0", | |
1489 | + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", | |
1490 | + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", | |
1491 | + "dev": true, | |
1492 | + "license": "MIT", | |
1493 | + "engines": { | |
1494 | + "node": ">=12" | |
1495 | + }, | |
1496 | + "funding": { | |
1497 | + "url": "https://github.com/sponsors/sindresorhus" | |
1498 | + } | |
1499 | + }, | |
1500 | + "node_modules/mlly": { | |
1501 | + "version": "1.8.0", | |
1502 | + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", | |
1503 | + "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", | |
1504 | + "dev": true, | |
1505 | + "license": "MIT", | |
1506 | + "dependencies": { | |
1507 | + "acorn": "^8.15.0", | |
1508 | + "pathe": "^2.0.3", | |
1509 | + "pkg-types": "^1.3.1", | |
1510 | + "ufo": "^1.6.1" | |
1511 | + } | |
1512 | + }, | |
1513 | + "node_modules/mlly/node_modules/pathe": { | |
1514 | + "version": "2.0.3", | |
1515 | + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", | |
1516 | + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", | |
1517 | + "dev": true, | |
1518 | + "license": "MIT" | |
1519 | + }, | |
1520 | + "node_modules/ms": { | |
1521 | + "version": "2.1.3", | |
1522 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | |
1523 | + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", | |
1524 | + "dev": true, | |
1525 | + "license": "MIT" | |
1526 | + }, | |
1527 | + "node_modules/nanoid": { | |
1528 | + "version": "3.3.11", | |
1529 | + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", | |
1530 | + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", | |
1531 | + "dev": true, | |
1532 | + "funding": [ | |
1533 | + { | |
1534 | + "type": "github", | |
1535 | + "url": "https://github.com/sponsors/ai" | |
1536 | + } | |
1537 | + ], | |
1538 | + "license": "MIT", | |
1539 | + "bin": { | |
1540 | + "nanoid": "bin/nanoid.cjs" | |
1541 | + }, | |
1542 | + "engines": { | |
1543 | + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" | |
1544 | + } | |
1545 | + }, | |
1546 | + "node_modules/npm-run-path": { | |
1547 | + "version": "5.3.0", | |
1548 | + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", | |
1549 | + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", | |
1550 | + "dev": true, | |
1551 | + "license": "MIT", | |
1552 | + "dependencies": { | |
1553 | + "path-key": "^4.0.0" | |
1554 | + }, | |
1555 | + "engines": { | |
1556 | + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" | |
1557 | + }, | |
1558 | + "funding": { | |
1559 | + "url": "https://github.com/sponsors/sindresorhus" | |
1560 | + } | |
1561 | + }, | |
1562 | + "node_modules/npm-run-path/node_modules/path-key": { | |
1563 | + "version": "4.0.0", | |
1564 | + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", | |
1565 | + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", | |
1566 | + "dev": true, | |
1567 | + "license": "MIT", | |
1568 | + "engines": { | |
1569 | + "node": ">=12" | |
1570 | + }, | |
1571 | + "funding": { | |
1572 | + "url": "https://github.com/sponsors/sindresorhus" | |
1573 | + } | |
1574 | + }, | |
1575 | + "node_modules/onetime": { | |
1576 | + "version": "6.0.0", | |
1577 | + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", | |
1578 | + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", | |
1579 | + "dev": true, | |
1580 | + "license": "MIT", | |
1581 | + "dependencies": { | |
1582 | + "mimic-fn": "^4.0.0" | |
1583 | + }, | |
1584 | + "engines": { | |
1585 | + "node": ">=12" | |
1586 | + }, | |
1587 | + "funding": { | |
1588 | + "url": "https://github.com/sponsors/sindresorhus" | |
1589 | + } | |
1590 | + }, | |
1591 | + "node_modules/p-limit": { | |
1592 | + "version": "5.0.0", | |
1593 | + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", | |
1594 | + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", | |
1595 | + "dev": true, | |
1596 | + "license": "MIT", | |
1597 | + "dependencies": { | |
1598 | + "yocto-queue": "^1.0.0" | |
1599 | + }, | |
1600 | + "engines": { | |
1601 | + "node": ">=18" | |
1602 | + }, | |
1603 | + "funding": { | |
1604 | + "url": "https://github.com/sponsors/sindresorhus" | |
1605 | + } | |
1606 | + }, | |
1607 | + "node_modules/path-key": { | |
1608 | + "version": "3.1.1", | |
1609 | + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", | |
1610 | + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", | |
1611 | + "dev": true, | |
1612 | + "license": "MIT", | |
1613 | + "engines": { | |
1614 | + "node": ">=8" | |
1615 | + } | |
1616 | + }, | |
1617 | + "node_modules/pathe": { | |
1618 | + "version": "1.1.2", | |
1619 | + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", | |
1620 | + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", | |
1621 | + "dev": true, | |
1622 | + "license": "MIT" | |
1623 | + }, | |
1624 | + "node_modules/pathval": { | |
1625 | + "version": "1.1.1", | |
1626 | + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", | |
1627 | + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", | |
1628 | + "dev": true, | |
1629 | + "license": "MIT", | |
1630 | + "engines": { | |
1631 | + "node": "*" | |
1632 | + } | |
1633 | + }, | |
1634 | + "node_modules/picocolors": { | |
1635 | + "version": "1.1.1", | |
1636 | + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", | |
1637 | + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", | |
1638 | + "dev": true, | |
1639 | + "license": "ISC" | |
1640 | + }, | |
1641 | + "node_modules/pkg-types": { | |
1642 | + "version": "1.3.1", | |
1643 | + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", | |
1644 | + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", | |
1645 | + "dev": true, | |
1646 | + "license": "MIT", | |
1647 | + "dependencies": { | |
1648 | + "confbox": "^0.1.8", | |
1649 | + "mlly": "^1.7.4", | |
1650 | + "pathe": "^2.0.1" | |
1651 | + } | |
1652 | + }, | |
1653 | + "node_modules/pkg-types/node_modules/pathe": { | |
1654 | + "version": "2.0.3", | |
1655 | + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", | |
1656 | + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", | |
1657 | + "dev": true, | |
1658 | + "license": "MIT" | |
1659 | + }, | |
1660 | + "node_modules/postcss": { | |
1661 | + "version": "8.5.6", | |
1662 | + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", | |
1663 | + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", | |
1664 | + "dev": true, | |
1665 | + "funding": [ | |
1666 | + { | |
1667 | + "type": "opencollective", | |
1668 | + "url": "https://opencollective.com/postcss/" | |
1669 | + }, | |
1670 | + { | |
1671 | + "type": "tidelift", | |
1672 | + "url": "https://tidelift.com/funding/github/npm/postcss" | |
1673 | + }, | |
1674 | + { | |
1675 | + "type": "github", | |
1676 | + "url": "https://github.com/sponsors/ai" | |
1677 | + } | |
1678 | + ], | |
1679 | + "license": "MIT", | |
1680 | + "dependencies": { | |
1681 | + "nanoid": "^3.3.11", | |
1682 | + "picocolors": "^1.1.1", | |
1683 | + "source-map-js": "^1.2.1" | |
1684 | + }, | |
1685 | + "engines": { | |
1686 | + "node": "^10 || ^12 || >=14" | |
1687 | + } | |
1688 | + }, | |
1689 | + "node_modules/pretty-format": { | |
1690 | + "version": "29.7.0", | |
1691 | + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", | |
1692 | + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", | |
1693 | + "dev": true, | |
1694 | + "license": "MIT", | |
1695 | + "dependencies": { | |
1696 | + "@jest/schemas": "^29.6.3", | |
1697 | + "ansi-styles": "^5.0.0", | |
1698 | + "react-is": "^18.0.0" | |
1699 | + }, | |
1700 | + "engines": { | |
1701 | + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" | |
1702 | + } | |
1703 | + }, | |
1704 | + "node_modules/proxy-from-env": { | |
1705 | + "version": "1.1.0", | |
1706 | + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", | |
1707 | + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", | |
1708 | + "license": "MIT" | |
1709 | + }, | |
1710 | + "node_modules/react-is": { | |
1711 | + "version": "18.3.1", | |
1712 | + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", | |
1713 | + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", | |
1714 | + "dev": true, | |
1715 | + "license": "MIT" | |
1716 | + }, | |
1717 | + "node_modules/rollup": { | |
1718 | + "version": "4.55.1", | |
1719 | + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", | |
1720 | + "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", | |
1721 | + "dev": true, | |
1722 | + "license": "MIT", | |
1723 | + "dependencies": { | |
1724 | + "@types/estree": "1.0.8" | |
1725 | + }, | |
1726 | + "bin": { | |
1727 | + "rollup": "dist/bin/rollup" | |
1728 | + }, | |
1729 | + "engines": { | |
1730 | + "node": ">=18.0.0", | |
1731 | + "npm": ">=8.0.0" | |
1732 | + }, | |
1733 | + "optionalDependencies": { | |
1734 | + "@rollup/rollup-android-arm-eabi": "4.55.1", | |
1735 | + "@rollup/rollup-android-arm64": "4.55.1", | |
1736 | + "@rollup/rollup-darwin-arm64": "4.55.1", | |
1737 | + "@rollup/rollup-darwin-x64": "4.55.1", | |
1738 | + "@rollup/rollup-freebsd-arm64": "4.55.1", | |
1739 | + "@rollup/rollup-freebsd-x64": "4.55.1", | |
1740 | + "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", | |
1741 | + "@rollup/rollup-linux-arm-musleabihf": "4.55.1", | |
1742 | + "@rollup/rollup-linux-arm64-gnu": "4.55.1", | |
1743 | + "@rollup/rollup-linux-arm64-musl": "4.55.1", | |
1744 | + "@rollup/rollup-linux-loong64-gnu": "4.55.1", | |
1745 | + "@rollup/rollup-linux-loong64-musl": "4.55.1", | |
1746 | + "@rollup/rollup-linux-ppc64-gnu": "4.55.1", | |
1747 | + "@rollup/rollup-linux-ppc64-musl": "4.55.1", | |
1748 | + "@rollup/rollup-linux-riscv64-gnu": "4.55.1", | |
1749 | + "@rollup/rollup-linux-riscv64-musl": "4.55.1", | |
1750 | + "@rollup/rollup-linux-s390x-gnu": "4.55.1", | |
1751 | + "@rollup/rollup-linux-x64-gnu": "4.55.1", | |
1752 | + "@rollup/rollup-linux-x64-musl": "4.55.1", | |
1753 | + "@rollup/rollup-openbsd-x64": "4.55.1", | |
1754 | + "@rollup/rollup-openharmony-arm64": "4.55.1", | |
1755 | + "@rollup/rollup-win32-arm64-msvc": "4.55.1", | |
1756 | + "@rollup/rollup-win32-ia32-msvc": "4.55.1", | |
1757 | + "@rollup/rollup-win32-x64-gnu": "4.55.1", | |
1758 | + "@rollup/rollup-win32-x64-msvc": "4.55.1", | |
1759 | + "fsevents": "~2.3.2" | |
1760 | + } | |
1761 | + }, | |
1762 | + "node_modules/shebang-command": { | |
1763 | + "version": "2.0.0", | |
1764 | + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", | |
1765 | + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", | |
1766 | + "dev": true, | |
1767 | + "license": "MIT", | |
1768 | + "dependencies": { | |
1769 | + "shebang-regex": "^3.0.0" | |
1770 | + }, | |
1771 | + "engines": { | |
1772 | + "node": ">=8" | |
1773 | + } | |
1774 | + }, | |
1775 | + "node_modules/shebang-regex": { | |
1776 | + "version": "3.0.0", | |
1777 | + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", | |
1778 | + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", | |
1779 | + "dev": true, | |
1780 | + "license": "MIT", | |
1781 | + "engines": { | |
1782 | + "node": ">=8" | |
1783 | + } | |
1784 | + }, | |
1785 | + "node_modules/siginfo": { | |
1786 | + "version": "2.0.0", | |
1787 | + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", | |
1788 | + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", | |
1789 | + "dev": true, | |
1790 | + "license": "ISC" | |
1791 | + }, | |
1792 | + "node_modules/signal-exit": { | |
1793 | + "version": "4.1.0", | |
1794 | + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", | |
1795 | + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", | |
1796 | + "dev": true, | |
1797 | + "license": "ISC", | |
1798 | + "engines": { | |
1799 | + "node": ">=14" | |
1800 | + }, | |
1801 | + "funding": { | |
1802 | + "url": "https://github.com/sponsors/isaacs" | |
1803 | + } | |
1804 | + }, | |
1805 | + "node_modules/source-map-js": { | |
1806 | + "version": "1.2.1", | |
1807 | + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", | |
1808 | + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", | |
1809 | + "dev": true, | |
1810 | + "license": "BSD-3-Clause", | |
1811 | + "engines": { | |
1812 | + "node": ">=0.10.0" | |
1813 | + } | |
1814 | + }, | |
1815 | + "node_modules/stackback": { | |
1816 | + "version": "0.0.2", | |
1817 | + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", | |
1818 | + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", | |
1819 | + "dev": true, | |
1820 | + "license": "MIT" | |
1821 | + }, | |
1822 | + "node_modules/std-env": { | |
1823 | + "version": "3.10.0", | |
1824 | + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", | |
1825 | + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", | |
1826 | + "dev": true, | |
1827 | + "license": "MIT" | |
1828 | + }, | |
1829 | + "node_modules/strip-final-newline": { | |
1830 | + "version": "3.0.0", | |
1831 | + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", | |
1832 | + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", | |
1833 | + "dev": true, | |
1834 | + "license": "MIT", | |
1835 | + "engines": { | |
1836 | + "node": ">=12" | |
1837 | + }, | |
1838 | + "funding": { | |
1839 | + "url": "https://github.com/sponsors/sindresorhus" | |
1840 | + } | |
1841 | + }, | |
1842 | + "node_modules/strip-literal": { | |
1843 | + "version": "2.1.1", | |
1844 | + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", | |
1845 | + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", | |
1846 | + "dev": true, | |
1847 | + "license": "MIT", | |
1848 | + "dependencies": { | |
1849 | + "js-tokens": "^9.0.1" | |
1850 | + }, | |
1851 | + "funding": { | |
1852 | + "url": "https://github.com/sponsors/antfu" | |
1853 | + } | |
1854 | + }, | |
1855 | + "node_modules/tinybench": { | |
1856 | + "version": "2.9.0", | |
1857 | + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", | |
1858 | + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", | |
1859 | + "dev": true, | |
1860 | + "license": "MIT" | |
1861 | + }, | |
1862 | + "node_modules/tinypool": { | |
1863 | + "version": "0.8.4", | |
1864 | + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", | |
1865 | + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", | |
1866 | + "dev": true, | |
1867 | + "license": "MIT", | |
1868 | + "engines": { | |
1869 | + "node": ">=14.0.0" | |
1870 | + } | |
1871 | + }, | |
1872 | + "node_modules/tinyspy": { | |
1873 | + "version": "2.2.1", | |
1874 | + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", | |
1875 | + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", | |
1876 | + "dev": true, | |
1877 | + "license": "MIT", | |
1878 | + "engines": { | |
1879 | + "node": ">=14.0.0" | |
1880 | + } | |
1881 | + }, | |
1882 | + "node_modules/type-detect": { | |
1883 | + "version": "4.1.0", | |
1884 | + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", | |
1885 | + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", | |
1886 | + "dev": true, | |
1887 | + "license": "MIT", | |
1888 | + "engines": { | |
1889 | + "node": ">=4" | |
1890 | + } | |
1891 | + }, | |
1892 | + "node_modules/typescript": { | |
1893 | + "version": "5.9.3", | |
1894 | + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", | |
1895 | + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", | |
1896 | + "dev": true, | |
1897 | + "license": "Apache-2.0", | |
1898 | + "bin": { | |
1899 | + "tsc": "bin/tsc", | |
1900 | + "tsserver": "bin/tsserver" | |
1901 | + }, | |
1902 | + "engines": { | |
1903 | + "node": ">=14.17" | |
1904 | + } | |
1905 | + }, | |
1906 | + "node_modules/ufo": { | |
1907 | + "version": "1.6.3", | |
1908 | + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", | |
1909 | + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", | |
1910 | + "dev": true, | |
1911 | + "license": "MIT" | |
1912 | + }, | |
1913 | + "node_modules/vite": { | |
1914 | + "version": "5.4.21", | |
1915 | + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", | |
1916 | + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", | |
1917 | + "dev": true, | |
1918 | + "license": "MIT", | |
1919 | + "dependencies": { | |
1920 | + "esbuild": "^0.21.3", | |
1921 | + "postcss": "^8.4.43", | |
1922 | + "rollup": "^4.20.0" | |
1923 | + }, | |
1924 | + "bin": { | |
1925 | + "vite": "bin/vite.js" | |
1926 | + }, | |
1927 | + "engines": { | |
1928 | + "node": "^18.0.0 || >=20.0.0" | |
1929 | + }, | |
1930 | + "funding": { | |
1931 | + "url": "https://github.com/vitejs/vite?sponsor=1" | |
1932 | + }, | |
1933 | + "optionalDependencies": { | |
1934 | + "fsevents": "~2.3.3" | |
1935 | + }, | |
1936 | + "peerDependencies": { | |
1937 | + "@types/node": "^18.0.0 || >=20.0.0", | |
1938 | + "less": "*", | |
1939 | + "lightningcss": "^1.21.0", | |
1940 | + "sass": "*", | |
1941 | + "sass-embedded": "*", | |
1942 | + "stylus": "*", | |
1943 | + "sugarss": "*", | |
1944 | + "terser": "^5.4.0" | |
1945 | + }, | |
1946 | + "peerDependenciesMeta": { | |
1947 | + "@types/node": { | |
1948 | + "optional": true | |
1949 | + }, | |
1950 | + "less": { | |
1951 | + "optional": true | |
1952 | + }, | |
1953 | + "lightningcss": { | |
1954 | + "optional": true | |
1955 | + }, | |
1956 | + "sass": { | |
1957 | + "optional": true | |
1958 | + }, | |
1959 | + "sass-embedded": { | |
1960 | + "optional": true | |
1961 | + }, | |
1962 | + "stylus": { | |
1963 | + "optional": true | |
1964 | + }, | |
1965 | + "sugarss": { | |
1966 | + "optional": true | |
1967 | + }, | |
1968 | + "terser": { | |
1969 | + "optional": true | |
1970 | + } | |
1971 | + } | |
1972 | + }, | |
1973 | + "node_modules/vite-node": { | |
1974 | + "version": "1.6.1", | |
1975 | + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.1.tgz", | |
1976 | + "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==", | |
1977 | + "dev": true, | |
1978 | + "license": "MIT", | |
1979 | + "dependencies": { | |
1980 | + "cac": "^6.7.14", | |
1981 | + "debug": "^4.3.4", | |
1982 | + "pathe": "^1.1.1", | |
1983 | + "picocolors": "^1.0.0", | |
1984 | + "vite": "^5.0.0" | |
1985 | + }, | |
1986 | + "bin": { | |
1987 | + "vite-node": "vite-node.mjs" | |
1988 | + }, | |
1989 | + "engines": { | |
1990 | + "node": "^18.0.0 || >=20.0.0" | |
1991 | + }, | |
1992 | + "funding": { | |
1993 | + "url": "https://opencollective.com/vitest" | |
1994 | + } | |
1995 | + }, | |
1996 | + "node_modules/vitest": { | |
1997 | + "version": "1.6.1", | |
1998 | + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.1.tgz", | |
1999 | + "integrity": "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==", | |
2000 | + "dev": true, | |
2001 | + "license": "MIT", | |
2002 | + "dependencies": { | |
2003 | + "@vitest/expect": "1.6.1", | |
2004 | + "@vitest/runner": "1.6.1", | |
2005 | + "@vitest/snapshot": "1.6.1", | |
2006 | + "@vitest/spy": "1.6.1", | |
2007 | + "@vitest/utils": "1.6.1", | |
2008 | + "acorn-walk": "^8.3.2", | |
2009 | + "chai": "^4.3.10", | |
2010 | + "debug": "^4.3.4", | |
2011 | + "execa": "^8.0.1", | |
2012 | + "local-pkg": "^0.5.0", | |
2013 | + "magic-string": "^0.30.5", | |
2014 | + "pathe": "^1.1.1", | |
2015 | + "picocolors": "^1.0.0", | |
2016 | + "std-env": "^3.5.0", | |
2017 | + "strip-literal": "^2.0.0", | |
2018 | + "tinybench": "^2.5.1", | |
2019 | + "tinypool": "^0.8.3", | |
2020 | + "vite": "^5.0.0", | |
2021 | + "vite-node": "1.6.1", | |
2022 | + "why-is-node-running": "^2.2.2" | |
2023 | + }, | |
2024 | + "bin": { | |
2025 | + "vitest": "vitest.mjs" | |
2026 | + }, | |
2027 | + "engines": { | |
2028 | + "node": "^18.0.0 || >=20.0.0" | |
2029 | + }, | |
2030 | + "funding": { | |
2031 | + "url": "https://opencollective.com/vitest" | |
2032 | + }, | |
2033 | + "peerDependencies": { | |
2034 | + "@edge-runtime/vm": "*", | |
2035 | + "@types/node": "^18.0.0 || >=20.0.0", | |
2036 | + "@vitest/browser": "1.6.1", | |
2037 | + "@vitest/ui": "1.6.1", | |
2038 | + "happy-dom": "*", | |
2039 | + "jsdom": "*" | |
2040 | + }, | |
2041 | + "peerDependenciesMeta": { | |
2042 | + "@edge-runtime/vm": { | |
2043 | + "optional": true | |
2044 | + }, | |
2045 | + "@types/node": { | |
2046 | + "optional": true | |
2047 | + }, | |
2048 | + "@vitest/browser": { | |
2049 | + "optional": true | |
2050 | + }, | |
2051 | + "@vitest/ui": { | |
2052 | + "optional": true | |
2053 | + }, | |
2054 | + "happy-dom": { | |
2055 | + "optional": true | |
2056 | + }, | |
2057 | + "jsdom": { | |
2058 | + "optional": true | |
2059 | + } | |
2060 | + } | |
2061 | + }, | |
2062 | + "node_modules/which": { | |
2063 | + "version": "2.0.2", | |
2064 | + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", | |
2065 | + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", | |
2066 | + "dev": true, | |
2067 | + "license": "ISC", | |
2068 | + "dependencies": { | |
2069 | + "isexe": "^2.0.0" | |
2070 | + }, | |
2071 | + "bin": { | |
2072 | + "node-which": "bin/node-which" | |
2073 | + }, | |
2074 | + "engines": { | |
2075 | + "node": ">= 8" | |
2076 | + } | |
2077 | + }, | |
2078 | + "node_modules/why-is-node-running": { | |
2079 | + "version": "2.3.0", | |
2080 | + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", | |
2081 | + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", | |
2082 | + "dev": true, | |
2083 | + "license": "MIT", | |
2084 | + "dependencies": { | |
2085 | + "siginfo": "^2.0.0", | |
2086 | + "stackback": "0.0.2" | |
2087 | + }, | |
2088 | + "bin": { | |
2089 | + "why-is-node-running": "cli.js" | |
2090 | + }, | |
2091 | + "engines": { | |
2092 | + "node": ">=8" | |
2093 | + } | |
2094 | + }, | |
2095 | + "node_modules/yocto-queue": { | |
2096 | + "version": "1.2.2", | |
2097 | + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", | |
2098 | + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", | |
2099 | + "dev": true, | |
2100 | + "license": "MIT", | |
2101 | + "engines": { | |
2102 | + "node": ">=12.20" | |
2103 | + }, | |
2104 | + "funding": { | |
2105 | + "url": "https://github.com/sponsors/sindresorhus" | |
2106 | + } | |
2107 | + } | |
2108 | + } | |
2109 | +} | |
0 | 2110 | |