typia 5.0.4 → 5.0.5-dev.20230921

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 (291) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/IRandomGenerator.ts +35 -35
  4. package/src/IValidation.ts +21 -21
  5. package/src/Primitive.ts +135 -135
  6. package/src/Resolved.ts +116 -116
  7. package/src/TypeGuardError.ts +36 -36
  8. package/src/executable/TypiaGenerateWizard.ts +85 -85
  9. package/src/executable/TypiaSetupWizard.ts +153 -153
  10. package/src/executable/setup/ArgumentParser.ts +45 -45
  11. package/src/executable/setup/CommandExecutor.ts +8 -8
  12. package/src/executable/setup/FileRetriever.ts +22 -22
  13. package/src/executable/setup/PackageManager.ts +71 -71
  14. package/src/executable/setup/PluginConfigurator.ts +70 -70
  15. package/src/executable/typia.ts +52 -52
  16. package/src/factories/CommentFactory.ts +84 -84
  17. package/src/factories/ExpressionFactory.ts +159 -159
  18. package/src/factories/IdentifierFactory.ts +74 -74
  19. package/src/factories/JsonMetadataFactory.ts +43 -43
  20. package/src/factories/LiteralFactory.ts +47 -47
  21. package/src/factories/MetadataCollection.ts +269 -269
  22. package/src/factories/MetadataCommentTagFactory.ts +629 -629
  23. package/src/factories/MetadataFactory.ts +214 -214
  24. package/src/factories/MetadataTypeTagFactory.ts +313 -313
  25. package/src/factories/NumericRangeFactory.ts +33 -33
  26. package/src/factories/ProtobufFactory.ts +272 -272
  27. package/src/factories/StatementFactory.ts +72 -72
  28. package/src/factories/TemplateFactory.ts +58 -58
  29. package/src/factories/TypeFactory.ts +119 -119
  30. package/src/factories/ValueFactory.ts +12 -12
  31. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  32. package/src/factories/internal/metadata/emend_metadata_atomics.ts +40 -40
  33. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  34. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +41 -41
  35. package/src/factories/internal/metadata/emplace_metadata_object.ts +150 -150
  36. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +60 -60
  37. package/src/factories/internal/metadata/explore_metadata.ts +32 -32
  38. package/src/factories/internal/metadata/iterate_metadata.ts +101 -101
  39. package/src/factories/internal/metadata/iterate_metadata_alias.ts +35 -35
  40. package/src/factories/internal/metadata/iterate_metadata_array.ts +37 -37
  41. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  42. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  43. package/src/factories/internal/metadata/iterate_metadata_collection.ts +141 -141
  44. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
  45. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  46. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +197 -197
  47. package/src/factories/internal/metadata/iterate_metadata_map.ts +57 -57
  48. package/src/factories/internal/metadata/iterate_metadata_native.ts +210 -210
  49. package/src/factories/internal/metadata/iterate_metadata_object.ts +44 -44
  50. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +52 -52
  51. package/src/factories/internal/metadata/iterate_metadata_set.ts +42 -42
  52. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  53. package/src/factories/internal/metadata/iterate_metadata_template.ts +47 -47
  54. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  55. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  56. package/src/functional/$ProtobufReader.ts +201 -201
  57. package/src/functional/$ProtobufSizer.ts +147 -147
  58. package/src/functional/$ProtobufWriter.ts +151 -151
  59. package/src/functional/$any.ts +4 -4
  60. package/src/functional/$clone.ts +4 -4
  61. package/src/functional/$dictionary.ts +25 -25
  62. package/src/functional/$every.ts +11 -11
  63. package/src/functional/$guard.ts +35 -35
  64. package/src/functional/$is_between.ts +2 -2
  65. package/src/functional/$join.ts +46 -46
  66. package/src/functional/$number.ts +13 -13
  67. package/src/functional/$report.ts +15 -15
  68. package/src/functional/$rest.ts +3 -3
  69. package/src/functional/$string.ts +50 -50
  70. package/src/functional/$strlen.ts +7 -7
  71. package/src/functional/$tail.ts +5 -5
  72. package/src/functional/$varint.ts +130 -130
  73. package/src/functional/$zigzag.ts +39 -39
  74. package/src/functional/IProtobufWriter.ts +18 -18
  75. package/src/functional/Namespace.ts +133 -133
  76. package/src/index.ts +4 -4
  77. package/src/json.ts +648 -648
  78. package/src/misc.ts +651 -651
  79. package/src/module.ts +656 -656
  80. package/src/programmers/AssertProgrammer.ts +317 -317
  81. package/src/programmers/CheckerProgrammer.ts +1137 -1137
  82. package/src/programmers/FeatureProgrammer.ts +478 -478
  83. package/src/programmers/IsProgrammer.ts +252 -252
  84. package/src/programmers/RandomProgrammer.ts +878 -878
  85. package/src/programmers/TypiaProgrammer.ts +163 -163
  86. package/src/programmers/ValidateProgrammer.ts +346 -346
  87. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  88. package/src/programmers/helpers/CloneJoiner.ts +144 -144
  89. package/src/programmers/helpers/FunctionImporeter.ts +91 -91
  90. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  91. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  92. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  93. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  94. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  95. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  96. package/src/programmers/helpers/RandomJoiner.ts +151 -151
  97. package/src/programmers/helpers/RandomRanger.ts +173 -173
  98. package/src/programmers/helpers/StringifyJoinder.ts +113 -113
  99. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  100. package/src/programmers/helpers/UnionExplorer.ts +305 -305
  101. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  102. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -32
  103. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  104. package/src/programmers/internal/application_alias.ts +65 -65
  105. package/src/programmers/internal/application_array.ts +53 -53
  106. package/src/programmers/internal/application_boolean.ts +15 -15
  107. package/src/programmers/internal/application_constant.ts +26 -26
  108. package/src/programmers/internal/application_default.ts +17 -17
  109. package/src/programmers/internal/application_default_string.ts +37 -37
  110. package/src/programmers/internal/application_escaped.ts +55 -55
  111. package/src/programmers/internal/application_native.ts +39 -39
  112. package/src/programmers/internal/application_number.ts +88 -88
  113. package/src/programmers/internal/application_object.ts +162 -162
  114. package/src/programmers/internal/application_schema.ts +175 -175
  115. package/src/programmers/internal/application_string.ts +51 -51
  116. package/src/programmers/internal/application_templates.ts +25 -25
  117. package/src/programmers/internal/application_tuple.ts +58 -58
  118. package/src/programmers/internal/check_array_length.ts +41 -41
  119. package/src/programmers/internal/check_bigint.ts +45 -45
  120. package/src/programmers/internal/check_dynamic_properties.ts +194 -194
  121. package/src/programmers/internal/check_everything.ts +28 -28
  122. package/src/programmers/internal/check_native.ts +21 -21
  123. package/src/programmers/internal/check_number.ts +105 -105
  124. package/src/programmers/internal/check_object.ts +55 -55
  125. package/src/programmers/internal/check_string.ts +45 -45
  126. package/src/programmers/internal/check_template.ts +61 -61
  127. package/src/programmers/internal/check_union_array_like.ts +323 -323
  128. package/src/programmers/internal/decode_union_object.ts +84 -84
  129. package/src/programmers/internal/feature_object_entries.ts +58 -58
  130. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  131. package/src/programmers/internal/prune_object_properties.ts +60 -60
  132. package/src/programmers/internal/random_custom.ts +37 -37
  133. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  134. package/src/programmers/internal/stringify_native.ts +7 -7
  135. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  136. package/src/programmers/internal/template_to_pattern.ts +15 -15
  137. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  138. package/src/programmers/json/JsonApplicationProgrammer.ts +50 -50
  139. package/src/programmers/json/JsonAssertParseProgrammer.ts +71 -71
  140. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +66 -66
  141. package/src/programmers/json/JsonIsParseProgrammer.ts +77 -77
  142. package/src/programmers/json/JsonIsStringifyProgrammer.ts +76 -76
  143. package/src/programmers/json/JsonStringifyProgrammer.ts +964 -964
  144. package/src/programmers/json/JsonValidateParseProgrammer.ts +68 -68
  145. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +84 -84
  146. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  147. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +68 -68
  148. package/src/programmers/misc/MiscCloneProgrammer.ts +774 -774
  149. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  150. package/src/programmers/misc/MiscIsPruneProgrammer.ts +73 -73
  151. package/src/programmers/misc/MiscLiteralsProgrammer.ts +69 -69
  152. package/src/programmers/misc/MiscPruneProgrammer.ts +550 -550
  153. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  154. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +78 -78
  155. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -75
  156. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +66 -66
  157. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +655 -655
  158. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +883 -883
  159. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +85 -85
  160. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +76 -76
  161. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +165 -165
  162. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  163. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +86 -86
  164. package/src/protobuf.ts +881 -881
  165. package/src/schemas/json/IJsonApplication.ts +8 -8
  166. package/src/schemas/json/IJsonComponents.ts +33 -33
  167. package/src/schemas/json/IJsonSchema.ts +110 -110
  168. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  169. package/src/schemas/metadata/IMetadata.ts +34 -34
  170. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  171. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  172. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  173. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  174. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  175. package/src/schemas/metadata/IMetadataCollection.ts +11 -11
  176. package/src/schemas/metadata/IMetadataConstant.ts +16 -16
  177. package/src/schemas/metadata/IMetadataDictionary.ts +14 -14
  178. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  179. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  180. package/src/schemas/metadata/IMetadataObject.ts +18 -18
  181. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  182. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  183. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  184. package/src/schemas/metadata/IMetadataTypeTag.ts +8 -8
  185. package/src/schemas/metadata/Metadata.ts +685 -685
  186. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  187. package/src/schemas/metadata/MetadataArray.ts +49 -49
  188. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  189. package/src/schemas/metadata/MetadataAtomic.ts +42 -42
  190. package/src/schemas/metadata/MetadataConstant.ts +3 -3
  191. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  192. package/src/schemas/metadata/MetadataObject.ts +139 -139
  193. package/src/schemas/metadata/MetadataProperty.ts +59 -59
  194. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  195. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  196. package/src/tags/ExclusiveMaximum.ts +13 -13
  197. package/src/tags/ExclusiveMinimum.ts +13 -13
  198. package/src/tags/Format.ts +30 -30
  199. package/src/tags/MaxItems.ts +9 -9
  200. package/src/tags/MaxLength.ts +9 -9
  201. package/src/tags/Maximum.ts +13 -13
  202. package/src/tags/MinItems.ts +9 -9
  203. package/src/tags/MinLength.ts +9 -9
  204. package/src/tags/Minimum.ts +13 -13
  205. package/src/tags/MultipleOf.ts +15 -15
  206. package/src/tags/Pattern.ts +8 -8
  207. package/src/tags/TagBase.ts +68 -68
  208. package/src/tags/Type.ts +27 -27
  209. package/src/tags/index.ts +13 -13
  210. package/src/transform.ts +35 -35
  211. package/src/transformers/CallExpressionTransformer.ts +243 -243
  212. package/src/transformers/FileTransformer.ts +57 -57
  213. package/src/transformers/IProject.ts +15 -15
  214. package/src/transformers/ITransformOptions.ts +62 -62
  215. package/src/transformers/ImportTransformer.ts +66 -66
  216. package/src/transformers/NodeTransformer.ts +13 -13
  217. package/src/transformers/TransformerError.ts +55 -55
  218. package/src/transformers/features/AssertTransformer.ts +11 -11
  219. package/src/transformers/features/CreateAssertTransformer.ts +13 -13
  220. package/src/transformers/features/CreateIsTransformer.ts +11 -11
  221. package/src/transformers/features/CreateRandomTransformer.ts +43 -43
  222. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  223. package/src/transformers/features/IsTransformer.ts +11 -11
  224. package/src/transformers/features/RandomTransformer.ts +46 -46
  225. package/src/transformers/features/ValidateTransformer.ts +11 -11
  226. package/src/transformers/features/json/JsonApplicationTransformer.ts +118 -118
  227. package/src/transformers/features/json/JsonAssertParseTransformer.ts +10 -10
  228. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  229. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +10 -10
  230. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  231. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  232. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +10 -10
  233. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  234. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +10 -10
  235. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  236. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  237. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +10 -10
  238. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  239. package/src/transformers/features/json/JsonValidateParseTransformer.ts +10 -10
  240. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  241. package/src/transformers/features/misc/MetadataTransformer.ts +61 -61
  242. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +10 -10
  243. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +10 -10
  244. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  245. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +10 -10
  246. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +10 -10
  247. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  248. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  249. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  250. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  251. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +10 -10
  252. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +10 -10
  253. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  254. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  255. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  256. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  257. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +10 -10
  258. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +10 -10
  259. package/src/transformers/features/protobuf/CreateProtobufAssertDecodeTransformer.ts +12 -12
  260. package/src/transformers/features/protobuf/CreateProtobufAssertEncodeTransformer.ts +12 -12
  261. package/src/transformers/features/protobuf/CreateProtobufDecodeTransformer.ts +9 -9
  262. package/src/transformers/features/protobuf/CreateProtobufEncodeTransformer.ts +9 -9
  263. package/src/transformers/features/protobuf/CreateProtobufIsDecodeTransformer.ts +12 -12
  264. package/src/transformers/features/protobuf/CreateProtobufIsEncodeTransformer.ts +12 -12
  265. package/src/transformers/features/protobuf/CreateProtobufValidateDecodeTransformer.ts +12 -12
  266. package/src/transformers/features/protobuf/CreateProtobufValidateEncodeTransformer.ts +12 -12
  267. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  268. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  269. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +10 -10
  270. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +10 -10
  271. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +10 -10
  272. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +10 -10
  273. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  274. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +12 -12
  275. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +12 -12
  276. package/src/transformers/internal/GenericTransformer.ts +104 -104
  277. package/src/typings/Atomic.ts +18 -18
  278. package/src/typings/ClassProperties.ts +5 -5
  279. package/src/typings/Customizable.ts +5 -5
  280. package/src/typings/OmitNever.ts +3 -3
  281. package/src/typings/ProtobufAtomic.ts +19 -19
  282. package/src/typings/SpecialFields.ts +3 -3
  283. package/src/typings/ValidationPipe.ts +9 -9
  284. package/src/typings/Writable.ts +11 -11
  285. package/src/utils/ArrayUtil.ts +45 -45
  286. package/src/utils/Escaper.ts +46 -46
  287. package/src/utils/MapUtil.ts +12 -12
  288. package/src/utils/NameEncoder.ts +32 -32
  289. package/src/utils/PatternUtil.ts +33 -33
  290. package/src/utils/RandomGenerator.ts +83 -83
  291. package/src/utils/Singleton.ts +17 -17
