@nestia/core 1.1.0-dev.20230414 → 1.1.0-dev.20230420

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.
@@ -3,23 +3,29 @@
3
3
  *
4
4
  * `TypedParam` is a decorator function getting specific typed parameter from the
5
5
  * HTTP request URL. It's almost same with the {@link nest.Param}, but `TypedParam`
6
- * can specify the parameter type manually. Beside, the {@link nest.Param} always
7
- * parses all of the parameters as string type.
6
+ * automatically casts parameter value to be following its type. Beside, the
7
+ * {@link nest.Param} always parses all of the parameters as `string` type.
8
+ *
9
+ * Note that, if you just omit the `type` and `nullable` parameters, then
10
+ * `TypedParam` automatically determines the `type` and `nullable` values
11
+ * just by analyzing the parameter type. Only when you need to specify them
12
+ * are, you want to use the `uuid` type.
8
13
  *
9
14
  * ```typescript
10
- * \@TypedRoute.Get("shopping/sales/:section/:id/:paused")
15
+ * \@TypedRoute.Get("shopping/sales/:id/:no/:paused")
11
16
  * public async pause
12
17
  * (
13
- * \@TypedParam("section", "string") section: string,
14
- * \@TypedParam("id", "number") id: number,
15
- * \@TypedParam("paused", "boolean", true) paused: boolean | null
18
+ * \@TypedParam("id", "uuid"), id: string, // uuid specification
19
+ * \@TypedParam("no") id: number, // auto casting
20
+ * \@TypedParam("paused") paused: boolean | null // auto casting
16
21
  * ): Promise<void>;
17
22
  * ```
18
23
  *
19
24
  * @param name URL Parameter name
20
- * @param type Type of the URL parameter
25
+ * @param type If omit, automatically determined by the parameter type.
26
+ * @param nullable If omit, automatically determined by the parameter type.
21
27
  * @returns Parameter decorator
22
28
  *
23
29
  * @author Jeongho Nam - https://github.com/samchon
24
30
  */
25
- export declare function TypedParam(name: string, type?: "boolean" | "number" | "string" | "uuid", nullable?: boolean): ParameterDecorator;
31
+ export declare function TypedParam(name: string, type?: "boolean" | "number" | "string" | "uuid", nullable?: false | true): ParameterDecorator;
@@ -7,28 +7,32 @@ var common_1 = require("@nestjs/common");
7
7
  *
8
8
  * `TypedParam` is a decorator function getting specific typed parameter from the
9
9
  * HTTP request URL. It's almost same with the {@link nest.Param}, but `TypedParam`
10
- * can specify the parameter type manually. Beside, the {@link nest.Param} always
11
- * parses all of the parameters as string type.
10
+ * automatically casts parameter value to be following its type. Beside, the
11
+ * {@link nest.Param} always parses all of the parameters as `string` type.
12
+ *
13
+ * Note that, if you just omit the `type` and `nullable` parameters, then
14
+ * `TypedParam` automatically determines the `type` and `nullable` values
15
+ * just by analyzing the parameter type. Only when you need to specify them
16
+ * are, you want to use the `uuid` type.
12
17
  *
13
18
  * ```typescript
14
- * \@TypedRoute.Get("shopping/sales/:section/:id/:paused")
19
+ * \@TypedRoute.Get("shopping/sales/:id/:no/:paused")
15
20
  * public async pause
16
21
  * (
17
- * \@TypedParam("section", "string") section: string,
18
- * \@TypedParam("id", "number") id: number,
19
- * \@TypedParam("paused", "boolean", true) paused: boolean | null
22
+ * \@TypedParam("id", "uuid"), id: string, // uuid specification
23
+ * \@TypedParam("no") id: number, // auto casting
24
+ * \@TypedParam("paused") paused: boolean | null // auto casting
20
25
  * ): Promise<void>;
21
26
  * ```
22
27
  *
23
28
  * @param name URL Parameter name
24
- * @param type Type of the URL parameter
29
+ * @param type If omit, automatically determined by the parameter type.
30
+ * @param nullable If omit, automatically determined by the parameter type.
25
31
  * @returns Parameter decorator
26
32
  *
27
33
  * @author Jeongho Nam - https://github.com/samchon
28
34
  */
29
35
  function TypedParam(name, type, nullable) {
30
- if (type === void 0) { type = "string"; }
31
- if (nullable === void 0) { nullable = false; }
32
36
  return (0, common_1.createParamDecorator)(function TypedParam(_a, ctx) {
33
37
  var request = ctx.switchToHttp().getRequest();
34
38
  var str = request.params[name];
@@ -1 +1 @@
1
- {"version":3,"file":"TypedParam.js","sourceRoot":"","sources":["../../src/decorators/TypedParam.ts"],"names":[],"mappings":";;;AAAA,yCAIwB;AAGxB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAgB,UAAU,CACtB,IAAY,EACZ,IAAyD,EACzD,QAAyB;IADzB,qBAAA,EAAA,eAAyD;IACzD,yBAAA,EAAA,gBAAyB;IAEzB,OAAO,IAAA,6BAAoB,EAAC,SAAS,UAAU,CAC3C,EAAO,EACP,GAAqB;QAErB,IAAM,OAAO,GAAoB,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACjE,IAAM,GAAG,GAAW,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,QAAQ,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;aAChD,IAAI,IAAI,KAAK,SAAS,EAAE;YACzB,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;iBAC1C,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,GAAG;gBAAE,OAAO,KAAK,CAAC;;gBAElD,MAAM,IAAI,4BAAmB,CACzB,sCAA+B,IAAI,wBAAqB,CAC3D,CAAC;SACT;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;YAC1B,IAAM,KAAK,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,KAAK,CAAC;gBACZ,MAAM,IAAI,4BAAmB,CACzB,uCAA+B,IAAI,wBAAoB,CAC1D,CAAC;YACN,OAAO,KAAK,CAAC;SAChB;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE;YACxB,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK;gBAChC,MAAM,IAAI,4BAAmB,CACzB,uCAA+B,IAAI,4BAAwB,CAC9D,CAAC;YACN,OAAO,GAAG,CAAC;SACd;;YAAM,OAAO,GAAG,CAAC;IACtB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACb,CAAC;AAnCD,gCAmCC;AAED,IAAM,YAAY,GACd,qHAAqH,CAAC"}
1
+ {"version":3,"file":"TypedParam.js","sourceRoot":"","sources":["../../src/decorators/TypedParam.ts"],"names":[],"mappings":";;;AAAA,yCAIwB;AAGxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,SAAgB,UAAU,CACtB,IAAY,EACZ,IAA+C,EAC/C,QAAuB;IAEvB,OAAO,IAAA,6BAAoB,EAAC,SAAS,UAAU,CAC3C,EAAO,EACP,GAAqB;QAErB,IAAM,OAAO,GAAoB,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACjE,IAAM,GAAG,GAAW,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,QAAQ,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;aAChD,IAAI,IAAI,KAAK,SAAS,EAAE;YACzB,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;iBAC1C,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,GAAG;gBAAE,OAAO,KAAK,CAAC;;gBAElD,MAAM,IAAI,4BAAmB,CACzB,sCAA+B,IAAI,wBAAqB,CAC3D,CAAC;SACT;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;YAC1B,IAAM,KAAK,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,KAAK,CAAC,KAAK,CAAC;gBACZ,MAAM,IAAI,4BAAmB,CACzB,uCAA+B,IAAI,wBAAoB,CAC1D,CAAC;YACN,OAAO,KAAK,CAAC;SAChB;aAAM,IAAI,IAAI,KAAK,MAAM,EAAE;YACxB,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK;gBAChC,MAAM,IAAI,4BAAmB,CACzB,uCAA+B,IAAI,4BAAwB,CAC9D,CAAC;YACN,OAAO,GAAG,CAAC;SACd;;YAAM,OAAO,GAAG,CAAC;IACtB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACb,CAAC;AAnCD,gCAmCC;AAED,IAAM,YAAY,GACd,qHAAqH,CAAC"}
@@ -31,15 +31,15 @@ var TypedBodyProgrammer;
31
31
  numeric: false,
32
32
  finite: false,
33
33
  functional: false,
34
- } }), modulo)(type)),
34
+ } }))(modulo)(false)(type)),
35
35
  ]);
