nest-scramble 1.4.7 → 1.4.9

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.
@@ -1,14 +1,16 @@
1
- import { NestScrambleOptions } from '../NestScrambleModule';
2
1
  export declare const IS_PUBLIC_KEY = "isPublic";
3
2
  export declare const Public: () => import("@nestjs/common").CustomDecorator<string>;
4
3
  export declare class DocsController {
5
4
  private openApiSpec;
6
- private options;
7
- constructor(openApiSpec: any, options: NestScrambleOptions);
5
+ constructor(openApiSpec: any);
8
6
  getDocs(res: any): void;
9
- private getFuturisticCSS;
10
- private getClassicCSS;
11
- private getEasterEggScript;
7
+ getEndpointPage(res: any): void;
8
+ private extractEndpoints;
9
+ private generateMainPage;
10
+ private groupByTag;
11
+ private renderGroupedEndpoints;
12
+ private renderEndpointModals;
13
+ private formatJson;
12
14
  getOpenApiJson(res: any): void;
13
15
  getOpenApiJsonLegacy(res: any): void;
14
16
  getOpenApiSpec(): any;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"DocsController.d.ts","sourceRoot":"","sources":["../../src/controllers/DocsController.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,MAAM,wDAAyC,CAAC;AAE7D,qBAEa,cAAc;IAEU,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,GAAG;IAI3D,OAAO,CAAQ,GAAG,EAAE,GAAG;IAQvB,eAAe,CAAQ,GAAG,EAAE,GAAG;IAO/B,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,gBAAgB;IA8YxB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,oBAAoB;IAmE5B,OAAO,CAAC,UAAU;IAOlB,cAAc,CAAQ,GAAG,EAAE,GAAG;IAa9B,oBAAoB,CAAQ,GAAG,EAAE,GAAG;IAKpC,cAAc;CAGf"}
@@ -19,376 +19,543 @@ 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, options) {
22
+ constructor(openApiSpec) {
23
23
  this.openApiSpec = openApiSpec;
24
- this.options = options;
25
24
  }
26
25
  getDocs(res) {
27
- const isFuturistic = this.options.theme === 'futuristic';
28
- const primaryColor = this.options.primaryColor || '#00f2ff';
29
- const customIcon = this.options.customDomainIcon || '';
30
- const html = `<!DOCTYPE html>
31
- <html lang="en">
32
- <head>
33
- <title>${this.options.apiTitle || 'API Documentation'} - Nest-Scramble</title>
34
- <meta charset="utf-8" />
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">` : ''}
40
- <style>
41
- ${isFuturistic ? this.getFuturisticCSS(primaryColor) : this.getClassicCSS(primaryColor)}
42
- </style>
43
- </head>
44
- <body>
45
- <script id="api-reference" data-url="/docs-json"></script>
46
- <script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
47
- <script>
48
- ${this.getEasterEggScript()}
49
- </script>
50
- </body>
51
- </html>`;
26
+ const endpoints = this.extractEndpoints();
27
+ const html = this.generateMainPage(endpoints);
52
28
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
53
29
  res.send(html);
54
30
  }
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;
31
+ getEndpointPage(res) {
32
+ const endpoints = this.extractEndpoints();
33
+ const html = this.generateMainPage(endpoints);
34
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
35
+ res.send(html);
73
36
  }
74
-
75
- body {
37
+ extractEndpoints() {
38
+ const endpoints = [];
39
+ const paths = this.openApiSpec?.paths || {};
40
+ for (const [path, methods] of Object.entries(paths)) {
41
+ for (const [method, detailsRaw] of Object.entries(methods)) {
42
+ const details = detailsRaw;
43
+ if (['get', 'post', 'put', 'patch', 'delete'].includes(method.toLowerCase())) {
44
+ endpoints.push({
45
+ id: `${method}-${path}`.replace(/[^a-zA-Z0-9]/g, '-'),
46
+ method: method.toUpperCase(),
47
+ path,
48
+ summary: details.summary || '',
49
+ description: details.description || '',
50
+ tags: details.tags || [],
51
+ parameters: details.parameters || [],
52
+ requestBody: details.requestBody,
53
+ responses: details.responses || {},
54
+ operationId: details.operationId || `${method}-${path}`,
55
+ });
56
+ }
57
+ }
58
+ }
59
+ return endpoints;
60
+ }
61
+ generateMainPage(endpoints) {
62
+ const groupedEndpoints = this.groupByTag(endpoints);
63
+ return `<!DOCTYPE html>
64
+ <html lang="en">
65
+ <head>
66
+ <meta charset="UTF-8">
67
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
68
+ <title>${this.openApiSpec?.info?.title || 'API Documentation'}</title>
69
+ <style>
70
+ * {
76
71
  margin: 0;
77
72
  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%;
73
+ box-sizing: border-box;
74
+ }
75
+
76
+ body {
77
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
78
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
79
+ min-height: 100vh;
80
+ color: #1a202c;
81
+ }
82
+
83
+ .container {
84
+ max-width: 1400px;
85
+ margin: 0 auto;
86
+ padding: 2rem;
87
+ }
88
+
89
+ .header {
90
+ text-align: center;
91
+ color: white;
92
+ margin-bottom: 3rem;
93
+ animation: fadeInDown 0.6s ease-out;
94
+ }
95
+
96
+ .header h1 {
97
+ font-size: 2.5rem;
98
+ font-weight: 700;
99
+ margin-bottom: 0.5rem;
100
+ text-shadow: 0 2px 10px rgba(0,0,0,0.2);
101
+ }
102
+
103
+ .header p {
104
+ font-size: 1.1rem;
105
+ opacity: 0.95;
106
+ }
107
+
108
+ .search-box {
109
+ max-width: 600px;
110
+ margin: 0 auto 3rem;
111
+ animation: fadeIn 0.8s ease-out;
112
+ }
113
+
114
+ .search-input {
150
115
  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;
116
+ padding: 1rem 1.5rem;
117
+ font-size: 1rem;
118
+ border: none;
119
+ border-radius: 12px;
120
+ background: white;
121
+ box-shadow: 0 10px 30px rgba(0,0,0,0.2);
122
+ transition: all 0.3s ease;
123
+ }
124
+
125
+ .search-input:focus {
126
+ outline: none;
127
+ box-shadow: 0 15px 40px rgba(0,0,0,0.3);
128
+ transform: translateY(-2px);
129
+ }
130
+
131
+ .endpoints-grid {
132
+ display: grid;
133
+ gap: 1.5rem;
134
+ animation: fadeInUp 0.8s ease-out;
135
+ }
136
+
137
+ .tag-section {
138
+ background: white;
139
+ border-radius: 16px;
140
+ padding: 2rem;
141
+ box-shadow: 0 10px 30px rgba(0,0,0,0.15);
142
+ transition: all 0.3s ease;
143
+ }
144
+
145
+ .tag-section:hover {
146
+ box-shadow: 0 15px 40px rgba(0,0,0,0.2);
147
+ transform: translateY(-4px);
148
+ }
149
+
150
+ .tag-title {
151
+ font-size: 1.5rem;
152
+ font-weight: 600;
153
+ margin-bottom: 1.5rem;
154
+ color: #2d3748;
155
+ display: flex;
156
+ align-items: center;
157
+ gap: 0.5rem;
158
+ }
159
+
160
+ .tag-badge {
161
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
162
+ color: white;
163
+ padding: 0.25rem 0.75rem;
217
164
  border-radius: 20px;
218
- font-size: 11px;
165
+ font-size: 0.875rem;
166
+ font-weight: 500;
167
+ }
168
+
169
+ .endpoint-list {
170
+ display: grid;
171
+ gap: 1rem;
172
+ }
173
+
174
+ .endpoint-card {
175
+ background: #f7fafc;
176
+ border-radius: 12px;
177
+ padding: 1.25rem;
178
+ cursor: pointer;
179
+ transition: all 0.3s ease;
180
+ border: 2px solid transparent;
181
+ text-decoration: none;
182
+ display: block;
183
+ }
184
+
185
+ .endpoint-card:hover {
186
+ background: white;
187
+ border-color: #667eea;
188
+ transform: translateX(8px);
189
+ box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
190
+ }
191
+
192
+ .endpoint-header {
193
+ display: flex;
194
+ align-items: center;
195
+ gap: 1rem;
196
+ margin-bottom: 0.75rem;
197
+ }
198
+
199
+ .method-badge {
200
+ padding: 0.375rem 0.875rem;
201
+ border-radius: 6px;
219
202
  font-weight: 600;
203
+ font-size: 0.875rem;
204
+ text-transform: uppercase;
220
205
  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;
206
+ min-width: 70px;
207
+ text-align: center;
225
208
  }
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;
209
+
210
+ .method-get { background: #c6f6d5; color: #22543d; }
211
+ .method-post { background: #bee3f8; color: #2c5282; }
212
+ .method-put { background: #feebc8; color: #7c2d12; }
213
+ .method-patch { background: #e9d8fd; color: #44337a; }
214
+ .method-delete { background: #fed7d7; color: #742a2a; }
215
+
216
+ .endpoint-path {
217
+ font-family: 'Courier New', monospace;
218
+ font-size: 1rem;
219
+ color: #2d3748;
220
+ font-weight: 500;
221
+ flex: 1;
302
222
  }
303
-
304
- /* Theme Toggle Button */
305
- .theme-toggle {
223
+
224
+ .endpoint-summary {
225
+ color: #718096;
226
+ font-size: 0.95rem;
227
+ line-height: 1.5;
228
+ }
229
+
230
+ .endpoint-detail {
231
+ display: none;
306
232
  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;
233
+ top: 0;
234
+ left: 0;
235
+ right: 0;
236
+ bottom: 0;
237
+ background: rgba(0,0,0,0.5);
238
+ z-index: 1000;
239
+ overflow-y: auto;
240
+ animation: fadeIn 0.3s ease-out;
241
+ }
242
+
243
+ .endpoint-detail.active {
244
+ display: flex;
245
+ align-items: center;
246
+ justify-content: center;
247
+ padding: 2rem;
248
+ }
249
+
250
+ .detail-content {
251
+ background: white;
252
+ border-radius: 16px;
253
+ max-width: 900px;
254
+ width: 100%;
255
+ max-height: 90vh;
256
+ overflow-y: auto;
257
+ box-shadow: 0 20px 60px rgba(0,0,0,0.3);
258
+ animation: slideUp 0.4s ease-out;
259
+ }
260
+
261
+ .detail-header {
262
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
263
+ color: white;
264
+ padding: 2rem;
265
+ border-radius: 16px 16px 0 0;
266
+ position: sticky;
267
+ top: 0;
268
+ z-index: 10;
269
+ }
270
+
271
+ .detail-close {
272
+ float: right;
273
+ background: rgba(255,255,255,0.2);
274
+ border: none;
275
+ color: white;
276
+ font-size: 1.5rem;
277
+ width: 40px;
278
+ height: 40px;
279
+ border-radius: 50%;
317
280
  cursor: pointer;
318
- z-index: 9998;
319
281
  transition: all 0.3s ease;
282
+ display: flex;
283
+ align-items: center;
284
+ justify-content: center;
320
285
  }
321
-
322
- .theme-toggle:hover {
323
- border-color: var(--primary-cyber);
324
- box-shadow: 0 0 15px var(--primary-glow);
286
+
287
+ .detail-close:hover {
288
+ background: rgba(255,255,255,0.3);
289
+ transform: rotate(90deg);
325
290
  }
326
- `;
291
+
292
+ .detail-body {
293
+ padding: 2rem;
327
294
  }
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
- `;
295
+
296
+ .section {
297
+ margin-bottom: 2rem;
298
+ }
299
+
300
+ .section-title {
301
+ font-size: 1.25rem;
302
+ font-weight: 600;
303
+ color: #2d3748;
304
+ margin-bottom: 1rem;
305
+ padding-bottom: 0.5rem;
306
+ border-bottom: 2px solid #e2e8f0;
307
+ }
308
+
309
+ .param-item, .response-item {
310
+ background: #f7fafc;
311
+ padding: 1rem;
312
+ border-radius: 8px;
313
+ margin-bottom: 0.75rem;
314
+ border-left: 3px solid #667eea;
315
+ }
316
+
317
+ .param-name, .response-code {
318
+ font-weight: 600;
319
+ color: #2d3748;
320
+ font-family: 'Courier New', monospace;
321
+ }
322
+
323
+ .param-type {
324
+ color: #667eea;
325
+ font-size: 0.875rem;
326
+ font-weight: 500;
327
+ margin-left: 0.5rem;
328
+ }
329
+
330
+ .param-desc {
331
+ color: #718096;
332
+ margin-top: 0.5rem;
333
+ font-size: 0.95rem;
334
+ }
335
+
336
+ .code-block {
337
+ background: #1a202c;
338
+ color: #e2e8f0;
339
+ padding: 1.5rem;
340
+ border-radius: 8px;
341
+ overflow-x: auto;
342
+ font-family: 'Courier New', monospace;
343
+ font-size: 0.9rem;
344
+ line-height: 1.6;
345
+ }
346
+
347
+ .no-results {
348
+ text-align: center;
349
+ padding: 3rem;
350
+ color: white;
351
+ font-size: 1.1rem;
352
+ }
353
+
354
+ @keyframes fadeIn {
355
+ from { opacity: 0; }
356
+ to { opacity: 1; }
357
+ }
358
+
359
+ @keyframes fadeInDown {
360
+ from { opacity: 0; transform: translateY(-20px); }
361
+ to { opacity: 1; transform: translateY(0); }
362
+ }
363
+
364
+ @keyframes fadeInUp {
365
+ from { opacity: 0; transform: translateY(20px); }
366
+ to { opacity: 1; transform: translateY(0); }
367
+ }
368
+
369
+ @keyframes slideUp {
370
+ from { opacity: 0; transform: translateY(40px); }
371
+ to { opacity: 1; transform: translateY(0); }
372
+ }
373
+
374
+ @media (max-width: 768px) {
375
+ .container { padding: 1rem; }
376
+ .header h1 { font-size: 2rem; }
377
+ .detail-content { margin: 1rem; }
378
+ }
379
+ </style>
380
+ </head>
381
+ <body>
382
+ <div class="container">
383
+ <div class="header">
384
+ <h1>${this.openApiSpec?.info?.title || 'API Documentation'}</h1>
385
+ <p>${this.openApiSpec?.info?.description || ''} ${this.openApiSpec?.info?.version ? `v${this.openApiSpec.info.version}` : ''}</p>
386
+ </div>
387
+
388
+ <div class="search-box">
389
+ <input type="text" class="search-input" id="searchInput" placeholder="🔍 Search endpoints...">
390
+ </div>
391
+
392
+ <div class="endpoints-grid" id="endpointsGrid">
393
+ ${this.renderGroupedEndpoints(groupedEndpoints)}
394
+ </div>
395
+
396
+ <div class="no-results" id="noResults" style="display: none;">
397
+ No endpoints found matching your search.
398
+ </div>
399
+ </div>
400
+
401
+ ${this.renderEndpointModals(endpoints)}
402
+
403
+ <script>
404
+ const searchInput = document.getElementById('searchInput');
405
+ const endpointsGrid = document.getElementById('endpointsGrid');
406
+ const noResults = document.getElementById('noResults');
407
+
408
+ searchInput.addEventListener('input', (e) => {
409
+ const query = e.target.value.toLowerCase();
410
+ const sections = endpointsGrid.querySelectorAll('.tag-section');
411
+ let hasResults = false;
412
+
413
+ sections.forEach(section => {
414
+ const cards = section.querySelectorAll('.endpoint-card');
415
+ let sectionHasResults = false;
416
+
417
+ cards.forEach(card => {
418
+ const text = card.textContent.toLowerCase();
419
+ if (text.includes(query)) {
420
+ card.style.display = 'block';
421
+ sectionHasResults = true;
422
+ hasResults = true;
423
+ } else {
424
+ card.style.display = 'none';
425
+ }
426
+ });
427
+
428
+ section.style.display = sectionHasResults ? 'block' : 'none';
429
+ });
430
+
431
+ noResults.style.display = hasResults ? 'none' : 'block';
432
+ endpointsGrid.style.display = hasResults ? 'grid' : 'none';
433
+ });
434
+
435
+ function openEndpoint(id) {
436
+ document.getElementById('detail-' + id).classList.add('active');
437
+ document.body.style.overflow = 'hidden';
438
+ }
439
+
440
+ function closeEndpoint(id) {
441
+ document.getElementById('detail-' + id).classList.remove('active');
442
+ document.body.style.overflow = 'auto';
443
+ }
444
+
445
+ document.querySelectorAll('.endpoint-detail').forEach(modal => {
446
+ modal.addEventListener('click', (e) => {
447
+ if (e.target === modal) {
448
+ modal.classList.remove('active');
449
+ document.body.style.overflow = 'auto';
450
+ }
451
+ });
452
+ });
453
+ </script>
454
+ </body>
455
+ </html>`;
456
+ }
457
+ groupByTag(endpoints) {
458
+ const grouped = {};
459
+ endpoints.forEach(endpoint => {
460
+ const tag = endpoint.tags[0] || 'Other';
461
+ if (!grouped[tag]) {
462
+ grouped[tag] = [];
463
+ }
464
+ grouped[tag].push(endpoint);
465
+ });
466
+ return grouped;
467
+ }
468
+ renderGroupedEndpoints(grouped) {
469
+ return Object.entries(grouped).map(([tag, endpoints]) => `
470
+ <div class="tag-section">
471
+ <div class="tag-title">
472
+ ${tag}
473
+ <span class="tag-badge">${endpoints.length}</span>
474
+ </div>
475
+ <div class="endpoint-list">
476
+ ${endpoints.map(ep => `
477
+ <div class="endpoint-card" onclick="openEndpoint('${ep.id}')">
478
+ <div class="endpoint-header">
479
+ <span class="method-badge method-${ep.method.toLowerCase()}">${ep.method}</span>
480
+ <span class="endpoint-path">${ep.path}</span>
481
+ </div>
482
+ ${ep.summary ? `<div class="endpoint-summary">${ep.summary}</div>` : ''}
483
+ </div>
484
+ `).join('')}
485
+ </div>
486
+ </div>
487
+ `).join('');
488
+ }
489
+ renderEndpointModals(endpoints) {
490
+ return endpoints.map(ep => `
491
+ <div class="endpoint-detail" id="detail-${ep.id}">
492
+ <div class="detail-content">
493
+ <div class="detail-header">
494
+ <button class="detail-close" onclick="closeEndpoint('${ep.id}')">&times;</button>
495
+ <div style="clear: both;">
496
+ <div style="display: flex; align-items: center; gap: 1rem; margin-bottom: 1rem;">
497
+ <span class="method-badge method-${ep.method.toLowerCase()}">${ep.method}</span>
498
+ <span style="font-family: 'Courier New', monospace; font-size: 1.25rem;">${ep.path}</span>
499
+ </div>
500
+ ${ep.summary ? `<p style="opacity: 0.95; font-size: 1.1rem;">${ep.summary}</p>` : ''}
501
+ </div>
502
+ </div>
503
+
504
+ <div class="detail-body">
505
+ ${ep.description ? `
506
+ <div class="section">
507
+ <div class="section-title">Description</div>
508
+ <p style="color: #4a5568; line-height: 1.6;">${ep.description}</p>
509
+ </div>
510
+ ` : ''}
511
+
512
+ ${ep.parameters && ep.parameters.length > 0 ? `
513
+ <div class="section">
514
+ <div class="section-title">Parameters</div>
515
+ ${ep.parameters.map((param) => `
516
+ <div class="param-item">
517
+ <div>
518
+ <span class="param-name">${param.name}</span>
519
+ <span class="param-type">${param.schema?.type || param.type || 'string'}</span>
520
+ ${param.required ? '<span style="color: #e53e3e; font-size: 0.875rem; margin-left: 0.5rem;">*required</span>' : ''}
521
+ </div>
522
+ <div style="color: #a0aec0; font-size: 0.875rem; margin-top: 0.25rem;">in: ${param.in}</div>
523
+ ${param.description ? `<div class="param-desc">${param.description}</div>` : ''}
524
+ </div>
525
+ `).join('')}
526
+ </div>
527
+ ` : ''}
528
+
529
+ ${ep.requestBody ? `
530
+ <div class="section">
531
+ <div class="section-title">Request Body</div>
532
+ <div class="code-block">${this.formatJson(ep.requestBody.content?.['application/json']?.schema || ep.requestBody)}</div>
533
+ </div>
534
+ ` : ''}
535
+
536
+ ${ep.responses && Object.keys(ep.responses).length > 0 ? `
537
+ <div class="section">
538
+ <div class="section-title">Responses</div>
539
+ ${Object.entries(ep.responses).map(([code, response]) => `
540
+ <div class="response-item">
541
+ <div class="response-code">Status ${code}</div>
542
+ ${response.description ? `<div class="param-desc">${response.description}</div>` : ''}
543
+ ${response.content?.['application/json']?.schema ? `
544
+ <div class="code-block" style="margin-top: 0.75rem;">${this.formatJson(response.content['application/json'].schema)}</div>
545
+ ` : ''}
546
+ </div>
547
+ `).join('')}
548
+ </div>
549
+ ` : ''}
550
+ </div>
551
+ </div>
552
+ </div>
553
+ `).join('');
554
+ }
555
+ formatJson(obj) {
556
+ return JSON.stringify(obj, null, 2)
557
+ .replace(/</g, '&lt;')
558
+ .replace(/>/g, '&gt;');
392
559
  }
393
560
  getOpenApiJson(res) {
394
561
  try {
@@ -417,6 +584,13 @@ __decorate([
417
584
  __metadata("design:paramtypes", [Object]),
418
585
  __metadata("design:returntype", void 0)
419
586
  ], DocsController.prototype, "getDocs", null);
587
+ __decorate([
588
+ (0, common_1.Get)('docs/endpoint/:tag/:operationId'),
589
+ __param(0, (0, common_1.Res)()),
590
+ __metadata("design:type", Function),
591
+ __metadata("design:paramtypes", [Object]),
592
+ __metadata("design:returntype", void 0)
593
+ ], DocsController.prototype, "getEndpointPage", null);
420
594
  __decorate([
421
595
  (0, common_1.Get)('docs-json'),
422
596
  __param(0, (0, common_1.Res)()),
@@ -441,7 +615,6 @@ exports.DocsController = DocsController = __decorate([
441
615
  (0, common_1.Controller)(),
442
616
  (0, exports.Public)(),
443
617
  __param(0, (0, common_1.Inject)('NEST_SCRAMBLE_OPENAPI')),
444
- __param(1, (0, common_1.Inject)('NEST_SCRAMBLE_OPTIONS')),
445
- __metadata("design:paramtypes", [Object, Object])
618
+ __metadata("design:paramtypes", [Object])
446
619
  ], DocsController);
447
620
  //# sourceMappingURL=DocsController.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DocsController.js","sourceRoot":"","sources":["../../src/controllers/DocsController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DocsController.js","sourceRoot":"","sources":["../../src/controllers/DocsController.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nest-scramble",
3
- "version": "1.4.7",
3
+ "version": "1.4.9",
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",