moahmedwafy commited on
Commit
721abf7
·
1 Parent(s): 6b93ce2

feat: init docs

Browse files
package-lock.json CHANGED
@@ -25,7 +25,8 @@
25
  "mongoose": "^8.0.3",
26
  "npm": "^10.2.5",
27
  "path": "^0.12.7",
28
- "tsc-alias": "^1.8.8"
 
29
  },
30
  "devDependencies": {
31
  "@types/express": "^4.17.21",
@@ -36,11 +37,15 @@
36
  "typescript": "^5.3.3"
37
  }
38
  },
 
 
 
 
 
39
  "node_modules/@cspotcode/source-map-support": {
40
  "version": "0.8.1",
41
  "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
42
  "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
43
- "dev": true,
44
  "dependencies": {
45
  "@jridgewell/trace-mapping": "0.3.9"
46
  },
@@ -160,7 +165,6 @@
160
  "version": "3.1.1",
161
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
162
  "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
163
- "dev": true,
164
  "engines": {
165
  "node": ">=6.0.0"
166
  }
@@ -168,14 +172,12 @@
168
  "node_modules/@jridgewell/sourcemap-codec": {
169
  "version": "1.4.15",
170
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
171
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
172
- "dev": true
173
  },
174
  "node_modules/@jridgewell/trace-mapping": {
175
  "version": "0.3.9",
176
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
177
  "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
178
- "dev": true,
179
  "dependencies": {
180
  "@jridgewell/resolve-uri": "^3.0.3",
181
  "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -284,32 +286,28 @@
284
  "node_modules/@tsconfig/node10": {
285
  "version": "1.0.9",
286
  "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
287
- "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
288
- "dev": true
289
  },
290
  "node_modules/@tsconfig/node12": {
291
  "version": "1.0.11",
292
  "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
293
- "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==",
294
- "dev": true
295
  },
296
  "node_modules/@tsconfig/node14": {
297
  "version": "1.0.3",
298
  "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
299
- "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==",
300
- "dev": true
301
  },
302
  "node_modules/@tsconfig/node16": {
303
  "version": "1.0.4",
304
  "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
305
- "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
306
- "dev": true
307
  },
308
  "node_modules/@types/body-parser": {
309
  "version": "1.19.5",
310
  "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
311
  "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
312
- "dev": true,
313
  "dependencies": {
314
  "@types/connect": "*",
315
  "@types/node": "*"
@@ -319,7 +317,7 @@
319
  "version": "3.4.38",
320
  "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
321
  "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
322
- "dev": true,
323
  "dependencies": {
324
  "@types/node": "*"
325
  }
@@ -328,7 +326,7 @@
328
  "version": "4.17.21",
329
  "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
330
  "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
331
- "dev": true,
332
  "dependencies": {
333
  "@types/body-parser": "*",
334
  "@types/express-serve-static-core": "^4.17.33",
@@ -340,7 +338,7 @@
340
  "version": "4.17.41",
341
  "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz",
342
  "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==",
343
- "dev": true,
344
  "dependencies": {
345
  "@types/node": "*",
346
  "@types/qs": "*",
@@ -361,13 +359,26 @@
361
  "version": "2.0.4",
362
  "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
363
  "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
364
- "dev": true
 
 
 
 
 
 
 
 
 
 
 
 
 
365
  },
366
  "node_modules/@types/mime": {
367
  "version": "1.3.5",
368
  "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
369
  "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
370
- "dev": true
371
  },
372
  "node_modules/@types/minimatch": {
373
  "version": "5.1.2",
@@ -386,19 +397,19 @@
386
  "version": "6.9.11",
387
  "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
388
  "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
389
- "dev": true
390
  },
391
  "node_modules/@types/range-parser": {
392
  "version": "1.2.7",
393
  "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
394
  "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
395
- "dev": true
396
  },
397
  "node_modules/@types/send": {
398
  "version": "0.17.4",
399
  "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
400
  "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
401
- "dev": true,
402
  "dependencies": {
403
  "@types/mime": "^1",
404
  "@types/node": "*"
@@ -408,7 +419,7 @@
408
  "version": "1.15.5",
409
  "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
410
  "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
411
- "dev": true,
412
  "dependencies": {
413
  "@types/http-errors": "*",
414
  "@types/mime": "*",
@@ -462,7 +473,6 @@
462
  "version": "8.11.2",
463
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
464
  "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
465
- "dev": true,
466
  "bin": {
467
  "acorn": "bin/acorn"
468
  },
@@ -474,7 +484,6 @@
474
  "version": "8.3.1",
475
  "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz",
476
  "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==",
477
- "dev": true,
478
  "engines": {
479
  "node": ">=0.4.0"
480
  }
@@ -541,8 +550,7 @@
541
  "node_modules/arg": {
542
  "version": "4.1.3",
543
  "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
544
- "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==",
545
- "dev": true
546
  },
547
  "node_modules/array-flatten": {
548
  "version": "1.1.1",
@@ -682,6 +690,49 @@
682
  "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
683
  "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
684
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
685
  "node_modules/color-convert": {
686
  "version": "2.0.1",
687
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -771,8 +822,7 @@
771
  "node_modules/create-require": {
772
  "version": "1.1.1",
773
  "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
774
- "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==",
775
- "dev": true
776
  },
777
  "node_modules/cross-spawn": {
778
  "version": "7.0.3",
@@ -850,7 +900,6 @@
850
  "version": "4.0.2",
851
  "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
852
  "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
853
- "dev": true,
854
  "engines": {
855
  "node": ">=0.3.1"
856
  }
@@ -917,6 +966,14 @@
917
  "node": ">= 0.8"
918
  }
919
  },
 
 
 
 
 
 
 
 
920
  "node_modules/escape-html": {
921
  "version": "1.0.3",
922
  "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -930,6 +987,11 @@
930
  "node": ">= 0.6"
931
  }
932
  },
 
 
 
 
 
933
  "node_modules/express": {
934
  "version": "4.18.2",
935
  "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
@@ -1096,6 +1158,25 @@
1096
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1097
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1098
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1099
  "node_modules/foreground-child": {
1100
  "version": "3.1.1",
1101
  "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
@@ -1205,6 +1286,14 @@
1205
  "node": ">=10"
1206
  }
1207
  },
 
 
 
 
 
 
 
 
1208
  "node_modules/get-intrinsic": {
1209
  "version": "1.2.2",
1210
  "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
@@ -1381,6 +1470,42 @@
1381
  "node": ">= 0.8"
1382
  }
1383
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1384
  "node_modules/https-proxy-agent": {
1385
  "version": "5.0.1",
1386
  "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
@@ -1506,6 +1631,17 @@
1506
  "node": ">=0.12.0"
1507
  }
1508
  },
 
 
 
 
 
 
 
 
 
 
 
1509
  "node_modules/isexe": {
1510
  "version": "2.0.0",
1511
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -1540,6 +1676,15 @@
1540
  "@sideway/pinpoint": "^2.0.0"
1541
  }
1542
  },
 
 
 
 
 
 
 
 
 
1543
  "node_modules/json5": {
1544
  "version": "2.2.3",
1545
  "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
@@ -1671,8 +1816,7 @@
1671
  "node_modules/make-error": {
1672
  "version": "1.3.6",
1673
  "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
1674
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
1675
- "dev": true
1676
  },
1677
  "node_modules/media-typer": {
1678
  "version": "0.3.0",
@@ -4807,6 +4951,11 @@
4807
  "wrappy": "1"
4808
  }
4809
  },
 
 
 
 
 
4810
  "node_modules/parseurl": {
4811
  "version": "1.3.3",
4812
  "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -4824,6 +4973,11 @@
4824
  "util": "^0.10.3"
4825
  }
4826
  },
 
 
 
 
 
4827
  "node_modules/path-is-absolute": {
4828
  "version": "1.0.1",
4829
  "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -5011,6 +5165,19 @@
5011
  "node": ">=8.10.0"
5012
  }
5013
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
5014
  "node_modules/resolve": {
5015
  "version": "1.22.8",
5016
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@@ -5111,6 +5278,14 @@
5111
  }
5112
  ]
5113
  },
 
 
 
 
 
 
 
 
5114
  "node_modules/safer-buffer": {
5115
  "version": "2.1.2",
5116
  "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
@@ -5406,6 +5581,25 @@
5406
  "url": "https://github.com/sponsors/ljharb"
5407
  }
5408
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5409
  "node_modules/tar": {
5410
  "version": "6.2.0",
5411
  "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
@@ -5477,7 +5671,6 @@
5477
  "version": "10.9.2",
5478
  "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
5479
  "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
5480
- "dev": true,
5481
  "dependencies": {
5482
  "@cspotcode/source-map-support": "^0.8.0",
5483
  "@tsconfig/node10": "^1.0.7",
@@ -5624,6 +5817,81 @@
5624
  "node": ">=6"
5625
  }
5626
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5627
  "node_modules/type-is": {
5628
  "version": "1.6.18",
5629
  "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -5640,7 +5908,60 @@
5640
  "version": "5.3.3",
5641
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
5642
  "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
5643
- "dev": true,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5644
  "bin": {
5645
  "tsc": "bin/tsc",
5646
  "tsserver": "bin/tsserver"
@@ -5697,8 +6018,7 @@
5697
  "node_modules/v8-compile-cache-lib": {
5698
  "version": "3.0.1",
5699
  "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
5700
- "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==",
5701
- "dev": true
5702
  },
5703
  "node_modules/vary": {
5704
  "version": "1.1.2",
@@ -5857,16 +6177,48 @@
5857
  "node": ">=0.4"
5858
  }
5859
  },
 
 
 
 
 
 
 
 
5860
  "node_modules/yallist": {
5861
  "version": "4.0.0",
5862
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
5863
  "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
5864
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5865
  "node_modules/yn": {
5866
  "version": "3.1.1",
5867
  "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
5868
  "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
5869
- "dev": true,
5870
  "engines": {
5871
  "node": ">=6"
5872
  }
 
25
  "mongoose": "^8.0.3",
26
  "npm": "^10.2.5",
27
  "path": "^0.12.7",
28
+ "tsc-alias": "^1.8.8",
29
+ "tspec": "^0.1.112"
30
  },
31
  "devDependencies": {
32
  "@types/express": "^4.17.21",
 
37
  "typescript": "^5.3.3"
38
  }
39
  },
40
+ "node_modules/@cloudflare/json-schema-walker": {
41
+ "version": "0.1.1",
42
+ "resolved": "https://registry.npmjs.org/@cloudflare/json-schema-walker/-/json-schema-walker-0.1.1.tgz",
43
+ "integrity": "sha512-P3n0hEgk1m6uKWgL4Yb1owzXVG4pM70G4kRnDQxZXiVvfCRtaqiHu+ZRiRPzmwGBiLTO1LWc2yR1M8oz0YkXww=="
44
+ },
45
  "node_modules/@cspotcode/source-map-support": {
46
  "version": "0.8.1",
47
  "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
48
  "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
 
49
  "dependencies": {
50
  "@jridgewell/trace-mapping": "0.3.9"
51
  },
 
165
  "version": "3.1.1",
166
  "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
167
  "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
 
168
  "engines": {
169
  "node": ">=6.0.0"
170
  }
 
172
  "node_modules/@jridgewell/sourcemap-codec": {
173
  "version": "1.4.15",
174
  "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
175
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
 
176
  },
177
  "node_modules/@jridgewell/trace-mapping": {
178
  "version": "0.3.9",
179
  "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
180
  "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
 
181
  "dependencies": {
182
  "@jridgewell/resolve-uri": "^3.0.3",
183
  "@jridgewell/sourcemap-codec": "^1.4.10"
 
286
  "node_modules/@tsconfig/node10": {
287
  "version": "1.0.9",
288
  "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
289
+ "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA=="
 
290
  },
291
  "node_modules/@tsconfig/node12": {
292
  "version": "1.0.11",
293
  "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz",
294
+ "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="
 
295
  },
296
  "node_modules/@tsconfig/node14": {
297
  "version": "1.0.3",
298
  "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz",
299
+ "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="
 
300
  },
301
  "node_modules/@tsconfig/node16": {
302
  "version": "1.0.4",
303
  "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz",
304
+ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="
 
305
  },
306
  "node_modules/@types/body-parser": {
307
  "version": "1.19.5",
308
  "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
309
  "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
310
+ "devOptional": true,
311
  "dependencies": {
312
  "@types/connect": "*",
313
  "@types/node": "*"
 
317
  "version": "3.4.38",
318
  "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
319
  "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
320
+ "devOptional": true,
321
  "dependencies": {
322
  "@types/node": "*"
323
  }
 
326
  "version": "4.17.21",
327
  "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
328
  "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
329
+ "devOptional": true,
330
  "dependencies": {
331
  "@types/body-parser": "*",
332
  "@types/express-serve-static-core": "^4.17.33",
 
338
  "version": "4.17.41",
339
  "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz",
340
  "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==",
341
+ "devOptional": true,
342
  "dependencies": {
343
  "@types/node": "*",
344
  "@types/qs": "*",
 
359
  "version": "2.0.4",
360
  "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
361
  "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
362
+ "devOptional": true
363
+ },
364
+ "node_modules/@types/http-proxy": {
365
+ "version": "1.17.14",
366
+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz",
367
+ "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==",
368
+ "dependencies": {
369
+ "@types/node": "*"
370
+ }
371
+ },
372
+ "node_modules/@types/json-schema": {
373
+ "version": "7.0.15",
374
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
375
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
376
  },
377
  "node_modules/@types/mime": {
378
  "version": "1.3.5",
379
  "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
380
  "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
381
+ "devOptional": true
382
  },
383
  "node_modules/@types/minimatch": {
384
  "version": "5.1.2",
 
397
  "version": "6.9.11",
398
  "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
399
  "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
400
+ "devOptional": true
401
  },
402
  "node_modules/@types/range-parser": {
403
  "version": "1.2.7",
404
  "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
405
  "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
406
+ "devOptional": true
407
  },
408
  "node_modules/@types/send": {
409
  "version": "0.17.4",
410
  "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
411
  "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
412
+ "devOptional": true,
413
  "dependencies": {
414
  "@types/mime": "^1",
415
  "@types/node": "*"
 
419
  "version": "1.15.5",
420
  "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
421
  "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
422
+ "devOptional": true,
423
  "dependencies": {
424
  "@types/http-errors": "*",
425
  "@types/mime": "*",
 
473
  "version": "8.11.2",
474
  "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
475
  "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
 
476
  "bin": {
477
  "acorn": "bin/acorn"
478
  },
 
484
  "version": "8.3.1",
485
  "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz",
486
  "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==",
 
487
  "engines": {
488
  "node": ">=0.4.0"
489
  }
 
550
  "node_modules/arg": {
551
  "version": "4.1.3",
552
  "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
553
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
 
554
  },
555
  "node_modules/array-flatten": {
556
  "version": "1.1.1",
 
690
  "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz",
691
  "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw=="
692
  },
693
+ "node_modules/cliui": {
694
+ "version": "8.0.1",
695
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
696
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
697
+ "dependencies": {
698
+ "string-width": "^4.2.0",
699
+ "strip-ansi": "^6.0.1",
700
+ "wrap-ansi": "^7.0.0"
701
+ },
702
+ "engines": {
703
+ "node": ">=12"
704
+ }
705
+ },
706
+ "node_modules/cliui/node_modules/ansi-styles": {
707
+ "version": "4.3.0",
708
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
709
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
710
+ "dependencies": {
711
+ "color-convert": "^2.0.1"
712
+ },
713
+ "engines": {
714
+ "node": ">=8"
715
+ },
716
+ "funding": {
717
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
718
+ }
719
+ },
720
+ "node_modules/cliui/node_modules/wrap-ansi": {
721
+ "version": "7.0.0",
722
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
723
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
724
+ "dependencies": {
725
+ "ansi-styles": "^4.0.0",
726
+ "string-width": "^4.1.0",
727
+ "strip-ansi": "^6.0.0"
728
+ },
729
+ "engines": {
730
+ "node": ">=10"
731
+ },
732
+ "funding": {
733
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
734
+ }
735
+ },
736
  "node_modules/color-convert": {
737
  "version": "2.0.1",
738
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 
822
  "node_modules/create-require": {
823
  "version": "1.1.1",
824
  "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
825
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
 
826
  },
827
  "node_modules/cross-spawn": {
828
  "version": "7.0.3",
 
900
  "version": "4.0.2",
901
  "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
902
  "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
 
903
  "engines": {
904
  "node": ">=0.3.1"
905
  }
 
966
  "node": ">= 0.8"
967
  }
968
  },
969
+ "node_modules/escalade": {
970
+ "version": "3.1.2",
971
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
972
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
973
+ "engines": {
974
+ "node": ">=6"
975
+ }
976
+ },
977
  "node_modules/escape-html": {
978
  "version": "1.0.3",
979
  "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
 
987
  "node": ">= 0.6"
988
  }
989
  },
990
+ "node_modules/eventemitter3": {
991
+ "version": "4.0.7",
992
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
993
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
994
+ },
995
  "node_modules/express": {
996
  "version": "4.18.2",
997
  "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
 
1158
  "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1159
  "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1160
  },
1161
+ "node_modules/follow-redirects": {
1162
+ "version": "1.15.6",
1163
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
1164
+ "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
1165
+ "funding": [
1166
+ {
1167
+ "type": "individual",
1168
+ "url": "https://github.com/sponsors/RubenVerborgh"
1169
+ }
1170
+ ],
1171
+ "engines": {
1172
+ "node": ">=4.0"
1173
+ },
1174
+ "peerDependenciesMeta": {
1175
+ "debug": {
1176
+ "optional": true
1177
+ }
1178
+ }
1179
+ },
1180
  "node_modules/foreground-child": {
1181
  "version": "3.1.1",
1182
  "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
 
1286
  "node": ">=10"
1287
  }
1288
  },
1289
+ "node_modules/get-caller-file": {
1290
+ "version": "2.0.5",
1291
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1292
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1293
+ "engines": {
1294
+ "node": "6.* || 8.* || >= 10.*"
1295
+ }
1296
+ },
1297
  "node_modules/get-intrinsic": {
1298
  "version": "1.2.2",
1299
  "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
 
1470
  "node": ">= 0.8"
1471
  }
1472
  },
1473
+ "node_modules/http-proxy": {
1474
+ "version": "1.18.1",
1475
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
1476
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
1477
+ "dependencies": {
1478
+ "eventemitter3": "^4.0.0",
1479
+ "follow-redirects": "^1.0.0",
1480
+ "requires-port": "^1.0.0"
1481
+ },
1482
+ "engines": {
1483
+ "node": ">=8.0.0"
1484
+ }
1485
+ },
1486
+ "node_modules/http-proxy-middleware": {
1487
+ "version": "2.0.6",
1488
+ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
1489
+ "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
1490
+ "dependencies": {
1491
+ "@types/http-proxy": "^1.17.8",
1492
+ "http-proxy": "^1.18.1",
1493
+ "is-glob": "^4.0.1",
1494
+ "is-plain-obj": "^3.0.0",
1495
+ "micromatch": "^4.0.2"
1496
+ },
1497
+ "engines": {
1498
+ "node": ">=12.0.0"
1499
+ },
1500
+ "peerDependencies": {
1501
+ "@types/express": "^4.17.13"
1502
+ },
1503
+ "peerDependenciesMeta": {
1504
+ "@types/express": {
1505
+ "optional": true
1506
+ }
1507
+ }
1508
+ },
1509
  "node_modules/https-proxy-agent": {
1510
  "version": "5.0.1",
1511
  "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
 
1631
  "node": ">=0.12.0"
1632
  }
1633
  },
1634
+ "node_modules/is-plain-obj": {
1635
+ "version": "3.0.0",
1636
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz",
1637
+ "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==",
1638
+ "engines": {
1639
+ "node": ">=10"
1640
+ },
1641
+ "funding": {
1642
+ "url": "https://github.com/sponsors/sindresorhus"
1643
+ }
1644
+ },
1645
  "node_modules/isexe": {
1646
  "version": "2.0.0",
1647
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
 
1676
  "@sideway/pinpoint": "^2.0.0"
1677
  }
1678
  },
1679
+ "node_modules/json-schema-to-openapi-schema": {
1680
+ "version": "0.4.0",
1681
+ "resolved": "https://registry.npmjs.org/json-schema-to-openapi-schema/-/json-schema-to-openapi-schema-0.4.0.tgz",
1682
+ "integrity": "sha512-/DY8s4l28M5ZIJBhmcUFWbZChJV5v7RCA7RMVxubyD1l5KwIceUq6+EUnqQ2q3wh/2D3Zn8bNSeAu1i2X+sMHQ==",
1683
+ "deprecated": "This package is no longer maintained. Use @openapi-contrib/json-schema-to-openapi-schema instead.",
1684
+ "dependencies": {
1685
+ "@cloudflare/json-schema-walker": "^0.1.1"
1686
+ }
1687
+ },
1688
  "node_modules/json5": {
1689
  "version": "2.2.3",
1690
  "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
 
1816
  "node_modules/make-error": {
1817
  "version": "1.3.6",
1818
  "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
1819
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
 
1820
  },
1821
  "node_modules/media-typer": {
1822
  "version": "0.3.0",
 
4951
  "wrappy": "1"
4952
  }
4953
  },
4954
+ "node_modules/openapi-types": {
4955
+ "version": "12.1.3",
4956
+ "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
4957
+ "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw=="
4958
+ },
4959
  "node_modules/parseurl": {
4960
  "version": "1.3.3",
4961
  "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
 
4973
  "util": "^0.10.3"
4974
  }
4975
  },
4976
+ "node_modules/path-equal": {
4977
+ "version": "1.2.5",
4978
+ "resolved": "https://registry.npmjs.org/path-equal/-/path-equal-1.2.5.tgz",
4979
+ "integrity": "sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g=="
4980
+ },
4981
  "node_modules/path-is-absolute": {
4982
  "version": "1.0.1",
4983
  "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
 
5165
  "node": ">=8.10.0"
5166
  }
5167
  },
5168
+ "node_modules/require-directory": {
5169
+ "version": "2.1.1",
5170
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
5171
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
5172
+ "engines": {
5173
+ "node": ">=0.10.0"
5174
+ }
5175
+ },
5176
+ "node_modules/requires-port": {
5177
+ "version": "1.0.0",
5178
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
5179
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
5180
+ },
5181
  "node_modules/resolve": {
5182
  "version": "1.22.8",
5183
  "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
 
5278
  }
5279
  ]
5280
  },
5281
+ "node_modules/safe-stable-stringify": {
5282
+ "version": "2.4.3",
5283
+ "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz",
5284
+ "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==",
5285
+ "engines": {
5286
+ "node": ">=10"
5287
+ }
5288
+ },
5289
  "node_modules/safer-buffer": {
5290
  "version": "2.1.2",
5291
  "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
 
5581
  "url": "https://github.com/sponsors/ljharb"
5582
  }
5583
  },
5584
+ "node_modules/swagger-ui-dist": {
5585
+ "version": "5.14.0",
5586
+ "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.14.0.tgz",
5587
+ "integrity": "sha512-7qsKvc3gs5dnEIOclY4xkzacY85Pu9a/Gzkf+eezKLQ4BpErlI8BxYWADhnCx6PmFyU4fxH4AMKH+/d3Kml0Gg=="
5588
+ },
5589
+ "node_modules/swagger-ui-express": {
5590
+ "version": "4.6.3",
5591
+ "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.3.tgz",
5592
+ "integrity": "sha512-CDje4PndhTD2HkgyKH3pab+LKspDeB/NhPN2OF1j+piYIamQqBYwAXWESOT1Yju2xFg51bRW9sUng2WxDjzArw==",
5593
+ "dependencies": {
5594
+ "swagger-ui-dist": ">=4.11.0"
5595
+ },
5596
+ "engines": {
5597
+ "node": ">= v0.10.32"
5598
+ },
5599
+ "peerDependencies": {
5600
+ "express": ">=4.0.0 || >=5.0.0-beta"
5601
+ }
5602
+ },
5603
  "node_modules/tar": {
5604
  "version": "6.2.0",
5605
  "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
 
5671
  "version": "10.9.2",
5672
  "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
5673
  "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
 
5674
  "dependencies": {
5675
  "@cspotcode/source-map-support": "^0.8.0",
5676
  "@tsconfig/node10": "^1.0.7",
 
5817
  "node": ">=6"
5818
  }
5819
  },
5820
+ "node_modules/tspec": {
5821
+ "version": "0.1.112",
5822
+ "resolved": "https://registry.npmjs.org/tspec/-/tspec-0.1.112.tgz",
5823
+ "integrity": "sha512-rkTAZ5czVp/ZrRLD0Vydl2xHz+Tw+rZkya64Fysk1qMpHnQDIMyItqgY6IQ7tj2jxB9Y22kuRbCfxzrzznMU6g==",
5824
+ "dependencies": {
5825
+ "debug": "^4.3.4",
5826
+ "express": "^4.18.2",
5827
+ "glob": "^8.1.0",
5828
+ "http-proxy-middleware": "^2.0.6",
5829
+ "json-schema-to-openapi-schema": "^0.4.0",
5830
+ "openapi-types": "^12.0.2",
5831
+ "swagger-ui-express": "^4.6.2",
5832
+ "typescript": "~5.1.0",
5833
+ "typescript-json-schema": "^0.62.0",
5834
+ "yargs": "^17.7.1"
5835
+ },
5836
+ "bin": {
5837
+ "tspec": "dist/cli.js"
5838
+ },
5839
+ "engines": {
5840
+ "node": ">=12.0.0"
5841
+ },
5842
+ "peerDependencies": {
5843
+ "express": "^4.17.1"
5844
+ }
5845
+ },
5846
+ "node_modules/tspec/node_modules/brace-expansion": {
5847
+ "version": "2.0.1",
5848
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
5849
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
5850
+ "dependencies": {
5851
+ "balanced-match": "^1.0.0"
5852
+ }
5853
+ },
5854
+ "node_modules/tspec/node_modules/glob": {
5855
+ "version": "8.1.0",
5856
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
5857
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
5858
+ "dependencies": {
5859
+ "fs.realpath": "^1.0.0",
5860
+ "inflight": "^1.0.4",
5861
+ "inherits": "2",
5862
+ "minimatch": "^5.0.1",
5863
+ "once": "^1.3.0"
5864
+ },
5865
+ "engines": {
5866
+ "node": ">=12"
5867
+ },
5868
+ "funding": {
5869
+ "url": "https://github.com/sponsors/isaacs"
5870
+ }
5871
+ },
5872
+ "node_modules/tspec/node_modules/minimatch": {
5873
+ "version": "5.1.6",
5874
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
5875
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
5876
+ "dependencies": {
5877
+ "brace-expansion": "^2.0.1"
5878
+ },
5879
+ "engines": {
5880
+ "node": ">=10"
5881
+ }
5882
+ },
5883
+ "node_modules/tspec/node_modules/typescript": {
5884
+ "version": "5.1.6",
5885
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
5886
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
5887
+ "bin": {
5888
+ "tsc": "bin/tsc",
5889
+ "tsserver": "bin/tsserver"
5890
+ },
5891
+ "engines": {
5892
+ "node": ">=14.17"
5893
+ }
5894
+ },
5895
  "node_modules/type-is": {
5896
  "version": "1.6.18",
5897
  "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
 
5908
  "version": "5.3.3",
5909
  "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
5910
  "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
5911
+ "bin": {
5912
+ "tsc": "bin/tsc",
5913
+ "tsserver": "bin/tsserver"
5914
+ },
5915
+ "engines": {
5916
+ "node": ">=14.17"
5917
+ }
5918
+ },
5919
+ "node_modules/typescript-json-schema": {
5920
+ "version": "0.62.0",
5921
+ "resolved": "https://registry.npmjs.org/typescript-json-schema/-/typescript-json-schema-0.62.0.tgz",
5922
+ "integrity": "sha512-qRO6pCgyjKJ230QYdOxDRpdQrBeeino4v5p2rYmSD72Jf4rD3O+cJcROv46sQukm46CLWoeusqvBgKpynEv25g==",
5923
+ "dependencies": {
5924
+ "@types/json-schema": "^7.0.9",
5925
+ "@types/node": "^16.9.2",
5926
+ "glob": "^7.1.7",
5927
+ "path-equal": "^1.2.5",
5928
+ "safe-stable-stringify": "^2.2.0",
5929
+ "ts-node": "^10.9.1",
5930
+ "typescript": "~5.1.0",
5931
+ "yargs": "^17.1.1"
5932
+ },
5933
+ "bin": {
5934
+ "typescript-json-schema": "bin/typescript-json-schema"
5935
+ }
5936
+ },
5937
+ "node_modules/typescript-json-schema/node_modules/@types/node": {
5938
+ "version": "16.18.95",
5939
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.95.tgz",
5940
+ "integrity": "sha512-z9w+CcR7ahc7UhsKe+PGB25nmPmCERQBAdLdFHhoZ6+FfgSr7gUvdQI0eLH2t7ue8u5wKsLdde6cHKPjhC8vGg=="
5941
+ },
5942
+ "node_modules/typescript-json-schema/node_modules/glob": {
5943
+ "version": "7.2.3",
5944
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
5945
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
5946
+ "dependencies": {
5947
+ "fs.realpath": "^1.0.0",
5948
+ "inflight": "^1.0.4",
5949
+ "inherits": "2",
5950
+ "minimatch": "^3.1.1",
5951
+ "once": "^1.3.0",
5952
+ "path-is-absolute": "^1.0.0"
5953
+ },
5954
+ "engines": {
5955
+ "node": "*"
5956
+ },
5957
+ "funding": {
5958
+ "url": "https://github.com/sponsors/isaacs"
5959
+ }
5960
+ },
5961
+ "node_modules/typescript-json-schema/node_modules/typescript": {
5962
+ "version": "5.1.6",
5963
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
5964
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
5965
  "bin": {
5966
  "tsc": "bin/tsc",
5967
  "tsserver": "bin/tsserver"
 
6018
  "node_modules/v8-compile-cache-lib": {
6019
  "version": "3.0.1",
6020
  "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz",
6021
+ "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="
 
6022
  },
6023
  "node_modules/vary": {
6024
  "version": "1.1.2",
 
6177
  "node": ">=0.4"
6178
  }
6179
  },
6180
+ "node_modules/y18n": {
6181
+ "version": "5.0.8",
6182
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
6183
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
6184
+ "engines": {
6185
+ "node": ">=10"
6186
+ }
6187
+ },
6188
  "node_modules/yallist": {
6189
  "version": "4.0.0",
6190
  "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
6191
  "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
6192
  },
6193
+ "node_modules/yargs": {
6194
+ "version": "17.7.2",
6195
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
6196
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
6197
+ "dependencies": {
6198
+ "cliui": "^8.0.1",
6199
+ "escalade": "^3.1.1",
6200
+ "get-caller-file": "^2.0.5",
6201
+ "require-directory": "^2.1.1",
6202
+ "string-width": "^4.2.3",
6203
+ "y18n": "^5.0.5",
6204
+ "yargs-parser": "^21.1.1"
6205
+ },
6206
+ "engines": {
6207
+ "node": ">=12"
6208
+ }
6209
+ },
6210
+ "node_modules/yargs-parser": {
6211
+ "version": "21.1.1",
6212
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
6213
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
6214
+ "engines": {
6215
+ "node": ">=12"
6216
+ }
6217
+ },
6218
  "node_modules/yn": {
6219
  "version": "3.1.1",
6220
  "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
6221
  "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
 
6222
  "engines": {
6223
  "node": ">=6"
6224
  }
package.json CHANGED
@@ -36,6 +36,7 @@
36
  "mongoose": "^8.0.3",
37
  "npm": "^10.2.5",
38
  "path": "^0.12.7",
39
- "tsc-alias": "^1.8.8"
 
40
  }
41
  }
 
36
  "mongoose": "^8.0.3",
37
  "npm": "^10.2.5",
38
  "path": "^0.12.7",
39
+ "tsc-alias": "^1.8.8",
40
+ "tspec": "^0.1.112"
41
  }
42
  }
src/lib/responses/json-response.ts CHANGED
@@ -23,21 +23,21 @@ export abstract class JsonResponse {
23
  * @param res - Optional Express response object to send the response.
24
  * @returns The success response object or the Express response object if provided.
25
  */
26
- static success(props: IJSONSuccessResponseProps): IJSONSuccessResponse;
27
- static success(
28
- props: IJSONSuccessResponseProps,
29
- res: Response<IJSONSuccessResponse>
30
- ): Response<IJSONSuccessResponse>;
31
- static success(
32
- props: IJSONSuccessResponseProps,
33
- res?: Response<IJSONSuccessResponse>
34
- ): IJSONSuccessResponse | Response<IJSONSuccessResponse> {
35
  const data = {
36
  status: props.status || 200,
37
  message: props.message || "Success",
38
  data: props.data || null,
39
- meta: props.meta,
40
- } satisfies IJSONSuccessResponse;
41
 
42
  return (res && res.status(data.status).json(data)) || data;
43
  }
 
23
  * @param res - Optional Express response object to send the response.
24
  * @returns The success response object or the Express response object if provided.
25
  */
26
+ static success<T>(props: IJSONSuccessResponseProps<T>): IJSONSuccessResponse<T>;
27
+ static success<T>(
28
+ props: IJSONSuccessResponseProps<T>,
29
+ res: Response<IJSONSuccessResponse<T>>
30
+ ): Response<IJSONSuccessResponse<T>>;
31
+ static success<T>(
32
+ props: IJSONSuccessResponseProps<T>,
33
+ res?: Response<IJSONSuccessResponse<T>>
34
+ ): IJSONSuccessResponse<T> | Response<IJSONSuccessResponse<T>> {
35
  const data = {
36
  status: props.status || 200,
37
  message: props.message || "Success",
38
  data: props.data || null,
39
+ meta: (props as any).meta,
40
+ } satisfies IJSONSuccessResponse<T>;
41
 
42
  return (res && res.status(data.status).json(data)) || data;
43
  }
src/lib/responses/json-responses-params.d.ts CHANGED
@@ -1,13 +1,16 @@
1
- export interface IJSONSuccessResponseProps {
2
  status?: number;
3
  message?: string;
4
- data?: Record<string, any> | Record<string, any>[] | null;
5
- meta?: {
 
 
 
6
  total: number;
7
  page: number;
8
  perPage: number;
9
  };
10
- }
11
 
12
  export interface IJSONErrorResponseProps {
13
  status?: number;
 
1
+ export type IJSONSuccessResponseProps<T extends Record<string, any> | Record<string, any>[]> = {
2
  status?: number;
3
  message?: string;
4
+ data?: T | null;
5
+ }
6
+ &
7
+ (T extends any[] ? {
8
+ meta: {
9
  total: number;
10
  page: number;
11
  perPage: number;
12
  };
13
+ } : {});
14
 
15
  export interface IJSONErrorResponseProps {
16
  status?: number;
src/lib/responses/json-responses.d.ts CHANGED
@@ -3,14 +3,17 @@ interface IJSONResponse {
3
  message: string;
4
  }
5
 
6
- export interface IJSONSuccessResponse extends IJSONResponse {
7
- data: Record<string, any> | Record<string, any>[];
8
- meta?: {
 
 
 
9
  total: number;
10
  page: number;
11
  perPage: number;
12
  };
13
- }
14
 
15
  export interface IJSONErrorResponse extends IJSONResponse {
16
  error: string;
 
3
  message: string;
4
  }
5
 
6
+ export type IJSONSuccessResponse<T extends Record<string, any> | Record<string, any>[]> = IJSONResponse & {
7
+ data: T;
8
+ }
9
+ &
10
+ (T extends any[] ? {
11
+ meta: {
12
  total: number;
13
  page: number;
14
  perPage: number;
15
  };
16
+ } : {});
17
 
18
  export interface IJSONErrorResponse extends IJSONResponse {
19
  error: string;
src/modules/console/common/models/admin.model.ts CHANGED
@@ -1,6 +1,5 @@
1
  import mongoose, { UpdateQuery } from "mongoose";
2
  import bcrypt from "bcrypt";
3
- import { config } from "../../../../configs/config";
4
  import { Role } from "@common/enums/role.enum";
5
  import { saltrounds } from "@common/models/user.model";
6
 
 
1
  import mongoose, { UpdateQuery } from "mongoose";
2
  import bcrypt from "bcrypt";
 
3
  import { Role } from "@common/enums/role.enum";
4
  import { saltrounds } from "@common/models/user.model";
5
 
src/modules/console/modules/admins/controllers/admins.controller.docs.ts ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { AdminSerialization } from "modules/console/common/serializers/admin.serialization";
2
+ import { Tspec } from "tspec";
3
+ import { ICreateAdmin } from "../validations/create-admin.validation";
4
+ import { AdminsController } from "./admins.controller";
5
+
6
+ export type AdminsControllerSpecs = Tspec.DefineApiSpec<{
7
+ basePath: "/api/v1/console/admins";
8
+ tags: ["console/admins"];
9
+ paths: {
10
+ "/": {
11
+ get: {
12
+ handler: AdminsController["list"];
13
+ };
14
+ post: {
15
+ body: ICreateAdmin;
16
+ handler: AdminsController["create"];
17
+ };
18
+ };
19
+ "/{id}": {
20
+ get: {
21
+ path: {
22
+ id: string;
23
+ };
24
+ handler: AdminsController["get"];
25
+ };
26
+ patch: {
27
+ path: {
28
+ id: string;
29
+ };
30
+ body: ICreateAdmin;
31
+ handler: AdminsController["update"];
32
+ };
33
+ delete: {
34
+ path: {
35
+ id: string;
36
+ };
37
+ handler: AdminsController["delete"];
38
+ };
39
+ };
40
+ }
41
+ }>;
src/modules/console/modules/admins/controllers/admins.controller.ts CHANGED
@@ -4,7 +4,7 @@ import { BaseController } from "@lib/controllers/controller.base";
4
  import { Prefix } from "@lib/decorators/prefix.decorator";
5
  import { Request, Response } from "express";
6
  import { AdminsService } from "../services/admins.service";
7
- import { createAdminSchema } from "../validations/create-admin.validation";
8
  import { parsePaginationQuery } from "@helpers/pagination";
9
  import { JsonResponse } from "@lib/responses/json-response";
10
  import { ControllerMiddleware } from "@lib/decorators/controller-middleware.decorator";
@@ -12,6 +12,7 @@ import { AdminGuardMiddleware } from "modules/console/common/guards/admins.guard
12
  import { Role } from "@common/enums/role.enum";
13
  import { serialize } from "@helpers/serialize";
14
  import { AdminSerialization } from "modules/console/common/serializers/admin.serialization";
 
15
 
16
  @Prefix("/console/admins")
17
  @ControllerMiddleware(AdminGuardMiddleware({ roles: [Role.SUPER_ADMIN] }))
@@ -39,7 +40,10 @@ export class AdminsController extends BaseController {
39
  );
40
  }
41
 
42
- list = async (req: Request, res: Response): Promise<Response> => {
 
 
 
43
  const paginationQuery = parsePaginationQuery(req.query);
44
  const { docs, paginationData } = await this.adminsService.list(
45
  {},
@@ -55,20 +59,26 @@ export class AdminsController extends BaseController {
55
  );
56
  };
57
 
58
- get = async (req: Request, res: Response): Promise<Response> => {
 
 
 
59
  const data = await this.adminsService.findOneOrFail({
60
  _id: req.params.id,
61
  });
62
 
63
  return JsonResponse.success(
64
  {
65
- data: serialize(data, AdminSerialization),
66
  },
67
  res
68
  );
69
  };
70
 
71
- create = async (req: Request, res: Response): Promise<Response> => {
 
 
 
72
  const admin = await this.adminsService.create(req.body);
73
 
74
  return JsonResponse.success(
@@ -80,7 +90,10 @@ export class AdminsController extends BaseController {
80
  );
81
  };
82
 
83
- update = async (req: Request, res: Response): Promise<Response> => {
 
 
 
84
  const admin = await this.adminsService.updateOne(
85
  {
86
  _id: req.params.id,
@@ -96,7 +109,10 @@ export class AdminsController extends BaseController {
96
  );
97
  };
98
 
99
- delete = async (req: Request, res: Response): Promise<Response> => {
 
 
 
100
  const admin = await this.adminsService.deleteOne({
101
  _id: req.params.id,
102
  });
 
4
  import { Prefix } from "@lib/decorators/prefix.decorator";
5
  import { Request, Response } from "express";
6
  import { AdminsService } from "../services/admins.service";
7
+ import { ICreateAdmin, createAdminSchema } from "../validations/create-admin.validation";
8
  import { parsePaginationQuery } from "@helpers/pagination";
9
  import { JsonResponse } from "@lib/responses/json-response";
10
  import { ControllerMiddleware } from "@lib/decorators/controller-middleware.decorator";
 
12
  import { Role } from "@common/enums/role.enum";
13
  import { serialize } from "@helpers/serialize";
14
  import { AdminSerialization } from "modules/console/common/serializers/admin.serialization";
15
+ import { IJSONSuccessResponse } from "@lib/responses/json-responses";
16
 
17
  @Prefix("/console/admins")
18
  @ControllerMiddleware(AdminGuardMiddleware({ roles: [Role.SUPER_ADMIN] }))
 
40
  );
41
  }
42
 
43
+ list = async (
44
+ req: Request,
45
+ res: Response<IJSONSuccessResponse<AdminSerialization[]>>
46
+ ): Promise<Response> => {
47
  const paginationQuery = parsePaginationQuery(req.query);
48
  const { docs, paginationData } = await this.adminsService.list(
49
  {},
 
59
  );
60
  };
61
 
62
+ get = async (
63
+ req: Request<{ id: string }>,
64
+ res: Response<IJSONSuccessResponse<AdminSerialization>>
65
+ ): Promise<Response> => {
66
  const data = await this.adminsService.findOneOrFail({
67
  _id: req.params.id,
68
  });
69
 
70
  return JsonResponse.success(
71
  {
72
+ data: serialize(data, AdminSerialization) as AdminSerialization,
73
  },
74
  res
75
  );
76
  };
77
 
78
+ create = async (
79
+ req: Request<{}, {}, ICreateAdmin>,
80
+ res: Response<IJSONSuccessResponse<AdminSerialization>>
81
+ ): Promise<Response> => {
82
  const admin = await this.adminsService.create(req.body);
83
 
84
  return JsonResponse.success(
 
90
  );
91
  };
92
 
93
+ update = async (
94
+ req: Request<{ id: string }, {}, ICreateAdmin>,
95
+ res: Response<IJSONSuccessResponse<AdminSerialization>>
96
+ ): Promise<Response> => {
97
  const admin = await this.adminsService.updateOne(
98
  {
99
  _id: req.params.id,
 
109
  );
110
  };
111
 
112
+ delete = async (
113
+ req: Request<{ id: string }>,
114
+ res: Response<IJSONSuccessResponse<AdminSerialization>>
115
+ ): Promise<Response> => {
116
  const admin = await this.adminsService.deleteOne({
117
  _id: req.params.id,
118
  });
src/routes.ts CHANGED
@@ -2,6 +2,7 @@ import { Router, Express } from "express";
2
 
3
  import * as glob from "glob";
4
  import path from "path";
 
5
  import { BaseController } from "./lib/controllers/controller.base";
6
  import { validationErrorHandler } from "./helpers/validation.helper";
7
  import { JsonResponse } from "@lib/responses/json-response";
@@ -16,7 +17,7 @@ export const setAppRoutes = async (app: Express) => {
16
  const mainRouter = Router();
17
 
18
  await importControllers(mainRouter);
19
- setCustomRoutes(mainRouter);
20
 
21
  app.use("/api/v1", mainRouter);
22
  };
@@ -28,7 +29,7 @@ export const setAppRoutes = async (app: Express) => {
28
  *
29
  * @param router - The router object to set the routes on.
30
  */
31
- const setCustomRoutes = (router: Router) => {
32
  // Health check route
33
  router.get("/health", (_req: any, res: any) => {
34
  JsonResponse.success(
@@ -43,8 +44,24 @@ const setCustomRoutes = (router: Router) => {
43
  // Validation error handler
44
  router.use(validationErrorHandler);
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  // Invalid URL handler
47
- router.all("*", (_req: any, res: any) => {
 
48
  JsonResponse.error(
49
  {
50
  error: "Invalid URL!",
 
2
 
3
  import * as glob from "glob";
4
  import path from "path";
5
+ import { TspecDocsMiddleware } from "tspec";
6
  import { BaseController } from "./lib/controllers/controller.base";
7
  import { validationErrorHandler } from "./helpers/validation.helper";
8
  import { JsonResponse } from "@lib/responses/json-response";
 
17
  const mainRouter = Router();
18
 
19
  await importControllers(mainRouter);
20
+ await setCustomRoutes(mainRouter);
21
 
22
  app.use("/api/v1", mainRouter);
23
  };
 
29
  *
30
  * @param router - The router object to set the routes on.
31
  */
32
+ const setCustomRoutes = async (router: Router) => {
33
  // Health check route
34
  router.get("/health", (_req: any, res: any) => {
35
  JsonResponse.success(
 
44
  // Validation error handler
45
  router.use(validationErrorHandler);
46
 
47
+ // docs
48
+ router.use("/docs", await TspecDocsMiddleware({
49
+ openapi: {
50
+ title: 'API Documentation',
51
+ version: '0.0.1',
52
+ securityDefinitions: {
53
+ jwt: {
54
+ type: 'http',
55
+ scheme: 'bearer',
56
+ bearerFormat: 'JWT',
57
+ }
58
+ }
59
+ }
60
+ }));
61
+
62
  // Invalid URL handler
63
+ router.all("*", (req: any, res: any) => {
64
+
65
  JsonResponse.error(
66
  {
67
  error: "Invalid URL!",