typia 7.0.0-dev.20240930 → 7.0.0-dev.20241002

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 (373) hide show
  1. package/lib/executable/TypiaGenerateWizard.js +1 -1
  2. package/lib/executable/TypiaGenerateWizard.js.map +1 -1
  3. package/lib/executable/TypiaSetupWizard.js +1 -1
  4. package/lib/executable/TypiaSetupWizard.js.map +1 -1
  5. package/lib/executable/setup/ArgumentParser.d.ts +1 -1
  6. package/lib/executable/setup/ArgumentParser.js +31 -33
  7. package/lib/executable/setup/ArgumentParser.js.map +1 -1
  8. package/lib/executable/setup/FileRetriever.d.ts +5 -2
  9. package/lib/executable/setup/FileRetriever.js +12 -21
  10. package/lib/executable/setup/FileRetriever.js.map +1 -1
  11. package/lib/executable/setup/PackageManager.js +4 -1
  12. package/lib/executable/setup/PackageManager.js.map +1 -1
  13. package/lib/factories/ExpressionFactory.d.ts +14 -7
  14. package/lib/factories/ExpressionFactory.js +26 -34
  15. package/lib/factories/ExpressionFactory.js.map +1 -1
  16. package/lib/factories/IdentifierFactory.d.ts +2 -2
  17. package/lib/factories/IdentifierFactory.js +10 -6
  18. package/lib/factories/IdentifierFactory.js.map +1 -1
  19. package/lib/factories/MetadataCollection.js +4 -1
  20. package/lib/factories/MetadataCollection.js.map +1 -1
  21. package/lib/factories/MetadataCommentTagFactory.js +133 -128
  22. package/lib/factories/MetadataCommentTagFactory.js.map +1 -1
  23. package/lib/factories/MetadataFactory.js +1 -1
  24. package/lib/factories/MetadataFactory.js.map +1 -1
  25. package/lib/factories/MetadataTypeTagFactory.d.ts +14 -2
  26. package/lib/factories/MetadataTypeTagFactory.js +312 -267
  27. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  28. package/lib/factories/MetadataTypeTagSchemaFactory.d.ts +4 -1
  29. package/lib/factories/MetadataTypeTagSchemaFactory.js +70 -61
  30. package/lib/factories/MetadataTypeTagSchemaFactory.js.map +1 -1
  31. package/lib/factories/NumericRangeFactory.d.ts +2 -2
  32. package/lib/factories/NumericRangeFactory.js +2 -10
  33. package/lib/factories/NumericRangeFactory.js.map +1 -1
  34. package/lib/factories/StatementFactory.d.ts +14 -3
  35. package/lib/factories/StatementFactory.js +16 -8
  36. package/lib/factories/StatementFactory.js.map +1 -1
  37. package/lib/factories/TemplateFactory.js +24 -18
  38. package/lib/factories/TemplateFactory.js.map +1 -1
  39. package/lib/factories/TypeFactory.d.ts +10 -2
  40. package/lib/factories/TypeFactory.js +65 -53
  41. package/lib/factories/TypeFactory.js.map +1 -1
  42. package/lib/factories/internal/metadata/iterate_metadata.js +4 -1
  43. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  44. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js +16 -11
  45. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  46. package/lib/factories/internal/metadata/iterate_metadata_escape.js +5 -1
  47. package/lib/factories/internal/metadata/iterate_metadata_escape.js.map +1 -1
  48. package/lib/factories/internal/metadata/iterate_metadata_function.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +6 -1
  50. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  51. package/lib/factories/internal/metadata/iterate_metadata_map.js +5 -1
  52. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  53. package/lib/factories/internal/metadata/iterate_metadata_native.js +11 -3
  54. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  55. package/lib/factories/internal/metadata/iterate_metadata_set.js +5 -1
  56. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  57. package/lib/index.mjs +25 -25
  58. package/lib/index.mjs.map +1 -1
  59. package/lib/programmers/AssertProgrammer.js +36 -22
  60. package/lib/programmers/AssertProgrammer.js.map +1 -1
  61. package/lib/programmers/CheckerProgrammer.js +316 -251
  62. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  63. package/lib/programmers/FeatureProgrammer.js +34 -20
  64. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  65. package/lib/programmers/IsProgrammer.js +41 -22
  66. package/lib/programmers/IsProgrammer.js.map +1 -1
  67. package/lib/programmers/RandomProgrammer.js +171 -135
  68. package/lib/programmers/RandomProgrammer.js.map +1 -1
  69. package/lib/programmers/TypiaProgrammer.d.ts +2 -2
  70. package/lib/programmers/TypiaProgrammer.js +79 -75
  71. package/lib/programmers/TypiaProgrammer.js.map +1 -1
  72. package/lib/programmers/ValidateProgrammer.js +55 -24
  73. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  74. package/lib/programmers/functional/FunctionalAssertParametersProgrammer.js +30 -15
  75. package/lib/programmers/functional/FunctionalAssertParametersProgrammer.js.map +1 -1
  76. package/lib/programmers/functional/FunctionalAssertReturnProgrammer.js +16 -13
  77. package/lib/programmers/functional/FunctionalAssertReturnProgrammer.js.map +1 -1
  78. package/lib/programmers/functional/FunctionalIsParametersProgrammer.js +11 -8
  79. package/lib/programmers/functional/FunctionalIsParametersProgrammer.js.map +1 -1
  80. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js +8 -2
  81. package/lib/programmers/functional/FunctionalIsReturnProgrammer.js.map +1 -1
  82. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js +11 -5
  83. package/lib/programmers/functional/FunctionalValidateParametersProgrammer.js.map +1 -1
  84. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js +8 -2
  85. package/lib/programmers/functional/FunctionalValidateReturnProgrammer.js.map +1 -1
  86. package/lib/programmers/helpers/CloneJoiner.js +13 -4
  87. package/lib/programmers/helpers/CloneJoiner.js.map +1 -1
  88. package/lib/programmers/helpers/FunctionImporter.js +10 -7
  89. package/lib/programmers/helpers/FunctionImporter.js.map +1 -1
  90. package/lib/programmers/helpers/NotationJoiner.d.ts +2 -1
  91. package/lib/programmers/helpers/NotationJoiner.js +40 -33
  92. package/lib/programmers/helpers/NotationJoiner.js.map +1 -1
  93. package/lib/programmers/helpers/PruneJoiner.js +6 -3
  94. package/lib/programmers/helpers/PruneJoiner.js.map +1 -1
  95. package/lib/programmers/helpers/RandomJoiner.d.ts +1 -1
  96. package/lib/programmers/helpers/RandomJoiner.js +4 -1
  97. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  98. package/lib/programmers/helpers/RandomRanger.js.map +1 -1
  99. package/lib/programmers/helpers/StringifyJoinder.js +5 -2
  100. package/lib/programmers/helpers/StringifyJoinder.js.map +1 -1
  101. package/lib/programmers/helpers/StringifyPredicator.d.ts +1 -1
  102. package/lib/programmers/helpers/StringifyPredicator.js +4 -3
  103. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  104. package/lib/programmers/helpers/UnionExplorer.d.ts +52 -12
  105. package/lib/programmers/helpers/UnionExplorer.js +183 -144
  106. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  107. package/lib/programmers/helpers/UnionPredicator.d.ts +1 -1
  108. package/lib/programmers/helpers/UnionPredicator.js +7 -7
  109. package/lib/programmers/http/HttpAssertFormDataProgrammer.js +8 -2
  110. package/lib/programmers/http/HttpAssertFormDataProgrammer.js.map +1 -1
  111. package/lib/programmers/http/HttpAssertHeadersProgrammer.js +8 -2
  112. package/lib/programmers/http/HttpAssertHeadersProgrammer.js.map +1 -1
  113. package/lib/programmers/http/HttpAssertQueryProgrammer.js +8 -2
  114. package/lib/programmers/http/HttpAssertQueryProgrammer.js.map +1 -1
  115. package/lib/programmers/http/HttpFormDataProgrammer.js +84 -71
  116. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  117. package/lib/programmers/http/HttpHeadersProgrammer.js +76 -69
  118. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  119. package/lib/programmers/http/HttpIsFormDataProgrammer.js +12 -3
  120. package/lib/programmers/http/HttpIsFormDataProgrammer.js.map +1 -1
  121. package/lib/programmers/http/HttpIsHeadersProgrammer.js +12 -3
  122. package/lib/programmers/http/HttpIsHeadersProgrammer.js.map +1 -1
  123. package/lib/programmers/http/HttpIsQueryProgrammer.js +12 -3
  124. package/lib/programmers/http/HttpIsQueryProgrammer.js.map +1 -1
  125. package/lib/programmers/http/HttpParameterProgrammer.js +17 -10
  126. package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
  127. package/lib/programmers/http/HttpQueryProgrammer.js +76 -63
  128. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  129. package/lib/programmers/http/HttpValidateFormDataProgrammer.js +8 -2
  130. package/lib/programmers/http/HttpValidateFormDataProgrammer.js.map +1 -1
  131. package/lib/programmers/http/HttpValidateHeadersProgrammer.js +8 -2
  132. package/lib/programmers/http/HttpValidateHeadersProgrammer.js.map +1 -1
  133. package/lib/programmers/http/HttpValidateQueryProgrammer.js +8 -2
  134. package/lib/programmers/http/HttpValidateQueryProgrammer.js.map +1 -1
  135. package/lib/programmers/internal/application_escaped.js +4 -4
  136. package/lib/programmers/internal/application_escaped.js.map +1 -1
  137. package/lib/programmers/internal/application_templates.js +8 -2
  138. package/lib/programmers/internal/application_templates.js.map +1 -1
  139. package/lib/programmers/internal/application_union_discriminator.d.ts +1 -1
  140. package/lib/programmers/internal/application_union_discriminator.js +6 -6
  141. package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
  142. package/lib/programmers/internal/application_v30_object.js +6 -3
  143. package/lib/programmers/internal/application_v30_object.js.map +1 -1
  144. package/lib/programmers/internal/application_v31_object.js +4 -1
  145. package/lib/programmers/internal/application_v31_object.js.map +1 -1
  146. package/lib/programmers/internal/check_array_length.js +21 -26
  147. package/lib/programmers/internal/check_array_length.js.map +1 -1
  148. package/lib/programmers/internal/check_bigint.js +18 -26
  149. package/lib/programmers/internal/check_bigint.js.map +1 -1
  150. package/lib/programmers/internal/check_dynamic_key.d.ts +1 -5
  151. package/lib/programmers/internal/check_dynamic_key.js +109 -91
  152. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  153. package/lib/programmers/internal/check_dynamic_properties.js +92 -91
  154. package/lib/programmers/internal/check_dynamic_properties.js.map +1 -1
  155. package/lib/programmers/internal/check_everything.js +1 -1
  156. package/lib/programmers/internal/check_everything.js.map +1 -1
  157. package/lib/programmers/internal/check_native.js +8 -5
  158. package/lib/programmers/internal/check_native.js.map +1 -1
  159. package/lib/programmers/internal/check_number.js +59 -65
  160. package/lib/programmers/internal/check_number.js.map +1 -1
  161. package/lib/programmers/internal/check_object.js +31 -22
  162. package/lib/programmers/internal/check_object.js.map +1 -1
  163. package/lib/programmers/internal/check_string.js +18 -26
  164. package/lib/programmers/internal/check_string.js.map +1 -1
  165. package/lib/programmers/internal/check_template.js +20 -21
  166. package/lib/programmers/internal/check_template.js.map +1 -1
  167. package/lib/programmers/internal/check_union_array_like.js +86 -53
  168. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  169. package/lib/programmers/internal/decode_union_object.js +59 -49
  170. package/lib/programmers/internal/decode_union_object.js.map +1 -1
  171. package/lib/programmers/internal/feature_object_entries.js +31 -37
  172. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  173. package/lib/programmers/internal/llm_schema_escaped.js +29 -11
  174. package/lib/programmers/internal/llm_schema_escaped.js.map +1 -1
  175. package/lib/programmers/internal/llm_schema_object.js +4 -1
  176. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  177. package/lib/programmers/internal/metadata_to_pattern.js +44 -41
  178. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  179. package/lib/programmers/internal/postfix_of_tuple.d.ts +1 -1
  180. package/lib/programmers/internal/postfix_of_tuple.js +3 -0
  181. package/lib/programmers/internal/postfix_of_tuple.js.map +1 -1
  182. package/lib/programmers/internal/prune_object_properties.js +7 -4
  183. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  184. package/lib/programmers/internal/random_custom.js +8 -14
  185. package/lib/programmers/internal/random_custom.js.map +1 -1
  186. package/lib/programmers/internal/stringify_dynamic_properties.js +8 -5
  187. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  188. package/lib/programmers/internal/stringify_regular_properties.js +4 -4
  189. package/lib/programmers/internal/stringify_regular_properties.js.map +1 -1
  190. package/lib/programmers/internal/template_to_pattern.js +10 -5
  191. package/lib/programmers/internal/template_to_pattern.js.map +1 -1
  192. package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +1 -2
  193. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +3 -0
  194. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -1
  195. package/lib/programmers/json/JsonAssertParseProgrammer.js +8 -2
  196. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  197. package/lib/programmers/json/JsonAssertStringifyProgrammer.js +8 -2
  198. package/lib/programmers/json/JsonAssertStringifyProgrammer.js.map +1 -1
  199. package/lib/programmers/json/JsonIsParseProgrammer.js +8 -2
  200. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  201. package/lib/programmers/json/JsonIsStringifyProgrammer.js +8 -2
  202. package/lib/programmers/json/JsonIsStringifyProgrammer.js.map +1 -1
  203. package/lib/programmers/json/JsonStringifyProgrammer.js +126 -95
  204. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  205. package/lib/programmers/json/JsonValidateParseProgrammer.js +8 -2
  206. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  207. package/lib/programmers/json/JsonValidateStringifyProgrammer.js +12 -3
  208. package/lib/programmers/json/JsonValidateStringifyProgrammer.js.map +1 -1
  209. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +8 -2
  210. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  211. package/lib/programmers/misc/MiscAssertPruneProgrammer.js +12 -3
  212. package/lib/programmers/misc/MiscAssertPruneProgrammer.js.map +1 -1
  213. package/lib/programmers/misc/MiscCloneProgrammer.js +203 -162
  214. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  215. package/lib/programmers/misc/MiscIsCloneProgrammer.js +8 -2
  216. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  217. package/lib/programmers/misc/MiscIsPruneProgrammer.js +8 -2
  218. package/lib/programmers/misc/MiscIsPruneProgrammer.js.map +1 -1
  219. package/lib/programmers/misc/MiscPruneProgrammer.js +114 -92
  220. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  221. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +12 -3
  222. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  223. package/lib/programmers/misc/MiscValidatePruneProgrammer.js +16 -4
  224. package/lib/programmers/misc/MiscValidatePruneProgrammer.js.map +1 -1
  225. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js +8 -2
  226. package/lib/programmers/notations/NotationAssertGeneralProgrammer.js.map +1 -1
  227. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +4 -1
  228. package/lib/programmers/notations/NotationGeneralProgrammer.js +209 -145
  229. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  230. package/lib/programmers/notations/NotationIsGeneralProgrammer.js +8 -2
  231. package/lib/programmers/notations/NotationIsGeneralProgrammer.js.map +1 -1
  232. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js +12 -3
  233. package/lib/programmers/notations/NotationValidateGeneralProgrammer.js.map +1 -1
  234. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +8 -2
  235. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  236. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js +8 -2
  237. package/lib/programmers/protobuf/ProtobufAssertEncodeProgrammer.js.map +1 -1
  238. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +51 -30
  239. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  240. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +89 -65
  241. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  242. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +12 -3
  243. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  244. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.js +8 -2
  245. package/lib/programmers/protobuf/ProtobufIsEncodeProgrammer.js.map +1 -1
  246. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +8 -2
  247. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  248. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js +12 -3
  249. package/lib/programmers/protobuf/ProtobufValidateEncodeProgrammer.js.map +1 -1
  250. package/lib/transformers/features/llm/LlmApplicationTransformer.js +5 -2
  251. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  252. package/lib/utils/NamingConvention/NamingConvention.js +41 -47
  253. package/lib/utils/NamingConvention/NamingConvention.js.map +1 -1
  254. package/package.json +1 -1
  255. package/src/executable/TypiaGenerateWizard.ts +1 -1
  256. package/src/executable/TypiaSetupWizard.ts +1 -1
  257. package/src/executable/setup/ArgumentParser.ts +27 -28
  258. package/src/executable/setup/FileRetriever.ts +14 -17
  259. package/src/executable/setup/PackageManager.ts +4 -3
  260. package/src/factories/ExpressionFactory.ts +98 -84
  261. package/src/factories/IdentifierFactory.ts +26 -7
  262. package/src/factories/MetadataCollection.ts +4 -1
  263. package/src/factories/MetadataCommentTagFactory.ts +97 -88
  264. package/src/factories/MetadataFactory.ts +2 -1
  265. package/src/factories/MetadataTypeTagFactory.ts +334 -285
  266. package/src/factories/MetadataTypeTagSchemaFactory.ts +75 -52
  267. package/src/factories/NumericRangeFactory.ts +8 -8
  268. package/src/factories/StatementFactory.ts +27 -11
  269. package/src/factories/TemplateFactory.ts +29 -21
  270. package/src/factories/TypeFactory.ts +80 -58
  271. package/src/factories/internal/metadata/iterate_metadata.ts +4 -1
  272. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +6 -4
  273. package/src/factories/internal/metadata/iterate_metadata_escape.ts +5 -3
  274. package/src/factories/internal/metadata/iterate_metadata_function.ts +4 -4
  275. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +6 -3
  276. package/src/factories/internal/metadata/iterate_metadata_map.ts +4 -3
  277. package/src/factories/internal/metadata/iterate_metadata_native.ts +12 -9
  278. package/src/factories/internal/metadata/iterate_metadata_set.ts +5 -1
  279. package/src/programmers/AssertProgrammer.ts +46 -32
  280. package/src/programmers/CheckerProgrammer.ts +295 -261
  281. package/src/programmers/FeatureProgrammer.ts +25 -23
  282. package/src/programmers/IsProgrammer.ts +38 -23
  283. package/src/programmers/RandomProgrammer.ts +55 -39
  284. package/src/programmers/TypiaProgrammer.ts +48 -34
  285. package/src/programmers/ValidateProgrammer.ts +67 -37
  286. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +4 -4
  287. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +4 -4
  288. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +4 -4
  289. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +7 -7
  290. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +14 -8
  291. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +7 -7
  292. package/src/programmers/helpers/CloneJoiner.ts +17 -7
  293. package/src/programmers/helpers/FunctionImporter.ts +12 -11
  294. package/src/programmers/helpers/NotationJoiner.ts +91 -82
  295. package/src/programmers/helpers/ProtobufUtil.ts +2 -2
  296. package/src/programmers/helpers/PruneJoiner.ts +7 -3
  297. package/src/programmers/helpers/RandomJoiner.ts +12 -6
  298. package/src/programmers/helpers/RandomRanger.ts +8 -1
  299. package/src/programmers/helpers/StringifyJoinder.ts +5 -2
  300. package/src/programmers/helpers/StringifyPredicator.ts +4 -3
  301. package/src/programmers/helpers/UnionExplorer.ts +287 -205
  302. package/src/programmers/helpers/UnionPredicator.ts +5 -5
  303. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +8 -2
  304. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +8 -2
  305. package/src/programmers/http/HttpAssertQueryProgrammer.ts +8 -2
  306. package/src/programmers/http/HttpFormDataProgrammer.ts +139 -114
  307. package/src/programmers/http/HttpHeadersProgrammer.ts +150 -121
  308. package/src/programmers/http/HttpIsFormDataProgrammer.ts +12 -6
  309. package/src/programmers/http/HttpIsHeadersProgrammer.ts +12 -6
  310. package/src/programmers/http/HttpIsQueryProgrammer.ts +12 -6
  311. package/src/programmers/http/HttpParameterProgrammer.ts +16 -11
  312. package/src/programmers/http/HttpQueryProgrammer.ts +141 -116
  313. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +8 -2
  314. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +8 -2
  315. package/src/programmers/http/HttpValidateQueryProgrammer.ts +8 -2
  316. package/src/programmers/internal/application_escaped.ts +6 -6
  317. package/src/programmers/internal/application_templates.ts +8 -6
  318. package/src/programmers/internal/application_union_discriminator.ts +6 -6
  319. package/src/programmers/internal/application_v30_object.ts +6 -3
  320. package/src/programmers/internal/application_v31_object.ts +4 -1
  321. package/src/programmers/internal/application_v31_tuple.ts +1 -1
  322. package/src/programmers/internal/check_array_length.ts +31 -30
  323. package/src/programmers/internal/check_bigint.ts +31 -31
  324. package/src/programmers/internal/check_dynamic_key.ts +155 -126
  325. package/src/programmers/internal/check_dynamic_properties.ts +155 -154
  326. package/src/programmers/internal/check_everything.ts +1 -1
  327. package/src/programmers/internal/check_native.ts +11 -5
  328. package/src/programmers/internal/check_number.ts +88 -84
  329. package/src/programmers/internal/check_object.ts +45 -31
  330. package/src/programmers/internal/check_string.ts +31 -30
  331. package/src/programmers/internal/check_template.ts +34 -32
  332. package/src/programmers/internal/check_union_array_like.ts +255 -228
  333. package/src/programmers/internal/decode_union_object.ts +92 -75
  334. package/src/programmers/internal/feature_object_entries.ts +43 -46
  335. package/src/programmers/internal/llm_schema_escaped.ts +36 -13
  336. package/src/programmers/internal/llm_schema_object.ts +4 -1
  337. package/src/programmers/internal/metadata_to_pattern.ts +31 -23
  338. package/src/programmers/internal/postfix_of_tuple.ts +3 -0
  339. package/src/programmers/internal/prune_object_properties.ts +7 -4
  340. package/src/programmers/internal/random_custom.ts +25 -23
  341. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -157
  342. package/src/programmers/internal/stringify_regular_properties.ts +7 -7
  343. package/src/programmers/internal/template_to_pattern.ts +12 -4
  344. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +3 -0
  345. package/src/programmers/json/JsonAssertParseProgrammer.ts +8 -2
  346. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +8 -2
  347. package/src/programmers/json/JsonIsParseProgrammer.ts +8 -2
  348. package/src/programmers/json/JsonIsStringifyProgrammer.ts +8 -2
  349. package/src/programmers/json/JsonStringifyProgrammer.ts +88 -66
  350. package/src/programmers/json/JsonValidateParseProgrammer.ts +8 -2
  351. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +12 -6
  352. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +8 -2
  353. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +12 -3
  354. package/src/programmers/misc/MiscCloneProgrammer.ts +186 -155
  355. package/src/programmers/misc/MiscIsCloneProgrammer.ts +8 -2
  356. package/src/programmers/misc/MiscIsPruneProgrammer.ts +8 -2
  357. package/src/programmers/misc/MiscPruneProgrammer.ts +77 -63
  358. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +12 -6
  359. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +16 -7
  360. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +8 -2
  361. package/src/programmers/notations/NotationGeneralProgrammer.ts +218 -160
  362. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +8 -2
  363. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +12 -6
  364. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +8 -2
  365. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +8 -2
  366. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +48 -46
  367. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +67 -55
  368. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +12 -6
  369. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +8 -2
  370. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +8 -2
  371. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +12 -6
  372. package/src/transformers/features/llm/LlmApplicationTransformer.ts +7 -6
  373. package/src/utils/NamingConvention/NamingConvention.ts +40 -42
