@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.
- package/dist/for-nest.cjs +573 -6
- package/dist/for-nest.esm.cjs +549 -6
- package/lib/esm/factory/NestBootstraper.d.ts +214 -0
- package/lib/esm/factory/NestBootstraper.js +269 -0
- package/lib/esm/factory/errors/cors.d.ts +4 -0
- package/lib/esm/factory/errors/cors.js +7 -0
- package/lib/esm/factory/errors/index.d.ts +1 -0
- package/lib/esm/factory/errors/index.js +2 -0
- package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.d.ts +9 -0
- package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.js +35 -0
- package/lib/esm/factory/exceptions/ConflictExceptionFilter.d.ts +9 -0
- package/lib/esm/factory/exceptions/ConflictExceptionFilter.js +35 -0
- package/lib/esm/factory/exceptions/GlobalExceptionFilter.d.ts +4 -0
- package/lib/esm/factory/exceptions/GlobalExceptionFilter.js +35 -0
- package/lib/esm/factory/exceptions/HttpExceptionFilter.d.ts +4 -0
- package/lib/esm/factory/exceptions/HttpExceptionFilter.js +27 -0
- package/lib/esm/factory/exceptions/HttpResponseError.d.ts +14 -0
- package/lib/esm/factory/exceptions/HttpResponseError.js +19 -0
- package/lib/esm/factory/exceptions/NotFoundExceptionFilter.d.ts +9 -0
- package/lib/esm/factory/exceptions/NotFoundExceptionFilter.js +35 -0
- package/lib/esm/factory/exceptions/ValidationExceptionFilter.d.ts +9 -0
- package/lib/esm/factory/exceptions/ValidationExceptionFilter.js +35 -0
- package/lib/esm/factory/exceptions/index.d.ts +6 -0
- package/lib/esm/factory/exceptions/index.js +7 -0
- package/lib/esm/factory/index.d.ts +4 -0
- package/lib/esm/factory/index.js +5 -0
- package/lib/esm/factory/openapi/SwaggerBuilder.d.ts +9 -0
- package/lib/esm/factory/openapi/SwaggerBuilder.js +42 -0
- package/lib/esm/factory/openapi/SwaggerCustomUI.d.ts +24 -0
- package/lib/esm/factory/openapi/SwaggerCustomUI.js +55 -0
- package/lib/esm/factory/openapi/constants.d.ts +16 -0
- package/lib/esm/factory/openapi/constants.js +19 -0
- package/lib/esm/factory/openapi/index.d.ts +1 -0
- package/lib/esm/factory/openapi/index.js +2 -0
- package/lib/esm/index.d.ts +2 -1
- package/lib/esm/index.js +3 -2
- package/lib/factory/NestBootstraper.cjs +273 -0
- package/lib/factory/NestBootstraper.d.ts +214 -0
- package/lib/factory/errors/cors.cjs +11 -0
- package/lib/factory/errors/cors.d.ts +4 -0
- package/lib/factory/errors/index.cjs +18 -0
- package/lib/factory/errors/index.d.ts +1 -0
- package/lib/factory/exceptions/AuthorizationExceptionFilter.cjs +39 -0
- package/lib/factory/exceptions/AuthorizationExceptionFilter.d.ts +9 -0
- package/lib/factory/exceptions/ConflictExceptionFilter.cjs +39 -0
- package/lib/factory/exceptions/ConflictExceptionFilter.d.ts +9 -0
- package/lib/factory/exceptions/GlobalExceptionFilter.cjs +38 -0
- package/lib/factory/exceptions/GlobalExceptionFilter.d.ts +4 -0
- package/lib/factory/exceptions/HttpExceptionFilter.cjs +30 -0
- package/lib/factory/exceptions/HttpExceptionFilter.d.ts +4 -0
- package/lib/factory/exceptions/HttpResponseError.cjs +23 -0
- package/lib/factory/exceptions/HttpResponseError.d.ts +14 -0
- package/lib/factory/exceptions/NotFoundExceptionFilter.cjs +39 -0
- package/lib/factory/exceptions/NotFoundExceptionFilter.d.ts +9 -0
- package/lib/factory/exceptions/ValidationExceptionFilter.cjs +39 -0
- package/lib/factory/exceptions/ValidationExceptionFilter.d.ts +9 -0
- package/lib/factory/exceptions/index.cjs +23 -0
- package/lib/factory/exceptions/index.d.ts +6 -0
- package/lib/factory/index.cjs +21 -0
- package/lib/factory/index.d.ts +4 -0
- package/lib/factory/openapi/SwaggerBuilder.cjs +46 -0
- package/lib/factory/openapi/SwaggerBuilder.d.ts +9 -0
- package/lib/factory/openapi/SwaggerCustomUI.cjs +92 -0
- package/lib/factory/openapi/SwaggerCustomUI.d.ts +24 -0
- package/lib/factory/openapi/constants.cjs +22 -0
- package/lib/factory/openapi/constants.d.ts +16 -0
- package/lib/factory/openapi/index.cjs +18 -0
- package/lib/factory/openapi/index.d.ts +1 -0
- package/lib/index.cjs +3 -2
- package/lib/index.d.ts +2 -1
- 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,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,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,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
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
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,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELHlCQUFzQjtBQUV0QixzQ0FBNkI7QUFDN0IsK0JBQTRCO0FBQzVCLGdDQUE2QjtBQUM3Qiw0QkFBeUI7QUFDekIsaUNBQThCO0FBQzlCLDJCQUF3QjtBQUN4QiwyQkFBd0I7QUFDeEIsbUNBQTBCO0FBRTFCOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQztBQUNyQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUM7QUFFL0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgZm9yLW5lc3RcbiAqIEBkZXNjcmlwdGlvbiBUaGlzIG1vZHVsZSBzZXJ2ZXMgYXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSB0cy13b3Jrc3BhY2UgbGlicmFyeS4gSXQgYWdncmVnYXRlcyBhbmQgZXhwb3J0c1xuICogZnVuY3Rpb25hbGl0eSBmcm9tIHZhcmlvdXMgc3VibW9kdWxlcyBhbmQgdXRpbGl0aWVzIHdpdGhpbiB0aGUgcHJvamVjdC5cbiAqXG4gKiBUaGUgbW9kdWxlIGluY2x1ZGVzOlxuICogMS4gVXRpbGl0eSBmdW5jdGlvbnMgYW5kIHR5cGVzIGZyb20gdGhlIFwiLi91dGlsc1wiIGRpcmVjdG9yeTpcbiAqICAgIC0gVGhlc2UgbGlrZWx5IGNvbnRhaW4gaGVscGVyIGZ1bmN0aW9ucywgY29tbW9uIHR5cGVzLCBhbmQgc2hhcmVkIGZ1bmN0aW9uYWxpdHkgdXNlZCB0aHJvdWdob3V0IHRoZSBwcm9qZWN0LlxuICogICAgLSBNYXkgaW5jbHVkZSBvcGVyYXRpb25zIGZvciBkYXRhIG1hbmlwdWxhdGlvbiwgdHlwZSBjaGVja2luZywgb3Igb3RoZXIgZ2VuZXJhbC1wdXJwb3NlIHV0aWxpdGllcy5cbiAqXG4gKiAyLiBBIG5hbWVzcGFjZSBhbmQgcmVsYXRlZCB0eXBlcyBmcm9tIHRoZSBcIi4vbmFtZXNwYWNlXCIgZGlyZWN0b3J5OlxuICogICAgLSBUaGlzIGNvdWxkIGNvbnRhaW4gZG9tYWluLXNwZWNpZmljIGNvZGUgb3IgYSBjb2xsZWN0aW9uIG9mIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS5cbiAqICAgIC0gTWlnaHQgaW5jbHVkZSBpbnRlcmZhY2VzLCB0eXBlcywgb3IgY2xhc3NlcyB0aGF0IHJlcHJlc2VudCBjb3JlIGNvbmNlcHRzIGluIHRoZSBsaWJyYXJ5LlxuICpcbiAqIDMuIEEgVkVSU0lPTiBjb25zdGFudDpcbiAqICAgIC0gUmVwcmVzZW50cyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUuXG4gKiAgICAtIFVzZWZ1bCBmb3IgdmVyc2lvbiBjaGVja2luZyBhbmQgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy5cbiAqXG4gKiBUaGlzIHN0cnVjdHVyZSBwcm92aWRlcyBhIGNsZWFuIGFuZCBvcmdhbml6ZWQgZXhwb3J0IG9mIHRoZSBtb2R1bGUncyBmdW5jdGlvbmFsaXR5LCBhbGxvd2luZyBjb25zdW1lcnNcbiAqIHRvIGVhc2lseSBpbXBvcnQgYW5kIHVzZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgbGlicmFyeSBhcyBuZWVkZWQuXG4gKi9cblxuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCBcIi4vZGVjb3JhdGlvblwiO1xuXG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlY29yYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZHVsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vUmVwb0ZhY3RvcnlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmFjdG9yeVwiO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgdHMtd29ya3NwYWNlIG1vZHVsZS5cbiAqIFRoZSBhY3R1YWwgdmVyc2lvbiBudW1iZXIgaXMgcmVwbGFjZWQgZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzLlxuICogQGNvbnN0YW50XG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX05BTUUgPSBcIiMjUEFDS0FHRV9OQU1FIyNcIjtcblxuTWV0YWRhdGEucmVnaXN0ZXJMaWJyYXJ5KFBBQ0tBR0VfTkFNRSwgVkVSU0lPTik7XG4iXX0=
|