@decaf-ts/for-nest 0.0.4 → 0.0.5

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.
Files changed (71) hide show
  1. package/dist/for-nest.cjs +573 -6
  2. package/dist/for-nest.esm.cjs +549 -6
  3. package/lib/esm/factory/NestBootstraper.d.ts +214 -0
  4. package/lib/esm/factory/NestBootstraper.js +269 -0
  5. package/lib/esm/factory/errors/cors.d.ts +4 -0
  6. package/lib/esm/factory/errors/cors.js +7 -0
  7. package/lib/esm/factory/errors/index.d.ts +1 -0
  8. package/lib/esm/factory/errors/index.js +2 -0
  9. package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.d.ts +9 -0
  10. package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.js +35 -0
  11. package/lib/esm/factory/exceptions/ConflictExceptionFilter.d.ts +9 -0
  12. package/lib/esm/factory/exceptions/ConflictExceptionFilter.js +35 -0
  13. package/lib/esm/factory/exceptions/GlobalExceptionFilter.d.ts +4 -0
  14. package/lib/esm/factory/exceptions/GlobalExceptionFilter.js +35 -0
  15. package/lib/esm/factory/exceptions/HttpExceptionFilter.d.ts +4 -0
  16. package/lib/esm/factory/exceptions/HttpExceptionFilter.js +27 -0
  17. package/lib/esm/factory/exceptions/HttpResponseError.d.ts +14 -0
  18. package/lib/esm/factory/exceptions/HttpResponseError.js +19 -0
  19. package/lib/esm/factory/exceptions/NotFoundExceptionFilter.d.ts +9 -0
  20. package/lib/esm/factory/exceptions/NotFoundExceptionFilter.js +35 -0
  21. package/lib/esm/factory/exceptions/ValidationExceptionFilter.d.ts +9 -0
  22. package/lib/esm/factory/exceptions/ValidationExceptionFilter.js +35 -0
  23. package/lib/esm/factory/exceptions/index.d.ts +6 -0
  24. package/lib/esm/factory/exceptions/index.js +7 -0
  25. package/lib/esm/factory/index.d.ts +4 -0
  26. package/lib/esm/factory/index.js +5 -0
  27. package/lib/esm/factory/openapi/SwaggerBuilder.d.ts +9 -0
  28. package/lib/esm/factory/openapi/SwaggerBuilder.js +42 -0
  29. package/lib/esm/factory/openapi/SwaggerCustomUI.d.ts +24 -0
  30. package/lib/esm/factory/openapi/SwaggerCustomUI.js +55 -0
  31. package/lib/esm/factory/openapi/constants.d.ts +16 -0
  32. package/lib/esm/factory/openapi/constants.js +19 -0
  33. package/lib/esm/factory/openapi/index.d.ts +1 -0
  34. package/lib/esm/factory/openapi/index.js +2 -0
  35. package/lib/esm/index.d.ts +2 -1
  36. package/lib/esm/index.js +3 -2
  37. package/lib/factory/NestBootstraper.cjs +273 -0
  38. package/lib/factory/NestBootstraper.d.ts +214 -0
  39. package/lib/factory/errors/cors.cjs +11 -0
  40. package/lib/factory/errors/cors.d.ts +4 -0
  41. package/lib/factory/errors/index.cjs +18 -0
  42. package/lib/factory/errors/index.d.ts +1 -0
  43. package/lib/factory/exceptions/AuthorizationExceptionFilter.cjs +39 -0
  44. package/lib/factory/exceptions/AuthorizationExceptionFilter.d.ts +9 -0
  45. package/lib/factory/exceptions/ConflictExceptionFilter.cjs +39 -0
  46. package/lib/factory/exceptions/ConflictExceptionFilter.d.ts +9 -0
  47. package/lib/factory/exceptions/GlobalExceptionFilter.cjs +38 -0
  48. package/lib/factory/exceptions/GlobalExceptionFilter.d.ts +4 -0
  49. package/lib/factory/exceptions/HttpExceptionFilter.cjs +30 -0
  50. package/lib/factory/exceptions/HttpExceptionFilter.d.ts +4 -0
  51. package/lib/factory/exceptions/HttpResponseError.cjs +23 -0
  52. package/lib/factory/exceptions/HttpResponseError.d.ts +14 -0
  53. package/lib/factory/exceptions/NotFoundExceptionFilter.cjs +39 -0
  54. package/lib/factory/exceptions/NotFoundExceptionFilter.d.ts +9 -0
  55. package/lib/factory/exceptions/ValidationExceptionFilter.cjs +39 -0
  56. package/lib/factory/exceptions/ValidationExceptionFilter.d.ts +9 -0
  57. package/lib/factory/exceptions/index.cjs +23 -0
  58. package/lib/factory/exceptions/index.d.ts +6 -0
  59. package/lib/factory/index.cjs +21 -0
  60. package/lib/factory/index.d.ts +4 -0
  61. package/lib/factory/openapi/SwaggerBuilder.cjs +46 -0
  62. package/lib/factory/openapi/SwaggerBuilder.d.ts +9 -0
  63. package/lib/factory/openapi/SwaggerCustomUI.cjs +92 -0
  64. package/lib/factory/openapi/SwaggerCustomUI.d.ts +24 -0
  65. package/lib/factory/openapi/constants.cjs +22 -0
  66. package/lib/factory/openapi/constants.d.ts +16 -0
  67. package/lib/factory/openapi/index.cjs +18 -0
  68. package/lib/factory/openapi/index.d.ts +1 -0
  69. package/lib/index.cjs +3 -2
  70. package/lib/index.d.ts +2 -1
  71. package/package.json +1 -1