@@ -1,33 +1,33 @@
1
- import ts from "typescript";
2
-
3
- import { ProtobufAtomic } from "../typings/ProtobufAtomic";
4
-
5
- import { ExpressionFactory } from "./ExpressionFactory";
6
-
7
- export namespace NumericRangeFactory {
8
- export const number =
9
- (context: ts.TransformationContext) =>
10
- (type: ProtobufAtomic.Numeric) =>
11
- (input: ts.Expression): ts.Expression =>
12
- ExpressionFactory.transpile(context)(NUMBER_TEXT[type])(input);
13
-
14
- export const bigint =
15
- (context: ts.TransformationContext) =>
16
- (type: ProtobufAtomic.BigNumeric) =>
17
- (input: ts.Expression): ts.Expression =>
18
- ExpressionFactory.transpile(context)(BIGINT_TEXT[type])(input);
19
- }
20
-
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
- };
1
+ import ts from "typescript";
2
+
3
+ import { ProtobufAtomic } from "../typings/ProtobufAtomic";
4
+
5
+ import { ExpressionFactory } from "./ExpressionFactory";
6
+
7
+ export namespace NumericRangeFactory {
8
+ export const number =
9
+ (context: ts.TransformationContext) =>
10
+ (type: ProtobufAtomic.Numeric) =>
11
+ (input: ts.Expression): ts.Expression =>
12
+ ExpressionFactory.transpile(context)(NUMBER_TEXT[type])(input);
13
+
14
+ export const bigint =
15
+ (context: ts.TransformationContext) =>
16
+ (type: ProtobufAtomic.BigNumeric) =>
17
+ (input: ts.Expression): ts.Expression =>
18
+ ExpressionFactory.transpile(context)(BIGINT_TEXT[type])(input);
19
+ }
20
+
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
+ };
@@ -1,272 +1,272 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../schemas/metadata/Metadata";
4
- import { MetadataObject } from "../schemas/metadata/MetadataObject";
5
-
6
- import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
7
-
8
- import { TransformerError } from "../transformers/TransformerError";
9
-
10
- import { ValidationPipe } from "../typings/ValidationPipe";
11
-
12
- import { Escaper } from "../utils/Escaper";
13
-
14
- import { MetadataCollection } from "./MetadataCollection";
15
- import { MetadataFactory } from "./MetadataFactory";
16
-
17
- export namespace ProtobufFactory {
18
- export const metadata =
19
- (method: string) =>
20
- (checker: ts.TypeChecker) =>
21
- (collection: MetadataCollection) =>
22
- (type: ts.Type): Metadata => {
23
- // COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
24
- const result: ValidationPipe<Metadata, MetadataFactory.IError> =
25
- MetadataFactory.analyze(checker)({
26
- escape: false,
27
- constant: true,
28
- absorb: true,
29
- validate,
30
- })(collection)(type);
31
- if (result.success === false)
32
- throw TransformerError.from(`typia.protobuf.${method}`)(
33
- result.errors,
34
- );
35
- return result.data;
36
- };
37
-
38
- const validate = (
39
- meta: Metadata,
40
- explore: MetadataFactory.IExplore,
41
- ): string[] => {
42
- const errors: string[] = [];
43
- const insert = (msg: string) => errors.push(msg);
44
-
45
- if (explore.top === true) {
46
- const onlyObject: boolean =
47
- meta.size() === 1 &&
48
- meta.objects.length === 1 &&
49
- meta.objects[0]!.properties.every((p) =>
50
- p.key.isSoleLiteral(),
51
- ) &&
52
- meta.isRequired() === true &&
53
- meta.nullable === false;
54
- if (onlyObject === false)
55
- insert("target type must be a sole and static object type");
56
- }
57
-
58
- //----
59
- // NOT SUPPORTED TYPES
60
- //----
61
- const noSupport = (msg: string) => insert(`does not support ${msg}`);
62
-
63
- // PROHIBIT ANY TYPE
64
- if (meta.any) noSupport("any type");
65
- // PROHIBIT FUNCTIONAL TYPE
66
- if (meta.functional) noSupport("functional type");
67
- // PROHIBIT TUPLE TYPE
68
- if (meta.tuples.length) noSupport("tuple type");
69
- // PROHIBIT SET TYPE
70
- if (meta.sets.length) noSupport("Set type");
71
- // NATIVE TYPE, BUT NOT Uint8Array
72
- if (meta.natives.length)
73
- for (const native of meta.natives) {
74
- if (native === "Uint8Array") continue;
75
-
76
- const instead = BANNED_NATIVE_TYPES.get(native);
77
- if (instead === undefined) noSupport(`${native} type`);
78
- else noSupport(`${native} type. Use ${instead} type instead.`);
79
- }
80
- //----
81
- // ATOMIC CASES
82
- //----
83
- if (meta.atomics.length) {
84
- const numbers = ProtobufUtil.getNumbers(meta);
85
- const bigints = ProtobufUtil.getBigints(meta);
86
-
87
- for (const type of ["int64", "uint64"])
88
- if (
89
- numbers.some((n) => n === type) &&
90
- bigints.some((b) => b === type)
91
- )
92
- insert(
93
- `tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
94
- );
95
- }
96
- //----
97
- // ARRRAY CASES
98
- //----
99
- // DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
100
- if (
101
- meta.arrays.length &&
102
- meta.arrays.some((array) => !!array.type.value.arrays.length)
103
- )
104
- noSupport("over two dimenstional array type");
105
- // CHILD OF ARRAY TYPE MUST BE REQUIRED
106
- if (
107
- meta.arrays.length &&
108
- meta.arrays.some(
109
- (array) =>
110
- array.type.value.isRequired() === false ||
111
- array.type.value.nullable === true,
112
- )
113
- )
114
- noSupport("optional type in array");
115
- // UNION IN ARRAY
116
- if (
117
- meta.arrays.length &&
118
- meta.arrays.some((a) => a.type.value.size() > 1)
119
- )
120
- noSupport("union type in array");
121
- // DO DYNAMIC OBJECT IN ARRAY
122
- if (
123
- meta.arrays.length &&
124
- meta.arrays.some(
125
- (a) =>
126
- a.type.value.maps.length ||
127
- (a.type.value.objects.length &&
128
- a.type.value.objects.some(
129
- (o) => ProtobufUtil.isStaticObject(o) === false,
130
- )),
131
- )
132
- )
133
- noSupport("dynamic object in array");
134
- // UNION WITH ARRAY
135
- if (meta.size() > 1 && meta.arrays.length)
136
- noSupport("union type with array type");
137
- //----
138
- // OBJECT CASES
139
- //----
140
- // EMPTY PROPERTY
141
- if (
142
- meta.objects.length &&
143
- meta.objects.some((obj) => obj.properties.length === 0)
144
- )
145
- noSupport("empty object type");
146
- // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
147
- if (
148
- meta.objects.length &&
149
- meta.objects.some(
150
- (obj) =>
151
- obj.properties.filter((p) => !p.key.isSoleLiteral())
152
- .length > 1,
153
- )
154
- )
155
- noSupport(
156
- "object type with multiple dynamic key typed properties. Keep only one.",
157
- );
158
- // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
159
- if (
160
- meta.objects.length &&
161
- meta.objects.some(
162
- (obj) =>
163
- obj.properties.some((p) => p.key.isSoleLiteral()) &&
164
- obj.properties.some((p) => !p.key.isSoleLiteral()),
165
- )
166
- )
167
- noSupport(
168
- "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
169
- );
170
- // STATIC PROPERTY, BUT INVALID KEY NAME
171
- if (
172
- meta.objects.length &&
173
- meta.objects.some((obj) =>
174
- obj.properties.some(
175
- (p) =>
176
- p.key.isSoleLiteral() === true &&
177
- Escaper.variable(p.key.getSoleLiteral()!) === false,
178
- ),
179
- )
180
- )
181
- noSupport(`object type with invalid static key name.`);
182
- // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
183
- if (
184
- meta.objects.length &&
185
- isDynamicObject(meta.objects[0]!) &&
186
- meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
187
- )
188
- noSupport("dynamic object with array value type");
189
- // UNION WITH DYNAMIC OBJECT
190
- if (
191
- meta.size() > 1 &&
192
- meta.objects.length &&
193
- isDynamicObject(meta.objects[0]!)
194
- )
195
- noSupport("union type with dynamic object type");
196
- // UNION IN DYNAMIC PROPERTY VALUE
197
- if (
198
- meta.objects.length &&
199
- meta.objects.some(
200
- (obj) =>
201
- isDynamicObject(obj) &&
202
- obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
203
- )
204
- )
205
- noSupport("union type in dynamic property");
206
- //----
207
- // MAP CASES
208
- //----
209
- // KEY TYPE IS UNION
210
- if (
211
- meta.maps.length &&
212
- meta.maps.some((m) => ProtobufUtil.isUnion(m.key))
213
- )
214
- noSupport("union key typed map");
215
- // KEY TYPE IS NOT ATOMIC
216
- if (
217
- meta.maps.length &&
218
- meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
219
- )
220
- noSupport("non-atomic key typed map");
221
- // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
222
- if (
223
- meta.maps.length &&
224
- meta.maps.some(
225
- (m) => m.key.isRequired() === false || m.key.nullable,
226
- )
227
- )
228
- noSupport("optional key typed map");
229
- // MAP TYPE, BUT VALUE TYPE IS ARRAY
230
- if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
231
- noSupport("map type with array value type");
232
- // UNION WITH MAP
233
- if (meta.size() > 1 && meta.maps.length)
234
- noSupport("union type with map type");
235
- // UNION IN MAP
236
- if (
237
- meta.maps.length &&
238
- meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
239
- )
240
- noSupport("union type in map value type");
241
- return errors;
242
- };
243
- }
244
-
245
- const isDynamicObject = (obj: MetadataObject): boolean =>
246
- obj.properties[0]!.key.isSoleLiteral() === false;
247
-
248
- const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
249
- ["Date", "string"],
250
- ["Boolean", "boolean"],
251
- ["BigInt", "bigint"],
252
- ["Number", "number"],
253
- ["String", "string"],
254
- ...[
255
- "Buffer",
256
- "Uint8ClampedArray",
257
- "Uint16Array",
258
- "Uint32Array",
259
- "BigUint64Array",
260
- "Int8Array",
261
- "Int16Array",
262
- "Int32Array",
263
- "BigInt64Array",
264
- "Float32Array",
265
- "Float64Array",
266
- "DataView",
267
- "ArrayBuffer",
268
- "SharedArrayBuffer",
269
- ].map((name) => [name, "Uint8Array"] as const),
270
- ["WeakSet", "Array"],
271
- ["WeakMap", "Map"],
272
- ]);
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../schemas/metadata/Metadata";
4
+ import { MetadataObject } from "../schemas/metadata/MetadataObject";
5
+
6
+ import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
7
+
8
+ import { TransformerError } from "../transformers/TransformerError";
9
+
10
+ import { ValidationPipe } from "../typings/ValidationPipe";
11
+
12
+ import { Escaper } from "../utils/Escaper";
13
+
14
+ import { MetadataCollection } from "./MetadataCollection";
15
+ import { MetadataFactory } from "./MetadataFactory";
16
+
17
+ export namespace ProtobufFactory {
18
+ export const metadata =
19
+ (method: string) =>
20
+ (checker: ts.TypeChecker) =>
21
+ (collection: MetadataCollection) =>
22
+ (type: ts.Type): Metadata => {
23
+ // COMPOSE METADATA WITH INDIVIDUAL VALIDATIONS
24
+ const result: ValidationPipe<Metadata, MetadataFactory.IError> =
25
+ MetadataFactory.analyze(checker)({
26
+ escape: false,
27
+ constant: true,
28
+ absorb: true,
29
+ validate,
30
+ })(collection)(type);
31
+ if (result.success === false)
32
+ throw TransformerError.from(`typia.protobuf.${method}`)(
33
+ result.errors,
34
+ );
35
+ return result.data;
36
+ };
37
+
38
+ const validate = (
39
+ meta: Metadata,
40
+ explore: MetadataFactory.IExplore,
41
+ ): string[] => {
42
+ const errors: string[] = [];
43
+ const insert = (msg: string) => errors.push(msg);
44
+
45
+ if (explore.top === true) {
46
+ const onlyObject: boolean =
47
+ meta.size() === 1 &&
48
+ meta.objects.length === 1 &&
49
+ meta.objects[0]!.properties.every((p) =>
50
+ p.key.isSoleLiteral(),
51
+ ) &&
52
+ meta.isRequired() === true &&
53
+ meta.nullable === false;
54
+ if (onlyObject === false)
55
+ insert("target type must be a sole and static object type");
56
+ }
57
+
58
+ //----
59
+ // NOT SUPPORTED TYPES
60
+ //----
61
+ const noSupport = (msg: string) => insert(`does not support ${msg}`);
62
+
63
+ // PROHIBIT ANY TYPE
64
+ if (meta.any) noSupport("any type");
65
+ // PROHIBIT FUNCTIONAL TYPE
66
+ if (meta.functional) noSupport("functional type");
67
+ // PROHIBIT TUPLE TYPE
68
+ if (meta.tuples.length) noSupport("tuple type");
69
+ // PROHIBIT SET TYPE
70
+ if (meta.sets.length) noSupport("Set type");
71
+ // NATIVE TYPE, BUT NOT Uint8Array
72
+ if (meta.natives.length)
73
+ for (const native of meta.natives) {
74
+ if (native === "Uint8Array") continue;
75
+
76
+ const instead = BANNED_NATIVE_TYPES.get(native);
77
+ if (instead === undefined) noSupport(`${native} type`);
78
+ else noSupport(`${native} type. Use ${instead} type instead.`);
79
+ }
80
+ //----
81
+ // ATOMIC CASES
82
+ //----
83
+ if (meta.atomics.length) {
84
+ const numbers = ProtobufUtil.getNumbers(meta);
85
+ const bigints = ProtobufUtil.getBigints(meta);
86
+
87
+ for (const type of ["int64", "uint64"])
88
+ if (
89
+ numbers.some((n) => n === type) &&
90
+ bigints.some((b) => b === type)
91
+ )
92
+ insert(
93
+ `tags.Type<"${type}"> cannot be used in both number and bigint types. Recommend to remove from number type`,
94
+ );
95
+ }
96
+ //----
97
+ // ARRRAY CASES
98
+ //----
99
+ // DO NOT ALLOW MULTI-DIMENTIONAL ARRAY
100
+ if (
101
+ meta.arrays.length &&
102
+ meta.arrays.some((array) => !!array.type.value.arrays.length)
103
+ )
104
+ noSupport("over two dimenstional array type");
105
+ // CHILD OF ARRAY TYPE MUST BE REQUIRED
106
+ if (
107
+ meta.arrays.length &&
108
+ meta.arrays.some(
109
+ (array) =>
110
+ array.type.value.isRequired() === false ||
111
+ array.type.value.nullable === true,
112
+ )
113
+ )
114
+ noSupport("optional type in array");
115
+ // UNION IN ARRAY
116
+ if (
117
+ meta.arrays.length &&
118
+ meta.arrays.some((a) => a.type.value.size() > 1)
119
+ )
120
+ noSupport("union type in array");
121
+ // DO DYNAMIC OBJECT IN ARRAY
122
+ if (
123
+ meta.arrays.length &&
124
+ meta.arrays.some(
125
+ (a) =>
126
+ a.type.value.maps.length ||
127
+ (a.type.value.objects.length &&
128
+ a.type.value.objects.some(
129
+ (o) => ProtobufUtil.isStaticObject(o) === false,
130
+ )),
131
+ )
132
+ )
133
+ noSupport("dynamic object in array");
134
+ // UNION WITH ARRAY
135
+ if (meta.size() > 1 && meta.arrays.length)
136
+ noSupport("union type with array type");
137
+ //----
138
+ // OBJECT CASES
139
+ //----
140
+ // EMPTY PROPERTY
141
+ if (
142
+ meta.objects.length &&
143
+ meta.objects.some((obj) => obj.properties.length === 0)
144
+ )
145
+ noSupport("empty object type");
146
+ // MULTIPLE DYNAMIC KEY TYPED PROPERTIES
147
+ if (
148
+ meta.objects.length &&
149
+ meta.objects.some(
150
+ (obj) =>
151
+ obj.properties.filter((p) => !p.key.isSoleLiteral())
152
+ .length > 1,
153
+ )
154
+ )
155
+ noSupport(
156
+ "object type with multiple dynamic key typed properties. Keep only one.",
157
+ );
158
+ // STATIC AND DYNAMIC PROPERTIES ARE COMPATIBLE
159
+ if (
160
+ meta.objects.length &&
161
+ meta.objects.some(
162
+ (obj) =>
163
+ obj.properties.some((p) => p.key.isSoleLiteral()) &&
164
+ obj.properties.some((p) => !p.key.isSoleLiteral()),
165
+ )
166
+ )
167
+ noSupport(
168
+ "object type with mixed static and dynamic key typed properties. Keep statics or dynamic only.",
169
+ );
170
+ // STATIC PROPERTY, BUT INVALID KEY NAME
171
+ if (
172
+ meta.objects.length &&
173
+ meta.objects.some((obj) =>
174
+ obj.properties.some(
175
+ (p) =>
176
+ p.key.isSoleLiteral() === true &&
177
+ Escaper.variable(p.key.getSoleLiteral()!) === false,
178
+ ),
179
+ )
180
+ )
181
+ noSupport(`object type with invalid static key name.`);
182
+ // DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
183
+ if (
184
+ meta.objects.length &&
185
+ isDynamicObject(meta.objects[0]!) &&
186
+ meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
187
+ )
188
+ noSupport("dynamic object with array value type");
189
+ // UNION WITH DYNAMIC OBJECT
190
+ if (
191
+ meta.size() > 1 &&
192
+ meta.objects.length &&
193
+ isDynamicObject(meta.objects[0]!)
194
+ )
195
+ noSupport("union type with dynamic object type");
196
+ // UNION IN DYNAMIC PROPERTY VALUE
197
+ if (
198
+ meta.objects.length &&
199
+ meta.objects.some(
200
+ (obj) =>
201
+ isDynamicObject(obj) &&
202
+ obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
203
+ )
204
+ )
205
+ noSupport("union type in dynamic property");
206
+ //----
207
+ // MAP CASES
208
+ //----
209
+ // KEY TYPE IS UNION
210
+ if (
211
+ meta.maps.length &&
212
+ meta.maps.some((m) => ProtobufUtil.isUnion(m.key))
213
+ )
214
+ noSupport("union key typed map");
215
+ // KEY TYPE IS NOT ATOMIC
216
+ if (
217
+ meta.maps.length &&
218
+ meta.maps.some((m) => ProtobufUtil.getAtomics(m.key).length !== 1)
219
+ )
220
+ noSupport("non-atomic key typed map");
221
+ // MAP TYPE, BUT PROPERTY KEY TYPE IS OPTIONAL
222
+ if (
223
+ meta.maps.length &&
224
+ meta.maps.some(
225
+ (m) => m.key.isRequired() === false || m.key.nullable,
226
+ )
227
+ )
228
+ noSupport("optional key typed map");
229
+ // MAP TYPE, BUT VALUE TYPE IS ARRAY
230
+ if (meta.maps.length && meta.maps.some((m) => !!m.value.arrays.length))
231
+ noSupport("map type with array value type");
232
+ // UNION WITH MAP
233
+ if (meta.size() > 1 && meta.maps.length)
234
+ noSupport("union type with map type");
235
+ // UNION IN MAP
236
+ if (
237
+ meta.maps.length &&
238
+ meta.maps.some((m) => ProtobufUtil.isUnion(m.value))
239
+ )
240
+ noSupport("union type in map value type");
241
+ return errors;
242
+ };
243
+ }
244
+
245
+ const isDynamicObject = (obj: MetadataObject): boolean =>
246
+ obj.properties[0]!.key.isSoleLiteral() === false;
247
+
248
+ const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
249
+ ["Date", "string"],
250
+ ["Boolean", "boolean"],
251
+ ["BigInt", "bigint"],
252
+ ["Number", "number"],
253
+ ["String", "string"],
254
+ ...[
255
+ "Buffer",
256
+ "Uint8ClampedArray",
257
+ "Uint16Array",
258
+ "Uint32Array",
259
+ "BigUint64Array",
260
+ "Int8Array",
261
+ "Int16Array",
262
+ "Int32Array",
263
+ "BigInt64Array",
264
+ "Float32Array",
265
+ "Float64Array",
266
+ "DataView",
267
+ "ArrayBuffer",
268
+ "SharedArrayBuffer",
269
+ ].map((name) => [name, "Uint8Array"] as const),
270
+ ["WeakSet", "Array"],
271
+ ["WeakMap", "Map"],
272
+ ]);