501 lines
12 KiB
Markdown
501 lines
12 KiB
Markdown
|
|
# Rustelo Tooling Integration
|
||
|
|
|
||
|
|
## 🎯 Overview
|
||
|
|
|
||
|
|
Complete tooling template coverage ensures that all development tools work seamlessly with the unified template system and layered override architecture. This integration provides:
|
||
|
|
|
||
|
|
- **Feature-aware tooling** that adapts to enabled features
|
||
|
|
- **Layered configuration merging** for all tools
|
||
|
|
- **Consistent development workflows** across all project templates
|
||
|
|
- **Hot-reload integration** with the override system
|
||
|
|
|
||
|
|
## 🛠️ Integrated Tools
|
||
|
|
|
||
|
|
### 1. Just (Command Runner)
|
||
|
|
|
||
|
|
**Integration Points:**
|
||
|
|
- Feature-specific commands added automatically
|
||
|
|
- Local overrides for custom workflows
|
||
|
|
- Template-based recipe generation
|
||
|
|
- Environment-aware execution
|
||
|
|
|
||
|
|
**Example Structure:**
|
||
|
|
```
|
||
|
|
config/
|
||
|
|
├── local/justfile # Local command overrides
|
||
|
|
├── features/
|
||
|
|
│ ├── analytics/justfile # Analytics-specific commands
|
||
|
|
│ └── smart-build/justfile # Build optimization commands
|
||
|
|
└── templates/justfile # Base commands from template
|
||
|
|
```
|
||
|
|
|
||
|
|
**Command Examples:**
|
||
|
|
```just
|
||
|
|
# Base template commands
|
||
|
|
dev:
|
||
|
|
cargo leptos watch
|
||
|
|
|
||
|
|
build:
|
||
|
|
cargo leptos build --release
|
||
|
|
|
||
|
|
# Feature-specific commands (analytics)
|
||
|
|
analytics-report:
|
||
|
|
cargo run --bin analytics -- report --hours 24
|
||
|
|
|
||
|
|
# Local overrides
|
||
|
|
dev-debug:
|
||
|
|
RUST_LOG=debug cargo leptos watch
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. CSS/UnoCSS System
|
||
|
|
|
||
|
|
**Integration Points:**
|
||
|
|
- Layered UnoCSS configurations
|
||
|
|
- Feature-specific styling
|
||
|
|
- Component-aware class generation
|
||
|
|
- Development vs production builds
|
||
|
|
|
||
|
|
**Configuration Layers:**
|
||
|
|
```typescript
|
||
|
|
// config/templates/uno.config.ts (Base)
|
||
|
|
export default {
|
||
|
|
presets: ['@unocss/preset-uno', '@unocss/preset-wind'],
|
||
|
|
theme: {
|
||
|
|
colors: {
|
||
|
|
primary: '#3b82f6',
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// config/features/analytics/uno.config.ts
|
||
|
|
export default {
|
||
|
|
theme: {
|
||
|
|
colors: {
|
||
|
|
analytics: '#10b981',
|
||
|
|
}
|
||
|
|
},
|
||
|
|
shortcuts: {
|
||
|
|
'metric-card': 'bg-white shadow-md rounded-lg p-4',
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// config/local/uno.config.ts (Highest precedence)
|
||
|
|
export default {
|
||
|
|
theme: {
|
||
|
|
colors: {
|
||
|
|
primary: '#ef4444', // Override
|
||
|
|
brand: '#8b5cf6', // Local addition
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Package.json Management
|
||
|
|
|
||
|
|
**Integration Points:**
|
||
|
|
- Dependency management across layers
|
||
|
|
- Script merging and overrides
|
||
|
|
- Feature-specific Node.js tools
|
||
|
|
- Development vs production configs
|
||
|
|
|
||
|
|
**Layer Structure:**
|
||
|
|
```json
|
||
|
|
// config/templates/package.json
|
||
|
|
{
|
||
|
|
"scripts": {
|
||
|
|
"css:build": "unocss 'src/**/*.rs' -o public/app.css",
|
||
|
|
"css:watch": "unocss 'src/**/*.rs' -o public/app.css --watch"
|
||
|
|
},
|
||
|
|
"devDependencies": {
|
||
|
|
"@unocss/cli": "^0.58.0"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// config/features/analytics/package.json
|
||
|
|
{
|
||
|
|
"scripts": {
|
||
|
|
"analytics:dev": "node scripts/analytics-dev.js"
|
||
|
|
},
|
||
|
|
"dependencies": {
|
||
|
|
"chart.js": "^4.0.0"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// config/local/package.json
|
||
|
|
{
|
||
|
|
"scripts": {
|
||
|
|
"dev": "concurrently \"cargo leptos watch\" \"npm run css:watch\"",
|
||
|
|
"test": "cargo test && npm run test:frontend"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Cargo.toml Workspace Configuration
|
||
|
|
|
||
|
|
**Integration Points:**
|
||
|
|
- Workspace dependency management
|
||
|
|
- Feature flag coordination
|
||
|
|
- Crate-specific configurations
|
||
|
|
- Build optimization settings
|
||
|
|
|
||
|
|
**Layer Examples:**
|
||
|
|
```toml
|
||
|
|
# config/templates/Cargo.toml (Base workspace)
|
||
|
|
[workspace]
|
||
|
|
members = ["crates/*"]
|
||
|
|
|
||
|
|
[workspace.dependencies]
|
||
|
|
leptos = "0.6"
|
||
|
|
tokio = { version = "1.0", features = ["full"] }
|
||
|
|
|
||
|
|
# config/features/analytics/Cargo.toml
|
||
|
|
[workspace.dependencies]
|
||
|
|
prometheus = "0.13"
|
||
|
|
chrono = { version = "0.4", features = ["serde"] }
|
||
|
|
|
||
|
|
# config/local/Cargo.toml (Local overrides)
|
||
|
|
[workspace.dependencies]
|
||
|
|
leptos = "0.7" # Override version
|
||
|
|
anyhow = "1.0" # Local addition
|
||
|
|
|
||
|
|
[profile.dev]
|
||
|
|
opt-level = 1 # Local optimization
|
||
|
|
```
|
||
|
|
|
||
|
|
### 5. Development Scripts
|
||
|
|
|
||
|
|
**Integration Points:**
|
||
|
|
- Layered script execution
|
||
|
|
- Feature-aware automation
|
||
|
|
- Environment detection
|
||
|
|
- Cross-platform compatibility
|
||
|
|
|
||
|
|
**Script Structure:**
|
||
|
|
```
|
||
|
|
scripts/
|
||
|
|
├── local/ # Local automation scripts
|
||
|
|
│ ├── custom-build.sh
|
||
|
|
│ └── deploy-staging.sh
|
||
|
|
├── features/ # Feature-specific scripts
|
||
|
|
│ ├── analytics/
|
||
|
|
│ │ ├── collect-metrics.sh
|
||
|
|
│ │ └── generate-reports.sh
|
||
|
|
│ └── smart-build/
|
||
|
|
│ └── cache-management.sh
|
||
|
|
└── templates/ # Base template scripts
|
||
|
|
├── setup.sh
|
||
|
|
├── build.sh
|
||
|
|
└── test.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
### 6. Build System Integration
|
||
|
|
|
||
|
|
**Integration Points:**
|
||
|
|
- Build.rs script composition
|
||
|
|
- Asset pipeline coordination
|
||
|
|
- Route generation integration
|
||
|
|
- Optimization settings
|
||
|
|
|
||
|
|
**Build Configuration:**
|
||
|
|
```rust
|
||
|
|
// crates/client/build.rs (Generated)
|
||
|
|
fn main() {
|
||
|
|
// Layer-aware CSS build
|
||
|
|
let css_config = resolve_layered_config::<UnoConfig>("uno.config.ts")?;
|
||
|
|
build_css_with_config(&css_config)?;
|
||
|
|
|
||
|
|
// Layer-aware route generation
|
||
|
|
let routes = resolve_layered_routes()?;
|
||
|
|
generate_route_code(&routes)?;
|
||
|
|
|
||
|
|
// Feature-specific build steps
|
||
|
|
if feature_enabled("analytics") {
|
||
|
|
build_analytics_assets()?;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🔧 Implementation Strategy
|
||
|
|
|
||
|
|
### 1. Template Generation
|
||
|
|
|
||
|
|
**Enhanced Template System:**
|
||
|
|
- Templates include complete tooling setup
|
||
|
|
- Feature selection determines which tools are included
|
||
|
|
- Layered override structure created automatically
|
||
|
|
|
||
|
|
**CLI Integration:**
|
||
|
|
```bash
|
||
|
|
# Create project with full tooling
|
||
|
|
cargo rustelo new my-project --template basic --features analytics,smart-build
|
||
|
|
|
||
|
|
# Result: Complete tooling setup with:
|
||
|
|
# - Just commands for development
|
||
|
|
# - UnoCSS configuration with analytics styles
|
||
|
|
# - Package.json with analytics dependencies
|
||
|
|
# - Build scripts with smart caching
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Configuration Resolution
|
||
|
|
|
||
|
|
**Unified Configuration Engine:**
|
||
|
|
```rust
|
||
|
|
pub struct ToolingManager {
|
||
|
|
config_resolver: LayeredConfig,
|
||
|
|
project_root: PathBuf,
|
||
|
|
}
|
||
|
|
|
||
|
|
impl ToolingManager {
|
||
|
|
pub fn resolve_just_config(&mut self) -> Result<JustConfig> {
|
||
|
|
self.config_resolver.resolve("justfile")
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn resolve_css_config(&mut self) -> Result<UnoConfig> {
|
||
|
|
self.config_resolver.resolve("uno.config.ts")
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn resolve_package_config(&mut self) -> Result<PackageConfig> {
|
||
|
|
self.config_resolver.resolve("package.json")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
### 3. Feature Integration
|
||
|
|
|
||
|
|
**Automatic Tool Updates:**
|
||
|
|
```bash
|
||
|
|
# Adding feature updates all related tooling
|
||
|
|
cargo rustelo add analytics
|
||
|
|
|
||
|
|
# Updates:
|
||
|
|
# - justfile (adds analytics commands)
|
||
|
|
# - uno.config.ts (adds analytics styles)
|
||
|
|
# - package.json (adds analytics dependencies)
|
||
|
|
# - build scripts (adds analytics builds)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4. Development Workflows
|
||
|
|
|
||
|
|
**Hot Reload Integration:**
|
||
|
|
- CSS changes trigger UnoCSS rebuild
|
||
|
|
- Configuration changes reload layered configs
|
||
|
|
- Component overrides trigger selective rebuilds
|
||
|
|
- Script changes restart development server
|
||
|
|
|
||
|
|
**Watch System:**
|
||
|
|
```bash
|
||
|
|
# Comprehensive development mode
|
||
|
|
just dev
|
||
|
|
|
||
|
|
# Runs:
|
||
|
|
# - cargo leptos watch (Rust hot reload)
|
||
|
|
# - unocss --watch (CSS hot reload)
|
||
|
|
# - node scripts/config-watcher.js (Config hot reload)
|
||
|
|
```
|
||
|
|
|
||
|
|
## 📋 Tooling Templates
|
||
|
|
|
||
|
|
### Just Template (Feature-Aware)
|
||
|
|
|
||
|
|
```just
|
||
|
|
# Base development commands
|
||
|
|
dev:
|
||
|
|
@echo "🚀 Starting development server..."
|
||
|
|
cargo leptos watch
|
||
|
|
|
||
|
|
build:
|
||
|
|
@echo "🏗️ Building for production..."
|
||
|
|
cargo leptos build --release
|
||
|
|
|
||
|
|
test:
|
||
|
|
@echo "🧪 Running tests..."
|
||
|
|
cargo test
|
||
|
|
|
||
|
|
# CSS commands (always included)
|
||
|
|
css-build:
|
||
|
|
@echo "🎨 Building CSS..."
|
||
|
|
unocss 'src/**/*.rs' -o public/app.css
|
||
|
|
|
||
|
|
css-watch:
|
||
|
|
@echo "👀 Watching CSS..."
|
||
|
|
unocss 'src/**/*.rs' -o public/app.css --watch
|
||
|
|
|
||
|
|
{{#if features.analytics}}
|
||
|
|
# Analytics commands (feature-specific)
|
||
|
|
analytics-report:
|
||
|
|
@echo "📊 Generating analytics report..."
|
||
|
|
cargo run --bin analytics -- report --hours 24
|
||
|
|
|
||
|
|
analytics-dashboard:
|
||
|
|
@echo "📈 Starting analytics dashboard..."
|
||
|
|
cargo run --bin analytics -- dashboard
|
||
|
|
{{/if}}
|
||
|
|
|
||
|
|
{{#if features.smart-build}}
|
||
|
|
# Smart build commands (feature-specific)
|
||
|
|
build-cached:
|
||
|
|
@echo "⚡ Building with smart cache..."
|
||
|
|
cargo run --bin smart-build -- build --cached
|
||
|
|
|
||
|
|
cache-clean:
|
||
|
|
@echo "🧹 Cleaning build cache..."
|
||
|
|
cargo run --bin smart-build -- cache clean
|
||
|
|
{{/if}}
|
||
|
|
|
||
|
|
# Local overrides marker
|
||
|
|
{{#if local_commands}}
|
||
|
|
# === Local Commands (Override) ===
|
||
|
|
{{local_commands}}
|
||
|
|
{{/if}}
|
||
|
|
```
|
||
|
|
|
||
|
|
### UnoCSS Template (Layered)
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
// Base configuration with feature composition
|
||
|
|
import { defineConfig } from 'unocss'
|
||
|
|
|
||
|
|
export default defineConfig({
|
||
|
|
// Base presets (always included)
|
||
|
|
presets: [
|
||
|
|
'@unocss/preset-uno',
|
||
|
|
'@unocss/preset-wind',
|
||
|
|
'@unocss/preset-typography',
|
||
|
|
],
|
||
|
|
|
||
|
|
// Base theme
|
||
|
|
theme: {
|
||
|
|
colors: {
|
||
|
|
primary: '{{theme.primary_color}}',
|
||
|
|
secondary: '{{theme.secondary_color}}',
|
||
|
|
{{#each theme.colors}}
|
||
|
|
'{{@key}}': '{{this}}',
|
||
|
|
{{/each}}
|
||
|
|
},
|
||
|
|
fontFamily: {
|
||
|
|
sans: {{theme.font_sans}},
|
||
|
|
serif: {{theme.font_serif}},
|
||
|
|
mono: {{theme.font_mono}},
|
||
|
|
},
|
||
|
|
},
|
||
|
|
|
||
|
|
// Base shortcuts
|
||
|
|
shortcuts: {
|
||
|
|
'btn': 'px-4 py-2 rounded transition-colors',
|
||
|
|
'btn-primary': 'btn bg-primary text-white hover:bg-primary/80',
|
||
|
|
'card': 'bg-white shadow-md rounded-lg p-4',
|
||
|
|
{{#each shortcuts}}
|
||
|
|
'{{@key}}': '{{this}}',
|
||
|
|
{{/each}}
|
||
|
|
},
|
||
|
|
|
||
|
|
{{#if features.analytics}}
|
||
|
|
// Analytics feature styles
|
||
|
|
rules: [
|
||
|
|
[/^metric-(\d+)$/, ([, d]) => ({ 'font-size': `${d}px` })],
|
||
|
|
],
|
||
|
|
shortcuts: {
|
||
|
|
...shortcuts,
|
||
|
|
'metric-card': 'card border-l-4 border-analytics',
|
||
|
|
'chart-container': 'w-full h-64 bg-gray-50 rounded',
|
||
|
|
},
|
||
|
|
{{/if}}
|
||
|
|
|
||
|
|
// Content sources (layer-aware)
|
||
|
|
content: [
|
||
|
|
'src/**/*.rs',
|
||
|
|
'templates/**/*.html',
|
||
|
|
{{#if features.analytics}}
|
||
|
|
'src/components/features/analytics/**/*.rs',
|
||
|
|
{{/if}}
|
||
|
|
{{#if local_content}}
|
||
|
|
'src/components/local/**/*.rs',
|
||
|
|
{{/if}}
|
||
|
|
],
|
||
|
|
|
||
|
|
// Safelist for always-included classes
|
||
|
|
safelist: [
|
||
|
|
'text-red-500',
|
||
|
|
'text-green-500',
|
||
|
|
'text-blue-500',
|
||
|
|
{{#each safelist}}
|
||
|
|
'{{this}}',
|
||
|
|
{{/each}}
|
||
|
|
]
|
||
|
|
})
|
||
|
|
```
|
||
|
|
|
||
|
|
### Package.json Template (Mergeable)
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"name": "{{project_name}}",
|
||
|
|
"version": "{{project_version}}",
|
||
|
|
"description": "{{project_description}}",
|
||
|
|
"private": true,
|
||
|
|
|
||
|
|
"scripts": {
|
||
|
|
"css:build": "unocss 'src/**/*.rs' -o public/app.css",
|
||
|
|
"css:watch": "unocss 'src/**/*.rs' -o public/app.css --watch",
|
||
|
|
"build": "npm run css:build && cargo leptos build --release",
|
||
|
|
"dev": "concurrently \"cargo leptos watch\" \"npm run css:watch\"",
|
||
|
|
|
||
|
|
{{#if features.analytics}}
|
||
|
|
"analytics:dev": "node scripts/features/analytics/dev-server.js",
|
||
|
|
"analytics:report": "node scripts/features/analytics/generate-report.js",
|
||
|
|
{{/if}}
|
||
|
|
|
||
|
|
{{#if features.smart-build}}
|
||
|
|
"build:smart": "node scripts/features/smart-build/cached-build.js",
|
||
|
|
"cache:clean": "node scripts/features/smart-build/clean-cache.js",
|
||
|
|
{{/if}}
|
||
|
|
|
||
|
|
{{#each local_scripts}}
|
||
|
|
"{{@key}}": "{{this}}",
|
||
|
|
{{/each}}
|
||
|
|
},
|
||
|
|
|
||
|
|
"devDependencies": {
|
||
|
|
"@unocss/cli": "^0.58.0",
|
||
|
|
"@unocss/preset-uno": "^0.58.0",
|
||
|
|
"@unocss/preset-wind": "^0.58.0",
|
||
|
|
"concurrently": "^8.2.0",
|
||
|
|
|
||
|
|
{{#if features.analytics}}
|
||
|
|
"chart.js": "^4.0.0",
|
||
|
|
"date-fns": "^2.30.0",
|
||
|
|
{{/if}}
|
||
|
|
|
||
|
|
{{#if features.smart-build}}
|
||
|
|
"chokidar": "^3.5.0",
|
||
|
|
"fast-glob": "^3.3.0",
|
||
|
|
{{/if}}
|
||
|
|
|
||
|
|
{{#each additional_dependencies}}
|
||
|
|
"{{@key}}": "{{this}}",
|
||
|
|
{{/each}}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
## 🎯 Benefits
|
||
|
|
|
||
|
|
### For Developers
|
||
|
|
- **Unified tooling** across all project types
|
||
|
|
- **Feature-aware automation** - tools adapt to enabled features
|
||
|
|
- **Local customization** without losing update capability
|
||
|
|
- **Consistent workflows** regardless of project complexity
|
||
|
|
|
||
|
|
### For Teams
|
||
|
|
- **Standardized tooling** across all Rustelo projects
|
||
|
|
- **Shared configurations** with local override capability
|
||
|
|
- **Feature parity** - same tools work the same way everywhere
|
||
|
|
- **Easy onboarding** - familiar tooling patterns
|
||
|
|
|
||
|
|
### For Framework
|
||
|
|
- **Tool integration** - all tools work together seamlessly
|
||
|
|
- **Update safety** - tooling updates don't break customizations
|
||
|
|
- **Feature composability** - tools from different features integrate properly
|
||
|
|
- **Performance optimization** - smart caching and coordination
|
||
|
|
|
||
|
|
This comprehensive tooling integration ensures that Rustelo provides a complete, production-ready development experience with all the tools developers need working seamlessly together.
|