36
36
  };
37
37
  // RETURNS
38
38
  if (project.options.validate === "is")
39
- return parameter("is", IsProgrammer_1.IsProgrammer.generate);
39
+ return parameter("is", IsProgrammer_1.IsProgrammer.write);
40
40
  else if (project.options.validate === "validate")
41
- return parameter("validate", ValidateProgrammer_1.ValidateProgrammer.generate);
42
- return parameter("assert", AssertProgrammer_1.AssertProgrammer.generate);
41
+ return parameter("validate", ValidateProgrammer_1.ValidateProgrammer.write);
42
+ return parameter("assert", AssertProgrammer_1.AssertProgrammer.write);
43
43
  };
44
44
  };
45
45
  })(TypedBodyProgrammer = exports.TypedBodyProgrammer || (exports.TypedBodyProgrammer = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"TypedBodyProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedBodyProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,2EAA0E;AAC1E,mEAAkE;AAClE,+EAA8E;AAK9E,IAAiB,mBAAmB,CAwCnC;AAxCD,WAAiB,mBAAmB;IACnB,4BAAQ,GACjB,UAAC,OAAgC,EAAE,MAAiC;QACpE,OAAA,UAAC,IAAa;YACV,2BAA2B;YAC3B,IAAM,SAAS,GAAG,UACd,GAAW,EACX,UAGwC;gBAExC,OAAA,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;oBACrC,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;oBACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CAC/B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAChC,UAAU,uBAEC,OAAO,KACV,OAAO,EAAE;4BACL,OAAO,EAAE,KAAK;4BACd,MAAM,EAAE,KAAK;4BACb,UAAU,EAAE,KAAK;yBACpB,KAEL,MAAM,CACT,CAAC,IAAI,CAAC,CACV;iBACJ,CAAC;YAnBF,CAmBE,CAAC;YAEP,UAAU;YACV,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI;gBACjC,OAAO,SAAS,CAAC,IAAI,EAAE,2BAAY,CAAC,QAAQ,CAAC,CAAC;iBAC7C,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU;gBAC5C,OAAO,SAAS,CAAC,UAAU,EAAE,uCAAkB,CAAC,QAAQ,CAAC,CAAC;YAC9D,OAAO,SAAS,CAAC,QAAQ,EAAE,mCAAgB,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;IApCD,CAoCC,CAAC;AACV,CAAC,EAxCgB,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAwCnC"}
1
+ {"version":3,"file":"TypedBodyProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedBodyProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,2EAA0E;AAC1E,mEAAkE;AAClE,+EAA8E;AAK9E,IAAiB,mBAAmB,CAsCnC;AAtCD,WAAiB,mBAAmB;IACnB,4BAAQ,GACjB,UAAC,OAAgC,EAAE,MAAiC;QACpE,OAAA,UAAC,IAAa;YACV,2BAA2B;YAC3B,IAAM,SAAS,GAAG,UACd,GAAW,EACX,UAI6D;gBAE7D,OAAA,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;oBACrC,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;oBACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CAC/B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAChC,UAAU,uBACH,OAAO,KACV,OAAO,EAAE;4BACL,OAAO,EAAE,KAAK;4BACd,MAAM,EAAE,KAAK;4BACb,UAAU,EAAE,KAAK;yBACpB,IACH,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAC1B;iBACJ,CAAC;YAhBF,CAgBE,CAAC;YAEP,UAAU;YACV,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI;gBACjC,OAAO,SAAS,CAAC,IAAI,EAAE,2BAAY,CAAC,KAAK,CAAC,CAAC;iBAC1C,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU;gBAC5C,OAAO,SAAS,CAAC,UAAU,EAAE,uCAAkB,CAAC,KAAK,CAAC,CAAC;YAC3D,OAAO,SAAS,CAAC,QAAQ,EAAE,mCAAgB,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;IAlCD,CAkCC,CAAC;AACV,CAAC,EAtCgB,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAsCnC"}
@@ -0,0 +1,5 @@
1
+ import ts from "typescript";
2
+ import { INestiaTransformProject } from "../options/INestiaTransformProject";
3
+ export declare namespace TypedParamProgrammer {
4
+ const generate: ({ checker }: INestiaTransformProject) => (parameters: readonly ts.Expression[]) => (type: ts.Type) => readonly ts.Expression[];
5
+ }
@@ -0,0 +1,108 @@
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.TypedParamProgrammer = void 0;
32
+ var typescript_1 = __importDefault(require("typescript"));
33
+ var MetadataCollection_1 = require("typia/lib/factories/MetadataCollection");
34
+ var MetadataFactory_1 = require("typia/lib/factories/MetadataFactory");
35
+ var TypedParamProgrammer;
36
+ (function (TypedParamProgrammer) {
37
+ TypedParamProgrammer.generate = function (_a) {
38
+ var checker = _a.checker;
39
+ return function (parameters) {
40
+ return function (type) {
41
+ var metadata = MetadataFactory_1.MetadataFactory.analyze(checker)({
42
+ resolve: false,
43
+ constant: true,
44
+ validate: validate,
45
+ })(new MetadataCollection_1.MetadataCollection())(type);
46
+ var _a = __read(get_atomic_types(metadata), 1), atomic = _a[0];
47
+ // AUTO TYPE SPECIFICATION
48
+ if (parameters.length === 1)
49
+ return [
50
+ parameters[0],
51
+ typescript_1.default.factory.createStringLiteral(atomic),
52
+ metadata.nullable
53
+ ? typescript_1.default.factory.createTrue()
54
+ : typescript_1.default.factory.createFalse(),
55
+ ];
56
+ // TYPE HAS BEEN SPECIFIED IN DECORATOR
57
+ var specified = MetadataFactory_1.MetadataFactory.analyze(checker)({
58
+ resolve: false,
59
+ constant: true,
60
+ })(new MetadataCollection_1.MetadataCollection())(checker.getTypeAtLocation(parameters[1]));
61
+ if (equals(atomic, specified) === false)
62
+ throw new Error(error("different type between parameter and variable"));
63
+ if (parameters.length === 2)
64
+ return [
65
+ parameters[0],
66
+ parameters[1],
67
+ metadata.nullable
68
+ ? typescript_1.default.factory.createTrue()
69
+ : typescript_1.default.factory.createFalse(),
70
+ ];
71
+ // NULLABLE HAS BEEN SPECIFIED
72
+ var nullable = MetadataFactory_1.MetadataFactory.analyze(checker)({
73
+ resolve: false,
74
+ constant: true,
75
+ })(new MetadataCollection_1.MetadataCollection())(checker.getTypeAtLocation(parameters[2]));
76
+ if (nullable.getName() !== "true" && nullable.getName() !== "false")
77
+ throw new Error(error("nullable value must be literal type"));
78
+ else if (metadata.nullable !== (nullable.getName() === "true"))
79
+ throw new Error(error("different type (nullable) between parameter and variable"));
80
+ return parameters;
81
+ };
82
+ };
83
+ };
84
+ })(TypedParamProgrammer = exports.TypedParamProgrammer || (exports.TypedParamProgrammer = {}));
85
+ var validate = function (meta) {
86
+ if (meta.any)
87
+ throw new Error(error("do not allow any type"));
88
+ else if (meta.required === false)
89
+ throw new Error(error("do not allow undefindable type"));
90
+ var atomics = get_atomic_types(meta);
91
+ var expected = meta.atomics.length +
92
+ meta.constants.map(function (c) { return c.values.length; }).reduce(function (a, b) { return a + b; }, 0);
93
+ if (meta.size() !== expected || atomics.length === 0)
94
+ throw new Error(error("only atomic or constant types is allowed"));
95
+ else if (atomics.length > 1)
96
+ throw new Error(error("do not allow union type"));
97
+ };
98
+ var get_atomic_types = function (meta) { return __spreadArray([], __read(new Set(__spreadArray(__spreadArray([], __read(meta.atomics), false), __read(meta.constants.map(function (c) { return c.type; })), false))), false); };
99
+ var error = function (message) {
100
+ return "Error on nestia.core.TypedParam(): ".concat(message, ".");
101
+ };
102
+ var equals = function (atomic, p) {
103
+ var name = p.getName();
104
+ if (atomic === "string")
105
+ return name === "\"string\"" || name === "\"uuid\"";
106
+ return "\"".concat(atomic, "\"") === name;
107
+ };
108
+ //# sourceMappingURL=TypedParamProgrammer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypedParamProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedParamProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,6EAA4E;AAC5E,uEAAsE;AAKtE,IAAiB,oBAAoB,CA2DpC;AA3DD,WAAiB,oBAAoB;IACpB,6BAAQ,GACjB,UAAC,EAAoC;YAAlC,OAAO,aAAA;QACV,OAAA,UAAC,UAAoC;YACrC,OAAA,UAAC,IAAa;gBACV,IAAM,QAAQ,GAAa,iCAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACxD,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,IAAI;oBACd,QAAQ,UAAA;iBACX,CAAC,CAAC,IAAI,uCAAkB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAA,KAAA,OAAW,gBAAgB,CAAC,QAAQ,CAAC,IAAA,EAApC,MAAM,QAA8B,CAAC;gBAE5C,0BAA0B;gBAC1B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;oBACvB,OAAO;wBACH,UAAU,CAAC,CAAC,CAAC;wBACb,oBAAE,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC;wBACtC,QAAQ,CAAC,QAAQ;4BACb,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,UAAU,EAAE;4BACzB,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,WAAW,EAAE;qBACjC,CAAC;gBAEN,uCAAuC;gBACvC,IAAM,SAAS,GAAa,iCAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACzD,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,IAAI;iBACjB,CAAC,CAAC,IAAI,uCAAkB,EAAE,CAAC,CACxB,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAC3C,CAAC;gBACF,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,KAAK,KAAK;oBACnC,MAAM,IAAI,KAAK,CACX,KAAK,CAAC,+CAA+C,CAAC,CACzD,CAAC;gBACN,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;oBACvB,OAAO;wBACH,UAAU,CAAC,CAAC,CAAC;wBACb,UAAU,CAAC,CAAC,CAAC;wBACb,QAAQ,CAAC,QAAQ;4BACb,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,UAAU,EAAE;4BACzB,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,WAAW,EAAE;qBACjC,CAAC;gBAEN,8BAA8B;gBAC9B,IAAM,QAAQ,GAAa,iCAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACxD,OAAO,EAAE,KAAK;oBACd,QAAQ,EAAE,IAAI;iBACjB,CAAC,CAAC,IAAI,uCAAkB,EAAE,CAAC,CACxB,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAC3C,CAAC;gBACF,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,MAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,OAAO;oBAC/D,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;qBAC7D,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC;oBAC1D,MAAM,IAAI,KAAK,CACX,KAAK,CACD,0DAA0D,CAC7D,CACJ,CAAC;gBACN,OAAO,UAAU,CAAC;YACtB,CAAC;QAtDD,CAsDC;IAvDD,CAuDC,CAAC;AACV,CAAC,EA3DgB,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QA2DpC;AAED,IAAM,QAAQ,GAAG,UAAC,IAAc;IAC5B,IAAI,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC;SACzD,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;QAC5B,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;IAE7D,IAAM,OAAO,GAAa,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACjD,IAAM,QAAQ,GACV,IAAI,CAAC,OAAO,CAAC,MAAM;QACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,MAAM,CAAC,MAAM,EAAf,CAAe,CAAC,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,GAAG,CAAC,EAAL,CAAK,EAAE,CAAC,CAAC,CAAC;IAC1E,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC;SAClE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,IAAM,gBAAgB,GAAG,UAAC,IAAc,IAAe,gCAChD,IAAI,GAAG,wCAAK,IAAI,CAAC,OAAO,kBAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,EAAN,CAAM,CAAC,UAAE,WADhB,CAEtD,CAAC;AAEF,IAAM,KAAK,GAAG,UAAC,OAAe;IAC1B,OAAA,6CAAsC,OAAO,MAAG;AAAhD,CAAgD,CAAC;AAErD,IAAM,MAAM,GAAG,UAAC,MAAc,EAAE,CAAW;IACvC,IAAM,IAAI,GAAW,CAAC,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,KAAK,YAAU,IAAI,IAAI,KAAK,UAAQ,CAAC;IACzE,OAAO,YAAI,MAAM,OAAG,KAAK,IAAI,CAAC;AAClC,CAAC,CAAC"}
@@ -70,10 +70,10 @@ var TypedQueryProgrammer;
70
70
  return function (type) {
71
71
  var e_1, _a;
72
72
  var collection = new MetadataCollection_1.MetadataCollection();
73
- var metadata = MetadataFactory_1.MetadataFactory.generate(checker, collection, type, {
73
+ var metadata = MetadataFactory_1.MetadataFactory.analyze(checker)({
74
74
  resolve: false,
75
75
  constant: true,
76
- });
76
+ })(collection)(type);
77
77
  if (metadata.objects.length !== 1 || metadata.bucket() !== 1)
78
78
  throw new Error(ErrorMessages.object(metadata)("only one object type is allowed."));
79
79
  else if (metadata.nullable === true)
@@ -198,9 +198,9 @@ var TypedQueryProgrammer;
198
198
  };
199
199
  var decode_object = function (project, modulo) {
200
200
  return function (type, object) {
201
- var assert = AssertProgrammer_1.AssertProgrammer.generate(__assign(__assign({}, project), { options: {
201
+ var assert = AssertProgrammer_1.AssertProgrammer.write(__assign(__assign({}, project), { options: {
202
202
  numeric: true,
203
- } }), modulo)(type);
203
+ } }))(modulo)(false)(type);
204
204
  var output = typescript_1.default.factory.createIdentifier("output");
205
205
  var importer = new FunctionImporeter_1.FunctionImporter();
206
206
  var statements = [
@@ -233,7 +233,7 @@ var TypedQueryProgrammer;
233
233
  : [meta.constants[0].type, true];
234
234
  })(), 2), type = _a[0], isArray = _a[1];
235
235
  return typescript_1.default.factory.createPropertyAssignment(key, isArray
236
- ? typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.join(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("input.getAll"), undefined, [typescript_1.default.factory.createStringLiteral(key)]), "map"), undefined, [
236
+ ? 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, [
237
237
  typescript_1.default.factory.createArrowFunction(undefined, undefined, [IdentifierFactory_1.IdentifierFactory.parameter("elem")], undefined, undefined, decode_value(importer)(type)(typescript_1.default.factory.createIdentifier("elem"))),
238
238
  ])
239
239
  : decode_value(importer)(type)(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("input.get"), undefined, [typescript_1.default.factory.createStringLiteral(key)])));
