typia 5.3.12-dev.20240121 → 5.3.12

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 (360) hide show
  1. package/package.json +1 -1
  2. package/src/AssertionGuard.ts +1 -1
  3. package/src/CamelCase.ts +114 -114
  4. package/src/IRandomGenerator.ts +35 -35
  5. package/src/IValidation.ts +21 -21
  6. package/src/PascalCase.ts +114 -114
  7. package/src/Primitive.ts +135 -135
  8. package/src/Resolved.ts +116 -116
  9. package/src/SnakeCase.ts +156 -156
  10. package/src/TypeGuardError.ts +36 -36
  11. package/src/executable/TypiaGenerateWizard.ts +83 -83
  12. package/src/executable/TypiaPatchWizard.ts +42 -42
  13. package/src/executable/TypiaSetupWizard.ts +151 -151
  14. package/src/executable/setup/ArgumentParser.ts +43 -43
  15. package/src/executable/setup/CommandExecutor.ts +8 -8
  16. package/src/executable/setup/FileRetriever.ts +22 -22
  17. package/src/executable/setup/PackageManager.ts +71 -71
  18. package/src/executable/setup/PluginConfigurator.ts +69 -69
  19. package/src/executable/typia.ts +55 -55
  20. package/src/factories/CommentFactory.ts +79 -79
  21. package/src/factories/ExpressionFactory.ts +150 -150
  22. package/src/factories/IdentifierFactory.ts +70 -70
  23. package/src/factories/JsonMetadataFactory.ts +53 -53
  24. package/src/factories/LiteralFactory.ts +47 -47
  25. package/src/factories/MetadataCollection.ts +260 -260
  26. package/src/factories/MetadataCommentTagFactory.ts +601 -601
  27. package/src/factories/MetadataFactory.ts +267 -267
  28. package/src/factories/MetadataTypeTagFactory.ts +313 -313
  29. package/src/factories/NumericRangeFactory.ts +72 -72
  30. package/src/factories/ProtobufFactory.ts +259 -259
  31. package/src/factories/StatementFactory.ts +72 -72
  32. package/src/factories/TemplateFactory.ts +56 -56
  33. package/src/factories/TypeFactory.ts +118 -118
  34. package/src/factories/ValueFactory.ts +12 -12
  35. package/src/factories/internal/metadata/MetadataHelper.ts +15 -15
  36. package/src/factories/internal/metadata/emend_metadata_atomics.ts +37 -37
  37. package/src/factories/internal/metadata/emplace_metadata_alias.ts +41 -41
  38. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +38 -38
  39. package/src/factories/internal/metadata/emplace_metadata_object.ts +175 -175
  40. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +57 -57
  41. package/src/factories/internal/metadata/explore_metadata.ts +28 -28
  42. package/src/factories/internal/metadata/iterate_metadata.ts +94 -94
  43. package/src/factories/internal/metadata/iterate_metadata_alias.ts +34 -34
  44. package/src/factories/internal/metadata/iterate_metadata_array.ts +37 -37
  45. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  46. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  47. package/src/factories/internal/metadata/iterate_metadata_collection.ts +131 -131
  48. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +26 -26
  49. package/src/factories/internal/metadata/iterate_metadata_constant.ts +48 -48
  50. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +230 -230
  51. package/src/factories/internal/metadata/iterate_metadata_map.ts +50 -50
  52. package/src/factories/internal/metadata/iterate_metadata_native.ts +208 -208
  53. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  54. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +52 -52
  55. package/src/factories/internal/metadata/iterate_metadata_set.ts +41 -41
  56. package/src/factories/internal/metadata/iterate_metadata_sort.ts +61 -61
  57. package/src/factories/internal/metadata/iterate_metadata_template.ts +44 -44
  58. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +37 -37
  59. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -27
  60. package/src/functional/$HeadersReader/$HeadersReader.ts +26 -26
  61. package/src/functional/$HeadersReader/index.ts +1 -1
  62. package/src/functional/$ParameterReader/$ParameterReader.ts +29 -29
  63. package/src/functional/$ParameterReader/index.ts +1 -1
  64. package/src/functional/$ProtobufReader.ts +195 -195
  65. package/src/functional/$ProtobufSizer.ts +147 -147
  66. package/src/functional/$ProtobufWriter.ts +150 -150
  67. package/src/functional/$QueryReader/$QueryReader.ts +46 -46
  68. package/src/functional/$QueryReader/index.ts +1 -1
  69. package/src/functional/$any.ts +4 -4
  70. package/src/functional/$clone.ts +4 -4
  71. package/src/functional/$convention.ts +37 -37
  72. package/src/functional/$dictionary.ts +22 -22
  73. package/src/functional/$every.ts +11 -11
  74. package/src/functional/$guard.ts +35 -35
  75. package/src/functional/$is_between.ts +2 -2
  76. package/src/functional/$join.ts +46 -46
  77. package/src/functional/$number.ts +12 -12
  78. package/src/functional/$report.ts +13 -13
  79. package/src/functional/$rest.ts +3 -3
  80. package/src/functional/$stoll.ts +8 -8
  81. package/src/functional/$string.ts +50 -50
  82. package/src/functional/$strlen.ts +7 -7
  83. package/src/functional/$tail.ts +5 -5
  84. package/src/functional/$throws.ts +10 -10
  85. package/src/functional/$varint.ts +130 -130
  86. package/src/functional/$zigzag.ts +39 -39
  87. package/src/functional/IProtobufWriter.ts +18 -18
  88. package/src/functional/Namespace/http.ts +7 -7
  89. package/src/functional/Namespace/index.ts +75 -75
  90. package/src/functional/Namespace/json.ts +15 -15
  91. package/src/functional/Namespace/misc.ts +14 -14
  92. package/src/functional/Namespace/notations.ts +23 -23
  93. package/src/functional/Namespace/protobuf.ts +20 -20
  94. package/src/functional/is.ts +10 -10
  95. package/src/http.ts +1267 -1267
  96. package/src/index.ts +4 -4
  97. package/src/notations.ts +977 -977
  98. package/src/programmers/AssertProgrammer.ts +293 -293
  99. package/src/programmers/CheckerProgrammer.ts +1025 -1025
  100. package/src/programmers/FeatureProgrammer.ts +460 -460
  101. package/src/programmers/IsProgrammer.ts +232 -232
  102. package/src/programmers/RandomProgrammer.ts +825 -825
  103. package/src/programmers/TypiaProgrammer.ts +167 -167
  104. package/src/programmers/ValidateProgrammer.ts +307 -307
  105. package/src/programmers/helpers/AtomicPredicator.ts +25 -25
  106. package/src/programmers/helpers/CloneJoiner.ts +130 -130
  107. package/src/programmers/helpers/FunctionImporeter.ts +87 -87
  108. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  109. package/src/programmers/helpers/ICheckEntry.ts +13 -13
  110. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  111. package/src/programmers/helpers/NotationJoiner.ts +132 -132
  112. package/src/programmers/helpers/OptionPredicator.ts +15 -15
  113. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  114. package/src/programmers/helpers/ProtobufWire.ts +34 -34
  115. package/src/programmers/helpers/PruneJoiner.ts +141 -141
  116. package/src/programmers/helpers/RandomJoiner.ts +140 -140
  117. package/src/programmers/helpers/RandomRanger.ts +171 -171
  118. package/src/programmers/helpers/StringifyJoinder.ts +105 -105
  119. package/src/programmers/helpers/StringifyPredicator.ts +12 -12
  120. package/src/programmers/helpers/UnionExplorer.ts +269 -269
  121. package/src/programmers/helpers/UnionPredicator.ts +77 -77
  122. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -32
  123. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +77 -77
  124. package/src/programmers/http/HttpAssertQueryProgrammer.ts +75 -75
  125. package/src/programmers/http/HttpHeadersProgrammer.ts +314 -314
  126. package/src/programmers/http/HttpIsHeadersProgrammer.ts +84 -84
  127. package/src/programmers/http/HttpIsQueryProgrammer.ts +82 -82
  128. package/src/programmers/http/HttpParameterProgrammer.ts +97 -97
  129. package/src/programmers/http/HttpQueryProgrammer.ts +252 -252
  130. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +77 -77
  131. package/src/programmers/http/HttpValidateQueryProgrammer.ts +75 -75
  132. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  133. package/src/programmers/internal/application_alias.ts +74 -74
  134. package/src/programmers/internal/application_array.ts +59 -59
  135. package/src/programmers/internal/application_boolean.ts +35 -35
  136. package/src/programmers/internal/application_constant.ts +25 -25
  137. package/src/programmers/internal/application_default.ts +17 -17
  138. package/src/programmers/internal/application_default_string.ts +33 -33
  139. package/src/programmers/internal/application_escaped.ts +52 -52
  140. package/src/programmers/internal/application_native.ts +34 -34
  141. package/src/programmers/internal/application_number.ts +97 -97
  142. package/src/programmers/internal/application_object.ts +183 -183
  143. package/src/programmers/internal/application_schema.ts +165 -165
  144. package/src/programmers/internal/application_string.ts +61 -61
  145. package/src/programmers/internal/application_templates.ts +24 -24
  146. package/src/programmers/internal/application_tuple.ts +54 -54
  147. package/src/programmers/internal/check_array_length.ts +45 -45
  148. package/src/programmers/internal/check_bigint.ts +49 -49
  149. package/src/programmers/internal/check_dynamic_key.ts +175 -175
  150. package/src/programmers/internal/check_dynamic_properties.ts +198 -198
  151. package/src/programmers/internal/check_everything.ts +23 -23
  152. package/src/programmers/internal/check_native.ts +21 -21
  153. package/src/programmers/internal/check_number.ts +106 -106
  154. package/src/programmers/internal/check_object.ts +60 -60
  155. package/src/programmers/internal/check_string.ts +48 -48
  156. package/src/programmers/internal/check_template.ts +61 -61
  157. package/src/programmers/internal/check_union_array_like.ts +307 -307
  158. package/src/programmers/internal/decode_union_object.ts +78 -78
  159. package/src/programmers/internal/feature_object_entries.ts +58 -58
  160. package/src/programmers/internal/metadata_to_pattern.ts +33 -33
  161. package/src/programmers/internal/prune_object_properties.ts +60 -60
  162. package/src/programmers/internal/random_custom.ts +37 -37
  163. package/src/programmers/internal/stringify_dynamic_properties.ts +157 -157
  164. package/src/programmers/internal/stringify_native.ts +7 -7
  165. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  166. package/src/programmers/internal/template_to_pattern.ts +15 -15
  167. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +20 -20
  168. package/src/programmers/json/JsonApplicationProgrammer.ts +49 -49
  169. package/src/programmers/json/JsonAssertParseProgrammer.ts +67 -67
  170. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +61 -61
  171. package/src/programmers/json/JsonIsParseProgrammer.ts +73 -73
  172. package/src/programmers/json/JsonIsStringifyProgrammer.ts +75 -75
  173. package/src/programmers/json/JsonStringifyProgrammer.ts +893 -893
  174. package/src/programmers/json/JsonValidateParseProgrammer.ts +64 -64
  175. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +83 -83
  176. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +63 -63
  177. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +60 -60
  178. package/src/programmers/misc/MiscCloneProgrammer.ts +713 -713
  179. package/src/programmers/misc/MiscIsCloneProgrammer.ts +70 -70
  180. package/src/programmers/misc/MiscIsPruneProgrammer.ts +66 -66
  181. package/src/programmers/misc/MiscLiteralsProgrammer.ts +72 -72
  182. package/src/programmers/misc/MiscPruneProgrammer.ts +523 -523
  183. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +80 -80
  184. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +73 -73
  185. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +64 -64
  186. package/src/programmers/notations/NotationGeneralProgrammer.ts +647 -647
  187. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +71 -71
  188. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +81 -81
  189. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -75
  190. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +61 -61
  191. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +607 -607
  192. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +819 -819
  193. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +82 -82
  194. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +75 -75
  195. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +160 -160
  196. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  197. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +83 -83
  198. package/src/protobuf.ts +970 -970
  199. package/src/reflect.ts +57 -57
  200. package/src/schemas/json/IJsonApplication.ts +9 -9
  201. package/src/schemas/json/IJsonComponents.ts +19 -19
  202. package/src/schemas/json/IJsonSchema.ts +122 -122
  203. package/src/schemas/metadata/IJsDocTagInfo.ts +10 -10
  204. package/src/schemas/metadata/IMetadata.ts +34 -34
  205. package/src/schemas/metadata/IMetadataAlias.ts +12 -12
  206. package/src/schemas/metadata/IMetadataApplication.ts +7 -7
  207. package/src/schemas/metadata/IMetadataArray.ts +7 -7
  208. package/src/schemas/metadata/IMetadataArrayType.ts +10 -10
  209. package/src/schemas/metadata/IMetadataAtomic.ts +6 -6
  210. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  211. package/src/schemas/metadata/IMetadataConstant.ts +23 -23
  212. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  213. package/src/schemas/metadata/IMetadataEntry.ts +6 -6
  214. package/src/schemas/metadata/IMetadataEscaped.ts +6 -6
  215. package/src/schemas/metadata/IMetadataObject.ts +13 -13
  216. package/src/schemas/metadata/IMetadataProperty.ts +9 -9
  217. package/src/schemas/metadata/IMetadataTuple.ts +7 -7
  218. package/src/schemas/metadata/IMetadataTupleType.ts +10 -10
  219. package/src/schemas/metadata/IMetadataTypeTag.ts +15 -15
  220. package/src/schemas/metadata/Metadata.ts +612 -612
  221. package/src/schemas/metadata/MetadataAlias.ts +61 -61
  222. package/src/schemas/metadata/MetadataApplication.ts +44 -44
  223. package/src/schemas/metadata/MetadataArray.ts +49 -49
  224. package/src/schemas/metadata/MetadataArrayType.ts +57 -57
  225. package/src/schemas/metadata/MetadataAtomic.ts +84 -84
  226. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  227. package/src/schemas/metadata/MetadataConstant.ts +46 -46
  228. package/src/schemas/metadata/MetadataEscaped.ts +51 -51
  229. package/src/schemas/metadata/MetadataObject.ts +154 -154
  230. package/src/schemas/metadata/MetadataProperty.ts +56 -56
  231. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  232. package/src/schemas/metadata/MetadataTupleType.ts +67 -67
  233. package/src/tags/Default.ts +15 -15
  234. package/src/tags/ExclusiveMaximum.ts +13 -13
  235. package/src/tags/ExclusiveMinimum.ts +13 -13
  236. package/src/tags/Format.ts +30 -30
  237. package/src/tags/MaxItems.ts +9 -9
  238. package/src/tags/MaxLength.ts +9 -9
  239. package/src/tags/Maximum.ts +13 -13
  240. package/src/tags/MinItems.ts +9 -9
  241. package/src/tags/MinLength.ts +9 -9
  242. package/src/tags/Minimum.ts +13 -13
  243. package/src/tags/MultipleOf.ts +15 -15
  244. package/src/tags/Pattern.ts +9 -9
  245. package/src/tags/TagBase.ts +68 -68
  246. package/src/tags/Type.ts +27 -27
  247. package/src/tags/index.ts +14 -14
  248. package/src/transform.ts +35 -35
  249. package/src/transformers/CallExpressionTransformer.ts +351 -351
  250. package/src/transformers/FileTransformer.ts +91 -91
  251. package/src/transformers/IProject.ts +15 -15
  252. package/src/transformers/ITransformOptions.ts +62 -62
  253. package/src/transformers/ImportTransformer.ts +66 -66
  254. package/src/transformers/NodeTransformer.ts +13 -13
  255. package/src/transformers/TransformerError.ts +55 -55
  256. package/src/transformers/features/AssertTransformer.ts +16 -16
  257. package/src/transformers/features/CreateAssertTransformer.ts +16 -16
  258. package/src/transformers/features/CreateIsTransformer.ts +10 -10
  259. package/src/transformers/features/CreateRandomTransformer.ts +40 -40
  260. package/src/transformers/features/CreateValidateTransformer.ts +13 -13
  261. package/src/transformers/features/IsTransformer.ts +10 -10
  262. package/src/transformers/features/RandomTransformer.ts +44 -44
  263. package/src/transformers/features/ValidateTransformer.ts +11 -11
  264. package/src/transformers/features/http/CreateHttpAssertHeadersTransformer.ts +11 -11
  265. package/src/transformers/features/http/CreateHttpAssertQueryTransformer.ts +9 -9
  266. package/src/transformers/features/http/CreateHttpHeadersTransformer.ts +9 -9
  267. package/src/transformers/features/http/CreateHttpIsHeadersTransformer.ts +9 -9
  268. package/src/transformers/features/http/CreateHttpIsQueryTransformer.ts +9 -9
  269. package/src/transformers/features/http/CreateHttpParameterTransformer.ts +9 -9
  270. package/src/transformers/features/http/CreateHttpQueryTransformer.ts +9 -9
  271. package/src/transformers/features/http/CreateHttpValidateHeadersTransformer.ts +12 -12
  272. package/src/transformers/features/http/CreateHttpValidateQueryTransformer.ts +11 -11
  273. package/src/transformers/features/http/HttpAssertHeadersTransformer.ts +9 -9
  274. package/src/transformers/features/http/HttpAssertQueryTransformer.ts +9 -9
  275. package/src/transformers/features/http/HttpHeadersTransformer.ts +9 -9
  276. package/src/transformers/features/http/HttpIsHeadersTransformer.ts +9 -9
  277. package/src/transformers/features/http/HttpIsQueryTransformer.ts +9 -9
  278. package/src/transformers/features/http/HttpParameterTransformer.ts +9 -9
  279. package/src/transformers/features/http/HttpQueryTransformer.ts +9 -9
  280. package/src/transformers/features/http/HttpValidateHeadersTransformer.ts +10 -10
  281. package/src/transformers/features/http/HttpValidateQueryTransformer.ts +9 -9
  282. package/src/transformers/features/json/JsonApplicationTransformer.ts +134 -134
  283. package/src/transformers/features/json/JsonAssertParseTransformer.ts +9 -9
  284. package/src/transformers/features/json/JsonAssertStringifyTransformer.ts +10 -10
  285. package/src/transformers/features/json/JsonCreateAssertParseTransformer.ts +9 -9
  286. package/src/transformers/features/json/JsonCreateAssertStringifyTransformer.ts +12 -12
  287. package/src/transformers/features/json/JsonCreateIsParseTransformer.ts +9 -9
  288. package/src/transformers/features/json/JsonCreateIsStringifyTransformer.ts +9 -9
  289. package/src/transformers/features/json/JsonCreateStringifyTransformer.ts +9 -9
  290. package/src/transformers/features/json/JsonCreateValidateParseTransformer.ts +11 -11
  291. package/src/transformers/features/json/JsonCreateValidateStringifyProgrammer.ts +12 -12
  292. package/src/transformers/features/json/JsonIsParseTransformer.ts +9 -9
  293. package/src/transformers/features/json/JsonIsStringifyTransformer.ts +9 -9
  294. package/src/transformers/features/json/JsonStringifyTransformer.ts +9 -9
  295. package/src/transformers/features/json/JsonValidateParseTransformer.ts +9 -9
  296. package/src/transformers/features/json/JsonValidateStringifyTransformer.ts +10 -10
  297. package/src/transformers/features/misc/MiscAssertCloneTransformer.ts +9 -9
  298. package/src/transformers/features/misc/MiscAssertPruneTransformer.ts +9 -9
  299. package/src/transformers/features/misc/MiscCloneTransformer.ts +9 -9
  300. package/src/transformers/features/misc/MiscCreateAssertCloneTransformer.ts +9 -9
  301. package/src/transformers/features/misc/MiscCreateAssertPruneTransformer.ts +9 -9
  302. package/src/transformers/features/misc/MiscCreateCloneTransformer.ts +9 -9
  303. package/src/transformers/features/misc/MiscCreateIsCloneTransformer.ts +9 -9
  304. package/src/transformers/features/misc/MiscCreateIsPruneTransformer.ts +9 -9
  305. package/src/transformers/features/misc/MiscCreatePruneTransformer.ts +9 -9
  306. package/src/transformers/features/misc/MiscCreateValidateCloneTransformer.ts +11 -11
  307. package/src/transformers/features/misc/MiscCreateValidatePruneTransformer.ts +11 -11
  308. package/src/transformers/features/misc/MiscIsCloneTransformer.ts +9 -9
  309. package/src/transformers/features/misc/MiscIsPruneTransformer.ts +9 -9
  310. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -32
  311. package/src/transformers/features/misc/MiscPruneTransformer.ts +9 -9
  312. package/src/transformers/features/misc/MiscValidateCloneTransformer.ts +9 -9
  313. package/src/transformers/features/misc/MiscValidatePruneTransformer.ts +9 -9
  314. package/src/transformers/features/notations/NotationAssertGeneralTransformer.ts +15 -15
  315. package/src/transformers/features/notations/NotationCreateAssertGeneralTransformer.ts +15 -15
  316. package/src/transformers/features/notations/NotationCreateGeneralTransformer.ts +15 -15
  317. package/src/transformers/features/notations/NotationCreateIsGeneralTransformer.ts +15 -15
  318. package/src/transformers/features/notations/NotationCreateValidateGeneralTransformer.ts +15 -15
  319. package/src/transformers/features/notations/NotationGeneralTransformer.ts +11 -11
  320. package/src/transformers/features/notations/NotationIsGeneralTransformer.ts +15 -15
  321. package/src/transformers/features/notations/NotationValidateGeneralTransformer.ts +15 -15
  322. package/src/transformers/features/protobuf/ProtobufAssertDecodeTransformer.ts +10 -10
  323. package/src/transformers/features/protobuf/ProtobufAssertEncodeTransformer.ts +10 -10
  324. package/src/transformers/features/protobuf/ProtobufCreateAssertDecodeTransformer.ts +12 -12
  325. package/src/transformers/features/protobuf/ProtobufCreateAssertEncodeTransformer.ts +12 -12
  326. package/src/transformers/features/protobuf/ProtobufCreateDecodeTransformer.ts +9 -9
  327. package/src/transformers/features/protobuf/ProtobufCreateEncodeTransformer.ts +9 -9
  328. package/src/transformers/features/protobuf/ProtobufCreateIsDecodeTransformer.ts +9 -9
  329. package/src/transformers/features/protobuf/ProtobufCreateIsEncodeTransformer.ts +9 -9
  330. package/src/transformers/features/protobuf/ProtobufCreateValidateDecodeTransformer.ts +12 -12
  331. package/src/transformers/features/protobuf/ProtobufCreateValidateEncodeTransformer.ts +12 -12
  332. package/src/transformers/features/protobuf/ProtobufDecodeTransformer.ts +9 -9
  333. package/src/transformers/features/protobuf/ProtobufEncodeTransformer.ts +9 -9
  334. package/src/transformers/features/protobuf/ProtobufIsDecodeTransformer.ts +9 -9
  335. package/src/transformers/features/protobuf/ProtobufIsEncodeTransformer.ts +9 -9
  336. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -33
  337. package/src/transformers/features/protobuf/ProtobufValidateDecodeTransformer.ts +10 -10
  338. package/src/transformers/features/protobuf/ProtobufValidateEncodeTransformer.ts +10 -10
  339. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +63 -63
  340. package/src/transformers/internal/GenericTransformer.ts +96 -96
  341. package/src/typings/Atomic.ts +13 -13
  342. package/src/typings/ClassProperties.ts +5 -5
  343. package/src/typings/Customizable.ts +5 -5
  344. package/src/typings/OmitNever.ts +3 -3
  345. package/src/typings/ProtobufAtomic.ts +19 -19
  346. package/src/typings/SpecialFields.ts +3 -3
  347. package/src/typings/ValidationPipe.ts +9 -9
  348. package/src/typings/Writable.ts +11 -11
  349. package/src/utils/ArrayUtil.ts +43 -43
  350. package/src/utils/Escaper.ts +46 -46
  351. package/src/utils/MapUtil.ts +12 -12
  352. package/src/utils/NameEncoder.ts +32 -32
  353. package/src/utils/NamingConvention/NamingConvention.ts +77 -77
  354. package/src/utils/NamingConvention/index.ts +1 -1
  355. package/src/utils/PatternUtil.ts +29 -29
  356. package/src/utils/RandomGenerator/RandomGenerator.ts +74 -74
  357. package/src/utils/RandomGenerator/index.ts +1 -1
  358. package/src/utils/Singleton.ts +16 -16
  359. package/src/utils/StringUtil/StringUtil.ts +2 -2
  360. package/src/utils/StringUtil/index.ts +1 -1
