typia 3.3.12 → 3.4.0-dev.20221212

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 (422) hide show
  1. package/README.md +169 -403
  2. package/lib/IValidation.d.ts +10 -4
  3. package/lib/Primitive.d.ts +45 -0
  4. package/lib/Primitive.js +3 -0
  5. package/lib/Primitive.js.map +1 -0
  6. package/lib/executable/internal/TypiaSetupWizard.d.ts +4 -0
  7. package/lib/executable/internal/TypiaSetupWizard.js +200 -0
  8. package/lib/executable/internal/TypiaSetupWizard.js.map +1 -0
  9. package/lib/executable/typia.d.ts +1 -0
  10. package/lib/executable/typia.js +98 -0
  11. package/lib/executable/typia.js.map +1 -0
  12. package/lib/factories/CommentFactory.js +1 -1
  13. package/lib/factories/CommentFactory.js.map +1 -1
  14. package/lib/factories/ExpressionFactory.d.ts +1 -0
  15. package/lib/factories/ExpressionFactory.js +4 -0
  16. package/lib/factories/ExpressionFactory.js.map +1 -1
  17. package/lib/factories/IdentifierFactory.d.ts +1 -1
  18. package/lib/factories/IdentifierFactory.js +4 -2
  19. package/lib/factories/IdentifierFactory.js.map +1 -1
  20. package/lib/factories/MetadataCollection.d.ts +2 -1
  21. package/lib/factories/MetadataCollection.js +24 -5
  22. package/lib/factories/MetadataCollection.js.map +1 -1
  23. package/lib/factories/MetadataTagFactory.js +1 -1
  24. package/lib/factories/MetadataTagFactory.js.map +1 -1
  25. package/lib/factories/StatementFactory.d.ts +1 -3
  26. package/lib/factories/StatementFactory.js +3 -13
  27. package/lib/factories/StatementFactory.js.map +1 -1
  28. package/lib/factories/TemplateFactory.js +4 -0
  29. package/lib/factories/TemplateFactory.js.map +1 -1
  30. package/lib/factories/TypeFactory.d.ts +2 -1
  31. package/lib/factories/TypeFactory.js +14 -7
  32. package/lib/factories/TypeFactory.js.map +1 -1
  33. package/lib/factories/internal/explore_metadata.js +1 -1
  34. package/lib/factories/internal/explore_metadata.js.map +1 -1
  35. package/lib/factories/internal/iterate_metadata.js +12 -3
  36. package/lib/factories/internal/iterate_metadata.js.map +1 -1
  37. package/lib/factories/internal/iterate_metadata_array.js +2 -3
  38. package/lib/factories/internal/iterate_metadata_array.js.map +1 -1
  39. package/lib/factories/internal/iterate_metadata_atomic.js +30 -55
  40. package/lib/factories/internal/iterate_metadata_atomic.js.map +1 -1
  41. package/lib/factories/internal/iterate_metadata_coalesce.js +2 -3
  42. package/lib/factories/internal/iterate_metadata_coalesce.js.map +1 -1
  43. package/lib/factories/internal/iterate_metadata_map.d.ts +5 -0
  44. package/lib/factories/internal/iterate_metadata_map.js +30 -0
  45. package/lib/factories/internal/iterate_metadata_map.js.map +1 -0
  46. package/lib/factories/internal/iterate_metadata_native.d.ts +3 -0
  47. package/lib/factories/internal/iterate_metadata_native.js +230 -0
  48. package/lib/factories/internal/iterate_metadata_native.js.map +1 -0
  49. package/lib/factories/internal/iterate_metadata_set.d.ts +5 -0
  50. package/lib/factories/internal/iterate_metadata_set.js +26 -0
  51. package/lib/factories/internal/iterate_metadata_set.js.map +1 -0
  52. package/lib/factories/internal/iterate_metadata_tuple.d.ts +1 -1
  53. package/lib/factories/internal/iterate_metadata_tuple.js +25 -3
  54. package/lib/factories/internal/iterate_metadata_tuple.js.map +1 -1
  55. package/lib/functional/$every.d.ts +2 -0
  56. package/lib/functional/$every.js +12 -0
  57. package/lib/functional/$every.js.map +1 -0
  58. package/lib/functional/$guard.d.ts +1 -0
  59. package/lib/functional/$guard.js +18 -0
  60. package/lib/functional/$guard.js.map +1 -0
  61. package/lib/functional/$number.js +4 -4
  62. package/lib/functional/$number.js.map +1 -1
  63. package/lib/functional/$report.d.ts +2 -0
  64. package/lib/functional/$report.js +18 -0
  65. package/lib/functional/$report.js.map +1 -0
  66. package/lib/functional/$rest.d.ts +1 -0
  67. package/lib/functional/$rest.js +8 -0
  68. package/lib/functional/$rest.js.map +1 -0
  69. package/lib/index.d.ts +2 -2
  70. package/lib/index.js +2 -2
  71. package/lib/index.js.map +1 -1
  72. package/lib/metadata/IMetadata.d.ts +5 -0
  73. package/lib/metadata/IMetadataApplication.d.ts +6 -0
  74. package/lib/metadata/IMetadataApplication.js +3 -0
  75. package/lib/metadata/IMetadataApplication.js.map +1 -0
  76. package/lib/metadata/IMetadataConstant.d.ts +1 -1
  77. package/lib/metadata/IMetadataEntry.d.ts +5 -0
  78. package/lib/metadata/IMetadataEntry.js +3 -0
  79. package/lib/metadata/IMetadataEntry.js.map +1 -0
  80. package/lib/metadata/IMetadataTag.d.ts +1 -1
  81. package/lib/metadata/Metadata.d.ts +10 -0
  82. package/lib/metadata/Metadata.js +156 -59
  83. package/lib/metadata/Metadata.js.map +1 -1
  84. package/lib/metadata/MetadataObject.d.ts +0 -1
  85. package/lib/metadata/MetadataObject.js +10 -0
  86. package/lib/metadata/MetadataObject.js.map +1 -1
  87. package/lib/module.d.ts +603 -72
  88. package/lib/module.js +185 -23
  89. package/lib/module.js.map +1 -1
  90. package/lib/programmers/ApplicationProgrammer.js +2 -2
  91. package/lib/programmers/ApplicationProgrammer.js.map +1 -1
  92. package/lib/programmers/AssertParseProgrammer.d.ts +5 -0
  93. package/lib/programmers/AssertParseProgrammer.js +23 -0
  94. package/lib/programmers/AssertParseProgrammer.js.map +1 -0
  95. package/lib/programmers/AssertProgrammer.d.ts +1 -1
  96. package/lib/programmers/AssertProgrammer.js +133 -58
  97. package/lib/programmers/AssertProgrammer.js.map +1 -1
  98. package/lib/programmers/AssertStringifyProgrammer.d.ts +5 -0
  99. package/lib/programmers/AssertStringifyProgrammer.js +26 -0
  100. package/lib/programmers/AssertStringifyProgrammer.js.map +1 -0
  101. package/lib/programmers/CheckerProgrammer.d.ts +17 -7
  102. package/lib/programmers/CheckerProgrammer.js +284 -79
  103. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  104. package/lib/programmers/FeatureProgrammer.d.ts +14 -9
  105. package/lib/programmers/FeatureProgrammer.js +76 -116
  106. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  107. package/lib/programmers/IsParseProgrammer.d.ts +5 -0
  108. package/lib/programmers/IsParseProgrammer.js +23 -0
  109. package/lib/programmers/IsParseProgrammer.js.map +1 -0
  110. package/lib/programmers/IsProgrammer.d.ts +5 -4
  111. package/lib/programmers/IsProgrammer.js +69 -44
  112. package/lib/programmers/IsProgrammer.js.map +1 -1
  113. package/lib/programmers/IsStringifyProgrammer.d.ts +5 -0
  114. package/lib/programmers/IsStringifyProgrammer.js +24 -0
  115. package/lib/programmers/IsStringifyProgrammer.js.map +1 -0
  116. package/lib/programmers/StringifyProgrammer.js +118 -47
  117. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  118. package/lib/programmers/ValidateParseProgrammer.d.ts +5 -0
  119. package/lib/programmers/ValidateParseProgrammer.js +24 -0
  120. package/lib/programmers/ValidateParseProgrammer.js.map +1 -0
  121. package/lib/programmers/ValidateProgrammer.d.ts +1 -1
  122. package/lib/programmers/ValidateProgrammer.js +124 -68
  123. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  124. package/lib/programmers/ValidateStringifyProgrammer.d.ts +5 -0
  125. package/lib/programmers/ValidateStringifyProgrammer.js +26 -0
  126. package/lib/programmers/ValidateStringifyProgrammer.js.map +1 -0
  127. package/lib/programmers/helpers/AtomicPredicator.d.ts +6 -0
  128. package/lib/programmers/helpers/AtomicPredicator.js +16 -0
  129. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -0
  130. package/lib/programmers/helpers/FunctionImporeter.js +1 -1
  131. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  132. package/lib/programmers/helpers/OptionPredicator.d.ts +1 -1
  133. package/lib/programmers/helpers/OptionPredicator.js +7 -7
  134. package/lib/programmers/helpers/OptionPredicator.js.map +1 -1
  135. package/lib/programmers/helpers/StringifyJoinder.d.ts +2 -2
  136. package/lib/programmers/helpers/StringifyJoinder.js +5 -2
  137. package/lib/programmers/helpers/StringifyJoinder.js.map +1 -1
  138. package/lib/programmers/helpers/UnionExplorer.d.ts +33 -4
  139. package/lib/programmers/helpers/UnionExplorer.js +85 -47
  140. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  141. package/lib/programmers/internal/application_array.js +1 -1
  142. package/lib/programmers/internal/application_array.js.map +1 -1
  143. package/lib/programmers/internal/application_default.js +1 -1
  144. package/lib/programmers/internal/application_default.js.map +1 -1
  145. package/lib/programmers/internal/application_native.d.ts +4 -0
  146. package/lib/programmers/internal/application_native.js +35 -0
  147. package/lib/programmers/internal/application_native.js.map +1 -0
  148. package/lib/programmers/internal/application_number.js +6 -2
  149. package/lib/programmers/internal/application_number.js.map +1 -1
  150. package/lib/programmers/internal/application_object.js +44 -31
  151. package/lib/programmers/internal/application_object.js.map +1 -1
  152. package/lib/programmers/internal/application_schema.js +70 -36
  153. package/lib/programmers/internal/application_schema.js.map +1 -1
  154. package/lib/programmers/internal/application_string.js +2 -2
  155. package/lib/programmers/internal/application_string.js.map +1 -1
  156. package/lib/programmers/internal/check_array.js +4 -10
  157. package/lib/programmers/internal/check_array.js.map +1 -1
  158. package/lib/programmers/internal/check_dynamic_properties.js +40 -50
  159. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  160. package/lib/programmers/internal/check_everything.js +1 -3
  161. package/lib/programmers/internal/check_everything.js.map +1 -1
  162. package/lib/programmers/internal/check_length.js +2 -2
  163. package/lib/programmers/internal/check_length.js.map +1 -1
  164. package/lib/programmers/internal/check_native.d.ts +1 -0
  165. package/lib/programmers/internal/check_native.js +9 -0
  166. package/lib/programmers/internal/check_native.js.map +1 -0
  167. package/lib/programmers/internal/check_number.js +1 -1
  168. package/lib/programmers/internal/check_number.js.map +1 -1
  169. package/lib/programmers/internal/check_object.d.ts +12 -1
  170. package/lib/programmers/internal/check_object.js +12 -22
  171. package/lib/programmers/internal/check_object.js.map +1 -1
  172. package/lib/programmers/internal/decode_union_object.js +9 -7
  173. package/lib/programmers/internal/decode_union_object.js.map +1 -1
  174. package/lib/programmers/internal/feature_object_entries.d.ts +9 -0
  175. package/lib/programmers/internal/feature_object_entries.js +38 -0
  176. package/lib/programmers/internal/feature_object_entries.js.map +1 -0
  177. package/lib/programmers/internal/stringify_dynamic_properties.js +4 -2
  178. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  179. package/lib/programmers/internal/stringify_native.d.ts +1 -0
  180. package/lib/programmers/internal/stringify_native.js +12 -0
  181. package/lib/programmers/internal/stringify_native.js.map +1 -0
  182. package/lib/schemas/IJsonComponents.d.ts +1 -1
  183. package/lib/schemas/IJsonSchema.d.ts +10 -8
  184. package/lib/transformers/CallExpressionTransformer.js +47 -10
  185. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  186. package/lib/transformers/FileTransformer.js +1 -1
  187. package/lib/transformers/features/{ApplicationTransformer.d.ts → miscellaneous/ApplicationTransformer.d.ts} +1 -1
  188. package/lib/transformers/features/{ApplicationTransformer.js → miscellaneous/ApplicationTransformer.js} +8 -8
  189. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -0
  190. package/lib/transformers/features/{CreateTransformer.d.ts → miscellaneous/CreateInstanceTransformer.d.ts} +2 -2
  191. package/lib/transformers/features/{CreateTransformer.js → miscellaneous/CreateInstanceTransformer.js} +8 -8
  192. package/lib/transformers/features/miscellaneous/CreateInstanceTransformer.js.map +1 -0
  193. package/lib/transformers/features/miscellaneous/MetadataTransformer.d.ts +5 -0
  194. package/lib/transformers/features/miscellaneous/MetadataTransformer.js +43 -0
  195. package/lib/transformers/features/miscellaneous/MetadataTransformer.js.map +1 -0
  196. package/lib/transformers/features/parsers/AssertParseTransformer.d.ts +5 -0
  197. package/lib/transformers/features/parsers/AssertParseTransformer.js +21 -0
  198. package/lib/transformers/features/parsers/AssertParseTransformer.js.map +1 -0
  199. package/lib/transformers/features/parsers/CreateAssertParseTransformer.d.ts +5 -0
  200. package/lib/transformers/features/parsers/CreateAssertParseTransformer.js +17 -0
  201. package/lib/transformers/features/parsers/CreateAssertParseTransformer.js.map +1 -0
  202. package/lib/transformers/features/parsers/CreateIsParseTransformer.d.ts +5 -0
  203. package/lib/transformers/features/parsers/CreateIsParseTransformer.js +17 -0
  204. package/lib/transformers/features/parsers/CreateIsParseTransformer.js.map +1 -0
  205. package/lib/transformers/features/parsers/CreateValidateParseTransformer.d.ts +5 -0
  206. package/lib/transformers/features/parsers/CreateValidateParseTransformer.js +17 -0
  207. package/lib/transformers/features/parsers/CreateValidateParseTransformer.js.map +1 -0
  208. package/lib/transformers/features/parsers/IsParseTransformer.d.ts +5 -0
  209. package/lib/transformers/features/parsers/IsParseTransformer.js +21 -0
  210. package/lib/transformers/features/parsers/IsParseTransformer.js.map +1 -0
  211. package/lib/transformers/features/parsers/ValidateParseTransformer.d.ts +5 -0
  212. package/lib/transformers/features/parsers/ValidateParseTransformer.js +21 -0
  213. package/lib/transformers/features/parsers/ValidateParseTransformer.js.map +1 -0
  214. package/lib/transformers/features/stringifiers/AssertStringifyTransformer.d.ts +5 -0
  215. package/lib/transformers/features/stringifiers/AssertStringifyTransformer.js +23 -0
  216. package/lib/transformers/features/stringifiers/AssertStringifyTransformer.js.map +1 -0
  217. package/lib/transformers/features/stringifiers/CreateAssertStringifyTransformer.d.ts +5 -0
  218. package/lib/transformers/features/stringifiers/CreateAssertStringifyTransformer.js +17 -0
  219. package/lib/transformers/features/stringifiers/CreateAssertStringifyTransformer.js.map +1 -0
  220. package/lib/transformers/features/stringifiers/CreateIsStringifyTransformer.d.ts +5 -0
  221. package/lib/transformers/features/stringifiers/CreateIsStringifyTransformer.js +17 -0
  222. package/lib/transformers/features/stringifiers/CreateIsStringifyTransformer.js.map +1 -0
  223. package/lib/transformers/features/stringifiers/CreateStringifyTransformer.d.ts +5 -0
  224. package/lib/transformers/features/stringifiers/CreateStringifyTransformer.js +17 -0
  225. package/lib/transformers/features/stringifiers/CreateStringifyTransformer.js.map +1 -0
  226. package/lib/transformers/features/stringifiers/CreateValidateStringifyProgrammer.d.ts +5 -0
  227. package/lib/transformers/features/stringifiers/CreateValidateStringifyProgrammer.js +17 -0
  228. package/lib/transformers/features/stringifiers/CreateValidateStringifyProgrammer.js.map +1 -0
  229. package/lib/transformers/features/stringifiers/IsStringifyTransformer.d.ts +5 -0
  230. package/lib/transformers/features/stringifiers/IsStringifyTransformer.js +23 -0
  231. package/lib/transformers/features/stringifiers/IsStringifyTransformer.js.map +1 -0
  232. package/lib/transformers/features/{StringifyTransformer.d.ts → stringifiers/StringifyTransformer.d.ts} +1 -1
  233. package/lib/transformers/features/{StringifyTransformer.js → stringifiers/StringifyTransformer.js} +3 -3
  234. package/lib/transformers/features/stringifiers/StringifyTransformer.js.map +1 -0
  235. package/lib/transformers/features/stringifiers/ValidateStringifyTransformer.d.ts +5 -0
  236. package/lib/transformers/features/stringifiers/ValidateStringifyTransformer.js +23 -0
  237. package/lib/transformers/features/stringifiers/ValidateStringifyTransformer.js.map +1 -0
  238. package/lib/transformers/features/{AssertTransformer.d.ts → validators/AssertTransformer.d.ts} +1 -1
  239. package/lib/transformers/features/{AssertTransformer.js → validators/AssertTransformer.js} +4 -4
  240. package/lib/transformers/features/validators/AssertTransformer.js.map +1 -0
  241. package/lib/transformers/features/validators/CreateAssertTransformer.d.ts +5 -0
  242. package/lib/transformers/features/validators/CreateAssertTransformer.js +24 -0
  243. package/lib/transformers/features/validators/CreateAssertTransformer.js.map +1 -0
  244. package/lib/transformers/features/validators/CreateIsTransformer.d.ts +5 -0
  245. package/lib/transformers/features/validators/CreateIsTransformer.js +24 -0
  246. package/lib/transformers/features/validators/CreateIsTransformer.js.map +1 -0
  247. package/lib/transformers/features/validators/CreateValidateTransformer.d.ts +5 -0
  248. package/lib/transformers/features/validators/CreateValidateTransformer.js +24 -0
  249. package/lib/transformers/features/validators/CreateValidateTransformer.js.map +1 -0
  250. package/lib/transformers/features/{IsTransformer.d.ts → validators/IsTransformer.d.ts} +1 -1
  251. package/lib/transformers/features/{IsTransformer.js → validators/IsTransformer.js} +3 -3
  252. package/lib/transformers/features/validators/IsTransformer.js.map +1 -0
  253. package/lib/transformers/features/{ValidateTransformer.d.ts → validators/ValidateTransformer.d.ts} +1 -1
  254. package/lib/transformers/features/{ValidateTransformer.js → validators/ValidateTransformer.js} +3 -3
  255. package/lib/transformers/features/validators/ValidateTransformer.js.map +1 -0
  256. package/lib/typings/ClassProperties.d.ts +1 -1
  257. package/lib/typings/OmitNever.d.ts +1 -1
  258. package/lib/typings/SpecialFields.d.ts +1 -1
  259. package/lib/typings/Writable.d.ts +1 -1
  260. package/lib/utils/PatternUtil.js +1 -1
  261. package/lib/utils/PatternUtil.js.map +1 -1
  262. package/package.json +114 -78
  263. package/src/IValidation.ts +21 -0
  264. package/src/Primitive.ts +82 -0
  265. package/src/TypeGuardError.ts +36 -0
  266. package/src/executable/internal/TypiaSetupWizard.ts +130 -0
  267. package/src/executable/typia.ts +34 -0
  268. package/src/factories/CommentFactory.ts +10 -0
  269. package/src/factories/ExpressionFactory.ts +52 -0
  270. package/src/factories/IdentifierFactory.ts +72 -0
  271. package/src/factories/LiteralFactory.ts +44 -0
  272. package/src/factories/MetadataCollection.ts +122 -0
  273. package/src/factories/MetadataFactory.ts +46 -0
  274. package/src/factories/MetadataTagFactory.ts +347 -0
  275. package/src/factories/StatementFactory.ts +60 -0
  276. package/src/factories/TemplateFactory.ts +56 -0
  277. package/src/factories/TypeFactory.ts +101 -0
  278. package/src/factories/ValueFactory.ts +12 -0
  279. package/src/factories/internal/MetadataHelper.ts +12 -0
  280. package/src/factories/internal/emplace_metadata_object.ts +140 -0
  281. package/src/factories/internal/explore_metadata.ts +91 -0
  282. package/src/factories/internal/iterate_metadata.ts +81 -0
  283. package/src/factories/internal/iterate_metadata_array.ts +29 -0
  284. package/src/factories/internal/iterate_metadata_atomic.ts +59 -0
  285. package/src/factories/internal/iterate_metadata_coalesce.ts +33 -0
  286. package/src/factories/internal/iterate_metadata_constant.ts +58 -0
  287. package/src/factories/internal/iterate_metadata_map.ts +41 -0
  288. package/src/factories/internal/iterate_metadata_native.ts +227 -0
  289. package/src/factories/internal/iterate_metadata_object.ts +45 -0
  290. package/src/factories/internal/iterate_metadata_resolve.ts +27 -0
  291. package/src/factories/internal/iterate_metadata_set.ts +33 -0
  292. package/src/factories/internal/iterate_metadata_template.ts +38 -0
  293. package/src/factories/internal/iterate_metadata_tuple.ts +51 -0
  294. package/src/factories/internal/iterate_metadata_union.ts +59 -0
  295. package/src/functional/$every.ts +11 -0
  296. package/src/functional/$guard.ts +35 -0
  297. package/src/functional/$is_email.ts +5 -0
  298. package/src/functional/$is_ipv4.ts +5 -0
  299. package/src/functional/$is_ipv6.ts +5 -0
  300. package/src/functional/$is_url.ts +5 -0
  301. package/src/functional/$is_uuid.ts +5 -0
  302. package/src/functional/$join.ts +50 -0
  303. package/src/functional/$number.ts +19 -0
  304. package/src/functional/$report.ts +15 -0
  305. package/src/functional/$rest.ts +3 -0
  306. package/src/functional/$string.ts +37 -0
  307. package/src/functional/$tail.ts +6 -0
  308. package/src/index.ts +4 -0
  309. package/src/metadata/IJsDocTagInfo.ts +10 -0
  310. package/src/metadata/IMetadata.ts +25 -0
  311. package/src/metadata/IMetadataApplication.ts +7 -0
  312. package/src/metadata/IMetadataConstant.ts +16 -0
  313. package/src/metadata/IMetadataEntry.ts +6 -0
  314. package/src/metadata/IMetadataObject.ts +29 -0
  315. package/src/metadata/IMetadataProperty.ts +11 -0
  316. package/src/metadata/IMetadataTag.ts +122 -0
  317. package/src/metadata/Metadata.ts +477 -0
  318. package/src/metadata/MetadataConstant.ts +3 -0
  319. package/src/metadata/MetadataObject.ts +131 -0
  320. package/src/metadata/MetadataProperty.ts +64 -0
  321. package/src/module.ts +1535 -0
  322. package/src/programmers/ApplicationProgrammer.ts +55 -0
  323. package/src/programmers/AssertParseProgrammer.ts +45 -0
  324. package/src/programmers/AssertProgrammer.ts +444 -0
  325. package/src/programmers/AssertStringifyProgrammer.ts +45 -0
  326. package/src/programmers/CheckerProgrammer.ts +798 -0
  327. package/src/programmers/FeatureProgrammer.ts +327 -0
  328. package/src/programmers/IsParseProgrammer.ts +51 -0
  329. package/src/programmers/IsProgrammer.ts +169 -0
  330. package/src/programmers/IsStringifyProgrammer.ts +49 -0
  331. package/src/programmers/StringifyProgrammer.ts +746 -0
  332. package/src/programmers/ValidateParseProgrammer.ts +49 -0
  333. package/src/programmers/ValidateProgrammer.ts +236 -0
  334. package/src/programmers/ValidateStringifyProgrammer.ts +60 -0
  335. package/src/programmers/helpers/AtomicPredicator.ts +15 -0
  336. package/src/programmers/helpers/FunctionImporeter.ts +31 -0
  337. package/src/programmers/helpers/IExpressionEntry.ts +10 -0
  338. package/src/programmers/helpers/OptionPredicator.ts +18 -0
  339. package/src/programmers/helpers/StringifyJoinder.ts +111 -0
  340. package/src/programmers/helpers/StringifyPredicator.ts +18 -0
  341. package/src/programmers/helpers/UnionExplorer.ts +437 -0
  342. package/src/programmers/helpers/UnionPredicator.ts +81 -0
  343. package/src/programmers/internal/application_array.ts +45 -0
  344. package/src/programmers/internal/application_boolean.ts +17 -0
  345. package/src/programmers/internal/application_constant.ts +29 -0
  346. package/src/programmers/internal/application_default.ts +17 -0
  347. package/src/programmers/internal/application_default_string.ts +32 -0
  348. package/src/programmers/internal/application_native.ts +29 -0
  349. package/src/programmers/internal/application_number.ts +76 -0
  350. package/src/programmers/internal/application_object.ts +103 -0
  351. package/src/programmers/internal/application_schema.ts +221 -0
  352. package/src/programmers/internal/application_string.ts +49 -0
  353. package/src/programmers/internal/application_templates.ts +27 -0
  354. package/src/programmers/internal/application_tuple.ts +25 -0
  355. package/src/programmers/internal/check_array.ts +44 -0
  356. package/src/programmers/internal/check_dynamic_properties.ts +146 -0
  357. package/src/programmers/internal/check_everything.ts +25 -0
  358. package/src/programmers/internal/check_length.ts +46 -0
  359. package/src/programmers/internal/check_native.ts +9 -0
  360. package/src/programmers/internal/check_number.ts +181 -0
  361. package/src/programmers/internal/check_object.ts +42 -0
  362. package/src/programmers/internal/check_string.ts +24 -0
  363. package/src/programmers/internal/check_string_tags.ts +63 -0
  364. package/src/programmers/internal/check_template.ts +50 -0
  365. package/src/programmers/internal/decode_union_object.ts +73 -0
  366. package/src/programmers/internal/feature_object_entries.ts +49 -0
  367. package/src/programmers/internal/metadata_to_pattern.ts +31 -0
  368. package/src/programmers/internal/stringify_dynamic_properties.ts +164 -0
  369. package/src/programmers/internal/stringify_native.ts +8 -0
  370. package/src/programmers/internal/stringify_regular_properties.ts +81 -0
  371. package/src/programmers/internal/template_to_pattern.ts +15 -0
  372. package/src/schemas/IJsonApplication.ts +9 -0
  373. package/src/schemas/IJsonComponents.ts +24 -0
  374. package/src/schemas/IJsonSchema.ts +92 -0
  375. package/src/transform.ts +20 -0
  376. package/src/transformers/CallExpressionTransformer.ts +124 -0
  377. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -0
  378. package/src/transformers/FileTransformer.ts +49 -0
  379. package/src/transformers/IProject.ts +11 -0
  380. package/src/transformers/ITransformOptions.ts +4 -0
  381. package/src/transformers/NodeTransformer.ts +19 -0
  382. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +114 -0
  383. package/src/transformers/features/miscellaneous/CreateInstanceTransformer.ts +41 -0
  384. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -0
  385. package/src/transformers/features/parsers/AssertParseTransformer.ts +36 -0
  386. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +32 -0
  387. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +32 -0
  388. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +32 -0
  389. package/src/transformers/features/parsers/IsParseTransformer.ts +36 -0
  390. package/src/transformers/features/parsers/ValidateParseTransformer.ts +36 -0
  391. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +38 -0
  392. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +32 -0
  393. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +32 -0
  394. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +31 -0
  395. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +32 -0
  396. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +38 -0
  397. package/src/transformers/features/stringifiers/StringifyTransformer.ts +36 -0
  398. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +38 -0
  399. package/src/transformers/features/validators/AssertTransformer.ts +43 -0
  400. package/src/transformers/features/validators/CreateAssertTransformer.ts +35 -0
  401. package/src/transformers/features/validators/CreateIsTransformer.ts +35 -0
  402. package/src/transformers/features/validators/CreateValidateTransformer.ts +35 -0
  403. package/src/transformers/features/validators/IsTransformer.ts +43 -0
  404. package/src/transformers/features/validators/ValidateTransformer.ts +43 -0
  405. package/src/typings/Atomic.ts +17 -0
  406. package/src/typings/ClassProperties.ts +5 -0
  407. package/src/typings/OmitNever.ts +3 -0
  408. package/src/typings/SpecialFields.ts +3 -0
  409. package/src/typings/Writable.ts +11 -0
  410. package/src/utils/ArrayUtil.ts +49 -0
  411. package/src/utils/Escaper.ts +50 -0
  412. package/src/utils/MapUtil.ts +14 -0
  413. package/src/utils/PatternUtil.ts +30 -0
  414. package/src/utils/Singleton.ts +17 -0
  415. package/CODE_OF_CONDUCT.md +0 -133
  416. package/CONTRIBUTING.md +0 -104
  417. package/lib/transformers/features/ApplicationTransformer.js.map +0 -1
  418. package/lib/transformers/features/AssertTransformer.js.map +0 -1
  419. package/lib/transformers/features/CreateTransformer.js.map +0 -1
  420. package/lib/transformers/features/IsTransformer.js.map +0 -1
  421. package/lib/transformers/features/StringifyTransformer.js.map +0 -1
  422. package/lib/transformers/features/ValidateTransformer.js.map +0 -1
