nest-scramble 1.5.0 → 1.6.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.
@@ -2,17 +2,22 @@ export declare const IS_PUBLIC_KEY = "isPublic";
2
2
  export declare const Public: () => import("@nestjs/common").CustomDecorator<string>;
3
3
  export declare class DocsController {
4
4
  private openApiSpec;
5
+ private endpoints;
6
+ private groupedEndpoints;
5
7
  constructor(openApiSpec: any);
6
- getDocs(res: any): void;
7
- getEndpointPage(res: any): void;
8
- private extractEndpoints;
9
- private generateMainPage;
10
8
  private groupByTag;
11
- private renderGroupedEndpoints;
12
- private renderEndpointModals;
13
9
  private formatJson;
10
+ getDocs(res: any): void;
11
+ getControllers(res: any): void;
12
+ getController(name: string, res: any): void;
13
+ getEndpoint(id: string, res: any): void;
14
+ private extractEndpoints;
15
+ private renderPage;
16
+ private renderOverview;
17
+ private renderControllersList;
18
+ private renderControllerPage;
19
+ private renderEndpointPage;
14
20
  getOpenApiJson(res: any): void;
15
- getOpenApiJsonLegacy(res: any): void;
16
21
  getOpenApiSpec(): any;
17
22
  }
18
23
  //# sourceMappingURL=DocsController.d.ts.map
