@nestia/core 2.0.6 → 2.1.0-dev.20230926

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 (65) hide show
  1. package/lib/decorators/TypedHeaders.d.ts +2 -1
  2. package/lib/decorators/TypedHeaders.js +13 -60
  3. package/lib/decorators/TypedHeaders.js.map +1 -1
  4. package/lib/decorators/TypedParam.d.ts +1 -8
  5. package/lib/decorators/TypedParam.js +24 -6
  6. package/lib/decorators/TypedParam.js.map +1 -1
  7. package/lib/decorators/TypedQuery.d.ts +2 -1
  8. package/lib/decorators/TypedQuery.js +13 -76
  9. package/lib/decorators/TypedQuery.js.map +1 -1
  10. package/lib/decorators/internal/get_path_and_stringify.d.ts +1 -1
  11. package/lib/decorators/internal/get_path_and_stringify.js +18 -0
  12. package/lib/decorators/internal/get_path_and_stringify.js.map +1 -1
  13. package/lib/decorators/internal/get_text_body.d.ts +1 -3
  14. package/lib/decorators/internal/get_text_body.js +6 -0
  15. package/lib/decorators/internal/get_text_body.js.map +1 -1
  16. package/lib/decorators/internal/headers_to_object.d.ts +1 -3
  17. package/lib/decorators/internal/headers_to_object.js +3 -0
  18. package/lib/decorators/internal/headers_to_object.js.map +1 -1
  19. package/lib/decorators/internal/load_controller.d.ts +1 -5
  20. package/lib/decorators/internal/load_controller.js +9 -0
  21. package/lib/decorators/internal/load_controller.js.map +1 -1
  22. package/lib/decorators/internal/route_error.d.ts +1 -3
  23. package/lib/decorators/internal/route_error.js +3 -0
  24. package/lib/decorators/internal/route_error.js.map +1 -1
  25. package/lib/decorators/internal/validate_request_body.d.ts +1 -1
  26. package/lib/decorators/internal/validate_request_body.js +6 -6
  27. package/lib/decorators/internal/validate_request_body.js.map +1 -1
  28. package/lib/decorators/internal/validate_request_headers.d.ts +3 -0
  29. package/lib/decorators/internal/validate_request_headers.js +64 -0
  30. package/lib/decorators/internal/validate_request_headers.js.map +1 -0
  31. package/lib/decorators/internal/validate_request_query.d.ts +3 -0
  32. package/lib/decorators/internal/validate_request_query.js +64 -0
  33. package/lib/decorators/internal/validate_request_query.js.map +1 -0
  34. package/lib/options/IRequestHeadersValidator.d.ts +16 -0
  35. package/lib/options/IRequestHeadersValidator.js +3 -0
  36. package/lib/options/IRequestHeadersValidator.js.map +1 -0
  37. package/lib/options/IRequestQueryValidator.d.ts +16 -0
  38. package/lib/options/IRequestQueryValidator.js +3 -0
  39. package/lib/options/IRequestQueryValidator.js.map +1 -0
  40. package/lib/programmers/TypedHeadersProgrammer.d.ts +0 -3
  41. package/lib/programmers/TypedHeadersProgrammer.js +21 -228
  42. package/lib/programmers/TypedHeadersProgrammer.js.map +1 -1
  43. package/lib/programmers/TypedParamProgrammer.d.ts +0 -2
  44. package/lib/programmers/TypedParamProgrammer.js +4 -92
  45. package/lib/programmers/TypedParamProgrammer.js.map +1 -1
  46. package/lib/programmers/TypedQueryProgrammer.d.ts +0 -3
  47. package/lib/programmers/TypedQueryProgrammer.js +22 -183
  48. package/lib/programmers/TypedQueryProgrammer.js.map +1 -1
  49. package/package.json +5 -5
  50. package/src/decorators/TypedHeaders.ts +13 -38
  51. package/src/decorators/TypedParam.ts +19 -18
  52. package/src/decorators/TypedQuery.ts +12 -50
  53. package/src/decorators/internal/get_path_and_stringify.ts +18 -0
  54. package/src/decorators/internal/get_text_body.ts +6 -0
  55. package/src/decorators/internal/headers_to_object.ts +3 -0
  56. package/src/decorators/internal/load_controller.ts +9 -0
  57. package/src/decorators/internal/route_error.ts +3 -0
  58. package/src/decorators/internal/validate_request_body.ts +6 -6
  59. package/src/decorators/internal/validate_request_headers.ts +73 -0
  60. package/src/decorators/internal/validate_request_query.ts +59 -0
  61. package/src/options/IRequestHeadersValidator.ts +22 -0
  62. package/src/options/IRequestQueryValidator.ts +20 -0
  63. package/src/programmers/TypedHeadersProgrammer.ts +40 -285
  64. package/src/programmers/TypedParamProgrammer.ts +7 -138
  65. package/src/programmers/TypedQueryProgrammer.ts +38 -251