@@ -397,9 +397,9 @@ export namespace FeatureProgrammer {
397
397
  collection: MetadataCollection;
398
398
  }) =>
399
399
  props.collection.objects().map((object) =>
400
- StatementFactory.constant(
401
- `${props.config.prefix}o${object.index}`,
402
- ts.factory.createArrowFunction(
400
+ StatementFactory.constant({
401
+ name: `${props.config.prefix}o${object.index}`,
402
+ value: ts.factory.createArrowFunction(
403
403
  undefined,
404
404
  undefined,
405
405
  parameterDeclarations({
@@ -411,13 +411,16 @@ export namespace FeatureProgrammer {
411
411
  undefined,
412
412
  props.config.objector.joiner({
413
413
  input: ts.factory.createIdentifier("input"),
414
- entries: feature_object_entries(props.config)(props.importer)(
414
+ entries: feature_object_entries({
415
+ config: props.config,
416
+ importer: props.importer,
417
+ input: ts.factory.createIdentifier("input"),
415
418
  object,
416
- )(ts.factory.createIdentifier("input")),
419
+ }),
417
420
  object,
418
421
  }),
419
422
  ),
420
- ),
423
+ }),
421
424
  );
422
425
 
423
426
  export const write_union_functions = (props: {
@@ -425,22 +428,17 @@ export namespace FeatureProgrammer {
425
428
  collection: MetadataCollection;
426
429
  }) =>
427
430
  props.collection.unions().map((union, i) =>
428
- StatementFactory.constant(
429
- `${props.config.prefix}u${i}`,
430
- write_union({
431
+ StatementFactory.constant({
432
+ name: `${props.config.prefix}u${i}`,
433
+ value: write_union({
431
434
  config: props.config,
432
435
  objects: union,
433
436
  }),
434
- ),
437
+ }),
435
438
  );
436
439
 
437
- const write_union = (props: {
438
- config: IConfig;
439
- objects: MetadataObject[];
440
- }) => {
441
- const explorer = UnionExplorer.object(props.config);
442
- const input = ValueFactory.INPUT();
443
- return ts.factory.createArrowFunction(
440
+ const write_union = (props: { config: IConfig; objects: MetadataObject[] }) =>
441
+ ts.factory.createArrowFunction(
444
442
  undefined,
445
443
  undefined,
446
444
  parameterDeclarations({
@@ -450,14 +448,18 @@ export namespace FeatureProgrammer {
450
448
  }),
451
449
  TypeFactory.keyword("any"),
452
450
  undefined,
453
- explorer(input, props.objects, {
454
- tracable: props.config.path || props.config.trace,
455
- source: "function",
456
- from: "object",
457
- postfix: "",
451
+ UnionExplorer.object({
452
+ config: props.config,
453
+ objects: props.objects,
454
+ input: ValueFactory.INPUT(),
455
+ explore: {
456
+ tracable: props.config.path || props.config.trace,
457
+ source: "function",
458
+ from: "object",
459
+ postfix: "",
460
+ },
458
461
  }),
459
462
  );
460
- };
461
463
 
462
464
  /* -----------------------------------------------------------
463
465
  DECODERS
@@ -60,21 +60,28 @@ export namespace IsProgrammer {
60
60
  : initial;
61
61
  },
62
62
  joiner: {
63
- object:
64
- props.options?.object ||
65
- check_object({
66
- equals: !!props.options?.object,
67
- undefined: OptionPredicator.undefined({
68
- undefined: props.options?.undefined,
69
- }),
70
- assert: true,
71
- reduce: ts.factory.createLogicalAnd,
72
- positive: ts.factory.createTrue(),
73
- superfluous: () => ts.factory.createFalse(),
74
- })(props.context)(props.importer),
63
+ object: props.options?.object
64
+ ? (v) => props.options!.object!(v)
65
+ : (v) =>
66
+ check_object({
67
+ config: {
68
+ equals: !!props.options?.object,
69
+ undefined: OptionPredicator.undefined({
70
+ undefined: props.options?.undefined,
71
+ }),
72
+ assert: true,
73
+ reduce: ts.factory.createLogicalAnd,
74
+ positive: ts.factory.createTrue(),
75
+ superfluous: () => ts.factory.createFalse(),
76
+ },
77
+ context: props.context,
78
+ importer: props.importer,
79
+ entries: v.entries,
80
+ input: v.input,
81
+ }),
75
82
  array: (props) =>
76
83
  ts.factory.createCallExpression(
77
- IdentifierFactory.access(props.input)("every"),
84
+ IdentifierFactory.access(props.input, "every"),
78
85
  undefined,
79
86
  [props.arrow],
80
87
  ),
@@ -115,14 +122,21 @@ export namespace IsProgrammer {
115
122
  const config: CheckerProgrammer.IConfig = {
116
123
  ...configure({
117
124
  options: {
118
- object: check_object({
119
- equals: props.config.equals,
120
- undefined: OptionPredicator.undefined(props.context.options),
121
- assert: true,
122
- reduce: ts.factory.createLogicalAnd,
123
- positive: ts.factory.createTrue(),
124
- superfluous: () => ts.factory.createFalse(),
125
- })(props.context)(props.importer),
125
+ object: (v) =>
126
+ check_object({
127
+ config: {
128
+ equals: props.config.equals,
129
+ undefined: OptionPredicator.undefined(props.context.options),
130
+ assert: true,
131
+ reduce: ts.factory.createLogicalAnd,
132
+ positive: ts.factory.createTrue(),
133
+ superfluous: () => ts.factory.createFalse(),
134
+ },
135
+ context: props.context,
136
+ importer: props.importer,
137
+ entries: v.entries,
138
+ input: v.input,
139
+ }),
126
140
  numeric: OptionPredicator.numeric(props.context.options),
127
141
  },
128
142
  context: props.context,
@@ -245,10 +259,11 @@ export namespace IsProgrammer {
245
259
  ExpressionFactory.isObject({
246
260
  checkArray: false,
247
261
  checkNull: props.checkNull,
248
- })(props.input),
262
+ input: props.input,
263
+ }),
249
264
  ts.factory.createStrictEquality(
250
265
  ts.factory.createStringLiteral("function"),
251
- ValueFactory.TYPEOF(IdentifierFactory.access(props.input)("toJSON")),
266
+ ValueFactory.TYPEOF(IdentifierFactory.access(props.input, "toJSON")),
252
267
  ),
253
268
  );
254
269
 
@@ -107,7 +107,10 @@ export namespace RandomProgrammer {
107
107
  [
108
108
  ts.factory.createTypeReferenceNode(
109
109
  props.name ??
110
- TypeFactory.getFullName(props.context.checker)(props.type),
110
+ TypeFactory.getFullName({
111
+ checker: props.context.checker,
112
+ type: props.type,
113
+ }),
111
114
  ),
112
115
  ],
113
116
  false,
@@ -138,7 +141,7 @@ export namespace RandomProgrammer {
138
141
  );
139
142
  return {
140
143
  functions,
141
- statements: [StatementFactory.mut("_generator")],
144
+ statements: [StatementFactory.mut({ name: "_generator" })],
142
145
  arrow,
143
146
  };
144
147
  };
@@ -163,9 +166,9 @@ export namespace RandomProgrammer {
163
166
  collection: MetadataCollection;
164
167
  }): ts.VariableStatement[] =>
165
168
  props.collection.objects().map((obj, i) =>
166
- StatementFactory.constant(
167
- Prefix.object(i),
168
- ts.factory.createArrowFunction(
169
+ StatementFactory.constant({
170
+ name: Prefix.object(i),
171
+ value: ts.factory.createArrowFunction(
169
172
  undefined,
170
173
  undefined,
171
174
  [
@@ -196,7 +199,7 @@ export namespace RandomProgrammer {
196
199
  object: obj,
197
200
  }),
198
201
  ),
199
- ),
202
+ }),
200
203
  );
201
204
 
202
205
  const write_array_functions = (props: {
@@ -207,9 +210,9 @@ export namespace RandomProgrammer {
207
210
  .arrays()
208
211
  .filter((a) => a.recursive)
209
212
  .map((array, i) =>
210
- StatementFactory.constant(
211
- Prefix.array(i),
212
- ts.factory.createArrowFunction(
213
+ StatementFactory.constant({
214
+ name: Prefix.array(i),
215
+ value: ts.factory.createArrowFunction(
213
216
  undefined,
214
217
  undefined,
215
218
  [
@@ -254,7 +257,7 @@ export namespace RandomProgrammer {
254
257
  metadata: array.value,
255
258
  }),
256
259
  ),
257
- ),
260
+ }),
258
261
  );
259
262
 
260
263
  const write_tuple_functions = (props: {
@@ -265,9 +268,9 @@ export namespace RandomProgrammer {
265
268
  .tuples()
266
269
  .filter((a) => a.recursive)
267
270
  .map((tuple, i) =>
268
- StatementFactory.constant(
269
- Prefix.tuple(i),
270
- ts.factory.createArrowFunction(
271
+ StatementFactory.constant({
272
+ name: Prefix.tuple(i),
273
+ value: ts.factory.createArrowFunction(
271
274
  undefined,
272
275
  undefined,
273
276
  [
@@ -297,7 +300,7 @@ export namespace RandomProgrammer {
297
300
  elements: tuple.elements,
298
301
  }),
299
302
  ),
300
- ),
303
+ }),
301
304
  );
302
305
 
303
306
  /* -----------------------------------------------------------
@@ -481,8 +484,11 @@ export namespace RandomProgrammer {
481
484
  ? "uint"
482
485
  : "double";
483
486
  const multiply = tags.find((t) => t.kind === "multipleOf");
484
- return random_custom(coalesce(props.importer))("number")(tags)(
485
- RandomRanger.number({
487
+ return random_custom({
488
+ accessor: coalesce(props.importer),
489
+ type: "number",
490
+ tags,
491
+ expression: RandomRanger.number({
486
492
  config: {
487
493
  type,
488
494
  transform: (value) => ExpressionFactory.number(value),
@@ -502,7 +508,7 @@ export namespace RandomProgrammer {
502
508
  },
503
509
  tags,
504
510
  }),
505
- );
511
+ });
506
512
  });
507
513
 
508
514
  const decode_bigint = (props: {
@@ -510,8 +516,11 @@ export namespace RandomProgrammer {
510
516
  atomic: MetadataAtomic;
511
517
  }): ts.Expression[] =>
512
518
  (props.atomic.tags.length ? props.atomic.tags : [[]]).map((tags) =>
513
- random_custom(coalesce(props.importer))("bigint")(tags)(
514
- RandomRanger.number({
519
+ random_custom({
520
+ accessor: coalesce(props.importer),
521
+ type: "bigint",
522
+ tags,
523
+ expression: RandomRanger.number({
515
524
  config: {
516
525
  type: tags.find(
517
526
  (t) =>
@@ -535,7 +544,7 @@ export namespace RandomProgrammer {
535
544
  },
536
545
  tags,
537
546
  }),
538
- ),
547
+ }),
539
548
  );
540
549
 
541
550
  const decode_string = (props: {
@@ -543,8 +552,11 @@ export namespace RandomProgrammer {
543
552
  atomic: MetadataAtomic;
544
553
  }): ts.Expression[] =>
545
554
  (props.atomic.tags.length ? props.atomic.tags : [[]]).map((tags) =>
546
- random_custom(coalesce(props.importer))("string")(tags)(
547
- (() => {
555
+ random_custom({
556
+ accessor: coalesce(props.importer),
557
+ type: "string",
558
+ tags,
559
+ expression: (() => {
548
560
  for (const t of tags)
549
561
  if (t.kind === "format")
550
562
  return ts.factory.createCallExpression(
@@ -582,7 +594,7 @@ export namespace RandomProgrammer {
582
594
  tail ? [tail] : undefined,
583
595
  );
584
596
  })(),
585
- ),
597
+ }),
586
598
  );
587
599
 
588
600
  const decode_array = (props: {
@@ -996,39 +1008,41 @@ export namespace RandomProgrammer {
996
1008
  importer: props.importer,
997
1009
  name: "Uint8Array",
998
1010
  }),
999
- )("buffer")
1011
+ "buffer",
1012
+ )
1000
1013
  : ExpressionFactory.selfCall(
1001
1014
  ts.factory.createBlock(
1002
1015
  [
1003
- StatementFactory.constant(
1004
- "length",
1005
- ts.factory.createCallExpression(
1016
+ StatementFactory.constant({
1017
+ name: "length",
1018
+ value: ts.factory.createCallExpression(
1006
1019
  coalesce(props.importer)("integer"),
1007
1020
  undefined,
1008
1021
  [],
1009
1022
  ),
1010
- ),
1011
- StatementFactory.constant(
1012
- "buffer",
1013
- ts.factory.createNewExpression(
1023
+ }),
1024
+ StatementFactory.constant({
1025
+ name: "buffer",
1026
+ value: ts.factory.createNewExpression(
1014
1027
  ts.factory.createIdentifier("SharedArrayBuffer"),
1015
1028
  [],
1016
1029
  [ts.factory.createIdentifier("length")],
1017
1030
  ),
1018
- ),
1019
- StatementFactory.constant(
1020
- "bytes",
1021
- ts.factory.createNewExpression(
1031
+ }),
1032
+ StatementFactory.constant({
1033
+ name: "bytes",
1034
+ value: ts.factory.createNewExpression(
1022
1035
  ts.factory.createIdentifier("Uint8Array"),
1023
1036
  [],
1024
1037
  [ts.factory.createIdentifier("buffer")],
1025
1038
  ),
1026
- ),
1039
+ }),
1027
1040
  ts.factory.createExpressionStatement(
1028
1041
  ts.factory.createCallExpression(
1029
1042
  IdentifierFactory.access(
1030
1043
  ts.factory.createIdentifier("bytes"),
1031
- )("set"),
1044
+ "set",
1045
+ ),
1032
1046
  undefined,
1033
1047
  [
1034
1048
  ts.factory.createCallExpression(
@@ -1075,7 +1089,8 @@ export namespace RandomProgrammer {
1075
1089
  importer,
1076
1090
  name: "Uint8Array",
1077
1091
  }),
1078
- )("buffer"),
1092
+ "buffer",
1093
+ ),
1079
1094
  ],
1080
1095
  );
1081
1096
 
@@ -1112,7 +1127,8 @@ const coalesce = (importer: FunctionImporter) => (name: string) =>
1112
1127
  ts.factory.createToken(ts.SyntaxKind.QuestionDotToken),
1113
1128
  ts.factory.createStringLiteral(name),
1114
1129
  ),
1115
- )(IdentifierFactory.access(importer.use("generator"))(name));
1130
+ IdentifierFactory.access(importer.use("generator"), name),
1131
+ );
1116
1132
 
1117
1133
  const emendFormat = (key: keyof Format.Validator) =>
1118
1134
  key === "date-time"
@@ -7,47 +7,54 @@ import { ImportTransformer } from "../transformers/ImportTransformer";
7
7
  import transform from "../transform";
8
8
 
9
9
  export namespace TypiaProgrammer {
10
- export interface IProps {
10
+ export interface ILocation {
11
11
  input: string;
12
12
  output: string;
13
13
  project: string;
14
14
  }
15
15
 
16
- export const build = async (props: TypiaProgrammer.IProps): Promise<void> => {
17
- props.input = path.resolve(props.input);
18
- props.output = path.resolve(props.output);
16
+ export const build = async (
17
+ location: TypiaProgrammer.ILocation,
18
+ ): Promise<void> => {
19
+ location.input = path.resolve(location.input);
20
+ location.output = path.resolve(location.output);
19
21
 
20
- if ((await is_directory(props.input)) === false)
22
+ if ((await is_directory(location.input)) === false)
21
23
  throw new URIError(
22
24
  "Error on TypiaGenerator.generate(): input path is not a directory.",
23
25
  );
24
- else if (fs.existsSync(props.output) === false)
25
- await fs.promises.mkdir(props.output, { recursive: true });
26
- else if ((await is_directory(props.output)) === false) {
27
- const parent: string = path.join(props.output, "..");
26
+ else if (fs.existsSync(location.output) === false)
27
+ await fs.promises.mkdir(location.output, { recursive: true });
28
+ else if ((await is_directory(location.output)) === false) {
29
+ const parent: string = path.join(location.output, "..");
28
30
  if ((await is_directory(parent)) === false)
29
31
  throw new URIError(
30
32
  "Error on TypiaGenerator.generate(): output path is not a directory.",
31
33
  );
32
- await fs.promises.mkdir(props.output);
34
+ await fs.promises.mkdir(location.output);
33
35
  }
34
36
 
35
37
  // CREATE PROGRAM
36
38
  const { options: compilerOptions } = ts.parseJsonConfigFileContent(
37
- ts.readConfigFile(props.project, ts.sys.readFile).config,
39
+ ts.readConfigFile(location.project, ts.sys.readFile).config,
38
40
  {
39
41
  fileExists: ts.sys.fileExists,
40
42
  readFile: ts.sys.readFile,
41
43
  readDirectory: ts.sys.readDirectory,
42
44
  useCaseSensitiveFileNames: ts.sys.useCaseSensitiveFileNames,
43
45
  },
44
- path.dirname(props.project),
46
+ path.dirname(location.project),
45
47
  );
46
48
 
47
49
  const program: ts.Program = ts.createProgram(
48
50
  await (async () => {
49
51
  const container: string[] = [];
50
- await gather(props)(container)(props.input)(props.output);
52
+ await gather({
53
+ location,
54
+ container,
55
+ from: location.input,
56
+ to: location.output,
57
+ });
51
58
  return container;
52
59
  })(),
53
60
  compilerOptions,
@@ -61,10 +68,10 @@ export namespace TypiaProgrammer {
61
68
  .filter(
62
69
  (file) =>
63
70
  !file.isDeclarationFile &&
64
- path.resolve(file.fileName).indexOf(props.input) !== -1,
71
+ path.resolve(file.fileName).indexOf(location.input) !== -1,
65
72
  ),
66
73
  [
67
- ImportTransformer.transform(props.input)(props.output),
74
+ ImportTransformer.transform(location.input)(location.output),
68
75
  transform(
69
76
  program,
70
77
  ((compilerOptions.plugins as any[]) ?? []).find(
@@ -117,7 +124,7 @@ export namespace TypiaProgrammer {
117
124
  for (const file of result.transformed) {
118
125
  const to: string = path
119
126
  .resolve(file.fileName)
120
- .replace(props.input, props.output);
127
+ .replace(location.input, location.output);
121
128
 
122
129
  const content: string = printer.printFile(file);
123
130
  await fs.promises.writeFile(to, content, "utf8");
@@ -129,24 +136,31 @@ export namespace TypiaProgrammer {
129
136
  return stat.isDirectory();
130
137
  };
131
138
 
132
- const gather =
133
- (props: IProps) =>
134
- (container: string[]) =>
135
- (from: string) =>
136
- async (to: string) => {
137
- if (from === props.output) return;
138
- else if (fs.existsSync(to) === false) await fs.promises.mkdir(to);
139
-
140
- for (const file of await fs.promises.readdir(from)) {
141
- const next: string = path.join(from, file);
142
- const stat: fs.Stats = await fs.promises.stat(next);
143
-
144
- if (stat.isDirectory()) {
145
- await gather(props)(container)(next)(path.join(to, file));
146
- continue;
147
- } else if (is_supported_extension(file)) container.push(next);
148
- }
149
- };
139
+ const gather = async (props: {
140
+ location: ILocation;
141
+ container: string[];
142
+ from: string;
143
+ to: string;
144
+ }) => {
145
+ if (props.from === props.location.output) return;
146
+ else if (fs.existsSync(props.to) === false)
147
+ await fs.promises.mkdir(props.to);
148
+
149
+ for (const file of await fs.promises.readdir(props.from)) {
150
+ const next: string = path.join(props.from, file);
151
+ const stat: fs.Stats = await fs.promises.stat(next);
152
+
153
+ if (stat.isDirectory()) {
154
+ await gather({
155
+ location: props.location,
156
+ container: props.container,
157
+ from: next,
158
+ to: path.join(props.to, file),
159
+ });
160
+ continue;
161
+ } else if (is_supported_extension(file)) props.container.push(next);
162
+ }
163
+ };
150
164
 
151
165
  const is_supported_extension = (filename: string): boolean => {
152
166
  return (