typia 5.2.6 → 5.3.0-dev.20231112

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 (202) hide show
  1. package/lib/factories/ExpressionFactory.js +14 -16
  2. package/lib/factories/ExpressionFactory.js.map +1 -1
  3. package/lib/factories/JsonMetadataFactory.d.ts +1 -1
  4. package/lib/factories/JsonMetadataFactory.js +2 -2
  5. package/lib/factories/JsonMetadataFactory.js.map +1 -1
  6. package/lib/factories/LiteralFactory.js +2 -0
  7. package/lib/factories/LiteralFactory.js.map +1 -1
  8. package/lib/factories/MetadataCollection.d.ts +2 -2
  9. package/lib/factories/MetadataFactory.d.ts +1 -1
  10. package/lib/factories/MetadataFactory.js +236 -170
  11. package/lib/factories/MetadataFactory.js.map +1 -1
  12. package/lib/factories/NumericRangeFactory.d.ts +2 -2
  13. package/lib/factories/NumericRangeFactory.js +41 -21
  14. package/lib/factories/NumericRangeFactory.js.map +1 -1
  15. package/lib/factories/ProtobufFactory.d.ts +1 -1
  16. package/lib/factories/ProtobufFactory.js +2 -2
  17. package/lib/factories/ProtobufFactory.js.map +1 -1
  18. package/lib/factories/internal/metadata/MetadataHelper.js +3 -2
  19. package/lib/factories/internal/metadata/MetadataHelper.js.map +1 -1
  20. package/lib/factories/internal/metadata/iterate_metadata_constant.js +13 -8
  21. package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +8 -5
  23. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  24. package/lib/functional/$from.d.ts +3 -0
  25. package/lib/functional/$from.js +9 -0
  26. package/lib/functional/$from.js.map +1 -0
  27. package/lib/functional/Namespace.js +7 -0
  28. package/lib/functional/Namespace.js.map +1 -1
  29. package/lib/module.d.ts +1 -0
  30. package/lib/module.js +2 -5
  31. package/lib/module.js.map +1 -1
  32. package/lib/programmers/CheckerProgrammer.js +11 -16
  33. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  34. package/lib/programmers/RandomProgrammer.js +1 -1
  35. package/lib/programmers/RandomProgrammer.js.map +1 -1
  36. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  37. package/lib/programmers/http/HttpHeadersProgrammer.js +1 -1
  38. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  39. package/lib/programmers/http/HttpParameterProgrammer.js +1 -1
  40. package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
  41. package/lib/programmers/http/HttpQueryProgrammer.js +1 -1
  42. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  43. package/lib/programmers/internal/application_array.js +8 -0
  44. package/lib/programmers/internal/application_array.js.map +1 -1
  45. package/lib/programmers/internal/application_number.js +8 -1
  46. package/lib/programmers/internal/application_number.js.map +1 -1
  47. package/lib/programmers/internal/application_string.js +8 -1
  48. package/lib/programmers/internal/application_string.js.map +1 -1
  49. package/lib/programmers/internal/check_array_length.js +7 -4
  50. package/lib/programmers/internal/check_array_length.js.map +1 -1
  51. package/lib/programmers/internal/check_bigint.js +7 -4
  52. package/lib/programmers/internal/check_bigint.js.map +1 -1
  53. package/lib/programmers/internal/check_number.js +7 -4
  54. package/lib/programmers/internal/check_number.js.map +1 -1
  55. package/lib/programmers/internal/check_string.js +7 -4
  56. package/lib/programmers/internal/check_string.js.map +1 -1
  57. package/lib/programmers/internal/metadata_to_pattern.js +3 -1
  58. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  59. package/lib/programmers/json/JsonAssertParseProgrammer.js +1 -1
  60. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  61. package/lib/programmers/json/JsonIsParseProgrammer.js +1 -1
  62. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  63. package/lib/programmers/json/JsonStringifyProgrammer.js +3 -8
  64. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  65. package/lib/programmers/json/JsonValidateParseProgrammer.js +1 -1
  66. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  67. package/lib/programmers/misc/MiscCloneProgrammer.js +19 -24
  68. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  69. package/lib/programmers/misc/MiscLiteralsProgrammer.js +1 -1
  70. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  71. package/lib/programmers/misc/MiscPruneProgrammer.js +11 -16
  72. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  73. package/lib/programmers/notations/NotationGeneralProgrammer.js +11 -16
  74. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  75. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +1 -1
  76. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  77. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +38 -42
  78. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  79. package/lib/programmers/protobuf/ProtobufMessageProgrammer.d.ts +1 -1
  80. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +22 -25
  81. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  82. package/lib/reflect.d.ts +3 -0
  83. package/lib/reflect.js +13 -0
  84. package/lib/reflect.js.map +1 -0
  85. package/lib/schemas/json/IJsonSchema.d.ts +1 -0
  86. package/lib/schemas/metadata/IMetadataApplication.d.ts +2 -2
  87. package/lib/schemas/metadata/{IMetadataCollection.d.ts → IMetadataComponents.d.ts} +1 -1
  88. package/lib/schemas/metadata/{IMetadataCollection.js → IMetadataComponents.js} +1 -1
  89. package/lib/schemas/metadata/IMetadataComponents.js.map +1 -0
  90. package/lib/schemas/metadata/IMetadataConstant.d.ts +1 -1
  91. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +2 -2
  92. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  93. package/lib/schemas/metadata/Metadata.js +82 -173
  94. package/lib/schemas/metadata/Metadata.js.map +1 -1
  95. package/lib/schemas/metadata/MetadataAlias.js +1 -1
  96. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  97. package/lib/schemas/metadata/MetadataApplication.d.ts +13 -0
  98. package/lib/schemas/metadata/MetadataApplication.js +30 -0
  99. package/lib/schemas/metadata/MetadataApplication.js.map +1 -0
  100. package/lib/schemas/metadata/MetadataArrayType.js +1 -1
  101. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -1
  102. package/lib/schemas/metadata/MetadataAtomic.d.ts +3 -0
  103. package/lib/schemas/metadata/MetadataAtomic.js +42 -0
  104. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -1
  105. package/lib/schemas/metadata/MetadataComponents.d.ts +16 -0
  106. package/lib/schemas/metadata/MetadataComponents.js +151 -0
  107. package/lib/schemas/metadata/MetadataComponents.js.map +1 -0
  108. package/lib/schemas/metadata/MetadataConstant.d.ts +9 -1
  109. package/lib/schemas/metadata/MetadataConstant.js +29 -0
  110. package/lib/schemas/metadata/MetadataConstant.js.map +1 -1
  111. package/lib/schemas/metadata/MetadataEscaped.js +4 -4
  112. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -1
  113. package/lib/schemas/metadata/MetadataObject.js +2 -2
  114. package/lib/schemas/metadata/MetadataObject.js.map +1 -1
  115. package/lib/schemas/metadata/MetadataProperty.js +4 -4
  116. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  117. package/lib/schemas/metadata/MetadataTupleType.js +1 -1
  118. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -1
  119. package/lib/transformers/CallExpressionTransformer.js +5 -2
  120. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  121. package/lib/transformers/features/json/JsonApplicationTransformer.d.ts +1 -1
  122. package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -5
  123. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  124. package/lib/transformers/features/reflect/ReflectMetadataTransformer.d.ts +5 -0
  125. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +58 -0
  126. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -0
  127. package/package.json +2 -2
  128. package/src/Primitive.ts +135 -135
  129. package/src/executable/TypiaSetupWizard.ts +142 -142
  130. package/src/executable/setup/CommandExecutor.ts +8 -8
  131. package/src/factories/ExpressionFactory.ts +12 -13
  132. package/src/factories/JsonMetadataFactory.ts +53 -50
  133. package/src/factories/LiteralFactory.ts +2 -0
  134. package/src/factories/MetadataCollection.ts +282 -282
  135. package/src/factories/MetadataFactory.ts +55 -22
  136. package/src/factories/NumericRangeFactory.ts +56 -17
  137. package/src/factories/ProtobufFactory.ts +5 -2
  138. package/src/factories/internal/metadata/MetadataHelper.ts +7 -4
  139. package/src/factories/internal/metadata/emplace_metadata_object.ts +178 -178
  140. package/src/factories/internal/metadata/iterate_metadata_constant.ts +10 -8
  141. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +9 -8
  142. package/src/functional/$from.ts +5 -0
  143. package/src/functional/$stoll.ts +8 -8
  144. package/src/functional/Namespace.ts +175 -168
  145. package/src/module.ts +1 -19
  146. package/src/programmers/AssertProgrammer.ts +322 -322
  147. package/src/programmers/CheckerProgrammer.ts +16 -17
  148. package/src/programmers/IsProgrammer.ts +258 -258
  149. package/src/programmers/RandomProgrammer.ts +4 -1
  150. package/src/programmers/ValidateProgrammer.ts +350 -350
  151. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  152. package/src/programmers/helpers/ProtobufUtil.ts +3 -2
  153. package/src/programmers/http/HttpHeadersProgrammer.ts +4 -1
  154. package/src/programmers/http/HttpParameterProgrammer.ts +4 -1
  155. package/src/programmers/http/HttpQueryProgrammer.ts +4 -1
  156. package/src/programmers/internal/application_array.ts +8 -0
  157. package/src/programmers/internal/application_number.ts +8 -1
  158. package/src/programmers/internal/application_string.ts +8 -1
  159. package/src/programmers/internal/check_array_length.ts +5 -2
  160. package/src/programmers/internal/check_bigint.ts +5 -2
  161. package/src/programmers/internal/check_dynamic_key.ts +178 -178
  162. package/src/programmers/internal/check_dynamic_properties.ts +202 -202
  163. package/src/programmers/internal/check_number.ts +5 -2
  164. package/src/programmers/internal/check_object.ts +62 -62
  165. package/src/programmers/internal/check_string.ts +5 -3
  166. package/src/programmers/internal/metadata_to_pattern.ts +3 -1
  167. package/src/programmers/json/JsonAssertParseProgrammer.ts +1 -0
  168. package/src/programmers/json/JsonIsParseProgrammer.ts +1 -0
  169. package/src/programmers/json/JsonStringifyProgrammer.ts +959 -960
  170. package/src/programmers/json/JsonValidateParseProgrammer.ts +1 -0
  171. package/src/programmers/misc/MiscCloneProgrammer.ts +787 -786
  172. package/src/programmers/misc/MiscLiteralsProgrammer.ts +4 -1
  173. package/src/programmers/misc/MiscPruneProgrammer.ts +549 -548
  174. package/src/programmers/notations/NotationGeneralProgrammer.ts +717 -716
  175. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +1 -0
  176. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +872 -882
  177. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +21 -21
  178. package/src/reflect.ts +24 -0
  179. package/src/schemas/json/IJsonSchema.ts +1 -0
  180. package/src/schemas/metadata/IMetadataApplication.ts +2 -2
  181. package/src/schemas/metadata/{IMetadataCollection.ts → IMetadataComponents.ts} +1 -1
  182. package/src/schemas/metadata/IMetadataConstant.ts +1 -1
  183. package/src/schemas/metadata/IMetadataTypeTag.ts +9 -2
  184. package/src/schemas/metadata/Metadata.ts +18 -91
  185. package/src/schemas/metadata/MetadataAlias.ts +1 -1
  186. package/src/schemas/metadata/MetadataApplication.ts +44 -0
  187. package/src/schemas/metadata/MetadataArrayType.ts +1 -1
  188. package/src/schemas/metadata/MetadataAtomic.ts +44 -0
  189. package/src/schemas/metadata/MetadataComponents.ts +98 -0
  190. package/src/schemas/metadata/MetadataConstant.ts +44 -1
  191. package/src/schemas/metadata/MetadataEscaped.ts +4 -4
  192. package/src/schemas/metadata/MetadataObject.ts +2 -2
  193. package/src/schemas/metadata/MetadataProperty.ts +4 -7
  194. package/src/schemas/metadata/MetadataTupleType.ts +1 -1
  195. package/src/transform.ts +35 -35
  196. package/src/transformers/CallExpressionTransformer.ts +5 -2
  197. package/src/transformers/features/json/JsonApplicationTransformer.ts +7 -4
  198. package/src/transformers/features/{misc/MetadataTransformer.ts → reflect/ReflectMetadataTransformer.ts} +25 -8
  199. package/lib/schemas/metadata/IMetadataCollection.js.map +0 -1
  200. package/lib/transformers/features/misc/MetadataTransformer.d.ts +0 -5
  201. package/lib/transformers/features/misc/MetadataTransformer.js +0 -55
  202. package/lib/transformers/features/misc/MetadataTransformer.js.map +0 -1
