typia 3.8.9 → 3.9.0-dev.20230604

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 (239) hide show
  1. package/lib/IRandomGenerator.d.ts +1 -0
  2. package/lib/factories/IdentifierFactory.js +2 -1
  3. package/lib/factories/IdentifierFactory.js.map +1 -1
  4. package/lib/factories/MetadataCollection.d.ts +22 -4
  5. package/lib/factories/MetadataCollection.js +121 -28
  6. package/lib/factories/MetadataCollection.js.map +1 -1
  7. package/lib/factories/MetadataFactory.d.ts +1 -0
  8. package/lib/factories/MetadataFactory.js +6 -48
  9. package/lib/factories/MetadataFactory.js.map +1 -1
  10. package/lib/factories/MetadataTagFactory.js +5 -3
  11. package/lib/factories/MetadataTagFactory.js.map +1 -1
  12. package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +5 -0
  13. package/lib/factories/internal/metadata/emplace_metadata_array.js +38 -0
  14. package/lib/factories/internal/metadata/emplace_metadata_array.js.map +1 -0
  15. package/lib/factories/internal/metadata/emplace_metadata_definition.d.ts +5 -0
  16. package/lib/factories/internal/metadata/emplace_metadata_definition.js +38 -0
  17. package/lib/factories/internal/metadata/emplace_metadata_definition.js.map +1 -0
  18. package/lib/factories/internal/metadata/emplace_metadata_object.js +4 -4
  19. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  20. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +5 -0
  21. package/lib/factories/internal/metadata/emplace_metadata_tuple.js +58 -0
  22. package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -0
  23. package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -1
  24. package/lib/factories/internal/metadata/explore_metadata.js +11 -34
  25. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata.d.ts +1 -1
  27. package/lib/factories/internal/metadata/iterate_metadata.js +5 -2
  28. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  29. package/lib/factories/internal/metadata/iterate_metadata_array.js +4 -5
  30. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  31. package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +2 -0
  32. package/lib/factories/internal/metadata/iterate_metadata_collection.js +151 -0
  33. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -0
  34. package/lib/factories/internal/metadata/iterate_metadata_definition.d.ts +5 -0
  35. package/lib/factories/internal/metadata/iterate_metadata_definition.js +24 -0
  36. package/lib/factories/internal/metadata/iterate_metadata_definition.js.map +1 -0
  37. package/lib/factories/internal/metadata/iterate_metadata_object.js +1 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  39. package/lib/factories/internal/metadata/iterate_metadata_sort.d.ts +3 -0
  40. package/lib/factories/internal/metadata/iterate_metadata_sort.js +156 -0
  41. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -0
  42. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +3 -26
  43. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  44. package/lib/factories/internal/metadata/iterate_metadata_union.js +3 -3
  45. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  46. package/lib/metadata/IMetadata.d.ts +3 -2
  47. package/lib/metadata/IMetadataAlias.d.ts +10 -0
  48. package/lib/metadata/IMetadataAlias.js +3 -0
  49. package/lib/metadata/IMetadataAlias.js.map +1 -0
  50. package/lib/metadata/IMetadataApplication.d.ts +2 -2
  51. package/lib/metadata/IMetadataArray.d.ts +8 -0
  52. package/lib/metadata/IMetadataArray.js +3 -0
  53. package/lib/metadata/IMetadataArray.js.map +1 -0
  54. package/lib/metadata/IMetadataCollection.d.ts +10 -0
  55. package/lib/metadata/IMetadataCollection.js +3 -0
  56. package/lib/metadata/IMetadataCollection.js.map +1 -0
  57. package/lib/metadata/IMetadataDictionary.js +3 -0
  58. package/lib/metadata/IMetadataDictionary.js.map +1 -0
  59. package/lib/metadata/IMetadataObject.d.ts +3 -0
  60. package/lib/metadata/IMetadataProperty.d.ts +1 -1
  61. package/lib/metadata/IMetadataTuple.d.ts +8 -0
  62. package/lib/metadata/IMetadataTuple.js +3 -0
  63. package/lib/metadata/IMetadataTuple.js.map +1 -0
  64. package/lib/metadata/Metadata.d.ts +24 -21
  65. package/lib/metadata/Metadata.js +323 -262
  66. package/lib/metadata/Metadata.js.map +1 -1
  67. package/lib/metadata/MetadataAlias.d.ts +16 -0
  68. package/lib/metadata/MetadataAlias.js +39 -0
  69. package/lib/metadata/MetadataAlias.js.map +1 -0
  70. package/lib/metadata/MetadataArray.d.ts +12 -0
  71. package/lib/metadata/MetadataArray.js +36 -0
  72. package/lib/metadata/MetadataArray.js.map +1 -0
  73. package/lib/metadata/MetadataObject.d.ts +4 -0
  74. package/lib/metadata/MetadataObject.js +3 -5
  75. package/lib/metadata/MetadataObject.js.map +1 -1
  76. package/lib/metadata/MetadataProperty.d.ts +1 -1
  77. package/lib/metadata/MetadataProperty.js +3 -3
  78. package/lib/metadata/MetadataProperty.js.map +1 -1
  79. package/lib/metadata/MetadataTuple.d.ts +12 -0
  80. package/lib/metadata/MetadataTuple.js +36 -0
  81. package/lib/metadata/MetadataTuple.js.map +1 -0
  82. package/lib/programmers/ApplicationProgrammer.js +3 -3
  83. package/lib/programmers/ApplicationProgrammer.js.map +1 -1
  84. package/lib/programmers/AssertProgrammer.js +13 -21
  85. package/lib/programmers/AssertProgrammer.js.map +1 -1
  86. package/lib/programmers/CheckerProgrammer.d.ts +6 -7
  87. package/lib/programmers/CheckerProgrammer.js +276 -185
  88. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  89. package/lib/programmers/CloneProgrammer.js +312 -204
  90. package/lib/programmers/CloneProgrammer.js.map +1 -1
  91. package/lib/programmers/FeatureProgrammer.d.ts +21 -27
  92. package/lib/programmers/FeatureProgrammer.js +60 -63
  93. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  94. package/lib/programmers/IsProgrammer.d.ts +3 -3
  95. package/lib/programmers/IsProgrammer.js +43 -28
  96. package/lib/programmers/IsProgrammer.js.map +1 -1
  97. package/lib/programmers/LiteralsProgrammer.js +1 -0
  98. package/lib/programmers/LiteralsProgrammer.js.map +1 -1
  99. package/lib/programmers/PruneProgrammer.js +270 -176
  100. package/lib/programmers/PruneProgrammer.js.map +1 -1
  101. package/lib/programmers/RandomProgrammer.js +124 -32
  102. package/lib/programmers/RandomProgrammer.js.map +1 -1
  103. package/lib/programmers/StringifyProgrammer.js +462 -356
  104. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  105. package/lib/programmers/ValidateProgrammer.js +9 -9
  106. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  107. package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
  108. package/lib/programmers/helpers/FunctionImporeter.js +17 -2
  109. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  110. package/lib/programmers/helpers/RandomJoiner.d.ts +6 -1
  111. package/lib/programmers/helpers/RandomJoiner.js +11 -14
  112. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  113. package/lib/programmers/helpers/UnionExplorer.d.ts +12 -10
  114. package/lib/programmers/helpers/UnionExplorer.js +47 -12
  115. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  116. package/lib/programmers/helpers/UnionPredicator.js +1 -1
  117. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  118. package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
  119. package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
  120. package/lib/programmers/internal/JSON_SCHEMA_PREFIX.d.ts +1 -1
  121. package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js +2 -2
  122. package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js.map +1 -1
  123. package/lib/programmers/internal/application_array.js +41 -21
  124. package/lib/programmers/internal/application_array.js.map +1 -1
  125. package/lib/programmers/internal/application_boolean.js +1 -1
  126. package/lib/programmers/internal/application_boolean.js.map +1 -1
  127. package/lib/programmers/internal/application_constant.js +2 -2
  128. package/lib/programmers/internal/application_constant.js.map +1 -1
  129. package/lib/programmers/internal/application_default.js +3 -3
  130. package/lib/programmers/internal/application_default.js.map +1 -1
  131. package/lib/programmers/internal/application_definition.d.ts +5 -0
  132. package/lib/programmers/internal/application_definition.js +45 -0
  133. package/lib/programmers/internal/application_definition.js.map +1 -0
  134. package/lib/programmers/internal/application_native.js +14 -11
  135. package/lib/programmers/internal/application_native.js.map +1 -1
  136. package/lib/programmers/internal/application_object.js +19 -14
  137. package/lib/programmers/internal/application_object.js.map +1 -1
  138. package/lib/programmers/internal/application_schema.js +28 -31
  139. package/lib/programmers/internal/application_schema.js.map +1 -1
  140. package/lib/programmers/internal/application_tuple.js +34 -5
  141. package/lib/programmers/internal/application_tuple.js.map +1 -1
  142. package/lib/programmers/internal/check_union_array_like.js +54 -63
  143. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  144. package/lib/programmers/internal/feature_object_entries.js +2 -2
  145. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  146. package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +2 -0
  147. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +18 -0
  148. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -0
  149. package/lib/schemas/IJsonApplication.d.ts +0 -4
  150. package/lib/schemas/IJsonComponents.d.ts +16 -4
  151. package/lib/schemas/IJsonSchema.d.ts +1 -1
  152. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  153. package/lib/transformers/FileTransformer.js +3 -3
  154. package/lib/transformers/FileTransformer.js.map +1 -1
  155. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +1 -0
  156. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
  157. package/lib/transformers/features/miscellaneous/MetadataTransformer.js +2 -1
  158. package/lib/transformers/features/miscellaneous/MetadataTransformer.js.map +1 -1
  159. package/lib/utils/ArrayUtil.d.ts +1 -1
  160. package/lib/utils/ArrayUtil.js +2 -1
  161. package/lib/utils/ArrayUtil.js.map +1 -1
  162. package/lib/utils/RandomGenerator.js +2 -3
  163. package/lib/utils/RandomGenerator.js.map +1 -1
  164. package/package.json +6 -1
  165. package/src/IRandomGenerator.ts +1 -0
  166. package/src/factories/IdentifierFactory.ts +3 -1
  167. package/src/factories/MetadataCollection.ts +170 -34
  168. package/src/factories/MetadataFactory.ts +7 -29
  169. package/src/factories/MetadataTagFactory.ts +6 -3
  170. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -0
  171. package/src/factories/internal/metadata/emplace_metadata_definition.ts +35 -0
  172. package/src/factories/internal/metadata/emplace_metadata_object.ts +4 -4
  173. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -0
  174. package/src/factories/internal/metadata/explore_metadata.ts +18 -44
  175. package/src/factories/internal/metadata/iterate_metadata.ts +13 -3
  176. package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -11
  177. package/src/factories/internal/metadata/iterate_metadata_collection.ts +130 -0
  178. package/src/factories/internal/metadata/iterate_metadata_definition.ts +30 -0
  179. package/src/factories/internal/metadata/iterate_metadata_object.ts +1 -0
  180. package/src/factories/internal/metadata/iterate_metadata_sort.ts +68 -0
  181. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -31
  182. package/src/factories/internal/metadata/iterate_metadata_union.ts +13 -2
  183. package/src/metadata/IMetadata.ts +3 -2
  184. package/src/metadata/IMetadataAlias.ts +12 -0
  185. package/src/metadata/IMetadataApplication.ts +2 -2
  186. package/src/metadata/IMetadataArray.ts +10 -0
  187. package/src/metadata/IMetadataCollection.ts +11 -0
  188. package/src/metadata/IMetadataDictionary.ts +14 -0
  189. package/src/metadata/IMetadataObject.ts +2 -13
  190. package/src/metadata/IMetadataProperty.ts +1 -1
  191. package/src/metadata/IMetadataTuple.ts +10 -0
  192. package/src/metadata/Metadata.ts +180 -134
  193. package/src/metadata/MetadataAlias.ts +61 -0
  194. package/src/metadata/MetadataArray.ts +52 -0
  195. package/src/metadata/MetadataObject.ts +7 -20
  196. package/src/metadata/MetadataProperty.ts +5 -5
  197. package/src/metadata/MetadataTuple.ts +53 -0
  198. package/src/programmers/ApplicationProgrammer.ts +1 -2
  199. package/src/programmers/AssertProgrammer.ts +45 -39
  200. package/src/programmers/CheckerProgrammer.ts +612 -331
  201. package/src/programmers/CloneProgrammer.ts +344 -138
  202. package/src/programmers/FeatureProgrammer.ts +110 -115
  203. package/src/programmers/IsProgrammer.ts +86 -52
  204. package/src/programmers/LiteralsProgrammer.ts +1 -0
  205. package/src/programmers/PruneProgrammer.ts +304 -101
  206. package/src/programmers/RandomProgrammer.ts +227 -61
  207. package/src/programmers/StringifyProgrammer.ts +374 -182
  208. package/src/programmers/ValidateProgrammer.ts +41 -44
  209. package/src/programmers/helpers/FunctionImporeter.ts +35 -11
  210. package/src/programmers/helpers/RandomJoiner.ts +25 -13
  211. package/src/programmers/helpers/UnionExplorer.ts +76 -50
  212. package/src/programmers/helpers/UnionPredicator.ts +1 -1
  213. package/src/programmers/helpers/disable_function_importer_declare.ts +5 -0
  214. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  215. package/src/programmers/internal/application_array.ts +48 -16
  216. package/src/programmers/internal/application_boolean.ts +1 -1
  217. package/src/programmers/internal/application_constant.ts +2 -2
  218. package/src/programmers/internal/application_default.ts +3 -3
  219. package/src/programmers/internal/application_definition.ts +45 -0
  220. package/src/programmers/internal/application_native.ts +15 -12
  221. package/src/programmers/internal/application_object.ts +17 -12
  222. package/src/programmers/internal/application_schema.ts +31 -65
  223. package/src/programmers/internal/application_tuple.ts +63 -13
  224. package/src/programmers/internal/check_union_array_like.ts +249 -191
  225. package/src/programmers/internal/feature_object_entries.ts +2 -2
  226. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -0
  227. package/src/schemas/IJsonApplication.ts +0 -5
  228. package/src/schemas/IJsonComponents.ts +17 -5
  229. package/src/schemas/IJsonSchema.ts +1 -1
  230. package/src/transformers/CallExpressionTransformer.ts +2 -0
  231. package/src/transformers/FileTransformer.ts +8 -8
  232. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +1 -0
  233. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +2 -1
  234. package/src/utils/ArrayUtil.ts +3 -2
  235. package/src/utils/RandomGenerator.ts +3 -3
  236. package/lib/programmers/internal/check_union_tuple.js +0 -15
  237. package/lib/programmers/internal/check_union_tuple.js.map +0 -1
  238. package/src/programmers/internal/check_union_tuple.ts +0 -33
  239. /package/lib/{programmers/internal/check_union_tuple.d.ts → metadata/IMetadataDictionary.d.ts} +0 -0
