@nestia/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/lib/decorators/EncryptedBody.d.ts +22 -0
- package/lib/decorators/EncryptedBody.js +125 -0
- package/lib/decorators/EncryptedBody.js.map +1 -0
- package/lib/decorators/EncryptedController.d.ts +31 -0
- package/lib/decorators/EncryptedController.js +42 -0
- package/lib/decorators/EncryptedController.js.map +1 -0
- package/lib/decorators/EncryptedModule.d.ts +48 -0
- package/lib/decorators/EncryptedModule.js +270 -0
- package/lib/decorators/EncryptedModule.js.map +1 -0
- package/lib/decorators/EncryptedRoute.d.ts +78 -0
- package/lib/decorators/EncryptedRoute.js +191 -0
- package/lib/decorators/EncryptedRoute.js.map +1 -0
- package/lib/decorators/PlainBody.d.ts +22 -0
- package/lib/decorators/PlainBody.js +83 -0
- package/lib/decorators/PlainBody.js.map +1 -0
- package/lib/decorators/TypedBody.d.ts +14 -0
- package/lib/decorators/TypedBody.js +93 -0
- package/lib/decorators/TypedBody.js.map +1 -0
- package/lib/decorators/TypedParam.d.ts +25 -0
- package/lib/decorators/TypedParam.js +62 -0
- package/lib/decorators/TypedParam.js.map +1 -0
- package/lib/decorators/TypedRoute.d.ts +71 -0
- package/lib/decorators/TypedRoute.js +159 -0
- package/lib/decorators/TypedRoute.js.map +1 -0
- package/lib/decorators/internal/EncryptedConstant.d.ts +1 -0
- package/lib/decorators/internal/EncryptedConstant.js +8 -0
- package/lib/decorators/internal/EncryptedConstant.js.map +1 -0
- package/lib/decorators/internal/get_path_and_stringify.d.ts +1 -0
- package/lib/decorators/internal/get_path_and_stringify.js +75 -0
- package/lib/decorators/internal/get_path_and_stringify.js.map +1 -0
- package/lib/decorators/internal/headers_to_object.d.ts +1 -0
- package/lib/decorators/internal/headers_to_object.js +53 -0
- package/lib/decorators/internal/headers_to_object.js.map +1 -0
- package/lib/decorators/internal/route_error.d.ts +1 -0
- package/lib/decorators/internal/route_error.js +90 -0
- package/lib/decorators/internal/route_error.js.map +1 -0
- package/lib/decorators/internal/validate_request_body.d.ts +2 -0
- package/lib/decorators/internal/validate_request_body.js +56 -0
- package/lib/decorators/internal/validate_request_body.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +32 -0
- package/lib/index.js.map +1 -0
- package/lib/module.d.ts +9 -0
- package/lib/module.js +26 -0
- package/lib/module.js.map +1 -0
- package/lib/options/INestiaTransformOptions.d.ts +5 -0
- package/lib/options/INestiaTransformOptions.js +3 -0
- package/lib/options/INestiaTransformOptions.js.map +1 -0
- package/lib/options/INestiaTransformProject.d.ts +5 -0
- package/lib/options/INestiaTransformProject.js +3 -0
- package/lib/options/INestiaTransformProject.js.map +1 -0
- package/lib/options/IRequestBodyValidator.d.ts +16 -0
- package/lib/options/IRequestBodyValidator.js +3 -0
- package/lib/options/IRequestBodyValidator.js.map +1 -0
- package/lib/options/IResponseBodyStringifier.d.ts +20 -0
- package/lib/options/IResponseBodyStringifier.js +3 -0
- package/lib/options/IResponseBodyStringifier.js.map +1 -0
- package/lib/transform.d.ts +3 -0
- package/lib/transform.js +21 -0
- package/lib/transform.js.map +1 -0
- package/lib/transformers/BodyTransformer.d.ts +5 -0
- package/lib/transformers/BodyTransformer.js +69 -0
- package/lib/transformers/BodyTransformer.js.map +1 -0
- package/lib/transformers/FileTransformer.d.ts +5 -0
- package/lib/transformers/FileTransformer.js +33 -0
- package/lib/transformers/FileTransformer.js.map +1 -0
- package/lib/transformers/MethodTransformer.d.ts +5 -0
- package/lib/transformers/MethodTransformer.js +55 -0
- package/lib/transformers/MethodTransformer.js.map +1 -0
- package/lib/transformers/NodeTransformer.d.ts +5 -0
- package/lib/transformers/NodeTransformer.js +21 -0
- package/lib/transformers/NodeTransformer.js.map +1 -0
- package/lib/transformers/ParameterTransformer.d.ts +5 -0
- package/lib/transformers/ParameterTransformer.js +31 -0
- package/lib/transformers/ParameterTransformer.js.map +1 -0
- package/lib/transformers/RouteTransformer.d.ts +5 -0
- package/lib/transformers/RouteTransformer.js +115 -0
- package/lib/transformers/RouteTransformer.js.map +1 -0
- package/lib/typings/Creator.d.ts +3 -0
- package/lib/typings/Creator.js +3 -0
- package/lib/typings/Creator.js.map +1 -0
- package/lib/utils/ExceptionManager.d.ts +64 -0
- package/lib/utils/ExceptionManager.js +113 -0
- package/lib/utils/ExceptionManager.js.map +1 -0
- package/lib/utils/Singleton.d.ts +1 -0
- package/lib/utils/Singleton.js +24 -0
- package/lib/utils/Singleton.js.map +1 -0
- package/package.json +66 -0
- package/src/decorators/EncryptedBody.ts +102 -0
- package/src/decorators/EncryptedController.ts +43 -0
- package/src/decorators/EncryptedModule.ts +127 -0
- package/src/decorators/EncryptedRoute.ts +200 -0
- package/src/decorators/PlainBody.ts +38 -0
- package/src/decorators/TypedBody.ts +49 -0
- package/src/decorators/TypedParam.ts +70 -0
- package/src/decorators/TypedRoute.ts +149 -0
- package/src/decorators/internal/EncryptedConstant.ts +4 -0
- package/src/decorators/internal/get_path_and_stringify.ts +76 -0
- package/src/decorators/internal/headers_to_object.ts +13 -0
- package/src/decorators/internal/route_error.ts +41 -0
- package/src/decorators/internal/validate_request_body.ts +58 -0
- package/src/index.ts +5 -0
- package/src/module.ts +9 -0
- package/src/options/INestiaTransformOptions.ts +6 -0
- package/src/options/INestiaTransformProject.ts +6 -0
- package/src/options/IRequestBodyValidator.ts +20 -0
- package/src/options/IResponseBodyStringifier.ts +25 -0
- package/src/transform.ts +20 -0
- package/src/transformers/BodyTransformer.ts +106 -0
- package/src/transformers/FileTransformer.ts +49 -0
- package/src/transformers/MethodTransformer.ts +91 -0
- package/src/transformers/NodeTransformer.ts +18 -0
- package/src/transformers/ParameterTransformer.ts +45 -0
- package/src/transformers/RouteTransformer.ts +134 -0
- package/src/typings/Creator.ts +3 -0
- package/src/utils/ExceptionManager.ts +126 -0
- package/src/utils/Singleton.ts +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IResponseBodyStringifier.js","sourceRoot":"","sources":["../../src/options/IResponseBodyStringifier.ts"],"names":[],"mappings":""}
|
package/lib/transform.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
7
|
+
var FileTransformer_1 = require("./transformers/FileTransformer");
|
|
8
|
+
function transform(program, options) {
|
|
9
|
+
var project = {
|
|
10
|
+
program: program,
|
|
11
|
+
compilerOptions: program.getCompilerOptions(),
|
|
12
|
+
checker: program.getTypeChecker(),
|
|
13
|
+
printer: typescript_1.default.createPrinter(),
|
|
14
|
+
options: options || {},
|
|
15
|
+
};
|
|
16
|
+
return function (context) { return function (file) {
|
|
17
|
+
return FileTransformer_1.FileTransformer.transform(project, context, file);
|
|
18
|
+
}; };
|
|
19
|
+
}
|
|
20
|
+
exports.default = transform;
|
|
21
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":";;;;;AAAA,0DAA4B;AAI5B,kEAAiE;AAEjE,SAAwB,SAAS,CAC7B,OAAmB,EACnB,OAAiC;IAEjC,IAAM,OAAO,GAAa;QACtB,OAAO,SAAA;QACP,eAAe,EAAE,OAAO,CAAC,kBAAkB,EAAE;QAC7C,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE;QACjC,OAAO,EAAE,oBAAE,CAAC,aAAa,EAAE;QAC3B,OAAO,EAAE,OAAO,IAAI,EAAE;KACzB,CAAC;IACF,OAAO,UAAC,OAAO,IAAK,OAAA,UAAC,IAAI;QACrB,OAAA,iCAAe,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;IAAjD,CAAiD,EADjC,CACiC,CAAC;AAC1D,CAAC;AAbD,4BAaC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BodyTransformer = void 0;
|
|
7
|
+
var path_1 = __importDefault(require("path"));
|
|
8
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
9
|
+
var AssertProgrammer_1 = require("typia/lib/programmers/AssertProgrammer");
|
|
10
|
+
var IsProgrammer_1 = require("typia/lib/programmers/IsProgrammer");
|
|
11
|
+
var ValidateProgrammer_1 = require("typia/lib/programmers/ValidateProgrammer");
|
|
12
|
+
var BodyTransformer;
|
|
13
|
+
(function (BodyTransformer) {
|
|
14
|
+
function transform(project, type, decorator) {
|
|
15
|
+
if (!typescript_1.default.isCallExpression(decorator.expression))
|
|
16
|
+
return decorator;
|
|
17
|
+
return typescript_1.default.factory.createDecorator(validate(project, type, decorator.expression));
|
|
18
|
+
}
|
|
19
|
+
BodyTransformer.transform = transform;
|
|
20
|
+
function validate(project, type, expression) {
|
|
21
|
+
// CHECK SIGNATURE
|
|
22
|
+
var signature = project.checker.getResolvedSignature(expression);
|
|
23
|
+
if (!signature || !signature.declaration)
|
|
24
|
+
return expression;
|
|
25
|
+
// CHECK TO BE TRANSFORMED
|
|
26
|
+
var validate = (function () {
|
|
27
|
+
// CHECK FILENAME
|
|
28
|
+
var location = path_1.default.resolve(signature.declaration.getSourceFile().fileName);
|
|
29
|
+
if (LIB_PATHS.every(function (str) { return location.indexOf(str) === -1; }) &&
|
|
30
|
+
SRC_PATHS.every(function (str) { return location !== str; }))
|
|
31
|
+
return false;
|
|
32
|
+
// CHECK DUPLICATED TRANSFORMATION
|
|
33
|
+
return expression.arguments.length === 0;
|
|
34
|
+
})();
|
|
35
|
+
if (validate === false)
|
|
36
|
+
return expression;
|
|
37
|
+
// CHECK TYPE NODE
|
|
38
|
+
var typeNode = project.checker.typeToTypeNode(type, undefined, undefined);
|
|
39
|
+
if (typeNode === undefined)
|
|
40
|
+
return expression;
|
|
41
|
+
//----
|
|
42
|
+
// TRANSFORMATION
|
|
43
|
+
//----
|
|
44
|
+
// GENERATE VALIDATION PLAN
|
|
45
|
+
var parameter = function (key, programmer) {
|
|
46
|
+
return typescript_1.default.factory.createObjectLiteralExpression([
|
|
47
|
+
typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("type"), typescript_1.default.factory.createStringLiteral(key)),
|
|
48
|
+
typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier(key), programmer(project, expression.expression)(type)),
|
|
49
|
+
]);
|
|
50
|
+
};
|
|
51
|
+
var validator = (function () {
|
|
52
|
+
if (project.options.validate === "is")
|
|
53
|
+
return parameter("is", IsProgrammer_1.IsProgrammer.generate);
|
|
54
|
+
else if (project.options.validate === "validate")
|
|
55
|
+
return parameter("validate", ValidateProgrammer_1.ValidateProgrammer.generate);
|
|
56
|
+
return parameter("assert", AssertProgrammer_1.AssertProgrammer.generate);
|
|
57
|
+
})();
|
|
58
|
+
// UPDATE DECORATOR FUNCTION CALL
|
|
59
|
+
return typescript_1.default.factory.updateCallExpression(expression, expression.expression, expression.typeArguments, [validator]);
|
|
60
|
+
}
|
|
61
|
+
var CLASSES = ["EncryptedBody", "TypedBody"];
|
|
62
|
+
var LIB_PATHS = CLASSES.map(function (cla) {
|
|
63
|
+
return path_1.default.join("node_modules", "@nestia", "core", "lib", "decorators", "".concat(cla, ".d.ts"));
|
|
64
|
+
});
|
|
65
|
+
var SRC_PATHS = CLASSES.map(function (cla) {
|
|
66
|
+
return path_1.default.resolve(path_1.default.join(__dirname, "..", "decorators", "".concat(cla, ".ts")));
|
|
67
|
+
});
|
|
68
|
+
})(BodyTransformer = exports.BodyTransformer || (exports.BodyTransformer = {}));
|
|
69
|
+
//# sourceMappingURL=BodyTransformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BodyTransformer.js","sourceRoot":"","sources":["../../src/transformers/BodyTransformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { INestiaTransformProject } from "../options/INestiaTransformProject";
|
|
3
|
+
export declare namespace FileTransformer {
|
|
4
|
+
function transform(project: INestiaTransformProject, context: ts.TransformationContext, file: ts.SourceFile): ts.SourceFile;
|
|
5
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.FileTransformer = void 0;
|
|
7
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
var NodeTransformer_1 = require("./NodeTransformer");
|
|
9
|
+
var FileTransformer;
|
|
10
|
+
(function (FileTransformer) {
|
|
11
|
+
function transform(project, context, file) {
|
|
12
|
+
// ITERATE NODES
|
|
13
|
+
return typescript_1.default.visitEachChild(file, function (node) { return iterate_node(project, context, node); }, context);
|
|
14
|
+
}
|
|
15
|
+
FileTransformer.transform = transform;
|
|
16
|
+
function iterate_node(project, context, node) {
|
|
17
|
+
return typescript_1.default.visitEachChild(try_transform_node(project, node), function (child) { return iterate_node(project, context, child); }, context);
|
|
18
|
+
}
|
|
19
|
+
function try_transform_node(project, node) {
|
|
20
|
+
try {
|
|
21
|
+
return NodeTransformer_1.NodeTransformer.transform(project, node);
|
|
22
|
+
}
|
|
23
|
+
catch (exp) {
|
|
24
|
+
if (!(exp instanceof Error))
|
|
25
|
+
throw exp;
|
|
26
|
+
var file = node.getSourceFile();
|
|
27
|
+
var _a = file.getLineAndCharacterOfPosition(node.pos), line = _a.line, character = _a.character;
|
|
28
|
+
exp.message += " - ".concat(file.fileName, ".").concat(line + 1, ":").concat(character + 1);
|
|
29
|
+
throw exp;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
})(FileTransformer = exports.FileTransformer || (exports.FileTransformer = {}));
|
|
33
|
+
//# sourceMappingURL=FileTransformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileTransformer.js","sourceRoot":"","sources":["../../src/transformers/FileTransformer.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAG5B,qDAAoD;AAEpD,IAAiB,eAAe,CA2C/B;AA3CD,WAAiB,eAAe;IAC5B,SAAgB,SAAS,CACrB,OAAgC,EAChC,OAAiC,EACjC,IAAmB;QAEnB,gBAAgB;QAChB,OAAO,oBAAE,CAAC,cAAc,CACpB,IAAI,EACJ,UAAC,IAAI,IAAK,OAAA,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EAApC,CAAoC,EAC9C,OAAO,CACV,CAAC;IACN,CAAC;IAXe,yBAAS,YAWxB,CAAA;IAED,SAAS,YAAY,CACjB,OAAgC,EAChC,OAAiC,EACjC,IAAa;QAEb,OAAO,oBAAE,CAAC,cAAc,CACpB,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,EACjC,UAAC,KAAK,IAAK,OAAA,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAArC,CAAqC,EAChD,OAAO,CACV,CAAC;IACN,CAAC;IAED,SAAS,kBAAkB,CACvB,OAAgC,EAChC,IAAa;QAEb,IAAI;YACA,OAAO,iCAAe,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SACnD;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;gBAAE,MAAM,GAAG,CAAC;YAEvC,IAAM,IAAI,GAAkB,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,IAAA,KAAsB,IAAI,CAAC,6BAA6B,CAC1D,IAAI,CAAC,GAAG,CACX,EAFO,IAAI,UAAA,EAAE,SAAS,eAEtB,CAAC;YACF,GAAG,CAAC,OAAO,IAAI,aAAM,IAAI,CAAC,QAAQ,cAAI,IAAI,GAAG,CAAC,cAAI,SAAS,GAAG,CAAC,CAAE,CAAC;YAClE,MAAM,GAAG,CAAC;SACb;IACL,CAAC;AACL,CAAC,EA3CgB,eAAe,GAAf,uBAAe,KAAf,uBAAe,QA2C/B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MethodTransformer = void 0;
|
|
7
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
var RouteTransformer_1 = require("./RouteTransformer");
|
|
9
|
+
var MethodTransformer;
|
|
10
|
+
(function (MethodTransformer) {
|
|
11
|
+
function transform(project, method) {
|
|
12
|
+
var decorators = typescript_1.default.getDecorators
|
|
13
|
+
? typescript_1.default.getDecorators(method)
|
|
14
|
+
: method.decorators;
|
|
15
|
+
if (!(decorators === null || decorators === void 0 ? void 0 : decorators.length))
|
|
16
|
+
return method;
|
|
17
|
+
var signature = project.checker.getSignatureFromDeclaration(method);
|
|
18
|
+
var original = signature && project.checker.getReturnTypeOfSignature(signature);
|
|
19
|
+
var escaped = original && get_escaped_type(project.checker, original);
|
|
20
|
+
if (escaped === undefined)
|
|
21
|
+
return method;
|
|
22
|
+
if (typescript_1.default.getDecorators !== undefined)
|
|
23
|
+
return typescript_1.default.factory.updateMethodDeclaration(method, (method.modifiers || []).map(function (mod) {
|
|
24
|
+
return typescript_1.default.isDecorator(mod)
|
|
25
|
+
? RouteTransformer_1.RouteTransformer.transform(project, escaped, mod)
|
|
26
|
+
: mod;
|
|
27
|
+
}), method.asteriskToken, method.name, method.questionToken, method.typeParameters, method.parameters, method.type, method.body);
|
|
28
|
+
// eslint-disable-next-line
|
|
29
|
+
return typescript_1.default.factory.updateMethodDeclaration(method, decorators.map(function (deco) {
|
|
30
|
+
return RouteTransformer_1.RouteTransformer.transform(project, escaped, deco);
|
|
31
|
+
}), method.modifiers, method.asteriskToken, method.name, method.questionToken, method.typeParameters, method.parameters, method.type, method.body);
|
|
32
|
+
}
|
|
33
|
+
MethodTransformer.transform = transform;
|
|
34
|
+
})(MethodTransformer = exports.MethodTransformer || (exports.MethodTransformer = {}));
|
|
35
|
+
function get_escaped_type(checker, type) {
|
|
36
|
+
var symbol = type.getSymbol() || type.aliasSymbol;
|
|
37
|
+
return symbol && get_name(symbol) === "Promise"
|
|
38
|
+
? escape_promise(checker, type)
|
|
39
|
+
: type;
|
|
40
|
+
}
|
|
41
|
+
function escape_promise(checker, type) {
|
|
42
|
+
var generic = checker.getTypeArguments(type);
|
|
43
|
+
if (generic.length !== 1)
|
|
44
|
+
throw new Error("Error on ImportAnalyzer.analyze(): invalid promise type.");
|
|
45
|
+
return generic[0];
|
|
46
|
+
}
|
|
47
|
+
function get_name(symbol) {
|
|
48
|
+
return explore_name(symbol.escapedName.toString(), symbol.getDeclarations()[0].parent);
|
|
49
|
+
}
|
|
50
|
+
function explore_name(name, decl) {
|
|
51
|
+
return typescript_1.default.isModuleBlock(decl)
|
|
52
|
+
? explore_name("".concat(decl.parent.name.getText(), ".").concat(name), decl.parent.parent)
|
|
53
|
+
: name;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=MethodTransformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MethodTransformer.js","sourceRoot":"","sources":["../../src/transformers/MethodTransformer.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAG5B,uDAAsD;AAEtD,IAAiB,iBAAiB,CAmDjC;AAnDD,WAAiB,iBAAiB;IAC9B,SAAgB,SAAS,CACrB,OAAgC,EAChC,MAA4B;QAE5B,IAAM,UAAU,GAAwC,oBAAE,CAAC,aAAa;YACpE,CAAC,CAAC,oBAAE,CAAC,aAAa,CAAC,MAAM,CAAC;YAC1B,CAAC,CAAE,MAAc,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA;YAAE,OAAO,MAAM,CAAC;QAEvC,IAAM,SAAS,GACX,OAAO,CAAC,OAAO,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QACxD,IAAM,QAAQ,GACV,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACrE,IAAM,OAAO,GACT,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE5D,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QAEzC,IAAI,oBAAE,CAAC,aAAa,KAAK,SAAS;YAC9B,OAAO,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CACrC,MAAM,EACN,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG;gBAC7B,OAAA,oBAAE,CAAC,WAAW,CAAC,GAAG,CAAC;oBACf,CAAC,CAAC,mCAAgB,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC;oBACnD,CAAC,CAAC,GAAG;YAFT,CAES,CACZ,EACD,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,CACd,CAAC;QACN,2BAA2B;QAC3B,OAAO,oBAAE,CAAC,OAAO,CAAC,uBAAuB,CACrC,MAAM,EACN,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI;YAChB,OAAA,mCAAgB,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;QAAlD,CAAkD,CACrD,EACA,MAAc,CAAC,SAAS,EACzB,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,cAAc,EACrB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,IAAI,CACd,CAAC;IACN,CAAC;IAjDe,2BAAS,YAiDxB,CAAA;AACL,CAAC,EAnDgB,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAmDjC;AAED,SAAS,gBAAgB,CAAC,OAAuB,EAAE,IAAa;IAC5D,IAAM,MAAM,GAA0B,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC;IAC3E,OAAO,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,SAAS;QAC3C,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC;QAC/B,CAAC,CAAC,IAAI,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,OAAuB,EAAE,IAAa;IAC1D,IAAM,OAAO,GAAuB,OAAO,CAAC,gBAAgB,CACxD,IAAwB,CAC3B,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,MAAM,IAAI,KAAK,CACX,0DAA0D,CAC7D,CAAC;IACN,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAiB;IAC/B,OAAO,YAAY,CACf,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAC7B,MAAM,CAAC,eAAe,EAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CACtC,CAAC;AACN,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,IAAa;IAC7C,OAAO,oBAAE,CAAC,aAAa,CAAC,IAAI,CAAC;QACzB,CAAC,CAAC,YAAY,CACR,UAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAI,IAAI,CAAE,EACvC,IAAI,CAAC,MAAM,CAAC,MAAM,CACrB;QACH,CAAC,CAAC,IAAI,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.NodeTransformer = void 0;
|
|
7
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
var MethodTransformer_1 = require("./MethodTransformer");
|
|
9
|
+
var ParameterTransformer_1 = require("./ParameterTransformer");
|
|
10
|
+
var NodeTransformer;
|
|
11
|
+
(function (NodeTransformer) {
|
|
12
|
+
function transform(project, node) {
|
|
13
|
+
if (typescript_1.default.isMethodDeclaration(node))
|
|
14
|
+
return MethodTransformer_1.MethodTransformer.transform(project, node);
|
|
15
|
+
else if (typescript_1.default.isParameter(node))
|
|
16
|
+
return ParameterTransformer_1.ParameterTransformer.transform(project, node);
|
|
17
|
+
return node;
|
|
18
|
+
}
|
|
19
|
+
NodeTransformer.transform = transform;
|
|
20
|
+
})(NodeTransformer = exports.NodeTransformer || (exports.NodeTransformer = {}));
|
|
21
|
+
//# sourceMappingURL=NodeTransformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeTransformer.js","sourceRoot":"","sources":["../../src/transformers/NodeTransformer.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAG5B,yDAAwD;AACxD,+DAA8D;AAE9D,IAAiB,eAAe,CAW/B;AAXD,WAAiB,eAAe;IAC5B,SAAgB,SAAS,CACrB,OAAgC,EAChC,IAAa;QAEb,IAAI,oBAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC;YAC5B,OAAO,qCAAiB,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aACjD,IAAI,oBAAE,CAAC,WAAW,CAAC,IAAI,CAAC;YACzB,OAAO,2CAAoB,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IAChB,CAAC;IATe,yBAAS,YASxB,CAAA;AACL,CAAC,EAXgB,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAW/B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { INestiaTransformProject } from "../options/INestiaTransformProject";
|
|
3
|
+
export declare namespace ParameterTransformer {
|
|
4
|
+
function transform(project: INestiaTransformProject, param: ts.ParameterDeclaration): ts.ParameterDeclaration;
|
|
5
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ParameterTransformer = void 0;
|
|
7
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
var BodyTransformer_1 = require("./BodyTransformer");
|
|
9
|
+
var ParameterTransformer;
|
|
10
|
+
(function (ParameterTransformer) {
|
|
11
|
+
function transform(project, param) {
|
|
12
|
+
var decorators = typescript_1.default.getDecorators
|
|
13
|
+
? typescript_1.default.getDecorators(param)
|
|
14
|
+
: param.decorators;
|
|
15
|
+
if (!(decorators === null || decorators === void 0 ? void 0 : decorators.length))
|
|
16
|
+
return param;
|
|
17
|
+
var type = project.checker.getTypeAtLocation(param);
|
|
18
|
+
if (typescript_1.default.getDecorators !== undefined)
|
|
19
|
+
return typescript_1.default.factory.updateParameterDeclaration(param, (param.modifiers || []).map(function (mod) {
|
|
20
|
+
return typescript_1.default.isDecorator(mod)
|
|
21
|
+
? BodyTransformer_1.BodyTransformer.transform(project, type, mod)
|
|
22
|
+
: mod;
|
|
23
|
+
}), param.dotDotDotToken, param.name, param.questionToken, param.type, param.initializer);
|
|
24
|
+
// eslint-disable-next-line
|
|
25
|
+
return typescript_1.default.factory.updateParameterDeclaration(param, decorators.map(function (deco) {
|
|
26
|
+
return BodyTransformer_1.BodyTransformer.transform(project, type, deco);
|
|
27
|
+
}), param.modifiers, param.dotDotDotToken, param.name, param.questionToken, param.type, param.initializer);
|
|
28
|
+
}
|
|
29
|
+
ParameterTransformer.transform = transform;
|
|
30
|
+
})(ParameterTransformer = exports.ParameterTransformer || (exports.ParameterTransformer = {}));
|
|
31
|
+
//# sourceMappingURL=ParameterTransformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParameterTransformer.js","sourceRoot":"","sources":["../../src/transformers/ParameterTransformer.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAG5B,qDAAoD;AAEpD,IAAiB,oBAAoB,CAuCpC;AAvCD,WAAiB,oBAAoB;IACjC,SAAgB,SAAS,CACrB,OAAgC,EAChC,KAA8B;QAE9B,IAAM,UAAU,GAAwC,oBAAE,CAAC,aAAa;YACpE,CAAC,CAAC,oBAAE,CAAC,aAAa,CAAC,KAAK,CAAC;YACzB,CAAC,CAAE,KAAa,CAAC,UAAU,CAAC;QAChC,IAAI,CAAC,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,CAAA;YAAE,OAAO,KAAK,CAAC;QAEtC,IAAM,IAAI,GAAY,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,oBAAE,CAAC,aAAa,KAAK,SAAS;YAC9B,OAAO,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CACxC,KAAK,EACL,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG;gBAC5B,OAAA,oBAAE,CAAC,WAAW,CAAC,GAAG,CAAC;oBACf,CAAC,CAAC,iCAAe,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC;oBAC/C,CAAC,CAAC,GAAG;YAFT,CAES,CACZ,EACD,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,WAAW,CACpB,CAAC;QACN,2BAA2B;QAC3B,OAAO,oBAAE,CAAC,OAAO,CAAC,0BAA0B,CACxC,KAAK,EACL,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI;YAChB,OAAA,iCAAe,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;QAA9C,CAA8C,CACjD,EACA,KAAa,CAAC,SAAS,EACxB,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,WAAW,CACpB,CAAC;IACN,CAAC;IArCe,8BAAS,YAqCxB,CAAA;AACL,CAAC,EAvCgB,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAuCpC"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
+
if (ar || !(i in from)) {
|
|
21
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
+
ar[i] = from[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
+
};
|
|
27
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
28
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.RouteTransformer = void 0;
|
|
32
|
+
var path_1 = __importDefault(require("path"));
|
|
33
|
+
var typescript_1 = __importDefault(require("typescript"));
|
|
34
|
+
var AssertStringifyProgrammer_1 = require("typia/lib/programmers/AssertStringifyProgrammer");
|
|
35
|
+
var IsStringifyProgrammer_1 = require("typia/lib/programmers/IsStringifyProgrammer");
|
|
36
|
+
var StringifyProgrammer_1 = require("typia/lib/programmers/StringifyProgrammer");
|
|
37
|
+
var ValidateStringifyProgrammer_1 = require("typia/lib/programmers/ValidateStringifyProgrammer");
|
|
38
|
+
var RouteTransformer;
|
|
39
|
+
(function (RouteTransformer) {
|
|
40
|
+
function transform(project, type, decorator) {
|
|
41
|
+
if (!typescript_1.default.isCallExpression(decorator.expression))
|
|
42
|
+
return decorator;
|
|
43
|
+
return typescript_1.default.factory.createDecorator(stringify(project, type, decorator.expression));
|
|
44
|
+
}
|
|
45
|
+
RouteTransformer.transform = transform;
|
|
46
|
+
function stringify(project, type, expression) {
|
|
47
|
+
//----
|
|
48
|
+
// VALIDATIONS
|
|
49
|
+
//----
|
|
50
|
+
// CHECK SIGNATURE
|
|
51
|
+
var signature = project.checker.getResolvedSignature(expression);
|
|
52
|
+
if (!signature || !signature.declaration)
|
|
53
|
+
return expression;
|
|
54
|
+
// CHECK TO BE TRANSFORMED
|
|
55
|
+
var validate = (function () {
|
|
56
|
+
// CHECK FILENAME
|
|
57
|
+
var location = path_1.default.resolve(signature.declaration.getSourceFile().fileName);
|
|
58
|
+
if (LIB_PATHS.every(function (str) { return location.indexOf(str) === -1; }) &&
|
|
59
|
+
SRC_PATHS.every(function (str) { return location !== str; }))
|
|
60
|
+
return false;
|
|
61
|
+
// CHECK DUPLICATE BOOSTER
|
|
62
|
+
if (expression.arguments.length >= 2)
|
|
63
|
+
return false;
|
|
64
|
+
else if (expression.arguments.length === 1) {
|
|
65
|
+
var last = expression.arguments[expression.arguments.length - 1];
|
|
66
|
+
var type_1 = project.checker.getTypeAtLocation(last);
|
|
67
|
+
if (isObject(project.checker, type_1))
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
return true;
|
|
71
|
+
})();
|
|
72
|
+
if (validate === false)
|
|
73
|
+
return expression;
|
|
74
|
+
// CHECK TYPE NODE
|
|
75
|
+
var typeNode = project.checker.typeToTypeNode(type, undefined, undefined);
|
|
76
|
+
if (typeNode === undefined)
|
|
77
|
+
return expression;
|
|
78
|
+
//----
|
|
79
|
+
// TRANSFORMATION
|
|
80
|
+
//----
|
|
81
|
+
// GENERATE STRINGIFY PLAN
|
|
82
|
+
var parameter = function (key, programmer) {
|
|
83
|
+
return typescript_1.default.factory.createObjectLiteralExpression([
|
|
84
|
+
typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("type"), typescript_1.default.factory.createStringLiteral(key)),
|
|
85
|
+
typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier(key), programmer(project, expression.expression)(type)),
|
|
86
|
+
]);
|
|
87
|
+
};
|
|
88
|
+
var stringify = (function () {
|
|
89
|
+
if (project.options.stringify === "stringify")
|
|
90
|
+
return parameter("stringify", StringifyProgrammer_1.StringifyProgrammer.generate);
|
|
91
|
+
else if (project.options.stringify === undefined ||
|
|
92
|
+
project.options.stringify === "assert")
|
|
93
|
+
return parameter("assert", AssertStringifyProgrammer_1.AssertStringifyProgrammer.generate);
|
|
94
|
+
else if (project.options.stringify === "validate")
|
|
95
|
+
return parameter("validate", ValidateStringifyProgrammer_1.ValidateStringifyProgrammer.generate);
|
|
96
|
+
return parameter("is", IsStringifyProgrammer_1.IsStringifyProgrammer.generate);
|
|
97
|
+
})();
|
|
98
|
+
// UPDATE DECORATOR FUNCTION CALL
|
|
99
|
+
return typescript_1.default.factory.updateCallExpression(expression, expression.expression, expression.typeArguments, __spreadArray(__spreadArray([], __read(expression.arguments), false), [stringify], false));
|
|
100
|
+
}
|
|
101
|
+
function isObject(checker, type) {
|
|
102
|
+
return ((type.getFlags() & typescript_1.default.TypeFlags.Object) !== 0 &&
|
|
103
|
+
!checker.isTupleType(type) &&
|
|
104
|
+
!checker.isArrayType(type) &&
|
|
105
|
+
!checker.isArrayLikeType(type));
|
|
106
|
+
}
|
|
107
|
+
var CLASSES = ["EncryptedRoute", "TypedRoute"];
|
|
108
|
+
var LIB_PATHS = CLASSES.map(function (cla) {
|
|
109
|
+
return path_1.default.join("node_modules", "@nestia", "core", "lib", "decorators", "".concat(cla, ".d.ts"));
|
|
110
|
+
});
|
|
111
|
+
var SRC_PATHS = CLASSES.map(function (cla) {
|
|
112
|
+
return path_1.default.resolve(path_1.default.join(__dirname, "..", "decorators", "".concat(cla, ".ts")));
|
|
113
|
+
});
|
|
114
|
+
})(RouteTransformer = exports.RouteTransformer || (exports.RouteTransformer = {}));
|
|
115
|
+
//# sourceMappingURL=RouteTransformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouteTransformer.js","sourceRoot":"","sources":["../../src/transformers/RouteTransformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Creator.js","sourceRoot":"","sources":["../../src/typings/Creator.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { HttpException } from "@nestjs/common";
|
|
2
|
+
import { Creator } from "../typings/Creator";
|
|
3
|
+
/**
|
|
4
|
+
* Exception manager for HTTP server.
|
|
5
|
+
*
|
|
6
|
+
* `ExceptionManager` is an utility class who can insert or erase custom error class with
|
|
7
|
+
* its convertion method to a regular {@link nest.HttpException} instance.
|
|
8
|
+
*
|
|
9
|
+
* If you define an API function through {@link TypedRoute} or {@link EncryptedRoute}
|
|
10
|
+
* instead of the basic router decorator functions like {@link nest.Get} or
|
|
11
|
+
* {@link nest.Post} and the API function throws a custom error whose class has been
|
|
12
|
+
* {@link ExceptionManager.insert inserted} in this `EntityManager`, the error would be
|
|
13
|
+
* automatically converted to the regular {@link nest.HttpException} instance by the
|
|
14
|
+
* {@link ExceptionManager.Closure} function.
|
|
15
|
+
*
|
|
16
|
+
* Therefore, with this `ExceptionManager` and {@link TypedRoute} or {@link EncryptedRoute},
|
|
17
|
+
* you can manage your custom error classes much systemtically. You can avoid 500 internal
|
|
18
|
+
* server error or hard coding implementation about the custom error classes.
|
|
19
|
+
*
|
|
20
|
+
* Below error classes are defaultly configured in this `ExceptionManager`
|
|
21
|
+
*
|
|
22
|
+
* - `typia.TypeGuardError`
|
|
23
|
+
* - `@nestia/fetcher.HttpError`
|
|
24
|
+
*
|
|
25
|
+
* @author Jeongho Nam - https://github.com/samchon
|
|
26
|
+
*/
|
|
27
|
+
export declare namespace ExceptionManager {
|
|
28
|
+
/**
|
|
29
|
+
* Insert an error class with converter.
|
|
30
|
+
*
|
|
31
|
+
* If you've inserted an duplicated error class, the closure would be overwritten.
|
|
32
|
+
*
|
|
33
|
+
* @param creator Target error class
|
|
34
|
+
* @param closure A closure function converting to the `HttpException` class
|
|
35
|
+
*/
|
|
36
|
+
function insert<T extends Error>(creator: Creator<T>, closure: Closure<T>): void;
|
|
37
|
+
/**
|
|
38
|
+
* Erase an error class.
|
|
39
|
+
*
|
|
40
|
+
* @param creator Target error class
|
|
41
|
+
* @returns Whether be erased or not
|
|
42
|
+
*/
|
|
43
|
+
function erase<T extends Error>(creator: Creator<T>): boolean;
|
|
44
|
+
function on(closure: (error: any) => any): void;
|
|
45
|
+
function off(closure: (error: any) => any): void;
|
|
46
|
+
/**
|
|
47
|
+
* Type of a closure function converting to the regular {@link nest.HttpException}.
|
|
48
|
+
*
|
|
49
|
+
* `ExceptionManager.Closure` is a type of closure function who are converting from
|
|
50
|
+
* custom error to the regular {@link nest.HttpException} instance. It would be used
|
|
51
|
+
* in the {@link ExceptionManager} with {@link TypedRoute} or {@link EncryptedRoute}.
|
|
52
|
+
*/
|
|
53
|
+
interface Closure<T extends Error> {
|
|
54
|
+
/**
|
|
55
|
+
* Error converter.
|
|
56
|
+
*
|
|
57
|
+
* Convert from custom error to the regular {@link nest.HttpException} instance.
|
|
58
|
+
*
|
|
59
|
+
* @param exception Custom error instance
|
|
60
|
+
* @return Regular {@link nest.HttpException} instance
|
|
61
|
+
*/
|
|
62
|
+
(exception: T): HttpException;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ExceptionManager = void 0;
|
|
20
|
+
var fetcher_1 = require("@nestia/fetcher");
|
|
21
|
+
var common_1 = require("@nestjs/common");
|
|
22
|
+
var typia_1 = require("typia");
|
|
23
|
+
/**
|
|
24
|
+
* Exception manager for HTTP server.
|
|
25
|
+
*
|
|
26
|
+
* `ExceptionManager` is an utility class who can insert or erase custom error class with
|
|
27
|
+
* its convertion method to a regular {@link nest.HttpException} instance.
|
|
28
|
+
*
|
|
29
|
+
* If you define an API function through {@link TypedRoute} or {@link EncryptedRoute}
|
|
30
|
+
* instead of the basic router decorator functions like {@link nest.Get} or
|
|
31
|
+
* {@link nest.Post} and the API function throws a custom error whose class has been
|
|
32
|
+
* {@link ExceptionManager.insert inserted} in this `EntityManager`, the error would be
|
|
33
|
+
* automatically converted to the regular {@link nest.HttpException} instance by the
|
|
34
|
+
* {@link ExceptionManager.Closure} function.
|
|
35
|
+
*
|
|
36
|
+
* Therefore, with this `ExceptionManager` and {@link TypedRoute} or {@link EncryptedRoute},
|
|
37
|
+
* you can manage your custom error classes much systemtically. You can avoid 500 internal
|
|
38
|
+
* server error or hard coding implementation about the custom error classes.
|
|
39
|
+
*
|
|
40
|
+
* Below error classes are defaultly configured in this `ExceptionManager`
|
|
41
|
+
*
|
|
42
|
+
* - `typia.TypeGuardError`
|
|
43
|
+
* - `@nestia/fetcher.HttpError`
|
|
44
|
+
*
|
|
45
|
+
* @author Jeongho Nam - https://github.com/samchon
|
|
46
|
+
*/
|
|
47
|
+
var ExceptionManager;
|
|
48
|
+
(function (ExceptionManager) {
|
|
49
|
+
/**
|
|
50
|
+
* Insert an error class with converter.
|
|
51
|
+
*
|
|
52
|
+
* If you've inserted an duplicated error class, the closure would be overwritten.
|
|
53
|
+
*
|
|
54
|
+
* @param creator Target error class
|
|
55
|
+
* @param closure A closure function converting to the `HttpException` class
|
|
56
|
+
*/
|
|
57
|
+
function insert(creator, closure) {
|
|
58
|
+
var index = ExceptionManager.tuples.findIndex(function (tuple) { return tuple[0] === creator; });
|
|
59
|
+
if (index !== -1)
|
|
60
|
+
ExceptionManager.tuples.splice(index, 1);
|
|
61
|
+
ExceptionManager.tuples.push([creator, closure]);
|
|
62
|
+
ExceptionManager.tuples.sort(function (_a, _b) {
|
|
63
|
+
var _c = __read(_a, 1), x = _c[0];
|
|
64
|
+
var _d = __read(_b, 1), y = _d[0];
|
|
65
|
+
return (x.prototype instanceof y ? -1 : 1);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
ExceptionManager.insert = insert;
|
|
69
|
+
/**
|
|
70
|
+
* Erase an error class.
|
|
71
|
+
*
|
|
72
|
+
* @param creator Target error class
|
|
73
|
+
* @returns Whether be erased or not
|
|
74
|
+
*/
|
|
75
|
+
function erase(creator) {
|
|
76
|
+
var index = ExceptionManager.tuples.findIndex(function (tuple) { return tuple[0] === creator; });
|
|
77
|
+
if (index === -1)
|
|
78
|
+
return false;
|
|
79
|
+
ExceptionManager.tuples.splice(index, 1);
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
ExceptionManager.erase = erase;
|
|
83
|
+
function on(closure) {
|
|
84
|
+
ExceptionManager.listeners.add(closure);
|
|
85
|
+
}
|
|
86
|
+
ExceptionManager.on = on;
|
|
87
|
+
function off(closure) {
|
|
88
|
+
ExceptionManager.listeners.delete(closure);
|
|
89
|
+
}
|
|
90
|
+
ExceptionManager.off = off;
|
|
91
|
+
/**
|
|
92
|
+
* @internal
|
|
93
|
+
*/
|
|
94
|
+
ExceptionManager.tuples = [];
|
|
95
|
+
/**
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
ExceptionManager.listeners = new Set();
|
|
99
|
+
})(ExceptionManager = exports.ExceptionManager || (exports.ExceptionManager = {}));
|
|
100
|
+
ExceptionManager.insert(typia_1.TypeGuardError, function (error) {
|
|
101
|
+
return new common_1.HttpException({
|
|
102
|
+
path: error.path,
|
|
103
|
+
reason: error.message,
|
|
104
|
+
message: "Request message is not following the promised type.",
|
|
105
|
+
}, 400);
|
|
106
|
+
});
|
|
107
|
+
ExceptionManager.insert(fetcher_1.HttpError, function (error) {
|
|
108
|
+
return new common_1.HttpException({
|
|
109
|
+
path: error.path,
|
|
110
|
+
message: error.message,
|
|
111
|
+
}, error.status);
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=ExceptionManager.js.map
|