@@ -1 +1 @@
1
- {"version":3,"file":"TypedParamProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedParamProgrammer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TypedParamProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedParamProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,8FAA6F;AAI7F,IAAiB,oBAAoB,CAkBpC;AAlBD,WAAiB,oBAAoB;IACpB,6BAAQ,GACjB,UAAC,OAAgC;QACjC,OAAA,UAAC,MAAiC;YAClC,OAAA,UAAC,UAAoC;gBACrC,OAAA,UAAC,IAAa;oBACV,4BAA4B;oBAC5B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,UAAU,CAAC;oBAC/C,OAAO;wBACH,UAAU,CAAC,CAAC,CAAC;wBACb,iDAAuB,CAAC,KAAK,uBACtB,OAAO,KACV,OAAO,EAAE;gCACL,OAAO,EAAE,IAAI;6BAChB,IACH,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;qBACnB,CAAC;gBACN,CAAC;YAZD,CAYC;QAbD,CAaC;IAdD,CAcC,CAAC;AACV,CAAC,EAlBgB,oBAAoB,oCAApB,oBAAoB,QAkBpC"}
@@ -1,8 +1,5 @@
1
1
  import ts from "typescript";
2
- import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
3
- import { Metadata } from "typia/lib/schemas/metadata/Metadata";
4
2
  import { INestiaTransformProject } from "../options/INestiaTransformProject";
5
3
  export declare namespace TypedQueryProgrammer {
6
4
  const generate: (project: INestiaTransformProject) => (modulo: ts.LeftHandSideExpression) => (type: ts.Type) => ts.Expression;
7
- const validate: (meta: Metadata, explore: MetadataFactory.IExplore) => string[];
8
5
  }
@@ -10,201 +10,40 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
- var __read = (this && this.__read) || function (o, n) {
14
- var m = typeof Symbol === "function" && o[Symbol.iterator];
15
- if (!m) return o;
16
- var i = m.call(o), r, ar = [], e;
17
- try {
18
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
- }
20
- catch (error) { e = { error: error }; }
21
- finally {
22
- try {
23
- if (r && !r.done && (m = i["return"])) m.call(i);
24
- }
25
- finally { if (e) throw e.error; }
26
- }
27
- return ar;
28
- };
29
- var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
30
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
31
- if (ar || !(i in from)) {
32
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
33
- ar[i] = from[i];
34
- }
35
- }
36
- return to.concat(ar || Array.prototype.slice.call(from));
37
- };
38
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
39
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
15
  };
41
16
  Object.defineProperty(exports, "__esModule", { value: true });
42
17
  exports.TypedQueryProgrammer = void 0;
43
18
  var typescript_1 = __importDefault(require("typescript"));
44
- var IdentifierFactory_1 = require("typia/lib/factories/IdentifierFactory");
45
- var MetadataCollection_1 = require("typia/lib/factories/MetadataCollection");
46
- var MetadataFactory_1 = require("typia/lib/factories/MetadataFactory");
47
- var StatementFactory_1 = require("typia/lib/factories/StatementFactory");
48
- var AssertProgrammer_1 = require("typia/lib/programmers/AssertProgrammer");
49
- var FunctionImporeter_1 = require("typia/lib/programmers/helpers/FunctionImporeter");
50
- var MetadataArray_1 = require("typia/lib/schemas/metadata/MetadataArray");
51
- var TransformerError_1 = require("typia/lib/transformers/TransformerError");
52
- var Escaper_1 = require("typia/lib/utils/Escaper");
53
- var CoreMetadataUtil_1 = require("./internal/CoreMetadataUtil");
19
+ var HttpAssertQueryProgrammer_1 = require("typia/lib/programmers/http/HttpAssertQueryProgrammer");
20
+ var HttpIsQueryProgrammer_1 = require("typia/lib/programmers/http/HttpIsQueryProgrammer");
21
+ var HttpValidateQueryProgrammer_1 = require("typia/lib/programmers/http/HttpValidateQueryProgrammer");
54
22
  var TypedQueryProgrammer;
