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,437 @@
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
5
+ import { StatementFactory } from "../../factories/StatementFactory";
6
+
7
+ import { IMetadataTag } from "../../metadata/IMetadataTag";
8
+ import { Metadata } from "../../metadata/Metadata";
9
+ import { MetadataObject } from "../../metadata/MetadataObject";
10
+
11
+ import { CheckerProgrammer } from "../CheckerProgrammer";
12
+ import { FeatureProgrammer } from "../FeatureProgrammer";
13
+ import { UnionPredicator } from "./UnionPredicator";
14
+
15
+ export namespace UnionExplorer {
16
+ export interface Decoder<T> {
17
+ (
18
+ input: ts.Expression,
19
+ target: T,
20
+ explore: FeatureProgrammer.IExplore,
21
+ tags: IMetadataTag[],
22
+ ): ts.Expression;
23
+ }
24
+ export type ObjectCombiner = Decoder<MetadataObject[]>;
25
+
26
+ export function object(
27
+ config: FeatureProgrammer.IConfig,
28
+ level: number = 0,
29
+ ) {
30
+ return function (
31
+ input: ts.Expression,
32
+ targets: MetadataObject[],
33
+ explore: FeatureProgrammer.IExplore,
34
+ tags: IMetadataTag[],
35
+ ): ts.Expression {
36
+ // BREAKER
37
+ if (targets.length === 1)
38
+ return config.objector.decoder(
39
+ input,
40
+ targets[0]!,
41
+ explore,
42
+ tags,
43
+ );
44
+
45
+ const expected: string = `(${targets
46
+ .map((t) => t.name)
47
+ .join(" | ")})`;
48
+
49
+ // POSSIBLE TO SPECIALIZE?
50
+ const specList = UnionPredicator.object(targets);
51
+ if (specList.length === 0) {
52
+ const condition: ts.Expression = config.objector.unionizer(
53
+ input,
54
+ targets,
55
+ {
56
+ ...explore,
57
+ tracable: false,
58
+ },
59
+ tags,
60
+ );
61
+ return config.objector.full
62
+ ? config.objector.full(condition)(input, expected, explore)
63
+ : condition;
64
+ }
65
+ const remained: MetadataObject[] = targets.filter(
66
+ (t) => specList.find((s) => s.object === t) === undefined,
67
+ );
68
+
69
+ // DO SPECIALIZE
70
+ const conditions: ts.IfStatement[] = specList
71
+ .filter((spec) => spec.property.key.getSoleLiteral() !== null)
72
+ .map((spec) => {
73
+ const key: string = spec.property.key.getSoleLiteral()!;
74
+ const accessor: ts.Expression = IdentifierFactory.join(
75
+ input,
76
+ key,
77
+ );
78
+ const pred: ts.Expression = spec.neighbour
79
+ ? config.objector.checker(
80
+ accessor,
81
+ spec.property.value,
82
+ {
83
+ ...explore,
84
+ tracable: false,
85
+ postfix: IdentifierFactory.postfix(key),
86
+ },
87
+ tags,
88
+ )
89
+ : (config.objector.required || ((exp) => exp))(
90
+ ExpressionFactory.isRequired(accessor),
91
+ );
92
+ return ts.factory.createIfStatement(
93
+ (config.objector.is || ((exp) => exp))(pred),
94
+ ts.factory.createReturnStatement(
95
+ config.objector.decoder(
96
+ input,
97
+ spec.object,
98
+ explore,
99
+ tags,
100
+ ),
101
+ ),
102
+ );
103
+ });
104
+
105
+ // RETURNS WITH CONDITIONS
106
+ return ts.factory.createCallExpression(
107
+ ts.factory.createArrowFunction(
108
+ undefined,
109
+ undefined,
110
+ [],
111
+ undefined,
112
+ undefined,
113
+ ts.factory.createBlock(
114
+ [
115
+ ...conditions,
116
+ remained.length
117
+ ? ts.factory.createReturnStatement(
118
+ object(config, level + 1)(
119
+ input,
120
+ remained,
121
+ explore,
122
+ tags,
123
+ ),
124
+ )
125
+ : config.objector.failure(
126
+ input,
127
+ expected,
128
+ explore,
129
+ ),
130
+ ],
131
+ true,
132
+ ),
133
+ ),
134
+ undefined,
135
+ undefined,
136
+ );
137
+ };
138
+ }
139
+
140
+ export const array = (props: array.IProps) =>
141
+ iterate<Metadata>({
142
+ size: (input) => IdentifierFactory.join(input, "length"),
143
+ front: (input) =>
144
+ ts.factory.createElementAccessExpression(input, 0),
145
+ array: (input) => input,
146
+ name: (t) => `Array<${t.getName()}>`,
147
+ })(props);
148
+ export namespace array {
149
+ export type IProps = iterate.IProps<Metadata>;
150
+ }
151
+
152
+ export const set = (props: set.IProps) =>
153
+ iterate<Metadata>({
154
+ size: (input) => IdentifierFactory.join(input, "size"),
155
+ front: (input) =>
156
+ IdentifierFactory.join(
157
+ ts.factory.createCallExpression(
158
+ IdentifierFactory.join(
159
+ ts.factory.createCallExpression(
160
+ IdentifierFactory.join(input, "values"),
161
+ undefined,
162
+ undefined,
163
+ ),
164
+ "next",
165
+ ),
166
+ undefined,
167
+ undefined,
168
+ ),
169
+ "value",
170
+ ),
171
+ array: (input) =>
172
+ ts.factory.createArrayLiteralExpression(
173
+ [ts.factory.createSpreadElement(input)],
174
+ false,
175
+ ),
176
+ name: (t) => `Set<${t.getName()}>`,
177
+ })(props);
178
+ export namespace set {
179
+ export type IProps = iterate.IProps<Metadata>;
180
+ }
181
+
182
+ export const map = (props: map.IProps) =>
183
+ iterate<[Metadata, Metadata]>({
184
+ size: (input) => IdentifierFactory.join(input, "size"),
185
+ front: (input) =>
186
+ IdentifierFactory.join(
187
+ ts.factory.createCallExpression(
188
+ IdentifierFactory.join(
189
+ ts.factory.createCallExpression(
190
+ IdentifierFactory.join(input, "entries"),
191
+ undefined,
192
+ undefined,
193
+ ),
194
+ "next",
195
+ ),
196
+ undefined,
197
+ undefined,
198
+ ),
199
+ "value",
200
+ ),
201
+ array: (input) =>
202
+ ts.factory.createArrayLiteralExpression(
203
+ [ts.factory.createSpreadElement(input)],
204
+ false,
205
+ ),
206
+ name: ([k, v]) => `Map<${k.getName()}, ${v.getName()}>`,
207
+ })(props);
208
+
209
+ export namespace map {
210
+ export type IProps = iterate.IProps<[Metadata, Metadata]>;
211
+ }
212
+
213
+ const iterate =
214
+ <T>(accessor: iterate.IAccessor<T>) =>
215
+ (props: iterate.IProps<T>) =>
216
+ (
217
+ input: ts.Expression,
218
+ targets: T[],
219
+ explore: FeatureProgrammer.IExplore,
220
+ tags: IMetadataTag[],
221
+ ): ts.Expression => {
222
+ if (targets.length === 1)
223
+ return props.decoder(
224
+ accessor.array(input),
225
+ targets[0]!,
226
+ explore,
227
+ tags,
228
+ );
229
+
230
+ //----
231
+ // LIST UP VARIABLES
232
+ //----
233
+ // TUPLES
234
+ const tupleListVariable: ts.VariableStatement =
235
+ StatementFactory.constant(
236
+ "tupleList",
237
+ ts.factory.createArrayLiteralExpression(
238
+ targets.map((meta) =>
239
+ ts.factory.createArrayLiteralExpression([
240
+ ts.factory.createArrowFunction(
241
+ undefined,
242
+ undefined,
243
+ [IdentifierFactory.parameter("branch")],
244
+ undefined,
245
+ undefined,
246
+ props.checker(
247
+ ts.factory.createIdentifier("branch"),
248
+ meta,
249
+ {
250
+ ...explore,
251
+ tracable: false,
252
+ postfix: `"[0]"`,
253
+ },
254
+ tags,
255
+ ),
256
+ ),
257
+ ts.factory.createArrowFunction(
258
+ undefined,
259
+ undefined,
260
+ [IdentifierFactory.parameter("branch")],
261
+ undefined,
262
+ undefined,
263
+ props.decoder(
264
+ ts.factory.createIdentifier("branch"),
265
+ meta,
266
+ {
267
+ ...explore,
268
+ tracable: true,
269
+ },
270
+ tags,
271
+ ),
272
+ ),
273
+ ]),
274
+ ),
275
+ ),
276
+ );
277
+
278
+ // FILTERED TUPLES
279
+ const filteredVariable = StatementFactory.constant(
280
+ "filtered",
281
+ ts.factory.createCallExpression(
282
+ ts.factory.createIdentifier("tupleList.filter"),
283
+ undefined,
284
+ [
285
+ ts.factory.createArrowFunction(
286
+ undefined,
287
+ undefined,
288
+ [IdentifierFactory.parameter("tuple")],
289
+ undefined,
290
+ undefined,
291
+ ts.factory.createStrictEquality(
292
+ props.success,
293
+ ts.factory.createCallExpression(
294
+ ts.factory.createIdentifier("tuple[0]"),
295
+ undefined,
296
+ [ts.factory.createIdentifier("front")],
297
+ ),
298
+ ),
299
+ ),
300
+ ],
301
+ ),
302
+ );
303
+
304
+ //----
305
+ // STATEMENTS
306
+ //----
307
+ // ONLY ONE TYPE
308
+ const uniqueStatement = ts.factory.createIfStatement(
309
+ ts.factory.createStrictEquality(
310
+ ts.factory.createNumericLiteral(1),
311
+ ts.factory.createIdentifier("filtered.length"),
312
+ ),
313
+ ts.factory.createReturnStatement(
314
+ ts.factory.createCallExpression(
315
+ ts.factory.createIdentifier(`filtered[0][1]`),
316
+ undefined,
317
+ [accessor.array(input)],
318
+ ),
319
+ ),
320
+ );
321
+
322
+ // UNION TYPE
323
+ const forOfStatement = ts.factory.createForOfStatement(
324
+ undefined,
325
+ ts.factory.createVariableDeclarationList(
326
+ [ts.factory.createVariableDeclaration("tuple")],
327
+ ts.NodeFlags.Const,
328
+ ),
329
+ // StatementFactory.variable(ts.NodeFlags.Const, "tuple"),
330
+ ts.factory.createIdentifier("filtered"),
331
+ ts.factory.createIfStatement(
332
+ ts.factory.createCallExpression(
333
+ IdentifierFactory.join(
334
+ ts.factory.createIdentifier("array"),
335
+ "every",
336
+ ),
337
+ undefined,
338
+ [
339
+ ts.factory.createArrowFunction(
340
+ undefined,
341
+ undefined,
342
+ [IdentifierFactory.parameter("value")],
343
+ undefined,
344
+ undefined,
345
+ ts.factory.createStrictEquality(
346
+ props.success,
347
+ ts.factory.createCallExpression(
348
+ ts.factory.createIdentifier("tuple[0]"),
349
+ undefined,
350
+ [ts.factory.createIdentifier("value")],
351
+ ),
352
+ ),
353
+ ),
354
+ ],
355
+ ),
356
+ ts.factory.createReturnStatement(
357
+ ts.factory.createCallExpression(
358
+ ts.factory.createIdentifier(`tuple[1]`),
359
+ undefined,
360
+ [ts.factory.createIdentifier("array")],
361
+ ),
362
+ ),
363
+ ),
364
+ );
365
+ const unionStatement = ts.factory.createIfStatement(
366
+ ts.factory.createLessThan(
367
+ ts.factory.createNumericLiteral(1),
368
+ ts.factory.createIdentifier("filtered.length"),
369
+ ),
370
+ forOfStatement,
371
+ );
372
+
373
+ const block = [
374
+ // ARRAY.LENGTH := 0
375
+ ts.factory.createIfStatement(
376
+ ts.factory.createStrictEquality(
377
+ ts.factory.createNumericLiteral(0),
378
+ accessor.size(input),
379
+ ),
380
+ ts.factory.createReturnStatement(props.empty),
381
+ ),
382
+
383
+ // UNION PREDICATORS
384
+ tupleListVariable,
385
+ StatementFactory.constant("front", accessor.front(input)),
386
+ filteredVariable,
387
+ uniqueStatement,
388
+
389
+ // CONDITIONAL STATEMENTS
390
+ StatementFactory.constant("array", accessor.array(input)),
391
+ unionStatement,
392
+ props.failure(
393
+ input,
394
+ `(${targets.map((t) => accessor.name(t)).join(" | ")})`,
395
+ explore,
396
+ ),
397
+ ];
398
+
399
+ return ts.factory.createCallExpression(
400
+ ts.factory.createArrowFunction(
401
+ undefined,
402
+ undefined,
403
+ [],
404
+ undefined,
405
+ undefined,
406
+ ts.factory.createBlock(block, true),
407
+ ),
408
+ undefined,
409
+ undefined,
410
+ );
411
+ };
412
+ namespace iterate {
413
+ export interface IProps<T> {
414
+ checker(
415
+ input: ts.Expression,
416
+ target: T,
417
+ explore: FeatureProgrammer.IExplore,
418
+ tags: IMetadataTag[],
419
+ ): ts.Expression;
420
+ decoder: Decoder<T>;
421
+ empty: ts.Expression;
422
+ success: ts.Expression;
423
+ failure(
424
+ input: ts.Expression,
425
+ expected: string,
426
+ explore: CheckerProgrammer.IExplore,
427
+ ): ts.Statement;
428
+ }
429
+
430
+ export interface IAccessor<T> {
431
+ name(metadata: T): string;
432
+ size(input: ts.Expression): ts.Expression;
433
+ front(input: ts.Expression): ts.Expression;
434
+ array(input: ts.Expression): ts.Expression;
435
+ }
436
+ }
437
+ }
@@ -0,0 +1,81 @@
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { MetadataObject } from "../../metadata/MetadataObject";
3
+ import { MetadataProperty } from "../../metadata/MetadataProperty";
4
+
5
+ import { ArrayUtil } from "../../utils/ArrayUtil";
6
+ import { MapUtil } from "../../utils/MapUtil";
7
+
8
+ export namespace UnionPredicator {
9
+ export interface ISpecialized {
10
+ index: number;
11
+ object: MetadataObject;
12
+ property: MetadataProperty;
13
+ neighbour: boolean;
14
+ }
15
+
16
+ export function object(targets: MetadataObject[]): Array<ISpecialized> {
17
+ // PROPERTY MATRIX
18
+ const matrix: Map<string, Array<MetadataProperty | null>> = new Map();
19
+ for (const obj of targets)
20
+ for (const prop of obj.properties) {
21
+ const key: string | null = prop.key.getSoleLiteral();
22
+ if (key !== null)
23
+ MapUtil.take(matrix, key, () =>
24
+ ArrayUtil.repeat(targets.length, () => null),
25
+ );
26
+ }
27
+ targets.forEach((obj, i) => {
28
+ for (const prop of obj.properties) {
29
+ const key: string | null = prop.key.getSoleLiteral();
30
+ if (key !== null) matrix.get(key)![i] = prop;
31
+ }
32
+ });
33
+
34
+ // EXPLORE SPECIALIZERS
35
+ const output: ISpecialized[] = [];
36
+ targets.forEach((obj, i) => {
37
+ const children: ISpecializedProperty[] = [];
38
+ obj.properties.forEach((prop) => {
39
+ // MUST BE REQUIRED
40
+ if (prop.value.required === false) return;
41
+ const key: string | null = prop.key.getSoleLiteral();
42
+ if (key === null) return;
43
+
44
+ // FIND NEIGHBORHOOD PROPERTIES
45
+ const neighbors: MetadataProperty[] = matrix
46
+ .get(key)!
47
+ .filter(
48
+ (oppo, k) => i !== k && oppo !== null,
49
+ ) as MetadataProperty[];
50
+
51
+ // NO NEIGHBORHOOD
52
+ const unique: boolean =
53
+ neighbors.length === 0 ||
54
+ neighbors.every(
55
+ (n) => !Metadata.intersects(prop.value, n.value, false),
56
+ );
57
+ if (unique === true)
58
+ children.push({
59
+ property: prop,
60
+ neighbour: neighbors.length !== 0,
61
+ });
62
+ });
63
+ if (children.length === 0) return;
64
+
65
+ const top: ISpecializedProperty =
66
+ children.find((child) => child.property.value.isConstant()) ||
67
+ children[0]!;
68
+ output.push({
69
+ index: i,
70
+ object: obj,
71
+ ...top,
72
+ });
73
+ });
74
+ return output;
75
+ }
76
+ }
77
+
78
+ interface ISpecializedProperty {
79
+ property: MetadataProperty;
80
+ neighbour: boolean;
81
+ }
@@ -0,0 +1,45 @@
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { IJsonComponents } from "../../schemas/IJsonComponents";
3
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
4
+
5
+ import { ApplicationProgrammer } from "../ApplicationProgrammer";
6
+ import { application_schema } from "./application_schema";
7
+
8
+ /**
9
+ * @internal
10
+ */
11
+ export const application_array =
12
+ (options: ApplicationProgrammer.IOptions) =>
13
+ (components: IJsonComponents) =>
14
+ (
15
+ metadata: Metadata,
16
+ nullable: boolean,
17
+ attribute: IJsonSchema.IAttribute,
18
+ ): IJsonSchema.IArray => {
19
+ // SCHEMA
20
+ const output: IJsonSchema.IArray = {
21
+ type: "array",
22
+ items: application_schema(options)(components)(false)(
23
+ metadata,
24
+ attribute,
25
+ ),
26
+ nullable,
27
+ ...attribute,
28
+ };
29
+
30
+ // RANGE
31
+ for (const tag of attribute["x-typia-metaTags"] || [])
32
+ if (tag.kind === "minItems") output.minItems = tag.value;
33
+ else if (tag.kind === "maxItems") output.maxItems = tag.value;
34
+ else if (tag.kind === "items") {
35
+ if (tag.minimum !== undefined)
36
+ output.minItems =
37
+ tag.minimum.value +
38
+ (tag.minimum.include === true ? 0 : 1);
39
+ if (tag.maximum !== undefined)
40
+ output.maxItems =
41
+ tag.maximum.value -
42
+ (tag.maximum.include === true ? 0 : 1);
43
+ }
44
+ return output;
45
+ };
@@ -0,0 +1,17 @@
1
+ import { IJsonSchema } from "../../module";
2
+ import { application_default } from "./application_default";
3
+
4
+ /**
5
+ * @internal
6
+ */
7
+ export const application_boolean = (
8
+ nullable: boolean,
9
+ attribute: IJsonSchema.IAttribute,
10
+ ): IJsonSchema.IBoolean => ({
11
+ type: "boolean",
12
+ nullable,
13
+ ...attribute,
14
+ default: application_default(attribute)(
15
+ (def) => def === "true" || def === "false",
16
+ )((str) => Boolean(str)),
17
+ });
@@ -0,0 +1,29 @@
1
+ import { MetadataConstant } from "../../metadata/MetadataConstant";
2
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
3
+
4
+ import { application_default } from "./application_default";
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export const application_constant = (
10
+ constant: MetadataConstant,
11
+ nullable: boolean,
12
+ attribute: IJsonSchema.IAttribute,
13
+ ): IJsonSchema.IEnumeration<any> => ({
14
+ type: constant.type,
15
+ enum: constant.values as any,
16
+ nullable,
17
+ ...attribute,
18
+ default: application_default(attribute)((def) =>
19
+ constant.values.some((v) => v.toString() === def),
20
+ )(
21
+ constant.type === "string"
22
+ ? (str) => str
23
+ : constant.type === "number"
24
+ ? (str) => Number(str)
25
+ : constant.type === "boolean"
26
+ ? (str) => Boolean(str)
27
+ : (str) => BigInt(str) as any,
28
+ ),
29
+ });
@@ -0,0 +1,17 @@
1
+ import { IJsonSchema } from "../../module";
2
+
3
+ /**
4
+ * @internal
5
+ */
6
+ export const application_default =
7
+ (attribute: IJsonSchema.IAttribute) =>
8
+ (pred: (value: string) => boolean) =>
9
+ <T>(caster: (str: string) => T): T | undefined => {
10
+ const defaults = (attribute["x-typia-jsDocTags"] || []).filter(
11
+ (tag) => tag.name === "default",
12
+ );
13
+ for (const def of defaults)
14
+ if (def.text?.length && pred(def.text[0]!.text))
15
+ return caster(def.text[0]!.text);
16
+ return undefined;
17
+ };
@@ -0,0 +1,32 @@
1
+ import { Metadata } from "../../metadata/Metadata";
2
+
3
+ import { IJsonSchema } from "../../module";
4
+ import { application_default } from "./application_default";
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export const application_default_string =
10
+ (meta: Metadata, attribute: IJsonSchema.IAttribute) =>
11
+ (schema: IJsonSchema.IString) =>
12
+ application_default(attribute)((str) => {
13
+ const conditions: boolean[] = [];
14
+
15
+ // OTHER ATOMIC TYPES
16
+ if (meta.atomics.find((t) => t === "number" || t === "bigint"))
17
+ conditions.push(Number.isNaN(Number(str)));
18
+ if (meta.atomics.find((t) => t === "boolean"))
19
+ conditions.push(str !== "true" && str !== "false");
20
+ for (const constant of meta.constants)
21
+ for (const value of constant.values)
22
+ conditions.push(str !== value.toString());
23
+
24
+ // CONSIDER TAGS
25
+ if (schema.minLength !== undefined)
26
+ conditions.push(str.length >= schema.minLength);
27
+ if (schema.maxLength !== undefined)
28
+ conditions.push(str.length <= schema.maxLength);
29
+ if (schema.pattern !== undefined)
30
+ conditions.push(new RegExp(schema.pattern).test(str));
31
+ return conditions.every((c) => c);
32
+ })((str) => str);
@@ -0,0 +1,29 @@
1
+ import { IJsonComponents } from "../../schemas/IJsonComponents";
2
+
3
+ import { IJsonSchema } from "../../module";
4
+ import { ApplicationProgrammer } from "../ApplicationProgrammer";
5
+
6
+ export const application_native =
7
+ (options: ApplicationProgrammer.IOptions) =>
8
+ (components: IJsonComponents) =>
9
+ (name: string) =>
10
+ (
11
+ nullable: boolean,
12
+ attribute: IJsonSchema.IAttribute,
13
+ ): IJsonSchema.IReference => {
14
+ const key: string = name + (nullable ? ".Nullable" : "");
15
+ if (components.schemas[key] === undefined)
16
+ components.schemas[key] = {
17
+ type: "object",
18
+ $id:
19
+ options.purpose === "ajv"
20
+ ? options.prefix + "/" + key
21
+ : undefined,
22
+ properties: {},
23
+ nullable,
24
+ };
25
+ return {
26
+ $ref: `#/components/schemas/${name}`,
27
+ ...attribute,
28
+ };
29
+ };