@@ -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;AAIxE,2EAA0E;AAC1E,qFAAmF;AAKnF,IAAiB,oBAAoB,CAiOpC;AAjOD,WAAiB,oBAAoB;IACpB,6BAAQ,GACjB,UAAC,OAAgC,EAAE,MAAiC;QACpE,OAAA,UAAC,IAAa;YACV,IAAM,MAAM,GAAmB,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;YAChE,OAAO,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;IAHD,CAGC,CAAC;IAEN,IAAM,SAAS,GACX,UAAC,OAAuB;QACxB,OAAA,UAAC,IAAa;;YACV,IAAM,UAAU,GAAuB,IAAI,uCAAkB,EAAE,CAAC;YAChE,IAAM,QAAQ,GAAa,iCAAe,CAAC,QAAQ,CAC/C,OAAO,EACP,UAAU,EACV,IAAI,EACJ;gBACI,OAAO,EAAE,KAAK;gBACd,QAAQ,EAAE,IAAI;aACjB,CACJ,CAAC;YACF,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;gBACxD,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC1B,kCAAkC,CACrC,CACJ,CAAC;iBACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI;gBAC/B,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC1B,+BAA+B,CAClC,CACJ,CAAC;iBACD,IAAI,QAAQ,CAAC,QAAQ,KAAK,KAAK;gBAChC,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC1B,oCAAoC,CACvC,CACJ,CAAC;YAEN,IAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;;gBACpC,KAAuB,IAAA,KAAA,SAAA,MAAM,CAAC,UAAU,CAAA,gBAAA,4BAAE;oBAArC,IAAM,QAAQ,WAAA;oBACf,IAAM,GAAG,GAAa,QAAQ,CAAC,GAAG,CAAC;oBACnC,IAAM,KAAK,GAAa,QAAQ,CAAC,KAAK,CAAC;oBACvC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBACnC;;;;;;;;;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;IArCD,CAqCC,CAAC;IAEN,IAAM,QAAQ,GACV,UAAC,GAAmB;QACpB,OAAA,UAAC,GAAa;YACd,OAAA,UAAC,KAAe,EAAE,KAAa;;gBAC3B,IAAI,KAAK,CAAC,QAAQ;oBACd,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAC5B,8DAA8D,CACjE,CACJ,CAAC;qBACD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK;oBAC5C,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAC5B,wCAAwC,CAC3C,CACJ,CAAC;qBACD,IACD,KAAK,CAAC,IAAI,CAAC,MAAM;oBACjB,KAAK,CAAC,IAAI,CAAC,MAAM;oBACjB,KAAK,CAAC,OAAO,CAAC,MAAM;oBAEpB,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAC5B,4BAA4B,CAC/B,CACJ,CAAC;gBAEN,IAAM,IAAI,GAAa,EAAE,CAAC;;oBAC1B,KAAmB,IAAA,KAAA,SAAA,KAAK,CAAC,OAAO,CAAA,gBAAA;wBAA3B,IAAM,IAAI,WAAA;wBAAmB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBAAA;;;;;;;;;;oBAClD,KAAuB,IAAA,KAAA,SAAA,KAAK,CAAC,SAAS,CAAA,gBAAA;wBAAzB,IAAA,IAAI,gBAAA;wBAAuB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBAAA;;;;;;;;;gBAExD,IAAI,KAAK,KAAK,CAAC,EAAE;oBACb,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;wBAC3D,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAC5B,2BAA2B,CAC9B,CACJ,CAAC;;wBACN,KAAmB,IAAA,KAAA,SAAA,KAAK,CAAC,MAAM,CAAA,gBAAA;4BAA1B,IAAM,IAAI,WAAA;4BACX,IAAI,CAAC,IAAI,OAAT,IAAI,2BAAS,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,WAAE;yBAAA;;;;;;;;;;wBACtD,KAAoB,IAAA,KAAA,SAAA,KAAK,CAAC,MAAM,CAAA,gBAAA;4BAA3B,IAAM,KAAK,WAAA;;gCACZ,KAAmB,IAAA,yBAAA,SAAA,KAAK,CAAA,CAAA,4BAAA;oCAAnB,IAAM,IAAI,kBAAA;oCACX,IAAI,CAAC,IAAI,OAAT,IAAI,2BAAS,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,WAAE;iCAAA;;;;;;;;;yBAAA;;;;;;;;;iBAC7D;qBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM;oBACjD,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAC5B,kCAAkC,CACrC,CACJ,CAAC;gBAEN,IAAM,IAAI,GAAW,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gBACxC,IAAI,IAAI,KAAK,CAAC;oBACV,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CACnD,CAAC;qBACD,IAAI,IAAI,GAAG,CAAC;oBACb,MAAM,IAAI,KAAK,CACX,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAC5B,2BAA2B,CAC9B,CACJ,CAAC;gBACN,OAAO,IAAI,CAAC;YAChB,CAAC;QA3DD,CA2DC;IA5DD,CA4DC,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,QAAQ,uBAE/C,OAAO,KACV,OAAO,EAAE;oBACL,OAAO,EAAE,IAAI;iBAChB,KAEL,MAAM,CACT,CAAC,IAAI,CAAC,CAAC;YACR,IAAM,MAAM,GAAG,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAErD,IAAM,QAAQ,GAAG,IAAI,oCAAgB,EAAE,CAAC;YACxC,IAAM,UAAU,GAAmB;gBAC/B,mCAAgB,CAAC,QAAQ,CACrB,QAAQ,EACR,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CACpC,MAAM,CAAC,UAAU;qBACZ,MAAM,CAAC,UAAC,IAAI,IAAK,OAAC,IAAI,CAAC,GAAW,CAAC,aAAa,EAAE,EAAjC,CAAiC,CAAC;qBACnD,GAAG,CAAC,UAAC,IAAI;oBACN,OAAA,uBAAuB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;gBAAvC,CAAuC,CAC1C,EACL,IAAI,CACP,CACJ;gBACD,oBAAE,CAAC,OAAO,CAAC,qBAAqB,CAC5B,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE;oBAC/C,MAAM;iBACT,CAAC,CACL;aACJ,CAAC;YAEF,OAAO,oBAAE,CAAC,OAAO,CAAC,WAAW,wCACrB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAK,UAAU,WAC3C,IAAI,CACP,CAAC;QACN,CAAC;IApCD,CAoCC,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,EAAE,KAAK,CAAC;gBAC3B,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,GAAG,MAAA,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,mCAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACnD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;4BACtB,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;4BACzB,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC1C,CAAC,CAAC,EAAE,IAAA,EAVH,IAAI,QAAA,EAAE,OAAO,QAUV,CAAC;YACX,OAAO,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CACtC,GAAG,EACH,OAAO;gBACH,CAAC,CAAC,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC3B,qCAAiB,CAAC,IAAI,CAClB,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,EACD,KAAK,CACR,EACD,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,CACxB,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CACtC,CACJ;iBACJ,CACJ;gBACH,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CACxB,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;IAjDD,CAiDC,CAAC;IAEN,IAAM,YAAY,GACd,UAAC,QAA0B;QAC3B,OAAA,UAAC,IAAoB;YACrB,OAAA,UAAC,KAAoB;gBACjB,OAAA,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE;oBAC3D,KAAK;iBACR,CAAC;YAFF,CAEE;QAHN,CAGM;IAJN,CAIM,CAAC;AACf,CAAC,EAjOgB,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAiOpC;AAED,IAAU,aAAa,CAStB;AATD,WAAU,aAAa;IACN,oBAAM,GAAG,UAAC,IAAc,IAAK,OAAA,UAAC,OAAe;QACtD,OAAA,0CAAmC,IAAI,kBAAQ,OAAO,CAAE;IAAxD,CAAwD,EADlB,CACkB,CAAC;IAEhD,sBAAQ,GACjB,UAAC,GAAmB,IAAK,OAAA,UAAC,GAAa,IAAK,OAAA,UAAC,OAAe;QACxD,OAAA,0CACI,GAAG,CAAC,IAAI,2BACK,GAAG,CAAC,OAAO,EAAE,gBAAM,OAAO,CAAE;IAF7C,CAE6C,EAHL,CAGK,EAHxB,CAGwB,CAAC;AAC1D,CAAC,EATS,aAAa,KAAb,aAAa,QAStB"}
1
+ {"version":3,"file":"TypedQueryProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedQueryProgrammer.ts"],"names":[],"mappings":"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"}
@@ -28,20 +28,20 @@ var TypedRouteProgrammer;
28
28
  var parameter = function (key, programmer) {
29
29
  return typescript_1.default.factory.createObjectLiteralExpression([
30
30
  typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier("type"), typescript_1.default.factory.createStringLiteral(key)),
31
- typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier(key), programmer(__assign(__assign({}, project), { options: {} }), modulo)(type)),
31
+ typescript_1.default.factory.createPropertyAssignment(typescript_1.default.factory.createIdentifier(key), programmer(__assign(__assign({}, project), { options: {} }))(modulo)(type)),
32
32
  ]);