@@ -0,0 +1,55 @@
1
+ import { Metadata } from "../metadata/Metadata";
2
+ import { IJsonApplication } from "../schemas/IJsonApplication";
3
+ import { IJsonComponents } from "../schemas/IJsonComponents";
4
+ import { IJsonSchema } from "../schemas/IJsonSchema";
5
+
6
+ import { application_schema } from "./internal/application_schema";
7
+
8
+ export namespace ApplicationProgrammer {
9
+ export const AJV_PREFIX = "components#/schemas";
10
+ export const SWAGGER_PREFIX = "#/components/schemas";
11
+
12
+ export interface IOptions {
13
+ purpose: "swagger" | "ajv";
14
+ prefix: string;
15
+ }
16
+
17
+ /**
18
+ * @internal
19
+ */
20
+ export namespace IOptions {
21
+ export function complement(options?: Partial<IOptions>): IOptions {
22
+ const purpose: "swagger" | "ajv" = options?.purpose ?? "swagger";
23
+ return {
24
+ purpose,
25
+ prefix:
26
+ options?.prefix ||
27
+ (purpose === "swagger" ? SWAGGER_PREFIX : AJV_PREFIX),
28
+ };
29
+ }
30
+ }
31
+
32
+ export function generate(
33
+ metadatas: Array<Metadata>,
34
+ options?: Partial<IOptions>,
35
+ ): IJsonApplication {
36
+ const fullOptions: IOptions = IOptions.complement(options);
37
+ const components: IJsonComponents = {
38
+ schemas: {},
39
+ };
40
+ const generator = application_schema(fullOptions)(components)(true);
41
+
42
+ return {
43
+ schemas: metadatas.map((meta, i) => {
44
+ const schema: IJsonSchema | null = generator(meta, {});
45
+ if (schema === null)
46
+ throw new Error(
47
+ `Error on typia.application(): invalid type on argument - (${meta.getName()}, ${i})`,
48
+ );
49
+ return schema;
50
+ }),
51
+ components,
52
+ ...fullOptions,
53
+ };
54
+ }
55
+ }
@@ -0,0 +1,45 @@
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../factories/StatementFactory";
5
+
6
+ import { IProject } from "../transformers/IProject";
7
+
8
+ import { AssertProgrammer } from "./AssertProgrammer";
9
+
10
+ export namespace AssertParseProgrammer {
11
+ export const generate =
12
+ (project: IProject, modulo: ts.LeftHandSideExpression) =>
13
+ (type: ts.Type) =>
14
+ ts.factory.createArrowFunction(
15
+ undefined,
16
+ undefined,
17
+ [IdentifierFactory.parameter("input")],
18
+ undefined,
19
+ undefined,
20
+ ts.factory.createBlock([
21
+ StatementFactory.constant(
22
+ "assert",
23
+ AssertProgrammer.generate(project, modulo)(type),
24
+ ),
25
+ ts.factory.createExpressionStatement(
26
+ ts.factory.createBinaryExpression(
27
+ ts.factory.createIdentifier("input"),
28
+ ts.SyntaxKind.EqualsToken,
29
+ ts.factory.createCallExpression(
30
+ ts.factory.createIdentifier("JSON.parse"),
31
+ undefined,
32
+ [ts.factory.createIdentifier("input")],
33
+ ),
34
+ ),
35
+ ),
36
+ ts.factory.createReturnStatement(
37
+ ts.factory.createCallExpression(
38
+ ts.factory.createIdentifier("assert"),
39
+ undefined,
40
+ [ts.factory.createIdentifier("input")],
41
+ ),
42
+ ),
43
+ ]),
44
+ );
45
+ }
@@ -0,0 +1,444 @@
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../factories/IdentifierFactory";
4
+
5
+ // import { StatementFactory } from "../factories/StatementFactory";
6
+ import { IProject } from "../transformers/IProject";
7
+
8
+ import { CheckerProgrammer } from "./CheckerProgrammer";
9
+ import { IsProgrammer } from "./IsProgrammer";
10
+ import { FunctionImporter } from "./helpers/FunctionImporeter";
11
+ import { check_object } from "./internal/check_object";
12
+
13
+ // /* -----------------------------------------------------------
14
+ // ASSERT V2 -> USE (NULL OR ERROR) CONDITION
15
+ // ----------------------------------------------------------- */
16
+ // export namespace AssertProgrammerV2 {
17
+ // export const generate =
18
+ // (
19
+ // project: IProject,
20
+ // modulo: ts.LeftHandSideExpression,
21
+ // equals: boolean = false,
22
+ // ) =>
23
+ // (type: ts.Type) => {
24
+ // const importer: FunctionImporter = new FunctionImporter();
25
+ // const guardV2: ts.Expression = importer.use("guardV2");
26
+
27
+ // const program: ts.ArrowFunction = CheckerProgrammer.generate(
28
+ // project,
29
+ // {
30
+ // functors: "$ao",
31
+ // unioners: "$au",
32
+ // path: true,
33
+ // trace: true,
34
+ // numeric: !!project.options.numeric,
35
+ // equals,
36
+ // combiner,
37
+ // joiner: joiner(equals)(importer),
38
+ // success: ts.factory.createNull(),
39
+ // },
40
+ // importer,
41
+ // )(type);
42
+
43
+ // return ts.factory.createArrowFunction(
44
+ // undefined,
45
+ // undefined,
46
+ // [IdentifierFactory.parameter("input")],
47
+ // undefined,
48
+ // undefined,
49
+ // ts.factory.createBlock(
50
+ // [
51
+ // ...importer.declare(modulo),
52
+ // StatementFactory.constant(
53
+ // "error",
54
+ // ts.factory.createCallExpression(
55
+ // program,
56
+ // undefined,
57
+ // [
58
+ // ValueFactory.INPUT(),
59
+ // ts.factory.createStringLiteral("$input"),
60
+ // ],
61
+ // ),
62
+ // ),
63
+ // ts.factory.createIfStatement(
64
+ // ts.factory.createStrictInequality(
65
+ // ts.factory.createNull(),
66
+ // ts.factory.createIdentifier("error"),
67
+ // ),
68
+ // ts.factory.createThrowStatement(
69
+ // ts.factory.createCallExpression(
70
+ // guardV2,
71
+ // undefined,
72
+ // [ts.factory.createIdentifier("error")],
73
+ // ),
74
+ // ),
75
+ // ),
76
+ // ts.factory.createReturnStatement(ValueFactory.INPUT()),
77
+ // ],
78
+ // true,
79
+ // ),
80
+ // );
81
+ // };
82
+
83
+ // const combiner: CheckerProgrammer.IConfig.Combiner = (
84
+ // explore: CheckerProgrammer.IExplore,
85
+ // ) => {
86
+ // const path: string = explore.postfix
87
+ // ? `path + ${explore.postfix}`
88
+ // : "path";
89
+ // return (logic) => (input, binaries, expected) =>
90
+ // binaries
91
+ // .map((binary) =>
92
+ // binary.combined
93
+ // ? binary.expression
94
+ // : ts.factory.createParenthesizedExpression(
95
+ // ts.factory.createConditionalExpression(
96
+ // binary.expression,
97
+ // undefined,
98
+ // ts.factory.createNull(),
99
+ // undefined,
100
+ // create_exception_props(
101
+ // ts.factory.createIdentifier(path),
102
+ // expected,
103
+ // input,
104
+ // ),
105
+ // ),
106
+ // ),
107
+ // )
108
+ // .reduce(
109
+ // logic === "and"
110
+ // ? ts.factory.createLogicalOr
111
+ // : ts.factory.createLogicalAnd,
112
+ // );
113
+ // };
114
+
115
+ // const assert_object = (equals: boolean) => (importer: FunctionImporter) =>
116
+ // check_object({
117
+ // equals,
118
+ // assert: true,
119
+ // reduce: ts.factory.createLogicalOr,
120
+ // positive: ts.factory.createNull(),
121
+ // superfluous: (value) =>
122
+ // create_exception_props(
123
+ // ts.factory.createAdd(
124
+ // ts.factory.createIdentifier("path"),
125
+ // ts.factory.createCallExpression(
126
+ // importer.use("join"),
127
+ // undefined,
128
+ // [ts.factory.createIdentifier("key")],
129
+ // ),
130
+ // ),
131
+ // "undefined",
132
+ // value,
133
+ // ),
134
+ // entries: importer.use("every"),
135
+ // halt: (expr) =>
136
+ // ts.factory.createConditionalExpression(
137
+ // ts.factory.createStrictEquality(
138
+ // ts.factory.createFalse(),
139
+ // ts.factory.createIdentifier("exceptionable"),
140
+ // ),
141
+ // undefined,
142
+ // ts.factory.createNull(),
143
+ // undefined,
144
+ // expr,
145
+ // ),
146
+ // });
147
+
148
+ // const joiner =
149
+ // (equals: boolean) =>
150
+ // (importer: FunctionImporter): CheckerProgrammer.IConfig.IJoiner => ({
151
+ // object: assert_object(equals)(importer),
152
+ // array: (input, arrow) =>
153
+ // ts.factory.createCallExpression(
154
+ // importer.use("every"),
155
+ // undefined,
156
+ // [input, arrow],
157
+ // ),
158
+ // failure: (value, expected, explore) =>
159
+ // create_exception_props(
160
+ // ts.factory.createIdentifier(
161
+ // explore?.postfix ? `path + ${explore.postfix}` : "path",
162
+ // ),
163
+ // expected,
164
+ // value,
165
+ // ),
166
+ // is: (exp) =>
167
+ // ts.factory.createStrictEquality(
168
+ // ts.factory.createNull(),
169
+ // ts.factory.createParenthesizedExpression(exp),
170
+ // ),
171
+ // required: (value) =>
172
+ // ts.factory.createConditionalExpression(
173
+ // value,
174
+ // undefined,
175
+ // ts.factory.createNull(),
176
+ // undefined,
177
+ // create_exception_props(
178
+ // ts.factory.createStringLiteral(""),
179
+ // "not undefined",
180
+ // value,
181
+ // ),
182
+ // ),
183
+ // full: equals
184
+ // ? undefined
185
+ // : (condition) => (input, expected) =>
186
+ // ts.factory.createConditionalExpression(
187
+ // ts.factory.createStrictEquality(
188
+ // ts.factory.createNull(),
189
+ // condition,
190
+ // ),
191
+ // undefined,
192
+ // ts.factory.createNull(),
193
+ // undefined,
194
+ // create_exception_props(
195
+ // ts.factory.createIdentifier("path"),
196
+ // expected,
197
+ // input,
198
+ // ),
199
+ // ),
200
+ // });
201
+
202
+ // function create_exception_props(
203
+ // path: ts.Expression,
204
+ // expected: string,
205
+ // value: ts.Expression,
206
+ // ): ts.ObjectLiteralExpression {
207
+ // return ts.factory.createObjectLiteralExpression(
208
+ // [
209
+ // ts.factory.createPropertyAssignment("path", path),
210
+ // ts.factory.createPropertyAssignment(
211
+ // "expected",
212
+ // ts.factory.createStringLiteral(expected),
213
+ // ),
214
+ // ts.factory.createPropertyAssignment("value", value),
215
+ // ],
216
+ // true,
217
+ // );
218
+ // }
219
+ // }
220
+
221
+ /* -----------------------------------------------------------
222
+ ASSERT V3 -> (CONDITION OR THROW(exceptable): FALSE)
223
+ ----------------------------------------------------------- */
224
+ export namespace AssertProgrammer {
225
+ export const generate =
226
+ (
227
+ project: IProject,
228
+ modulo: ts.LeftHandSideExpression,
229
+ equals: boolean = false,
230
+ ) =>
231
+ (type: ts.Type) => {
232
+ const importer: FunctionImporter = new FunctionImporter();
233
+ const program: ts.ArrowFunction = CheckerProgrammer.generate(
234
+ project,
235
+ {
236
+ functors: "$ao",
237
+ unioners: "$au",
238
+ path: true,
239
+ trace: true,
240
+ numeric: !!project.options.numeric,
241
+ equals,
242
+ combiner: combiner(equals)(importer),
243
+ joiner: joiner(equals)(importer),
244
+ success: ts.factory.createTrue(),
245
+ },
246
+ importer,
247
+ )(type);
248
+
249
+ return ts.factory.createArrowFunction(
250
+ undefined,
251
+ undefined,
252
+ [IdentifierFactory.parameter("input")],
253
+ undefined,
254
+ undefined,
255
+ ts.factory.createBlock(
256
+ [
257
+ ...importer.declare(modulo),
258
+ ts.factory.createExpressionStatement(
259
+ ts.factory.createCallExpression(
260
+ program,
261
+ undefined,
262
+ [
263
+ ts.factory.createIdentifier("input"),
264
+ ts.factory.createStringLiteral("$input"),
265
+ ts.factory.createTrue(),
266
+ ],
267
+ ),
268
+ ),
269
+ ts.factory.createReturnStatement(
270
+ ts.factory.createIdentifier("input"),
271
+ ),
272
+ ],
273
+ true,
274
+ ),
275
+ );
276
+ };
277
+
278
+ const combiner =
279
+ (equals: boolean) =>
280
+ (importer: FunctionImporter): CheckerProgrammer.IConfig.Combiner =>
281
+ (explore: CheckerProgrammer.IExplore) => {
282
+ if (explore.tracable === false && explore.from !== "top")
283
+ return IsProgrammer.CONFIG({
284
+ object: assert_object(equals)(importer),
285
+ numeric: true,
286
+ }).combiner(explore);
287
+
288
+ const path: string = explore.postfix
289
+ ? `path + ${explore.postfix}`
290
+ : "path";
291
+ return (logic) => (input, binaries, expected) =>
292
+ logic === "and"
293
+ ? binaries
294
+ .map((binary) =>
295
+ binary.combined
296
+ ? binary.expression
297
+ : ts.factory.createLogicalOr(
298
+ binary.expression,
299
+ create_guard_call(importer)(
300
+ explore.source === "top"
301
+ ? ts.factory.createTrue()
302
+ : ts.factory.createIdentifier(
303
+ "exceptionable",
304
+ ),
305
+ )(
306
+ ts.factory.createIdentifier(path),
307
+ expected,
308
+ input,
309
+ ),
310
+ ),
311
+ )
312
+ .reduce(ts.factory.createLogicalAnd)
313
+ : (() => {
314
+ const addicted = binaries.slice();
315
+ if (
316
+ addicted[addicted.length - 1]!.combined === false
317
+ ) {
318
+ addicted.push({
319
+ combined: true,
320
+ expression: create_guard_call(importer)(
321
+ explore.source === "top"
322
+ ? ts.factory.createTrue()
323
+ : ts.factory.createIdentifier(
324
+ "exceptionable",
325
+ ),
326
+ )(
327
+ ts.factory.createIdentifier(path),
328
+ expected,
329
+ input,
330
+ ),
331
+ });
332
+ }
333
+ return addicted
334
+ .map((b) => b.expression)
335
+ .reduce(ts.factory.createLogicalOr);
336
+ })();
337
+
338
+ // ts.factory.createLogicalOr(
339
+ // binaries
340
+ // .map((binary) => binary.expression)
341
+ // .reduce(ts.factory.createLogicalOr),
342
+ // create_guard_call(importer)(
343
+ // explore.source === "top"
344
+ // ? ts.factory.createTrue()
345
+ // : ts.factory.createIdentifier(
346
+ // "exceptionable",
347
+ // ),
348
+ // )(ts.factory.createIdentifier(path), expected, input),
349
+ // );
350
+ };
351
+
352
+ const assert_object = (equals: boolean) => (importer: FunctionImporter) =>
353
+ check_object({
354
+ equals,
355
+ assert: true,
356
+ reduce: ts.factory.createLogicalAnd,
357
+ positive: ts.factory.createTrue(),
358
+ superfluous: (value) =>
359
+ create_guard_call(importer)()(
360
+ ts.factory.createAdd(
361
+ ts.factory.createIdentifier("path"),
362
+ ts.factory.createCallExpression(
363
+ importer.use("join"),
364
+ undefined,
365
+ [ts.factory.createIdentifier("key")],
366
+ ),
367
+ ),
368
+ "undefined",
369
+ value,
370
+ ),
371
+ halt: (expr) =>
372
+ ts.factory.createLogicalOr(
373
+ ts.factory.createStrictEquality(
374
+ ts.factory.createFalse(),
375
+ ts.factory.createIdentifier("exceptionable"),
376
+ ),
377
+ expr,
378
+ ),
379
+ });
380
+
381
+ const joiner =
382
+ (equals: boolean) =>
383
+ (importer: FunctionImporter): CheckerProgrammer.IConfig.IJoiner => ({
384
+ object: assert_object(equals)(importer),
385
+ array: (input, arrow) =>
386
+ ts.factory.createCallExpression(
387
+ IdentifierFactory.join(input, "every"),
388
+ undefined,
389
+ [arrow],
390
+ ),
391
+ failure: (value, expected, explore) =>
392
+ create_guard_call(importer)(
393
+ explore?.from === "top"
394
+ ? ts.factory.createTrue()
395
+ : ts.factory.createIdentifier("exceptionable"),
396
+ )(
397
+ ts.factory.createIdentifier(
398
+ explore?.postfix ? `path + ${explore.postfix}` : "path",
399
+ ),
400
+ expected,
401
+ value,
402
+ ),
403
+ full: equals
404
+ ? undefined
405
+ : (condition) => (input, expected, explore) =>
406
+ ts.factory.createLogicalOr(
407
+ condition,
408
+ create_guard_call(importer)(
409
+ explore.from === "top"
410
+ ? ts.factory.createTrue()
411
+ : ts.factory.createIdentifier(
412
+ "exceptionable",
413
+ ),
414
+ )(
415
+ ts.factory.createIdentifier("path"),
416
+ expected,
417
+ input,
418
+ ),
419
+ ),
420
+ });
421
+
422
+ const create_guard_call =
423
+ (importer: FunctionImporter) =>
424
+ (exceptionable?: ts.Expression) =>
425
+ (
426
+ path: ts.Expression,
427
+ expected: string,
428
+ value: ts.Expression,
429
+ ): ts.Expression =>
430
+ ts.factory.createCallExpression(importer.use("guard"), undefined, [
431
+ exceptionable || ts.factory.createIdentifier("exceptionable"),
432
+ ts.factory.createObjectLiteralExpression(
433
+ [
434
+ ts.factory.createPropertyAssignment("path", path),
435
+ ts.factory.createPropertyAssignment(
436
+ "expected",
437
+ ts.factory.createStringLiteral(expected),
438
+ ),
439
+ ts.factory.createPropertyAssignment("value", value),
440
+ ],
441
+ true,
442
+ ),
443
+ ]);
444
+ }
@@ -0,0 +1,45 @@
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../factories/StatementFactory";
5
+
6
+ import { IProject } from "../transformers/IProject";
7
+
8
+ import { AssertProgrammer } from "./AssertProgrammer";
9
+ import { StringifyProgrammer } from "./StringifyProgrammer";
10
+
11
+ export namespace AssertStringifyProgrammer {
12
+ export const generate =
13
+ (project: IProject, modulo: ts.LeftHandSideExpression) =>
14
+ (type: ts.Type) =>
15
+ ts.factory.createArrowFunction(
16
+ undefined,
17
+ undefined,
18
+ [IdentifierFactory.parameter("input")],
19
+ undefined,
20
+ undefined,
21
+ ts.factory.createBlock([
22
+ StatementFactory.constant(
23
+ "assert",
24
+ AssertProgrammer.generate(project, modulo)(type),
25
+ ),
26
+ StatementFactory.constant(
27
+ "stringify",
28
+ StringifyProgrammer.generate(project, modulo)(type),
29
+ ),
30
+ ts.factory.createReturnStatement(
31
+ ts.factory.createCallExpression(
32
+ ts.factory.createIdentifier("stringify"),
33
+ undefined,
34
+ [
35
+ ts.factory.createCallExpression(
36
+ ts.factory.createIdentifier("assert"),
37
+ undefined,
38
+ [ts.factory.createIdentifier("input")],
39
+ ),
40
+ ],
41
+ ),
42
+ ),
43
+ ]),
44
+ );
45
+ }