Merge pull request #2 from marciobarroso/fix/installation-warnings-nodejs-v24
Fix/installation warnings nodejs v24
This commit is contained in:
commit
424fda562d
|
|
@ -9,6 +9,7 @@ This extension pack provides everything needed to build enterprise-grade Next.js
|
|||
## ✨ Features
|
||||
|
||||
### 🤖 Specialized AI Agents
|
||||
|
||||
- **Domain Architect** - Business domain modeling and bounded context definition
|
||||
- **Next.js Architect** - Feature-Based Architecture and App Router patterns
|
||||
- **BaseController Specialist** - Database-agnostic controller patterns and schema-first design
|
||||
|
|
@ -23,6 +24,7 @@ This extension pack provides everything needed to build enterprise-grade Next.js
|
|||
- **Security Auditor** - Security best practices for modern web applications
|
||||
|
||||
### 🔄 Domain-Driven Workflows
|
||||
|
||||
- **Feature-Based Project Setup** - Initialize project from `nextjs-new-app` template
|
||||
- **Domain Feature Development** - Complete business domain implementation
|
||||
- **BaseController Implementation** - Database-agnostic controller setup
|
||||
|
|
@ -32,6 +34,7 @@ This extension pack provides everything needed to build enterprise-grade Next.js
|
|||
- **Deployment Pipeline** - Production deployment with Feature-Based Architecture
|
||||
|
||||
### 📝 Architecture Templates
|
||||
|
||||
- Feature Structure Template (Complete feature organization)
|
||||
- BaseController Extension Template (Database-agnostic controller)
|
||||
- Schema-First Entity Template (Zod validation + TypeScript types)
|
||||
|
|
@ -40,6 +43,7 @@ This extension pack provides everything needed to build enterprise-grade Next.js
|
|||
- Custom Hooks Template (Data fetching patterns)
|
||||
|
||||
### ✅ Architecture Checklists
|
||||
|
||||
- Feature-Based Architecture Development Checklist
|
||||
- BaseController Implementation Checklist
|
||||
- Domain-Driven Design Checklist
|
||||
|
|
@ -49,7 +53,9 @@ This extension pack provides everything needed to build enterprise-grade Next.js
|
|||
## 🚀 Quick Start
|
||||
|
||||
### Template Base
|
||||
|
||||
This extension pack is designed to work with the `nextjs-new-app` template:
|
||||
|
||||
```bash
|
||||
# Clone the base template
|
||||
git clone https://github.com/marciobarroso/nextjs-new-app.git my-project
|
||||
|
|
@ -60,6 +66,7 @@ pnpm install # or npm install
|
|||
```
|
||||
|
||||
### Extension Pack Usage
|
||||
|
||||
```bash
|
||||
# Use BMAD Method with this extension pack
|
||||
bmad-fba create-feature "user-management"
|
||||
|
|
@ -88,12 +95,14 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
|
|||
## 📚 Documentation
|
||||
|
||||
### Core Concepts
|
||||
|
||||
- [Project Structure](docs/project-structure.md)
|
||||
- [Component Patterns](docs/component-patterns.md)
|
||||
- [API Design](docs/api-design.md)
|
||||
- [State Management](docs/state-management.md)
|
||||
|
||||
### Guides
|
||||
|
||||
- [Getting Started](docs/getting-started.md)
|
||||
- [Development Workflow](docs/development-workflow.md)
|
||||
- [Testing Strategy](docs/testing-strategy.md)
|
||||
|
|
@ -102,6 +111,7 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
|
|||
## 🛠️ Technology Stack
|
||||
|
||||
### Core Technologies (from nextjs-new-app template)
|
||||
|
||||
- **Next.js 15.5.3** - React framework with App Router
|
||||
- **React 19.1.0** - Latest React with modern features
|
||||
- **TypeScript 5** - Strict type safety
|
||||
|
|
@ -110,12 +120,14 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
|
|||
- **pnpm** - Efficient package management
|
||||
|
||||
### Development Tools (pre-configured)
|
||||
|
||||
- **ESLint 9** - Code linting with Next.js integration
|
||||
- **Prettier 3.6.2** - Code formatting with import sorting
|
||||
- **Husky 9.1.7** - Git hooks for code quality
|
||||
- **Jest** - Testing framework (configured, ready for implementation)
|
||||
|
||||
### Feature-Based Architecture Additions
|
||||
|
||||
- **Zod** - Schema validation and type generation
|
||||
- **BaseController Pattern** - Database-agnostic CRUD operations
|
||||
- **Domain-Driven Design** - Business domain organization
|
||||
|
|
@ -124,6 +136,7 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
|
|||
## 🎯 Best Practices
|
||||
|
||||
### Code Quality
|
||||
|
||||
- Strict TypeScript configuration
|
||||
- Comprehensive ESLint rules
|
||||
- Automatic code formatting with Prettier
|
||||
|
|
@ -131,6 +144,7 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
|
|||
- API-first design approach
|
||||
|
||||
### Performance
|
||||
|
||||
- Server Components by default
|
||||
- Client Components only when needed
|
||||
- Image optimization with Next.js Image
|
||||
|
|
@ -138,6 +152,7 @@ This extension pack implements Feature-Based Architecture with Domain-Driven Des
|
|||
- Core Web Vitals monitoring
|
||||
|
||||
### Security
|
||||
|
||||
- Input validation with Zod
|
||||
- CSRF protection
|
||||
- Secure headers middleware
|
||||
|
|
@ -195,6 +210,7 @@ This extension pack is part of the BMAD Method project and follows the same MIT
|
|||
**Current Version:** 1.0.0
|
||||
|
||||
**Compatibility:**
|
||||
|
||||
- Next.js 14+
|
||||
- Node.js 18+
|
||||
- TypeScript 5+
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
bundle:
|
||||
name: Next.js Feature-Based Architecture Team
|
||||
icon: ⚛️
|
||||
description: Complete Feature-Based Architecture team for Next.js 15+ applications with Domain-Driven Design, TypeScript, Tailwind 4.x, and BaseController patterns
|
||||
description: Core Feature-Based Architecture team for Next.js 15+ applications with Domain-Driven Design, TypeScript, Tailwind 4.x, and BaseController patterns
|
||||
agents:
|
||||
- domain-architect
|
||||
- nextjs-architect
|
||||
|
|
@ -10,17 +10,9 @@ agents:
|
|||
- typescript-specialist
|
||||
- tailwind-designer
|
||||
- api-developer
|
||||
- database-specialist
|
||||
- auth-specialist
|
||||
- testing-engineer
|
||||
- deployment-specialist
|
||||
- performance-optimizer
|
||||
- security-auditor
|
||||
workflows:
|
||||
- feature-based-project-setup
|
||||
- domain-feature-development
|
||||
- base-controller-implementation
|
||||
- cross-feature-integration
|
||||
- schema-first-development
|
||||
- testing-pipeline
|
||||
- deployment-pipeline
|
||||
- feature-development
|
||||
- nextjs-project-setup
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
# BaseController Implementation Checklist
|
||||
|
||||
## Abstract Class Setup
|
||||
|
||||
- [ ] BaseController abstract class created in `shared/core/`
|
||||
- [ ] Generic type parameter `<T>` properly defined
|
||||
- [ ] Database client abstraction implemented
|
||||
|
|
@ -8,6 +9,7 @@
|
|||
- [ ] Constructor properly initializes dependencies
|
||||
|
||||
## CRUD Operations Implementation
|
||||
|
||||
- [ ] `getAll` method implemented with pagination
|
||||
- [ ] `getById` method implemented with proper error handling
|
||||
- [ ] `create` method implemented with validation
|
||||
|
|
@ -16,6 +18,7 @@
|
|||
- [ ] All methods return proper HTTP responses
|
||||
|
||||
## Search & Filtering
|
||||
|
||||
- [ ] Abstract `buildSearchFilter` method defined
|
||||
- [ ] Search parameter extraction implemented
|
||||
- [ ] Database-agnostic filter pattern established
|
||||
|
|
@ -24,6 +27,7 @@
|
|||
- [ ] Search performance considered
|
||||
|
||||
## Validation & Schema Integration
|
||||
|
||||
- [ ] Zod schema validation on all inputs
|
||||
- [ ] Create schema validation implemented
|
||||
- [ ] Update schema validation implemented
|
||||
|
|
@ -32,6 +36,7 @@
|
|||
- [ ] Validation error messages are user-friendly
|
||||
|
||||
## Error Handling
|
||||
|
||||
- [ ] Consistent error response format
|
||||
- [ ] HTTP status codes properly used
|
||||
- [ ] Validation errors properly formatted
|
||||
|
|
@ -40,6 +45,7 @@
|
|||
- [ ] Error messages don't expose sensitive data
|
||||
|
||||
## Database Abstraction
|
||||
|
||||
- [ ] Database client interface defined
|
||||
- [ ] Connection management abstracted
|
||||
- [ ] Database-specific operations isolated
|
||||
|
|
@ -48,6 +54,7 @@
|
|||
- [ ] Connection pooling handled
|
||||
|
||||
## Response Formatting
|
||||
|
||||
- [ ] Consistent API response structure
|
||||
- [ ] Success responses properly formatted
|
||||
- [ ] Error responses standardized
|
||||
|
|
@ -56,6 +63,7 @@
|
|||
- [ ] Content-Type headers set correctly
|
||||
|
||||
## Feature Controller Extension
|
||||
|
||||
- [ ] Feature controller extends BaseController
|
||||
- [ ] Entity-specific `buildSearchFilter` implemented
|
||||
- [ ] Custom business logic methods added
|
||||
|
|
@ -64,6 +72,7 @@
|
|||
- [ ] Controller singleton pattern implemented (if needed)
|
||||
|
||||
## Type Safety
|
||||
|
||||
- [ ] Generic types properly constrained
|
||||
- [ ] Entity model interfaces defined
|
||||
- [ ] API response types defined
|
||||
|
|
@ -72,6 +81,7 @@
|
|||
- [ ] Return types explicitly defined
|
||||
|
||||
## Performance Optimization
|
||||
|
||||
- [ ] Database queries optimized
|
||||
- [ ] Proper indexing strategy planned
|
||||
- [ ] Pagination limits enforced
|
||||
|
|
@ -80,6 +90,7 @@
|
|||
- [ ] Database connection reuse implemented
|
||||
|
||||
## Testing
|
||||
|
||||
- [ ] Unit tests for BaseController methods
|
||||
- [ ] Mock database client created
|
||||
- [ ] Test data fixtures defined
|
||||
|
|
@ -88,6 +99,7 @@
|
|||
- [ ] Performance tests implemented
|
||||
|
||||
## Documentation
|
||||
|
||||
- [ ] BaseController usage documented
|
||||
- [ ] Extension patterns documented
|
||||
- [ ] Database integration examples provided
|
||||
|
|
@ -96,6 +108,7 @@
|
|||
- [ ] Performance considerations documented
|
||||
|
||||
## Logging & Monitoring
|
||||
|
||||
- [ ] Request/response logging implemented
|
||||
- [ ] Error logging with stack traces
|
||||
- [ ] Performance metrics captured
|
||||
|
|
@ -104,6 +117,7 @@
|
|||
- [ ] Audit trail for data changes
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- [ ] Input sanitization implemented
|
||||
- [ ] SQL injection prevention (for SQL databases)
|
||||
- [ ] NoSQL injection prevention (for NoSQL databases)
|
||||
|
|
@ -112,7 +126,9 @@
|
|||
- [ ] Sensitive data handling
|
||||
|
||||
## Database-Specific Implementations
|
||||
|
||||
### For SQL Databases (Prisma/TypeORM)
|
||||
|
||||
- [ ] Proper WHERE clause generation
|
||||
- [ ] JOIN operations handled
|
||||
- [ ] Transaction support implemented
|
||||
|
|
@ -120,6 +136,7 @@
|
|||
- [ ] Relationship loading optimized
|
||||
|
||||
### For MongoDB (Mongoose)
|
||||
|
||||
- [ ] Query object generation
|
||||
- [ ] Aggregation pipeline support
|
||||
- [ ] Index utilization optimized
|
||||
|
|
@ -127,6 +144,7 @@
|
|||
- [ ] Connection string security
|
||||
|
||||
### For Serverless Databases
|
||||
|
||||
- [ ] Connection pooling optimized
|
||||
- [ ] Cold start mitigation
|
||||
- [ ] Query timeout handling
|
||||
|
|
@ -134,6 +152,7 @@
|
|||
- [ ] Cost optimization considered
|
||||
|
||||
## Integration Points
|
||||
|
||||
- [ ] Authentication middleware integration
|
||||
- [ ] Authorization checks implemented
|
||||
- [ ] Audit logging integrated
|
||||
|
|
@ -142,6 +161,7 @@
|
|||
- [ ] External API integration patterns
|
||||
|
||||
## Production Readiness
|
||||
|
||||
- [ ] Environment variable configuration
|
||||
- [ ] Production database connection
|
||||
- [ ] Error monitoring integration
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
# React Component Development Checklist
|
||||
|
||||
## Pre-Development
|
||||
|
||||
- [ ] Component purpose and requirements clearly defined
|
||||
- [ ] Component interface (props) designed
|
||||
- [ ] Accessibility requirements identified
|
||||
- [ ] Design mockup/wireframe available
|
||||
|
||||
## Development
|
||||
|
||||
- [ ] TypeScript interface defined for all props
|
||||
- [ ] Component follows naming conventions (PascalCase)
|
||||
- [ ] Proper file structure and organization
|
||||
|
|
@ -14,6 +16,7 @@
|
|||
- [ ] Error boundaries implemented for critical components
|
||||
|
||||
## Styling
|
||||
|
||||
- [ ] Tailwind CSS classes used consistently
|
||||
- [ ] Responsive design implemented
|
||||
- [ ] Dark mode support (if applicable)
|
||||
|
|
@ -21,6 +24,7 @@
|
|||
- [ ] CSS class conflicts avoided
|
||||
|
||||
## Accessibility (a11y)
|
||||
|
||||
- [ ] Semantic HTML elements used
|
||||
- [ ] ARIA labels added where needed
|
||||
- [ ] Keyboard navigation supported
|
||||
|
|
@ -29,6 +33,7 @@
|
|||
- [ ] Color contrast meets WCAG guidelines
|
||||
|
||||
## Performance
|
||||
|
||||
- [ ] Unnecessary re-renders avoided
|
||||
- [ ] React.memo used where appropriate
|
||||
- [ ] Heavy computations memoized with useMemo
|
||||
|
|
@ -36,6 +41,7 @@
|
|||
- [ ] Large lists virtualized (if applicable)
|
||||
|
||||
## Testing
|
||||
|
||||
- [ ] Unit tests written and passing
|
||||
- [ ] Component renders without crashing
|
||||
- [ ] Props validation tested
|
||||
|
|
@ -44,6 +50,7 @@
|
|||
- [ ] Accessibility testing performed
|
||||
|
||||
## Code Quality
|
||||
|
||||
- [ ] TypeScript types are strict and accurate
|
||||
- [ ] ESLint rules pass
|
||||
- [ ] Prettier formatting applied
|
||||
|
|
@ -52,6 +59,7 @@
|
|||
- [ ] Comments added for complex logic
|
||||
|
||||
## Integration
|
||||
|
||||
- [ ] Component integrates well with parent components
|
||||
- [ ] State management working correctly
|
||||
- [ ] API calls handled properly (if applicable)
|
||||
|
|
@ -59,12 +67,14 @@
|
|||
- [ ] Loading states implemented
|
||||
|
||||
## Documentation
|
||||
|
||||
- [ ] Component documented with JSDoc comments
|
||||
- [ ] Props interface documented
|
||||
- [ ] Usage examples provided
|
||||
- [ ] Storybook story created (if using Storybook)
|
||||
|
||||
## Review
|
||||
|
||||
- [ ] Code review completed
|
||||
- [ ] Design review completed
|
||||
- [ ] Performance review completed
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
# Feature-Based Architecture Development Checklist
|
||||
|
||||
## Domain Analysis & Planning
|
||||
|
||||
- [ ] Business domain clearly identified and defined
|
||||
- [ ] Bounded context boundaries established
|
||||
- [ ] Domain entities and relationships mapped
|
||||
|
|
@ -9,6 +10,7 @@
|
|||
- [ ] Business requirements thoroughly documented
|
||||
|
||||
## Project Structure
|
||||
|
||||
- [ ] Feature organized in `(features)/({feature-name})/` route group
|
||||
- [ ] API layer structured in `api/{entity-name}/` directory
|
||||
- [ ] Components organized in `components/` directory within feature
|
||||
|
|
@ -17,6 +19,7 @@
|
|||
- [ ] Feature pages organized in appropriate subdirectories
|
||||
|
||||
## Schema-First Development
|
||||
|
||||
- [ ] Zod schema defined for entity validation
|
||||
- [ ] TypeScript interfaces derived from Zod schemas
|
||||
- [ ] Create, Update, and Search schemas properly defined
|
||||
|
|
@ -25,6 +28,7 @@
|
|||
- [ ] Schema validation covers all business rules
|
||||
|
||||
## BaseController Implementation
|
||||
|
||||
- [ ] Entity controller extends BaseController abstract class
|
||||
- [ ] Database-agnostic design maintained
|
||||
- [ ] `buildSearchFilter` method implemented for entity-specific search
|
||||
|
|
@ -33,6 +37,7 @@
|
|||
- [ ] Controller uses Zod schema for validation
|
||||
|
||||
## API Routes Development
|
||||
|
||||
- [ ] Collection routes (`/api/{entity}`) implemented
|
||||
- [ ] Individual entity routes (`/api/{entity}/[id]`) implemented
|
||||
- [ ] HTTP methods properly implemented (GET, POST, PUT, DELETE)
|
||||
|
|
@ -41,6 +46,7 @@
|
|||
- [ ] Database connection properly managed
|
||||
|
||||
## Custom Hooks Implementation
|
||||
|
||||
- [ ] Data fetching hooks follow naming convention (`use{Entities}`)
|
||||
- [ ] Mutation hooks follow naming convention (`use{Entity}Mutations`)
|
||||
- [ ] Single entity hooks follow naming convention (`use{Entity}`)
|
||||
|
|
@ -50,6 +56,7 @@
|
|||
- [ ] Search functionality integrated
|
||||
|
||||
## React Components
|
||||
|
||||
- [ ] Components follow PascalCase naming convention
|
||||
- [ ] Form components implemented (`{Entity}Form`)
|
||||
- [ ] List components implemented (`{Entity}List`)
|
||||
|
|
@ -60,6 +67,7 @@
|
|||
- [ ] Components follow accessibility guidelines
|
||||
|
||||
## Next.js Pages
|
||||
|
||||
- [ ] Feature index page implemented (`page.tsx`)
|
||||
- [ ] Entity detail pages implemented (`[id]/page.tsx`)
|
||||
- [ ] Create new entity page implemented (`new/page.tsx`)
|
||||
|
|
@ -69,6 +77,7 @@
|
|||
- [ ] Proper layouts and navigation implemented
|
||||
|
||||
## Type Safety
|
||||
|
||||
- [ ] Strict TypeScript configuration enforced
|
||||
- [ ] No `any` types used
|
||||
- [ ] End-to-end type safety from database to UI
|
||||
|
|
@ -77,6 +86,7 @@
|
|||
- [ ] Generic types used appropriately
|
||||
|
||||
## Code Quality
|
||||
|
||||
- [ ] ESLint rules passing without warnings
|
||||
- [ ] Prettier formatting applied consistently
|
||||
- [ ] No console statements in production code
|
||||
|
|
@ -85,6 +95,7 @@
|
|||
- [ ] Code follows established conventions
|
||||
|
||||
## Testing
|
||||
|
||||
- [ ] Unit tests for controller logic
|
||||
- [ ] API route integration tests
|
||||
- [ ] React component tests
|
||||
|
|
@ -93,6 +104,7 @@
|
|||
- [ ] Test data and mocks properly implemented
|
||||
|
||||
## Database Integration
|
||||
|
||||
- [ ] Database connection abstracted properly
|
||||
- [ ] ORM/ODM integration follows patterns
|
||||
- [ ] Migration strategy considered
|
||||
|
|
@ -101,6 +113,7 @@
|
|||
- [ ] Data relationships properly modeled
|
||||
|
||||
## Performance Considerations
|
||||
|
||||
- [ ] Server Components used for data fetching
|
||||
- [ ] Client Components minimized
|
||||
- [ ] Database queries optimized
|
||||
|
|
@ -109,6 +122,7 @@
|
|||
- [ ] Bundle size impact assessed
|
||||
|
||||
## Security
|
||||
|
||||
- [ ] Input validation on all API endpoints
|
||||
- [ ] Authentication/authorization considered
|
||||
- [ ] SQL injection prevention (if using SQL database)
|
||||
|
|
@ -117,6 +131,7 @@
|
|||
- [ ] Error messages don't leak sensitive information
|
||||
|
||||
## Documentation
|
||||
|
||||
- [ ] Feature purpose and scope documented
|
||||
- [ ] API endpoints documented
|
||||
- [ ] Component usage examples provided
|
||||
|
|
@ -125,6 +140,7 @@
|
|||
- [ ] Database schema documented
|
||||
|
||||
## Integration & Dependencies
|
||||
|
||||
- [ ] Shared infrastructure properly utilized
|
||||
- [ ] Cross-feature dependencies minimized
|
||||
- [ ] Integration points well-defined
|
||||
|
|
@ -133,6 +149,7 @@
|
|||
- [ ] Feature can be tested in isolation
|
||||
|
||||
## Deployment Readiness
|
||||
|
||||
- [ ] Environment variables properly configured
|
||||
- [ ] Production build successful
|
||||
- [ ] Database migrations ready (if needed)
|
||||
|
|
@ -141,6 +158,7 @@
|
|||
- [ ] Health checks implemented
|
||||
|
||||
## Review & Quality Assurance
|
||||
|
||||
- [ ] Code review completed
|
||||
- [ ] Architecture review completed
|
||||
- [ ] Business logic verified
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
# Create API Endpoint
|
||||
|
||||
## Task Overview
|
||||
|
||||
Create a new API endpoint in Next.js with proper TypeScript typing, validation, and error handling.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Next.js project with App Router
|
||||
- TypeScript configured
|
||||
- Understanding of HTTP methods and status codes
|
||||
|
|
@ -11,9 +13,11 @@ Create a new API endpoint in Next.js with proper TypeScript typing, validation,
|
|||
## Steps
|
||||
|
||||
### 1. Create API Route File
|
||||
|
||||
Create `src/app/api/{endpoint}/route.ts`:
|
||||
|
||||
```typescript
|
||||
import { NextRequest, NextResponse } from 'next/server'
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
|
||||
// Define request/response types
|
||||
interface RequestBody {
|
||||
|
|
@ -29,72 +33,65 @@ export async function GET(request: NextRequest) {
|
|||
// Handle GET request logic
|
||||
const data: ResponseData = {
|
||||
// Your response data
|
||||
}
|
||||
};
|
||||
|
||||
return NextResponse.json(data, { status: 200 })
|
||||
return NextResponse.json(data, { status: 200 });
|
||||
} catch (error) {
|
||||
console.error('API Error:', error)
|
||||
return NextResponse.json(
|
||||
{ error: 'Internal server error' },
|
||||
{ status: 500 }
|
||||
)
|
||||
console.error('API Error:', error);
|
||||
return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
const body: RequestBody = await request.json()
|
||||
const body: RequestBody = await request.json();
|
||||
|
||||
// Validate request body
|
||||
if (!body) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Request body is required' },
|
||||
{ status: 400 }
|
||||
)
|
||||
return NextResponse.json({ error: 'Request body is required' }, { status: 400 });
|
||||
}
|
||||
|
||||
// Handle POST request logic
|
||||
const data: ResponseData = {
|
||||
// Your response data
|
||||
}
|
||||
};
|
||||
|
||||
return NextResponse.json(data, { status: 201 })
|
||||
return NextResponse.json(data, { status: 201 });
|
||||
} catch (error) {
|
||||
console.error('API Error:', error)
|
||||
return NextResponse.json(
|
||||
{ error: 'Internal server error' },
|
||||
{ status: 500 }
|
||||
)
|
||||
console.error('API Error:', error);
|
||||
return NextResponse.json({ error: 'Internal server error' }, { status: 500 });
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Add Request Validation (Optional)
|
||||
|
||||
Install and use Zod for validation:
|
||||
|
||||
```bash
|
||||
npm install zod
|
||||
```
|
||||
|
||||
```typescript
|
||||
import { z } from 'zod'
|
||||
import { z } from 'zod';
|
||||
|
||||
const requestSchema = z.object({
|
||||
name: z.string().min(1),
|
||||
email: z.string().email(),
|
||||
})
|
||||
});
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
const body = await request.json()
|
||||
const validatedData = requestSchema.parse(body)
|
||||
const body = await request.json();
|
||||
const validatedData = requestSchema.parse(body);
|
||||
|
||||
// Use validatedData safely
|
||||
} catch (error) {
|
||||
if (error instanceof z.ZodError) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Invalid request data', details: error.errors },
|
||||
{ status: 400 }
|
||||
)
|
||||
{ status: 400 },
|
||||
);
|
||||
}
|
||||
// Handle other errors
|
||||
}
|
||||
|
|
@ -102,36 +99,39 @@ export async function POST(request: NextRequest) {
|
|||
```
|
||||
|
||||
### 3. Create API Client Helper
|
||||
|
||||
Create `src/lib/api-client.ts`:
|
||||
|
||||
```typescript
|
||||
class ApiError extends Error {
|
||||
constructor(public status: number, message: string) {
|
||||
super(message)
|
||||
this.name = 'ApiError'
|
||||
constructor(
|
||||
public status: number,
|
||||
message: string,
|
||||
) {
|
||||
super(message);
|
||||
this.name = 'ApiError';
|
||||
}
|
||||
}
|
||||
|
||||
export async function apiCall<T>(
|
||||
url: string,
|
||||
options?: RequestInit
|
||||
): Promise<T> {
|
||||
export async function apiCall<T>(url: string, options?: RequestInit): Promise<T> {
|
||||
const response = await fetch(url, {
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
...options?.headers,
|
||||
},
|
||||
...options,
|
||||
})
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new ApiError(response.status, `HTTP error! status: ${response.status}`)
|
||||
throw new ApiError(response.status, `HTTP error! status: ${response.status}`);
|
||||
}
|
||||
|
||||
return response.json()
|
||||
return response.json();
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Use in Components
|
||||
|
||||
```typescript
|
||||
'use client'
|
||||
|
||||
|
|
@ -164,6 +164,7 @@ export function ExampleComponent() {
|
|||
```
|
||||
|
||||
## Validation Checklist
|
||||
|
||||
- [ ] API route file created in correct location
|
||||
- [ ] Proper TypeScript types defined
|
||||
- [ ] Error handling implemented
|
||||
|
|
@ -173,6 +174,7 @@ export function ExampleComponent() {
|
|||
- [ ] Error cases handled gracefully
|
||||
|
||||
## Best Practices
|
||||
|
||||
- Use proper HTTP status codes
|
||||
- Implement consistent error response format
|
||||
- Add request validation for security
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
# Setup Project from nextjs-new-app Template
|
||||
|
||||
## Task Overview
|
||||
|
||||
Initialize a new Feature-Based Architecture project using the pre-configured `nextjs-new-app` template with Next.js 15+, TypeScript, Tailwind CSS 4.x, and development tooling.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Node.js 20.10.0+ installed
|
||||
- pnpm (recommended) or npm package manager
|
||||
- Git for version control
|
||||
|
|
@ -12,6 +14,7 @@ Initialize a new Feature-Based Architecture project using the pre-configured `ne
|
|||
## Steps
|
||||
|
||||
### 1. Clone Template Repository
|
||||
|
||||
```bash
|
||||
# Clone the nextjs-new-app template
|
||||
git clone https://github.com/marciobarroso/nextjs-new-app.git {project_name}
|
||||
|
|
@ -25,6 +28,7 @@ git commit -m "Initial commit from nextjs-new-app template"
|
|||
```
|
||||
|
||||
### 2. Install Dependencies
|
||||
|
||||
```bash
|
||||
# Install using pnpm (recommended by template)
|
||||
pnpm install
|
||||
|
|
@ -34,7 +38,9 @@ pnpm install
|
|||
```
|
||||
|
||||
### 3. Configure Project Details
|
||||
|
||||
Update `package.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "{project_name}",
|
||||
|
|
@ -45,6 +51,7 @@ Update `package.json`:
|
|||
```
|
||||
|
||||
### 4. Set Up Feature-Based Architecture Structure
|
||||
|
||||
```bash
|
||||
# Create the Feature-Based Architecture directories
|
||||
mkdir -p app/\(features\)
|
||||
|
|
@ -60,122 +67,134 @@ mkdir -p app/shared/lib
|
|||
```
|
||||
|
||||
### 5. Implement BaseController Foundation
|
||||
|
||||
Create `app/shared/core/base-controller.ts`:
|
||||
|
||||
```typescript
|
||||
import { z } from 'zod'
|
||||
import { NextRequest, NextResponse } from 'next/server'
|
||||
import { z } from 'zod';
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
|
||||
export abstract class BaseController<T> {
|
||||
protected dbClient: any
|
||||
protected schema?: z.ZodSchema
|
||||
protected dbClient: any;
|
||||
protected schema?: z.ZodSchema;
|
||||
|
||||
constructor(dbClient: any, schema?: z.ZodSchema) {
|
||||
this.dbClient = dbClient
|
||||
this.schema = schema
|
||||
this.dbClient = dbClient;
|
||||
this.schema = schema;
|
||||
}
|
||||
|
||||
// Standard CRUD operations
|
||||
async getAll(request: NextRequest): Promise<NextResponse> {
|
||||
try {
|
||||
const { searchParams } = new URL(request.url)
|
||||
const query = searchParams.get('query')
|
||||
const page = parseInt(searchParams.get('page') || '1')
|
||||
const limit = parseInt(searchParams.get('limit') || '20')
|
||||
const { searchParams } = new URL(request.url);
|
||||
const query = searchParams.get('query');
|
||||
const page = parseInt(searchParams.get('page') || '1');
|
||||
const limit = parseInt(searchParams.get('limit') || '20');
|
||||
|
||||
const filter = this.buildSearchFilter(query)
|
||||
const filter = this.buildSearchFilter(query);
|
||||
// Implement database-specific query here
|
||||
|
||||
return NextResponse.json({
|
||||
data: [],
|
||||
pagination: { page, limit, total: 0, totalPages: 0 },
|
||||
success: true
|
||||
})
|
||||
success: true,
|
||||
});
|
||||
} catch (error) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Failed to fetch records', success: false },
|
||||
{ status: 500 }
|
||||
)
|
||||
{ status: 500 },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async getById(request: NextRequest, { params }: { params: { id: string } }): Promise<NextResponse> {
|
||||
async getById(
|
||||
request: NextRequest,
|
||||
{ params }: { params: { id: string } },
|
||||
): Promise<NextResponse> {
|
||||
try {
|
||||
// Implement database-specific findById here
|
||||
return NextResponse.json({ data: null, success: true })
|
||||
return NextResponse.json({ data: null, success: true });
|
||||
} catch (error) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Failed to fetch record', success: false },
|
||||
{ status: 500 }
|
||||
)
|
||||
{ status: 500 },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async create(request: NextRequest): Promise<NextResponse> {
|
||||
try {
|
||||
const body = await request.json()
|
||||
const body = await request.json();
|
||||
|
||||
if (this.schema) {
|
||||
const validatedData = this.schema.parse(body)
|
||||
const validatedData = this.schema.parse(body);
|
||||
// Implement database-specific create here
|
||||
}
|
||||
|
||||
return NextResponse.json({ data: null, success: true }, { status: 201 })
|
||||
return NextResponse.json({ data: null, success: true }, { status: 201 });
|
||||
} catch (error) {
|
||||
if (error instanceof z.ZodError) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Validation failed', details: error.errors, success: false },
|
||||
{ status: 400 }
|
||||
)
|
||||
{ status: 400 },
|
||||
);
|
||||
}
|
||||
return NextResponse.json(
|
||||
{ error: 'Failed to create record', success: false },
|
||||
{ status: 500 }
|
||||
)
|
||||
{ status: 500 },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async update(request: NextRequest, { params }: { params: { id: string } }): Promise<NextResponse> {
|
||||
async update(
|
||||
request: NextRequest,
|
||||
{ params }: { params: { id: string } },
|
||||
): Promise<NextResponse> {
|
||||
try {
|
||||
const body = await request.json()
|
||||
const body = await request.json();
|
||||
|
||||
if (this.schema) {
|
||||
const validatedData = this.schema.partial().parse(body)
|
||||
const validatedData = this.schema.partial().parse(body);
|
||||
// Implement database-specific update here
|
||||
}
|
||||
|
||||
return NextResponse.json({ data: null, success: true })
|
||||
return NextResponse.json({ data: null, success: true });
|
||||
} catch (error) {
|
||||
if (error instanceof z.ZodError) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Validation failed', details: error.errors, success: false },
|
||||
{ status: 400 }
|
||||
)
|
||||
{ status: 400 },
|
||||
);
|
||||
}
|
||||
return NextResponse.json(
|
||||
{ error: 'Failed to update record', success: false },
|
||||
{ status: 500 }
|
||||
)
|
||||
{ status: 500 },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
async delete(request: NextRequest, { params }: { params: { id: string } }): Promise<NextResponse> {
|
||||
async delete(
|
||||
request: NextRequest,
|
||||
{ params }: { params: { id: string } },
|
||||
): Promise<NextResponse> {
|
||||
try {
|
||||
// Implement database-specific delete here
|
||||
return NextResponse.json({ success: true, message: 'Record deleted successfully' })
|
||||
return NextResponse.json({ success: true, message: 'Record deleted successfully' });
|
||||
} catch (error) {
|
||||
return NextResponse.json(
|
||||
{ error: 'Failed to delete record', success: false },
|
||||
{ status: 500 }
|
||||
)
|
||||
{ status: 500 },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Abstract method for search filtering
|
||||
protected abstract buildSearchFilter(query: string | null): Record<string, any>
|
||||
protected abstract buildSearchFilter(query: string | null): Record<string, any>;
|
||||
}
|
||||
```
|
||||
|
||||
### 6. Add Zod for Schema Validation
|
||||
|
||||
```bash
|
||||
# Install Zod for schema validation
|
||||
pnpm add zod
|
||||
|
|
@ -183,7 +202,9 @@ pnpm add zod
|
|||
```
|
||||
|
||||
### 7. Configure Environment Variables
|
||||
|
||||
Create `.env.local`:
|
||||
|
||||
```env
|
||||
# Database Configuration (customize based on your choice)
|
||||
DATABASE_URL="your-database-url"
|
||||
|
|
@ -196,7 +217,9 @@ NEXT_PUBLIC_APP_VERSION="1.0.0"
|
|||
```
|
||||
|
||||
### 8. Update TypeScript Configuration
|
||||
|
||||
The template already provides optimal TypeScript configuration, but you can extend `tsconfig.json` if needed:
|
||||
|
||||
```json
|
||||
{
|
||||
"compilerOptions": {
|
||||
|
|
@ -210,6 +233,7 @@ The template already provides optimal TypeScript configuration, but you can exte
|
|||
```
|
||||
|
||||
### 9. Test the Setup
|
||||
|
||||
```bash
|
||||
# Run development server
|
||||
pnpm dev
|
||||
|
|
@ -229,6 +253,7 @@ pnpm build
|
|||
```
|
||||
|
||||
### 10. Initialize Git Repository
|
||||
|
||||
```bash
|
||||
# Add remote repository (replace with your repository URL)
|
||||
git remote add origin https://github.com/yourusername/{project_name}.git
|
||||
|
|
@ -249,6 +274,7 @@ git push -u origin main
|
|||
```
|
||||
|
||||
## Validation Checklist
|
||||
|
||||
- [ ] Template repository successfully cloned
|
||||
- [ ] Dependencies installed without errors
|
||||
- [ ] Development server runs on http://localhost:3000
|
||||
|
|
@ -261,6 +287,7 @@ git push -u origin main
|
|||
- [ ] Git repository initialized and connected
|
||||
|
||||
## Template Features Already Configured
|
||||
|
||||
- ✅ Next.js 15.5.3 with App Router
|
||||
- ✅ React 19.1.0 with latest features
|
||||
- ✅ TypeScript 5 with strict configuration
|
||||
|
|
@ -274,6 +301,7 @@ git push -u origin main
|
|||
- ✅ Internationalization setup
|
||||
|
||||
## Next Steps After Setup
|
||||
|
||||
1. Plan your first business domain feature
|
||||
2. Implement your chosen database integration (Prisma, TypeORM, Mongoose, etc.)
|
||||
3. Create your first feature following Feature-Based Architecture
|
||||
|
|
@ -285,6 +313,7 @@ git push -u origin main
|
|||
## Database Integration Examples
|
||||
|
||||
### For Prisma (PostgreSQL)
|
||||
|
||||
```bash
|
||||
pnpm add prisma @prisma/client
|
||||
pnpm add -D prisma
|
||||
|
|
@ -292,6 +321,7 @@ npx prisma init
|
|||
```
|
||||
|
||||
### For TypeORM (SQL databases)
|
||||
|
||||
```bash
|
||||
pnpm add typeorm reflect-metadata
|
||||
pnpm add pg # for PostgreSQL
|
||||
|
|
@ -299,6 +329,7 @@ pnpm add pg # for PostgreSQL
|
|||
```
|
||||
|
||||
### For Mongoose (MongoDB)
|
||||
|
||||
```bash
|
||||
pnpm add mongoose
|
||||
pnpm add -D @types/mongoose
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
# Setup Next.js Project
|
||||
|
||||
## Task Overview
|
||||
|
||||
Initialize a new Next.js project with TypeScript, Tailwind CSS, ESLint, and Prettier configuration.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Node.js 18+ installed
|
||||
- npm or yarn package manager
|
||||
- Git for version control
|
||||
|
|
@ -11,19 +13,23 @@ Initialize a new Next.js project with TypeScript, Tailwind CSS, ESLint, and Pret
|
|||
## Steps
|
||||
|
||||
### 1. Create Next.js Project
|
||||
|
||||
```bash
|
||||
npx create-next-app@latest {project_name} --typescript --tailwind --eslint --app --src-dir --import-alias "@/*"
|
||||
cd {project_name}
|
||||
```
|
||||
|
||||
### 2. Install Additional Dependencies
|
||||
|
||||
```bash
|
||||
npm install --save-dev prettier prettier-plugin-tailwindcss @types/node
|
||||
npm install lucide-react clsx tailwind-merge
|
||||
```
|
||||
|
||||
### 3. Configure Prettier
|
||||
|
||||
Create `.prettierrc.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"semi": false,
|
||||
|
|
@ -36,7 +42,9 @@ Create `.prettierrc.json`:
|
|||
```
|
||||
|
||||
### 4. Update ESLint Configuration
|
||||
|
||||
Extend `.eslintrc.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"extends": ["next/core-web-vitals", "prettier"],
|
||||
|
|
@ -48,7 +56,9 @@ Extend `.eslintrc.json`:
|
|||
```
|
||||
|
||||
### 5. Configure TypeScript
|
||||
|
||||
Update `tsconfig.json` for strict mode:
|
||||
|
||||
```json
|
||||
{
|
||||
"compilerOptions": {
|
||||
|
|
@ -61,7 +71,9 @@ Update `tsconfig.json` for strict mode:
|
|||
```
|
||||
|
||||
### 6. Set up Scripts
|
||||
|
||||
Add to `package.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"scripts": {
|
||||
|
|
@ -73,6 +85,7 @@ Add to `package.json`:
|
|||
```
|
||||
|
||||
## Validation Checklist
|
||||
|
||||
- [ ] Next.js project created with TypeScript
|
||||
- [ ] Tailwind CSS configured and working
|
||||
- [ ] ESLint and Prettier configured
|
||||
|
|
@ -81,6 +94,7 @@ Add to `package.json`:
|
|||
- [ ] Project builds without errors
|
||||
|
||||
## Next Steps
|
||||
|
||||
- Set up folder structure
|
||||
- Configure environment variables
|
||||
- Create initial components
|
||||
|
|
@ -106,7 +106,7 @@ variables:
|
|||
required: true
|
||||
- name: schemaFields
|
||||
type: textarea
|
||||
description: Zod schema fields definition (e.g., name: z.string().min(2), email: z.string().email())
|
||||
description: "Zod schema fields definition (e.g., name: z.string().min(2), email: z.string().email())"
|
||||
required: true
|
||||
- name: sortFields
|
||||
type: string
|
||||
|
|
|
|||
|
|
@ -85,4 +85,12 @@ tasks:
|
|||
- name: test_suite
|
||||
description: Comprehensive test suite for the feature
|
||||
|
||||
agents: [domain-architect, nextjs-architect, base-controller-specialist, typescript-specialist, api-developer, tailwind-designer]
|
||||
agents:
|
||||
[
|
||||
domain-architect,
|
||||
nextjs-architect,
|
||||
base-controller-specialist,
|
||||
typescript-specialist,
|
||||
api-developer,
|
||||
tailwind-designer,
|
||||
]
|
||||
|
|
|
|||
|
|
@ -53,4 +53,5 @@ tasks:
|
|||
- name: documentation
|
||||
description: Feature documentation and usage examples
|
||||
|
||||
agents: [nextjs-architect, typescript-specialist, tailwind-designer, api-developer, testing-engineer]
|
||||
agents:
|
||||
[nextjs-architect, typescript-specialist, tailwind-designer, api-developer, testing-engineer]
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
"fs-extra": "^11.3.1",
|
||||
"glob": "^11.0.3",
|
||||
"ignore": "^7.0.5",
|
||||
"inquirer": "^8.2.6",
|
||||
"inquirer": "^10.2.2",
|
||||
"js-yaml": "^4.1.0",
|
||||
"ora": "^5.4.1",
|
||||
"semver": "^7.7.2"
|
||||
|
|
@ -887,20 +887,250 @@
|
|||
"url": "https://github.com/sponsors/nzakas"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/external-editor": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.0.tgz",
|
||||
"integrity": "sha512-5v3YXc5ZMfL6OJqXPrX9csb4l7NlQA2doO1yynUjpUChT9hg4JcuBVP0RbsEJ/3SL/sxWEyFjT2W69ZhtoBWqg==",
|
||||
"node_modules/@inquirer/checkbox": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz",
|
||||
"integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chardet": "^2.1.0",
|
||||
"iconv-lite": "^0.6.3"
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/figures": "^1.0.5",
|
||||
"@inquirer/type": "^1.5.3",
|
||||
"ansi-escapes": "^4.3.2",
|
||||
"yoctocolors-cjs": "^2.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/node": ">=18"
|
||||
"node_modules/@inquirer/confirm": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz",
|
||||
"integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/type": "^1.5.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/core": {
|
||||
"version": "9.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz",
|
||||
"integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/figures": "^1.0.6",
|
||||
"@inquirer/type": "^2.0.0",
|
||||
"@types/mute-stream": "^0.0.4",
|
||||
"@types/node": "^22.5.5",
|
||||
"@types/wrap-ansi": "^3.0.0",
|
||||
"ansi-escapes": "^4.3.2",
|
||||
"cli-width": "^4.1.0",
|
||||
"mute-stream": "^1.0.0",
|
||||
"signal-exit": "^4.1.0",
|
||||
"strip-ansi": "^6.0.1",
|
||||
"wrap-ansi": "^6.2.0",
|
||||
"yoctocolors-cjs": "^2.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/core/node_modules/@inquirer/type": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz",
|
||||
"integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"mute-stream": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/core/node_modules/@types/node": {
|
||||
"version": "22.18.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz",
|
||||
"integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"undici-types": "~6.21.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/core/node_modules/signal-exit": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
||||
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/isaacs"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/core/node_modules/undici-types": {
|
||||
"version": "6.21.0",
|
||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
|
||||
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@inquirer/editor": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz",
|
||||
"integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/type": "^1.5.3",
|
||||
"external-editor": "^3.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/expand": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz",
|
||||
"integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/type": "^1.5.3",
|
||||
"yoctocolors-cjs": "^2.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/figures": {
|
||||
"version": "1.0.13",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz",
|
||||
"integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/input": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz",
|
||||
"integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/type": "^1.5.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/number": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz",
|
||||
"integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/type": "^1.5.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/password": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz",
|
||||
"integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/type": "^1.5.3",
|
||||
"ansi-escapes": "^4.3.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/prompts": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.5.0.tgz",
|
||||
"integrity": "sha512-BHDeL0catgHdcHbSFFUddNzvx/imzJMft+tWDPwTm3hfu8/tApk1HrooNngB2Mb4qY+KaRWF+iZqoVUPeslEog==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/checkbox": "^2.5.0",
|
||||
"@inquirer/confirm": "^3.2.0",
|
||||
"@inquirer/editor": "^2.2.0",
|
||||
"@inquirer/expand": "^2.3.0",
|
||||
"@inquirer/input": "^2.3.0",
|
||||
"@inquirer/number": "^1.1.0",
|
||||
"@inquirer/password": "^2.2.0",
|
||||
"@inquirer/rawlist": "^2.3.0",
|
||||
"@inquirer/search": "^1.1.0",
|
||||
"@inquirer/select": "^2.5.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/rawlist": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz",
|
||||
"integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/type": "^1.5.3",
|
||||
"yoctocolors-cjs": "^2.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/search": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz",
|
||||
"integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/figures": "^1.0.5",
|
||||
"@inquirer/type": "^1.5.3",
|
||||
"yoctocolors-cjs": "^2.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/select": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz",
|
||||
"integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/figures": "^1.0.5",
|
||||
"@inquirer/type": "^1.5.3",
|
||||
"ansi-escapes": "^4.3.2",
|
||||
"yoctocolors-cjs": "^2.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@inquirer/type": {
|
||||
"version": "1.5.5",
|
||||
"resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz",
|
||||
"integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"mute-stream": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@isaacs/balanced-match": {
|
||||
|
|
@ -2485,6 +2715,15 @@
|
|||
"integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/mute-stream": {
|
||||
"version": "0.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz",
|
||||
"integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "24.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz",
|
||||
|
|
@ -2514,6 +2753,12 @@
|
|||
"integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/wrap-ansi": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz",
|
||||
"integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/yargs": {
|
||||
"version": "17.0.33",
|
||||
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
|
||||
|
|
@ -3335,9 +3580,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/chardet": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz",
|
||||
"integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==",
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
|
||||
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/ci-info": {
|
||||
|
|
@ -3579,12 +3824,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/cli-width": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
|
||||
"integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
|
||||
"integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": ">= 10"
|
||||
"node": ">= 12"
|
||||
}
|
||||
},
|
||||
"node_modules/cliui": {
|
||||
|
|
@ -4370,6 +4615,7 @@
|
|||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
||||
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
|
|
@ -4987,6 +5233,20 @@
|
|||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/external-editor": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
|
||||
"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chardet": "^0.7.0",
|
||||
"iconv-lite": "^0.4.24",
|
||||
"tmp": "^0.0.33"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-content-type-parse": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz",
|
||||
|
|
@ -5062,21 +5322,6 @@
|
|||
"bser": "2.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/figures": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
|
||||
"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"escape-string-regexp": "^1.0.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/file-entry-cache": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
|
||||
|
|
@ -5637,12 +5882,12 @@
|
|||
}
|
||||
},
|
||||
"node_modules/iconv-lite": {
|
||||
"version": "0.6.3",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
|
||||
"integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
|
||||
"version": "0.4.24",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
||||
"safer-buffer": ">= 2.1.2 < 3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
|
|
@ -5808,29 +6053,22 @@
|
|||
"license": "ISC"
|
||||
},
|
||||
"node_modules/inquirer": {
|
||||
"version": "8.2.7",
|
||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.7.tgz",
|
||||
"integrity": "sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==",
|
||||
"version": "10.2.2",
|
||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-10.2.2.tgz",
|
||||
"integrity": "sha512-tyao/4Vo36XnUItZ7DnUXX4f1jVao2mSrleV/5IPtW/XAEA26hRVsbc68nuTEKWcr5vMP/1mVoT2O7u8H4v1Vg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@inquirer/external-editor": "^1.0.0",
|
||||
"ansi-escapes": "^4.2.1",
|
||||
"chalk": "^4.1.1",
|
||||
"cli-cursor": "^3.1.0",
|
||||
"cli-width": "^3.0.0",
|
||||
"figures": "^3.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"mute-stream": "0.0.8",
|
||||
"ora": "^5.4.1",
|
||||
"run-async": "^2.4.0",
|
||||
"rxjs": "^7.5.5",
|
||||
"string-width": "^4.1.0",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"through": "^2.3.6",
|
||||
"wrap-ansi": "^6.0.1"
|
||||
"@inquirer/core": "^9.1.0",
|
||||
"@inquirer/prompts": "^5.5.0",
|
||||
"@inquirer/type": "^1.5.3",
|
||||
"@types/mute-stream": "^0.0.4",
|
||||
"ansi-escapes": "^4.3.2",
|
||||
"mute-stream": "^1.0.0",
|
||||
"run-async": "^3.0.0",
|
||||
"rxjs": "^7.8.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/into-stream": {
|
||||
|
|
@ -7205,6 +7443,7 @@
|
|||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/lodash-es": {
|
||||
|
|
@ -8264,10 +8503,13 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/mute-stream": {
|
||||
"version": "0.0.8",
|
||||
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
|
||||
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
|
||||
"license": "ISC"
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
|
||||
"integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
|
||||
"license": "ISC",
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mz": {
|
||||
"version": "2.7.0",
|
||||
|
|
@ -11288,6 +11530,15 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/os-tmpdir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||
"integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/p-each-series": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-3.0.0.tgz",
|
||||
|
|
@ -12164,9 +12415,9 @@
|
|||
"license": "MIT"
|
||||
},
|
||||
"node_modules/run-async": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
|
||||
"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
|
||||
"integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.12.0"
|
||||
|
|
@ -13314,12 +13565,6 @@
|
|||
"node": ">=0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/through": {
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
||||
"integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/through2": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
|
||||
|
|
@ -13428,6 +13673,18 @@
|
|||
"url": "https://github.com/sponsors/jonschlinkert"
|
||||
}
|
||||
},
|
||||
"node_modules/tmp": {
|
||||
"version": "0.0.33",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
|
||||
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"os-tmpdir": "~1.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/tmpl": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
|
||||
|
|
@ -14179,6 +14436,18 @@
|
|||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/yoctocolors-cjs": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz",
|
||||
"integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/zwitch": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
|
||||
|
|
|
|||
|
|
@ -79,7 +79,7 @@
|
|||
"fs-extra": "^11.3.1",
|
||||
"glob": "^11.0.3",
|
||||
"ignore": "^7.0.5",
|
||||
"inquirer": "^8.2.6",
|
||||
"inquirer": "^10.2.2",
|
||||
"js-yaml": "^4.1.0",
|
||||
"ora": "^5.4.1",
|
||||
"semver": "^7.7.2"
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ const path = require('node:path');
|
|||
const fs = require('node:fs').promises;
|
||||
const yaml = require('js-yaml');
|
||||
const chalk = require('chalk').default || require('chalk');
|
||||
const inquirer = require('inquirer').default || require('inquirer');
|
||||
const inquirer = require('inquirer').default;
|
||||
const semver = require('semver');
|
||||
const https = require('node:https');
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const path = require('node:path');
|
|||
const fs = require('fs-extra');
|
||||
const yaml = require('js-yaml');
|
||||
const chalk = require('chalk');
|
||||
const inquirer = require('inquirer');
|
||||
const inquirer = require('inquirer').default;
|
||||
const cjson = require('comment-json');
|
||||
const fileManager = require('./file-manager');
|
||||
const configLoader = require('./config-loader');
|
||||
|
|
@ -2369,7 +2369,7 @@ tools: ['changes', 'codebase', 'fetch', 'findTestFiles', 'githubRepo', 'problems
|
|||
|
||||
async setupAuggieCLI(installDir, selectedAgent, spinner = null, preConfiguredSettings = null) {
|
||||
const os = require('node:os');
|
||||
const inquirer = require('inquirer');
|
||||
const inquirer = require('inquirer').default;
|
||||
const agents = selectedAgent ? [selectedAgent] : await this.getAllAgentIds(installDir);
|
||||
|
||||
// Get the IDE configuration to access location options
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ const path = require('node:path');
|
|||
const fs = require('fs-extra');
|
||||
const chalk = require('chalk');
|
||||
const ora = require('ora');
|
||||
const inquirer = require('inquirer');
|
||||
const inquirer = require('inquirer').default;
|
||||
const fileManager = require('./file-manager');
|
||||
const configLoader = require('./config-loader');
|
||||
const ideSetup = require('./ide-setup');
|
||||
|
|
@ -1456,14 +1456,25 @@ class Installer {
|
|||
|
||||
// Also get existing agents in the expansion pack
|
||||
const existingAgents = new Set();
|
||||
const agentFiles = await resourceLocator.findFiles('agents/*.md', {
|
||||
|
||||
// Check for .md agents first
|
||||
const agentFilesMd = await resourceLocator.findFiles('agents/*.md', {
|
||||
cwd: expansionDotFolder,
|
||||
});
|
||||
for (const agentFile of agentFiles) {
|
||||
for (const agentFile of agentFilesMd) {
|
||||
const agentName = path.basename(agentFile, '.md');
|
||||
existingAgents.add(agentName);
|
||||
}
|
||||
|
||||
// Also check for .yaml agents
|
||||
const agentFilesYaml = await resourceLocator.findFiles('agents/*.yaml', {
|
||||
cwd: expansionDotFolder,
|
||||
});
|
||||
for (const agentFile of agentFilesYaml) {
|
||||
const agentName = path.basename(agentFile, '.yaml');
|
||||
existingAgents.add(agentName);
|
||||
}
|
||||
|
||||
// Process each team file
|
||||
for (const teamFile of teamFiles) {
|
||||
const teamPath = path.join(expansionDotFolder, teamFile);
|
||||
|
|
|
|||
Loading…
Reference in New Issue