33
33
  };
34
34
  // RETURNS
35
35
  if (project.options.stringify === "is")
36
- return parameter("is", IsStringifyProgrammer_1.IsStringifyProgrammer.generate);
36
+ return parameter("is", IsStringifyProgrammer_1.IsStringifyProgrammer.write);
37
37
  else if (project.options.stringify === "validate")
38
- return parameter("validate", ValidateStringifyProgrammer_1.ValidateStringifyProgrammer.generate);
38
+ return parameter("validate", ValidateStringifyProgrammer_1.ValidateStringifyProgrammer.write);
39
39
  else if (project.options.stringify === "stringify")
40
- return parameter("stringify", StringifyProgrammer_1.StringifyProgrammer.generate);
40
+ return parameter("stringify", StringifyProgrammer_1.StringifyProgrammer.write);
41
41
  else if (project.options.stringify === null)
42
42
  return typescript_1.default.factory.createNull();
43
43
  // ASSERT IS DEFAULT
44
- return parameter("assert", AssertStringifyProgrammer_1.AssertStringifyProgrammer.generate);
44
+ return parameter("assert", AssertStringifyProgrammer_1.AssertStringifyProgrammer.write);
45
45
  };
46
46
  };
47
47
  })(TypedRouteProgrammer = exports.TypedRouteProgrammer || (exports.TypedRouteProgrammer = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"TypedRouteProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedRouteProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,6FAA4F;AAC5F,qFAAoF;AACpF,iFAAgF;AAChF,iGAAgG;AAKhG,IAAiB,oBAAoB,CA6CpC;AA7CD,WAAiB,oBAAoB;IACpB,6BAAQ,GACjB,UAAC,OAAgC,EAAE,MAAiC;QACpE,OAAA,UAAC,IAAa;YACV,0BAA0B;YAC1B,IAAM,SAAS,GAAG,UACd,GAAW,EACX,UAGwC;gBAExC,OAAA,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;oBACrC,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;oBACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CAC/B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAChC,UAAU,uBAEC,OAAO,KACV,OAAO,EAAE,EAAE,KAEf,MAAM,CACT,CAAC,IAAI,CAAC,CACV;iBACJ,CAAC;YAfF,CAeE,CAAC;YAEP,UAAU;YACV,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI;gBAClC,OAAO,SAAS,CAAC,IAAI,EAAE,6CAAqB,CAAC,QAAQ,CAAC,CAAC;iBACtD,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,UAAU;gBAC7C,OAAO,SAAS,CACZ,UAAU,EACV,yDAA2B,CAAC,QAAQ,CACvC,CAAC;iBACD,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,WAAW;gBAC9C,OAAO,SAAS,CAAC,WAAW,EAAE,yCAAmB,CAAC,QAAQ,CAAC,CAAC;iBAC3D,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI;gBACvC,OAAO,oBAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAEnC,oBAAoB;YACpB,OAAO,SAAS,CAAC,QAAQ,EAAE,qDAAyB,CAAC,QAAQ,CAAC,CAAC;QACnE,CAAC;IAzCD,CAyCC,CAAC;AACV,CAAC,EA7CgB,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QA6CpC"}
1
+ {"version":3,"file":"TypedRouteProgrammer.js","sourceRoot":"","sources":["../../src/programmers/TypedRouteProgrammer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAA4B;AAE5B,6FAA4F;AAC5F,qFAAoF;AACpF,iFAAgF;AAChF,iGAAgG;AAKhG,IAAiB,oBAAoB,CAwCpC;AAxCD,WAAiB,oBAAoB;IACpB,6BAAQ,GACjB,UAAC,OAAgC,EAAE,MAAiC;QACpE,OAAA,UAAC,IAAa;YACV,0BAA0B;YAC1B,IAAM,SAAS,GAAG,UACd,GAAW,EACX,UAIwC;gBAExC,OAAA,oBAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC;oBACrC,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;oBACD,oBAAE,CAAC,OAAO,CAAC,wBAAwB,CAC/B,oBAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAChC,UAAU,uBACH,OAAO,KACV,OAAO,EAAE,EAAE,IACb,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CACnB;iBACJ,CAAC;YAZF,CAYE,CAAC;YAEP,UAAU;YACV,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI;gBAClC,OAAO,SAAS,CAAC,IAAI,EAAE,6CAAqB,CAAC,KAAK,CAAC,CAAC;iBACnD,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,UAAU;gBAC7C,OAAO,SAAS,CAAC,UAAU,EAAE,yDAA2B,CAAC,KAAK,CAAC,CAAC;iBAC/D,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,WAAW;gBAC9C,OAAO,SAAS,CAAC,WAAW,EAAE,yCAAmB,CAAC,KAAK,CAAC,CAAC;iBACxD,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI;gBACvC,OAAO,oBAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAEnC,oBAAoB;YACpB,OAAO,SAAS,CAAC,QAAQ,EAAE,qDAAyB,CAAC,KAAK,CAAC,CAAC;QAChE,CAAC;IApCD,CAoCC,CAAC;AACV,CAAC,EAxCgB,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAwCpC"}
@@ -7,19 +7,18 @@ exports.ParameterDecoratorTransformer = void 0;
7
7
  var path_1 = __importDefault(require("path"));
8
8
  var typescript_1 = __importDefault(require("typescript"));
9
9
  var TypedBodyProgrammer_1 = require("../programmers/TypedBodyProgrammer");
10
+ var TypedParamProgrammer_1 = require("../programmers/TypedParamProgrammer");
10
11
  var TypedQueryProgrammer_1 = require("../programmers/TypedQueryProgrammer");
11
12
  var ParameterDecoratorTransformer;
12
13
  (function (ParameterDecoratorTransformer) {
13
14
  function transform(project, type, decorator) {
14
- var _a, _b;
15
+ var _a;
15
16
  //----
16
17
  // VALIDATIONS
17
18
  //----
18
19
  // CHECK DECORATOR
19
20
  if (!typescript_1.default.isCallExpression(decorator.expression))
20
21
  return decorator;
21
- else if (decorator.expression.arguments.length !== 0)
22
- return decorator;
23
22
  // SIGNATURE DECLARATION
24
23
  var declaration = (_a = project.checker.getResolvedSignature(decorator.expression)) === null || _a === void 0 ? void 0 : _a.declaration;
25
24
  if (declaration === undefined)
@@ -32,7 +31,7 @@ var ParameterDecoratorTransformer;
32
31
  // TRANSFORMATION
33
32
  //----
34
33
  // FIND PROGRAMMER
35
- var programmer = (_b = FUNCTORS[project.checker.getTypeAtLocation(declaration).symbol.name]) === null || _b === void 0 ? void 0 : _b.call(FUNCTORS);
34
+ var programmer = FUNCTORS[project.checker.getTypeAtLocation(declaration).symbol.name];
36
35
  if (programmer === undefined)
37
36
  return decorator;
38
37
  // GET TYPE INFO
@@ -40,14 +39,27 @@ var ParameterDecoratorTransformer;
40
39
  if (typeNode === undefined)
41
40
  return decorator;
42
41
  // DO TRANSFORM
43
- return typescript_1.default.factory.createDecorator(typescript_1.default.factory.updateCallExpression(decorator.expression, decorator.expression.expression, decorator.expression.typeArguments, [programmer(project, decorator.expression.expression)(type)]));
42
+ return typescript_1.default.factory.createDecorator(typescript_1.default.factory.updateCallExpression(decorator.expression, decorator.expression.expression, decorator.expression.typeArguments, programmer(project, decorator.expression.expression)(decorator.expression.arguments)(type)));
44
43
  }
45
44
  ParameterDecoratorTransformer.transform = transform;
46
45
  })(ParameterDecoratorTransformer = exports.ParameterDecoratorTransformer || (exports.ParameterDecoratorTransformer = {}));
47
46
  var FUNCTORS = {
48
- EncryptedBody: function () { return TypedBodyProgrammer_1.TypedBodyProgrammer.generate; },
49
- TypedBody: function () { return TypedBodyProgrammer_1.TypedBodyProgrammer.generate; },
50
- TypedQuery: function () { return TypedQueryProgrammer_1.TypedQueryProgrammer.generate; },
47
+ EncryptedBody: function (project, modulo) { return function (parameters) { return function (type) {
48
+ return parameters.length
49
+ ? parameters
50
+ : [TypedBodyProgrammer_1.TypedBodyProgrammer.generate(project, modulo)(type)];
51
+ }; }; },
52
+ TypedBody: function (project, modulo) { return function (parameters) { return function (type) {
53
+ return parameters.length
54
+ ? parameters
55
+ : [TypedBodyProgrammer_1.TypedBodyProgrammer.generate(project, modulo)(type)];
56
+ }; }; },
57
+ TypedParam: TypedParamProgrammer_1.TypedParamProgrammer.generate,
58
+ TypedQuery: function (project, modulo) { return function (parameters) { return function (type) {
59
+ return parameters.length
60
+ ? parameters
61
+ : [TypedQueryProgrammer_1.TypedQueryProgrammer.generate(project, modulo)(type)];
62
+ }; }; },
51
63
  };
52
64
  var LIB_PATH = path_1.default.join("node_modules", "@nestia", "core", "lib", "decorators");
53
65
  var SRC_PATH = path_1.default.resolve(path_1.default.join(__dirname, "..", "decorators"));
@@ -1 +1 @@
1
- {"version":3,"file":"ParameterDecoratorTransformer.js","sourceRoot":"","sources":["../../src/transformers/ParameterDecoratorTransformer.ts"],"names":[],"mappings":";;;;;;AAAA,8CAAwB;AACxB,0DAA4B;AAG5B,0EAAyE;AACzE,4EAA2E;AAE3E,IAAiB,6BAA6B,CAkD7C;AAlDD,WAAiB,6BAA6B;IAC1C,SAAgB,SAAS,CACrB,OAAgC,EAChC,IAAa,EACb,SAAuB;;QAEvB,MAAM;QACN,cAAc;QACd,MAAM;QACN,kBAAkB;QAClB,IAAI,CAAC,oBAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC;YAAE,OAAO,SAAS,CAAC;aAC5D,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAEvE,wBAAwB;QACxB,IAAM,WAAW,GACb,MAAA,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAChC,SAAS,CAAC,UAAU,CACvB,0CAAE,WAAW,CAAC;QACnB,IAAI,WAAW,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAEhD,YAAY;QACZ,IAAM,IAAI,GAAW,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9D,OAAO,SAAS,CAAC;QAErB,MAAM;QACN,iBAAiB;QACjB,MAAM;QACN,kBAAkB;QAClB,IAAM,UAAU,GACZ,MAAA,QAAQ,CACJ,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,IAAI,CAC7D,wDAAI,CAAC;QACV,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAE/C,gBAAgB;QAChB,IAAM,QAAQ,GACV,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/D,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAE7C,eAAe;QACf,OAAO,oBAAE,CAAC,OAAO,CAAC,eAAe,CAC7B,oBAAE,CAAC,OAAO,CAAC,oBAAoB,CAC3B,SAAS,CAAC,UAAU,EACpB,SAAS,CAAC,UAAU,CAAC,UAAU,EAC/B,SAAS,CAAC,UAAU,CAAC,aAAa,EAClC,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAC/D,CACJ,CAAC;IACN,CAAC;IAhDe,uCAAS,YAgDxB,CAAA;AACL,CAAC,EAlDgB,6BAA6B,GAA7B,qCAA6B,KAA7B,qCAA6B,QAkD7C;AAQD,IAAM,QAAQ,GAAqC;IAC/C,aAAa,EAAE,cAAM,OAAA,yCAAmB,CAAC,QAAQ,EAA5B,CAA4B;IACjD,SAAS,EAAE,cAAM,OAAA,yCAAmB,CAAC,QAAQ,EAA5B,CAA4B;IAC7C,UAAU,EAAE,cAAM,OAAA,2CAAoB,CAAC,QAAQ,EAA7B,CAA6B;CAClD,CAAC;AAEF,IAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CACtB,cAAc,EACd,SAAS,EACT,MAAM,EACN,KAAK,EACL,YAAY,CACf,CAAC;AACF,IAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ParameterDecoratorTransformer.js","sourceRoot":"","sources":["../../src/transformers/ParameterDecoratorTransformer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/core",
3
- "version": "1.1.0-dev.20230414",
3
+ "version": "1.1.0-dev.20230420",
4
4
  "description": "Super-fast validation decorators of NestJS",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
@@ -10,8 +10,8 @@
10
10
  "dev": "npm run build -- --watch",
11
11
  "eslint": "eslint ./**/*.ts",
12
12
  "eslint:fix": "eslint ./**/*.ts --fix",
13
- "package:latest": "npm publish --access public",
14
- "package:next": "npm publish --tag next --access public",
13
+ "package:latest": "npm run build && npm run build:test && npm run test && npm publish --access public",
14
+ "package:next": "npm run package:latest -- --tag next",
15
15
  "prepare": "ts-patch install",
16
16
  "prettier": "prettier ./**/*.ts --write",
17
17
  "test": "node bin/test"
@@ -36,7 +36,7 @@
36
36
  },
37
37
  "homepage": "https://github.com/samchon/nestia",
38
38
  "dependencies": {
39
- "@nestia/fetcher": "^1.1.0-dev.20230413",
39
+ "@nestia/fetcher": "^1.1.0-dev.20230420-2",
40
40
  "@nestjs/common": ">= 7.0.1",
41
41
  "@nestjs/core": ">= 7.0.1",
42
42
  "@nestjs/platform-express": ">= 7.0.1",
@@ -44,7 +44,7 @@
44
44
  "raw-body": ">= 2.0.0",
45
45
  "reflect-metadata": ">= 0.1.12",
46
46
  "rxjs": ">= 6.0.0",
47
- "typia": "^3.8.0-dev.20230413"
47
+ "typia": "^3.8.0-dev.20230420-2"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "typescript": ">= 4.5.2"
@@ -63,7 +63,7 @@
63
63
  "prettier": "^2.8.7",
64
64
  "rimraf": "^3.0.2",
65
65
  "ts-node": "^10.9.1",
66
- "ts-patch": "^3.0.0-beta2",
66
+ "ts-patch": "3.0.0-beta3",
67
67
  "tstl": "^2.5.13",
68
68
  "typescript": "^5.0.4",
69
69
  "typescript-transform-paths": "^3.4.6"
@@ -10,29 +10,35 @@ import type express from "express";
10
10
  *
11
11
  * `TypedParam` is a decorator function getting specific typed parameter from the
12
12
  * HTTP request URL. It's almost same with the {@link nest.Param}, but `TypedParam`
13
- * can specify the parameter type manually. Beside, the {@link nest.Param} always
14
- * parses all of the parameters as string type.
13
+ * automatically casts parameter value to be following its type. Beside, the
14
+ * {@link nest.Param} always parses all of the parameters as `string` type.
15
+ *
16
+ * Note that, if you just omit the `type` and `nullable` parameters, then
17
+ * `TypedParam` automatically determines the `type` and `nullable` values
18
+ * just by analyzing the parameter type. Only when you need to specify them
19
+ * are, you want to use the `uuid` type.
15
20
  *
16
21
  * ```typescript
17
- * \@TypedRoute.Get("shopping/sales/:section/:id/:paused")
22
+ * \@TypedRoute.Get("shopping/sales/:id/:no/:paused")
18
23
  * public async pause
19
24
  * (
20
- * \@TypedParam("section", "string") section: string,
21
- * \@TypedParam("id", "number") id: number,
22
- * \@TypedParam("paused", "boolean", true) paused: boolean | null
25
+ * \@TypedParam("id", "uuid"), id: string, // uuid specification
26
+ * \@TypedParam("no") id: number, // auto casting
27
+ * \@TypedParam("paused") paused: boolean | null // auto casting
23
28
  * ): Promise<void>;
24
29
  * ```
25
30
  *
26
31
  * @param name URL Parameter name
27
- * @param type Type of the URL parameter
32
+ * @param type If omit, automatically determined by the parameter type.
33
+ * @param nullable If omit, automatically determined by the parameter type.
28
34
  * @returns Parameter decorator
29
35
  *
30
36
  * @author Jeongho Nam - https://github.com/samchon
31
37
  */
32
38
  export function TypedParam(
33
39
  name: string,
34
- type: "boolean" | "number" | "string" | "uuid" = "string",
35
- nullable: boolean = false,
40
+ type?: "boolean" | "number" | "string" | "uuid",
41
+ nullable?: false | true,
36
42
  ): ParameterDecorator {
37
43
  return createParamDecorator(function TypedParam(
38
44
  {}: any,
@@ -16,8 +16,9 @@ export namespace TypedBodyProgrammer {
16
16
  key: string,
17
17
  programmer: (
18
18
  project: IProject,
19
+ ) => (
19
20
  modulo: ts.LeftHandSideExpression,
20
- ) => (type: ts.Type) => ts.ArrowFunction,
21
+ ) => (equals: boolean) => (type: ts.Type) => ts.ArrowFunction,
21
22
  ) =>
22
23
  ts.factory.createObjectLiteralExpression([
23
24
  ts.factory.createPropertyAssignment(
@@ -26,25 +27,22 @@ export namespace TypedBodyProgrammer {
26
27
  ),
27
28
  ts.factory.createPropertyAssignment(
28
29
  ts.factory.createIdentifier(key),
29
- programmer(
30
- {
31
- ...project,
32
- options: {
33
- numeric: false,
34
- finite: false,
35
- functional: false,
36
- },
30
+ programmer({
31
+ ...project,
32
+ options: {
33
+ numeric: false,
34
+ finite: false,
35
+ functional: false,
37
36
  },
38
- modulo,
39
- )(type),
37
+ })(modulo)(false)(type),
40
38
  ),
41
39
  ]);
42
40
 
43
41
  // RETURNS
44
42
  if (project.options.validate === "is")
45
- return parameter("is", IsProgrammer.generate);
43
+ return parameter("is", IsProgrammer.write);
46
44
  else if (project.options.validate === "validate")
47
- return parameter("validate", ValidateProgrammer.generate);
48
- return parameter("assert", AssertProgrammer.generate);
45
+ return parameter("validate", ValidateProgrammer.write);
46
+ return parameter("assert", AssertProgrammer.write);
49
47
  };
50
48
  }
@@ -0,0 +1,96 @@
1
+ import ts from "typescript";
2
+
3
+ import { MetadataCollection } from "typia/lib/factories/MetadataCollection";
4
+ import { MetadataFactory } from "typia/lib/factories/MetadataFactory";
5
+ import { Metadata } from "typia/lib/metadata/Metadata";
6
+
7
+ import { INestiaTransformProject } from "../options/INestiaTransformProject";
8
+
9
+ export namespace TypedParamProgrammer {
10
+ export const generate =
11
+ ({ checker }: INestiaTransformProject) =>
12
+ (parameters: readonly ts.Expression[]) =>
13
+ (type: ts.Type): readonly ts.Expression[] => {
14
+ const metadata: Metadata = MetadataFactory.analyze(checker)({
15
+ resolve: false,
16
+ constant: true,
17
+ validate,
18
+ })(new MetadataCollection())(type);
19
+ const [atomic] = get_atomic_types(metadata);
20
+
21
+ // AUTO TYPE SPECIFICATION
22
+ if (parameters.length === 1)
23
+ return [
24
+ parameters[0],
25
+ ts.factory.createStringLiteral(atomic),
26
+ metadata.nullable
27
+ ? ts.factory.createTrue()
28
+ : ts.factory.createFalse(),
29
+ ];
30
+
31
+ // TYPE HAS BEEN SPECIFIED IN DECORATOR
32
+ const specified: Metadata = MetadataFactory.analyze(checker)({
33
+ resolve: false,
34
+ constant: true,
35
+ })(new MetadataCollection())(
36
+ checker.getTypeAtLocation(parameters[1]),
37
+ );
38
+ if (equals(atomic, specified) === false)
39
+ throw new Error(
40
+ error("different type between parameter and variable"),
41
+ );
42
+ if (parameters.length === 2)
43
+ return [
44
+ parameters[0],
45
+ parameters[1],
46
+ metadata.nullable
47
+ ? ts.factory.createTrue()
48
+ : ts.factory.createFalse(),
49
+ ];
50
+
51
+ // NULLABLE HAS BEEN SPECIFIED
52
+ const nullable: Metadata = MetadataFactory.analyze(checker)({
53
+ resolve: false,
54
+ constant: true,
55
+ })(new MetadataCollection())(
56
+ checker.getTypeAtLocation(parameters[2]),
57
+ );
58
+ if (nullable.getName() !== "true" && nullable.getName() !== "false")
59
+ throw new Error(error("nullable value must be literal type"));
60
+ else if (metadata.nullable !== (nullable.getName() === "true"))
61
+ throw new Error(
62
+ error(
63
+ "different type (nullable) between parameter and variable",
64
+ ),
65
+ );
66
+ return parameters;
67
+ };
68
+ }
69
+
70
+ const validate = (meta: Metadata) => {
71
+ if (meta.any) throw new Error(error("do not allow any type"));
72
+ else if (meta.required === false)
73
+ throw new Error(error("do not allow undefindable type"));
74
+
75
+ const atomics: string[] = get_atomic_types(meta);
76
+ const expected: number =
77
+ meta.atomics.length +
78
+ meta.constants.map((c) => c.values.length).reduce((a, b) => a + b, 0);
79
+ if (meta.size() !== expected || atomics.length === 0)
80
+ throw new Error(error("only atomic or constant types is allowed"));
81
+ else if (atomics.length > 1)
82
+ throw new Error(error("do not allow union type"));
83
+ };
84
+
85
+ const get_atomic_types = (meta: Metadata): string[] => [
86
+ ...new Set([...meta.atomics, ...meta.constants.map((c) => c.type)]),
87
+ ];
88
+
89
+ const error = (message: string) =>
90
+ `Error on nestia.core.TypedParam(): ${message}.`;
91
+
92
+ const equals = (atomic: string, p: Metadata) => {
93
+ const name: string = p.getName();
94
+ if (atomic === "string") return name === `"string"` || name === `"uuid"`;
95
+ return `"${atomic}"` === name;
96
+ };
@@ -25,15 +25,10 @@ export namespace TypedQueryProgrammer {
25
25
  (checker: ts.TypeChecker) =>
26
26
  (type: ts.Type): MetadataObject => {
27
27
  const collection: MetadataCollection = new MetadataCollection();
28
- const metadata: Metadata = MetadataFactory.generate(
29
- checker,
30
- collection,
31
- type,
32
- {
33
- resolve: false,
34
- constant: true,
35
- },
36
- );
28
+ const metadata: Metadata = MetadataFactory.analyze(checker)({
29
+ resolve: false,
30
+ constant: true,
31
+ })(collection)(type);
37
32
  if (metadata.objects.length !== 1 || metadata.bucket() !== 1)
38
33
  throw new Error(
39
34
  ErrorMessages.object(metadata)(
@@ -141,15 +136,12 @@ export namespace TypedQueryProgrammer {
141
136
  const decode_object =
142
137
  (project: INestiaTransformProject, modulo: ts.LeftHandSideExpression) =>
143
138
  (type: ts.Type, object: MetadataObject): ts.ConciseBody => {
144
- const assert: ts.ArrowFunction = AssertProgrammer.generate(
145
- {
146
- ...project,
147
- options: {
148
- numeric: true,
149
- },
139
+ const assert: ts.ArrowFunction = AssertProgrammer.write({
140
+ ...project,
141
+ options: {
142
+ numeric: true,
150
143
  },
151
- modulo,
152
- )(type);
144
+ })(modulo)(false)(type);
153
145
  const output = ts.factory.createIdentifier("output");
154
146
 
155
147
  const importer = new FunctionImporter();
@@ -199,14 +191,13 @@ export namespace TypedQueryProgrammer {
199
191
  key,
200
192
  isArray
201
193
  ? ts.factory.createCallExpression(
202
- IdentifierFactory.join(
194
+ IdentifierFactory.access(
203
195
  ts.factory.createCallExpression(
204
196
  ts.factory.createIdentifier("input.getAll"),
205
197
  undefined,
206
198
  [ts.factory.createStringLiteral(key)],
207
199
  ),
208
- "map",
209
- ),
200
+ )("map"),
210
201
  undefined,
211
202
  [
212
203
  ts.factory.createArrowFunction(
@@ -17,6 +17,7 @@ export namespace TypedRouteProgrammer {
17
17
  key: string,
18
18
  programmer: (
19
19
  project: IProject,
20
+ ) => (
20
21
  modulo: ts.LeftHandSideExpression,
21
22
  ) => (type: ts.Type) => ts.ArrowFunction,
22
23
  ) =>
@@ -27,30 +28,24 @@ export namespace TypedRouteProgrammer {
27
28
  ),
28
29
  ts.factory.createPropertyAssignment(
29
30
  ts.factory.createIdentifier(key),
30
- programmer(
31
- {
32
- ...project,
33
- options: {}, // use default option
34
- },
35
- modulo,
36
- )(type),
31
+ programmer({
32
+ ...project,
33
+ options: {}, // use default option
34
+ })(modulo)(type),
37
35
  ),
38
36
  ]);
39
37
 
40
38
  // RETURNS
41
39
  if (project.options.stringify === "is")
42
- return parameter("is", IsStringifyProgrammer.generate);
40
+ return parameter("is", IsStringifyProgrammer.write);
43
41
  else if (project.options.stringify === "validate")
44
- return parameter(
45
- "validate",
46
- ValidateStringifyProgrammer.generate,
47
- );
42
+ return parameter("validate", ValidateStringifyProgrammer.write);
48
43
  else if (project.options.stringify === "stringify")
49
- return parameter("stringify", StringifyProgrammer.generate);
44
+ return parameter("stringify", StringifyProgrammer.write);
50
45
  else if (project.options.stringify === null)
51
46
  return ts.factory.createNull();
52
47
 
53
48
  // ASSERT IS DEFAULT
54
- return parameter("assert", AssertStringifyProgrammer.generate);
49
+ return parameter("assert", AssertStringifyProgrammer.write);
55
50
  };
56
51
  }
@@ -3,6 +3,7 @@ import ts from "typescript";
3
3
 
4
4
  import { INestiaTransformProject } from "../options/INestiaTransformProject";
5
5
  import { TypedBodyProgrammer } from "../programmers/TypedBodyProgrammer";
6
+ import { TypedParamProgrammer } from "../programmers/TypedParamProgrammer";
6
7
  import { TypedQueryProgrammer } from "../programmers/TypedQueryProgrammer";
7
8
 
8
9
  export namespace ParameterDecoratorTransformer {
@@ -16,7 +17,6 @@ export namespace ParameterDecoratorTransformer {
16
17
  //----
17
18
  // CHECK DECORATOR
18
19
  if (!ts.isCallExpression(decorator.expression)) return decorator;
19
- else if (decorator.expression.arguments.length !== 0) return decorator;
20
20
 
21
21
  // SIGNATURE DECLARATION
22
22
  const declaration: ts.Declaration | undefined =
@@ -37,7 +37,7 @@ export namespace ParameterDecoratorTransformer {
37
37
  const programmer: Programmer | undefined =
38
38
  FUNCTORS[
39
39
  project.checker.getTypeAtLocation(declaration).symbol.name
40
- ]?.();
40
+ ];
41
41
  if (programmer === undefined) return decorator;
42
42
 
43
43
  // GET TYPE INFO
@@ -51,22 +51,36 @@ export namespace ParameterDecoratorTransformer {
51
51
  decorator.expression,
52
52
  decorator.expression.expression,
53
53
  decorator.expression.typeArguments,
54
- [programmer(project, decorator.expression.expression)(type)],
54
+ programmer(
55
+ project,
56
+ decorator.expression.expression,
57
+ )(decorator.expression.arguments)(type),
55
58
  ),
56
59
  );
57
60
  }
58
61
  }
59
62
 
60
- interface Programmer {
61
- (project: INestiaTransformProject, expression: ts.LeftHandSideExpression): (
62
- type: ts.Type,
63
- ) => ts.Expression;
64
- }
63
+ type Programmer = (
64
+ project: INestiaTransformProject,
65
+ modulo: ts.LeftHandSideExpression,
66
+ ) => (
67
+ parameters: readonly ts.Expression[],
68
+ ) => (type: ts.Type) => readonly ts.Expression[];
65
69
 
66
- const FUNCTORS: Record<string, () => Programmer> = {
67
- EncryptedBody: () => TypedBodyProgrammer.generate,
68
- TypedBody: () => TypedBodyProgrammer.generate,
69
- TypedQuery: () => TypedQueryProgrammer.generate,
70
+ const FUNCTORS: Record<string, Programmer> = {
71
+ EncryptedBody: (project, modulo) => (parameters) => (type) =>
72
+ parameters.length
73
+ ? parameters
74
+ : [TypedBodyProgrammer.generate(project, modulo)(type)],
75
+ TypedBody: (project, modulo) => (parameters) => (type) =>
76
+ parameters.length
77
+ ? parameters
78
+ : [TypedBodyProgrammer.generate(project, modulo)(type)],
79
+ TypedParam: TypedParamProgrammer.generate,
80
+ TypedQuery: (project, modulo) => (parameters) => (type) =>
81
+ parameters.length
82
+ ? parameters
83
+ : [TypedQueryProgrammer.generate(project, modulo)(type)],
70
84
  };
71
85
 
72
86
  const LIB_PATH = path.join(