@@ -1,150 +1,150 @@
1
- import ts from "typescript";
2
-
3
- import { RandomGenerator } from "../utils/RandomGenerator";
4
-
5
- export namespace ExpressionFactory {
6
- export const number = (value: number) =>
7
- value < 0
8
- ? ts.factory.createPrefixUnaryExpression(
9
- ts.SyntaxKind.MinusToken,
10
- ts.factory.createNumericLiteral(Math.abs(value)),
11
- )
12
- : ts.factory.createNumericLiteral(value);
13
-
14
- export const bigint = (value: number | bigint) =>
15
- ts.factory.createCallExpression(
16
- ts.factory.createIdentifier("BigInt"),
17
- undefined,
18
- [ts.factory.createIdentifier(value.toString())],
19
- );
20
-
21
- export const isRequired = (input: ts.Expression): ts.Expression =>
22
- ts.factory.createStrictInequality(
23
- ts.factory.createIdentifier("undefined"),
24
- input,
25
- );
26
-
27
- export const isArray = (input: ts.Expression): ts.Expression =>
28
- ts.factory.createCallExpression(
29
- ts.factory.createIdentifier("Array.isArray"),
30
- undefined,
31
- [input],
32
- );
33
-
34
- export const isObject =
35
- (options: { checkNull: boolean; checkArray: boolean }) =>
36
- (input: ts.Expression): ts.Expression => {
37
- const conditions: ts.Expression[] = [
38
- ts.factory.createStrictEquality(
39
- ts.factory.createStringLiteral("object"),
40
- ts.factory.createTypeOfExpression(input),
41
- ),
42
- ];
43
- if (options.checkNull === true)
44
- conditions.push(
45
- ts.factory.createStrictInequality(ts.factory.createNull(), input),
46
- );
47
- if (options.checkArray === true)
48
- conditions.push(
49
- ts.factory.createStrictEquality(
50
- ts.factory.createFalse(),
51
- ts.factory.createCallExpression(
52
- ts.factory.createIdentifier("Array.isArray"),
53
- undefined,
54
- [input],
55
- ),
56
- ),
57
- );
58
-
59
- return conditions.length === 1
60
- ? conditions[0]!
61
- : conditions.reduce((x, y) => ts.factory.createLogicalAnd(x, y));
62
- };
63
-
64
- export const isInstanceOf =
65
- (type: string) =>
66
- (input: ts.Expression): ts.Expression => {
67
- return ts.factory.createBinaryExpression(
68
- input,
69
- ts.factory.createToken(ts.SyntaxKind.InstanceOfKeyword),
70
- ts.factory.createIdentifier(type),
71
- );
72
- };
73
-
74
- export const coalesce =
75
- (x: ts.Expression) =>
76
- (y: ts.Expression): ts.Expression =>
77
- ts.factory.createBinaryExpression(
78
- x,
79
- ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
80
- y,
81
- );
82
-
83
- export const currying =
84
- (target: ts.Expression) => (parameters: ts.Expression[]) => {
85
- if (parameters.length === 0)
86
- return ts.factory.createCallExpression(target, undefined, undefined);
87
- let prev: ts.CallExpression = ts.factory.createCallExpression(
88
- target,
89
- undefined,
90
- [parameters[0]!],
91
- );
92
- for (const param of parameters.slice(1))
93
- prev = ts.factory.createCallExpression(prev, undefined, [param]);
94
- return prev;
95
- };
96
-
97
- export const selfCall = (body: ts.ConciseBody) =>
98
- ts.isCallExpression(body)
99
- ? body
100
- : ts.factory.createCallExpression(
101
- ts.factory.createParenthesizedExpression(
102
- ts.factory.createArrowFunction(
103
- undefined,
104
- undefined,
105
- [],
106
- undefined,
107
- undefined,
108
- body,
109
- ),
110
- ),
111
- undefined,
112
- undefined,
113
- );
114
-
115
- export const getEscapedText =
116
- (printer: ts.Printer) =>
117
- (input: ts.Expression): string =>
118
- printer.printNode(ts.EmitHint.Expression, input, input.getSourceFile());
119
-
120
- export const transpile =
121
- (context: ts.TransformationContext) => (script: string) => {
122
- const file: ts.SourceFile = ts.createSourceFile(
123
- `${RandomGenerator.uuid()}.ts`,
124
- script,
125
- ts.ScriptTarget.ESNext,
126
- true,
127
- ts.ScriptKind.TS,
128
- );
129
- const statement: ts.Statement | undefined = file.statements[0];
130
- if (statement === undefined)
131
- throw new ReferenceError(
132
- "Error on ExpressionFactory.transpile(): no statement exists.",
133
- );
134
- else if (!ts.isExpressionStatement(statement))
135
- throw new TypeError(
136
- "Error on ExpressionFactory.transpile(): statement is not an expression statement.",
137
- );
138
- return (input: ts.Expression): ts.Expression => {
139
- const visitor = (node: ts.Node): ts.Node => {
140
- if (ts.isIdentifier(node) && node.text === "$input") return input;
141
- return ts.visitEachChild(
142
- (ts.factory as any).cloneNode(node),
143
- visitor,
144
- context,
145
- );
146
- };
147
- return visitor(statement.expression) as ts.Expression;
148
- };
149
- };
150
- }
1
+ import ts from "typescript";
2
+
3
+ import { RandomGenerator } from "../utils/RandomGenerator";
4
+
5
+ export namespace ExpressionFactory {
6
+ export const number = (value: number) =>
7
+ value < 0
8
+ ? ts.factory.createPrefixUnaryExpression(
9
+ ts.SyntaxKind.MinusToken,
10
+ ts.factory.createNumericLiteral(Math.abs(value)),
11
+ )
12
+ : ts.factory.createNumericLiteral(value);
13
+
14
+ export const bigint = (value: number | bigint) =>
15
+ ts.factory.createCallExpression(
16
+ ts.factory.createIdentifier("BigInt"),
17
+ undefined,
18
+ [ts.factory.createIdentifier(value.toString())],
19
+ );
20
+
21
+ export const isRequired = (input: ts.Expression): ts.Expression =>
22
+ ts.factory.createStrictInequality(
23
+ ts.factory.createIdentifier("undefined"),
24
+ input,
25
+ );
26
+
27
+ export const isArray = (input: ts.Expression): ts.Expression =>
28
+ ts.factory.createCallExpression(
29
+ ts.factory.createIdentifier("Array.isArray"),
30
+ undefined,
31
+ [input],
32
+ );
33
+
34
+ export const isObject =
35
+ (options: { checkNull: boolean; checkArray: boolean }) =>
36
+ (input: ts.Expression): ts.Expression => {
37
+ const conditions: ts.Expression[] = [
38
+ ts.factory.createStrictEquality(
39
+ ts.factory.createStringLiteral("object"),
40
+ ts.factory.createTypeOfExpression(input),
41
+ ),
42
+ ];
43
+ if (options.checkNull === true)
44
+ conditions.push(
45
+ ts.factory.createStrictInequality(ts.factory.createNull(), input),
46
+ );
47
+ if (options.checkArray === true)
48
+ conditions.push(
49
+ ts.factory.createStrictEquality(
50
+ ts.factory.createFalse(),
51
+ ts.factory.createCallExpression(
52
+ ts.factory.createIdentifier("Array.isArray"),
53
+ undefined,
54
+ [input],
55
+ ),
56
+ ),
57
+ );
58
+
59
+ return conditions.length === 1
60
+ ? conditions[0]!
61
+ : conditions.reduce((x, y) => ts.factory.createLogicalAnd(x, y));
62
+ };
63
+
64
+ export const isInstanceOf =
65
+ (type: string) =>
66
+ (input: ts.Expression): ts.Expression => {
67
+ return ts.factory.createBinaryExpression(
68
+ input,
69
+ ts.factory.createToken(ts.SyntaxKind.InstanceOfKeyword),
70
+ ts.factory.createIdentifier(type),
71
+ );
72
+ };
73
+
74
+ export const coalesce =
75
+ (x: ts.Expression) =>
76
+ (y: ts.Expression): ts.Expression =>
77
+ ts.factory.createBinaryExpression(
78
+ x,
79
+ ts.factory.createToken(ts.SyntaxKind.QuestionQuestionToken),
80
+ y,
81
+ );
82
+
83
+ export const currying =
84
+ (target: ts.Expression) => (parameters: ts.Expression[]) => {
85
+ if (parameters.length === 0)
86
+ return ts.factory.createCallExpression(target, undefined, undefined);
87
+ let prev: ts.CallExpression = ts.factory.createCallExpression(
88
+ target,
89
+ undefined,
90
+ [parameters[0]!],
91
+ );
92
+ for (const param of parameters.slice(1))
93
+ prev = ts.factory.createCallExpression(prev, undefined, [param]);
94
+ return prev;
95
+ };
96
+
97
+ export const selfCall = (body: ts.ConciseBody) =>
98
+ ts.isCallExpression(body)
99
+ ? body
100
+ : ts.factory.createCallExpression(
101
+ ts.factory.createParenthesizedExpression(
102
+ ts.factory.createArrowFunction(
103
+ undefined,
104
+ undefined,
105
+ [],
106
+ undefined,
107
+ undefined,
108
+ body,
109
+ ),
110
+ ),
111
+ undefined,
112
+ undefined,
113
+ );
114
+
115
+ export const getEscapedText =
116
+ (printer: ts.Printer) =>
117
+ (input: ts.Expression): string =>
118
+ printer.printNode(ts.EmitHint.Expression, input, input.getSourceFile());
119
+
120
+ export const transpile =
121
+ (context: ts.TransformationContext) => (script: string) => {
122
+ const file: ts.SourceFile = ts.createSourceFile(
123
+ `${RandomGenerator.uuid()}.ts`,
124
+ script,
125
+ ts.ScriptTarget.ESNext,
126
+ true,
127
+ ts.ScriptKind.TS,
128
+ );
129
+ const statement: ts.Statement | undefined = file.statements[0];
130
+ if (statement === undefined)
131
+ throw new ReferenceError(
132
+ "Error on ExpressionFactory.transpile(): no statement exists.",
133
+ );
134
+ else if (!ts.isExpressionStatement(statement))
135
+ throw new TypeError(
136
+ "Error on ExpressionFactory.transpile(): statement is not an expression statement.",
137
+ );
138
+ return (input: ts.Expression): ts.Expression => {
139
+ const visitor = (node: ts.Node): ts.Node => {
140
+ if (ts.isIdentifier(node) && node.text === "$input") return input;
141
+ return ts.visitEachChild(
142
+ (ts.factory as any).cloneNode(node),
143
+ visitor,
144
+ context,
145
+ );
146
+ };
147
+ return visitor(statement.expression) as ts.Expression;
148
+ };
149
+ };
150
+ }
@@ -1,70 +1,70 @@
1
- import ts from "typescript";
2
-
3
- import { Escaper } from "../utils/Escaper";
4
-
5
- import { TypeFactory } from "./TypeFactory";
6
-
7
- export namespace IdentifierFactory {
8
- export const identifier = (name: string) =>
9
- Escaper.variable(name)
10
- ? ts.factory.createIdentifier(name)
11
- : ts.factory.createStringLiteral(name);
12
-
13
- export const access = (target: ts.Expression) => (property: string) => {
14
- const postfix = identifier(property);
15
- return ts.isStringLiteral(postfix)
16
- ? ts.factory.createElementAccessExpression(target, postfix)
17
- : ts.factory.createPropertyAccessExpression(target, postfix);
18
- };
19
-
20
- export const getName = (input: ts.Expression): string => {
21
- const value: any = (input as any).escapedText?.toString();
22
- if (typeof value === "string") return value;
23
-
24
- if (ts.isPropertyAccessExpression(input))
25
- return `${getName(
26
- input.expression,
27
- )}.${input.name.escapedText.toString()}`;
28
- else if (ts.isElementAccessExpression(input))
29
- return `${getName(input.expression)}[${getName(
30
- input.argumentExpression,
31
- )}]`;
32
- return "uknown";
33
- };
34
-
35
- export const postfix = (str: string): string =>
36
- Escaper.variable(str)
37
- ? `".${str}"`
38
- : `"[${JSON.stringify(str).split('"').join('\\"')}]"`;
39
-
40
- export const parameter = (
41
- name: string | ts.BindingName,
42
- type?: ts.TypeNode,
43
- init?: ts.Expression | ts.PunctuationToken<ts.SyntaxKind.QuestionToken>,
44
- ) => {
45
- // instead of ts.version >= "4.8"
46
- if (ts.getDecorators !== undefined)
47
- return ts.factory.createParameterDeclaration(
48
- undefined,
49
- undefined,
50
- name,
51
- init?.kind === ts.SyntaxKind.QuestionToken
52
- ? ts.factory.createToken(ts.SyntaxKind.QuestionToken)
53
- : undefined,
54
- type ?? TypeFactory.keyword("any"),
55
- init && init.kind !== ts.SyntaxKind.QuestionToken ? init : undefined,
56
- );
57
- // eslint-disable-next-line
58
- return (ts.factory.createParameterDeclaration as any)(
59
- undefined,
60
- undefined,
61
- undefined,
62
- name,
63
- init?.kind === ts.SyntaxKind.QuestionToken
64
- ? ts.factory.createToken(ts.SyntaxKind.QuestionToken)
65
- : undefined,
66
- type,
67
- init && init.kind !== ts.SyntaxKind.QuestionToken ? init : undefined,
68
- );
69
- };
70
- }
1
+ import ts from "typescript";
2
+
3
+ import { Escaper } from "../utils/Escaper";
4
+
5
+ import { TypeFactory } from "./TypeFactory";
6
+
7
+ export namespace IdentifierFactory {
8
+ export const identifier = (name: string) =>
9
+ Escaper.variable(name)
10
+ ? ts.factory.createIdentifier(name)
11
+ : ts.factory.createStringLiteral(name);
12
+
13
+ export const access = (target: ts.Expression) => (property: string) => {
14
+ const postfix = identifier(property);
15
+ return ts.isStringLiteral(postfix)
16
+ ? ts.factory.createElementAccessExpression(target, postfix)
17
+ : ts.factory.createPropertyAccessExpression(target, postfix);
18
+ };
19
+
20
+ export const getName = (input: ts.Expression): string => {
21
+ const value: any = (input as any).escapedText?.toString();
22
+ if (typeof value === "string") return value;
23
+
24
+ if (ts.isPropertyAccessExpression(input))
25
+ return `${getName(
26
+ input.expression,
27
+ )}.${input.name.escapedText.toString()}`;
28
+ else if (ts.isElementAccessExpression(input))
29
+ return `${getName(input.expression)}[${getName(
30
+ input.argumentExpression,
31
+ )}]`;
32
+ return "uknown";
33
+ };
34
+
35
+ export const postfix = (str: string): string =>
36
+ Escaper.variable(str)
37
+ ? `".${str}"`
38
+ : `"[${JSON.stringify(str).split('"').join('\\"')}]"`;
39
+
40
+ export const parameter = (
41
+ name: string | ts.BindingName,
42
+ type?: ts.TypeNode,
43
+ init?: ts.Expression | ts.PunctuationToken<ts.SyntaxKind.QuestionToken>,
44
+ ) => {
45
+ // instead of ts.version >= "4.8"
46
+ if (ts.getDecorators !== undefined)
47
+ return ts.factory.createParameterDeclaration(
48
+ undefined,
49
+ undefined,
50
+ name,
51
+ init?.kind === ts.SyntaxKind.QuestionToken
52
+ ? ts.factory.createToken(ts.SyntaxKind.QuestionToken)
53
+ : undefined,
54
+ type ?? TypeFactory.keyword("any"),
55
+ init && init.kind !== ts.SyntaxKind.QuestionToken ? init : undefined,
56
+ );
57
+ // eslint-disable-next-line
58
+ return (ts.factory.createParameterDeclaration as any)(
59
+ undefined,
60
+ undefined,
61
+ undefined,
62
+ name,
63
+ init?.kind === ts.SyntaxKind.QuestionToken
64
+ ? ts.factory.createToken(ts.SyntaxKind.QuestionToken)
65
+ : undefined,
66
+ type,
67
+ init && init.kind !== ts.SyntaxKind.QuestionToken ? init : undefined,
68
+ );
69
+ };
70
+ }
@@ -1,53 +1,53 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../schemas/metadata/Metadata";
4
-
5
- import { AtomicPredicator } from "../programmers/helpers/AtomicPredicator";
6
-
7
- import { TransformerError } from "../transformers/TransformerError";
8
-
9
- import { MetadataCollection } from "./MetadataCollection";
10
- import { MetadataFactory } from "./MetadataFactory";
11
-
12
- export namespace JsonMetadataFactory {
13
- export const analyze =
14
- (method: string) =>
15
- (checker: ts.TypeChecker, context?: ts.TransformationContext) =>
16
- (type: ts.Type): [MetadataCollection, Metadata] => {
17
- const collection = new MetadataCollection();
18
- const result = MetadataFactory.analyze(
19
- checker,
20
- context,
21
- )({
22
- escape: true,
23
- constant: true,
24
- absorb: true,
25
- validate,
26
- })(collection)(type);
27
- if (result.success === false)
28
- throw TransformerError.from(method)(result.errors);
29
- return [collection, result.data];
30
- };
31
-
32
- export const validate = (meta: Metadata) => {
33
- const output: string[] = [];
34
- if (
35
- meta.atomics.some((a) => a.type === "bigint") ||
36
- meta.constants.some((c) => c.type === "bigint")
37
- )
38
- output.push("JSON does not support bigint type.");
39
- if (
40
- meta.tuples.some((t) =>
41
- t.type.elements.some((e) => e.isRequired() === false),
42
- ) ||
43
- meta.arrays.some((a) => a.type.value.isRequired() === false)
44
- )
45
- output.push("JSON does not support undefined type in array.");
46
- if (meta.maps.length) output.push("JSON does not support Map type.");
47
- if (meta.sets.length) output.push("JSON does not support Set type.");
48
- for (const native of meta.natives)
49
- if (AtomicPredicator.native(native) === false && native !== "Date")
50
- output.push(`JSON does not support ${native} type.`);
51
- return output;
52
- };
53
- }
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../schemas/metadata/Metadata";
4
+
5
+ import { AtomicPredicator } from "../programmers/helpers/AtomicPredicator";
6
+
7
+ import { TransformerError } from "../transformers/TransformerError";
8
+
9
+ import { MetadataCollection } from "./MetadataCollection";
10
+ import { MetadataFactory } from "./MetadataFactory";
11
+
12
+ export namespace JsonMetadataFactory {
13
+ export const analyze =
14
+ (method: string) =>
15
+ (checker: ts.TypeChecker, context?: ts.TransformationContext) =>
16
+ (type: ts.Type): [MetadataCollection, Metadata] => {
17
+ const collection = new MetadataCollection();
18
+ const result = MetadataFactory.analyze(
19
+ checker,
20
+ context,
21
+ )({
22
+ escape: true,
23
+ constant: true,
24
+ absorb: true,
25
+ validate,
26
+ })(collection)(type);
27
+ if (result.success === false)
28
+ throw TransformerError.from(method)(result.errors);
29
+ return [collection, result.data];
30
+ };
31
+
32
+ export const validate = (meta: Metadata) => {
33
+ const output: string[] = [];
34
+ if (
35
+ meta.atomics.some((a) => a.type === "bigint") ||
36
+ meta.constants.some((c) => c.type === "bigint")
37
+ )
38
+ output.push("JSON does not support bigint type.");
39
+ if (
40
+ meta.tuples.some((t) =>
41
+ t.type.elements.some((e) => e.isRequired() === false),
42
+ ) ||
43
+ meta.arrays.some((a) => a.type.value.isRequired() === false)
44
+ )
45
+ output.push("JSON does not support undefined type in array.");
46
+ if (meta.maps.length) output.push("JSON does not support Map type.");
47
+ if (meta.sets.length) output.push("JSON does not support Set type.");
48
+ for (const native of meta.natives)
49
+ if (AtomicPredicator.native(native) === false && native !== "Date")
50
+ output.push(`JSON does not support ${native} type.`);
51
+ return output;
52
+ };
53
+ }
@@ -1,47 +1,47 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "./ExpressionFactory";
4
- import { IdentifierFactory } from "./IdentifierFactory";
5
-
6
- export namespace LiteralFactory {
7
- export const generate = (input: any): ts.Expression => {
8
- if (input === null) return ts.factory.createNull();
9
- else if (ts.isIdentifier(input)) return input;
10
- else if (input instanceof Array) return generate_array(input);
11
- else if (typeof input === "object") return generate_object(input);
12
- else if (typeof input === "string") return generate_string(input);
13
- else if (typeof input === "boolean") return generate_value(input);
14
- else if (typeof input === "number") return generate_value(input);
15
- else if (typeof input === "bigint") return generate_bigint(input);
16
- // unreachable code
17
- else if (typeof input === "function")
18
- return ts.factory.createIdentifier("undefined");
19
- else
20
- throw new TypeError("Error on LiteralFactory.generate(): unknown type.");
21
- };
22
-
23
- const generate_object = (obj: object): ts.ObjectLiteralExpression =>
24
- ts.factory.createObjectLiteralExpression(
25
- Object.entries(obj)
26
- .filter((tuple) => tuple[1] !== undefined)
27
- .map(([key, value]) =>
28
- ts.factory.createPropertyAssignment(
29
- IdentifierFactory.identifier(key),
30
- generate(value),
31
- ),
32
- ),
33
- true,
34
- );
35
-
36
- const generate_array = (array: any[]): ts.ArrayLiteralExpression =>
37
- ts.factory.createArrayLiteralExpression(array.map(generate), true);
38
-
39
- const generate_value = (value: number | boolean | bigint): ts.Expression =>
40
- ts.factory.createIdentifier(value.toString());
41
-
42
- const generate_bigint = (value: bigint): ts.Expression =>
43
- ExpressionFactory.bigint(value);
44
-
45
- const generate_string = (value: string): ts.StringLiteral =>
46
- ts.factory.createStringLiteral(value);
47
- }
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "./ExpressionFactory";
4
+ import { IdentifierFactory } from "./IdentifierFactory";
5
+
6
+ export namespace LiteralFactory {
7
+ export const generate = (input: any): ts.Expression => {
8
+ if (input === null) return ts.factory.createNull();
9
+ else if (ts.isIdentifier(input)) return input;
10
+ else if (input instanceof Array) return generate_array(input);
11
+ else if (typeof input === "object") return generate_object(input);
12
+ else if (typeof input === "string") return generate_string(input);
13
+ else if (typeof input === "boolean") return generate_value(input);
14
+ else if (typeof input === "number") return generate_value(input);
15
+ else if (typeof input === "bigint") return generate_bigint(input);
16
+ // unreachable code
17
+ else if (typeof input === "function")
18
+ return ts.factory.createIdentifier("undefined");
19
+ else
20
+ throw new TypeError("Error on LiteralFactory.generate(): unknown type.");
21
+ };
22
+
23
+ const generate_object = (obj: object): ts.ObjectLiteralExpression =>
24
+ ts.factory.createObjectLiteralExpression(
25
+ Object.entries(obj)
26
+ .filter((tuple) => tuple[1] !== undefined)
27
+ .map(([key, value]) =>
28
+ ts.factory.createPropertyAssignment(
29
+ IdentifierFactory.identifier(key),
30
+ generate(value),
31
+ ),
32
+ ),
33
+ true,
34
+ );
35
+
36
+ const generate_array = (array: any[]): ts.ArrayLiteralExpression =>
37
+ ts.factory.createArrayLiteralExpression(array.map(generate), true);
38
+
39
+ const generate_value = (value: number | boolean | bigint): ts.Expression =>
40
+ ts.factory.createIdentifier(value.toString());
41
+
42
+ const generate_bigint = (value: bigint): ts.Expression =>
43
+ ExpressionFactory.bigint(value);
44
+
45
+ const generate_string = (value: string): ts.StringLiteral =>
46
+ ts.factory.createStringLiteral(value);
47
+ }