@@ -1 +1 @@
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"}
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;IAKU,OAAO,CAAC,WAAW;IAJtD,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,gBAAgB,CAA2B;gBAGR,WAAW,EAAE,GAAG;IAM3D,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAQ,GAAG,EAAE,GAAG;IAWvB,cAAc,CAAQ,GAAG,EAAE,GAAG;IAc9B,aAAa,CAAgB,IAAI,EAAE,MAAM,EAAS,GAAG,EAAE,GAAG;IAsB1D,WAAW,CAAc,EAAE,EAAE,MAAM,EAAS,GAAG,EAAE,GAAG;IAwBpD,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,UAAU;IA4PlB,OAAO,CAAC,cAAc;IAgCtB,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,kBAAkB;IA0C1B,cAAc,CAAQ,GAAG,EAAE,GAAG;IAa9B,cAAc;CAGf"}
@@ -21,16 +21,90 @@ exports.Public = Public;
21
21
  let DocsController = class DocsController {
22
22
  constructor(openApiSpec) {
23
23
  this.openApiSpec = openApiSpec;
24
+ this.endpoints = this.extractEndpoints();
25
+ this.groupedEndpoints = this.groupByTag(this.endpoints);
26
+ }
27
+ groupByTag(endpoints) {
28
+ const grouped = {};
29
+ endpoints.forEach(endpoint => {
30
+ const tag = endpoint.tags?.[0] || 'Other';
31
+ if (!grouped[tag]) {
32
+ grouped[tag] = [];
33
+ }
34
+ grouped[tag].push(endpoint);
35
+ });
36
+ return grouped;
37
+ }
38
+ formatJson(obj) {
39
+ if (!obj)
40
+ return '';
41
+ try {
42
+ return JSON.stringify(obj, null, 2)
43
+ .replace(/</g, '&lt;')
44
+ .replace(/>/g, '&gt;');
45
+ }
46
+ catch (e) {
47
+ return String(obj);
48
+ }
24
49
  }
25
50
  getDocs(res) {
26
- const endpoints = this.extractEndpoints();
27
- const html = this.generateMainPage(endpoints);
51
+ const html = this.renderPage({
52
+ title: 'API Documentation',
53
+ content: this.renderOverview(),
54
+ breadcrumbs: [{ title: 'Documentation' }]
55
+ });
56
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
57
+ res.send(html);
58
+ }
59
+ getControllers(res) {
60
+ const html = this.renderPage({
61
+ title: 'Controllers - API Documentation',
62
+ content: this.renderControllersList(),
63
+ breadcrumbs: [
64
+ { title: 'Documentation', url: '/docs' },
65
+ { title: 'Controllers' }
66
+ ]
67
+ });
28
68
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
29
69
  res.send(html);
30
70
  }
31
- getEndpointPage(res) {
32
- const endpoints = this.extractEndpoints();
33
- const html = this.generateMainPage(endpoints);
71
+ getController(name, res) {
72
+ const decodedName = decodeURIComponent(name);
73
+ const endpoints = this.groupedEndpoints[decodedName] || [];
74
+ if (endpoints.length === 0) {
75
+ throw new common_1.NotFoundException('Controller not found');
76
+ }
77
+ const html = this.renderPage({
78
+ title: `${decodedName} - API Documentation`,
79
+ content: this.renderControllerPage(decodedName, endpoints),
80
+ breadcrumbs: [
81
+ { title: 'Documentation', url: '/docs' },
82
+ { title: 'Controllers', url: '/docs/controllers' },
83
+ { title: decodedName }
84
+ ]
85
+ });
86
+ res.setHeader('Content-Type', 'text/html; charset=utf-8');
87
+ res.send(html);
88
+ }
89
+ getEndpoint(id, res) {
90
+ const endpoint = this.endpoints.find(e => e.id === id);
91
+ if (!endpoint) {
92
+ throw new common_1.NotFoundException('Endpoint not found');
93
+ }
94
+ const controllerName = endpoint.tags?.[0] || 'API';
95
+ const html = this.renderPage({
96
+ title: `${endpoint.summary || endpoint.path} - API Documentation`,
97
+ content: this.renderEndpointPage(endpoint),
98
+ breadcrumbs: [
99
+ { title: 'Documentation', url: '/docs' },
100
+ { title: 'Controllers', url: '/docs/controllers' },
101
+ {
102
+ title: controllerName,
103
+ url: `/docs/controller/${encodeURIComponent(controllerName)}`
104
+ },
105
+ { title: endpoint.summary || 'Endpoint' }
106
+ ]
107
+ });
34
108
  res.setHeader('Content-Type', 'text/html; charset=utf-8');
35
109
  res.send(html);
36
110
  }
@@ -42,7 +116,7 @@ let DocsController = class DocsController {
42
116
  const details = detailsRaw;
43
117
  if (['get', 'post', 'put', 'patch', 'delete'].includes(method.toLowerCase())) {
44
118
  endpoints.push({
45
- id: `${method}-${path}`.replace(/[^a-zA-Z0-9]/g, '-'),
119
+ id: `${method}-${path}`.replace(/[^a-zA-Z0-9-]/g, '-'),
46
120
  method: method.toUpperCase(),
47
121
  path,
48
122
  summary: details.summary || '',
@@ -58,504 +132,364 @@ let DocsController = class DocsController {
58
132
  }
59
133
  return endpoints;
60
134
  }
61
- generateMainPage(endpoints) {
62
- const groupedEndpoints = this.groupByTag(endpoints);
135
+ renderPage(options) {
63
136
  return `<!DOCTYPE html>
64
137
  <html lang="en">
65
138
  <head>
66
139
  <meta charset="UTF-8">
67
140
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
68
- <title>${this.openApiSpec?.info?.title || 'API Documentation'}</title>
141
+ <title>${options.title}</title>
69
142
  <style>
143
+ :root {
144
+ /* Light theme colors */
145
+ --bg-color: #f7fafc;
146
+ --text-color: #1a202c;
147
+ --card-bg: #ffffff;
148
+ --card-border: #e2e8f0;
149
+ --card-shadow: rgba(0, 0, 0, 0.1);
150
+ --method-get: #48bb78;
151
+ --method-post: #4299e1;
152
+ --method-put: #ed8936;
153
+ --method-patch: #9f7aea;
154
+ --method-delete: #f56565;
155
+ --code-bg: #f0f4f8;
156
+ --link-color: #4299e1;
157
+ --hover-bg: #edf2f7;
158
+ }
159
+
160
+ [data-theme="dark"] {
161
+ --bg-color: #1a202c;
162
+ --text-color: #e2e8f0;
163
+ --card-bg: #2d3748;
164
+ --card-border: #4a5568;
165
+ --card-shadow: rgba(0, 0, 0, 0.3);
166
+ --method-get: #68d391;
167
+ --method-post: #63b3ed;
168
+ --method-put: #f6ad55;
169
+ --method-patch: #b794f4;
170
+ --method-delete: #fc8181;
171
+ --code-bg: #2d3748;
172
+ --link-color: #63b3ed;
173
+ --hover-bg: #4a5568;
174
+ }
175
+
70
176
  * {
71
177
  margin: 0;
72
178
  padding: 0;
73
179
  box-sizing: border-box;
180
+ transition: background-color 0.3s ease, color 0.3s ease;
74
181
  }
75
-
182
+
76
183
  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;
184
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
185
+ line-height: 1.6;
186
+ color: var(--text-color);
187
+ background-color: var(--bg-color);
188
+ max-width: 1200px;
85
189
  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 {
115
- width: 100%;
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);
190
+ padding: 20px;
191
+ min-height: 100vh;
148
192
  }
149
-
150
- .tag-title {
151
- font-size: 1.5rem;
152
- font-weight: 600;
153
- margin-bottom: 1.5rem;
154
- color: #2d3748;
193
+
194
+ .theme-toggle {
195
+ position: fixed;
196
+ top: 20px;
197
+ right: 20px;
198
+ background: var(--card-bg);
199
+ border: 1px solid var(--card-border);
200
+ color: var(--text-color);
201
+ padding: 8px 16px;
202
+ border-radius: 20px;
203
+ cursor: pointer;
155
204
  display: flex;
156
205
  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;
164
- border-radius: 20px;
165
- font-size: 0.875rem;
166
- font-weight: 500;
206
+ gap: 8px;
207
+ z-index: 1000;
208
+ box-shadow: 0 2px 4px var(--card-shadow);
209
+ }
210
+
211
+ .theme-toggle:hover {
212
+ background: var(--hover-bg);
213
+ }
214
+
215
+ .theme-toggle svg {
216
+ width: 16px;
217
+ height: 16px;
218
+ }
219
+
220
+ .breadcrumb {
221
+ margin: 40px 0 20px;
222
+ padding: 10px 0;
223
+ border-bottom: 1px solid var(--card-border);
224
+ }
225
+
226
+ .breadcrumb a {
227
+ color: var(--link-color);
228
+ text-decoration: none;
167
229
  }
168
-
169
- .endpoint-list {
170
- display: grid;
171
- gap: 1rem;
230
+
231
+ .breadcrumb a:hover {
232
+ text-decoration: underline;
172
233
  }
173
-
234
+
235
+ .method {
236
+ display: inline-block;
237
+ padding: 2px 8px;
238
+ border-radius: 3px;
239
+ color: white;
240
+ font-weight: bold;
241
+ margin-right: 10px;
242
+ font-size: 0.8em;
243
+ }
244
+
245
+ .get { background: var(--method-get); }
246
+ .post { background: var(--method-post); }
247
+ .put { background: var(--method-put); }
248
+ .patch { background: var(--method-patch); }
249
+ .delete { background: var(--method-delete); }
250
+
174
251
  .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;
252
+ background: var(--card-bg);
253
+ margin: 15px 0;
254
+ padding: 15px;
255
+ border: 1px solid var(--card-border);
256
+ border-radius: 8px;
257
+ box-shadow: 0 1px 3px var(--card-shadow);
258
+ transition: all 0.2s ease;
183
259
  }
184
-
260
+
185
261
  .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);
262
+ transform: translateY(-2px);
263
+ box-shadow: 0 4px 6px rgba(0,0,0,0.1);
190
264
  }
191
-
265
+
192
266
  .endpoint-header {
193
267
  display: flex;
194
268
  align-items: center;
195
- gap: 1rem;
196
- margin-bottom: 0.75rem;
269
+ margin-bottom: 10px;
197
270
  }
198
-
199
- .method-badge {
200
- padding: 0.375rem 0.875rem;
201
- border-radius: 6px;
202
- font-weight: 600;
203
- font-size: 0.875rem;
204
- text-transform: uppercase;
205
- letter-spacing: 0.5px;
206
- min-width: 70px;
207
- text-align: center;
208
- }
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
-
271
+
216
272
  .endpoint-path {
217
273
  font-family: 'Courier New', monospace;
218
- font-size: 1rem;
219
- color: #2d3748;
220
- font-weight: 500;
221
- flex: 1;
274
+ font-size: 1.1em;
275
+ color: var(--text-color);
222
276
  }
223
-
277
+
224
278
  .endpoint-summary {
225
- color: #718096;
226
- font-size: 0.95rem;
227
- line-height: 1.5;
228
- }
229
-
230
- .endpoint-detail {
231
- display: none;
232
- position: fixed;
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%;
280
- cursor: pointer;
281
- transition: all 0.3s ease;
282
- display: flex;
283
- align-items: center;
284
- justify-content: center;
285
- }
286
-
287
- .detail-close:hover {
288
- background: rgba(255,255,255,0.3);
289
- transform: rotate(90deg);
290
- }
291
-
292
- .detail-body {
293
- padding: 2rem;
279
+ color: var(--text-color);
280
+ opacity: 0.9;
281
+ margin-top: 8px;
294
282
  }
295
-
283
+
296
284
  .section {
297
285
  margin-bottom: 2rem;
298
286
  }
299
-
300
- .section-title {
301
- font-size: 1.25rem;
302
- font-weight: 600;
303
- color: #2d3748;
287
+
288
+ h1 {
289
+ color: var(--text-color);
304
290
  margin-bottom: 1rem;
305
- padding-bottom: 0.5rem;
306
- border-bottom: 2px solid #e2e8f0;
307
291
  }
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;
292
+
293
+ h2 {
294
+ color: var(--text-color);
295
+ margin: 1.5rem 0 1rem;
296
+ font-size: 1.5rem;
328
297
  }
329
-
330
- .param-desc {
331
- color: #718096;
332
- margin-top: 0.5rem;
333
- font-size: 0.95rem;
298
+
299
+ h3 {
300
+ color: var(--text-color);
301
+ margin: 1.25rem 0 0.75rem;
302
+ font-size: 1.25rem;
334
303
  }
335
-
336
- .code-block {
337
- background: #1a202c;
338
- color: #e2e8f0;
339
- padding: 1.5rem;
340
- border-radius: 8px;
304
+
305
+ pre {
306
+ background: var(--code-bg);
307
+ padding: 1rem;
308
+ border-radius: 4px;
341
309
  overflow-x: auto;
342
310
  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; }
311
+ font-size: 0.9em;
312
+ border: 1px solid var(--card-border);
313
+ }
314
+
315
+ code {
316
+ background: var(--code-bg);
317
+ padding: 2px 4px;
318
+ border-radius: 3px;
319
+ font-family: 'Courier New', monospace;
320
+ font-size: 0.9em;
321
+ border: 1px solid var(--card-border);
378
322
  }
379
323
  </style>
380
324
  </head>
381
325
  <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>
326
+ <button class="theme-toggle" id="themeToggle">
327
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
328
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z" />
329
+ </svg>
330
+ <span>Dark Mode</span>
331
+ </button>
332
+ <div class="breadcrumb">
333
+ ${options.breadcrumbs
334
+ .map((crumb, index) => crumb.url
335
+ ? `<a href="${crumb.url}">${crumb.title}</a>`
336
+ : `<span>${crumb.title}</span>`)
337
+ .join(' &raquo; ')}
399
338
  </div>
400
339
 
401
- ${this.renderEndpointModals(endpoints)}
402
-
340
+ <main>
341
+ ${options.content}
342
+ </main>
403
343
  <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;
344
+ // Theme toggle functionality
345
+ const themeToggle = document.getElementById('themeToggle');
346
+ const prefersDarkScheme = window.matchMedia('(prefers-color-scheme: dark)');
347
+
348
+ // Check for saved user preference or use system preference
349
+ const currentTheme = localStorage.getItem('theme') || (prefersDarkScheme.matches ? 'dark' : 'light');
350
+ document.documentElement.setAttribute('data-theme', currentTheme);
351
+ updateButtonText(currentTheme);
352
+
353
+ // Toggle theme on button click
354
+ themeToggle.addEventListener('click', () => {
355
+ const currentTheme = document.documentElement.getAttribute('data-theme');
356
+ const newTheme = currentTheme === 'dark' ? 'light' : 'dark';
412
357
 
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';
358
+ document.documentElement.setAttribute('data-theme', newTheme);
359
+ localStorage.setItem('theme', newTheme);
360
+ updateButtonText(newTheme);
433
361
  });
434
362
 
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';
363
+ // Update button text based on current theme
364
+ function updateButtonText(theme) {
365
+ const icon = themeToggle.querySelector('svg');
366
+ const text = themeToggle.querySelector('span');
367
+
368
+ if (theme === 'dark') {
369
+ icon.innerHTML = '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z" />';
370
+ text.textContent = 'Light Mode';
371
+ } else {
372
+ icon.innerHTML = '<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z" />';
373
+ text.textContent = 'Dark Mode';
374
+ }
443
375
  }
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
376
  </script>
454
377
  </body>
455
378
  </html>`;
456
379
  }
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;
380
+ renderOverview() {
381
+ return `
382
+ <h1>API Documentation</h1>
383
+ <p>Welcome to the API documentation. Browse through the available controllers and endpoints.</p>
384
+
385
+ <h2>Controllers</h2>
386
+ <div>
387
+ ${Object.entries(this.groupedEndpoints)
388
+ .map(([name, endpoints]) => `
389
+ <div class="endpoint-card">
390
+ <h3>
391
+ <a href="/docs/controller/${encodeURIComponent(name)}">${name}</a>
392
+ <small>(${endpoints.length} endpoints)</small>
393
+ </h3>
394
+ ${endpoints.slice(0, 3).map(ep => `
395
+ <div class="endpoint-summary">
396
+ <span class="method ${ep.method.toLowerCase()}">${ep.method}</span>
397
+ <a href="/docs/endpoint/${ep.id}">${ep.path}</a>
398
+ ${ep.summary ? `<span> - ${ep.summary}</span>` : ''}
399
+ </div>
400
+ `).join('')}
401
+ ${endpoints.length > 3 ?
402
+ `<div style="margin-top: 8px;">
403
+ <a href="/docs/controller/${encodeURIComponent(name)}">+ ${endpoints.length - 3} more endpoints</a>
404
+ </div>`
405
+ : ''}
406
+ </div>
407
+ `).join('')}
408
+ </div>
409
+ `;
467
410
  }
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>` : ''}
411
+ renderControllersList() {
412
+ return `
413
+ <h1>Controllers</h1>
414
+ <p>Select a controller to view its endpoints.</p>
415
+
416
+ <div>
417
+ ${Object.entries(this.groupedEndpoints)
418
+ .map(([name, endpoints]) => `
419
+ <div class="endpoint-card">
420
+ <h3>
421
+ <a href="/docs/controller/${encodeURIComponent(name)}">${name}</a>
422
+ <small>(${endpoints.length} endpoints)</small>
423
+ </h3>
424
+ ${endpoints.map(ep => `
425
+ <div class="endpoint-summary">
426
+ <span class="method ${ep.method.toLowerCase()}">${ep.method}</span>
427
+ <a href="/docs/endpoint/${ep.id}">${ep.path}</a>
428
+ ${ep.summary ? `<span> - ${ep.summary}</span>` : ''}
429
+ </div>
430
+ `).join('')}
483
431
  </div>
484
432
  `).join('')}
485
- </div>
486
433
  </div>
487
- `).join('');
434
+ `;
488
435
  }
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>` : ''}
436
+ renderControllerPage(name, endpoints) {
437
+ return `
438
+ <h1>${name}</h1>
439
+ <p>Endpoints in this controller:</p>
440
+
441
+ <div>
442
+ ${endpoints.map(ep => `
443
+ <div class="endpoint-card">
444
+ <div class="endpoint-header">
445
+ <span class="method ${ep.method.toLowerCase()}">${ep.method}</span>
446
+ <a href="/docs/endpoint/${ep.id}" class="endpoint-path">${ep.path}</a>
501
447
  </div>
448
+ ${ep.summary ? `<div class="endpoint-summary">${ep.summary}</div>` : ''}
502
449
  </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>
450
+ `).join('')}
552
451
  </div>
553
- `).join('');
452
+ `;
554
453
  }
555
- formatJson(obj) {
556
- return JSON.stringify(obj, null, 2)
557
- .replace(/</g, '&lt;')
558
- .replace(/>/g, '&gt;');
454
+ renderEndpointPage(endpoint) {
455
+ return `
456
+ <div class="endpoint-card">
457
+ <div class="endpoint-header">
458
+ <span class="method ${endpoint.method.toLowerCase()}">${endpoint.method}</span>
459
+ <span class="endpoint-path">${endpoint.path}</span>
460
+ </div>
461
+
462
+ ${endpoint.summary ? `<h2>${endpoint.summary}</h2>` : ''}
463
+
464
+ ${endpoint.description ? `
465
+ <div class="section">
466
+ <h3>Description</h3>
467
+ <p>${endpoint.description}</p>
468
+ </div>
469
+ ` : ''}
470
+
471
+ ${endpoint.parameters?.length ? `
472
+ <div class="section">
473
+ <h3>Parameters</h3>
474
+ <pre>${this.formatJson(endpoint.parameters)}</pre>
475
+ </div>
476
+ ` : ''}
477
+
478
+ ${endpoint.requestBody ? `
479
+ <div class="section">
480
+ <h3>Request Body</h3>
481
+ <pre>${this.formatJson(endpoint.requestBody)}</pre>
482
+ </div>
483
+ ` : ''}
484
+
485
+ ${endpoint.responses ? `
486
+ <div class="section">
487
+ <h3>Responses</h3>
488
+ <pre>${this.formatJson(endpoint.responses)}</pre>
489
+ </div>
490
+ ` : ''}
491
+ </div>
492
+ `;
559
493
  }
560
494
  getOpenApiJson(res) {
561
495
  try {
@@ -569,9 +503,6 @@ let DocsController = class DocsController {
569
503
  res.status(500).json({ error: 'Failed to generate OpenAPI specification' });
570
504
  }
571
505
  }
572
- getOpenApiJsonLegacy(res) {
573
- return this.getOpenApiJson(res);
574
- }
575
506
  getOpenApiSpec() {
576
507
  return this.openApiSpec;
577
508
  }
@@ -585,26 +516,35 @@ __decorate([
585
516
  __metadata("design:returntype", void 0)
586
517
  ], DocsController.prototype, "getDocs", null);
587
518
  __decorate([
588
- (0, common_1.Get)('docs/endpoint/:tag/:operationId'),
519
+ (0, common_1.Get)('docs/controllers'),
589
520
  __param(0, (0, common_1.Res)()),
590
521
  __metadata("design:type", Function),
591
522
  __metadata("design:paramtypes", [Object]),
592
523
  __metadata("design:returntype", void 0)
593
- ], DocsController.prototype, "getEndpointPage", null);
524
+ ], DocsController.prototype, "getControllers", null);
594
525
  __decorate([
595
- (0, common_1.Get)('docs-json'),
596
- __param(0, (0, common_1.Res)()),
526
+ (0, common_1.Get)('docs/controller/:name'),
527
+ __param(0, (0, common_1.Param)('name')),
528
+ __param(1, (0, common_1.Res)()),
597
529
  __metadata("design:type", Function),
598
- __metadata("design:paramtypes", [Object]),
530
+ __metadata("design:paramtypes", [String, Object]),
599
531
  __metadata("design:returntype", void 0)
600
- ], DocsController.prototype, "getOpenApiJson", null);
532
+ ], DocsController.prototype, "getController", null);
533
+ __decorate([
534
+ (0, common_1.Get)('docs/endpoint/:id'),
535
+ __param(0, (0, common_1.Param)('id')),
536
+ __param(1, (0, common_1.Res)()),
537
+ __metadata("design:type", Function),
538
+ __metadata("design:paramtypes", [String, Object]),
539
+ __metadata("design:returntype", void 0)
540
+ ], DocsController.prototype, "getEndpoint", null);
601
541
  __decorate([
602
542
  (0, common_1.Get)('docs/json'),
603
543
  __param(0, (0, common_1.Res)()),
604
544
  __metadata("design:type", Function),
605
545
  __metadata("design:paramtypes", [Object]),
606
546
  __metadata("design:returntype", void 0)
607
- ], DocsController.prototype, "getOpenApiJsonLegacy", null);
547
+ ], DocsController.prototype, "getOpenApiJson", null);
608
548
  __decorate([
609
549
  (0, common_1.Get)('docs/spec'),
610
550
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"DocsController.js","sourceRoot":"","sources":["../../src/controllers/DocsController.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kEAAkE;AAClE,2CAA2E;AAE9D,QAAA,aAAa,GAAG,UAAU,CAAC;AACjC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,qBAAa,EAAE,IAAI,CAAC,CAAC;AAAhD,QAAA,MAAM,UAA0C;AAItD,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAC2C,WAAgB;QAAhB,gBAAW,GAAX,WAAW,CAAK;IACxD,CAAC;IAGJ,OAAO,CAAQ,GAAQ;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9C,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAGD,eAAe,CAAQ,GAAQ;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC9C,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IAEO,gBAAgB;QACtB,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;QAE5C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,KAAK,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAc,CAAC,EAAE,CAAC;gBAClE,MAAM,OAAO,GAAG,UAAiB,CAAC;gBAClC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC7E,SAAS,CAAC,IAAI,CAAC;wBACb,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;wBACrD,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;wBAC5B,IAAI;wBACJ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;wBAC9B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;wBACtC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;wBACxB,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;wBACpC,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;wBAClC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,GAAG,MAAM,IAAI,IAAI,EAAE;qBACxD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,gBAAgB,CAAC,SAAgB;QACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAEpD,OAAO;;;;;WAKA,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,IAAI,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4TnD,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,IAAI,mBAAmB;WACrD,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;QAQ1H,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC;;;;;;;;IAQjD,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsDhC,CAAC;IACP,CAAC;IAEO,UAAU,CAAC,SAAgB;QACjC,MAAM,OAAO,GAA6B,EAAE,CAAC;QAE7C,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACpB,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,sBAAsB,CAAC,OAAiC;QAC9D,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;;;YAGjD,GAAG;oCACqB,SAAS,CAAC,MAAM;;;YAGxC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gEACgC,EAAE,CAAC,EAAE;;mDAElB,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,MAAM;8CAC1C,EAAE,CAAC,IAAI;;gBAErC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,iCAAiC,EAAE,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE;;WAE1E,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;KAGhB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAEO,oBAAoB,CAAC,SAAgB;QAC3C,OAAO,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gDACiB,EAAE,CAAC,EAAE;;;mEAGc,EAAE,CAAC,EAAE;;;mDAGrB,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,MAAM;2FACG,EAAE,CAAC,IAAI;;gBAElF,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,gDAAgD,EAAE,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE;;;;;cAKpF,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;;;+DAGgC,EAAE,CAAC,WAAW;;aAEhE,CAAC,CAAC,CAAC,EAAE;;cAEJ,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;;kBAGxC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC;;;iDAGH,KAAK,CAAC,IAAI;iDACV,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,QAAQ;wBACrE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,0FAA0F,CAAC,CAAC,CAAC,EAAE;;iGAEvC,KAAK,CAAC,EAAE;sBACnF,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,2BAA2B,KAAK,CAAC,WAAW,QAAQ,CAAC,CAAC,CAAC,EAAE;;iBAElF,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;aAEd,CAAC,CAAC,CAAC,EAAE;;cAEJ,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;;;0CAGW,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,WAAW,CAAC;;aAEpH,CAAC,CAAC,CAAC,EAAE;;cAEJ,EAAE,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;;kBAGnD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAgB,EAAE,EAAE,CAAC;;wDAEhC,IAAI;sBACtC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,2BAA2B,QAAQ,CAAC,WAAW,QAAQ,CAAC,CAAC,CAAC,EAAE;sBACnF,QAAQ,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;6EACM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC;qBACpH,CAAC,CAAC,CAAC,EAAE;;iBAET,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;aAEd,CAAC,CAAC,CAAC,EAAE;;;;KAIb,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,GAAQ;QACzB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;aAChC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3B,CAAC;IAGD,cAAc,CAAQ,GAAQ;QAC5B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7D,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;YACjE,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;YAClD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;YACxE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAGD,oBAAoB,CAAQ,GAAQ;QAClC,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAGD,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF,CAAA;AAjkBY,wCAAc;AAMzB;IADC,IAAA,YAAG,EAAC,MAAM,CAAC;IACH,WAAA,IAAA,YAAG,GAAE,CAAA;;;;6CAKb;AAGD;IADC,IAAA,YAAG,EAAC,iCAAiC,CAAC;IACtB,WAAA,IAAA,YAAG,GAAE,CAAA;;;;qDAKrB;AAyhBD;IADC,IAAA,YAAG,EAAC,WAAW,CAAC;IACD,WAAA,IAAA,YAAG,GAAE,CAAA;;;;oDAUpB;AAGD;IADC,IAAA,YAAG,EAAC,WAAW,CAAC;IACK,WAAA,IAAA,YAAG,GAAE,CAAA;;;;0DAE1B;AAGD;IADC,IAAA,YAAG,EAAC,WAAW,CAAC;;;;oDAGhB;yBAhkBU,cAAc;IAF1B,IAAA,mBAAU,GAAE;IACZ,IAAA,cAAM,GAAE;IAGJ,WAAA,IAAA,eAAM,EAAC,uBAAuB,CAAC,CAAA;;GAFvB,cAAc,CAikB1B"}
1
+ {"version":3,"file":"DocsController.js","sourceRoot":"","sources":["../../src/controllers/DocsController.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,58 +1,58 @@
1
- {
2
- "name": "nest-scramble",
3
- "version": "1.5.0",
4
- "description": "A next-generation, decorator-free API documentation engine and intelligent mock server for NestJS, engineered by Mohamed Mustafa",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "bin": {
8
- "nest-scramble": "dist/cli.js"
9
- },
10
- "scripts": {
11
- "build": "rimraf dist && tsc",
12
- "dev": "tsc --watch",
13
- "test": "jest",
14
- "lint": "eslint src/**/*.ts",
15
- "lint:fix": "eslint src/**/*.ts --fix",
16
- "watch-generate": "node scripts/watch-generate.js"
17
- },
18
- "keywords": [
19
- "nestjs",
20
- "documentation",
21
- "static-analysis",
22
- "ast",
23
- "postman",
24
- "mocking",
25
- "mohamed-mustafa",
26
- "typescript",
27
- "zero-config"
28
- ],
29
- "author": "Mohamed Mustafa <https://github.com/Eng-MMustafa>",
30
- "license": "MIT",
31
- "dependencies": {
32
- "ts-morph": "^21.0.1",
33
- "@faker-js/faker": "^8.4.1",
34
- "commander": "^11.1.0"
35
- },
36
- "devDependencies": {
37
- "@types/express": "^4.17.21",
38
- "@types/node": "^20.10.0",
39
- "chokidar": "^3.5.3",
40
- "typescript": "^5.3.0",
41
- "rimraf": "^5.0.5",
42
- "jest": "^29.7.0",
43
- "@types/jest": "^29.5.8",
44
- "eslint": "^8.56.0",
45
- "@typescript-eslint/eslint-plugin": "^6.15.0",
46
- "@typescript-eslint/parser": "^6.15.0"
47
- },
48
- "peerDependencies": {
49
- "@nestjs/common": "^10.0.0",
50
- "@nestjs/core": "^10.0.0",
51
- "reflect-metadata": "^0.1.13 || ^0.2.0"
52
- },
53
- "peerDependenciesMeta": {
54
- "reflect-metadata": {
55
- "optional": true
56
- }
57
- }
1
+ {
2
+ "name": "nest-scramble",
3
+ "version": "1.6.0",
4
+ "description": "A next-generation, decorator-free API documentation engine and intelligent mock server for NestJS, engineered by Mohamed Mustafa",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "nest-scramble": "dist/cli.js"
9
+ },
10
+ "scripts": {
11
+ "build": "rimraf dist && tsc",
12
+ "dev": "tsc --watch",
13
+ "test": "jest",
14
+ "lint": "eslint src/**/*.ts",
15
+ "lint:fix": "eslint src/**/*.ts --fix",
16
+ "watch-generate": "node scripts/watch-generate.js"
17
+ },
18
+ "keywords": [
19
+ "nestjs",
20
+ "documentation",
21
+ "static-analysis",
22
+ "ast",
23
+ "postman",
24
+ "mocking",
25
+ "mohamed-mustafa",
26
+ "typescript",
27
+ "zero-config"
28
+ ],
29
+ "author": "Mohamed Mustafa <https://github.com/Eng-MMustafa>",
30
+ "license": "MIT",
31
+ "dependencies": {
32
+ "ts-morph": "^21.0.1",
33
+ "@faker-js/faker": "^8.4.1",
34
+ "commander": "^11.1.0"
35
+ },
36
+ "devDependencies": {
37
+ "@types/express": "^4.17.21",
38
+ "@types/node": "^20.10.0",
39
+ "chokidar": "^3.5.3",
40
+ "typescript": "^5.3.0",
41
+ "rimraf": "^5.0.5",
42
+ "jest": "^29.7.0",
43
+ "@types/jest": "^29.5.8",
44
+ "eslint": "^8.56.0",
45
+ "@typescript-eslint/eslint-plugin": "^6.15.0",
46
+ "@typescript-eslint/parser": "^6.15.0"
47
+ },
48
+ "peerDependencies": {
49
+ "@nestjs/common": "^10.0.0",
50
+ "@nestjs/core": "^10.0.0",
51
+ "reflect-metadata": "^0.1.13 || ^0.2.0"
52
+ },
53
+ "peerDependenciesMeta": {
54
+ "reflect-metadata": {
55
+ "optional": true
56
+ }
57
+ }
58
58
  }