nest-scramble 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -8
- package/UI_FEATURES.md +289 -0
- package/dist/NestScrambleModule.d.ts +3 -0
- package/dist/NestScrambleModule.d.ts.map +1 -1
- package/dist/NestScrambleModule.js +31 -9
- package/dist/NestScrambleModule.js.map +1 -1
- package/dist/controllers/DocsController.d.ts +6 -1
- package/dist/controllers/DocsController.d.ts.map +1 -1
- package/dist/controllers/DocsController.js +354 -8
- package/dist/controllers/DocsController.js.map +1 -1
- package/examples/futuristic-ui-example.ts +222 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -344,19 +344,107 @@ jobs:
|
|
|
344
344
|
path: openapi.json
|
|
345
345
|
```
|
|
346
346
|
|
|
347
|
-
## 🎨 Documentation UI
|
|
347
|
+
## 🎨 Documentation UI - World-Class Design
|
|
348
348
|
|
|
349
|
-
###
|
|
349
|
+
### ✨ Futuristic Theme (NEW!)
|
|
350
350
|
|
|
351
|
-
Nest-Scramble
|
|
351
|
+
Nest-Scramble now features a **bespoke, futuristic dashboard** that rivals high-end SaaS products like Stripe, Vercel, and Linear!
|
|
352
352
|
|
|
353
|
-
|
|
353
|
+
**🚀 Key Features:**
|
|
354
|
+
- **Deep Space Dark Mode** - Ultra-premium `#050505` background
|
|
355
|
+
- **Glassmorphism Design** - Backdrop blur effects on all cards
|
|
356
|
+
- **Cyber Gradients** - Cyan-to-purple button animations
|
|
357
|
+
- **Animated Grid Background** - Subtle pulsing effect
|
|
358
|
+
- **Night Owl Code Theme** - Beautiful syntax highlighting
|
|
359
|
+
- **Custom Scrollbar** - Gradient styling throughout
|
|
360
|
+
- **Spotlight Search** - Cmd+K style search experience
|
|
361
|
+
- **Easter Egg Console** - Hidden developer messages ✨
|
|
362
|
+
|
|
363
|
+
### 🎨 Theme Customization
|
|
364
|
+
|
|
365
|
+
**Futuristic Theme (Default):**
|
|
366
|
+
```typescript
|
|
367
|
+
NestScrambleModule.forRoot({
|
|
368
|
+
theme: 'futuristic', // Modern, dark, glassmorphic
|
|
369
|
+
primaryColor: '#00f2ff', // Cyber-Cyan (default)
|
|
370
|
+
customDomainIcon: '/logo.png', // Your brand favicon
|
|
371
|
+
apiTitle: 'My Awesome API',
|
|
372
|
+
})
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
**Classic Theme:**
|
|
376
|
+
```typescript
|
|
377
|
+
NestScrambleModule.forRoot({
|
|
378
|
+
theme: 'classic', // Clean, light, professional
|
|
379
|
+
primaryColor: '#0066cc', // Corporate blue
|
|
380
|
+
apiTitle: 'Enterprise API',
|
|
381
|
+
})
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
**Custom Color Branding:**
|
|
385
|
+
```typescript
|
|
386
|
+
// One line changes the entire UI color scheme!
|
|
387
|
+
NestScrambleModule.forRoot({
|
|
388
|
+
primaryColor: '#a855f7', // Electric Purple
|
|
389
|
+
// or '#10b981' for Emerald Green
|
|
390
|
+
// or '#f59e0b' for Amber Orange
|
|
391
|
+
// or any hex color you want!
|
|
392
|
+
})
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### 🎭 UI Configuration Options
|
|
396
|
+
|
|
397
|
+
| Option | Type | Default | Description |
|
|
398
|
+
|--------|------|---------|-------------|
|
|
399
|
+
| `theme` | `'classic' \| 'futuristic'` | `'futuristic'` | UI theme selection |
|
|
400
|
+
| `primaryColor` | `string` | `'#00f2ff'` | Primary accent color (hex) |
|
|
401
|
+
| `customDomainIcon` | `string` | `''` | Custom favicon URL |
|
|
402
|
+
| `apiTitle` | `string` | Auto-detected | API documentation title |
|
|
403
|
+
| `apiVersion` | `string` | Auto-detected | API version number |
|
|
404
|
+
|
|
405
|
+
### 🌟 Interactive Features
|
|
406
|
+
|
|
407
|
+
When you visit `http://localhost:3000/docs`, you'll experience:
|
|
354
408
|
|
|
355
409
|
- 🎯 **Interactive API Explorer** - Test endpoints directly from the browser
|
|
356
410
|
- 📝 **Auto-generated Examples** - Request/response samples for all endpoints
|
|
357
|
-
- 🔍 **Search
|
|
358
|
-
- 🌙 **Dark Mode
|
|
359
|
-
- 📱 **Mobile Responsive** - Works on all devices
|
|
411
|
+
- 🔍 **Spotlight Search** - Quickly find endpoints with glowing focus states
|
|
412
|
+
- 🌙 **Futuristic Dark Mode** - Deep space theme with glassmorphism
|
|
413
|
+
- 📱 **Mobile Responsive** - Works beautifully on all devices
|
|
414
|
+
- 🎨 **Theme Toggle** - Switch between Futuristic and Classic (top-right button)
|
|
415
|
+
- ✨ **Powered by Badge** - Glowing brand badge with pulse animation
|
|
416
|
+
- 🎭 **Easter Eggs** - Check your browser console for surprises!
|
|
417
|
+
|
|
418
|
+
### 🖥️ Terminal Dashboard
|
|
419
|
+
|
|
420
|
+
The startup dashboard now features **gradient styling** with ANSI colors:
|
|
421
|
+
|
|
422
|
+
```
|
|
423
|
+
╔═══════════════════════════════════════════════════════════════╗
|
|
424
|
+
║ ✨ NEST-SCRAMBLE by Mohamed Mustafa ║
|
|
425
|
+
║ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ║
|
|
426
|
+
║ ║
|
|
427
|
+
║ ● Documentation ║
|
|
428
|
+
║ → http://localhost:3000/docs ║
|
|
429
|
+
║ ║
|
|
430
|
+
║ ● OpenAPI Spec ║
|
|
431
|
+
║ → http://localhost:3000/docs-json ║
|
|
432
|
+
║ ║
|
|
433
|
+
║ ● Mock Server ║
|
|
434
|
+
║ → http://localhost:3000/scramble-mock ║
|
|
435
|
+
║ ║
|
|
436
|
+
║ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ║
|
|
437
|
+
║ 📦 Source Path: src ║
|
|
438
|
+
║ 🎯 Controllers: 5 ║
|
|
439
|
+
║ 🎨 Theme: Futuristic ║
|
|
440
|
+
╚═══════════════════════════════════════════════════════════════╝
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### 📚 More UI Documentation
|
|
444
|
+
|
|
445
|
+
For complete UI customization guide, see:
|
|
446
|
+
- **[UI_FEATURES.md](./UI_FEATURES.md)** - Comprehensive feature documentation
|
|
447
|
+
- **[examples/futuristic-ui-example.ts](./examples/futuristic-ui-example.ts)** - Usage examples
|
|
360
448
|
|
|
361
449
|
### Available Endpoints
|
|
362
450
|
|
|
@@ -609,7 +697,6 @@ If you're still experiencing issues:
|
|
|
609
697
|
1. **Check the logs** - Nest-Scramble provides detailed diagnostic output on startup
|
|
610
698
|
2. **Verify your version** - Run `npm list nest-scramble` (should be 1.1.0+)
|
|
611
699
|
3. **Open an issue** - [GitHub Issues](https://github.com/Eng-MMustafa/nest-scramble/issues)
|
|
612
|
-
4. **Join discussions** - [GitHub Discussions](https://github.com/Eng-MMustafa/nest-scramble/discussions)
|
|
613
700
|
|
|
614
701
|
When reporting issues, please include:
|
|
615
702
|
- Nest-Scramble version
|
package/UI_FEATURES.md
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
# 🚀 Nest-Scramble UI - World-Class Design Features
|
|
2
|
+
|
|
3
|
+
**Engineered by Mohamed Mustafa (@Eng-MMustafa)**
|
|
4
|
+
|
|
5
|
+
## ✨ Overview
|
|
6
|
+
|
|
7
|
+
The Nest-Scramble documentation UI has been elevated to a **bespoke, futuristic dashboard** that rivals high-end SaaS products. This document outlines all the advanced UI features and customization options.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 🎨 Futuristic Theme Features
|
|
12
|
+
|
|
13
|
+
### **Deep Space Dark Mode**
|
|
14
|
+
- **Background**: `#050505` - Ultra-deep space black
|
|
15
|
+
- **Animated Grid**: Pulsing background grid with subtle opacity animation
|
|
16
|
+
- **Color Palette**:
|
|
17
|
+
- **Cyber-Cyan**: `#00f2ff` (Primary accent)
|
|
18
|
+
- **Electric Purple**: `#a855f7` (Secondary accent)
|
|
19
|
+
- **Gradient Buttons**: Smooth cyan-to-purple gradients
|
|
20
|
+
|
|
21
|
+
### **Glassmorphism Design**
|
|
22
|
+
- Backdrop blur effects on all cards and panels
|
|
23
|
+
- Semi-transparent borders with subtle glow
|
|
24
|
+
- Layered depth with shadow insets
|
|
25
|
+
- Modern, frosted-glass aesthetic
|
|
26
|
+
|
|
27
|
+
### **Typography**
|
|
28
|
+
- **Fonts**: 'Inter' and 'Plus Jakarta Sans' via Google Fonts
|
|
29
|
+
- **Headers**: Gradient text with cyan-to-purple color fill
|
|
30
|
+
- **Code Blocks**: 'JetBrains Mono' and 'Fira Code' for optimal readability
|
|
31
|
+
|
|
32
|
+
### **Interactive Elements**
|
|
33
|
+
- **Buttons**:
|
|
34
|
+
- Gradient backgrounds with hover animations
|
|
35
|
+
- Shimmer effect on hover
|
|
36
|
+
- Glow shadows with primary color
|
|
37
|
+
- Smooth lift animation (translateY)
|
|
38
|
+
|
|
39
|
+
- **Search Bar**:
|
|
40
|
+
- Spotlight-style UI (Cmd+K feel)
|
|
41
|
+
- Focus state with glowing border
|
|
42
|
+
- Dark glassmorphic background
|
|
43
|
+
|
|
44
|
+
- **Code Snippets**:
|
|
45
|
+
- Night Owl syntax theme
|
|
46
|
+
- Rounded corners with subtle borders
|
|
47
|
+
- Enhanced readability with proper spacing
|
|
48
|
+
|
|
49
|
+
### **Custom Branding**
|
|
50
|
+
- **Powered by Badge**: Fixed position badge with:
|
|
51
|
+
- Gradient background
|
|
52
|
+
- Pulsing glow animation
|
|
53
|
+
- "✨ Powered by Nest-Scramble" text
|
|
54
|
+
- Bottom-right placement
|
|
55
|
+
|
|
56
|
+
### **Scrollbar Styling**
|
|
57
|
+
- Custom gradient scrollbar thumb
|
|
58
|
+
- Smooth hover effects
|
|
59
|
+
- Matches the overall theme aesthetic
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 🎯 Configuration Options
|
|
64
|
+
|
|
65
|
+
### **Basic Setup**
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { NestScrambleModule } from 'nest-scramble';
|
|
69
|
+
|
|
70
|
+
@Module({
|
|
71
|
+
imports: [
|
|
72
|
+
NestScrambleModule.forRoot({
|
|
73
|
+
// Theme selection
|
|
74
|
+
theme: 'futuristic', // or 'classic'
|
|
75
|
+
|
|
76
|
+
// Primary brand color
|
|
77
|
+
primaryColor: '#00f2ff',
|
|
78
|
+
|
|
79
|
+
// Custom favicon
|
|
80
|
+
customDomainIcon: 'https://your-domain.com/favicon.ico',
|
|
81
|
+
|
|
82
|
+
// API metadata
|
|
83
|
+
apiTitle: 'My Awesome API',
|
|
84
|
+
apiVersion: '2.0.0',
|
|
85
|
+
}),
|
|
86
|
+
],
|
|
87
|
+
})
|
|
88
|
+
export class AppModule {}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### **Available Options**
|
|
92
|
+
|
|
93
|
+
| Option | Type | Default | Description |
|
|
94
|
+
|--------|------|---------|-------------|
|
|
95
|
+
| `theme` | `'classic' \| 'futuristic'` | `'futuristic'` | UI theme selection |
|
|
96
|
+
| `primaryColor` | `string` | `'#00f2ff'` | Primary accent color (hex) |
|
|
97
|
+
| `customDomainIcon` | `string` | `''` | Custom favicon URL |
|
|
98
|
+
| `apiTitle` | `string` | Auto-detected | API documentation title |
|
|
99
|
+
| `apiVersion` | `string` | Auto-detected | API version number |
|
|
100
|
+
| `path` | `string` | `'/docs'` | Documentation route path |
|
|
101
|
+
| `enableMock` | `boolean` | `true` | Enable mock server |
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 🎭 Easter Egg Features
|
|
106
|
+
|
|
107
|
+
### **Console Messages**
|
|
108
|
+
When users access the documentation, they'll see beautiful console messages:
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
✨ Engineered with passion by Mohamed Mustafa
|
|
112
|
+
Nest-Scramble is active.
|
|
113
|
+
🚀 GitHub: https://github.com/Eng-MMustafa/nest-scramble
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### **Theme Toggle**
|
|
117
|
+
- Live theme switcher button (top-right)
|
|
118
|
+
- Persists preference in localStorage
|
|
119
|
+
- Smooth transitions between themes
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 🖥️ Terminal UI Enhancement
|
|
124
|
+
|
|
125
|
+
### **Gradient Dashboard**
|
|
126
|
+
The startup dashboard now features:
|
|
127
|
+
- **Cyan & Purple** gradient borders
|
|
128
|
+
- **Bold emojis** for visual hierarchy
|
|
129
|
+
- **Color-coded sections**:
|
|
130
|
+
- 🟢 Green bullets for endpoints
|
|
131
|
+
- 🔵 Cyan arrows for URLs
|
|
132
|
+
- 🟡 Yellow icons for metadata
|
|
133
|
+
- 🟣 Purple for theme indicator
|
|
134
|
+
|
|
135
|
+
### **Example Output**
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
╔═══════════════════════════════════════════════════════════════╗
|
|
139
|
+
║ ✨ NEST-SCRAMBLE by Mohamed Mustafa ║
|
|
140
|
+
║ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ║
|
|
141
|
+
║ ║
|
|
142
|
+
║ ● Documentation ║
|
|
143
|
+
║ → http://localhost:3000/docs ║
|
|
144
|
+
║ ║
|
|
145
|
+
║ ● OpenAPI Spec ║
|
|
146
|
+
║ → http://localhost:3000/docs-json ║
|
|
147
|
+
║ ║
|
|
148
|
+
║ ● Mock Server ║
|
|
149
|
+
║ → http://localhost:3000/scramble-mock ║
|
|
150
|
+
║ ║
|
|
151
|
+
║ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ║
|
|
152
|
+
║ 📦 Source Path: src ║
|
|
153
|
+
║ 🎯 Controllers: 5 ║
|
|
154
|
+
║ 🎨 Theme: Futuristic ║
|
|
155
|
+
╚═══════════════════════════════════════════════════════════════╝
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 🎨 CSS Architecture
|
|
161
|
+
|
|
162
|
+
### **Futuristic Theme**
|
|
163
|
+
- **Root Variables**: CSS custom properties for easy theming
|
|
164
|
+
- **Animations**:
|
|
165
|
+
- `gridPulse`: Background grid animation (10s)
|
|
166
|
+
- `badgePulse`: Branding badge glow (3s)
|
|
167
|
+
- **Transitions**: Smooth 0.3s cubic-bezier for all interactions
|
|
168
|
+
- **Responsive**: Mobile-optimized with proper viewport settings
|
|
169
|
+
|
|
170
|
+
### **Classic Theme**
|
|
171
|
+
- Clean, minimal design
|
|
172
|
+
- Light background with dark text
|
|
173
|
+
- Simplified color scheme
|
|
174
|
+
- Professional appearance for conservative environments
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## 🚀 Advanced Features
|
|
179
|
+
|
|
180
|
+
### **1. Dynamic Color Branding**
|
|
181
|
+
Set your brand color once, and it propagates throughout:
|
|
182
|
+
- Button gradients
|
|
183
|
+
- Focus states
|
|
184
|
+
- Glow effects
|
|
185
|
+
- Scrollbar styling
|
|
186
|
+
- Link colors
|
|
187
|
+
|
|
188
|
+
### **2. Glassmorphism Effects**
|
|
189
|
+
- `backdrop-filter: blur(20px)` on cards
|
|
190
|
+
- Semi-transparent backgrounds
|
|
191
|
+
- Layered shadows for depth
|
|
192
|
+
- Modern, premium feel
|
|
193
|
+
|
|
194
|
+
### **3. Code Block Theming**
|
|
195
|
+
- Night Owl color scheme
|
|
196
|
+
- Syntax highlighting support
|
|
197
|
+
- Monospace font optimization
|
|
198
|
+
- Enhanced readability
|
|
199
|
+
|
|
200
|
+
### **4. Responsive Design**
|
|
201
|
+
- Mobile-first approach
|
|
202
|
+
- Flexible layouts
|
|
203
|
+
- Touch-optimized interactions
|
|
204
|
+
- Adaptive spacing
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## 📊 Performance Optimizations
|
|
209
|
+
|
|
210
|
+
- **Font Preloading**: Google Fonts with `preconnect`
|
|
211
|
+
- **CSS-only Animations**: No JavaScript overhead
|
|
212
|
+
- **Minimal DOM Manipulation**: Efficient rendering
|
|
213
|
+
- **Optimized Selectors**: Fast CSS matching
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 🎯 Use Cases
|
|
218
|
+
|
|
219
|
+
### **Startup/SaaS Products**
|
|
220
|
+
```typescript
|
|
221
|
+
NestScrambleModule.forRoot({
|
|
222
|
+
theme: 'futuristic',
|
|
223
|
+
primaryColor: '#00f2ff',
|
|
224
|
+
apiTitle: 'StartupX API',
|
|
225
|
+
})
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### **Enterprise/Corporate**
|
|
229
|
+
```typescript
|
|
230
|
+
NestScrambleModule.forRoot({
|
|
231
|
+
theme: 'classic',
|
|
232
|
+
primaryColor: '#0066cc',
|
|
233
|
+
apiTitle: 'Enterprise API Gateway',
|
|
234
|
+
})
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### **Personal Projects**
|
|
238
|
+
```typescript
|
|
239
|
+
NestScrambleModule.forRoot({
|
|
240
|
+
theme: 'futuristic',
|
|
241
|
+
primaryColor: '#a855f7',
|
|
242
|
+
customDomainIcon: '/my-logo.png',
|
|
243
|
+
})
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## 🔥 What Makes This "Dala3" (High-End)?
|
|
249
|
+
|
|
250
|
+
1. **✨ Attention to Detail**: Every pixel is crafted with care
|
|
251
|
+
2. **🎨 Modern Design Language**: Glassmorphism, gradients, animations
|
|
252
|
+
3. **⚡ Smooth Interactions**: Buttery 60fps animations
|
|
253
|
+
4. **🎯 User Experience**: Intuitive, delightful, professional
|
|
254
|
+
5. **🚀 Performance**: Optimized for speed and efficiency
|
|
255
|
+
6. **💎 Premium Feel**: Rivals products like Stripe, Vercel, Linear
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 🛠️ Technical Implementation
|
|
260
|
+
|
|
261
|
+
### **DocsController.ts**
|
|
262
|
+
- Dynamic CSS injection based on theme
|
|
263
|
+
- Separate methods for futuristic and classic themes
|
|
264
|
+
- Easter egg console script injection
|
|
265
|
+
- Theme toggle functionality
|
|
266
|
+
|
|
267
|
+
### **NestScrambleModule.ts**
|
|
268
|
+
- Enhanced options interface
|
|
269
|
+
- Smart defaults with auto-detection
|
|
270
|
+
- Gradient terminal dashboard
|
|
271
|
+
- Configuration validation
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 📝 License
|
|
276
|
+
|
|
277
|
+
MIT License - Developed by **Mohamed Mustafa** (@Eng-MMustafa)
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## 🌟 Credits
|
|
282
|
+
|
|
283
|
+
**Lead Architect**: Mohamed Mustafa
|
|
284
|
+
**GitHub**: [@Eng-MMustafa](https://github.com/Eng-MMustafa)
|
|
285
|
+
**Project**: [nest-scramble](https://github.com/Eng-MMustafa/nest-scramble)
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
**Made with ✨ and passion for beautiful developer experiences.**
|
|
@@ -9,6 +9,9 @@ export interface NestScrambleOptions {
|
|
|
9
9
|
sourcePath?: string;
|
|
10
10
|
apiTitle?: string;
|
|
11
11
|
apiVersion?: string;
|
|
12
|
+
customDomainIcon?: string;
|
|
13
|
+
primaryColor?: string;
|
|
14
|
+
theme?: 'classic' | 'futuristic';
|
|
12
15
|
}
|
|
13
16
|
export declare class NestScrambleModule implements OnModuleInit {
|
|
14
17
|
private static moduleOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NestScrambleModule.d.ts","sourceRoot":"","sources":["../src/NestScrambleModule.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAU,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AASxG,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"NestScrambleModule.d.ts","sourceRoot":"","sources":["../src/NestScrambleModule.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAU,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AASxG,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CAClC;AAED,qBACa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,MAAM,CAAC,aAAa,CAA2B;IACvD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAgB;IAE3C,YAAY;IAIZ,OAAO,CAAC,gBAAgB;IAsCxB,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,mBAAwB,GAAG,aAAa;IA+EhE,MAAM,CAAC,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,aAAa;IAKrE,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAMvC"}
|
|
@@ -25,17 +25,36 @@ let NestScrambleModule = NestScrambleModule_1 = class NestScrambleModule {
|
|
|
25
25
|
const port = NestScrambleModule_1.detectedPort;
|
|
26
26
|
const options = NestScrambleModule_1.moduleOptions;
|
|
27
27
|
const projectStructure = AutoDetector_1.AutoDetector.detectProjectStructure();
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
28
|
+
const cyan = '\x1b[36m';
|
|
29
|
+
const purple = '\x1b[35m';
|
|
30
|
+
const green = '\x1b[32m';
|
|
31
|
+
const yellow = '\x1b[33m';
|
|
32
|
+
const bold = '\x1b[1m';
|
|
33
|
+
const reset = '\x1b[0m';
|
|
34
|
+
const dim = '\x1b[2m';
|
|
35
|
+
const gradient = `${cyan}${bold}`;
|
|
36
|
+
console.log('\n');
|
|
37
|
+
console.log(`${gradient}╔═══════════════════════════════════════════════════════════════╗${reset}`);
|
|
38
|
+
console.log(`${gradient}║${reset} ${cyan}${bold}✨ NEST-SCRAMBLE${reset} ${dim}by Mohamed Mustafa${reset} ${gradient}║${reset}`);
|
|
39
|
+
console.log(`${gradient}║${reset} ${purple}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${reset} ${gradient}║${reset}`);
|
|
40
|
+
console.log(`${gradient}║${reset} ${gradient}║${reset}`);
|
|
41
|
+
console.log(`${gradient}║${reset} ${green}●${reset} ${bold}Documentation${reset} ${gradient}║${reset}`);
|
|
42
|
+
console.log(`${gradient}║${reset} ${cyan}→${reset} http://localhost:${port}/docs ${gradient}║${reset}`);
|
|
43
|
+
console.log(`${gradient}║${reset} ${gradient}║${reset}`);
|
|
44
|
+
console.log(`${gradient}║${reset} ${green}●${reset} ${bold}OpenAPI Spec${reset} ${gradient}║${reset}`);
|
|
45
|
+
console.log(`${gradient}║${reset} ${cyan}→${reset} http://localhost:${port}/docs-json ${gradient}║${reset}`);
|
|
33
46
|
if (options.enableMock !== false) {
|
|
34
|
-
console.log(
|
|
47
|
+
console.log(`${gradient}║${reset} ${gradient}║${reset}`);
|
|
48
|
+
console.log(`${gradient}║${reset} ${green}●${reset} ${bold}Mock Server${reset} ${gradient}║${reset}`);
|
|
49
|
+
console.log(`${gradient}║${reset} ${cyan}→${reset} http://localhost:${port}/scramble-mock ${gradient}║${reset}`);
|
|
35
50
|
}
|
|
36
|
-
console.log(
|
|
37
|
-
console.log(
|
|
38
|
-
console.log(
|
|
51
|
+
console.log(`${gradient}║${reset} ${gradient}║${reset}`);
|
|
52
|
+
console.log(`${gradient}║${reset} ${purple}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${reset} ${gradient}║${reset}`);
|
|
53
|
+
console.log(`${gradient}║${reset} ${yellow}📦${reset} Source Path: ${dim}${projectStructure.sourcePath}${reset} ${gradient}║${reset}`);
|
|
54
|
+
console.log(`${gradient}║${reset} ${yellow}🎯${reset} Controllers: ${green}${bold}${projectStructure.controllerPaths.length}${reset} ${gradient}║${reset}`);
|
|
55
|
+
console.log(`${gradient}║${reset} ${yellow}🎨${reset} Theme: ${options.theme === 'futuristic' ? `${purple}${bold}Futuristic${reset}` : `${dim}Classic${reset}`} ${gradient}║${reset}`);
|
|
56
|
+
console.log(`${gradient}╚═══════════════════════════════════════════════════════════════╝${reset}`);
|
|
57
|
+
console.log(`\n ${dim}Press Ctrl+C to stop the server${reset}\n`);
|
|
39
58
|
}
|
|
40
59
|
static forRoot(options = {}) {
|
|
41
60
|
// Auto-detect project structure
|
|
@@ -50,6 +69,9 @@ let NestScrambleModule = NestScrambleModule_1 = class NestScrambleModule {
|
|
|
50
69
|
sourcePath: options.sourcePath || projectStructure.sourcePath,
|
|
51
70
|
apiTitle: options.apiTitle || AutoDetector_1.AutoDetector.getAppName(),
|
|
52
71
|
apiVersion: options.apiVersion || AutoDetector_1.AutoDetector.getAppVersion(),
|
|
72
|
+
customDomainIcon: options.customDomainIcon || '',
|
|
73
|
+
primaryColor: options.primaryColor || '#00f2ff',
|
|
74
|
+
theme: options.theme || 'futuristic',
|
|
53
75
|
};
|
|
54
76
|
// Store for dashboard display
|
|
55
77
|
NestScrambleModule_1.moduleOptions = config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NestScrambleModule.js","sourceRoot":"","sources":["../src/NestScrambleModule.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,kEAAkE;AAClE,2CAAwG;AACxG,wFAAqF;AACrF,gEAA6D;AAC7D,6DAA0D;AAC1D,yDAAsD;AACtD,mEAAgE;AAChE,iEAA8D;AAC9D,uDAAoD;
|
|
1
|
+
{"version":3,"file":"NestScrambleModule.js","sourceRoot":"","sources":["../src/NestScrambleModule.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
import { NestScrambleOptions } from '../NestScrambleModule';
|
|
1
2
|
export declare const IS_PUBLIC_KEY = "isPublic";
|
|
2
3
|
export declare const Public: () => import("@nestjs/common").CustomDecorator<string>;
|
|
3
4
|
export declare class DocsController {
|
|
4
5
|
private openApiSpec;
|
|
5
|
-
|
|
6
|
+
private options;
|
|
7
|
+
constructor(openApiSpec: any, options: NestScrambleOptions);
|
|
6
8
|
getDocs(res: any): void;
|
|
9
|
+
private getFuturisticCSS;
|
|
10
|
+
private getClassicCSS;
|
|
11
|
+
private getEasterEggScript;
|
|
7
12
|
getOpenApiJson(res: any): void;
|
|
8
13
|
getOpenApiJsonLegacy(res: any): void;
|
|
9
14
|
getOpenApiSpec(): any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocsController.d.ts","sourceRoot":"","sources":["../../src/controllers/DocsController.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DocsController.d.ts","sourceRoot":"","sources":["../../src/controllers/DocsController.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,MAAM,wDAAyC,CAAC;AAE7D,qBAEa,cAAc;IAEU,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO;gBADP,WAAW,EAAE,GAAG,EAChB,OAAO,EAAE,mBAAmB;IAIvE,OAAO,CAAQ,GAAG,EAAE,GAAG;IAgCvB,OAAO,CAAC,gBAAgB;IAkRxB,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,kBAAkB;IAsB1B,cAAc,CAAQ,GAAG,EAAE,GAAG;IAa9B,oBAAoB,CAAQ,GAAG,EAAE,GAAG;IAKpC,cAAc;CAGf"}
|
|
@@ -19,32 +19,377 @@ exports.IS_PUBLIC_KEY = 'isPublic';
|
|
|
19
19
|
const Public = () => (0, common_1.SetMetadata)(exports.IS_PUBLIC_KEY, true);
|
|
20
20
|
exports.Public = Public;
|
|
21
21
|
let DocsController = class DocsController {
|
|
22
|
-
constructor(openApiSpec) {
|
|
22
|
+
constructor(openApiSpec, options) {
|
|
23
23
|
this.openApiSpec = openApiSpec;
|
|
24
|
+
this.options = options;
|
|
24
25
|
}
|
|
25
26
|
getDocs(res) {
|
|
27
|
+
const isFuturistic = this.options.theme === 'futuristic';
|
|
28
|
+
const primaryColor = this.options.primaryColor || '#00f2ff';
|
|
29
|
+
const customIcon = this.options.customDomainIcon || '';
|
|
26
30
|
const html = `<!DOCTYPE html>
|
|
27
31
|
<html lang="en">
|
|
28
32
|
<head>
|
|
29
|
-
<title
|
|
33
|
+
<title>${this.options.apiTitle || 'API Documentation'} - Nest-Scramble</title>
|
|
30
34
|
<meta charset="utf-8" />
|
|
31
35
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
36
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
37
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
38
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Plus+Jakarta+Sans:wght@300;400;500;600;700;800&display=swap" rel="stylesheet">
|
|
39
|
+
${customIcon ? `<link rel="icon" href="${customIcon}" type="image/x-icon">` : ''}
|
|
32
40
|
<style>
|
|
33
|
-
|
|
34
|
-
margin: 0;
|
|
35
|
-
padding: 0;
|
|
36
|
-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;
|
|
37
|
-
}
|
|
41
|
+
${isFuturistic ? this.getFuturisticCSS(primaryColor) : this.getClassicCSS(primaryColor)}
|
|
38
42
|
</style>
|
|
39
43
|
</head>
|
|
40
44
|
<body>
|
|
41
45
|
<script id="api-reference" data-url="/docs-json"></script>
|
|
42
46
|
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
|
|
47
|
+
<script>
|
|
48
|
+
${this.getEasterEggScript()}
|
|
49
|
+
</script>
|
|
43
50
|
</body>
|
|
44
51
|
</html>`;
|
|
45
52
|
res.setHeader('Content-Type', 'text/html; charset=utf-8');
|
|
46
53
|
res.send(html);
|
|
47
54
|
}
|
|
55
|
+
getFuturisticCSS(primaryColor) {
|
|
56
|
+
return `
|
|
57
|
+
/* 🚀 Futuristic Theme by Mohamed Mustafa - Deep Space Edition */
|
|
58
|
+
:root {
|
|
59
|
+
--primary-cyber: ${primaryColor};
|
|
60
|
+
--primary-glow: ${primaryColor}80;
|
|
61
|
+
--purple-electric: #a855f7;
|
|
62
|
+
--deep-space: #050505;
|
|
63
|
+
--space-dark: #0a0a0a;
|
|
64
|
+
--space-card: #111111;
|
|
65
|
+
--space-border: #1a1a1a;
|
|
66
|
+
--text-primary: #ffffff;
|
|
67
|
+
--text-secondary: #a0a0a0;
|
|
68
|
+
--glow-shadow: 0 0 20px ${primaryColor}40, 0 0 40px ${primaryColor}20;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
* {
|
|
72
|
+
font-family: 'Inter', 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, sans-serif !important;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
body {
|
|
76
|
+
margin: 0;
|
|
77
|
+
padding: 0;
|
|
78
|
+
background: var(--deep-space) !important;
|
|
79
|
+
color: var(--text-primary) !important;
|
|
80
|
+
overflow-x: hidden;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/* Animated Background Grid */
|
|
84
|
+
body::before {
|
|
85
|
+
content: '';
|
|
86
|
+
position: fixed;
|
|
87
|
+
top: 0;
|
|
88
|
+
left: 0;
|
|
89
|
+
width: 100%;
|
|
90
|
+
height: 100%;
|
|
91
|
+
background-image:
|
|
92
|
+
linear-gradient(var(--space-border) 1px, transparent 1px),
|
|
93
|
+
linear-gradient(90deg, var(--space-border) 1px, transparent 1px);
|
|
94
|
+
background-size: 50px 50px;
|
|
95
|
+
opacity: 0.3;
|
|
96
|
+
z-index: 0;
|
|
97
|
+
pointer-events: none;
|
|
98
|
+
animation: gridPulse 10s ease-in-out infinite;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@keyframes gridPulse {
|
|
102
|
+
0%, 100% { opacity: 0.2; }
|
|
103
|
+
50% { opacity: 0.4; }
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/* Glassmorphism Cards */
|
|
107
|
+
.scalar-card,
|
|
108
|
+
[class*="card"],
|
|
109
|
+
[class*="panel"],
|
|
110
|
+
[class*="sidebar"] {
|
|
111
|
+
background: rgba(17, 17, 17, 0.6) !important;
|
|
112
|
+
backdrop-filter: blur(20px) !important;
|
|
113
|
+
-webkit-backdrop-filter: blur(20px) !important;
|
|
114
|
+
border: 1px solid rgba(255, 255, 255, 0.1) !important;
|
|
115
|
+
border-radius: 16px !important;
|
|
116
|
+
box-shadow:
|
|
117
|
+
0 8px 32px rgba(0, 0, 0, 0.4),
|
|
118
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.1) !important;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* Cyber Buttons & Active States */
|
|
122
|
+
button,
|
|
123
|
+
[role="button"],
|
|
124
|
+
.button,
|
|
125
|
+
a[class*="button"] {
|
|
126
|
+
background: linear-gradient(135deg, var(--primary-cyber), var(--purple-electric)) !important;
|
|
127
|
+
border: none !important;
|
|
128
|
+
border-radius: 12px !important;
|
|
129
|
+
padding: 10px 20px !important;
|
|
130
|
+
color: white !important;
|
|
131
|
+
font-weight: 600 !important;
|
|
132
|
+
letter-spacing: 0.5px !important;
|
|
133
|
+
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
|
|
134
|
+
position: relative !important;
|
|
135
|
+
overflow: hidden !important;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
button:hover,
|
|
139
|
+
[role="button"]:hover,
|
|
140
|
+
.button:hover {
|
|
141
|
+
transform: translateY(-2px) !important;
|
|
142
|
+
box-shadow: var(--glow-shadow) !important;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
button::before {
|
|
146
|
+
content: '';
|
|
147
|
+
position: absolute;
|
|
148
|
+
top: 0;
|
|
149
|
+
left: -100%;
|
|
150
|
+
width: 100%;
|
|
151
|
+
height: 100%;
|
|
152
|
+
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2), transparent);
|
|
153
|
+
transition: left 0.5s;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
button:hover::before {
|
|
157
|
+
left: 100%;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* Search Bar - Spotlight Style */
|
|
161
|
+
input[type="search"],
|
|
162
|
+
input[type="text"],
|
|
163
|
+
[class*="search"] input {
|
|
164
|
+
background: rgba(17, 17, 17, 0.8) !important;
|
|
165
|
+
border: 2px solid rgba(255, 255, 255, 0.1) !important;
|
|
166
|
+
border-radius: 12px !important;
|
|
167
|
+
padding: 12px 20px !important;
|
|
168
|
+
color: var(--text-primary) !important;
|
|
169
|
+
font-size: 14px !important;
|
|
170
|
+
transition: all 0.3s ease !important;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
input[type="search"]:focus,
|
|
174
|
+
input[type="text"]:focus,
|
|
175
|
+
[class*="search"] input:focus {
|
|
176
|
+
border-color: var(--primary-cyber) !important;
|
|
177
|
+
box-shadow: 0 0 0 3px var(--primary-glow) !important;
|
|
178
|
+
outline: none !important;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* Code Blocks - Night Owl Theme */
|
|
182
|
+
pre,
|
|
183
|
+
code,
|
|
184
|
+
[class*="code"],
|
|
185
|
+
.hljs {
|
|
186
|
+
background: #011627 !important;
|
|
187
|
+
border: 1px solid rgba(0, 242, 255, 0.2) !important;
|
|
188
|
+
border-radius: 12px !important;
|
|
189
|
+
padding: 16px !important;
|
|
190
|
+
font-family: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace !important;
|
|
191
|
+
font-size: 13px !important;
|
|
192
|
+
line-height: 1.6 !important;
|
|
193
|
+
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3) !important;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
code {
|
|
197
|
+
color: #82AAFF !important;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/* Sidebar Glassmorphism */
|
|
201
|
+
[class*="sidebar"],
|
|
202
|
+
nav,
|
|
203
|
+
aside {
|
|
204
|
+
background: rgba(10, 10, 10, 0.7) !important;
|
|
205
|
+
backdrop-filter: blur(30px) !important;
|
|
206
|
+
border-right: 1px solid rgba(255, 255, 255, 0.08) !important;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/* Custom Branding Badge */
|
|
210
|
+
body::after {
|
|
211
|
+
content: '✨ Powered by Nest-Scramble';
|
|
212
|
+
position: fixed;
|
|
213
|
+
bottom: 20px;
|
|
214
|
+
right: 20px;
|
|
215
|
+
background: linear-gradient(135deg, var(--primary-cyber), var(--purple-electric));
|
|
216
|
+
padding: 8px 16px;
|
|
217
|
+
border-radius: 20px;
|
|
218
|
+
font-size: 11px;
|
|
219
|
+
font-weight: 600;
|
|
220
|
+
letter-spacing: 0.5px;
|
|
221
|
+
box-shadow: var(--glow-shadow);
|
|
222
|
+
z-index: 9999;
|
|
223
|
+
animation: badgePulse 3s ease-in-out infinite;
|
|
224
|
+
cursor: pointer;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
@keyframes badgePulse {
|
|
228
|
+
0%, 100% {
|
|
229
|
+
box-shadow: 0 0 20px ${primaryColor}40, 0 0 40px ${primaryColor}20;
|
|
230
|
+
}
|
|
231
|
+
50% {
|
|
232
|
+
box-shadow: 0 0 30px ${primaryColor}60, 0 0 60px ${primaryColor}30;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* Scrollbar Styling */
|
|
237
|
+
::-webkit-scrollbar {
|
|
238
|
+
width: 10px;
|
|
239
|
+
height: 10px;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
::-webkit-scrollbar-track {
|
|
243
|
+
background: var(--space-dark);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
::-webkit-scrollbar-thumb {
|
|
247
|
+
background: linear-gradient(180deg, var(--primary-cyber), var(--purple-electric));
|
|
248
|
+
border-radius: 10px;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
::-webkit-scrollbar-thumb:hover {
|
|
252
|
+
background: var(--primary-cyber);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/* Headers with Gradient */
|
|
256
|
+
h1, h2, h3, h4, h5, h6 {
|
|
257
|
+
background: linear-gradient(135deg, var(--primary-cyber), var(--purple-electric));
|
|
258
|
+
-webkit-background-clip: text;
|
|
259
|
+
-webkit-text-fill-color: transparent;
|
|
260
|
+
background-clip: text;
|
|
261
|
+
font-weight: 700 !important;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/* Links */
|
|
265
|
+
a {
|
|
266
|
+
color: var(--primary-cyber) !important;
|
|
267
|
+
text-decoration: none !important;
|
|
268
|
+
transition: all 0.3s ease !important;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
a:hover {
|
|
272
|
+
color: var(--purple-electric) !important;
|
|
273
|
+
text-shadow: 0 0 10px var(--primary-glow) !important;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* Method Badges */
|
|
277
|
+
[class*="method"],
|
|
278
|
+
[class*="badge"] {
|
|
279
|
+
border-radius: 8px !important;
|
|
280
|
+
padding: 4px 12px !important;
|
|
281
|
+
font-weight: 600 !important;
|
|
282
|
+
font-size: 11px !important;
|
|
283
|
+
letter-spacing: 0.5px !important;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/* Response Status Colors */
|
|
287
|
+
[class*="status-200"],
|
|
288
|
+
[class*="success"] {
|
|
289
|
+
background: linear-gradient(135deg, #10b981, #059669) !important;
|
|
290
|
+
color: white !important;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
[class*="status-400"],
|
|
294
|
+
[class*="error"] {
|
|
295
|
+
background: linear-gradient(135deg, #ef4444, #dc2626) !important;
|
|
296
|
+
color: white !important;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* Smooth Transitions */
|
|
300
|
+
* {
|
|
301
|
+
transition: background 0.3s ease, border 0.3s ease, box-shadow 0.3s ease !important;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/* Theme Toggle Button */
|
|
305
|
+
.theme-toggle {
|
|
306
|
+
position: fixed;
|
|
307
|
+
top: 20px;
|
|
308
|
+
right: 20px;
|
|
309
|
+
background: rgba(17, 17, 17, 0.8) !important;
|
|
310
|
+
backdrop-filter: blur(10px);
|
|
311
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
312
|
+
border-radius: 12px;
|
|
313
|
+
padding: 8px 16px;
|
|
314
|
+
color: var(--text-primary);
|
|
315
|
+
font-size: 12px;
|
|
316
|
+
font-weight: 600;
|
|
317
|
+
cursor: pointer;
|
|
318
|
+
z-index: 9998;
|
|
319
|
+
transition: all 0.3s ease;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.theme-toggle:hover {
|
|
323
|
+
border-color: var(--primary-cyber);
|
|
324
|
+
box-shadow: 0 0 15px var(--primary-glow);
|
|
325
|
+
}
|
|
326
|
+
`;
|
|
327
|
+
}
|
|
328
|
+
getClassicCSS(primaryColor) {
|
|
329
|
+
return `
|
|
330
|
+
/* Classic Theme */
|
|
331
|
+
body {
|
|
332
|
+
margin: 0;
|
|
333
|
+
padding: 0;
|
|
334
|
+
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
335
|
+
background: #ffffff;
|
|
336
|
+
color: #1a1a1a;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
button,
|
|
340
|
+
[role="button"] {
|
|
341
|
+
background: ${primaryColor} !important;
|
|
342
|
+
color: white !important;
|
|
343
|
+
border: none !important;
|
|
344
|
+
border-radius: 8px !important;
|
|
345
|
+
padding: 10px 20px !important;
|
|
346
|
+
font-weight: 600 !important;
|
|
347
|
+
transition: all 0.3s ease !important;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
button:hover {
|
|
351
|
+
opacity: 0.9 !important;
|
|
352
|
+
transform: translateY(-1px) !important;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
input[type="search"],
|
|
356
|
+
input[type="text"] {
|
|
357
|
+
border: 2px solid #e5e5e5 !important;
|
|
358
|
+
border-radius: 8px !important;
|
|
359
|
+
padding: 10px 16px !important;
|
|
360
|
+
transition: all 0.3s ease !important;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
input:focus {
|
|
364
|
+
border-color: ${primaryColor} !important;
|
|
365
|
+
outline: none !important;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
a {
|
|
369
|
+
color: ${primaryColor} !important;
|
|
370
|
+
}
|
|
371
|
+
`;
|
|
372
|
+
}
|
|
373
|
+
getEasterEggScript() {
|
|
374
|
+
return `
|
|
375
|
+
// Easter Egg Console Message
|
|
376
|
+
console.log('%c✨ Engineered with passion by Mohamed Mustafa', 'color: #00f2ff; font-size: 16px; font-weight: bold; text-shadow: 0 0 10px #00f2ff;');
|
|
377
|
+
console.log('%cNest-Scramble is active.', 'color: #a855f7; font-size: 14px; font-weight: 600;');
|
|
378
|
+
console.log('%c🚀 GitHub: https://github.com/Eng-MMustafa/nest-scramble', 'color: #ffffff; font-size: 12px;');
|
|
379
|
+
|
|
380
|
+
// Theme Toggle Functionality
|
|
381
|
+
const themeToggle = document.createElement('div');
|
|
382
|
+
themeToggle.className = 'theme-toggle';
|
|
383
|
+
themeToggle.textContent = '🎨 Theme';
|
|
384
|
+
themeToggle.onclick = () => {
|
|
385
|
+
const currentTheme = localStorage.getItem('nest-scramble-theme') || 'futuristic';
|
|
386
|
+
const newTheme = currentTheme === 'futuristic' ? 'classic' : 'futuristic';
|
|
387
|
+
localStorage.setItem('nest-scramble-theme', newTheme);
|
|
388
|
+
window.location.reload();
|
|
389
|
+
};
|
|
390
|
+
document.body.appendChild(themeToggle);
|
|
391
|
+
`;
|
|
392
|
+
}
|
|
48
393
|
getOpenApiJson(res) {
|
|
49
394
|
try {
|
|
50
395
|
const jsonString = JSON.stringify(this.openApiSpec, null, 2);
|
|
@@ -96,6 +441,7 @@ exports.DocsController = DocsController = __decorate([
|
|
|
96
441
|
(0, common_1.Controller)(),
|
|
97
442
|
(0, exports.Public)(),
|
|
98
443
|
__param(0, (0, common_1.Inject)('NEST_SCRAMBLE_OPENAPI')),
|
|
99
|
-
|
|
444
|
+
__param(1, (0, common_1.Inject)('NEST_SCRAMBLE_OPTIONS')),
|
|
445
|
+
__metadata("design:paramtypes", [Object, Object])
|
|
100
446
|
], DocsController);
|
|
101
447
|
//# sourceMappingURL=DocsController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocsController.js","sourceRoot":"","sources":["../../src/controllers/DocsController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kEAAkE;AAClE,2CAA2E;
|
|
1
|
+
{"version":3,"file":"DocsController.js","sourceRoot":"","sources":["../../src/controllers/DocsController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nest-Scramble Futuristic UI - Usage Example
|
|
3
|
+
* Developed by Mohamed Mustafa (@Eng-MMustafa)
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Module } from '@nestjs/common';
|
|
7
|
+
import { NestScrambleModule } from 'nest-scramble';
|
|
8
|
+
|
|
9
|
+
// ============================================
|
|
10
|
+
// Example 1: Full Futuristic Setup
|
|
11
|
+
// ============================================
|
|
12
|
+
@Module({
|
|
13
|
+
imports: [
|
|
14
|
+
NestScrambleModule.forRoot({
|
|
15
|
+
// 🎨 Futuristic theme with cyber aesthetics
|
|
16
|
+
theme: 'futuristic',
|
|
17
|
+
|
|
18
|
+
// 🌈 Custom brand color (Cyber-Cyan by default)
|
|
19
|
+
primaryColor: '#00f2ff',
|
|
20
|
+
|
|
21
|
+
// 🖼️ Custom favicon for your brand
|
|
22
|
+
customDomainIcon: 'https://your-domain.com/favicon.ico',
|
|
23
|
+
|
|
24
|
+
// 📝 API metadata
|
|
25
|
+
apiTitle: 'My Futuristic API',
|
|
26
|
+
apiVersion: '2.0.0',
|
|
27
|
+
|
|
28
|
+
// 🚀 Additional options
|
|
29
|
+
enableMock: true,
|
|
30
|
+
autoExportPostman: true,
|
|
31
|
+
postmanOutputPath: './postman-collection.json',
|
|
32
|
+
}),
|
|
33
|
+
],
|
|
34
|
+
})
|
|
35
|
+
export class FuturisticAppModule {}
|
|
36
|
+
|
|
37
|
+
// ============================================
|
|
38
|
+
// Example 2: Custom Purple Theme
|
|
39
|
+
// ============================================
|
|
40
|
+
@Module({
|
|
41
|
+
imports: [
|
|
42
|
+
NestScrambleModule.forRoot({
|
|
43
|
+
theme: 'futuristic',
|
|
44
|
+
primaryColor: '#a855f7', // Electric Purple
|
|
45
|
+
apiTitle: 'Purple Dream API',
|
|
46
|
+
}),
|
|
47
|
+
],
|
|
48
|
+
})
|
|
49
|
+
export class PurpleThemeModule {}
|
|
50
|
+
|
|
51
|
+
// ============================================
|
|
52
|
+
// Example 3: Classic Professional Theme
|
|
53
|
+
// ============================================
|
|
54
|
+
@Module({
|
|
55
|
+
imports: [
|
|
56
|
+
NestScrambleModule.forRoot({
|
|
57
|
+
theme: 'classic',
|
|
58
|
+
primaryColor: '#0066cc', // Corporate Blue
|
|
59
|
+
apiTitle: 'Enterprise API Gateway',
|
|
60
|
+
apiVersion: '1.0.0',
|
|
61
|
+
}),
|
|
62
|
+
],
|
|
63
|
+
})
|
|
64
|
+
export class ClassicThemeModule {}
|
|
65
|
+
|
|
66
|
+
// ============================================
|
|
67
|
+
// Example 4: Minimal Setup (Uses Defaults)
|
|
68
|
+
// ============================================
|
|
69
|
+
@Module({
|
|
70
|
+
imports: [
|
|
71
|
+
NestScrambleModule.forRoot({
|
|
72
|
+
// Defaults to futuristic theme with #00f2ff
|
|
73
|
+
apiTitle: 'Quick Start API',
|
|
74
|
+
}),
|
|
75
|
+
],
|
|
76
|
+
})
|
|
77
|
+
export class MinimalSetupModule {}
|
|
78
|
+
|
|
79
|
+
// ============================================
|
|
80
|
+
// Example 5: Startup/SaaS Branding
|
|
81
|
+
// ============================================
|
|
82
|
+
@Module({
|
|
83
|
+
imports: [
|
|
84
|
+
NestScrambleModule.forRoot({
|
|
85
|
+
theme: 'futuristic',
|
|
86
|
+
primaryColor: '#00f2ff',
|
|
87
|
+
customDomainIcon: 'https://startup.com/logo.png',
|
|
88
|
+
apiTitle: 'StartupX Platform API',
|
|
89
|
+
apiVersion: '3.0.0',
|
|
90
|
+
baseUrl: 'https://api.startup.com',
|
|
91
|
+
}),
|
|
92
|
+
],
|
|
93
|
+
})
|
|
94
|
+
export class StartupModule {}
|
|
95
|
+
|
|
96
|
+
// ============================================
|
|
97
|
+
// Example 6: Green Eco Theme
|
|
98
|
+
// ============================================
|
|
99
|
+
@Module({
|
|
100
|
+
imports: [
|
|
101
|
+
NestScrambleModule.forRoot({
|
|
102
|
+
theme: 'futuristic',
|
|
103
|
+
primaryColor: '#10b981', // Emerald Green
|
|
104
|
+
apiTitle: 'EcoTech API',
|
|
105
|
+
apiVersion: '1.5.0',
|
|
106
|
+
}),
|
|
107
|
+
],
|
|
108
|
+
})
|
|
109
|
+
export class EcoThemeModule {}
|
|
110
|
+
|
|
111
|
+
// ============================================
|
|
112
|
+
// Example 7: Orange Energy Theme
|
|
113
|
+
// ============================================
|
|
114
|
+
@Module({
|
|
115
|
+
imports: [
|
|
116
|
+
NestScrambleModule.forRoot({
|
|
117
|
+
theme: 'futuristic',
|
|
118
|
+
primaryColor: '#f59e0b', // Amber Orange
|
|
119
|
+
apiTitle: 'Energy Platform API',
|
|
120
|
+
}),
|
|
121
|
+
],
|
|
122
|
+
})
|
|
123
|
+
export class EnergyThemeModule {}
|
|
124
|
+
|
|
125
|
+
// ============================================
|
|
126
|
+
// Example 8: Full Configuration
|
|
127
|
+
// ============================================
|
|
128
|
+
@Module({
|
|
129
|
+
imports: [
|
|
130
|
+
NestScrambleModule.forRoot({
|
|
131
|
+
// UI Customization
|
|
132
|
+
theme: 'futuristic',
|
|
133
|
+
primaryColor: '#00f2ff',
|
|
134
|
+
customDomainIcon: '/favicon.ico',
|
|
135
|
+
|
|
136
|
+
// API Documentation
|
|
137
|
+
apiTitle: 'Complete API Documentation',
|
|
138
|
+
apiVersion: '2.5.0',
|
|
139
|
+
|
|
140
|
+
// Routing
|
|
141
|
+
path: '/api-docs',
|
|
142
|
+
|
|
143
|
+
// Features
|
|
144
|
+
enableMock: true,
|
|
145
|
+
autoExportPostman: true,
|
|
146
|
+
postmanOutputPath: './collections/api.postman.json',
|
|
147
|
+
|
|
148
|
+
// Server Configuration
|
|
149
|
+
baseUrl: 'https://api.example.com',
|
|
150
|
+
sourcePath: 'src',
|
|
151
|
+
}),
|
|
152
|
+
],
|
|
153
|
+
})
|
|
154
|
+
export class FullConfigModule {}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* 🎨 Available Primary Colors (Examples):
|
|
158
|
+
*
|
|
159
|
+
* Cyber-Cyan: #00f2ff (Default)
|
|
160
|
+
* Electric Purple: #a855f7
|
|
161
|
+
* Neon Pink: #ec4899
|
|
162
|
+
* Emerald Green: #10b981
|
|
163
|
+
* Amber Orange: #f59e0b
|
|
164
|
+
* Sky Blue: #0ea5e9
|
|
165
|
+
* Rose Red: #f43f5e
|
|
166
|
+
* Violet: #8b5cf6
|
|
167
|
+
* Lime Green: #84cc16
|
|
168
|
+
* Fuchsia: #d946ef
|
|
169
|
+
*/
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* 🚀 Features You Get:
|
|
173
|
+
*
|
|
174
|
+
* ✨ Futuristic Theme:
|
|
175
|
+
* - Deep space dark mode (#050505)
|
|
176
|
+
* - Animated background grid
|
|
177
|
+
* - Glassmorphism cards with backdrop blur
|
|
178
|
+
* - Gradient buttons (cyan → purple)
|
|
179
|
+
* - Spotlight-style search bar
|
|
180
|
+
* - Night Owl code syntax theme
|
|
181
|
+
* - Custom scrollbar styling
|
|
182
|
+
* - Glowing "Powered by Nest-Scramble" badge
|
|
183
|
+
*
|
|
184
|
+
* 🎭 Easter Eggs:
|
|
185
|
+
* - Beautiful console messages
|
|
186
|
+
* - Theme toggle button (top-right)
|
|
187
|
+
* - localStorage theme persistence
|
|
188
|
+
*
|
|
189
|
+
* 🖥️ Terminal UI:
|
|
190
|
+
* - Gradient dashboard with ANSI colors
|
|
191
|
+
* - Bold emojis for visual hierarchy
|
|
192
|
+
* - Color-coded sections
|
|
193
|
+
* - Professional startup display
|
|
194
|
+
*
|
|
195
|
+
* 🎯 Dynamic Branding:
|
|
196
|
+
* - One-line color customization
|
|
197
|
+
* - Custom favicon support
|
|
198
|
+
* - Branded API title
|
|
199
|
+
* - Version display
|
|
200
|
+
*/
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* 📖 Usage Instructions:
|
|
204
|
+
*
|
|
205
|
+
* 1. Import NestScrambleModule in your app.module.ts
|
|
206
|
+
* 2. Configure with forRoot() method
|
|
207
|
+
* 3. Start your NestJS application
|
|
208
|
+
* 4. Navigate to http://localhost:3000/docs
|
|
209
|
+
* 5. Enjoy the futuristic UI! ✨
|
|
210
|
+
*
|
|
211
|
+
* 🎨 Theme Toggle:
|
|
212
|
+
* - Click the "🎨 Theme" button (top-right)
|
|
213
|
+
* - Switch between Futuristic and Classic
|
|
214
|
+
* - Preference saved in localStorage
|
|
215
|
+
*
|
|
216
|
+
* 🔍 Console Easter Egg:
|
|
217
|
+
* - Open browser DevTools (F12)
|
|
218
|
+
* - Check the Console tab
|
|
219
|
+
* - See the beautiful messages! 🚀
|
|
220
|
+
*/
|
|
221
|
+
|
|
222
|
+
export default FuturisticAppModule;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nest-scramble",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "A next-generation, decorator-free API documentation engine and intelligent mock server for NestJS, engineered by Mohamed Mustafa",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|