55
23
  (function (TypedQueryProgrammer) {
56
24
  TypedQueryProgrammer.generate = function (project) {
57
25
  return function (modulo) {
58
26
  return function (type) {
59
- var object = getObject(project.checker)(type);
60
- return decode(project, modulo)(type, object);
61
- };
62
- };
63
- };
64
- TypedQueryProgrammer.validate = function (meta, explore) {
65
- var errors = [];
66
- var insert = function (msg) { return errors.push(msg); };
67
- if (explore.top === true) {
68
- // TOP MUST BE ONLY OBJECT
69
- if (meta.objects.length !== 1 || meta.bucket() !== 1)
70
- insert("only one object type is allowed.");
71
- if (meta.nullable === true)
72
- insert("query parameters cannot be null.");
73
- if (meta.isRequired() === false)
74
- insert("query parameters cannot be undefined.");
75
- }
76
- else if (explore.nested !== null &&
77
- explore.nested instanceof MetadataArray_1.MetadataArray) {
78
- var atomics = CoreMetadataUtil_1.CoreMetadataUtil.atomics(meta);
79
- var expected = meta.atomics.length +
80
- meta.templates.length +
81
- meta.constants
82
- .map(function (c) { return c.values.length; })
83
- .reduce(function (a, b) { return a + b; }, 0);
84
- if (atomics.size > 1)
85
- insert("union type is not allowed in array.");
86
- if (meta.nullable)
87
- insert("nullable type is not allowed in array.");
88
- if (meta.isRequired() === false)
89
- insert("optional type is not allowed in array.");
90
- if (meta.size() !== expected)
91
- insert("only atomic or constant types are allowed in array.");
92
- }
93
- else if (explore.object && explore.property !== null) {
94
- //----
95
- // COMMON
96
- //----
97
- // PROPERTY MUST BE SOLE
98
- if (typeof explore.property === "object")
99
- insert("dynamic property is not allowed.");
100
- // DO NOT ALLOW TUPLE TYPE
101
- if (meta.tuples.length)
102
- insert("tuple type is not allowed.");
103
- // DO NOT ALLOW UNION TYPE
104
- if (CoreMetadataUtil_1.CoreMetadataUtil.isUnion(meta))
105
- insert("union type is not allowed.");
106
- // DO NOT ALLOW NESTED OBJECT
107
- if (meta.objects.length ||
108
- meta.sets.length ||
109
- meta.maps.length ||
110
- meta.natives.length)
111
- insert("nested object type is not allowed.");
112
- //----
113
- // ARRAY CASES
114
- //----
115
- var isArray = meta.arrays.length > 1 || meta.tuples.length > 1;
116
- // ARRAY TYPE MUST BE REQUIRED
117
- if (isArray && meta.isRequired() === false)
118
- insert("optional type is not allowed when array.");
119
- // SET-COOKIE MUST BE ARRAY
120
- if (explore.property === "set-cookie" && !isArray)
121
- insert("set-cookie property must be array.");
122
- }
123
- return errors;
124
- };
125
- var getObject = function (checker) {
126
- return function (type) {
127
- var collection = new MetadataCollection_1.MetadataCollection();
128
- var result = MetadataFactory_1.MetadataFactory.analyze(checker)({
129
- escape: false,
130
- constant: true,
131
- absorb: true,
132
- validate: TypedQueryProgrammer.validate,
133
- })(collection)(type);
134
- if (result.success === false)
135
- throw TransformerError_1.TransformerError.from("@core.nestia.TypedHeaders")(result.errors);
136
- return result.data.objects[0];
137
- };
138
- };
139
- var decode = function (project, modulo) {
140
- return function (type, object) {
141
- return typescript_1.default.factory.createArrowFunction(undefined, undefined, [IdentifierFactory_1.IdentifierFactory.parameter("input")], undefined, undefined, decode_object(project, modulo)(type, object));
142
- };
143
- };
144
- var decode_object = function (project, modulo) {
145
- return function (type, object) {
146
- var assert = AssertProgrammer_1.AssertProgrammer.write(__assign(__assign({}, project), { options: {
147
- numeric: true,
148
- finite: true,
149
- } }))(modulo)(false)(type);
150
- var output = typescript_1.default.factory.createIdentifier("output");
151
- var importer = new FunctionImporeter_1.FunctionImporter("TypedQuery");
152
- var optionalArrays = [];
153
- var statements = __spreadArray(__spreadArray([
154
- StatementFactory_1.StatementFactory.constant("output", typescript_1.default.factory.createObjectLiteralExpression(object.properties.map(function (prop) {
155
- if (!prop.value.isRequired() &&
156
- prop.value.arrays.length +
157
- prop.value.tuples.length >
158
- 0)
159
- optionalArrays.push(prop.key.constants[0].values[0]);
160
- return decode_regular_property(importer)(prop);
161
- }), true))
162
- ], __read(optionalArrays.map(function (key) {
163
- var access = IdentifierFactory_1.IdentifierFactory.access(output)(key);
164
- return typescript_1.default.factory.createIfStatement(typescript_1.default.factory.createStrictEquality(typescript_1.default.factory.createNumericLiteral(0), IdentifierFactory_1.IdentifierFactory.access(access)("length")), typescript_1.default.factory.createExpressionStatement(typescript_1.default.factory.createDeleteExpression(access)));
165
- })), false), [
166
- typescript_1.default.factory.createReturnStatement(typescript_1.default.factory.createCallExpression(assert, undefined, [
167
- output,
168
- ])),
169
- ], false);
170
- return typescript_1.default.factory.createBlock(__spreadArray(__spreadArray([], __read(importer.declare(modulo)), false), __read(statements), false), true);
171
- };
172
- };
173
- var decode_regular_property = function (importer) {
174
- return function (property) {
175
- var key = property.key.constants[0].values[0];
176
- var value = property.value;
177
- var _a = __read(value.atomics
178
- .length
179
- ? [value.atomics[0].type, false]
180
- : value.constants.length
181
- ? [value.constants[0].type, false]
182
- : (function () {
183
- var _a, _b;
184
- var meta = (_b = (_a = value.arrays[0]) === null || _a === void 0 ? void 0 : _a.type.value) !== null && _b !== void 0 ? _b : value.tuples[0].type.elements[0];
185
- return meta.atomics.length
186
- ? [meta.atomics[0].type, true]
187
- : [meta.constants[0].type, true];
188
- })(), 2), type = _a[0], isArray = _a[1];
189
- return typescript_1.default.factory.createPropertyAssignment(Escaper_1.Escaper.variable(key)
190
- ? key
191
- : typescript_1.default.factory.createStringLiteral(key), isArray
192
- ? typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("input.getAll"), undefined, [typescript_1.default.factory.createStringLiteral(key)]))("map"), undefined, [
193
- typescript_1.default.factory.createArrowFunction(undefined, undefined, [IdentifierFactory_1.IdentifierFactory.parameter("elem")], undefined, undefined, decode_value(importer)(type)(false)(typescript_1.default.factory.createIdentifier("elem"))),
194
- ])
195
- : decode_value(importer)(type)(value.nullable === false &&
196
- value.isRequired() === false)(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("input.get"), undefined, [typescript_1.default.factory.createStringLiteral(key)])));
197
- };
198
- };
199
- var decode_value = function (importer) {
200
- return function (type) {
201
- return function (onlyUndefindable) {
202
- return function (value) {
203
- var call = typescript_1.default.factory.createCallExpression(importer.use(type), undefined, [value]);
204
- return onlyUndefindable
205
- ? typescript_1.default.factory.createBinaryExpression(call, typescript_1.default.factory.createToken(typescript_1.default.SyntaxKind.QuestionQuestionToken), typescript_1.default.factory.createIdentifier("undefined"))
206
- : call;
27
+ // GENERATE VALIDATION PLAN
28
+ var parameter = function (key) {
29
+ return function (programmer) {
30
+ return typescript_1.default.factory.createObjectLiteralExpression([
31
+ typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("type"), typescript_1.default.factory.createStringLiteral(key)),
32
+ typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier(key), programmer(__assign(__assign({}, project), { options: {
33
+ numeric: false,
34
+ finite: false,
35
+ functional: false,
36
+ } }))(modulo)(type)),
37
+ ]);
38
+ };
207
39
  };
40
+ // RETURNS
41
+ var category = project.options.validate;
42
+ if (category === "is" || category === "equals")
43
+ return parameter("is")(HttpIsQueryProgrammer_1.HttpIsQueryProgrammer.write);
44
+ else if (category === "validate" || category === "validateEquals")
45
+ return parameter("validate")(HttpValidateQueryProgrammer_1.HttpValidateQueryProgrammer.write);
46
+ return parameter("assert")(HttpAssertQueryProgrammer_1.HttpAssertQueryProgrammer.write);
208
47
  };
209
48
  };