@@ -3,6 +3,7 @@ import ts from "typescript";
3
3
  import { Metadata } from "../schemas/metadata/Metadata";
4
4
  import { MetadataAlias } from "../schemas/metadata/MetadataAlias";
5
5
  import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
6
+ import { MetadataConstant } from "../schemas/metadata/MetadataConstant";
6
7
  import { MetadataObject } from "../schemas/metadata/MetadataObject";
7
8
  import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
8
9
  import { explore_metadata } from "./internal/metadata/explore_metadata";
@@ -11,6 +12,7 @@ import { iterate_metadata_sort } from "./internal/metadata/iterate_metadata_sort
11
12
 
12
13
  import { ValidationPipe } from "../typings/ValidationPipe";
13
14
 
15
+ import { ExpressionFactory } from "./ExpressionFactory";
14
16
  import { MetadataCollection } from "./MetadataCollection";
15
17
 
16
18
  export namespace MetadataFactory {
@@ -40,7 +42,7 @@ export namespace MetadataFactory {
40
42
  }
41
43
 
42
44
  export const analyze =
43
- (checker: ts.TypeChecker) =>
45
+ (checker: ts.TypeChecker, context?: ts.TransformationContext) =>
44
46
  (options: IOptions) =>
45
47
  (collection: MetadataCollection) =>
46
48
  (type: ts.Type | null): ValidationPipe<Metadata, IError> => {
@@ -59,7 +61,9 @@ export namespace MetadataFactory {
59
61
  iterate_metadata_sort(collection)(meta);
60
62
 
61
63
  if (options.validate)
62
- errors.push(...validate(options)(options.validate)(meta));
64
+ errors.push(
65
+ ...validate(context)(options)(options.validate)(meta),
66
+ );
63
67
  return errors.length
64
68
  ? {
65
69
  success: false,
@@ -76,14 +80,17 @@ export namespace MetadataFactory {
76
80
  */
77
81
  export const soleLiteral = (value: string): Metadata => {
78
82
  const meta: Metadata = Metadata.initialize();
79
- meta.constants.push({
80
- values: [value],
81
- type: "string",
82
- });
83
+ meta.constants.push(
84
+ MetadataConstant.from({
85
+ values: [value],
86
+ type: "string",
87
+ }),
88
+ );
83
89
  return meta;
84
90
  };
85
91
 
86
92
  const validate =
93
+ (context?: ts.TransformationContext) =>
87
94
  (options: IOptions) =>
88
95
  (functor: Validator) =>
89
96
  (meta: Metadata): IError[] => {
@@ -95,7 +102,7 @@ export namespace MetadataFactory {
95
102
  tuples: new Set(),
96
103
  aliases: new Set(),
97
104
  };
98
- validateMeta(options)(visitor)(meta, {
105
+ validateMeta(context)(options)(visitor)(meta, {
99
106
  object: null,
100
107
  property: null,
101
108
  nested: null,
@@ -107,47 +114,70 @@ export namespace MetadataFactory {
107
114
  };
108
115
 
109
116
  const validateMeta =
117
+ (context?: ts.TransformationContext) =>
110
118
  (options: IOptions) =>
111
119
  (visitor: IValidationVisitor) =>
112
120
  (meta: Metadata, explore: IExplore) => {
113
- const result: Set<string> = new Set(visitor.functor(meta, explore));
114
- if (result.size)
121
+ const result: string[] = [];
122
+ if (context !== undefined)
123
+ for (const atomic of meta.atomics)
124
+ for (const row of atomic.tags)
125
+ for (const tag of row.filter(
126
+ (t) =>
127
+ t.validate !== undefined &&
128
+ t.predicate === undefined,
129
+ ))
130
+ try {
131
+ tag.predicate = ExpressionFactory.transpile(
132
+ context,
133
+ )(tag.validate!);
134
+ } catch {
135
+ result.push(
136
+ `Unable to transpile type tag script: ${JSON.stringify(
137
+ tag.validate,
138
+ )}`,
139
+ );
140
+ tag.predicate = () => ts.factory.createTrue();
141
+ }
142
+ result.push(...visitor.functor(meta, explore));
143
+ if (result.length)
115
144
  visitor.errors.push({
116
145
  name: meta.getName(),
117
146
  explore: { ...explore },
118
- messages: [...result],
147
+ messages: [...new Set(result)],
119
148
  });
120
149
 
121
150
  for (const alias of meta.aliases)
122
- validateAlias(options)(visitor)(alias, explore);
151
+ validateAlias(context)(options)(visitor)(alias, explore);
123
152
  for (const array of meta.arrays)
124
- validateArray(options)(visitor)(array.type, explore);
153
+ validateArray(context)(options)(visitor)(array.type, explore);
125
154
  for (const tuple of meta.tuples)
126
- validateTuple(options)(visitor)(tuple.type, explore);
155
+ validateTuple(context)(options)(visitor)(tuple.type, explore);
127
156
  for (const obj of meta.objects)
128
- validateObject(options)(visitor)(obj);
157
+ validateObject(context)(options)(visitor)(obj);
129
158
  for (const set of meta.sets)
130
- validateMeta(options)(visitor)(set, explore);
159
+ validateMeta(context)(options)(visitor)(set, explore);
131
160
  for (const map of meta.maps) {
132
- validateMeta(options)(visitor)(map.key, explore);
133
- validateMeta(options)(visitor)(map.value, explore);
161
+ validateMeta(context)(options)(visitor)(map.key, explore);
162
+ validateMeta(context)(options)(visitor)(map.value, explore);
134
163
  }
135
164
 
136
165
  if (options.escape === true && meta.escaped !== null)
137
- validateMeta(options)(visitor)(meta.escaped.returns, {
166
+ validateMeta(context)(options)(visitor)(meta.escaped.returns, {
138
167
  ...explore,
139
168
  escaped: true,
140
169
  });
141
170
  };
142
171
 
143
172
  const validateAlias =
173
+ (context?: ts.TransformationContext) =>
144
174
  (options: IOptions) =>
145
175
  (visitor: IValidationVisitor) =>
146
176
  (alias: MetadataAlias, explore: IExplore) => {
147
177
  if (visitor.aliases.has(alias)) return;
148
178
  visitor.aliases.add(alias);
149
179
 
150
- validateMeta(options)(visitor)(alias.value, {
180
+ validateMeta(context)(options)(visitor)(alias.value, {
151
181
  ...explore,
152
182
  nested: alias,
153
183
  aliased: true,
@@ -155,13 +185,14 @@ export namespace MetadataFactory {
155
185
  };
156
186
 
157
187
  const validateArray =
188
+ (context?: ts.TransformationContext) =>
158
189
  (options: IOptions) =>
159
190
  (visitor: IValidationVisitor) =>
160
191
  (array: MetadataArrayType, explore: IExplore) => {
161
192
  if (visitor.arrays.has(array)) return;
162
193
  visitor.arrays.add(array);
163
194
 
164
- validateMeta(options)(visitor)(array.value, {
195
+ validateMeta(context)(options)(visitor)(array.value, {
165
196
  ...explore,
166
197
  nested: array,
167
198
  top: false,
@@ -169,6 +200,7 @@ export namespace MetadataFactory {
169
200
  };
170
201
 
171
202
  const validateTuple =
203
+ (context?: ts.TransformationContext) =>
172
204
  (options: IOptions) =>
173
205
  (visitor: IValidationVisitor) =>
174
206
  (tuple: MetadataTupleType, explore: IExplore) => {
@@ -176,7 +208,7 @@ export namespace MetadataFactory {
176
208
  visitor.tuples.add(tuple);
177
209
 
178
210
  for (const elem of tuple.elements)
179
- validateMeta(options)(visitor)(elem, {
211
+ validateMeta(context)(options)(visitor)(elem, {
180
212
  ...explore,
181
213
  nested: tuple,
182
214
  top: false,
@@ -184,6 +216,7 @@ export namespace MetadataFactory {
184
216
  };
185
217
 
186
218
  const validateObject =
219
+ (context?: ts.TransformationContext) =>
187
220
  (options: IOptions) =>
188
221
  (visitor: IValidationVisitor) =>
189
222
  (object: MetadataObject) => {
@@ -215,7 +248,7 @@ export namespace MetadataFactory {
215
248
  }
216
249
 
217
250
  for (const property of object.properties)
218
- validateMeta(options)(visitor)(property.value, {
251
+ validateMeta(context)(options)(visitor)(property.value, {
219
252
  object,
220
253
  property: property.key.isSoleLiteral()
221
254
  ? property.key.getSoleLiteral()!
@@ -6,28 +6,67 @@ import { ExpressionFactory } from "./ExpressionFactory";
6
6
 
7
7
  export namespace NumericRangeFactory {
8
8
  export const number =
9
- (context: ts.TransformationContext) =>
10
9
  (type: ProtobufAtomic.Numeric) =>
11
10
  (input: ts.Expression): ts.Expression =>
12
- ExpressionFactory.transpile(context)(NUMBER_TEXT[type])(input);
11
+ NumberPredicator[type](input);
13
12
 
14
13
  export const bigint =
15
- (context: ts.TransformationContext) =>
16
14
  (type: ProtobufAtomic.BigNumeric) =>
17
15
  (input: ts.Expression): ts.Expression =>
18
- ExpressionFactory.transpile(context)(BIGINT_TEXT[type])(input);
16
+ BigIntPredicator[type](input);
19
17
  }
20
18
 
21
- const NUMBER_TEXT = {
22
- int32: `Math.floor($input) === $input && -2147483648 <= $input && $input <= 2147483647`,
23
- uint32: `Math.floor($input) === $input && 0 <= $input && $input <= 4294967295`,
24
- int64: `Math.floor($input) === $input && -9223372036854775808 <= $input && $input <= 9223372036854775807`,
25
- uint64: `Math.floor($input) === $input && 0 <= $input && $input <= 18446744073709551615`,
26
- float: `-1.175494351e38 <= $input && $input <= 3.4028235e38`,
27
- double: `true`,
28
- };
29
-
30
- const BIGINT_TEXT = {
31
- int64: `true`,
32
- uint64: `BigInt(0) <= $input`,
33
- };
19
+ namespace NumberPredicator {
20
+ export const int32 = (input: ts.Expression) =>
21
+ ts.factory.createLogicalAnd(
22
+ integer(input),
23
+ between("-2147483648", "2147483647")(input),
24
+ );
25
+ export const uint32 = (input: ts.Expression) =>
26
+ ts.factory.createLogicalAnd(
27
+ integer(input),
28
+ between("0", "4294967295")(input),
29
+ );
30
+ export const int64 = (input: ts.Expression) =>
31
+ ts.factory.createLogicalAnd(
32
+ integer(input),
33
+ between("-9223372036854775808", "9223372036854775807")(input),
34
+ );
35
+ export const uint64 = (input: ts.Expression) =>
36
+ ts.factory.createLogicalAnd(
37
+ integer(input),
38
+ between("0", "18446744073709551615")(input),
39
+ );
40
+ export const float = (input: ts.Expression) =>
41
+ between("-1.175494351e38", "3.4028235e38")(input);
42
+ export const double = () => ts.factory.createTrue();
43
+ }
44
+
45
+ namespace BigIntPredicator {
46
+ export const int64 = () => ts.factory.createTrue();
47
+ export const uint64 = (input: ts.Expression) =>
48
+ ts.factory.createLessThanEquals(
49
+ ts.factory.createCallExpression(
50
+ ts.factory.createIdentifier("BigInt"),
51
+ undefined,
52
+ [ExpressionFactory.number(0)],
53
+ ),
54
+ input,
55
+ );
56
+ }
57
+
58
+ const integer = (input: ts.Expression) =>
59
+ ts.factory.createStrictEquality(
60
+ ts.factory.createCallExpression(
61
+ ts.factory.createIdentifier("Math.floor"),
62
+ undefined,
63
+ [input],
64
+ ),
65
+ input,
66
+ );
67
+
68
+ const between = (x: string, y: string) => (input: ts.Expression) =>
69
+ ts.factory.createLogicalAnd(
70
+ ts.factory.createLessThanEquals(ts.factory.createIdentifier(x), input),
71
+ ts.factory.createLessThanEquals(input, ts.factory.createIdentifier(y)),
72
+ );
@@ -17,12 +17,15 @@ import { MetadataFactory } from "./MetadataFactory";
17
17
  export namespace ProtobufFactory {
18
18
  export const metadata =
19
19
  (method: string) =>
20
- (checker: ts.TypeChecker) =>
20
+ (checker: ts.TypeChecker, context?: ts.TransformationContext) =>
21
21
  (collection: MetadataCollection) =>
22
22
  (type: ts.Type): Metadata => {
23
23
  // COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
24
24
  const result: ValidationPipe<Metadata, MetadataFactory.IError> =
25
- MetadataFactory.analyze(checker)({
25
+ MetadataFactory.analyze(
26
+ checker,
27
+ context,
28
+ )({
26
29
  escape: false,
27
30
  constant: true,
28
31
  absorb: true,
@@ -1,12 +1,15 @@
1
1
  import { Metadata } from "../../../schemas/metadata/Metadata";
2
+ import { MetadataConstant } from "../../../schemas/metadata/MetadataConstant";
2
3
 
3
4
  export namespace MetadataHelper {
4
5
  export const literal_to_metadata = (key: string): Metadata => {
5
6
  const metadata: Metadata = Metadata.initialize();
6
- metadata.constants.push({
7
- type: "string",
8
- values: [key],
9
- });
7
+ metadata.constants.push(
8
+ MetadataConstant.create({
9
+ type: "string",
10
+ values: [key],
11
+ }),
12
+ );
10
13
  return metadata;
11
14
  };
12
15
  }