code-server/cursor-fullstack/cloudflare/setup-workspace.sh
Cursor Full Stack AI IDE 8a328db75d Checkpoint before follow-up message
Co-authored-by: logato7838 <logato7838@vsihay.com>
2025-10-12 14:10:21 +00:00

549 lines
No EOL
11 KiB
Bash
Executable file

#!/bin/bash
# Cursor Full Stack AI IDE - Workspace Setup Script
# This script sets up the complete workspace structure
set -e
# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${BLUE}"
echo "=========================================="
echo " 🏗️ Cursor Full Stack AI IDE"
echo " 📁 Workspace Setup"
echo "=========================================="
echo -e "${NC}"
# Create workspace structure
create_workspace() {
echo -e "${GREEN}Creating workspace structure...${NC}"
# Create main directories
mkdir -p workspace/{projects,examples,templates,shared}
mkdir -p workspace/projects/{web,api,mobile,desktop}
mkdir -p workspace/examples/{react,node,python,go,rust}
mkdir -p workspace/templates/{starter,boilerplate,minimal}
mkdir -p workspace/shared/{components,utils,types,configs}
# Create sample files
create_sample_files
echo -e "${GREEN}✅ Workspace structure created${NC}"
}
# Create sample files
create_sample_files() {
echo -e "${YELLOW}Creating sample files...${NC}"
# Sample React component
cat > workspace/shared/components/Button.tsx << 'EOF'
import React from 'react';
interface ButtonProps {
children: React.ReactNode;
onClick?: () => void;
variant?: 'primary' | 'secondary' | 'danger';
size?: 'sm' | 'md' | 'lg';
disabled?: boolean;
}
export const Button: React.FC<ButtonProps> = ({
children,
onClick,
variant = 'primary',
size = 'md',
disabled = false
}) => {
const baseClasses = 'px-4 py-2 rounded font-medium transition-colors';
const variantClasses = {
primary: 'bg-blue-500 text-white hover:bg-blue-600',
secondary: 'bg-gray-200 text-gray-800 hover:bg-gray-300',
danger: 'bg-red-500 text-white hover:bg-red-600'
};
const sizeClasses = {
sm: 'text-sm px-3 py-1',
md: 'text-base px-4 py-2',
lg: 'text-lg px-6 py-3'
};
return (
<button
className={`${baseClasses} ${variantClasses[variant]} ${sizeClasses[size]} ${
disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'
}`}
onClick={onClick}
disabled={disabled}
>
{children}
</button>
);
};
EOF
# Sample utility functions
cat > workspace/shared/utils/helpers.ts << 'EOF'
// Utility functions for the workspace
export const formatDate = (date: Date): string => {
return date.toLocaleDateString('en-US', {
year: 'numeric',
month: 'long',
day: 'numeric'
});
};
export const formatCurrency = (amount: number, currency = 'USD'): string => {
return new Intl.NumberFormat('en-US', {
style: 'currency',
currency
}).format(amount);
};
export const debounce = <T extends (...args: any[]) => any>(
func: T,
wait: number
): ((...args: Parameters<T>) => void) => {
let timeout: NodeJS.Timeout;
return (...args: Parameters<T>) => {
clearTimeout(timeout);
timeout = setTimeout(() => func(...args), wait);
};
};
export const throttle = <T extends (...args: any[]) => any>(
func: T,
limit: number
): ((...args: Parameters<T>) => void) => {
let inThrottle: boolean;
return (...args: Parameters<T>) => {
if (!inThrottle) {
func(...args);
inThrottle = true;
setTimeout(() => (inThrottle = false), limit);
}
};
};
EOF
# Sample TypeScript types
cat > workspace/shared/types/index.ts << 'EOF'
// Shared types for the workspace
export interface User {
id: string;
name: string;
email: string;
avatar?: string;
createdAt: Date;
updatedAt: Date;
}
export interface Project {
id: string;
name: string;
description: string;
status: 'active' | 'inactive' | 'archived';
createdAt: Date;
updatedAt: Date;
owner: User;
}
export interface Task {
id: string;
title: string;
description?: string;
status: 'todo' | 'in-progress' | 'done';
priority: 'low' | 'medium' | 'high';
assignee?: User;
dueDate?: Date;
createdAt: Date;
updatedAt: Date;
}
export interface ApiResponse<T> {
data: T;
message: string;
success: boolean;
timestamp: Date;
}
export interface PaginationParams {
page: number;
limit: number;
sortBy?: string;
sortOrder?: 'asc' | 'desc';
}
export interface PaginatedResponse<T> {
data: T[];
pagination: {
page: number;
limit: number;
total: number;
totalPages: number;
};
}
EOF
# Sample configuration
cat > workspace/shared/configs/app.config.ts << 'EOF'
// Application configuration
export const appConfig = {
name: 'Cursor Full Stack AI IDE',
version: '1.0.0',
description: 'A complete AI-powered development environment',
api: {
baseUrl: process.env.REACT_APP_API_URL || 'http://localhost:3001',
timeout: 10000,
retries: 3
},
websocket: {
url: process.env.REACT_APP_WS_URL || 'ws://localhost:8080',
reconnectInterval: 5000,
maxReconnectAttempts: 5
},
ai: {
providers: ['openai', 'anthropic', 'google', 'mistral', 'openrouter'],
defaultProvider: 'openai',
maxTokens: 4000,
temperature: 0.7
},
editor: {
theme: 'vs-dark',
fontSize: 14,
tabSize: 2,
wordWrap: 'on',
minimap: true,
lineNumbers: 'on'
},
storage: {
maxFileSize: 10 * 1024 * 1024, // 10MB
allowedExtensions: ['.js', '.ts', '.jsx', '.tsx', '.py', '.go', '.rs', '.java', '.cpp', '.c', '.cs', '.php', '.rb', '.html', '.css', '.scss', '.json', '.xml', '.yaml', '.yml', '.md', '.sql', '.sh', '.bash', '.dockerfile'],
maxFiles: 1000
}
};
export default appConfig;
EOF
# Sample React project
cat > workspace/examples/react/package.json << 'EOF'
{
"name": "react-example",
"version": "1.0.0",
"private": true,
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"typescript": "^4.9.5",
"@types/react": "^18.2.0",
"@types/react-dom": "^18.2.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
EOF
# Sample Node.js project
cat > workspace/examples/node/package.json << 'EOF'
{
"name": "node-example",
"version": "1.0.0",
"description": "Node.js example project",
"main": "index.js",
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "jest",
"build": "tsc",
"lint": "eslint .",
"format": "prettier --write ."
},
"dependencies": {
"express": "^4.18.2",
"cors": "^2.8.5",
"helmet": "^7.0.0",
"dotenv": "^16.3.1"
},
"devDependencies": {
"nodemon": "^3.0.1",
"typescript": "^5.2.2",
"@types/node": "^20.8.0",
"@types/express": "^4.17.17",
"@types/cors": "^2.8.13",
"jest": "^29.7.0",
"eslint": "^8.50.0",
"prettier": "^3.0.3"
},
"keywords": ["node", "express", "api", "typescript"],
"author": "Cursor AI IDE",
"license": "MIT"
}
EOF
# Sample Python project
cat > workspace/examples/python/requirements.txt << 'EOF'
# Python dependencies
flask==2.3.3
flask-cors==4.0.0
python-dotenv==1.0.0
requests==2.31.0
pytest==7.4.2
black==23.9.1
flake8==6.1.0
mypy==1.5.1
EOF
# Sample Go project
cat > workspace/examples/go/go.mod << 'EOF'
module go-example
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
github.com/gorilla/websocket v1.5.0
github.com/joho/godotenv v1.4.0
)
EOF
# Sample Rust project
cat > workspace/examples/rust/Cargo.toml << 'EOF'
[package]
name = "rust-example"
version = "0.1.0"
edition = "2021"
[dependencies]
tokio = { version = "1.0", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
warp = "0.3"
tracing = "0.1"
tracing-subscriber = "0.3"
EOF
# Sample README
cat > workspace/README.md << 'EOF'
# Cursor Full Stack AI IDE - Workspace
This is your AI-powered development workspace. Here you can:
## 🚀 Features
- **AI-Powered Coding**: Get help from multiple AI providers
- **Real-time Collaboration**: Work with others in real-time
- **Multi-language Support**: Support for 20+ programming languages
- **Integrated Tools**: Built-in terminal, Git, Docker, and more
- **Live Preview**: See your changes instantly
## 📁 Workspace Structure
```
workspace/
├── projects/ # Your active projects
├── examples/ # Example projects and templates
├── templates/ # Project templates
└── shared/ # Shared components and utilities
```
## 🛠️ Getting Started
1. Open a file in the editor
2. Start coding with AI assistance
3. Use the integrated tools
4. Deploy your projects
## 🤖 AI Providers
- OpenAI GPT-4
- Anthropic Claude
- Google Gemini
- Mistral AI
- OpenRouter
## 🔧 Tools Available
- File operations
- Git integration
- Terminal access
- Docker support
- NPM package management
- Code search and analysis
Happy coding! 🎉
EOF
echo -e "${GREEN}✅ Sample files created${NC}"
}
# Create Git repository
setup_git() {
echo -e "${YELLOW}Setting up Git repository...${NC}"
if [ ! -d ".git" ]; then
git init
git add .
git commit -m "Initial workspace setup"
echo -e "${GREEN}✅ Git repository initialized${NC}"
else
echo -e "${YELLOW}Git repository already exists${NC}"
fi
}
# Create .gitignore
create_gitignore() {
echo -e "${YELLOW}Creating .gitignore...${NC}"
cat > .gitignore << 'EOF'
# Dependencies
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Production builds
dist/
build/
out/
# Environment variables
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
# IDE files
.vscode/
.idea/
*.swp
*.swo
*~
# OS files
.DS_Store
Thumbs.db
# Logs
logs/
*.log
# Runtime data
pids/
*.pid
*.seed
*.pid.lock
# Coverage directory used by tools like istanbul
coverage/
# Dependency directories
jspm_packages/
# Optional npm cache directory
.npm
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# next.js build output
.next
# Nuxt.js build output
.nuxt
# Gatsby files
.cache/
public
# Storybook build outputs
.out
.storybook-out
# Temporary folders
tmp/
temp/
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
EOF
echo -e "${GREEN}✅ .gitignore created${NC}"
}
# Main execution
main() {
create_workspace
create_gitignore
setup_git
echo -e "${GREEN}"
echo "=========================================="
echo " ✅ Workspace setup complete!"
echo "=========================================="
echo -e "${NC}"
echo -e "${BLUE}Your workspace is ready with:${NC}"
echo "📁 Complete project structure"
echo "📝 Sample files and templates"
echo "🔧 Shared components and utilities"
echo "📚 Documentation and examples"
echo "🔀 Git repository initialized"
echo -e "\n${YELLOW}Next steps:${NC}"
echo "1. Start coding in the editor"
echo "2. Use AI assistance for development"
echo "3. Explore the example projects"
echo "4. Deploy your applications"
echo -e "\n${GREEN}Happy coding! 🚀${NC}"
}
# Run main function
main