210
49
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TypedQueryProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedQueryProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,2EAA0E;AAC1E,6EAA4E;AAC5E,uEAAsE;AACtE,yEAAwE;AACxE,2EAA0E;AAC1E,qFAAmF;AAEnF,0EAAyE;AAGzE,4EAA2E;AAE3E,mDAAkD;AAGlD,gEAA+D;AAE/D,IAAiB,oBAAoB,CAqPpC;AArPD,WAAiB,oBAAoB;IACpB,6BAAQ,GACjB,UAAC,OAAgC;QACjC,OAAA,UAAC,MAAiC;YAClC,OAAA,UAAC,IAAa;gBACV,IAAM,MAAM,GAAmB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChE,OAAO,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,CAAC;QAHD,CAGC;IAJD,CAIC,CAAC;IAEO,6BAAQ,GAAG,UACpB,IAAc,EACd,OAAiC;QAEjC,IAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAM,MAAM,GAAG,UAAC,GAAW,IAAK,OAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAhB,CAAgB,CAAC;QAEjD,IAAI,OAAO,CAAC,GAAG,KAAK,IAAI,EAAE;YACtB,0BAA0B;YAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;gBAChD,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;gBACtB,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK;gBAC3B,MAAM,CAAC,uCAAuC,CAAC,CAAC;SACvD;aAAM,IACH,OAAO,CAAC,MAAM,KAAK,IAAI;YACvB,OAAO,CAAC,MAAM,YAAY,6BAAa,EACzC;YACE,IAAM,OAAO,GAAG,mCAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/C,IAAM,QAAQ,GACV,IAAI,CAAC,OAAO,CAAC,MAAM;gBACnB,IAAI,CAAC,SAAS,CAAC,MAAM;gBACrB,IAAI,CAAC,SAAS;qBACT,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,MAAM,EAAf,CAAe,CAAC;qBAC3B,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;gBAAE,MAAM,CAAC,qCAAqC,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,CAAC,wCAAwC,CAAC,CAAC;YACpE,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK;gBAC3B,MAAM,CAAC,wCAAwC,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ;gBACxB,MAAM,CAAC,qDAAqD,CAAC,CAAC;SACrE;aAAM,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,EAAE;YACpD,MAAM;YACN,SAAS;YACT,MAAM;YACN,wBAAwB;YACxB,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;gBACpC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/C,0BAA0B;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAC7D,0BAA0B;YAC1B,IAAI,mCAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC9B,MAAM,CAAC,4BAA4B,CAAC,CAAC;YACzC,6BAA6B;YAC7B,IACI,IAAI,CAAC,OAAO,CAAC,MAAM;gBACnB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAChB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAChB,IAAI,CAAC,OAAO,CAAC,MAAM;gBAEnB,MAAM,CAAC,oCAAoC,CAAC,CAAC;YAEjD,MAAM;YACN,cAAc;YACd,MAAM;YACN,IAAM,OAAO,GACT,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACrD,8BAA8B;YAC9B,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK;gBACtC,MAAM,CAAC,0CAA0C,CAAC,CAAC;YACvD,2BAA2B;YAC3B,IAAI,OAAO,CAAC,QAAQ,KAAK,YAAY,IAAI,CAAC,OAAO;gBAC7C,MAAM,CAAC,oCAAoC,CAAC,CAAC;SACpD;QACD,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF,IAAM,SAAS,GACX,UAAC,OAAuB;QACxB,OAAA,UAAC,IAAa;YACV,IAAM,UAAU,GAAuB,IAAI,uCAAkB,EAAE,CAAC;YAChE,IAAM,MAAM,GAAG,iCAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5C,MAAM,EAAE,KAAK;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI;gBACZ,QAAQ,+BAAA;aACX,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;gBACxB,MAAM,mCAAgB,CAAC,IAAI,CAAC,2BAA2B,CAAC,CACpD,MAAM,CAAC,MAAM,CAChB,CAAC;YACN,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;QACnC,CAAC;IAbD,CAaC,CAAC;IAEN,IAAM,MAAM,GACR,UAAC,OAAgC,EAAE,MAAiC;QACpE,OAAA,UAAC,IAAa,EAAE,MAAsB;YAClC,OAAA,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAC1B,SAAS,EACT,SAAS,EACT,CAAC,qCAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EACtC,SAAS,EACT,SAAS,EACT,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAC/C;QAPD,CAOC;IARL,CAQK,CAAC;IAEV,IAAM,aAAa,GACf,UAAC,OAAgC,EAAE,MAAiC;QACpE,OAAA,UAAC,IAAa,EAAE,MAAsB;YAClC,IAAM,MAAM,GAAqB,mCAAgB,CAAC,KAAK,uBAChD,OAAO,KACV,OAAO,EAAE;oBACL,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,IAAI;iBACf,IACH,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YACxB,IAAM,MAAM,GAAkB,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAEpE,IAAM,QAAQ,GAAqB,IAAI,oCAAgB,CACnD,YAAY,CACf,CAAC;YACF,IAAM,cAAc,GAAa,EAAE,CAAC;YACpC,IAAM,UAAU;gBACZ,mCAAgB,CAAC,QAAQ,CACrB,QAAQ,EACR,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CACpC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,UAAC,IAAI;oBACvB,IACI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;wBACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;4BACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM;4BACxB,CAAC;wBAEL,cAAc,CAAC,IAAI,CACf,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,CAAW,CAC7C,CAAC;oBACN,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnD,CAAC,CAAC,EACF,IAAI,CACP,CACJ;sBACE,cAAc,CAAC,GAAG,CAAC,UAAC,GAAG;gBACtB,IAAM,MAAM,GAAG,qCAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrD,OAAO,oBAAE,CAAC,OAAO,CAAC,iBAAiB,CAC/B,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC3B,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAClC,qCAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAC7C,EACD,oBAAE,CAAC,OAAO,CAAC,yBAAyB,CAChC,oBAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAC5C,CACJ,CAAC;YACN,CAAC,CAAC;gBACF,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAC5B,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE;oBAC/C,MAAM;iBACT,CAAC,CACL;qBACJ,CAAC;YAEF,OAAO,oBAAE,CAAC,OAAO,CAAC,WAAW,wCACrB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAK,UAAU,WAC3C,IAAI,CACP,CAAC;QACN,CAAC;IAxDD,CAwDC,CAAC;IAEN,IAAM,uBAAuB,GACzB,UAAC,QAA0B;QAC3B,OAAA,UAAC,QAA0B;YACvB,IAAM,GAAG,GAAW,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,CAAW,CAAC;YACnE,IAAM,KAAK,GAAa,QAAQ,CAAC,KAAK,CAAC;YAEjC,IAAA,KAAA,OAA6C,KAAK,CAAC,OAAO;iBAC3D,MAAM;gBACP,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC;gBAChC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM;oBACxB,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,KAAK,CAAC;oBACnC,CAAC,CAAC,CAAC;;wBACG,IAAM,IAAI,GACN,MAAA,MAAA,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,0CAAE,IAAI,CAAC,KAAK,mCAC3B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBACrC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;4BACtB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;4BAC9B,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC1C,CAAC,CAAC,EAAE,IAAA,EAZH,IAAI,QAAA,EAAE,OAAO,QAYV,CAAC;YACX,OAAO,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACtC,iBAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACjB,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,EACzC,OAAO;gBACH,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC3B,qCAAiB,CAAC,MAAM,CACpB,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC3B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAC3C,SAAS,EACT,CAAC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CACxC,CACJ,CAAC,KAAK,CAAC,EACR,SAAS,EACT;oBACI,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAC1B,SAAS,EACT,SAAS,EACT,CAAC,qCAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EACrC,SAAS,EACT,SAAS,EACT,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAC/B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CACtC,CACJ;iBACJ,CACJ;gBACH,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CACxB,KAAK,CAAC,QAAQ,KAAK,KAAK;oBACpB,KAAK,CAAC,UAAU,EAAE,KAAK,KAAK,CACnC,CACG,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC3B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,EACxC,SAAS,EACT,CAAC,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CACxC,CACJ,CACV,CAAC;QACN,CAAC;IAvDD,CAuDC,CAAC;IAEN,IAAM,YAAY,GACd,UAAC,QAA0B;QAC3B,OAAA,UAAC,IAAoB;YACrB,OAAA,UAAC,gBAAyB;gBAC1B,OAAA,UAAC,KAAoB;oBACjB,IAAM,IAAI,GAAG,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CACxC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAClB,SAAS,EACT,CAAC,KAAK,CAAC,CACV,CAAC;oBACF,OAAO,gBAAgB;wBACnB,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,sBAAsB,CAC7B,IAAI,EACJ,oBAAE,CAAC,OAAO,CAAC,WAAW,CAClB,oBAAE,CAAC,UAAU,CAAC,qBAAqB,CACtC,EACD,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAC3C;wBACH,CAAC,CAAC,IAAI,CAAC;gBACf,CAAC;YAfD,CAeC;QAhBD,CAgBC;IAjBD,CAiBC,CAAC;AACV,CAAC,EArPgB,oBAAoB,oCAApB,oBAAoB,QAqPpC"}
1
+ {"version":3,"file":"TypedQueryProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedQueryProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,kGAAiG;AACjG,0FAAyF;AACzF,sGAAqG;AAMrG,IAAiB,oBAAoB,CAyCpC;AAzCD,WAAiB,oBAAoB;IACpB,6BAAQ,GACjB,UAAC,OAAgC;QACjC,OAAA,UAAC,MAAiC;YAClC,OAAA,UAAC,IAAa;gBACV,2BAA2B;gBAC3B,IAAM,SAAS,GACX,UAAC,GAAwC;oBACzC,OAAA,UACI,UAIwC;wBAExC,OAAA,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;4BACrC,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;4BACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CAC/B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAChC,UAAU,uBACH,OAAO,KACV,OAAO,EAAE;oCACL,OAAO,EAAE,KAAK;oCACd,MAAM,EAAE,KAAK;oCACb,UAAU,EAAE,KAAK;iCACpB,IACH,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CACnB;yBACJ,CAAC;oBAhBF,CAgBE;gBAvBN,CAuBM,CAAC;gBAEX,UAAU;gBACV,IAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC1C,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,QAAQ;oBAC1C,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,6CAAqB,CAAC,KAAK,CAAC,CAAC;qBACnD,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,gBAAgB;oBAC7D,OAAO,SAAS,CAAC,UAAU,CAAC,CAAC,yDAA2B,CAAC,KAAK,CAAC,CAAC;gBACpE,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,qDAAyB,CAAC,KAAK,CAAC,CAAC;YAChE,CAAC;QApCD,CAoCC;IArCD,CAqCC,CAAC;AACV,CAAC,EAzCgB,oBAAoB,oCAApB,oBAAoB,QAyCpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/core",
3
- "version": "2.0.6",
3
+ "version": "2.1.0-dev.20230926",
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.0.6",
37
+ "@nestia/fetcher": "^2.1.0-dev.20230926",
38
38
  "@nestjs/common": ">= 7.0.1",
39
39
  "@nestjs/core": ">= 7.0.1",
40
40
  "@nestjs/platform-express": ">= 7.0.1",
@@ -44,10 +44,10 @@
44
44
  "raw-body": ">= 2.0.0",
45
45
  "reflect-metadata": ">= 0.1.12",
46
46
  "rxjs": ">= 6.0.0",
47
- "typia": "^5.0.5"
47
+ "typia": "^5.1.1"
48
48
  },