@@ -56,6 +56,7 @@ var ExpressionFactory_1 = require("../factories/ExpressionFactory");
56
56
  var IdentifierFactory_1 = require("../factories/IdentifierFactory");
57
57
  var MetadataCollection_1 = require("../factories/MetadataCollection");
58
58
  var MetadataFactory_1 = require("../factories/MetadataFactory");
59
+ var StatementFactory_1 = require("../factories/StatementFactory");
59
60
  var TypeFactory_1 = require("../factories/TypeFactory");
60
61
  var ValueFactory_1 = require("../factories/ValueFactory");
61
62
  var Metadata_1 = require("../metadata/Metadata");
@@ -71,6 +72,7 @@ var UnionExplorer_1 = require("./helpers/UnionExplorer");
71
72
  var check_native_1 = require("./internal/check_native");
72
73
  var decode_union_object_1 = require("./internal/decode_union_object");
73
74
  var feature_object_entries_1 = require("./internal/feature_object_entries");
75
+ var wrap_metadata_rest_tuple_1 = require("./internal/wrap_metadata_rest_tuple");
74
76
  var StringifyProgrammer;
75
77
  (function (StringifyProgrammer) {
76
78
  StringifyProgrammer.generate = function (project, modulo) {
@@ -80,338 +82,396 @@ var StringifyProgrammer;
80
82
  };
81
83
  StringifyProgrammer.write = function (project) { return function (modulo) {
82
84
  var importer = new FunctionImporeter_1.FunctionImporter();
83
- return FeatureProgrammer_1.FeatureProgrammer.analyze(project)(__assign(__assign({}, configure(project)(importer)), { addition: function (collection) {
84
- var isFunctors = IsProgrammer_1.IsProgrammer.write_functors(project)(importer)(collection);
85
- var isUnioners = IsProgrammer_1.IsProgrammer.write_unioners(project)(importer)(collection);
86
- return __spreadArray(__spreadArray(__spreadArray([], __read(importer.declare(modulo)), false), __read(isFunctors.filter(function (_, i) {
87
- return importer.hasLocal("$io".concat(i));
88
- })), false), __read(isUnioners.filter(function (_, i) {
89
- return importer.hasLocal("$iu".concat(i));
90
- })), false);
91
- } }))(importer);
85
+ var config = configure(project)(importer);
86
+ return FeatureProgrammer_1.FeatureProgrammer.write(project)(__assign(__assign({}, config), { addition: function (collection) { return __spreadArray(__spreadArray([], __read(IsProgrammer_1.IsProgrammer.write_function_statements(project)(importer)(collection)), false), __read(importer.declare(modulo)), false); } }))(importer);
92
87
  }; };
93
- var decode = function (project, importer) {
94
- return function (input, meta, explore, tags) {
95
- var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e;
96
- if (meta.any === true)
97
- return wrap_required(input, meta, explore)(wrap_functional(input, meta, explore)(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("JSON.stringify"), undefined, [input])));
98
- var size = meta.size();
99
- if (size === 0 &&
100
- (meta.required === false || meta.nullable === true)) {
101
- if (meta.required === false && meta.nullable === true)
102
- return explore.from === "array"
103
- ? typescript_1.default.factory.createStringLiteral("null")
104
- : typescript_1.default.factory.createConditionalExpression(typescript_1.default.factory.createStrictEquality(typescript_1.default.factory.createNull(), input), undefined, typescript_1.default.factory.createStringLiteral("null"), undefined, typescript_1.default.factory.createIdentifier("undefined"));
105
- else if (meta.required === false)
106
- return explore.from === "array"
107
- ? typescript_1.default.factory.createStringLiteral("null")
108
- : typescript_1.default.factory.createIdentifier("undefined");
109
- else
110
- return typescript_1.default.factory.createStringLiteral("null");
111
- }
112
- var unions = [];
113
- if (meta.resolved !== null)
114
- if (size === 1)
115
- return decode_to_json(project, importer)(input, meta.resolved, explore, tags);
116
- else
117
- unions.push({
118
- type: "resolved",
119
- is: function () { return IsProgrammer_1.IsProgrammer.decode_to_json(false)(input); },
120
- value: function () {
121
- return decode_to_json(project, importer)(input, meta.resolved, explore, tags);
122
- },
123
- });
124
- else if (meta.functional === true)
125
- unions.push({
126
- type: "functional",
127
- is: function () { return IsProgrammer_1.IsProgrammer.decode_functional(input); },
128
- value: function () { return decode_functional(explore); },
88
+ var write_array_functions = function (config) {
89
+ return function (importer) {
90
+ return function (collection) {
91
+ return collection
92
+ .arrays()
93
+ .filter(function (a) { return a.recursive; })
94
+ .map(function (array, i) {
95
+ return StatementFactory_1.StatementFactory.constant("".concat(config.prefix, "a").concat(i), typescript_1.default.factory.createArrowFunction(undefined, undefined, FeatureProgrammer_1.FeatureProgrammer.parameterDeclarations(config)(TypeFactory_1.TypeFactory.keyword("any"))(typescript_1.default.factory.createIdentifier("input")), TypeFactory_1.TypeFactory.keyword("any"), undefined, decode_array_inline(config)(importer)(typescript_1.default.factory.createIdentifier("input"), array, {
96
+ tracable: config.trace,
97
+ source: "function",
98
+ from: "array",
99
+ postfix: "",
100
+ })));
129
101
  });
130
- if (meta.templates.length ||
131
- ArrayUtil_1.ArrayUtil.has(meta.constants, function (c) { return c.type === "string"; }))
132
- if (AtomicPredicator_1.AtomicPredicator.template(meta)) {
133
- var partial_1 = Metadata_1.Metadata.initialize();
134
- partial_1.atomics.push("string"),
135
- unions.push({
136
- type: "template literal",
137
- is: function () {
138
- return IsProgrammer_1.IsProgrammer.decode(project, importer)(input, partial_1, explore, [], []);
139
- },
140
- value: function () {
141
- return decode_atomic(project)(importer)(input, "string", explore, tags);
142
- },
143
- });
144
- }
145
- var _loop_1 = function (constant) {
146
- if (AtomicPredicator_1.AtomicPredicator.constant(meta)(constant.type) === false)
147
- return "continue";
148
- else if (constant.type !== "string")
149
- unions.push({
150
- type: "atomic",
151
- is: function () {
152
- return IsProgrammer_1.IsProgrammer.decode(project, importer)(input, (function () {
153
- var partial = Metadata_1.Metadata.initialize();
154
- partial.atomics.push(constant.type);
155
- return partial;
156
- })(), explore, [], []);
157
- },
158
- value: function () {
159
- return decode_atomic(project)(importer)(input, constant.type, explore, tags);
160
- },
161
- });
162
- else if (meta.templates.length === 0)
163
- unions.push({
164
- type: "const string",
165
- is: function () {
166
- return IsProgrammer_1.IsProgrammer.decode(project, importer)(input, (function () {
167
- var partial = Metadata_1.Metadata.initialize();
168
- partial.atomics.push("string");
169
- return partial;
170
- })(), explore, [], []);
171
- },
172
- value: function () {
173
- return decode_constant_string(project)(importer)(input, __spreadArray([], __read(constant.values), false), explore);
174
- },
175
- });
176
102
  };
177
- try {
178
- for (var _f = __values(meta.constants), _g = _f.next(); !_g.done; _g = _f.next()) {
179
- var constant = _g.value;
180
- _loop_1(constant);
181
- }
182
- }
183
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
184
- finally {
185
- try {
186
- if (_g && !_g.done && (_a = _f.return)) _a.call(_f);
187
- }
188
- finally { if (e_1) throw e_1.error; }
189
- }
190
- var _loop_2 = function (type) {
191
- if (AtomicPredicator_1.AtomicPredicator.atomic(meta)(type))
192
- unions.push({
193
- type: "atomic",
194
- is: function () {
195
- return IsProgrammer_1.IsProgrammer.decode(project, importer)(input, (function () {
196
- var partial = Metadata_1.Metadata.initialize();
197
- partial.atomics.push(type);
198
- return partial;
199
- })(), explore, [], []);
200
- },
201
- value: function () {
202
- return decode_atomic(project)(importer)(input, type, explore, tags);
203
- },
103
+ };
104
+ };
105
+ var write_tuple_functions = function (project) {
106
+ return function (config) {
107
+ return function (importer) {
108
+ return function (collection) {
109
+ return collection
110
+ .tuples()
111
+ .filter(function (t) { return t.recursive; })
112
+ .map(function (tuple, i) {
113
+ return StatementFactory_1.StatementFactory.constant("".concat(config.prefix, "t").concat(i), typescript_1.default.factory.createArrowFunction(undefined, undefined, FeatureProgrammer_1.FeatureProgrammer.parameterDeclarations(config)(TypeFactory_1.TypeFactory.keyword("any"))(typescript_1.default.factory.createIdentifier("input")), TypeFactory_1.TypeFactory.keyword("any"), undefined, decode_tuple_inline(project)(config)(importer)(typescript_1.default.factory.createIdentifier("input"), tuple, {
114
+ tracable: config.trace,
115
+ source: "function",
116
+ from: "array",
117
+ postfix: "",
118
+ })));
204
119
  });
120
+ };
205
121
  };
206
- try {
207
- for (var _h = __values(meta.atomics), _j = _h.next(); !_j.done; _j = _h.next()) {
208
- var type = _j.value;
209
- _loop_2(type);
210
- }
211
- }
212
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
213
- finally {
214
- try {
215
- if (_j && !_j.done && (_b = _h.return)) _b.call(_h);
216
- }
217
- finally { if (e_2) throw e_2.error; }
218
- }
219
- var _loop_3 = function (tuple) {
220
- var e_6, _r;
221
- try {
222
- for (var tuple_1 = (e_6 = void 0, __values(tuple)), tuple_1_1 = tuple_1.next(); !tuple_1_1.done; tuple_1_1 = tuple_1.next()) {
223
- var child = tuple_1_1.value;
224
- if (StringifyPredicator_1.StringifyPredicator.undefindable(meta))
225
- throw new Error("Error on typia.stringify(): tuple cannot contain undefined value - (".concat(child.getName(), ")."));
122
+ };
123
+ };
124
+ var decode = function (project) {
125
+ return function (config) {
126
+ return function (importer) {
127
+ return function (input, meta, explore) {
128
+ var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e;
129
+ if (meta.any === true)
130
+ return wrap_required(input, meta, explore)(wrap_functional(input, meta, explore)(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("JSON.stringify"), undefined, [input])));
131
+ var size = meta.size();
132
+ if (size === 0 &&
133
+ (meta.required === false || meta.nullable === true)) {
134
+ if (meta.required === false && meta.nullable === true)
135
+ return explore.from === "array"
136
+ ? typescript_1.default.factory.createStringLiteral("null")
137
+ : typescript_1.default.factory.createConditionalExpression(typescript_1.default.factory.createStrictEquality(typescript_1.default.factory.createNull(), input), undefined, typescript_1.default.factory.createStringLiteral("null"), undefined, typescript_1.default.factory.createIdentifier("undefined"));
138
+ else if (meta.required === false)
139
+ return explore.from === "array"
140
+ ? typescript_1.default.factory.createStringLiteral("null")
141
+ : typescript_1.default.factory.createIdentifier("undefined");
142
+ else
143
+ return typescript_1.default.factory.createStringLiteral("null");
226
144
  }
227
- }
228
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
229
- finally {
145
+ var unions = [];
146
+ if (meta.resolved !== null)
147
+ if (size === 1)
148
+ return decode_to_json(project)(config)(importer)(input, meta.resolved, explore);
149
+ else
150
+ unions.push({
151
+ type: "resolved",
152
+ is: function () { return IsProgrammer_1.IsProgrammer.decode_to_json(false)(input); },
153
+ value: function () {
154
+ return decode_to_json(project)(config)(importer)(input, meta.resolved, explore);
155
+ },
156
+ });
157
+ else if (meta.functional === true)
158
+ unions.push({
159
+ type: "functional",
160
+ is: function () { return IsProgrammer_1.IsProgrammer.decode_functional(input); },
161
+ value: function () { return decode_functional(explore); },
162
+ });
163
+ if (meta.templates.length ||
164
+ ArrayUtil_1.ArrayUtil.has(meta.constants, function (c) { return c.type === "string"; }))
165
+ if (AtomicPredicator_1.AtomicPredicator.template(meta)) {
166
+ var partial_1 = Metadata_1.Metadata.initialize();
167
+ partial_1.atomics.push("string"),
168
+ unions.push({
169
+ type: "template literal",
170
+ is: function () {
171
+ return IsProgrammer_1.IsProgrammer.decode(project)(importer)(input, partial_1, explore, [], []);
172
+ },
173
+ value: function () {
174
+ return decode_atomic(project)(importer)(input, "string", explore);
175
+ },
176
+ });
177
+ }
178
+ var _loop_1 = function (constant) {
179
+ if (AtomicPredicator_1.AtomicPredicator.constant(meta)(constant.type) === false)
180
+ return "continue";
181
+ else if (constant.type !== "string")
182
+ unions.push({
183
+ type: "atomic",
184
+ is: function () {
185
+ return IsProgrammer_1.IsProgrammer.decode(project)(importer)(input, (function () {
186
+ var partial = Metadata_1.Metadata.initialize();
187
+ partial.atomics.push(constant.type);
188
+ return partial;
189
+ })(), explore, [], []);
190
+ },
191
+ value: function () {
192
+ return decode_atomic(project)(importer)(input, constant.type, explore);
193
+ },
194
+ });
195
+ else if (meta.templates.length === 0)
196
+ unions.push({
197
+ type: "const string",
198
+ is: function () {
199
+ return IsProgrammer_1.IsProgrammer.decode(project)(importer)(input, (function () {
200
+ var partial = Metadata_1.Metadata.initialize();
201
+ partial.atomics.push("string");
202
+ return partial;
203
+ })(), explore, [], []);
204
+ },
205
+ value: function () {
206
+ return decode_constant_string(project)(importer)(input, __spreadArray([], __read(constant.values), false), explore);
207
+ },
208
+ });
209
+ };
230
210
  try {
231
- if (tuple_1_1 && !tuple_1_1.done && (_r = tuple_1.return)) _r.call(tuple_1);
211
+ for (var _f = __values(meta.constants), _g = _f.next(); !_g.done; _g = _f.next()) {
212
+ var constant = _g.value;
213
+ _loop_1(constant);
214
+ }
232
215
  }
233
- finally { if (e_6) throw e_6.error; }
234
- }
235
- unions.push({
236
- type: "tuple",
237
- is: function () {
238
- return IsProgrammer_1.IsProgrammer.decode(project, importer)(input, (function () {
239
- var partial = Metadata_1.Metadata.initialize();
240
- partial.tuples.push(tuple);
241
- return partial;
242
- })(), explore, [], []);
243
- },
244
- value: function () {
245
- return decode_tuple(project)(importer)(input, tuple, explore, tags);
246
- },
247
- });
248
- };
249
- try {
250
- for (var _k = __values(meta.tuples), _l = _k.next(); !_l.done; _l = _k.next()) {
251
- var tuple = _l.value;
252
- _loop_3(tuple);
253
- }
254
- }
255
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
256
- finally {
257
- try {
258
- if (_l && !_l.done && (_c = _k.return)) _c.call(_k);
259
- }
260
- finally { if (e_3) throw e_3.error; }
261
- }
262
- if (meta.arrays.length) {
263
- try {
264
- for (var _m = __values(meta.arrays), _o = _m.next(); !_o.done; _o = _m.next()) {
265
- var child = _o.value;
266
- if (StringifyPredicator_1.StringifyPredicator.undefindable(child))
267
- throw new Error("Error on typia.stringify(): array cannot contain undefined value (".concat(child.getName(), ")."));
216
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
217
+ finally {
218
+ try {
219
+ if (_g && !_g.done && (_a = _f.return)) _a.call(_f);
220
+ }
221
+ finally { if (e_1) throw e_1.error; }
268
222
  }
269
- }
270
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
271
- finally {
223
+ var _loop_2 = function (type) {
224
+ if (AtomicPredicator_1.AtomicPredicator.atomic(meta)(type))
225
+ unions.push({
226
+ type: "atomic",
227
+ is: function () {
228
+ return IsProgrammer_1.IsProgrammer.decode(project)(importer)(input, (function () {
229
+ var partial = Metadata_1.Metadata.initialize();
230
+ partial.atomics.push(type);
231
+ return partial;
232
+ })(), explore, [], []);
233
+ },
234
+ value: function () {
235
+ return decode_atomic(project)(importer)(input, type, explore);
236
+ },
237
+ });
238
+ };
272
239
  try {
273
- if (_o && !_o.done && (_d = _m.return)) _d.call(_m);
240
+ for (var _h = __values(meta.atomics), _j = _h.next(); !_j.done; _j = _h.next()) {
241
+ var type = _j.value;
242
+ _loop_2(type);
243
+ }
274
244
  }
275
- finally { if (e_4) throw e_4.error; }
276
- }
277
- var value = meta.arrays.some(function (elem) { return elem.any; })
278
- ? function () {
279
- return typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("JSON.stringify"), undefined, [input]);
245
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
246
+ finally {
247
+ try {
248
+ if (_j && !_j.done && (_b = _h.return)) _b.call(_h);
249
+ }
250
+ finally { if (e_2) throw e_2.error; }
280
251
  }
281
- : function () {
282
- return explore_arrays(project)(importer)(input, meta.arrays, __assign(__assign({}, explore), { from: "array" }), [], []);
252
+ var _loop_3 = function (tuple) {
253
+ var e_6, _r;
254
+ try {
255
+ for (var _s = (e_6 = void 0, __values(tuple.elements)), _t = _s.next(); !_t.done; _t = _s.next()) {
256
+ var child = _t.value;
257
+ if (StringifyPredicator_1.StringifyPredicator.undefindable(meta))
258
+ throw new Error("Error on typia.stringify(): tuple cannot contain undefined value - (".concat(child.getName(), ")."));
259
+ }
260
+ }
261
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
262
+ finally {
263
+ try {
264
+ if (_t && !_t.done && (_r = _s.return)) _r.call(_s);
265
+ }
266
+ finally { if (e_6) throw e_6.error; }
267
+ }
268
+ unions.push({
269
+ type: "tuple",
270
+ is: function () {
271
+ return IsProgrammer_1.IsProgrammer.decode(project)(importer)(input, (function () {
272
+ var partial = Metadata_1.Metadata.initialize();
273
+ partial.tuples.push(tuple);
274
+ return partial;
275
+ })(), explore, [], []);
276
+ },
277
+ value: function () {
278
+ return decode_tuple(project)(config)(importer)(input, tuple, explore);
279
+ },
280
+ });
283
281
  };
284
- unions.push({
285
- type: "array",
286
- is: function () { return ExpressionFactory_1.ExpressionFactory.isArray(input); },
287
- value: value,
288
- });
289
- }
290
- if (meta.natives.length) {
291
- var _loop_4 = function (native) {
292
- unions.push({
293
- type: "object",
294
- is: function () { return (0, check_native_1.check_native)(native)(input); },
295
- value: function () {
296
- return AtomicPredicator_1.AtomicPredicator.native(native)
297
- ? decode_atomic(project)(importer)(input, native.toLowerCase(), explore, tags)
298
- : typescript_1.default.factory.createStringLiteral("{}");
299
- },
300
- });
301
- };
302
- try {
303
- for (var _p = __values(meta.natives), _q = _p.next(); !_q.done; _q = _p.next()) {
304
- var native = _q.value;
305
- _loop_4(native);
306
- }
307
- }
308
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
309
- finally {
310
282
  try {
311
- if (_q && !_q.done && (_e = _p.return)) _e.call(_p);
283
+ for (var _k = __values(meta.tuples), _l = _k.next(); !_l.done; _l = _k.next()) {
284
+ var tuple = _l.value;
285
+ _loop_3(tuple);
286
+ }
312
287
  }
313
- finally { if (e_5) throw e_5.error; }
314
- }
315
- }
316
- if (meta.sets.length)
317
- unions.push({
318
- type: "object",
319
- is: function () { return ExpressionFactory_1.ExpressionFactory.isInstanceOf("Set")(input); },
320
- value: function () { return typescript_1.default.factory.createStringLiteral("{}"); },
321
- });
322
- if (meta.maps.length)
323
- unions.push({
324
- type: "object",
325
- is: function () { return ExpressionFactory_1.ExpressionFactory.isInstanceOf("Map")(input); },
326
- value: function () { return typescript_1.default.factory.createStringLiteral("{}"); },
327
- });
328
- if (meta.objects.length)
329
- unions.push({
330
- type: "object",
331
- is: function () {
332
- return ExpressionFactory_1.ExpressionFactory.isObject({
333
- checkNull: true,
334
- checkArray: meta.objects.some(function (obj) {
335
- return obj.properties.every(function (prop) {
336
- return !prop.key.isSoleLiteral() ||
337
- !prop.value.required;
338
- });
339
- }),
340
- })(input);
341
- },
342
- value: function () {
343
- return meta.isParentResolved() === false &&
344
- meta.objects.length === 1 &&
345
- meta.objects[0]._Is_simple()
346
- ? (function () {
347
- var obj = meta.objects[0];
348
- var entries = (0, feature_object_entries_1.feature_object_entries)({
349
- decoder: decode(project, importer),
350
- trace: false,
351
- path: false,
352
- })(importer)(obj)(input);
353
- return StringifyJoinder_1.StringifyJoiner.object(importer)(input, entries);
354
- })()
355
- : explore_objects(importer)(input, meta, __assign(__assign({}, explore), { from: "object" }));
356
- },
357
- });
358
- var wrapper = function (output) {
359
- return wrap_required(input, meta, explore)(wrap_nullable(input, meta)(output));
288
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
289
+ finally {
290
+ try {
291
+ if (_l && !_l.done && (_c = _k.return)) _c.call(_k);
292
+ }
293
+ finally { if (e_3) throw e_3.error; }
294
+ }
295
+ if (meta.arrays.length) {
296
+ try {
297
+ for (var _m = __values(meta.arrays), _o = _m.next(); !_o.done; _o = _m.next()) {
298
+ var child = _o.value;
299
+ if (StringifyPredicator_1.StringifyPredicator.undefindable(child.value))
300
+ throw new Error("Error on typia.stringify(): array cannot contain undefined value (".concat(child.value.getName(), ")."));
301
+ }
302
+ }
303
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
304
+ finally {
305
+ try {
306
+ if (_o && !_o.done && (_d = _m.return)) _d.call(_m);
307
+ }
308
+ finally { if (e_4) throw e_4.error; }
309
+ }
310
+ var value = meta.arrays.length === 1
311
+ ? function () {
312
+ return decode_array(config)(importer)(input, meta.arrays[0], __assign(__assign({}, explore), { from: "array" }));
313
+ }
314
+ : meta.arrays.some(function (elem) { return elem.value.any; })
315
+ ? function () {
316
+ return typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("JSON.stringify"), undefined, [input]);
317
+ }
318
+ : function () {
319
+ return explore_arrays(project)(config)(importer)(input, meta.arrays, __assign(__assign({}, explore), { from: "array" }));
320
+ };
321
+ unions.push({
322
+ type: "array",
323
+ is: function () { return ExpressionFactory_1.ExpressionFactory.isArray(input); },
324
+ value: value,
325
+ });
326
+ }
327
+ if (meta.natives.length) {
328
+ var _loop_4 = function (native) {
329
+ unions.push({
330
+ type: "object",
331
+ is: function () { return (0, check_native_1.check_native)(native)(input); },
332
+ value: function () {
333
+ return AtomicPredicator_1.AtomicPredicator.native(native)
334
+ ? decode_atomic(project)(importer)(input, native.toLowerCase(), explore)
335
+ : typescript_1.default.factory.createStringLiteral("{}");
336
+ },
337
+ });
338
+ };
339
+ try {
340
+ for (var _p = __values(meta.natives), _q = _p.next(); !_q.done; _q = _p.next()) {
341
+ var native = _q.value;
342
+ _loop_4(native);
343
+ }
344
+ }
345
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
346
+ finally {
347
+ try {
348
+ if (_q && !_q.done && (_e = _p.return)) _e.call(_p);
349
+ }
350
+ finally { if (e_5) throw e_5.error; }
351
+ }
352
+ }
353
+ if (meta.sets.length)
354
+ unions.push({
355
+ type: "object",
356
+ is: function () { return ExpressionFactory_1.ExpressionFactory.isInstanceOf("Set")(input); },
357
+ value: function () { return typescript_1.default.factory.createStringLiteral("{}"); },
358
+ });
359
+ if (meta.maps.length)
360
+ unions.push({
361
+ type: "object",
362
+ is: function () { return ExpressionFactory_1.ExpressionFactory.isInstanceOf("Map")(input); },
363
+ value: function () { return typescript_1.default.factory.createStringLiteral("{}"); },
364
+ });
365
+ if (meta.objects.length)
366
+ unions.push({
367
+ type: "object",
368
+ is: function () {
369
+ return ExpressionFactory_1.ExpressionFactory.isObject({
370
+ checkNull: true,
371
+ checkArray: meta.objects.some(function (obj) {
372
+ return obj.properties.every(function (prop) {
373
+ return !prop.key.isSoleLiteral() ||
374
+ !prop.value.required;
375
+ });
376
+ }),
377
+ })(input);
378
+ },
379
+ value: function () {
380
+ return meta.isParentResolved() === false &&
381
+ meta.objects.length === 1 &&
382
+ meta.objects[0]._Is_simple()
383
+ ? (function () {
384
+ var obj = meta.objects[0];
385
+ var entries = (0, feature_object_entries_1.feature_object_entries)({
386
+ decoder: function () {
387
+ return decode(project)(config)(importer);
388
+ },
389
+ trace: false,
390
+ path: false,
391
+ })(importer)(obj)(typescript_1.default.factory.createAsExpression(input, TypeFactory_1.TypeFactory.keyword("any")));
392
+ return StringifyJoinder_1.StringifyJoiner.object(importer)(typescript_1.default.factory.createAsExpression(input, TypeFactory_1.TypeFactory.keyword("any")), entries);
393
+ })()
394
+ : explore_objects(config)(importer)(input, meta, __assign(__assign({}, explore), { from: "object" }));
395
+ },
396
+ });
397
+ var wrapper = function (output) {
398
+ return wrap_required(input, meta, explore)(wrap_nullable(input, meta)(output));
399
+ };
400
+ if (unions.length === 0)
401
+ return typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("JSON.stringify"), undefined, [input]);
402
+ else if (unions.length === 1)
403
+ return wrapper(unions[0].value());
404
+ return wrapper(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createArrowFunction(undefined, undefined, [], undefined, undefined, iterate(importer, input, unions, meta.getName())), undefined, undefined));
405
+ };
360
406
  };
361
- if (unions.length === 0)
362
- return typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("JSON.stringify"), undefined, [input]);
363
- else if (unions.length === 1)
364
- return wrapper(unions[0].value());
365
- return wrapper(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createArrowFunction(undefined, undefined, [], undefined, undefined, iterate(importer, input, unions, meta.getName())), undefined, undefined));
366
407
  };
367
408
  };
368
- var decode_array = function (project) { return function (importer) {
369
- return FeatureProgrammer_1.FeatureProgrammer.decode_array(configure(project)(importer))(importer)(StringifyJoinder_1.StringifyJoiner.array);
370
- }; };
371
409
  var decode_object = function (importer) {
372
410
  return FeatureProgrammer_1.FeatureProgrammer.decode_object({
373
411
  trace: false,
374
412
  path: false,
375
- functors: FUNCTORS,
413
+ prefix: PREFIX,
376
414
  })(importer);
377
415
  };
378
- var decode_tuple = function (project) {
416
+ var decode_array = function (config) {
379
417
  return function (importer) {
380
- return function (input, tuple, explore, tags) {
381
- var children = tuple
382
- .filter(function (elem) { return elem.rest === null; })
383
- .map(function (elem, index) {
384
- return decode(project, importer)(typescript_1.default.factory.createElementAccessExpression(input, index), elem, __assign(__assign({}, explore), { from: "array" }), tags);
385
- });
386
- var rest = (function () {
387
- if (tuple.length === 0)
388
- return null;
389
- var last = tuple[tuple.length - 1];
390
- if (last.rest === null)
391
- return null;
392
- var code = decode(project, importer)(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(input)("slice"), undefined, [typescript_1.default.factory.createNumericLiteral(tuple.length - 1)]), (function () {
393
- var wrapper = Metadata_1.Metadata.initialize();
394
- wrapper.arrays.push(tuple[tuple.length - 1].rest);
395
- return wrapper;
396
- })(), __assign(__assign({}, explore), { start: tuple.length - 1 }), tags);
397
- return typescript_1.default.factory.createCallExpression(importer.use("rest"), undefined, [code]);
398
- })();
399
- return StringifyJoinder_1.StringifyJoiner.tuple(children, rest);
418
+ return function (input, array, explore) {
419
+ return array.recursive
420
+ ? typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier(importer.useLocal("".concat(config.prefix, "a").concat(array.index))), undefined, FeatureProgrammer_1.FeatureProgrammer.argumentsArray(config)(__assign(__assign({}, explore), { source: "function", from: "array" }))(input))
421
+ : decode_array_inline(config)(importer)(input, array, explore);
422
+ };
423
+ };
424
+ };
425
+ var decode_array_inline = function (config) {
426
+ return function (importer) {
427
+ return function (input, array, explore) {
428
+ return FeatureProgrammer_1.FeatureProgrammer.decode_array(config)(importer)(StringifyJoinder_1.StringifyJoiner.array)(input, array, explore, [], []);
429
+ };
430
+ };
431
+ };
432
+ var decode_tuple = function (project) {
433
+ return function (config) {
434
+ return function (importer) {
435
+ return function (input, tuple, explore) {
436
+ return tuple.recursive
437
+ ? typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier(importer.useLocal("".concat(config.prefix, "t").concat(tuple.index))), undefined, FeatureProgrammer_1.FeatureProgrammer.argumentsArray(config)(__assign(__assign({}, explore), { source: "function" }))(input))
438
+ : decode_tuple_inline(project)(config)(importer)(input, tuple, explore);
439
+ };
440
+ };
441
+ };
442
+ };
443
+ var decode_tuple_inline = function (project) {
444
+ return function (config) {
445
+ return function (importer) {
446
+ return function (input, tuple, explore) {
447
+ var children = tuple.elements
448
+ .filter(function (elem) { return elem.rest === null; })
449
+ .map(function (elem, index) {
450
+ return decode(project)(config)(importer)(typescript_1.default.factory.createElementAccessExpression(input, index), elem, __assign(__assign({}, explore), { from: "array", postfix: explore.postfix.length
451
+ ? "".concat(explore.postfix.slice(0, -1), "[").concat(index, "]\"")
452
+ : "\"[".concat(index, "]\"") }));
453
+ });
454
+ var rest = (function () {
455
+ if (tuple.elements.length === 0)
456
+ return null;
457
+ var last = tuple.elements.at(-1);
458
+ if (last.rest === null)
459
+ return null;
460
+ var code = decode(project)(config)(importer)(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(input)("slice"), undefined, [
461
+ typescript_1.default.factory.createNumericLiteral(tuple.elements.length - 1),
462
+ ]), (0, wrap_metadata_rest_tuple_1.wrap_metadata_rest_tuple)(tuple.elements.at(-1).rest), __assign(__assign({}, explore), { start: tuple.elements.length - 1 }));
463
+ return typescript_1.default.factory.createCallExpression(importer.use("rest"), undefined, [code]);
464
+ })();
465
+ return StringifyJoinder_1.StringifyJoiner.tuple(children, rest);
466
+ };
400
467
  };
401
468
  };
402
469
  };
403
470
  var decode_atomic = function (project) {
404
471
  return function (importer) {
405
- return function (input, type, explore, tagList) {
472
+ return function (input, type, explore) {
406
473
  if (type === "string")
407
- if (tagList.find(function (tag) { return tag.kind === "format"; }) !== undefined)
408
- return [
409
- typescript_1.default.factory.createStringLiteral('"'),
410
- input,
411
- typescript_1.default.factory.createStringLiteral('"'),
412
- ].reduce(function (x, y) { return typescript_1.default.factory.createAdd(x, y); });
413
- else
414
- return typescript_1.default.factory.createCallExpression(importer.use("string"), undefined, [input]);
474
+ return typescript_1.default.factory.createCallExpression(importer.use("string"), undefined, [input]);
415
475
  else if (type === "number" &&
416
476
  OptionPredicator_1.OptionPredicator.numeric(project.options))
417
477
  input = typescript_1.default.factory.createCallExpression(importer.use("number"), undefined, [input]);
@@ -431,13 +491,17 @@ var StringifyProgrammer;
431
491
  typescript_1.default.factory.createStringLiteral('"'),
432
492
  ].reduce(function (x, y) { return typescript_1.default.factory.createAdd(x, y); });
433
493
  else
434
- return decode_atomic(project)(importer)(input, "string", explore, []);
494
+ return decode_atomic(project)(importer)(input, "string", explore);
435
495
  };
436
496
  };
437
497
  };
438
- var decode_to_json = function (project, importer) {
439
- return function (input, resolved, explore, tags) {
440
- return decode(project, importer)(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(input)("toJSON"), undefined, []), resolved, explore, tags);
498
+ var decode_to_json = function (project) {
499
+ return function (config) {
500
+ return function (importer) {
501
+ return function (input, resolved, explore) {
502
+ return decode(project)(config)(importer)(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(input)("toJSON"), undefined, []), resolved, explore);
503
+ };
504
+ };
441
505
  };
442
506
  };
443
507
  var decode_functional = function (explore) {
@@ -445,22 +509,51 @@ var StringifyProgrammer;
445
509
  ? typescript_1.default.factory.createStringLiteral("null")
446
510
  : typescript_1.default.factory.createIdentifier("undefined");
447
511
  };
448
- var explore_arrays = function (project) { return function (importer) {
449
- return UnionExplorer_1.UnionExplorer.array({
450
- checker: IsProgrammer_1.IsProgrammer.decode(project, importer),
451
- decoder: decode_array(project)(importer),
452
- empty: typescript_1.default.factory.createStringLiteral("[]"),
453
- success: typescript_1.default.factory.createTrue(),
454
- failure: function (input, expected) {
455
- return create_throw_error(importer, input, expected);
456
- },
457
- });
458
- }; };
459
- var explore_objects = function (importer) {
460
- return function (input, meta, explore) {
461
- if (meta.objects.length === 1)
462
- return decode_object(importer)(input, meta.objects[0], explore);
463
- return typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier("".concat(UNIONERS).concat(meta.union_index)), undefined, [input]);
512
+ var explore_objects = function (config) {
513
+ return function (importer) {
514
+ return function (input, meta, explore) {
515
+ return meta.objects.length === 1
516
+ ? decode_object(importer)(input, meta.objects[0], explore)
517
+ : typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier(importer.useLocal("".concat(PREFIX, "u").concat(meta.union_index))), undefined, FeatureProgrammer_1.FeatureProgrammer.argumentsArray(config)(explore)(input));
518
+ };
519
+ };
520
+ };
521
+ var explore_arrays = function (project) {
522
+ return function (config) {
523
+ return function (importer) {
524
+ return function (input, elements, explore) {
525
+ return explore_array_like_union_types(config)(importer)(UnionExplorer_1.UnionExplorer.array({
526
+ checker: IsProgrammer_1.IsProgrammer.decode(project)(importer),
527
+ decoder: decode_array(config)(importer),
528
+ empty: typescript_1.default.factory.createStringLiteral("[]"),
529
+ success: typescript_1.default.factory.createTrue(),
530
+ failure: function (input, expected) {
531
+ return create_throw_error(importer)(expected)(input);
532
+ },
533
+ }))(input, elements, explore);
534
+ };
535
+ };
536
+ };
537
+ };
538
+ var explore_array_like_union_types = function (config) {
539
+ return function (importer) {
540
+ return function (factory) {
541
+ return function (input, elements, explore) {
542
+ var arrow = function (parameters) {
543
+ return function (explore) {
544
+ return function (input) {
545
+ return factory(parameters)(input, elements, explore, [], []);
546
+ };
547
+ };
548
+ };
549
+ if (elements.every(function (e) { return e.recursive === false; }))
550
+ typescript_1.default.factory.createCallExpression(arrow([])(explore)(input), undefined, []);
551
+ explore = __assign(__assign({}, explore), { source: "function", from: "array" });
552
+ return typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier(importer.emplaceUnion(config.prefix, elements.map(function (e) { return e.name; }).join(" | "), function () {
553
+ return arrow(FeatureProgrammer_1.FeatureProgrammer.parameterDeclarations(config)(TypeFactory_1.TypeFactory.keyword("any"))(typescript_1.default.factory.createIdentifier("input")))(__assign(__assign({}, explore), { postfix: "" }))(typescript_1.default.factory.createIdentifier("input"));
554
+ })), undefined, FeatureProgrammer_1.FeatureProgrammer.argumentsArray(config)(explore)(input));
555
+ };
556
+ };
464
557
  };
465
558
  };
466
559
  var wrap_required = function (input, meta, explore) {
@@ -490,27 +583,46 @@ var StringifyProgrammer;
490
583
  return typescript_1.default.factory.createBlock(__spreadArray(__spreadArray([], __read(unions.map(function (u) {
491
584
  return typescript_1.default.factory.createIfStatement(u.is(), typescript_1.default.factory.createReturnStatement(u.value()));
492
585
  })), false), [
493
- create_throw_error(importer, input, expected),
586
+ create_throw_error(importer)(expected)(input),
494
587
  ], false), true);
495
588
  };
496
- var FUNCTORS = "$so";
497
- var UNIONERS = "$su";
589
+ var PREFIX = "$s";
498
590
  var configure = function (project) {
499
- return function (importer) { return ({
500
- types: {
501
- input: function (type, name) {
502
- return typescript_1.default.factory.createTypeReferenceNode(name !== null && name !== void 0 ? name : TypeFactory_1.TypeFactory.getFullName(project.checker)(type));
591
+ return function (importer) {
592
+ var config = {
593
+ types: {
594
+ input: function (type, name) {
595
+ return typescript_1.default.factory.createTypeReferenceNode(name !== null && name !== void 0 ? name : TypeFactory_1.TypeFactory.getFullName(project.checker)(type));
596
+ },
597
+ output: function () { return TypeFactory_1.TypeFactory.keyword("string"); },
503
598
  },
504
- output: function () { return TypeFactory_1.TypeFactory.keyword("string"); },
505
- },
506
- functors: FUNCTORS,
507
- unioners: UNIONERS,
508
- trace: false,
509
- path: false,
510
- initializer: initializer,
511
- decoder: decode(project, importer),
512
- objector: OBJECTOR(project, importer),
513
- }); };
599
+ prefix: PREFIX,
600
+ trace: false,
601
+ path: false,
602
+ initializer: initializer,
603
+ decoder: function () { return decode(project)(config)(importer); },
604
+ objector: {
605
+ checker: function () { return function (input, meta, explore) {
606
+ return IsProgrammer_1.IsProgrammer.decode(project)(importer)(input, meta, explore, [], []);
607
+ }; },
608
+ decoder: function () { return decode_object(importer); },
609
+ joiner: StringifyJoinder_1.StringifyJoiner.object(importer),
610
+ unionizer: (0, decode_union_object_1.decode_union_object)(IsProgrammer_1.IsProgrammer.decode_object(importer))(decode_object(importer))(function (exp) { return exp; })(function (value, expected) {
611
+ return create_throw_error(importer)(expected)(value);
612
+ }),
613
+ failure: function (input, expected) {
614
+ return create_throw_error(importer)(expected)(input);
615
+ },
616
+ },
617
+ generator: {
618
+ arrays: function () { return write_array_functions(config)(importer); },
619
+ tuples: function () {
620
+ return write_tuple_functions(project)(config)(importer);
621
+ },
622
+ },
623
+ };
624
+ return config;
625
+ };
514
626
  };
515
627
  var initializer = function (_a) {
516
628
  var checker = _a.checker;
@@ -519,6 +631,7 @@ var StringifyProgrammer;
519
631
  var meta = MetadataFactory_1.MetadataFactory.analyze(checker)({
520
632
  resolve: true,
521
633
  constant: true,
634
+ absorb: true,
522
635
  validate: function (meta) {
523
636
  if (meta.atomics.find(function (str) { return str === "bigint"; }))
524
637
  throw new Error(NO_BIGINT);
@@ -527,24 +640,17 @@ var StringifyProgrammer;
527
640
  return [collection, meta];
528
641
  };
529
642
  };
530
- var OBJECTOR = function (project, importer) { return ({
531
- checker: IsProgrammer_1.IsProgrammer.decode(project, importer),
532
- decoder: decode_object(importer),
533
- joiner: StringifyJoinder_1.StringifyJoiner.object(importer),
534
- unionizer: (0, decode_union_object_1.decode_union_object)(IsProgrammer_1.IsProgrammer.decode_object(importer))(decode_object(importer))(function (exp) { return exp; })(function (value, expected) {
535
- return create_throw_error(importer, value, expected);
536
- }),
537
- failure: function (input, expected) {
538
- return create_throw_error(importer, input, expected);
539
- },
540
- }); };
541
- var create_throw_error = function (importer, value, expected) {
542
- return typescript_1.default.factory.createExpressionStatement(typescript_1.default.factory.createCallExpression(importer.use("throws"), [], [
543
- typescript_1.default.factory.createObjectLiteralExpression([
544
- typescript_1.default.factory.createPropertyAssignment("expected", typescript_1.default.factory.createStringLiteral(expected)),
545
- typescript_1.default.factory.createPropertyAssignment("value", value),
546
- ], true),
547
- ]));
643
+ var create_throw_error = function (importer) {
644
+ return function (expected) {
645
+ return function (value) {
646
+ return typescript_1.default.factory.createExpressionStatement(typescript_1.default.factory.createCallExpression(importer.use("throws"), [], [
647
+ typescript_1.default.factory.createObjectLiteralExpression([
648
+ typescript_1.default.factory.createPropertyAssignment("expected", typescript_1.default.factory.createStringLiteral(expected)),
649
+ typescript_1.default.factory.createPropertyAssignment("value", value),
650
+ ], true),
651
+ ]));
652
+ };
653
+ };
548
654
  };
549
655
  })(StringifyProgrammer = exports.StringifyProgrammer || (exports.StringifyProgrammer = {}));
550
656
  var NO_BIGINT = "Error on typia.stringify(): does not allow bigint type.";