@@ -0,0 +1,35 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Catch, HttpException, HttpStatus } from "@nestjs/common";
8
+ import { HttpResponseError } from "./HttpResponseError.js";
9
+ let GlobalExceptionFilter = class GlobalExceptionFilter {
10
+ catch(exception, host) {
11
+ const ctx = host.switchToHttp();
12
+ const request = ctx.getRequest();
13
+ const response = ctx.getResponse();
14
+ let status = HttpStatus.INTERNAL_SERVER_ERROR;
15
+ let message = "Internal Server Error";
16
+ let error;
17
+ if (exception instanceof HttpException) {
18
+ const res = exception.getResponse();
19
+ status = exception.getStatus();
20
+ message = (res?.message || exception.message) ?? message;
21
+ error = res?.error ?? exception.name;
22
+ }
23
+ else if (exception instanceof Error) {
24
+ message = exception.message;
25
+ error = exception.name;
26
+ }
27
+ const httpResponseError = new HttpResponseError(request, { status, message, error });
28
+ response.status(httpResponseError.status).json(httpResponseError);
29
+ }
30
+ };
31
+ GlobalExceptionFilter = __decorate([
32
+ Catch()
33
+ ], GlobalExceptionFilter);
34
+ export { GlobalExceptionFilter };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2xvYmFsRXhjZXB0aW9uRmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ZhY3RvcnkvZXhjZXB0aW9ucy9HbG9iYWxFeGNlcHRpb25GaWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFnQixLQUFLLEVBQW1CLGFBQWEsRUFBRSxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsK0JBQTRCO0FBRy9DLElBQU0scUJBQXFCLEdBQTNCLE1BQU0scUJBQXFCO0lBQzlCLEtBQUssQ0FBQyxTQUFrQixFQUFFLElBQW1CO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFXLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBWSxDQUFDO1FBRTdDLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQztRQUM5QyxJQUFJLE9BQU8sR0FBRyx1QkFBdUIsQ0FBQztRQUN0QyxJQUFJLEtBQXlCLENBQUM7UUFFOUIsSUFBSSxTQUFTLFlBQVksYUFBYSxFQUFFLENBQUM7WUFDckMsTUFBTSxHQUFHLEdBQVEsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0IsT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDO1lBQ3pELEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksU0FBUyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQ3BDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQzVCLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksaUJBQWlCLENBQUMsT0FBTyxFQUFFLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBQ25GLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNKLENBQUE7QUF2QlkscUJBQXFCO0lBRGpDLEtBQUssRUFBRTtHQUNLLHFCQUFxQixDQXVCakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FyZ3VtZW50c0hvc3QsIENhdGNoLCBFeGNlcHRpb25GaWx0ZXIsIEh0dHBFeGNlcHRpb24sIEh0dHBTdGF0dXN9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZX0gZnJvbSBcImV4cHJlc3NcIjtcbmltcG9ydCB7SHR0cFJlc3BvbnNlRXJyb3J9IGZyb20gXCIuL0h0dHBSZXNwb25zZUVycm9yXCI7XG5cbkBDYXRjaCgpXG5leHBvcnQgY2xhc3MgR2xvYmFsRXhjZXB0aW9uRmlsdGVyIGltcGxlbWVudHMgRXhjZXB0aW9uRmlsdGVyIHtcbiAgICBjYXRjaChleGNlcHRpb246IHVua25vd24sIGhvc3Q6IEFyZ3VtZW50c0hvc3QpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gaG9zdC5zd2l0Y2hUb0h0dHAoKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGN0eC5nZXRSZXF1ZXN0PFJlcXVlc3Q+KCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gY3R4LmdldFJlc3BvbnNlPFJlc3BvbnNlPigpO1xuXG4gICAgICAgIGxldCBzdGF0dXMgPSBIdHRwU3RhdHVzLklOVEVSTkFMX1NFUlZFUl9FUlJPUjtcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSBcIkludGVybmFsIFNlcnZlciBFcnJvclwiO1xuICAgICAgICBsZXQgZXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoZXhjZXB0aW9uIGluc3RhbmNlb2YgSHR0cEV4Y2VwdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmVzOiBhbnkgPSBleGNlcHRpb24uZ2V0UmVzcG9uc2UoKTtcbiAgICAgICAgICAgIHN0YXR1cyA9IGV4Y2VwdGlvbi5nZXRTdGF0dXMoKTtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSAocmVzPy5tZXNzYWdlIHx8IGV4Y2VwdGlvbi5tZXNzYWdlKSA/PyBtZXNzYWdlO1xuICAgICAgICAgICAgZXJyb3IgPSByZXM/LmVycm9yID8/IGV4Y2VwdGlvbi5uYW1lO1xuICAgICAgICB9IGVsc2UgaWYgKGV4Y2VwdGlvbiBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gZXhjZXB0aW9uLm1lc3NhZ2U7XG4gICAgICAgICAgICBlcnJvciA9IGV4Y2VwdGlvbi5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaHR0cFJlc3BvbnNlRXJyb3IgPSBuZXcgSHR0cFJlc3BvbnNlRXJyb3IocmVxdWVzdCwge3N0YXR1cywgbWVzc2FnZSwgZXJyb3J9KTtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzKGh0dHBSZXNwb25zZUVycm9yLnN0YXR1cykuanNvbihodHRwUmVzcG9uc2VFcnJvcik7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ import { ArgumentsHost, ExceptionFilter, HttpException } from "@nestjs/common";
2
+ export declare class HttpExceptionFilter implements ExceptionFilter {
3
+ catch(exception: HttpException, host: ArgumentsHost): void;
4
+ }
@@ -0,0 +1,27 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Catch, HttpException } from "@nestjs/common";
8
+ import { HttpResponseError } from "./HttpResponseError.js";
9
+ let HttpExceptionFilter = class HttpExceptionFilter {
10
+ catch(exception, host) {
11
+ const ctx = host.switchToHttp();
12
+ const response = ctx.getResponse();
13
+ const request = ctx.getRequest();
14
+ const status = exception.getStatus();
15
+ const httpResponseError = new HttpResponseError(request, {
16
+ status,
17
+ message: exception.message,
18
+ error: exception.name
19
+ });
20
+ response.status(httpResponseError.status).json(httpResponseError);
21
+ }
22
+ };
23
+ HttpExceptionFilter = __decorate([
24
+ Catch(HttpException)
25
+ ], HttpExceptionFilter);
26
+ export { HttpExceptionFilter };
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEV4Y2VwdGlvbkZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mYWN0b3J5L2V4Y2VwdGlvbnMvSHR0cEV4Y2VwdGlvbkZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQWdCLEtBQUssRUFBbUIsYUFBYSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLCtCQUE0QjtBQUcvQyxJQUFNLG1CQUFtQixHQUF6QixNQUFNLG1CQUFtQjtJQUM1QixLQUFLLENBQUMsU0FBd0IsRUFBRSxJQUFtQjtRQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBWSxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQVcsQ0FBQztRQUMxQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFckMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRTtZQUNyRCxNQUFNO1lBQ04sT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQzFCLEtBQUssRUFBRSxTQUFTLENBQUMsSUFBSTtTQUN4QixDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FDSixDQUFBO0FBZlksbUJBQW1CO0lBRC9CLEtBQUssQ0FBQyxhQUFhLENBQUM7R0FDUixtQkFBbUIsQ0FlL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FyZ3VtZW50c0hvc3QsIENhdGNoLCBFeGNlcHRpb25GaWx0ZXIsIEh0dHBFeGNlcHRpb259IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHtSZXF1ZXN0LCBSZXNwb25zZX0gZnJvbSBcImV4cHJlc3NcIjtcbmltcG9ydCB7SHR0cFJlc3BvbnNlRXJyb3J9IGZyb20gXCIuL0h0dHBSZXNwb25zZUVycm9yXCI7XG5cbkBDYXRjaChIdHRwRXhjZXB0aW9uKVxuZXhwb3J0IGNsYXNzIEh0dHBFeGNlcHRpb25GaWx0ZXIgaW1wbGVtZW50cyBFeGNlcHRpb25GaWx0ZXIge1xuICAgIGNhdGNoKGV4Y2VwdGlvbjogSHR0cEV4Y2VwdGlvbiwgaG9zdDogQXJndW1lbnRzSG9zdCkge1xuICAgICAgICBjb25zdCBjdHggPSBob3N0LnN3aXRjaFRvSHR0cCgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGN0eC5nZXRSZXNwb25zZTxSZXNwb25zZT4oKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGN0eC5nZXRSZXF1ZXN0PFJlcXVlc3Q+KCk7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGV4Y2VwdGlvbi5nZXRTdGF0dXMoKTtcblxuICAgICAgICBjb25zdCBodHRwUmVzcG9uc2VFcnJvciA9IG5ldyBIdHRwUmVzcG9uc2VFcnJvcihyZXF1ZXN0LCB7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBtZXNzYWdlOiBleGNlcHRpb24ubWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yOiBleGNlcHRpb24ubmFtZVxuICAgICAgICB9KTtcblxuICAgICAgICByZXNwb25zZS5zdGF0dXMoaHR0cFJlc3BvbnNlRXJyb3Iuc3RhdHVzKS5qc29uKGh0dHBSZXNwb25zZUVycm9yKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Request } from "express";
2
+ export declare class HttpResponseError {
3
+ status: number;
4
+ error: string;
5
+ message: string;
6
+ timestamp: string;
7
+ path: string;
8
+ method: string;
9
+ constructor(request: Request, responseError?: {
10
+ status?: number;
11
+ message?: string;
12
+ error?: string;
13
+ });
14
+ }
@@ -0,0 +1,19 @@
1
+ import { HttpStatus } from "@nestjs/common";
2
+ export class HttpResponseError {
3
+ constructor(request, responseError) {
4
+ const status = responseError?.status ?? HttpStatus.INTERNAL_SERVER_ERROR;
5
+ const message = responseError?.message ?? "Internal Server Error";
6
+ const error = (responseError?.error ?? HttpStatus[status] ?? "HTTP_EXCEPTION")
7
+ .toString()
8
+ .toUpperCase();
9
+ Object.assign(this, {
10
+ status,
11
+ message,
12
+ error,
13
+ timestamp: new Date().toISOString(),
14
+ path: request.url,
15
+ method: request.method,
16
+ });
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cFJlc3BvbnNlRXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmFjdG9yeS9leGNlcHRpb25zL0h0dHBSZXNwb25zZUVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1QyxNQUFNLE9BQU8saUJBQWlCO0lBUTdCLFlBQ0MsT0FBZ0IsRUFDaEIsYUFBcUU7UUFFckUsTUFBTSxNQUFNLEdBQUcsYUFBYSxFQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMscUJBQXFCLENBQUM7UUFDekUsTUFBTSxPQUFPLEdBQUcsYUFBYSxFQUFFLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQztRQUNsRSxNQUFNLEtBQUssR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDO2FBQzVFLFFBQVEsRUFBRTthQUNWLFdBQVcsRUFBRSxDQUFDO1FBRWhCLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ25CLE1BQU07WUFDTixPQUFPO1lBQ1AsS0FBSztZQUNMLFNBQVMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUNuQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDakIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1NBQ3RCLENBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlcXVlc3QgfSBmcm9tIFwiZXhwcmVzc1wiO1xuaW1wb3J0IHsgSHR0cFN0YXR1cyB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuXG5leHBvcnQgY2xhc3MgSHR0cFJlc3BvbnNlRXJyb3Ige1xuXHRzdGF0dXMhOiBudW1iZXI7XG5cdGVycm9yITogc3RyaW5nO1xuXHRtZXNzYWdlITogc3RyaW5nO1xuXHR0aW1lc3RhbXAhOiBzdHJpbmc7XG5cdHBhdGghOiBzdHJpbmc7XG5cdG1ldGhvZCE6IHN0cmluZztcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRyZXF1ZXN0OiBSZXF1ZXN0LFxuXHRcdHJlc3BvbnNlRXJyb3I/OiB7IHN0YXR1cz86IG51bWJlcjsgbWVzc2FnZT86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfVxuXHQpIHtcblx0XHRjb25zdCBzdGF0dXMgPSByZXNwb25zZUVycm9yPy5zdGF0dXMgPz8gSHR0cFN0YXR1cy5JTlRFUk5BTF9TRVJWRVJfRVJST1I7XG5cdFx0Y29uc3QgbWVzc2FnZSA9IHJlc3BvbnNlRXJyb3I/Lm1lc3NhZ2UgPz8gXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIjtcblx0XHRjb25zdCBlcnJvciA9IChyZXNwb25zZUVycm9yPy5lcnJvciA/PyBIdHRwU3RhdHVzW3N0YXR1c10gPz8gXCJIVFRQX0VYQ0VQVElPTlwiKVxuXHRcdFx0LnRvU3RyaW5nKClcblx0XHRcdC50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0T2JqZWN0LmFzc2lnbih0aGlzLCB7XG5cdFx0XHRzdGF0dXMsXG5cdFx0XHRtZXNzYWdlLFxuXHRcdFx0ZXJyb3IsXG5cdFx0XHR0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcblx0XHRcdHBhdGg6IHJlcXVlc3QudXJsLFxuXHRcdFx0bWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ import { ArgumentsHost, ExceptionFilter } from "@nestjs/common";
2
+ export declare class NotFoundError extends Error {
3
+ readonly status: number;
4
+ readonly code: string;
5
+ constructor(message?: string);
6
+ }
7
+ export declare class NotFoundExceptionFilter implements ExceptionFilter {
8
+ catch(exception: NotFoundError, host: ArgumentsHost): void;
9
+ }
@@ -0,0 +1,35 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Catch, HttpStatus } from "@nestjs/common";
8
+ import { HttpResponseError } from "./HttpResponseError.js";
9
+ export class NotFoundError extends Error {
10
+ constructor(message = "Resource not found") {
11
+ super(message);
12
+ this.name = "NotFoundError";
13
+ this.status = 404;
14
+ this.code = "NOT_FOUND";
15
+ Object.setPrototypeOf(this, NotFoundError.prototype);
16
+ }
17
+ }
18
+ let NotFoundExceptionFilter = class NotFoundExceptionFilter {
19
+ catch(exception, host) {
20
+ const ctx = host.switchToHttp();
21
+ const response = ctx.getResponse();
22
+ const request = ctx.getRequest();
23
+ const httpResponseError = new HttpResponseError(request, {
24
+ status: HttpStatus.NOT_FOUND,
25
+ message: exception.message,
26
+ error: "NOT_FOUND",
27
+ });
28
+ response.status(httpResponseError.status).json(httpResponseError);
29
+ }
30
+ };
31
+ NotFoundExceptionFilter = __decorate([
32
+ Catch(NotFoundError)
33
+ ], NotFoundExceptionFilter);
34
+ export { NotFoundExceptionFilter };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90Rm91bmRFeGNlcHRpb25GaWx0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmFjdG9yeS9leGNlcHRpb25zL05vdEZvdW5kRXhjZXB0aW9uRmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBaUIsS0FBSyxFQUFtQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsK0JBQTRCO0FBRXhELE1BQU0sT0FBTyxhQUFjLFNBQVEsS0FBSztJQUl2QyxZQUFZLE9BQU8sR0FBRyxvQkFBb0I7UUFDekMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7UUFFeEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRDtBQUdNLElBQU0sdUJBQXVCLEdBQTdCLE1BQU0sdUJBQXVCO0lBQ25DLEtBQUssQ0FBQyxTQUF3QixFQUFFLElBQW1CO1FBQ2xELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFZLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBVyxDQUFDO1FBRTFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUU7WUFDeEQsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQzVCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztZQUMxQixLQUFLLEVBQUUsV0FBVztTQUNsQixDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FDRCxDQUFBO0FBZFksdUJBQXVCO0lBRG5DLEtBQUssQ0FBQyxhQUFhLENBQUM7R0FDUix1QkFBdUIsQ0FjbkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcmd1bWVudHNIb3N0LCBDYXRjaCwgRXhjZXB0aW9uRmlsdGVyLCBIdHRwU3RhdHVzIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBSZXF1ZXN0LCBSZXNwb25zZSB9IGZyb20gXCJleHByZXNzXCI7XG5pbXBvcnQgeyBIdHRwUmVzcG9uc2VFcnJvciB9IGZyb20gXCIuL0h0dHBSZXNwb25zZUVycm9yXCI7XG5cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRyZWFkb25seSBzdGF0dXM6IG51bWJlcjtcblx0cmVhZG9ubHkgY29kZTogc3RyaW5nO1xuXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSBcIlJlc291cmNlIG5vdCBmb3VuZFwiKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpcy5uYW1lID0gXCJOb3RGb3VuZEVycm9yXCI7XG5cdFx0dGhpcy5zdGF0dXMgPSA0MDQ7XG5cdFx0dGhpcy5jb2RlID0gXCJOT1RfRk9VTkRcIjtcblxuXHRcdE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBOb3RGb3VuZEVycm9yLnByb3RvdHlwZSk7XG5cdH1cbn1cblxuQENhdGNoKE5vdEZvdW5kRXJyb3IpXG5leHBvcnQgY2xhc3MgTm90Rm91bmRFeGNlcHRpb25GaWx0ZXIgaW1wbGVtZW50cyBFeGNlcHRpb25GaWx0ZXIge1xuXHRjYXRjaChleGNlcHRpb246IE5vdEZvdW5kRXJyb3IsIGhvc3Q6IEFyZ3VtZW50c0hvc3QpIHtcblx0XHRjb25zdCBjdHggPSBob3N0LnN3aXRjaFRvSHR0cCgpO1xuXHRcdGNvbnN0IHJlc3BvbnNlID0gY3R4LmdldFJlc3BvbnNlPFJlc3BvbnNlPigpO1xuXHRcdGNvbnN0IHJlcXVlc3QgPSBjdHguZ2V0UmVxdWVzdDxSZXF1ZXN0PigpO1xuXG5cdFx0Y29uc3QgaHR0cFJlc3BvbnNlRXJyb3IgPSBuZXcgSHR0cFJlc3BvbnNlRXJyb3IocmVxdWVzdCwge1xuXHRcdFx0c3RhdHVzOiBIdHRwU3RhdHVzLk5PVF9GT1VORCxcblx0XHRcdG1lc3NhZ2U6IGV4Y2VwdGlvbi5tZXNzYWdlLFxuXHRcdFx0ZXJyb3I6IFwiTk9UX0ZPVU5EXCIsXG5cdFx0fSk7XG5cblx0XHRyZXNwb25zZS5zdGF0dXMoaHR0cFJlc3BvbnNlRXJyb3Iuc3RhdHVzKS5qc29uKGh0dHBSZXNwb25zZUVycm9yKTtcblx0fVxufVxuIl19
@@ -0,0 +1,9 @@
1
+ import { ArgumentsHost, ExceptionFilter } from "@nestjs/common";
2
+ export declare class ValidationError extends Error {
3
+ readonly status: number;
4
+ readonly code: string;
5
+ constructor(message?: string);
6
+ }
7
+ export declare class ValidationExceptionFilter implements ExceptionFilter {
8
+ catch(exception: ValidationError, host: ArgumentsHost): void;
9
+ }
@@ -0,0 +1,35 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Catch, HttpStatus } from "@nestjs/common";
8
+ import { HttpResponseError } from "./HttpResponseError.js";
9
+ export class ValidationError extends Error {
10
+ constructor(message = "Validation failed") {
11
+ super(message);
12
+ this.name = "ValidationError";
13
+ this.status = 422;
14
+ this.code = "VALIDATION_ERROR";
15
+ Object.setPrototypeOf(this, ValidationError.prototype);
16
+ }
17
+ }
18
+ let ValidationExceptionFilter = class ValidationExceptionFilter {
19
+ catch(exception, host) {
20
+ const ctx = host.switchToHttp();
21
+ const response = ctx.getResponse();
22
+ const request = ctx.getRequest();
23
+ const httpResponseError = new HttpResponseError(request, {
24
+ status: HttpStatus.UNPROCESSABLE_ENTITY,
25
+ message: exception.message,
26
+ error: "VALIDATION_ERROR"
27
+ });
28
+ response.status(httpResponseError.status).json(httpResponseError);
29
+ }
30
+ };
31
+ ValidationExceptionFilter = __decorate([
32
+ Catch(ValidationError)
33
+ ], ValidationExceptionFilter);
34
+ export { ValidationExceptionFilter };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdGlvbkV4Y2VwdGlvbkZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9mYWN0b3J5L2V4Y2VwdGlvbnMvVmFsaWRhdGlvbkV4Y2VwdGlvbkZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQWdCLEtBQUssRUFBbUIsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFakYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLCtCQUE0QjtBQUV0RCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxLQUFLO0lBSXRDLFlBQVksT0FBTyxHQUFHLG1CQUFtQjtRQUNyQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7UUFFL0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDSjtBQUdNLElBQU0seUJBQXlCLEdBQS9CLE1BQU0seUJBQXlCO0lBQ2xDLEtBQUssQ0FBQyxTQUEwQixFQUFFLElBQW1CO1FBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFZLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBVyxDQUFDO1FBRTFDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxPQUFPLEVBQUU7WUFDckQsTUFBTSxFQUFFLFVBQVUsQ0FBQyxvQkFBb0I7WUFDdkMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPO1lBQzFCLEtBQUssRUFBRSxrQkFBa0I7U0FDNUIsQ0FBQyxDQUFDO1FBRUgsUUFBUSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0NBQ0osQ0FBQTtBQWRZLHlCQUF5QjtJQURyQyxLQUFLLENBQUMsZUFBZSxDQUFDO0dBQ1YseUJBQXlCLENBY3JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcmd1bWVudHNIb3N0LCBDYXRjaCwgRXhjZXB0aW9uRmlsdGVyLCBIdHRwU3RhdHVzfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7UmVxdWVzdCwgUmVzcG9uc2V9IGZyb20gXCJleHByZXNzXCI7XG5pbXBvcnQge0h0dHBSZXNwb25zZUVycm9yfSBmcm9tIFwiLi9IdHRwUmVzcG9uc2VFcnJvclwiO1xuXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGNvZGU6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UgPSBcIlZhbGlkYXRpb24gZmFpbGVkXCIpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiVmFsaWRhdGlvbkVycm9yXCI7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gNDIyO1xuICAgICAgICB0aGlzLmNvZGUgPSBcIlZBTElEQVRJT05fRVJST1JcIjtcblxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgVmFsaWRhdGlvbkVycm9yLnByb3RvdHlwZSk7XG4gICAgfVxufVxuXG5AQ2F0Y2goVmFsaWRhdGlvbkVycm9yKVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25FeGNlcHRpb25GaWx0ZXIgaW1wbGVtZW50cyBFeGNlcHRpb25GaWx0ZXIge1xuICAgIGNhdGNoKGV4Y2VwdGlvbjogVmFsaWRhdGlvbkVycm9yLCBob3N0OiBBcmd1bWVudHNIb3N0KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IGhvc3Quc3dpdGNoVG9IdHRwKCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gY3R4LmdldFJlc3BvbnNlPFJlc3BvbnNlPigpO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY3R4LmdldFJlcXVlc3Q8UmVxdWVzdD4oKTtcblxuICAgICAgICBjb25zdCBodHRwUmVzcG9uc2VFcnJvciA9IG5ldyBIdHRwUmVzcG9uc2VFcnJvcihyZXF1ZXN0LCB7XG4gICAgICAgICAgICBzdGF0dXM6IEh0dHBTdGF0dXMuVU5QUk9DRVNTQUJMRV9FTlRJVFksXG4gICAgICAgICAgICBtZXNzYWdlOiBleGNlcHRpb24ubWVzc2FnZSxcbiAgICAgICAgICAgIGVycm9yOiBcIlZBTElEQVRJT05fRVJST1JcIlxuICAgICAgICB9KTtcblxuICAgICAgICByZXNwb25zZS5zdGF0dXMoaHR0cFJlc3BvbnNlRXJyb3Iuc3RhdHVzKS5qc29uKGh0dHBSZXNwb25zZUVycm9yKTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * from "./AuthorizationExceptionFilter";
2
+ export * from "./ConflictExceptionFilter";
3
+ export * from "./GlobalExceptionFilter";
4
+ export * from "./HttpExceptionFilter";
5
+ export * from "./NotFoundExceptionFilter";
6
+ export * from "./ValidationExceptionFilter";
@@ -0,0 +1,7 @@
1
+ export * from "./AuthorizationExceptionFilter.js";
2
+ export * from "./ConflictExceptionFilter.js";
3
+ export * from "./GlobalExceptionFilter.js";
4
+ export * from "./HttpExceptionFilter.js";
5
+ export * from "./NotFoundExceptionFilter.js";
6
+ export * from "./ValidationExceptionFilter.js";
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmFjdG9yeS9leGNlcHRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtEQUErQztBQUMvQyw2Q0FBMEM7QUFDMUMsMkNBQXdDO0FBQ3hDLHlDQUFzQztBQUN0Qyw2Q0FBMEM7QUFDMUMsK0NBQTRDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vQXV0aG9yaXphdGlvbkV4Y2VwdGlvbkZpbHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ29uZmxpY3RFeGNlcHRpb25GaWx0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0dsb2JhbEV4Y2VwdGlvbkZpbHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vSHR0cEV4Y2VwdGlvbkZpbHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vTm90Rm91bmRFeGNlcHRpb25GaWx0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1ZhbGlkYXRpb25FeGNlcHRpb25GaWx0ZXJcIjsiXX0=
@@ -0,0 +1,4 @@
1
+ export * from "./errors";
2
+ export * from "./exceptions";
3
+ export * from "./openapi";
4
+ export * from "./NestBootstraper";
@@ -0,0 +1,5 @@
1
+ export * from "./errors/index.js";
2
+ export * from "./exceptions/index.js";
3
+ export * from "./openapi/index.js";
4
+ export * from "./NestBootstraper.js";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZmFjdG9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrQ0FBeUI7QUFDekIsc0NBQTZCO0FBQzdCLG1DQUEwQjtBQUMxQixxQ0FBa0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2V4Y2VwdGlvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29wZW5hcGlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL05lc3RCb290c3RyYXBlclwiO1xuIl19
@@ -0,0 +1,9 @@
1
+ import { INestApplication } from "@nestjs/common";
2
+ import { SwaggerOptions } from "./constants";
3
+ export declare class SwaggerBuilder {
4
+ private readonly app;
5
+ private readonly options;
6
+ constructor(app: INestApplication, options: SwaggerOptions);
7
+ private createDocument;
8
+ setupSwagger(): void;
9
+ }
@@ -0,0 +1,42 @@
1
+ import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";
2
+ import { SwaggerCustomUI } from "./SwaggerCustomUI.js";
3
+ import { SWAGGER_UI_CONSTANTS } from "./constants.js";
4
+ export class SwaggerBuilder {
5
+ constructor(app, options) {
6
+ this.app = app;
7
+ this.options = options;
8
+ }
9
+ createDocument() {
10
+ const description = this.options.path
11
+ ? this.options.description +
12
+ "" +
13
+ `<br><br><a href="${this.options.path}/spec.json">OpenAPI JSON Spec</a> | ` +
14
+ `<a href="${this.options.path}/spec.yaml">OpenAPI YAML Spec</a>`
15
+ : this.options.description;
16
+ const config = new DocumentBuilder()
17
+ .setTitle(this.options.title)
18
+ .setDescription(description)
19
+ .setVersion(this.options.version || "0.0.1")
20
+ .addBearerAuth(this.options.auth || SWAGGER_UI_CONSTANTS.auth)
21
+ .build();
22
+ return SwaggerModule.createDocument(this.app, config, {
23
+ extraModels: this.options.extraModels || [],
24
+ });
25
+ }
26
+ setupSwagger() {
27
+ const document = this.createDocument();
28
+ const swaggerUI = new SwaggerCustomUI({
29
+ title: this.options.title,
30
+ path: this.options.path || SWAGGER_UI_CONSTANTS.path,
31
+ persistAuthorization: this.options.persistAuthorization ?? true,
32
+ assetsPath: this.options.assetsPath,
33
+ faviconPath: this.options.faviconFilePath,
34
+ topbarIconPath: this.options.topbarIconFilePath,
35
+ topbarBgColor: this.options.topbarBgColor,
36
+ });
37
+ SwaggerModule.setup(this.options.path || SWAGGER_UI_CONSTANTS.path, this.app, document, {
38
+ ...swaggerUI.getCustomOptions(),
39
+ });
40
+ }
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dhZ2dlckJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmFjdG9yeS9vcGVuYXBpL1N3YWdnZXJCdWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSw2QkFBMEI7QUFDcEQsT0FBTyxFQUFFLG9CQUFvQixFQUFrQix1QkFBb0I7QUFFbkUsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFDbUIsR0FBcUIsRUFDckIsT0FBdUI7UUFEdkIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7SUFDdkMsQ0FBQztJQUVJLGNBQWM7UUFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO1lBQ25DLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVc7Z0JBQ3hCLEVBQUU7Z0JBQ0Ysb0JBQW9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxzQ0FBc0M7Z0JBQzNFLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLG1DQUFtQztZQUNsRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFFN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFlLEVBQUU7YUFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2FBQzVCLGNBQWMsQ0FBQyxXQUFXLENBQUM7YUFDM0IsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQzthQUMzQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDO2FBQzdELEtBQUssRUFBRSxDQUFDO1FBRVgsT0FBTyxhQUFhLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFO1lBQ3BELFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFO1NBQzVDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQztZQUNwQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQ3pCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxJQUFJO1lBQ3BELG9CQUFvQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLElBQUksSUFBSTtZQUMvRCxVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWU7WUFDekMsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCO1lBQy9DLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7U0FDMUMsQ0FBQyxDQUFDO1FBQ0gsYUFBYSxDQUFDLEtBQUssQ0FDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksb0JBQW9CLENBQUMsSUFBSSxFQUM5QyxJQUFJLENBQUMsR0FBRyxFQUNSLFFBQVEsRUFDUjtZQUNFLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixFQUFFO1NBQ2hDLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FPRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElOZXN0QXBwbGljYXRpb24gfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IERvY3VtZW50QnVpbGRlciwgU3dhZ2dlck1vZHVsZSB9IGZyb20gXCJAbmVzdGpzL3N3YWdnZXJcIjtcbmltcG9ydCB7IFN3YWdnZXJDdXN0b21VSSB9IGZyb20gXCIuL1N3YWdnZXJDdXN0b21VSVwiO1xuaW1wb3J0IHsgU1dBR0dFUl9VSV9DT05TVEFOVFMsIFN3YWdnZXJPcHRpb25zIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjbGFzcyBTd2FnZ2VyQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBJTmVzdEFwcGxpY2F0aW9uLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogU3dhZ2dlck9wdGlvbnNcbiAgKSB7fVxuXG4gIHByaXZhdGUgY3JlYXRlRG9jdW1lbnQoKSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLm9wdGlvbnMucGF0aFxuICAgICAgPyB0aGlzLm9wdGlvbnMuZGVzY3JpcHRpb24gK1xuICAgICAgICBcIlwiICtcbiAgICAgICAgYDxicj48YnI+PGEgaHJlZj1cIiR7dGhpcy5vcHRpb25zLnBhdGh9L3NwZWMuanNvblwiPk9wZW5BUEkgSlNPTiBTcGVjPC9hPiB8IGAgK1xuICAgICAgICBgPGEgaHJlZj1cIiR7dGhpcy5vcHRpb25zLnBhdGh9L3NwZWMueWFtbFwiPk9wZW5BUEkgWUFNTCBTcGVjPC9hPmBcbiAgICAgIDogdGhpcy5vcHRpb25zLmRlc2NyaXB0aW9uO1xuXG4gICAgY29uc3QgY29uZmlnID0gbmV3IERvY3VtZW50QnVpbGRlcigpXG4gICAgICAuc2V0VGl0bGUodGhpcy5vcHRpb25zLnRpdGxlKVxuICAgICAgLnNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKVxuICAgICAgLnNldFZlcnNpb24odGhpcy5vcHRpb25zLnZlcnNpb24gfHwgXCIwLjAuMVwiKVxuICAgICAgLmFkZEJlYXJlckF1dGgodGhpcy5vcHRpb25zLmF1dGggfHwgU1dBR0dFUl9VSV9DT05TVEFOVFMuYXV0aClcbiAgICAgIC5idWlsZCgpO1xuXG4gICAgcmV0dXJuIFN3YWdnZXJNb2R1bGUuY3JlYXRlRG9jdW1lbnQodGhpcy5hcHAsIGNvbmZpZywge1xuICAgICAgZXh0cmFNb2RlbHM6IHRoaXMub3B0aW9ucy5leHRyYU1vZGVscyB8fCBbXSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXR1cFN3YWdnZXIoKSB7XG4gICAgY29uc3QgZG9jdW1lbnQgPSB0aGlzLmNyZWF0ZURvY3VtZW50KCk7XG4gICAgY29uc3Qgc3dhZ2dlclVJID0gbmV3IFN3YWdnZXJDdXN0b21VSSh7XG4gICAgICB0aXRsZTogdGhpcy5vcHRpb25zLnRpdGxlLFxuICAgICAgcGF0aDogdGhpcy5vcHRpb25zLnBhdGggfHwgU1dBR0dFUl9VSV9DT05TVEFOVFMucGF0aCxcbiAgICAgIHBlcnNpc3RBdXRob3JpemF0aW9uOiB0aGlzLm9wdGlvbnMucGVyc2lzdEF1dGhvcml6YXRpb24gPz8gdHJ1ZSxcbiAgICAgIGFzc2V0c1BhdGg6IHRoaXMub3B0aW9ucy5hc3NldHNQYXRoLFxuICAgICAgZmF2aWNvblBhdGg6IHRoaXMub3B0aW9ucy5mYXZpY29uRmlsZVBhdGgsXG4gICAgICB0b3BiYXJJY29uUGF0aDogdGhpcy5vcHRpb25zLnRvcGJhckljb25GaWxlUGF0aCxcbiAgICAgIHRvcGJhckJnQ29sb3I6IHRoaXMub3B0aW9ucy50b3BiYXJCZ0NvbG9yLFxuICAgIH0pO1xuICAgIFN3YWdnZXJNb2R1bGUuc2V0dXAoXG4gICAgICB0aGlzLm9wdGlvbnMucGF0aCB8fCBTV0FHR0VSX1VJX0NPTlNUQU5UUy5wYXRoLFxuICAgICAgdGhpcy5hcHAsXG4gICAgICBkb2N1bWVudCxcbiAgICAgIHtcbiAgICAgICAgLi4uc3dhZ2dlclVJLmdldEN1c3RvbU9wdGlvbnMoKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBnZXRWZXJzaW9uKCkge1xuICAvLyAgIC8vIGNvbnN0IHBhY2thZ2VKc29uID0gcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwicGFja2FnZS5qc29uXCIpO1xuICAvLyAgIC8vIGNvbnN0IHt2ZXJzaW9ufSA9IHJlcXVpcmUocGFja2FnZUpzb24pO1xuICAvLyAgIHJldHVybiBcInZlcnNpb25cIjtcbiAgLy8gfVxufVxuIl19
@@ -0,0 +1,24 @@
1
+ export interface SwaggerUIOptions {
2
+ title?: string;
3
+ path?: string;
4
+ persistAuthorization: boolean;
5
+ assetsPath?: string;
6
+ faviconPath?: string;
7
+ topbarIconPath?: string;
8
+ topbarBgColor?: string;
9
+ }
10
+ export declare class SwaggerCustomUI {
11
+ readonly options: SwaggerUIOptions;
12
+ constructor(options: SwaggerUIOptions);
13
+ private customCSS;
14
+ getCustomOptions(): {
15
+ customCss: string;
16
+ swaggerOptions: {
17
+ persistAuthorization: boolean;
18
+ };
19
+ jsonDocumentUrl: string | undefined;
20
+ yamlDocumentUrl: string | undefined;
21
+ customSiteTitle: string | undefined;
22
+ };
23
+ b64(file: string, img?: boolean): string;
24
+ }
@@ -0,0 +1,55 @@
1
+ import { SWAGGER_UI_CONSTANTS } from "./constants.js";
2
+ import { readFileSync } from "fs";
3
+ import * as path from "path";
4
+ export class SwaggerCustomUI {
5
+ // private readonly assetsPath: string = path.join(
6
+ // __dirname,
7
+ // "..",
8
+ // "..",
9
+ // "workdocs",
10
+ // "assets"
11
+ // );
12
+ constructor(options) {
13
+ this.options = {
14
+ ...options,
15
+ };
16
+ }
17
+ customCSS() {
18
+ let css = "";
19
+ if (this.options.topbarIconPath) {
20
+ const img = this.b64(this.options.topbarIconPath);
21
+ css += `.topbar-wrapper { content: url('data:image/png;base64,${img}'); width: 200px; height: auto; }\n`;
22
+ }
23
+ return (css +
24
+ `
25
+ .topbar-wrapper svg { visibility: hidden; }
26
+ .swagger-ui .topbar { background-color: ${this.options.topbarBgColor || SWAGGER_UI_CONSTANTS.topbarBgColor}; }
27
+ `);
28
+ }
29
+ getCustomOptions() {
30
+ const favicon = {};
31
+ if (this.options.faviconPath) {
32
+ favicon["customfavIcon"] = this.b64(this.options.faviconPath, true);
33
+ }
34
+ return {
35
+ customSiteTitle: this.options.title,
36
+ ...favicon,
37
+ customCss: this.customCSS(),
38
+ swaggerOptions: {
39
+ persistAuthorization: this.options.persistAuthorization,
40
+ },
41
+ jsonDocumentUrl: this.options.path
42
+ ? `${this.options.path}/spec.json`
43
+ : undefined,
44
+ yamlDocumentUrl: this.options.path
45
+ ? `${this.options.path}/spec.yaml`
46
+ : undefined,
47
+ };
48
+ }
49
+ b64(file, img = false) {
50
+ const filePath = path.join(this.options.assetsPath || "", file);
51
+ const b64 = readFileSync(filePath, { encoding: "base64" });
52
+ return img ? "data:image/png;base64," + b64 : b64;
53
+ }
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3dhZ2dlckN1c3RvbVVJLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ZhY3Rvcnkvb3BlbmFwaS9Td2FnZ2VyQ3VzdG9tVUkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHVCQUFvQjtBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBWTdCLE1BQU0sT0FBTyxlQUFlO0lBRTFCLG1EQUFtRDtJQUNuRCxlQUFlO0lBQ2YsVUFBVTtJQUNWLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLEtBQUs7SUFFTCxZQUFZLE9BQXlCO1FBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixHQUFHLE9BQU87U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVM7UUFDZixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2xELEdBQUcsSUFBSSx5REFBeUQsR0FBRyxxQ0FBcUMsQ0FBQztRQUMzRyxDQUFDO1FBQ0QsT0FBTyxDQUNMLEdBQUc7WUFDSDs7a0RBRTRDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLG9CQUFvQixDQUFDLGFBQWE7T0FDM0csQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sT0FBTyxHQUF3QixFQUFFLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxPQUFPO1lBQ0wsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztZQUNuQyxHQUFHLE9BQU87WUFDVixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMzQixjQUFjLEVBQUU7Z0JBQ2Qsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0I7YUFDeEQ7WUFDRCxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2dCQUNoQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksWUFBWTtnQkFDbEMsQ0FBQyxDQUFDLFNBQVM7WUFDYixlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2dCQUNoQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksWUFBWTtnQkFDbEMsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUFZLEVBQUUsTUFBZSxLQUFLO1FBQ3BDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMzRCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU1dBR0dFUl9VSV9DT05TVEFOVFMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN3YWdnZXJVSU9wdGlvbnMge1xuICB0aXRsZT86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbiAgcGVyc2lzdEF1dGhvcml6YXRpb246IGJvb2xlYW47XG4gIGFzc2V0c1BhdGg/OiBzdHJpbmc7XG4gIGZhdmljb25QYXRoPzogc3RyaW5nO1xuICB0b3BiYXJJY29uUGF0aD86IHN0cmluZztcbiAgdG9wYmFyQmdDb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFN3YWdnZXJDdXN0b21VSSB7XG4gIHJlYWRvbmx5IG9wdGlvbnM6IFN3YWdnZXJVSU9wdGlvbnM7XG4gIC8vIHByaXZhdGUgcmVhZG9ubHkgYXNzZXRzUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAvLyAgIF9fZGlybmFtZSxcbiAgLy8gICBcIi4uXCIsXG4gIC8vICAgXCIuLlwiLFxuICAvLyAgIFwid29ya2RvY3NcIixcbiAgLy8gICBcImFzc2V0c1wiXG4gIC8vICk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogU3dhZ2dlclVJT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3VzdG9tQ1NTKCkge1xuICAgIGxldCBjc3MgPSBcIlwiO1xuICAgIGlmICh0aGlzLm9wdGlvbnMudG9wYmFySWNvblBhdGgpIHtcbiAgICAgIGNvbnN0IGltZyA9IHRoaXMuYjY0KHRoaXMub3B0aW9ucy50b3BiYXJJY29uUGF0aCk7XG4gICAgICBjc3MgKz0gYC50b3BiYXItd3JhcHBlciB7IGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7aW1nfScpOyB3aWR0aDogMjAwcHg7IGhlaWdodDogYXV0bzsgfVxcbmA7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBjc3MgK1xuICAgICAgYFxuICAgICAgICAudG9wYmFyLXdyYXBwZXIgc3ZnIHsgdmlzaWJpbGl0eTogaGlkZGVuOyB9XG4gICAgICAgIC5zd2FnZ2VyLXVpIC50b3BiYXIgeyBiYWNrZ3JvdW5kLWNvbG9yOiAke3RoaXMub3B0aW9ucy50b3BiYXJCZ0NvbG9yIHx8IFNXQUdHRVJfVUlfQ09OU1RBTlRTLnRvcGJhckJnQ29sb3J9OyB9XG4gICAgICBgXG4gICAgKTtcbiAgfVxuXG4gIGdldEN1c3RvbU9wdGlvbnMoKSB7XG4gICAgY29uc3QgZmF2aWNvbjogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZmF2aWNvblBhdGgpIHtcbiAgICAgIGZhdmljb25bXCJjdXN0b21mYXZJY29uXCJdID0gdGhpcy5iNjQodGhpcy5vcHRpb25zLmZhdmljb25QYXRoLCB0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VzdG9tU2l0ZVRpdGxlOiB0aGlzLm9wdGlvbnMudGl0bGUsXG4gICAgICAuLi5mYXZpY29uLFxuICAgICAgY3VzdG9tQ3NzOiB0aGlzLmN1c3RvbUNTUygpLFxuICAgICAgc3dhZ2dlck9wdGlvbnM6IHtcbiAgICAgICAgcGVyc2lzdEF1dGhvcml6YXRpb246IHRoaXMub3B0aW9ucy5wZXJzaXN0QXV0aG9yaXphdGlvbixcbiAgICAgIH0sXG4gICAgICBqc29uRG9jdW1lbnRVcmw6IHRoaXMub3B0aW9ucy5wYXRoXG4gICAgICAgID8gYCR7dGhpcy5vcHRpb25zLnBhdGh9L3NwZWMuanNvbmBcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB5YW1sRG9jdW1lbnRVcmw6IHRoaXMub3B0aW9ucy5wYXRoXG4gICAgICAgID8gYCR7dGhpcy5vcHRpb25zLnBhdGh9L3NwZWMueWFtbGBcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIGI2NChmaWxlOiBzdHJpbmcsIGltZzogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLmFzc2V0c1BhdGggfHwgXCJcIiwgZmlsZSk7XG4gICAgY29uc3QgYjY0ID0gcmVhZEZpbGVTeW5jKGZpbGVQYXRoLCB7IGVuY29kaW5nOiBcImJhc2U2NFwiIH0pO1xuICAgIHJldHVybiBpbWcgPyBcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxcIiArIGI2NCA6IGI2NDtcbiAgfVxufVxuIl19
@@ -0,0 +1,16 @@
1
+ import { SecuritySchemeObject } from "@nestjs/swagger/dist/interfaces/open-api-spec.interface";
2
+ import { Constructor } from "@decaf-ts/decoration";
3
+ export interface SwaggerOptions {
4
+ title: string;
5
+ description: string;
6
+ version?: string;
7
+ assetsPath?: string;
8
+ faviconFilePath?: string;
9
+ topbarIconFilePath?: string;
10
+ persistAuthorization?: boolean;
11
+ path: string;
12
+ auth?: SecuritySchemeObject;
13
+ topbarBgColor?: string;
14
+ extraModels?: Constructor[];
15
+ }
16
+ export declare const SWAGGER_UI_CONSTANTS: SwaggerOptions;
@@ -0,0 +1,19 @@
1
+ export const SWAGGER_UI_CONSTANTS = {
2
+ title: "Swagger | OpenAPI Specification (OAS)",
3
+ description: "Standardized format for describing RESTful APIs",
4
+ version: "0.0.1",
5
+ path: "docs",
6
+ faviconFilePath: "",
7
+ topbarIconFilePath: "",
8
+ auth: {
9
+ type: "http",
10
+ scheme: "bearer",
11
+ bearerFormat: "JWT",
12
+ name: "Authorization",
13
+ description: "Enter JWT token",
14
+ in: "header",
15
+ },
16
+ persistAuthorization: true,
17
+ topbarBgColor: "#000000",
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2ZhY3Rvcnkvb3BlbmFwaS9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBaUJBLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFtQjtJQUNsRCxLQUFLLEVBQUUsdUNBQXVDO0lBQzlDLFdBQVcsRUFBRSxpREFBaUQ7SUFDOUQsT0FBTyxFQUFFLE9BQU87SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixlQUFlLEVBQUUsRUFBRTtJQUNuQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLElBQUksRUFBRTtRQUNKLElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTSxFQUFFLFFBQVE7UUFDaEIsWUFBWSxFQUFFLEtBQUs7UUFDbkIsSUFBSSxFQUFFLGVBQWU7UUFDckIsV0FBVyxFQUFFLGlCQUFpQjtRQUM5QixFQUFFLEVBQUUsUUFBUTtLQUNiO0lBQ0Qsb0JBQW9CLEVBQUUsSUFBSTtJQUMxQixhQUFhLEVBQUUsU0FBUztDQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VjdXJpdHlTY2hlbWVPYmplY3QgfSBmcm9tIFwiQG5lc3Rqcy9zd2FnZ2VyL2Rpc3QvaW50ZXJmYWNlcy9vcGVuLWFwaS1zcGVjLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcblxuZXhwb3J0IGludGVyZmFjZSBTd2FnZ2VyT3B0aW9ucyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIGFzc2V0c1BhdGg/OiBzdHJpbmc7XG4gIGZhdmljb25GaWxlUGF0aD86IHN0cmluZztcbiAgdG9wYmFySWNvbkZpbGVQYXRoPzogc3RyaW5nO1xuICBwZXJzaXN0QXV0aG9yaXphdGlvbj86IGJvb2xlYW47XG4gIHBhdGg6IHN0cmluZztcbiAgYXV0aD86IFNlY3VyaXR5U2NoZW1lT2JqZWN0O1xuICB0b3BiYXJCZ0NvbG9yPzogc3RyaW5nO1xuICBleHRyYU1vZGVscz86IENvbnN0cnVjdG9yW107XG59XG5cbmV4cG9ydCBjb25zdCBTV0FHR0VSX1VJX0NPTlNUQU5UUzogU3dhZ2dlck9wdGlvbnMgPSB7XG4gIHRpdGxlOiBcIlN3YWdnZXIgfCBPcGVuQVBJIFNwZWNpZmljYXRpb24gKE9BUylcIixcbiAgZGVzY3JpcHRpb246IFwiU3RhbmRhcmRpemVkIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBSRVNUZnVsIEFQSXNcIixcbiAgdmVyc2lvbjogXCIwLjAuMVwiLFxuICBwYXRoOiBcImRvY3NcIixcbiAgZmF2aWNvbkZpbGVQYXRoOiBcIlwiLFxuICB0b3BiYXJJY29uRmlsZVBhdGg6IFwiXCIsXG4gIGF1dGg6IHtcbiAgICB0eXBlOiBcImh0dHBcIixcbiAgICBzY2hlbWU6IFwiYmVhcmVyXCIsXG4gICAgYmVhcmVyRm9ybWF0OiBcIkpXVFwiLFxuICAgIG5hbWU6IFwiQXV0aG9yaXphdGlvblwiLFxuICAgIGRlc2NyaXB0aW9uOiBcIkVudGVyIEpXVCB0b2tlblwiLFxuICAgIGluOiBcImhlYWRlclwiLFxuICB9LFxuICBwZXJzaXN0QXV0aG9yaXphdGlvbjogdHJ1ZSxcbiAgdG9wYmFyQmdDb2xvcjogXCIjMDAwMDAwXCIsXG59O1xuIl19
@@ -0,0 +1 @@
1
+ export * from "./SwaggerBuilder";
@@ -0,0 +1,2 @@
1
+ export * from "./SwaggerBuilder.js";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmFjdG9yeS9vcGVuYXBpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL1N3YWdnZXJCdWlsZGVyXCI7Il19
@@ -27,11 +27,12 @@ export * from "./module";
27
27
  export * from "./RepoFactory";
28
28
  export * from "./types";
29
29
  export * from "./utils";
30
+ export * from "./factory";
30
31
  /**
31
32
  * Represents the current version of the ts-workspace module.
32
33
  * The actual version number is replaced during the build process.
33
34
  * @constant
34
35
  * @type {string}
35
36
  */
36
- export declare const VERSION = "0.0.4";
37
+ export declare const VERSION = "0.0.5";
37
38
  export declare const PACKAGE_NAME = "##PACKAGE_NAME##";
package/lib/esm/index.js CHANGED
@@ -28,13 +28,14 @@ export * from "./module.js";
28
28
  export * from "./RepoFactory.js";
29
29
  export * from "./types.js";
30
30
  export * from "./utils.js";
31
+ export * from "./factory/index.js";
31
32
  /**
32
33
  * Represents the current version of the ts-workspace module.
33
34
  * The actual version number is replaced during the build process.
34
35
  * @constant
35
36
  * @type {string}
36
37
  */
37
- export const VERSION = "0.0.4";
38
+ export const VERSION = "0.0.5";
38
39
  export const PACKAGE_NAME = "##PACKAGE_NAME##";
39
40
  Metadata.registerLibrary(PACKAGE_NAME, VERSION);
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELHlCQUFzQjtBQUV0QixzQ0FBNkI7QUFDN0IsK0JBQTRCO0FBQzVCLGdDQUE2QjtBQUM3Qiw0QkFBeUI7QUFDekIsaUNBQThCO0FBQzlCLDJCQUF3QjtBQUN4QiwyQkFBd0I7QUFFeEI7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztBQUUvQyxRQUFRLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBmb3ItbmVzdFxuICogQGRlc2NyaXB0aW9uIFRoaXMgbW9kdWxlIHNlcnZlcyBhcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIHRzLXdvcmtzcGFjZSBsaWJyYXJ5LiBJdCBhZ2dyZWdhdGVzIGFuZCBleHBvcnRzXG4gKiBmdW5jdGlvbmFsaXR5IGZyb20gdmFyaW91cyBzdWJtb2R1bGVzIGFuZCB1dGlsaXRpZXMgd2l0aGluIHRoZSBwcm9qZWN0LlxuICpcbiAqIFRoZSBtb2R1bGUgaW5jbHVkZXM6XG4gKiAxLiBVdGlsaXR5IGZ1bmN0aW9ucyBhbmQgdHlwZXMgZnJvbSB0aGUgXCIuL3V0aWxzXCIgZGlyZWN0b3J5OlxuICogICAgLSBUaGVzZSBsaWtlbHkgY29udGFpbiBoZWxwZXIgZnVuY3Rpb25zLCBjb21tb24gdHlwZXMsIGFuZCBzaGFyZWQgZnVuY3Rpb25hbGl0eSB1c2VkIHRocm91Z2hvdXQgdGhlIHByb2plY3QuXG4gKiAgICAtIE1heSBpbmNsdWRlIG9wZXJhdGlvbnMgZm9yIGRhdGEgbWFuaXB1bGF0aW9uLCB0eXBlIGNoZWNraW5nLCBvciBvdGhlciBnZW5lcmFsLXB1cnBvc2UgdXRpbGl0aWVzLlxuICpcbiAqIDIuIEEgbmFtZXNwYWNlIGFuZCByZWxhdGVkIHR5cGVzIGZyb20gdGhlIFwiLi9uYW1lc3BhY2VcIiBkaXJlY3Rvcnk6XG4gKiAgICAtIFRoaXMgY291bGQgY29udGFpbiBkb21haW4tc3BlY2lmaWMgY29kZSBvciBhIGNvbGxlY3Rpb24gb2YgcmVsYXRlZCBmdW5jdGlvbmFsaXR5LlxuICogICAgLSBNaWdodCBpbmNsdWRlIGludGVyZmFjZXMsIHR5cGVzLCBvciBjbGFzc2VzIHRoYXQgcmVwcmVzZW50IGNvcmUgY29uY2VwdHMgaW4gdGhlIGxpYnJhcnkuXG4gKlxuICogMy4gQSBWRVJTSU9OIGNvbnN0YW50OlxuICogICAgLSBSZXByZXNlbnRzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIG1vZHVsZS5cbiAqICAgIC0gVXNlZnVsIGZvciB2ZXJzaW9uIGNoZWNraW5nIGFuZCBjb21wYXRpYmlsaXR5IHB1cnBvc2VzLlxuICpcbiAqIFRoaXMgc3RydWN0dXJlIHByb3ZpZGVzIGEgY2xlYW4gYW5kIG9yZ2FuaXplZCBleHBvcnQgb2YgdGhlIG1vZHVsZSdzIGZ1bmN0aW9uYWxpdHksIGFsbG93aW5nIGNvbnN1bWVyc1xuICogdG8gZWFzaWx5IGltcG9ydCBhbmQgdXNlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IGFzIG5lZWRlZC5cbiAqL1xuXG5pbXBvcnQgeyBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IFwiLi9kZWNvcmF0aW9uXCI7XG5cbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdGlvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kdWxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9SZXBvRmFjdG9yeVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB0cy13b3Jrc3BhY2UgbW9kdWxlLlxuICogVGhlIGFjdHVhbCB2ZXJzaW9uIG51bWJlciBpcyByZXBsYWNlZCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuXG4gKiBAY29uc3RhbnRcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9IFwiIyNQQUNLQUdFX05BTUUjI1wiO1xuXG5NZXRhZGF0YS5yZWdpc3RlckxpYnJhcnkoUEFDS0FHRV9OQU1FLCBWRVJTSU9OKTtcbiJdfQ==
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELHlCQUFzQjtBQUV0QixzQ0FBNkI7QUFDN0IsK0JBQTRCO0FBQzVCLGdDQUE2QjtBQUM3Qiw0QkFBeUI7QUFDekIsaUNBQThCO0FBQzlCLDJCQUF3QjtBQUN4QiwyQkFBd0I7QUFDeEIsbUNBQTBCO0FBRTFCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7QUFFL0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgZm9yLW5lc3RcbiAqIEBkZXNjcmlwdGlvbiBUaGlzIG1vZHVsZSBzZXJ2ZXMgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB0cy13b3Jrc3BhY2UgbGlicmFyeS4gSXQgYWdncmVnYXRlcyBhbmQgZXhwb3J0c1xuICogZnVuY3Rpb25hbGl0eSBmcm9tIHZhcmlvdXMgc3VibW9kdWxlcyBhbmQgdXRpbGl0aWVzIHdpdGhpbiB0aGUgcHJvamVjdC5cbiAqXG4gKiBUaGUgbW9kdWxlIGluY2x1ZGVzOlxuICogMS4gVXRpbGl0eSBmdW5jdGlvbnMgYW5kIHR5cGVzIGZyb20gdGhlIFwiLi91dGlsc1wiIGRpcmVjdG9yeTpcbiAqICAgIC0gVGhlc2UgbGlrZWx5IGNvbnRhaW4gaGVscGVyIGZ1bmN0aW9ucywgY29tbW9uIHR5cGVzLCBhbmQgc2hhcmVkIGZ1bmN0aW9uYWxpdHkgdXNlZCB0aHJvdWdob3V0IHRoZSBwcm9qZWN0LlxuICogICAgLSBNYXkgaW5jbHVkZSBvcGVyYXRpb25zIGZvciBkYXRhIG1hbmlwdWxhdGlvbiwgdHlwZSBjaGVja2luZywgb3Igb3RoZXIgZ2VuZXJhbC1wdXJwb3NlIHV0aWxpdGllcy5cbiAqXG4gKiAyLiBBIG5hbWVzcGFjZSBhbmQgcmVsYXRlZCB0eXBlcyBmcm9tIHRoZSBcIi4vbmFtZXNwYWNlXCIgZGlyZWN0b3J5OlxuICogICAgLSBUaGlzIGNvdWxkIGNvbnRhaW4gZG9tYWluLXNwZWNpZmljIGNvZGUgb3IgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS5cbiAqICAgIC0gTWlnaHQgaW5jbHVkZSBpbnRlcmZhY2VzLCB0eXBlcywgb3IgY2xhc3NlcyB0aGF0IHJlcHJlc2VudCBjb3JlIGNvbmNlcHRzIGluIHRoZSBsaWJyYXJ5LlxuICpcbiAqIDMuIEEgVkVSU0lPTiBjb25zdGFudDpcbiAqICAgIC0gUmVwcmVzZW50cyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUuXG4gKiAgICAtIFVzZWZ1bCBmb3IgdmVyc2lvbiBjaGVja2luZyBhbmQgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbiAqXG4gKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBhIGNsZWFuIGFuZCBvcmdhbml6ZWQgZXhwb3J0IG9mIHRoZSBtb2R1bGUncyBmdW5jdGlvbmFsaXR5LCBhbGxvd2luZyBjb25zdW1lcnNcbiAqIHRvIGVhc2lseSBpbXBvcnQgYW5kIHVzZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbGlicmFyeSBhcyBuZWVkZWQuXG4gKi9cblxuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCBcIi4vZGVjb3JhdGlvblwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmVwb0ZhY3RvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmFjdG9yeVwiO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgdHMtd29ya3NwYWNlIG1vZHVsZS5cbiAqIFRoZSBhY3R1YWwgdmVyc2lvbiBudW1iZXIgaXMgcmVwbGFjZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLlxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSBcIiMjUEFDS0FHRV9OQU1FIyNcIjtcblxuTWV0YWRhdGEucmVnaXN0ZXJMaWJyYXJ5KFBBQ0tBR0VfTkFNRSwgVkVSU0lPTik7XG4iXX0=