49
49
  "peerDependencies": {
50
- "@nestia/fetcher": ">=2.0.6",
50
+ "@nestia/fetcher": ">=2.1.0-dev.20230926",
51
51
  "@nestjs/common": ">=7.0.1",
52
52
  "@nestjs/core": ">=7.0.1",
53
53
  "@nestjs/platform-express": ">=7.0.1",
@@ -56,7 +56,7 @@
56
56
  "reflect-metadata": ">=0.1.12",
57
57
  "rxjs": ">=6.0.0",
58
58
  "typescript": ">=4.8.0",
59
- "typia": ">=5.0.5 <6.0.0"
59
+ "typia": ">=5.1.1 <6.0.0"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@trivago/prettier-plugin-sort-imports": "^4.0.0",
@@ -1,14 +1,11 @@
1
- import {
2
- BadRequestException,
3
- ExecutionContext,
4
- createParamDecorator,
5
- } from "@nestjs/common";
1
+ import { ExecutionContext, createParamDecorator } from "@nestjs/common";
6
2
  import type express from "express";
7
3
  import type { FastifyRequest } from "fastify";
8
4
 
9
- import typia, { TypeGuardError, assert } from "typia";
5
+ import typia from "typia";
10
6
 
11
- import { NoTransformConfigureError } from "./internal/NoTransformConfigureError";
7
+ import { IRequestHeadersValidator } from "../options/IRequestHeadersValidator";
8
+ import { validate_request_headers } from "./internal/validate_request_headers";
12
9
 
13
10
  /**
14
11
  * Type safe HTTP headers decorator.
@@ -52,10 +49,9 @@ import { NoTransformConfigureError } from "./internal/NoTransformConfigureError"
52
49
  * @author Jeongho Nam - https://github.com/samchon
53
50
  */
54
51
  export function TypedHeaders<T extends object>(
55
- decoder?: (headers: Record<string, string | string[] | undefined>) => T,
52
+ validator?: IRequestHeadersValidator<T>,
56
53
  ): ParameterDecorator {
57
- if (decoder === undefined) throw NoTransformConfigureError("TypedHeaders");
58
-
54
+ const checker = validate_request_headers(validator);
59
55
  return createParamDecorator(function TypedHeaders(
60
56
  _unknown: any,
61
57
  context: ExecutionContext,
@@ -63,33 +59,12 @@ export function TypedHeaders<T extends object>(
63
59
  const request: express.Request | FastifyRequest = context
64
60
  .switchToHttp()
65
61
  .getRequest();
66
- try {
67
- return decoder(request.headers);
68
- } catch (exp) {
69
- if (typia.is<TypeGuardError>(exp))
70
- throw new BadRequestException({
71
- path: exp.path,
72
- reason: exp.message,
73
- expected: exp.expected,
74
- value: exp.value,
75
- message:
76
- "Request query parameters are not following the promised type.",
77
- });
78
- throw exp;
79
- }
80
- })();
81
- }
82
62
 
83
- /**
84
- * @internal
85
- */
86
- export namespace TypedHeaders {
87
- export const boolean = (value: string | undefined) =>
88
- value !== undefined ? value === "true" : undefined;
89
- export const bigint = (value: string | undefined) =>
90
- value !== undefined ? BigInt(value) : undefined;
91
- export const number = (value: string | undefined) =>
92
- value !== undefined ? Number(value) : undefined;
93
- export const string = (value: string | undefined) => value;
63
+ const output: T | Error = checker(request.headers);
64
+ if (output instanceof Error) throw output;
65
+ return output;
66
+ })();
94
67
  }
