@nestia/core 2.1.4-dev.20230927 → 2.1.4
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/lib/programmers/TypedBodyProgrammer.js +3 -0
- package/lib/programmers/TypedBodyProgrammer.js.map +1 -1
- package/lib/programmers/TypedExceptionProgrammer.js +32 -2
- package/lib/programmers/TypedExceptionProgrammer.js.map +1 -1
- package/lib/transformers/FileTransformer.js +30 -22
- package/lib/transformers/FileTransformer.js.map +1 -1
- package/package.json +3 -3
- package/src/programmers/TypedBodyProgrammer.ts +6 -0
- package/src/programmers/TypedExceptionProgrammer.ts +36 -2
- package/src/transformers/FileTransformer.ts +8 -3
|
@@ -16,6 +16,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.TypedBodyProgrammer = void 0;
|
|
18
18
|
var typescript_1 = __importDefault(require("typescript"));
|
|
19
|
+
var JsonMetadataFactory_1 = require("typia/lib/factories/JsonMetadataFactory");
|
|
19
20
|
var AssertProgrammer_1 = require("typia/lib/programmers/AssertProgrammer");
|
|
20
21
|
var IsProgrammer_1 = require("typia/lib/programmers/IsProgrammer");
|
|
21
22
|
var ValidateProgrammer_1 = require("typia/lib/programmers/ValidateProgrammer");
|
|
@@ -24,6 +25,8 @@ var TypedBodyProgrammer;
|
|
|
24
25
|
TypedBodyProgrammer.generate = function (project) {
|
|
25
26
|
return function (modulo) {
|
|
26
27
|
return function (type) {
|
|
28
|
+
// VALIDATE TYPE
|
|
29
|
+
JsonMetadataFactory_1.JsonMetadataFactory.analyze("@nestia.core.TypedBody")(project.checker)(type);
|
|
27
30
|
// GENERATE VALIDATION PLAN
|
|
28
31
|
var parameter = function (key) {
|
|
29
32
|
return function (equals) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypedBodyProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedBodyProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,2EAA0E;AAC1E,mEAAkE;AAClE,+EAA8E;AAM9E,IAAiB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"TypedBodyProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedBodyProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,+EAA8E;AAC9E,2EAA0E;AAC1E,mEAAkE;AAClE,+EAA8E;AAM9E,IAAiB,mBAAmB,CAuDnC;AAvDD,WAAiB,mBAAmB;IACnB,4BAAQ,GACjB,UAAC,OAAgC;QACjC,OAAA,UAAC,MAAiC;YAClC,OAAA,UAAC,IAAa;gBACV,gBAAgB;gBAChB,yCAAmB,CAAC,OAAO,CAAC,wBAAwB,CAAC,CACjD,OAAO,CAAC,OAAO,CAClB,CAAC,IAAI,CAAC,CAAC;gBAER,2BAA2B;gBAC3B,IAAM,SAAS,GACX,UAAC,GAAuC;oBACxC,OAAA,UAAC,MAAe;wBAChB,OAAA,UACI,UAMwC;4BAExC,OAAA,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;gCACrC,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CAC/B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,EACnC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CACtC;gCACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CAC/B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAChC,UAAU,uBACH,OAAO,KACV,OAAO,EAAE;wCACL,OAAO,EAAE,KAAK;wCACd,MAAM,EAAE,KAAK;wCACb,UAAU,EAAE,KAAK;qCACpB,IACH,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAC3B;6BACJ,CAAC;wBAhBF,CAgBE;oBAzBN,CAyBM;gBA1BN,CA0BM,CAAC;gBAEX,UAAU;gBACV,IAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC1C,IAAI,QAAQ,KAAK,IAAI;oBACjB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,2BAAY,CAAC,KAAK,CAAC,CAAC;qBACjD,IAAI,QAAQ,KAAK,UAAU;oBAC5B,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,uCAAkB,CAAC,KAAK,CAAC,CAAC;qBAC7D,IAAI,QAAQ,KAAK,gBAAgB;oBAClC,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,uCAAkB,CAAC,KAAK,CAAC,CAAC;qBAC5D,IAAI,QAAQ,KAAK,QAAQ;oBAC1B,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,mCAAgB,CAAC,KAAK,CAAC,CAAC;qBACpD,IAAI,QAAQ,KAAK,cAAc;oBAChC,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,mCAAgB,CAAC,KAAK,CAAC,CAAC;gBAC7D,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,mCAAgB,CAAC,KAAK,CAAC,CAAC;YAC9D,CAAC;QAlDD,CAkDC;IAnDD,CAmDC,CAAC;AACV,CAAC,EAvDgB,mBAAmB,mCAAnB,mBAAmB,QAuDnC"}
|
|
@@ -5,7 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TypedExceptionProgrammer = void 0;
|
|
7
7
|
var typescript_1 = __importDefault(require("typescript"));
|
|
8
|
+
var JsonMetadataFactory_1 = require("typia/lib/factories/JsonMetadataFactory");
|
|
8
9
|
var TypeFactory_1 = require("typia/lib/factories/TypeFactory");
|
|
10
|
+
var TransformerError_1 = require("typia/lib/transformers/TransformerError");
|
|
9
11
|
var TypedExceptionProgrammer;
|
|
10
12
|
(function (TypedExceptionProgrammer) {
|
|
11
13
|
TypedExceptionProgrammer.generate = function (_a) {
|
|
@@ -14,12 +16,40 @@ var TypedExceptionProgrammer;
|
|
|
14
16
|
var _a, _b;
|
|
15
17
|
// CHECK GENERIC ARGUMENT EXISTENCE
|
|
16
18
|
if (!((_a = expression.typeArguments) === null || _a === void 0 ? void 0 : _a[0]))
|
|
17
|
-
throw
|
|
19
|
+
throw TransformerError_1.TransformerError.from("@nestia.core.TypedException")([
|
|
20
|
+
{
|
|
21
|
+
name: "uknown",
|
|
22
|
+
messages: [NOT_SPECIFIED],
|
|
23
|
+
explore: {
|
|
24
|
+
top: true,
|
|
25
|
+
object: null,
|
|
26
|
+
property: null,
|
|
27
|
+
nested: null,
|
|
28
|
+
escaped: false,
|
|
29
|
+
aliased: false,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
]);
|
|
18
33
|
// GET TYPE INFO
|
|
19
34
|
var node = expression.typeArguments[0];
|
|
20
35
|
var type = checker.getTypeFromTypeNode(node);
|
|
36
|
+
// VALIDATE TYPE
|
|
21
37
|
if (type.isTypeParameter())
|
|
22
|
-
throw
|
|
38
|
+
throw TransformerError_1.TransformerError.from("@nestia.core.TypedException")([
|
|
39
|
+
{
|
|
40
|
+
name: TypeFactory_1.TypeFactory.getFullName(checker)(type),
|
|
41
|
+
messages: [NO_GENERIC_ARGUMENT],
|
|
42
|
+
explore: {
|
|
43
|
+
top: true,
|
|
44
|
+
object: null,
|
|
45
|
+
property: null,
|
|
46
|
+
nested: null,
|
|
47
|
+
escaped: false,
|
|
48
|
+
aliased: false,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
]);
|
|
52
|
+
JsonMetadataFactory_1.JsonMetadataFactory.analyze("@nestia.core.TypedException")(checker)(type);
|
|
23
53
|
// CHECK DUPLICATED TRNASFORMATION
|
|
24
54
|
if (expression.arguments.length === 3)
|
|
25
55
|
return expression;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TypedExceptionProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedExceptionProgrammer.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,+DAA8D;
|
|
1
|
+
{"version":3,"file":"TypedExceptionProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedExceptionProgrammer.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA4B;AAE5B,+EAA8E;AAC9E,+DAA8D;AAC9D,4EAA2E;AAI3E,IAAiB,wBAAwB,CA8DxC;AA9DD,WAAiB,wBAAwB;IACxB,iCAAQ,GACjB,UAAC,EAAoC;YAAlC,OAAO,aAAA;QACV,OAAA,UAAC,UAA6B;;YAC1B,mCAAmC;YACnC,IAAI,CAAC,CAAA,MAAA,UAAU,CAAC,aAAa,0CAAG,CAAC,CAAC,CAAA;gBAC9B,MAAM,mCAAgB,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;oBACvD;wBACI,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,CAAC,aAAa,CAAC;wBACzB,OAAO,EAAE;4BACL,GAAG,EAAE,IAAI;4BACT,MAAM,EAAE,IAAI;4BACZ,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,IAAI;4BACZ,OAAO,EAAE,KAAK;4BACd,OAAO,EAAE,KAAK;yBACjB;qBACJ;iBACJ,CAAC,CAAC;YAEP,gBAAgB;YAChB,IAAM,IAAI,GAAgB,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACtD,IAAM,IAAI,GAAY,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAExD,gBAAgB;YAChB,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtB,MAAM,mCAAgB,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;oBACvD;wBACI,IAAI,EAAE,yBAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;wBAC5C,QAAQ,EAAE,CAAC,mBAAmB,CAAC;wBAC/B,OAAO,EAAE;4BACL,GAAG,EAAE,IAAI;4BACT,MAAM,EAAE,IAAI;4BACZ,QAAQ,EAAE,IAAI;4BACd,MAAM,EAAE,IAAI;4BACZ,OAAO,EAAE,KAAK;4BACd,OAAO,EAAE,KAAK;yBACjB;qBACJ;iBACJ,CAAC,CAAC;YACP,yCAAmB,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,OAAO,CAAC,CAC/D,IAAI,CACP,CAAC;YAEF,kCAAkC;YAClC,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,UAAU,CAAC;YAEzD,eAAe;YACf,IAAM,IAAI,GAAW,yBAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5D,OAAO,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAClC,UAAU,EACV,UAAU,CAAC,UAAU,EACrB,UAAU,CAAC,aAAa,EACxB;gBACI,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;gBACvB,MAAA,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,mCACnB,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC;gBAC5C,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC;aACvC,CACJ,CAAC;QACN,CAAC;IA1DD,CA0DC,CAAC;AACV,CAAC,EA9DgB,wBAAwB,wCAAxB,wBAAwB,QA8DxC;AAED,IAAM,aAAa,GACf,4EAA4E,CAAC;AACjF,IAAM,mBAAmB,GACrB,yEAAyE,CAAC"}
|
|
@@ -25,38 +25,46 @@ var FileTransformer;
|
|
|
25
25
|
return file.isDeclarationFile
|
|
26
26
|
? file
|
|
27
27
|
: typescript_1.default.visitEachChild(file, function (node) {
|
|
28
|
-
return iterate_node(__assign(__assign({}, project), { context: context }))(context)(node);
|
|
28
|
+
return iterate_node(__assign(__assign({}, project), { context: context }))(context)(file)(node);
|
|
29
29
|
}, context);
|
|
30
30
|
};
|
|
31
31
|
};
|
|
32
32
|
};
|
|
33
33
|
var iterate_node = function (project) {
|
|
34
34
|
return function (context) {
|
|
35
|
-
return function (
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
return function (file) {
|
|
36
|
+
return function (node) {
|
|
37
|
+
var _a;
|
|
38
|
+
return typescript_1.default.visitEachChild((_a = try_transform_node(project)(file)(node)) !== null && _a !== void 0 ? _a : node, function (child) { return iterate_node(project)(context)(file)(child); }, context);
|
|
39
|
+
};
|
|
38
40
|
};
|
|
39
41
|
};
|
|
40
42
|
};
|
|
41
43
|
var try_transform_node = function (project) {
|
|
42
|
-
return function (
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
44
|
+
return function (file) {
|
|
45
|
+
return function (node) {
|
|
46
|
+
var _a;
|
|
47
|
+
var _b;
|
|
48
|
+
try {
|
|
49
|
+
return NodeTransformer_1.NodeTransformer.transform(project)(node);
|
|
50
|
+
}
|
|
51
|
+
catch (exp) {
|
|
52
|
+
// ONLY ACCEPT TRANSFORMER-ERROR
|
|
53
|
+
if (!isTransformerError(exp))
|
|
54
|
+
throw exp;
|
|
55
|
+
// AVOID SPECIAL BUG OF TYPESCRIPT COMPILER API
|
|
56
|
+
(_a = (_b = node).parent) !== null && _a !== void 0 ? _a : (_b.parent = file);
|
|
57
|
+
// REPORT DIAGNOSTIC
|
|
58
|
+
var diagnostic = typescript_1.default.createDiagnosticForNode(node, {
|
|
59
|
+
key: exp.code,
|
|
60
|
+
category: typescript_1.default.DiagnosticCategory.Error,
|
|
61
|
+
message: exp.message,
|
|
62
|
+
code: "(".concat(exp.code, ")"),
|
|
63
|
+
});
|
|
64
|
+
project.extras.addDiagnostic(diagnostic);
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
60
68
|
};
|
|
61
69
|
};
|
|
62
70
|
})(FileTransformer || (exports.FileTransformer = FileTransformer = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileTransformer.js","sourceRoot":"","sources":["../../src/transformers/FileTransformer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAK5B,qDAAoD;AAEpD,IAAiB,eAAe,
|
|
1
|
+
{"version":3,"file":"FileTransformer.js","sourceRoot":"","sources":["../../src/transformers/FileTransformer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAK5B,qDAAoD;AAEpD,IAAiB,eAAe,CAoD/B;AApDD,WAAiB,eAAe;IACf,yBAAS,GAClB,UAAC,OAAiD;QAClD,OAAA,UAAC,OAAiC;YAClC,OAAA,UAAC,IAAmB;gBAChB,OAAA,IAAI,CAAC,iBAAiB;oBAClB,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,oBAAE,CAAC,cAAc,CACb,IAAI,EACJ,UAAC,IAAI;wBACD,OAAA,YAAY,uBACL,OAAO,KACV,OAAO,SAAA,IACT,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;oBAHvB,CAGuB,EAC3B,OAAO,CACV;YAVP,CAUO;QAXX,CAWW;IAZX,CAYW,CAAC;IAEhB,IAAM,YAAY,GACd,UAAC,OAAgC;QACjC,OAAA,UAAC,OAAiC;YAClC,OAAA,UAAC,IAAmB;gBACpB,OAAA,UAAC,IAAa;;oBACV,OAAA,oBAAE,CAAC,cAAc,CACb,MAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,mCAAI,IAAI,EAC/C,UAAC,KAAK,IAAK,OAAA,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAA3C,CAA2C,EACtD,OAAO,CACV,CAAA;iBAAA;YALL,CAKK;QANL,CAMK;IAPL,CAOK,CAAC;IAEV,IAAM,kBAAkB,GACpB,UAAC,OAAgC;QACjC,OAAA,UAAC,IAAmB;YACpB,OAAA,UAAC,IAAa;;;gBACV,IAAI;oBACA,OAAO,iCAAe,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;iBACnD;gBAAC,OAAO,GAAG,EAAE;oBACV,gCAAgC;oBAChC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;wBAAE,MAAM,GAAG,CAAC;oBAExC,+CAA+C;oBAC/C,YAAC,IAAY,EAAC,MAAM,uCAAN,MAAM,GAAK,IAAI,EAAC;oBAE9B,oBAAoB;oBACpB,IAAM,UAAU,GAAG,oBAAE,CAAC,uBAAuB,CAAC,IAAI,EAAE;wBAChD,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,QAAQ,EAAE,oBAAE,CAAC,kBAAkB,CAAC,KAAK;wBACrC,OAAO,EAAE,GAAG,CAAC,OAAO;wBACpB,IAAI,EAAE,WAAI,GAAG,CAAC,IAAI,MAAU;qBAC/B,CAAC,CAAC;oBACH,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBACzC,OAAO,IAAI,CAAC;iBACf;YACL,CAAC;QApBD,CAoBC;IArBD,CAqBC,CAAC;AACV,CAAC,EApDgB,eAAe,+BAAf,eAAe,QAoD/B;AAED,IAAM,kBAAkB,GAAG,UAAC,KAAU;IAClC,OAAA,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,kBAAkB;QAC7C,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC9B,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;AAJjC,CAIiC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nestia/core",
|
|
3
|
-
"version": "2.1.4
|
|
3
|
+
"version": "2.1.4",
|
|
4
4
|
"description": "Super-fast validation decorators of NestJS",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"typings": "lib/index.d.ts",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"homepage": "https://nestia.io",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@nestia/fetcher": "^2.1.4
|
|
37
|
+
"@nestia/fetcher": "^2.1.4",
|
|
38
38
|
"@nestjs/common": ">= 7.0.1",
|
|
39
39
|
"@nestjs/core": ">= 7.0.1",
|
|
40
40
|
"@nestjs/platform-express": ">= 7.0.1",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"typia": "^5.1.3"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@nestia/fetcher": ">=2.1.4
|
|
50
|
+
"@nestia/fetcher": ">=2.1.4",
|
|
51
51
|
"@nestjs/common": ">=7.0.1",
|
|
52
52
|
"@nestjs/core": ">=7.0.1",
|
|
53
53
|
"@nestjs/platform-express": ">=7.0.1",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
|
|
3
|
+
import { JsonMetadataFactory } from "typia/lib/factories/JsonMetadataFactory";
|
|
3
4
|
import { AssertProgrammer } from "typia/lib/programmers/AssertProgrammer";
|
|
4
5
|
import { IsProgrammer } from "typia/lib/programmers/IsProgrammer";
|
|
5
6
|
import { ValidateProgrammer } from "typia/lib/programmers/ValidateProgrammer";
|
|
@@ -13,6 +14,11 @@ export namespace TypedBodyProgrammer {
|
|
|
13
14
|
(project: INestiaTransformProject) =>
|
|
14
15
|
(modulo: ts.LeftHandSideExpression) =>
|
|
15
16
|
(type: ts.Type): ts.ObjectLiteralExpression => {
|
|
17
|
+
// VALIDATE TYPE
|
|
18
|
+
JsonMetadataFactory.analyze("@nestia.core.TypedBody")(
|
|
19
|
+
project.checker,
|
|
20
|
+
)(type);
|
|
21
|
+
|
|
16
22
|
// GENERATE VALIDATION PLAN
|
|
17
23
|
const parameter =
|
|
18
24
|
(key: IRequestBodyValidator<any>["type"]) =>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
|
|
3
|
+
import { JsonMetadataFactory } from "typia/lib/factories/JsonMetadataFactory";
|
|
3
4
|
import { TypeFactory } from "typia/lib/factories/TypeFactory";
|
|
5
|
+
import { TransformerError } from "typia/lib/transformers/TransformerError";
|
|
4
6
|
|
|
5
7
|
import { INestiaTransformProject } from "../options/INestiaTransformProject";
|
|
6
8
|
|
|
@@ -9,13 +11,45 @@ export namespace TypedExceptionProgrammer {
|
|
|
9
11
|
({ checker }: INestiaTransformProject) =>
|
|
10
12
|
(expression: ts.CallExpression): ts.CallExpression => {
|
|
11
13
|
// CHECK GENERIC ARGUMENT EXISTENCE
|
|
12
|
-
if (!expression.typeArguments?.[0])
|
|
14
|
+
if (!expression.typeArguments?.[0])
|
|
15
|
+
throw TransformerError.from("@nestia.core.TypedException")([
|
|
16
|
+
{
|
|
17
|
+
name: "uknown",
|
|
18
|
+
messages: [NOT_SPECIFIED],
|
|
19
|
+
explore: {
|
|
20
|
+
top: true,
|
|
21
|
+
object: null,
|
|
22
|
+
property: null,
|
|
23
|
+
nested: null,
|
|
24
|
+
escaped: false,
|
|
25
|
+
aliased: false,
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
]);
|
|
13
29
|
|
|
14
30
|
// GET TYPE INFO
|
|
15
31
|
const node: ts.TypeNode = expression.typeArguments[0];
|
|
16
32
|
const type: ts.Type = checker.getTypeFromTypeNode(node);
|
|
17
33
|
|
|
18
|
-
|
|
34
|
+
// VALIDATE TYPE
|
|
35
|
+
if (type.isTypeParameter())
|
|
36
|
+
throw TransformerError.from("@nestia.core.TypedException")([
|
|
37
|
+
{
|
|
38
|
+
name: TypeFactory.getFullName(checker)(type),
|
|
39
|
+
messages: [NO_GENERIC_ARGUMENT],
|
|
40
|
+
explore: {
|
|
41
|
+
top: true,
|
|
42
|
+
object: null,
|
|
43
|
+
property: null,
|
|
44
|
+
nested: null,
|
|
45
|
+
escaped: false,
|
|
46
|
+
aliased: false,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
]);
|
|
50
|
+
JsonMetadataFactory.analyze("@nestia.core.TypedException")(checker)(
|
|
51
|
+
type,
|
|
52
|
+
);
|
|
19
53
|
|
|
20
54
|
// CHECK DUPLICATED TRNASFORMATION
|
|
21
55
|
if (expression.arguments.length === 3) return expression;
|
|
@@ -18,22 +18,24 @@ export namespace FileTransformer {
|
|
|
18
18
|
iterate_node({
|
|
19
19
|
...project,
|
|
20
20
|
context,
|
|
21
|
-
})(context)(node),
|
|
21
|
+
})(context)(file)(node),
|
|
22
22
|
context,
|
|
23
23
|
);
|
|
24
24
|
|
|
25
25
|
const iterate_node =
|
|
26
26
|
(project: INestiaTransformProject) =>
|
|
27
27
|
(context: ts.TransformationContext) =>
|
|
28
|
+
(file: ts.SourceFile) =>
|
|
28
29
|
(node: ts.Node): ts.Node =>
|
|
29
30
|
ts.visitEachChild(
|
|
30
|
-
try_transform_node(project)(node) ?? node,
|
|
31
|
-
(child) => iterate_node(project)(context)(child),
|
|
31
|
+
try_transform_node(project)(file)(node) ?? node,
|
|
32
|
+
(child) => iterate_node(project)(context)(file)(child),
|
|
32
33
|
context,
|
|
33
34
|
);
|
|
34
35
|
|
|
35
36
|
const try_transform_node =
|
|
36
37
|
(project: INestiaTransformProject) =>
|
|
38
|
+
(file: ts.SourceFile) =>
|
|
37
39
|
(node: ts.Node): ts.Node | null => {
|
|
38
40
|
try {
|
|
39
41
|
return NodeTransformer.transform(project)(node);
|
|
@@ -41,6 +43,9 @@ export namespace FileTransformer {
|
|
|
41
43
|
// ONLY ACCEPT TRANSFORMER-ERROR
|
|
42
44
|
if (!isTransformerError(exp)) throw exp;
|
|
43
45
|
|
|
46
|
+
// AVOID SPECIAL BUG OF TYPESCRIPT COMPILER API
|
|
47
|
+
(node as any).parent ??= file;
|
|
48
|
+
|
|
44
49
|
// REPORT DIAGNOSTIC
|
|
45
50
|
const diagnostic = ts.createDiagnosticForNode(node, {
|
|
46
51
|
key: exp.code,
|