@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.
Files changed (118) hide show
  1. package/LICENSE +21 -0
  2. package/lib/decorators/EncryptedBody.d.ts +22 -0
  3. package/lib/decorators/EncryptedBody.js +125 -0
  4. package/lib/decorators/EncryptedBody.js.map +1 -0
  5. package/lib/decorators/EncryptedController.d.ts +31 -0
  6. package/lib/decorators/EncryptedController.js +42 -0
  7. package/lib/decorators/EncryptedController.js.map +1 -0
  8. package/lib/decorators/EncryptedModule.d.ts +48 -0
  9. package/lib/decorators/EncryptedModule.js +270 -0
  10. package/lib/decorators/EncryptedModule.js.map +1 -0
  11. package/lib/decorators/EncryptedRoute.d.ts +78 -0
  12. package/lib/decorators/EncryptedRoute.js +191 -0
  13. package/lib/decorators/EncryptedRoute.js.map +1 -0
  14. package/lib/decorators/PlainBody.d.ts +22 -0
  15. package/lib/decorators/PlainBody.js +83 -0
  16. package/lib/decorators/PlainBody.js.map +1 -0
  17. package/lib/decorators/TypedBody.d.ts +14 -0
  18. package/lib/decorators/TypedBody.js +93 -0
  19. package/lib/decorators/TypedBody.js.map +1 -0
  20. package/lib/decorators/TypedParam.d.ts +25 -0
  21. package/lib/decorators/TypedParam.js +62 -0
  22. package/lib/decorators/TypedParam.js.map +1 -0
  23. package/lib/decorators/TypedRoute.d.ts +71 -0
  24. package/lib/decorators/TypedRoute.js +159 -0
  25. package/lib/decorators/TypedRoute.js.map +1 -0
  26. package/lib/decorators/internal/EncryptedConstant.d.ts +1 -0
  27. package/lib/decorators/internal/EncryptedConstant.js +8 -0
  28. package/lib/decorators/internal/EncryptedConstant.js.map +1 -0
  29. package/lib/decorators/internal/get_path_and_stringify.d.ts +1 -0
  30. package/lib/decorators/internal/get_path_and_stringify.js +75 -0
  31. package/lib/decorators/internal/get_path_and_stringify.js.map +1 -0
  32. package/lib/decorators/internal/headers_to_object.d.ts +1 -0
  33. package/lib/decorators/internal/headers_to_object.js +53 -0
  34. package/lib/decorators/internal/headers_to_object.js.map +1 -0
  35. package/lib/decorators/internal/route_error.d.ts +1 -0
  36. package/lib/decorators/internal/route_error.js +90 -0
  37. package/lib/decorators/internal/route_error.js.map +1 -0
  38. package/lib/decorators/internal/validate_request_body.d.ts +2 -0
  39. package/lib/decorators/internal/validate_request_body.js +56 -0
  40. package/lib/decorators/internal/validate_request_body.js.map +1 -0
  41. package/lib/index.d.ts +3 -0
  42. package/lib/index.js +32 -0
  43. package/lib/index.js.map +1 -0
  44. package/lib/module.d.ts +9 -0
  45. package/lib/module.js +26 -0
  46. package/lib/module.js.map +1 -0
  47. package/lib/options/INestiaTransformOptions.d.ts +5 -0
  48. package/lib/options/INestiaTransformOptions.js +3 -0
  49. package/lib/options/INestiaTransformOptions.js.map +1 -0
  50. package/lib/options/INestiaTransformProject.d.ts +5 -0
  51. package/lib/options/INestiaTransformProject.js +3 -0
  52. package/lib/options/INestiaTransformProject.js.map +1 -0
  53. package/lib/options/IRequestBodyValidator.d.ts +16 -0
  54. package/lib/options/IRequestBodyValidator.js +3 -0
  55. package/lib/options/IRequestBodyValidator.js.map +1 -0
  56. package/lib/options/IResponseBodyStringifier.d.ts +20 -0
  57. package/lib/options/IResponseBodyStringifier.js +3 -0
  58. package/lib/options/IResponseBodyStringifier.js.map +1 -0
  59. package/lib/transform.d.ts +3 -0
  60. package/lib/transform.js +21 -0
  61. package/lib/transform.js.map +1 -0
  62. package/lib/transformers/BodyTransformer.d.ts +5 -0
  63. package/lib/transformers/BodyTransformer.js +69 -0
  64. package/lib/transformers/BodyTransformer.js.map +1 -0
  65. package/lib/transformers/FileTransformer.d.ts +5 -0
  66. package/lib/transformers/FileTransformer.js +33 -0
  67. package/lib/transformers/FileTransformer.js.map +1 -0
  68. package/lib/transformers/MethodTransformer.d.ts +5 -0
  69. package/lib/transformers/MethodTransformer.js +55 -0
  70. package/lib/transformers/MethodTransformer.js.map +1 -0
  71. package/lib/transformers/NodeTransformer.d.ts +5 -0
  72. package/lib/transformers/NodeTransformer.js +21 -0
  73. package/lib/transformers/NodeTransformer.js.map +1 -0
  74. package/lib/transformers/ParameterTransformer.d.ts +5 -0
  75. package/lib/transformers/ParameterTransformer.js +31 -0
  76. package/lib/transformers/ParameterTransformer.js.map +1 -0
  77. package/lib/transformers/RouteTransformer.d.ts +5 -0
  78. package/lib/transformers/RouteTransformer.js +115 -0
  79. package/lib/transformers/RouteTransformer.js.map +1 -0
  80. package/lib/typings/Creator.d.ts +3 -0
  81. package/lib/typings/Creator.js +3 -0
  82. package/lib/typings/Creator.js.map +1 -0
  83. package/lib/utils/ExceptionManager.d.ts +64 -0
  84. package/lib/utils/ExceptionManager.js +113 -0
  85. package/lib/utils/ExceptionManager.js.map +1 -0
  86. package/lib/utils/Singleton.d.ts +1 -0
  87. package/lib/utils/Singleton.js +24 -0
  88. package/lib/utils/Singleton.js.map +1 -0
  89. package/package.json +66 -0
  90. package/src/decorators/EncryptedBody.ts +102 -0
  91. package/src/decorators/EncryptedController.ts +43 -0
  92. package/src/decorators/EncryptedModule.ts +127 -0
  93. package/src/decorators/EncryptedRoute.ts +200 -0
  94. package/src/decorators/PlainBody.ts +38 -0
  95. package/src/decorators/TypedBody.ts +49 -0
  96. package/src/decorators/TypedParam.ts +70 -0
  97. package/src/decorators/TypedRoute.ts +149 -0
  98. package/src/decorators/internal/EncryptedConstant.ts +4 -0
  99. package/src/decorators/internal/get_path_and_stringify.ts +76 -0
  100. package/src/decorators/internal/headers_to_object.ts +13 -0
  101. package/src/decorators/internal/route_error.ts +41 -0
  102. package/src/decorators/internal/validate_request_body.ts +58 -0
  103. package/src/index.ts +5 -0
  104. package/src/module.ts +9 -0
  105. package/src/options/INestiaTransformOptions.ts +6 -0
  106. package/src/options/INestiaTransformProject.ts +6 -0
  107. package/src/options/IRequestBodyValidator.ts +20 -0
  108. package/src/options/IResponseBodyStringifier.ts +25 -0
  109. package/src/transform.ts +20 -0
  110. package/src/transformers/BodyTransformer.ts +106 -0
  111. package/src/transformers/FileTransformer.ts +49 -0
  112. package/src/transformers/MethodTransformer.ts +91 -0
  113. package/src/transformers/NodeTransformer.ts +18 -0
  114. package/src/transformers/ParameterTransformer.ts +45 -0
  115. package/src/transformers/RouteTransformer.ts +134 -0
  116. package/src/typings/Creator.ts +3 -0
  117. package/src/utils/ExceptionManager.ts +126 -0
  118. package/src/utils/Singleton.ts +20 -0
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=IResponseBodyStringifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IResponseBodyStringifier.js","sourceRoot":"","sources":["../../src/options/IResponseBodyStringifier.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import ts from "typescript";
2
+ import { INestiaTransformOptions } from "./options/INestiaTransformOptions";
3
+ export default function transform(program: ts.Program, options?: INestiaTransformOptions): ts.TransformerFactory<ts.SourceFile>;
@@ -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,5 @@
1
+ import ts from "typescript";
2
+ import { INestiaTransformProject } from "../options/INestiaTransformProject";
3
+ export declare namespace BodyTransformer {
4
+ function transform(project: INestiaTransformProject, type: ts.Type, decorator: ts.Decorator): ts.Decorator;
5
+ }
@@ -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,5 @@
1
+ import ts from "typescript";
2
+ import { INestiaTransformProject } from "../options/INestiaTransformProject";
3
+ export declare namespace MethodTransformer {
4
+ function transform(project: INestiaTransformProject, method: ts.MethodDeclaration): ts.MethodDeclaration;
5
+ }
@@ -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":"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"}
@@ -0,0 +1,5 @@
1
+ import ts from "typescript";
2
+ import { INestiaTransformProject } from "../options/INestiaTransformProject";
3
+ export declare namespace NodeTransformer {
4
+ function transform(project: INestiaTransformProject, node: ts.Node): ts.Node;
5
+ }
@@ -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,5 @@
1
+ import ts from "typescript";
2
+ import { INestiaTransformProject } from "../options/INestiaTransformProject";
3
+ export declare namespace RouteTransformer {
4
+ function transform(project: INestiaTransformProject, type: ts.Type, decorator: ts.Decorator): ts.Decorator;
5
+ }
@@ -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,3 @@
1
+ export type Creator<T extends object> = {
2
+ new (...args: any[]): T;
3
+ };
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Creator.js.map
@@ -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