95
- Object.assign(TypedHeaders, assert);
68
+ Object.assign(TypedHeaders, typia.http.assertHeaders);
69
+ Object.assign(TypedHeaders, typia.http.isHeaders);
70
+ Object.assign(TypedHeaders, typia.http.validateHeaders);
@@ -6,6 +6,8 @@ import {
6
6
  import type express from "express";
7
7
  import type { FastifyRequest } from "fastify";
8
8
 
9
+ import typia, { TypeGuardError } from "typia";
10
+
9
11
  import { NoTransformConfigureError } from "./internal/NoTransformConfigureError";
10
12
 
11
13
  /**
@@ -32,11 +34,11 @@ import { NoTransformConfigureError } from "./internal/NoTransformConfigureError"
32
34
  *
33
35
  * @author Jeongho Nam - https://github.com/samchon
34
36
  */
35
- export function TypedParam<T>(
37
+ export function TypedParam<T extends boolean | bigint | number | string | null>(
36
38
  name: string,
37
- props?: TypedParam.IProps<T>,
39
+ assert?: (value: string) => T,
38
40
  ): ParameterDecorator {
39
- if (props === undefined) throw NoTransformConfigureError("TypedParam");
41
+ if (assert === undefined) throw NoTransformConfigureError("TypedParam");
40
42
 
41
43
  return createParamDecorator(function TypedParam(
42
44
  {}: any,
@@ -46,20 +48,19 @@ export function TypedParam<T>(
46
48
  .switchToHttp()
47
49
  .getRequest();
48
50
  const str: string = (request.params as any)[name];
49
- const value: any = props!.cast(str);
50
- if (props!.is(value) === false)
51
- throw new BadRequestException(
52
- `Value of the URL parameter "${name}" is not ${
53
- props!.type
54
- } type.`,
55
- );
56
- return value;
51
+ try {
52
+ return assert(str);
53
+ } catch (exp) {
54
+ if (typia.is<TypeGuardError>(exp))
55
+ throw new BadRequestException({
56
+ path: exp.path,
57
+ reason: exp.message,
58
+ expected: exp.expected,
59
+ value: exp.value,
60
+ message: `Invalid URL parameter value on "${name}".`,
61
+ });
62
+ throw exp;
63
+ }
57
64
  })(name);
58
65
  }
59
- export namespace TypedParam {
60
- export interface IProps<T> {
61
- type: string;
62
- cast: (value: string) => T;
63
- is: (value: T) => boolean;
64
- }
65
- }
66
+ Object.assign(TypedParam, typia.http.parameter);
@@ -1,14 +1,11 @@
1
- import {
2
- BadRequestException,
3
- ExecutionContext,
4
- createParamDecorator,
5
- } from "@nestjs/common";
1
+ import { ExecutionContext, createParamDecorator } from "@nestjs/common";
6
2
  import type express from "express";
7
3
  import type { FastifyRequest } from "fastify";
8
4
 
9
- import typia, { TypeGuardError, assert } from "typia";
5
+ import typia from "typia";
10
6
 
11
- import { NoTransformConfigureError } from "./internal/NoTransformConfigureError";
7
+ import { IRequestQueryValidator } from "../options/IRequestQueryValidator";
8
+ import { validate_request_query } from "./internal/validate_request_query";
12
9
 
13
10
  /**
14
11
  * Type safe URL query decorator.
@@ -30,10 +27,9 @@ import { NoTransformConfigureError } from "./internal/NoTransformConfigureError"
30
27
  * @author Jeongho Nam - https://github.com/samchon
31
28
  */
32
29
  export function TypedQuery<T extends object>(
33
- decoder?: (params: URLSearchParams) => T,
30
+ validator?: IRequestQueryValidator<T>,
34
31
  ): ParameterDecorator {
35
- if (decoder === undefined) throw NoTransformConfigureError("TypedQuery");
36
-
32
+ const checker = validate_request_query(validator);
37
33
  return createParamDecorator(function TypedQuery(
38
34
  _unknown: any,
39
35
  context: ExecutionContext,
@@ -43,48 +39,14 @@ export function TypedQuery<T extends object>(
43
39
  .getRequest();
44
40
  const params: URLSearchParams = new URLSearchParams(tail(request.url));
45
41
 
46
- try {
47
- return decoder(params);
48
- } catch (exp) {
49
- if (typia.is<TypeGuardError>(exp))
50
- throw new BadRequestException({
51
- path: exp.path,
52
- reason: exp.message,
53
- expected: exp.expected,
54
- value: exp.value,
55
- message:
56
- "Request query parameters are not following the promised type.",
57
- });
58
- throw exp;
59
- }
42
+ const output: T | Error = checker(params);
43
+ if (output instanceof Error) throw output;
44
+ return output;
60
45
  })();
61
46
  }
62
-
63
- /**
64
- * @internal
65
- */
66
- export namespace TypedQuery {
67
- export function boolean(str: string | null): boolean | null | undefined {
68
- if (str === null) return undefined;
69
- else if (str === "null") return null;
70
- else if (str.length === 0) return true;
71
- return str === "true" || str === "1"
72
- ? true
73
- : str === "false" || str === "0"
74
- ? false
75
- : (str as any); // wrong type
76
- }
77
- export function number(str: string | null): number | null | undefined {
78
- return str?.length ? (str === "null" ? null : Number(str)) : undefined;
79
- }
80
- export function bigint(str: string | null): bigint | null | undefined {
81
- return str?.length ? (str === "null" ? null : BigInt(str)) : undefined;
82
- }
83
- export function string(str: string | null): string | null | undefined {
84
- return str === null ? undefined : str === "null" ? null : str;
85
- }
86
- }
87
- Object.assign(TypedQuery, assert);
47
+ Object.assign(TypedQuery, typia.http.assertQuery);
48
+ Object.assign(TypedQuery, typia.http.isQuery);
49
+ Object.assign(TypedQuery, typia.http.validateQuery);
88
50
 
89
51
  /**
90
52
  * @internal
@@ -5,6 +5,9 @@ import typia, { IValidation, TypeGuardError } from "typia";
5
5
  import { IResponseBodyStringifier } from "../../options/IResponseBodyStringifier";
6
6
  import { NoTransformConfigureError } from "./NoTransformConfigureError";
7
7
 
8
+ /**
9
+ * @internal
10
+ */
8
11
  export const get_path_and_stringify =
9
12
  (method: string) =>
10
13
  (
@@ -21,6 +24,9 @@ export const get_path_and_stringify =
21
24
  return [path ?? undefined, take(method)(functor)];
22
25
  };
23
26
 
27
+ /**
28
+ * @internal
29
+ */
24
30
  const take =
25
31
  (method: string) =>
26
32
  <T>(functor?: IResponseBodyStringifier<T> | null) => {
@@ -35,6 +41,9 @@ const take =
35
41
  );
36
42
  };
37
43
 
44
+ /**
45
+ * @internal
46
+ */
38
47
  const assert =
39
48
  <T>(closure: (data: T) => string) =>
40
49
  (data: T) => {
@@ -53,6 +62,9 @@ const assert =
53
62
  }
54
63
  };
55
64
 
65
+ /**
66
+ * @internal
67
+ */
56
68
  const is =
57
69
  <T>(closure: (data: T) => string | null) =>
58
70
  (data: T) => {
@@ -61,6 +73,9 @@ const is =
61
73
  return result;
62
74
  };
63
75
 
76
+ /**
77
+ * @internal
78
+ */
64
79
  const validate =
65
80
  <T>(closure: (data: T) => IValidation<string>) =>
66
81
  (data: T) => {
@@ -73,4 +88,7 @@ const validate =
73
88
  return result.data;
74
89
  };
75
90
 
91
+ /**
92
+ * @internal
93
+ */
76
94
  const MESSAGE = "Response body data is not following the promised type.";
@@ -2,6 +2,9 @@ import type express from "express";
2
2
  import type { FastifyRequest } from "fastify";
3
3
  import raw from "raw-body";
4
4
 
5
+ /**
6
+ * @internal
7
+ */
5
8
  export const get_text_body = async (
6
9
  request: express.Request | FastifyRequest,
7
10
  ): Promise<string> =>
@@ -9,6 +12,9 @@ export const get_text_body = async (
9
12
  ? (await raw(request)).toString("utf8")
10
13
  : (request.body as string);
11
14
 
15
+ /**
16
+ * @internal
17
+ */
12
18
  const isExpressRequest = (
13
19
  request: express.Request | FastifyRequest,
14
20
  ): request is express.Request => (request as express.Request).app !== undefined;
@@ -1,5 +1,8 @@
1
1
  import http from "http";
2
2
 
3
+ /**
4
+ * @internal
5
+ */
3
6
  export function headers_to_object(
4
7
  headers: http.IncomingHttpHeaders,
5
8
  ): Record<string, string> {
@@ -3,6 +3,9 @@ import is_ts_node from "detect-ts-node";
3
3
  import { Creator } from "../../typings/Creator";
4
4
  import { SourceFinder } from "../../utils/SourceFinder";
5
5
 
6
+ /**
7
+ * @internal
8
+ */
6
9
  export const load_controllers = async (
7
10
  path: string | string[] | { include: string[]; exclude?: string[] },
8
11
  ): Promise<Creator<object>[]> => {
@@ -26,6 +29,9 @@ export const load_controllers = async (
26
29
  return mount(sources);
27
30
  };
28
31
 
32
+ /**
33
+ * @internal
34
+ */
29
35
  async function mount(sources: string[]): Promise<any[]> {
30
36
  const controllers: any[] = [];
31
37
  for (const file of sources) {
@@ -39,4 +45,7 @@ async function mount(sources: string[]): Promise<any[]> {
39
45
  return controllers;
40
46
  }
41
47
 
48
+ /**
49
+ * @internal
50
+ */
42
51
  const EXTENSION = is_ts_node ? "ts" : "js";