nest-scramble 2.1.1 → 2.1.2
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 +105 -5
- package/build-and-publish.sh +9 -9
- package/dist/NestScrambleModule.d.ts +0 -1
- package/dist/NestScrambleModule.d.ts.map +1 -1
- package/dist/NestScrambleModule.js +4 -6
- package/dist/NestScrambleModule.js.map +1 -1
- package/package.json +4 -4
- package/test-dto-generation.ts +0 -103
package/README.md
CHANGED
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
[](https://opensource.org/licenses/MIT)
|
|
7
7
|
[](https://github.com/Eng-MMustafa/nest-scramble)
|
|
8
8
|
[](https://github.com/Eng-MMustafa)
|
|
9
|
+
[](https://docs.nestjs.com)
|
|
10
|
+
|
|
11
|
+
## 📋 What's New in v2.1.2
|
|
12
|
+
|
|
13
|
+
### ✅ Recent Fixes & Improvements
|
|
14
|
+
- **🔧 Fixed**: baseUrl configuration now properly displays in dashboard URLs
|
|
15
|
+
- **🔧 Updated**: Enhanced NestJS compatibility (>=9.0.0)
|
|
16
|
+
- **🔧 Improved**: Simplified reflect-metadata dependency
|
|
17
|
+
- **🎯 Feature**: Full baseUrl customization support
|
|
18
|
+
|
|
19
|
+
**Dashboard URLs now respect your configuration:**
|
|
20
|
+
```typescript
|
|
21
|
+
NestScrambleModule.forRoot({
|
|
22
|
+
baseUrl: 'http://127.0.0.1:4444' // ✅ Now works perfectly!
|
|
23
|
+
})
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 📖 Full Changelog
|
|
27
|
+
Check out the [CHANGELOG.md](CHANGELOG.md) for complete version history.
|
|
28
|
+
|
|
29
|
+
---
|
|
9
30
|
|
|
10
31
|
## 🚀 Why Nest-Scramble?
|
|
11
32
|
|
|
@@ -160,6 +181,34 @@ Then open your browser:
|
|
|
160
181
|
- 🎨 Serves beautiful documentation
|
|
161
182
|
- 🎭 Provides mock endpoints
|
|
162
183
|
|
|
184
|
+
## 🔧 Compatibility & Requirements
|
|
185
|
+
|
|
186
|
+
### Supported Versions
|
|
187
|
+
- **NestJS**: `>=9.0.0` (v9.x, v10.x, and future versions)
|
|
188
|
+
- **Node.js**: `>=16.0.0`
|
|
189
|
+
- **TypeScript**: `>=4.5.0`
|
|
190
|
+
- **reflect-metadata**: `>=0.1.13` (optional)
|
|
191
|
+
|
|
192
|
+
### Package Managers
|
|
193
|
+
```bash
|
|
194
|
+
# npm
|
|
195
|
+
npm install nest-scramble
|
|
196
|
+
|
|
197
|
+
# yarn
|
|
198
|
+
yarn add nest-scramble
|
|
199
|
+
|
|
200
|
+
# pnpm
|
|
201
|
+
pnpm add nest-scramble
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Auto-Detection Features
|
|
205
|
+
Nest-Scramble automatically detects:
|
|
206
|
+
- ✅ Project structure and source directories
|
|
207
|
+
- ✅ API title and version from `package.json`
|
|
208
|
+
- ✅ Base URL from `PORT` and `HOST` environment variables
|
|
209
|
+
- ✅ TypeScript configuration and controller locations
|
|
210
|
+
- ✅ Dependencies and module relationships
|
|
211
|
+
|
|
163
212
|
## ⚙️ Configuration Options
|
|
164
213
|
|
|
165
214
|
```typescript
|
|
@@ -167,8 +216,11 @@ NestScrambleModule.forRoot({
|
|
|
167
216
|
// Source directory to scan for controllers
|
|
168
217
|
sourcePath: 'src', // default: 'src'
|
|
169
218
|
|
|
170
|
-
// API base URL for OpenAPI spec
|
|
171
|
-
baseUrl: 'http://localhost:3000', // default:
|
|
219
|
+
// API base URL for OpenAPI spec and dashboard display
|
|
220
|
+
baseUrl: 'http://localhost:3000', // default: auto-detected from PORT/HOST env
|
|
221
|
+
|
|
222
|
+
// Documentation path (customizable)
|
|
223
|
+
path: '/docs', // default: '/docs'
|
|
172
224
|
|
|
173
225
|
// Enable live mocking middleware
|
|
174
226
|
enableMock: true, // default: true
|
|
@@ -178,6 +230,20 @@ NestScrambleModule.forRoot({
|
|
|
178
230
|
|
|
179
231
|
// Postman collection output path
|
|
180
232
|
postmanOutputPath: 'collection.json', // default: 'collection.json'
|
|
233
|
+
|
|
234
|
+
// UI Theme options
|
|
235
|
+
theme: 'futuristic', // 'classic' | 'futuristic' (default: 'futuristic')
|
|
236
|
+
primaryColor: '#00f2ff', // default: '#00f2ff'
|
|
237
|
+
customDomainIcon: '', // default: ''
|
|
238
|
+
|
|
239
|
+
// API metadata (auto-detected from package.json)
|
|
240
|
+
apiTitle: 'My API', // default: auto-detected
|
|
241
|
+
apiVersion: '1.0.0', // default: auto-detected
|
|
242
|
+
|
|
243
|
+
// 🆕 Advanced Features
|
|
244
|
+
useIncrementalScanning: false, // Enable caching for faster startups
|
|
245
|
+
enableWatchMode: false, // Auto-regenerate on file changes
|
|
246
|
+
cacheTtl: 24 * 60 * 60 * 1000, // Cache TTL in milliseconds (24 hours)
|
|
181
247
|
})
|
|
182
248
|
```
|
|
183
249
|
|
|
@@ -186,10 +252,44 @@ NestScrambleModule.forRoot({
|
|
|
186
252
|
| Option | Type | Default | Description |
|
|
187
253
|
|--------|------|---------|-------------|
|
|
188
254
|
| `sourcePath` | `string` | `'src'` | Directory where your NestJS controllers are located |
|
|
189
|
-
| `baseUrl` | `string` | `
|
|
255
|
+
| `baseUrl` | `string` | `auto-detected` | Base URL for your API (used in OpenAPI spec and dashboard URLs) |
|
|
256
|
+
| `path` | `string` | `'/docs'` | Documentation endpoint path |
|
|
190
257
|
| `enableMock` | `boolean` | `true` | Enable `/scramble-mock/*` endpoints for testing |
|
|
191
258
|
| `autoExportPostman` | `boolean` | `false` | Automatically generate Postman collection file |
|
|
192
259
|
| `postmanOutputPath` | `string` | `'collection.json'` | Output path for Postman collection |
|
|
260
|
+
| `theme` | `string` | `'futuristic'` | UI theme: 'classic' or 'futuristic' |
|
|
261
|
+
| `primaryColor` | `string` | `'#00f2ff'` | Primary accent color for UI |
|
|
262
|
+
| `apiTitle` | `string` | `auto-detected` | API title (auto-detected from package.json) |
|
|
263
|
+
| `apiVersion` | `string` | `auto-detected` | API version (auto-detected from package.json) |
|
|
264
|
+
| `useIncrementalScanning` | `boolean` | `false` | Enable caching for faster startup times |
|
|
265
|
+
| `enableWatchMode` | `boolean` | `false` | Auto-regenerate docs on file changes |
|
|
266
|
+
| `cacheTtl` | `number` | `24h` | Cache time-to-live in milliseconds |
|
|
267
|
+
|
|
268
|
+
### 🎯 baseUrl Configuration
|
|
269
|
+
|
|
270
|
+
The `baseUrl` option is now properly respected in the dashboard display:
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
// Example with custom baseUrl
|
|
274
|
+
NestScrambleModule.forRoot({
|
|
275
|
+
baseUrl: 'http://127.0.0.1:4444',
|
|
276
|
+
path: '/api-docs'
|
|
277
|
+
})
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
**Dashboard Output:**
|
|
281
|
+
```
|
|
282
|
+
┌──────────────────────────────────────────────────────────┐
|
|
283
|
+
│ ✨ NEST-SCRAMBLE by Mohamed Mustafa │
|
|
284
|
+
├──────────────────────────────────────────────────────────┤
|
|
285
|
+
│ ● Documentation │
|
|
286
|
+
│ → http://127.0.0.1:4444/api-docs │
|
|
287
|
+
│ ● OpenAPI Spec │
|
|
288
|
+
│ → http://127.0.0.1:4444/api-docs-json │
|
|
289
|
+
│ ● Mock Server │
|
|
290
|
+
│ → http://127.0.0.1:4444/scramble-mock │
|
|
291
|
+
└──────────────────────────────────────────────────────────┘
|
|
292
|
+
```
|
|
193
293
|
|
|
194
294
|
## 🎭 Live Mocking Guide
|
|
195
295
|
|
|
@@ -809,7 +909,7 @@ NestScrambleModule.forRoot({
|
|
|
809
909
|
- Clear your browser cache and hard refresh (Ctrl+Shift+R / Cmd+Shift+R)
|
|
810
910
|
- Check browser console for errors
|
|
811
911
|
- Verify the `/docs-json` endpoint returns valid JSON
|
|
812
|
-
- Ensure you're using version
|
|
912
|
+
- Ensure you're using version 2.1.2 or higher: `npm list nest-scramble`
|
|
813
913
|
|
|
814
914
|
#### 3. **TypeScript Compilation Errors**
|
|
815
915
|
|
|
@@ -951,7 +1051,7 @@ getUser(@Param('id') id: string) {
|
|
|
951
1051
|
If you're still experiencing issues:
|
|
952
1052
|
|
|
953
1053
|
1. **Check the logs** - Nest-Scramble provides detailed diagnostic output on startup
|
|
954
|
-
2. **Verify your version** - Run `npm list nest-scramble` (should be
|
|
1054
|
+
2. **Verify your version** - Run `npm list nest-scramble` (should be 2.1.2+)
|
|
955
1055
|
3. **Open an issue** - [GitHub Issues](https://github.com/Eng-MMustafa/nest-scramble/issues)
|
|
956
1056
|
|
|
957
1057
|
When reporting issues, please include:
|
package/build-and-publish.sh
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
echo "🚀 Building Nest-Scramble v2.1.1..."
|
|
4
|
-
npm run build
|
|
5
|
-
|
|
6
|
-
echo "📦 Publishing to npm..."
|
|
7
|
-
npm publish
|
|
8
|
-
|
|
9
|
-
echo "✅ Done!"
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
echo "🚀 Building Nest-Scramble v2.1.1..."
|
|
4
|
+
npm run build
|
|
5
|
+
|
|
6
|
+
echo "📦 Publishing to npm..."
|
|
7
|
+
npm publish
|
|
8
|
+
|
|
9
|
+
echo "✅ Done!"
|
|
@@ -23,7 +23,6 @@ export interface NestScrambleOptions {
|
|
|
23
23
|
}
|
|
24
24
|
export declare class NestScrambleModule implements OnModuleInit {
|
|
25
25
|
private static moduleOptions;
|
|
26
|
-
private static detectedPort;
|
|
27
26
|
onModuleInit(): void;
|
|
28
27
|
private displayDashboard;
|
|
29
28
|
static forRoot(options?: NestScrambleOptions): DynamicModule;
|
|
@@ -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;AAUxG,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;IAEjC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,qBACa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,MAAM,CAAC,aAAa,CAA2B;
|
|
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;AAUxG,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;IAEjC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC;AAED,qBACa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,MAAM,CAAC,aAAa,CAA2B;IAEvD,YAAY;IAIZ,OAAO,CAAC,gBAAgB;IAsCxB,MAAM,CAAC,OAAO,CAAC,OAAO,GAAE,mBAAwB,GAAG,aAAa;IAkHhE,MAAM,CAAC,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,aAAa;IAKrE,SAAS,CAAC,QAAQ,EAAE,kBAAkB;CAMvC"}
|
|
@@ -23,9 +23,9 @@ let NestScrambleModule = NestScrambleModule_1 = class NestScrambleModule {
|
|
|
23
23
|
this.displayDashboard();
|
|
24
24
|
}
|
|
25
25
|
displayDashboard() {
|
|
26
|
-
const port = NestScrambleModule_1.detectedPort;
|
|
27
26
|
const options = NestScrambleModule_1.moduleOptions;
|
|
28
27
|
const projectStructure = AutoDetector_1.AutoDetector.detectProjectStructure();
|
|
28
|
+
const baseUrl = options.baseUrl;
|
|
29
29
|
const cyan = '\x1b[36m';
|
|
30
30
|
const purple = '\x1b[35m';
|
|
31
31
|
const green = '\x1b[32m';
|
|
@@ -40,14 +40,14 @@ let NestScrambleModule = NestScrambleModule_1 = class NestScrambleModule {
|
|
|
40
40
|
console.log(`${gradient}║${reset} ${purple}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${reset} ${gradient}║${reset}`);
|
|
41
41
|
console.log(`${gradient}║${reset} ${gradient}║${reset}`);
|
|
42
42
|
console.log(`${gradient}║${reset} ${green}●${reset} ${bold}Documentation${reset} ${gradient}║${reset}`);
|
|
43
|
-
console.log(`${gradient}║${reset} ${cyan}→${reset}
|
|
43
|
+
console.log(`${gradient}║${reset} ${cyan}→${reset} ${baseUrl}${options.path || '/docs'} ${gradient}║${reset}`);
|
|
44
44
|
console.log(`${gradient}║${reset} ${gradient}║${reset}`);
|
|
45
45
|
console.log(`${gradient}║${reset} ${green}●${reset} ${bold}OpenAPI Spec${reset} ${gradient}║${reset}`);
|
|
46
|
-
console.log(`${gradient}║${reset} ${cyan}→${reset}
|
|
46
|
+
console.log(`${gradient}║${reset} ${cyan}→${reset} ${baseUrl}${options.path || '/docs'}-json ${gradient}║${reset}`);
|
|
47
47
|
if (options.enableMock !== false) {
|
|
48
48
|
console.log(`${gradient}║${reset} ${gradient}║${reset}`);
|
|
49
49
|
console.log(`${gradient}║${reset} ${green}●${reset} ${bold}Mock Server${reset} ${gradient}║${reset}`);
|
|
50
|
-
console.log(`${gradient}║${reset} ${cyan}→${reset}
|
|
50
|
+
console.log(`${gradient}║${reset} ${cyan}→${reset} ${baseUrl}/scramble-mock ${gradient}║${reset}`);
|
|
51
51
|
}
|
|
52
52
|
console.log(`${gradient}║${reset} ${gradient}║${reset}`);
|
|
53
53
|
console.log(`${gradient}║${reset} ${purple}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${reset} ${gradient}║${reset}`);
|
|
@@ -87,7 +87,6 @@ let NestScrambleModule = NestScrambleModule_1 = class NestScrambleModule {
|
|
|
87
87
|
};
|
|
88
88
|
// Store for dashboard display
|
|
89
89
|
NestScrambleModule_1.moduleOptions = config;
|
|
90
|
-
NestScrambleModule_1.detectedPort = AutoDetector_1.AutoDetector.detectPort();
|
|
91
90
|
console.log(`\n${'='.repeat(60)}`);
|
|
92
91
|
console.log(`🚀 [Nest-Scramble] Zero-Config Auto-Detection Engine`);
|
|
93
92
|
console.log(` Developed by Mohamed Mustafa | MIT License`);
|
|
@@ -170,7 +169,6 @@ let NestScrambleModule = NestScrambleModule_1 = class NestScrambleModule {
|
|
|
170
169
|
};
|
|
171
170
|
exports.NestScrambleModule = NestScrambleModule;
|
|
172
171
|
NestScrambleModule.moduleOptions = {};
|
|
173
|
-
NestScrambleModule.detectedPort = 3000;
|
|
174
172
|
exports.NestScrambleModule = NestScrambleModule = NestScrambleModule_1 = __decorate([
|
|
175
173
|
(0, common_1.Module)({})
|
|
176
174
|
], NestScrambleModule);
|
|
@@ -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,mFAAgF;AAChF,yDAAsD;AACtD,mEAAgE;AAChE,iEAA8D;AAC9D,uDAAoD;AA4B7C,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;
|
|
1
|
+
{"version":3,"file":"NestScrambleModule.js","sourceRoot":"","sources":["../src/NestScrambleModule.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nest-scramble",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.2",
|
|
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",
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
"@typescript-eslint/parser": "^6.15.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@nestjs/common": "
|
|
50
|
-
"@nestjs/core": "
|
|
51
|
-
"reflect-metadata": "
|
|
49
|
+
"@nestjs/common": ">=9.0.0",
|
|
50
|
+
"@nestjs/core": ">=9.0.0",
|
|
51
|
+
"reflect-metadata": ">=0.1.13"
|
|
52
52
|
},
|
|
53
53
|
"peerDependenciesMeta": {
|
|
54
54
|
"reflect-metadata": {
|
package/test-dto-generation.ts
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Test file to verify DTO schema generation
|
|
3
|
-
* This file demonstrates the expected behavior
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
// Simple DTO with basic types
|
|
7
|
-
class CreateProductDto {
|
|
8
|
-
name: string;
|
|
9
|
-
price: number;
|
|
10
|
-
description: string;
|
|
11
|
-
inStock: boolean;
|
|
12
|
-
category?: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// Response DTO
|
|
16
|
-
class ProductResponseDto {
|
|
17
|
-
id: number;
|
|
18
|
-
name: string;
|
|
19
|
-
price: number;
|
|
20
|
-
description: string;
|
|
21
|
-
inStock: boolean;
|
|
22
|
-
category?: string;
|
|
23
|
-
createdAt: Date;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Expected OpenAPI Schema Output:
|
|
27
|
-
const expectedSchema = {
|
|
28
|
-
components: {
|
|
29
|
-
schemas: {
|
|
30
|
-
CreateProductDto: {
|
|
31
|
-
type: 'object',
|
|
32
|
-
properties: {
|
|
33
|
-
name: { type: 'string', example: 'John Doe' },
|
|
34
|
-
price: { type: 'number', example: 99.99 },
|
|
35
|
-
description: { type: 'string', example: 'Sample description text' },
|
|
36
|
-
inStock: { type: 'boolean', example: true },
|
|
37
|
-
category: { type: 'string', example: 'sample value' },
|
|
38
|
-
},
|
|
39
|
-
required: ['name', 'price', 'description', 'inStock'],
|
|
40
|
-
example: {
|
|
41
|
-
name: 'John Doe',
|
|
42
|
-
price: 99.99,
|
|
43
|
-
description: 'Sample description text',
|
|
44
|
-
inStock: true,
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
ProductResponseDto: {
|
|
48
|
-
type: 'object',
|
|
49
|
-
properties: {
|
|
50
|
-
id: { type: 'number', example: 1 },
|
|
51
|
-
name: { type: 'string', example: 'John Doe' },
|
|
52
|
-
price: { type: 'number', example: 99.99 },
|
|
53
|
-
description: { type: 'string', example: 'Sample description text' },
|
|
54
|
-
inStock: { type: 'boolean', example: true },
|
|
55
|
-
category: { type: 'string', example: 'sample value' },
|
|
56
|
-
createdAt: { type: 'string', format: 'date-time', example: '2024-01-01T00:00:00.000Z' },
|
|
57
|
-
},
|
|
58
|
-
required: ['id', 'name', 'price', 'description', 'inStock', 'createdAt'],
|
|
59
|
-
example: {
|
|
60
|
-
id: 1,
|
|
61
|
-
name: 'John Doe',
|
|
62
|
-
price: 99.99,
|
|
63
|
-
description: 'Sample description text',
|
|
64
|
-
inStock: true,
|
|
65
|
-
createdAt: '2024-01-01T00:00:00.000Z',
|
|
66
|
-
},
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
// Expected endpoint with request body:
|
|
73
|
-
const expectedEndpoint = {
|
|
74
|
-
'/products': {
|
|
75
|
-
post: {
|
|
76
|
-
summary: 'create',
|
|
77
|
-
requestBody: {
|
|
78
|
-
required: true,
|
|
79
|
-
content: {
|
|
80
|
-
'application/json': {
|
|
81
|
-
schema: {
|
|
82
|
-
$ref: '#/components/schemas/CreateProductDto',
|
|
83
|
-
},
|
|
84
|
-
},
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
responses: {
|
|
88
|
-
'201': {
|
|
89
|
-
description: 'Created',
|
|
90
|
-
content: {
|
|
91
|
-
'application/json': {
|
|
92
|
-
schema: {
|
|
93
|
-
$ref: '#/components/schemas/ProductResponseDto',
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
},
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
export { CreateProductDto, ProductResponseDto, expectedSchema, expectedEndpoint };
|