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,9 +56,10 @@ 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
- var Metadata_1 = require("../metadata/Metadata");
62
+ var MetadataTuple_1 = require("../metadata/MetadataTuple");
62
63
  var FeatureProgrammer_1 = require("./FeatureProgrammer");
63
64
  var AtomicPredicator_1 = require("./helpers/AtomicPredicator");
64
65
  var OptionPredicator_1 = require("./helpers/OptionPredicator");
@@ -70,32 +71,74 @@ var check_native_1 = require("./internal/check_native");
70
71
  var check_number_1 = require("./internal/check_number");
71
72
  var check_string_1 = require("./internal/check_string");
72
73
  var check_template_1 = require("./internal/check_template");
73
- var check_union_tuple_1 = require("./internal/check_union_tuple");
74
74
  var decode_union_object_1 = require("./internal/decode_union_object");
75
+ var wrap_metadata_rest_tuple_1 = require("./internal/wrap_metadata_rest_tuple");
75
76
  var CheckerProgrammer;
76
77
  (function (CheckerProgrammer) {
77
78
  CheckerProgrammer.write = function (project) {
78
79
  return function (config) {
79
80
  return function (importer) {
80
- return FeatureProgrammer_1.FeatureProgrammer.analyze(project)(configure(project)(config)(importer))(importer);
81
+ return FeatureProgrammer_1.FeatureProgrammer.write(project)(configure(project)(config)(importer))(importer);
81
82
  };
82
83
  };
83
84
  };
84
- CheckerProgrammer.write_functors = function (project) {
85
+ CheckerProgrammer.write_object_functions = function (project) {
85
86
  return function (config) {
86
87
  return function (importer) {
87
- return FeatureProgrammer_1.FeatureProgrammer.write_functors(configure(project)(config)(importer))(importer);
88
+ return FeatureProgrammer_1.FeatureProgrammer.write_object_functions(configure(project)(config)(importer))(importer);
88
89
  };
89
90
  };
90
91
  };
91
- CheckerProgrammer.write_unioners = function (project, config, importer) {
92
- return FeatureProgrammer_1.FeatureProgrammer.write_unioners(configure(project)(__assign(__assign({}, config), { numeric: false }))(importer))(importer);
92
+ CheckerProgrammer.write_union_functions = function (project) {
93
+ return function (config) {
94
+ return function (importer) {
95
+ return FeatureProgrammer_1.FeatureProgrammer.write_union_functions(configure(project)(__assign(__assign({}, config), { numeric: false }))(importer));
96
+ };
97
+ };
98
+ };
99
+ CheckerProgrammer.write_array_functions = function (project) {
100
+ return function (config) {
101
+ return function (importer) {
102
+ return function (collection) {
103
+ return collection
104
+ .arrays()
105
+ .filter(function (a) { return a.recursive; })
106
+ .map(function (array, i) {
107
+ 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(project)(config)(importer)(typescript_1.default.factory.createIdentifier("input"), array, {
108
+ tracable: config.trace,
109
+ source: "function",
110
+ from: "array",
111
+ postfix: "",
112
+ }, [], [])));
113
+ });
114
+ };
115
+ };
116
+ };
117
+ };
118
+ CheckerProgrammer.write_tuple_functions = function (project) {
119
+ return function (config) {
120
+ return function (importer) {
121
+ return function (collection) {
122
+ return collection
123
+ .tuples()
124
+ .filter(function (t) { return t.recursive; })
125
+ .map(function (tuple, i) {
126
+ 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, {
127
+ tracable: config.trace,
128
+ source: "function",
129
+ from: "array",
130
+ postfix: "",
131
+ }, [], [])));
132
+ });
133
+ };
134
+ };
135
+ };
93
136
  };
94
137
  var configure = function (project) {
95
138
  return function (config) {
96
139
  return function (importer) {
97
- var _a, _b, _c;
98
- var output = {
140
+ var _a;
141
+ return ({
99
142
  types: {
100
143
  input: function () { return TypeFactory_1.TypeFactory.keyword("any"); },
101
144
  output: function (type, name) {
@@ -104,8 +147,7 @@ var CheckerProgrammer;
104
147
  },
105
148
  trace: config.trace,
106
149
  path: config.path,
107
- functors: config.functors,
108
- unioners: config.unioners,
150
+ prefix: config.prefix,
109
151
  initializer: function (_a) {
110
152
  var checker = _a.checker;
111
153
  return function (type) {
@@ -113,20 +155,26 @@ var CheckerProgrammer;
113
155
  var meta = MetadataFactory_1.MetadataFactory.analyze(checker)({
114
156
  resolve: false,
115
157
  constant: true,
158
+ absorb: true,
159
+ validate: function (meta) {
160
+ if (meta.arrays.length > 1 &&
161
+ meta.arrays.some(function (a) { return a.recursive; }))
162
+ throw new Error("Repeated union array types are not supported yet.");
163
+ },
116
164
  })(collection)(type);
117
165
  return [collection, meta];
118
166
  };
119
167
  },
120
168
  addition: config.addition,
121
- decoder: (_a = config.decoder) !== null && _a !== void 0 ? _a : CheckerProgrammer.decode(project)(config)(importer),
169
+ decoder: function () { var _a, _b; return (_b = (_a = config.decoder) === null || _a === void 0 ? void 0 : _a.call(config)) !== null && _b !== void 0 ? _b : CheckerProgrammer.decode(project)(config)(importer); },
122
170
  objector: {
123
- checker: (_b = config.decoder) !== null && _b !== void 0 ? _b : CheckerProgrammer.decode(project)(config)(importer),
124
- decoder: CheckerProgrammer.decode_object(config)(importer),
171
+ checker: function () { var _a, _b; return (_b = (_a = config.decoder) === null || _a === void 0 ? void 0 : _a.call(config)) !== null && _b !== void 0 ? _b : CheckerProgrammer.decode(project)(config)(importer); },
172
+ decoder: function () { return CheckerProgrammer.decode_object(config)(importer); },
125
173
  joiner: config.joiner.object,
126
174
  unionizer: config.equals
127
175
  ? (0, decode_union_object_1.decode_union_object)(CheckerProgrammer.decode_object(config)(importer))(function (input, obj, explore) {
128
176
  return CheckerProgrammer.decode_object(config)(importer)(input, obj, __assign(__assign({}, explore), { tracable: true }));
129
- })((_c = config.joiner.is) !== null && _c !== void 0 ? _c : (function (expr) { return expr; }))(function (value, expected) {
177
+ })((_a = config.joiner.is) !== null && _a !== void 0 ? _a : (function (expr) { return expr; }))(function (value, expected) {
130
178
  return typescript_1.default.factory.createReturnStatement(config.joiner.failure(value, expected));
131
179
  })
132
180
  : function (input, targets, explore) {
@@ -143,12 +191,16 @@ var CheckerProgrammer;
143
191
  full: config.joiner.full,
144
192
  type: TypeFactory_1.TypeFactory.keyword("boolean"),
145
193
  },
146
- };
147
- if (config.numeric === true)
148
- output.generator = {
149
- unioners: FeatureProgrammer_1.FeatureProgrammer.write_unioners(configure(project)(__assign(__assign({}, config), { numeric: false }))(importer))(importer),
150
- };
151
- return output;
194
+ generator: {
195
+ unions: config.numeric
196
+ ? function () {
197
+ return FeatureProgrammer_1.FeatureProgrammer.write_union_functions(configure(project)(__assign(__assign({}, config), { numeric: false }))(importer));
198
+ }
199
+ : undefined,
200
+ arrays: function () { return CheckerProgrammer.write_array_functions(project)(config)(importer); },
201
+ tuples: function () { return CheckerProgrammer.write_tuple_functions(project)(config)(importer); },
202
+ },
203
+ });
152
204
  };
153
205
  };
154
206
  };
@@ -168,8 +220,7 @@ var CheckerProgrammer;
168
220
  : typescript_1.default.factory.createIdentifier(value.toString());
169
221
  };
170
222
  var checkOptional = meta.empty() || meta.isUnionBucket();
171
- if (checkOptional ||
172
- meta.nullable)
223
+ if (checkOptional || meta.nullable)
173
224
  (meta.nullable ? add : create_add(top)(input))(meta.nullable, ValueFactory_1.ValueFactory.NULL());
174
225
  if (checkOptional || !meta.required)
175
226
  (meta.required ? create_add(top)(input) : add)(!meta.required, ValueFactory_1.ValueFactory.UNDEFINED());
@@ -290,25 +341,25 @@ var CheckerProgrammer;
290
341
  if (meta.maps.some(function (elem) { return elem.key.any && elem.value.any; }))
291
342
  install(null);
292
343
  else
293
- install(explore_maps(project)(config)(importer)(input, meta.maps.map(function (m) { return [m.key, m.value]; }), __assign(__assign({}, explore), { from: "array" }), [], []));
344
+ install(explore_maps(project)(config)(importer)(input, meta.maps, __assign(__assign({}, explore), { from: "array" }), [], []));
294
345
  }
295
346
  if (meta.tuples.length + meta.arrays.length > 0) {
296
- var install = prepare(config.atomist(explore)((0, check_array_1.check_array)(importer)(meta.tuples.length === 0 ? metaTags : [])(jsDocTags)(input))(input), __spreadArray(__spreadArray([], __read(meta.tuples), false), __read(meta.arrays), false).map(function (elem) {
297
- return Array.isArray(elem)
298
- ? "[".concat(elem
299
- .map(function (elem) { return elem.getName(); })
300
- .join(", "), "]")
301
- : "Array<".concat(elem.getName(), ">");
302
- })
347
+ var install = prepare(config.atomist(explore)((0, check_array_1.check_array)(importer)(meta.tuples.length === 0 ? metaTags : [])(jsDocTags)(input))(input), __spreadArray(__spreadArray([], __read(meta.tuples), false), __read(meta.arrays), false).map(function (elem) { return elem.name; })
303
348
  .join(" | "));
304
349
  if (meta.arrays.length === 0)
305
- install(explore_tuples(project)(config)(importer)(input, meta.tuples, __assign(__assign({}, explore), { from: "array" }), metaTags, jsDocTags));
306
- else if (meta.arrays.some(function (elem) { return elem.any; }))
350
+ if (meta.tuples.length === 1)
351
+ install(decode_tuple(project)(config)(importer)(input, meta.tuples[0], __assign(__assign({}, explore), { from: "array" }), metaTags, jsDocTags));
352
+ else
353
+ install(explore_tuples(project)(config)(importer)(input, meta.tuples, __assign(__assign({}, explore), { from: "array" }), metaTags, jsDocTags));
354
+ else if (meta.arrays.some(function (elem) { return elem.value.any; }))
307
355
  install(null);
308
356
  else if (meta.tuples.length === 0)
309
- install(explore_arrays(project, config, importer)(input, meta.arrays, __assign(__assign({}, explore), { from: "array" }), metaTags, jsDocTags));
357
+ if (meta.arrays.length === 1)
358
+ install(decode_array(project)(config)(importer)(input, meta.arrays[0], __assign(__assign({}, explore), { from: "array" }), metaTags, jsDocTags));
359
+ else
360
+ install(explore_arrays(project)(config)(importer)(input, meta.arrays, __assign(__assign({}, explore), { from: "array" }), metaTags, jsDocTags));
310
361
  else
311
- install(explore_arrays_and_tuples(project, config, importer)(input, __spreadArray(__spreadArray([], __read(meta.tuples), false), __read(meta.arrays), false), explore, metaTags, jsDocTags));
362
+ install(explore_arrays_and_tuples(project)(config)(importer)(input, __spreadArray(__spreadArray([], __read(meta.tuples), false), __read(meta.arrays), false), explore, metaTags, jsDocTags));
312
363
  }
313
364
  if (meta.objects.length > 0)
314
365
  prepare(ExpressionFactory_1.ExpressionFactory.isObject({
@@ -361,193 +412,233 @@ var CheckerProgrammer;
361
412
  };
362
413
  };
363
414
  };
364
- CheckerProgrammer.decode_tuple = function (project) {
415
+ CheckerProgrammer.decode_object = function (config) { return function (importer) {
416
+ var func = FeatureProgrammer_1.FeatureProgrammer.decode_object(config)(importer);
417
+ return function (input, obj, explore) {
418
+ obj.validated = true;
419
+ return func(input, obj, explore);
420
+ };
421
+ }; };
422
+ var decode_array = function (project) {
365
423
  return function (config) {
366
424
  return function (importer) {
367
- return function (checkLength) {
368
- return function (input, tuple, explore, tagList, jsDocTags) {
369
- var binaries = tuple
370
- .filter(function (meta) { return meta.rest === null; })
371
- .map(function (meta, index) {
372
- return CheckerProgrammer.decode(project)(config)(importer)(typescript_1.default.factory.createElementAccessExpression(input, index), meta, __assign(__assign({}, explore), { from: "array", postfix: explore.postfix.length
373
- ? "".concat(explore.postfix.slice(0, -1), "[").concat(index, "]\"")
374
- : "[".concat(index, "]") }), tagList, jsDocTags);
375
- });
376
- var rest = tuple.length && tuple[tuple.length - 1].rest !== null
377
- ? CheckerProgrammer.decode(project)(config)(importer)(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(input)("slice"), undefined, [
378
- typescript_1.default.factory.createNumericLiteral(tuple.length - 1),
379
- ]), (function () {
380
- var wrapper = Metadata_1.Metadata.initialize();
381
- wrapper.arrays.push(tuple[tuple.length - 1].rest);
382
- return wrapper;
383
- })(), __assign(__assign({}, explore), { start: tuple.length - 1 }), tagList, jsDocTags)
384
- : null;
385
- var arrayLength = typescript_1.default.factory.createPropertyAccessExpression(input, "length");
386
- return config.combiner(explore)("and")(input, __spreadArray(__spreadArray(__spreadArray([], __read((checkLength && rest === null
387
- ? tuple.every(function (t) { return t.optional === false; })
388
- ? [
389
- {
390
- combined: false,
391
- expression: typescript_1.default.factory.createStrictEquality(arrayLength, typescript_1.default.factory.createNumericLiteral(tuple.length)),
392
- },
393
- ]
394
- : [
395
- {
396
- combined: false,
397
- expression: typescript_1.default.factory.createLogicalAnd(typescript_1.default.factory.createLessThanEquals(typescript_1.default.factory.createNumericLiteral(tuple.filter(function (t) {
398
- return t.optional === false;
399
- }).length), arrayLength), typescript_1.default.factory.createGreaterThanEquals(typescript_1.default.factory.createNumericLiteral(tuple.length), arrayLength)),
400
- },
401
- ]
402
- : [])), false), __read((config.joiner.tuple
403
- ? [
404
- {
405
- expression: config.joiner.tuple(binaries),
406
- combined: true,
407
- },
408
- ]
409
- : binaries.map(function (expression) { return ({
410
- expression: expression,
411
- combined: true,
412
- }); }))), false), __read((rest !== null
413
- ? [
414
- {
415
- expression: rest,
416
- combined: true,
417
- },
418
- ]
419
- : [])), false), "[".concat(tuple.map(function (t) { return t.getName(); }).join(", "), "]"));
420
- };
425
+ return function (input, array, explore, metaTags, jsDocTags) {
426
+ if (array.recursive === false)
427
+ return decode_array_inline(project)(config)(importer)(input, array, explore, metaTags, jsDocTags);
428
+ explore = __assign(__assign({}, explore), { source: "function", from: "array" });
429
+ return typescript_1.default.factory.createLogicalOr(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)), config.joiner.failure(input, array.name, explore));
421
430
  };
422
431
  };
423
432
  };
424
433
  };
425
- var decode_array = function (project) {
434
+ var decode_array_inline = function (project) {
426
435
  return function (config) {
427
436
  return function (importer) {
428
437
  return FeatureProgrammer_1.FeatureProgrammer.decode_array({
438
+ prefix: config.prefix,
429
439
  trace: config.trace,
430
440
  path: config.path,
431
- decoder: CheckerProgrammer.decode(project)(config)(importer),
441
+ decoder: function () { return CheckerProgrammer.decode(project)(config)(importer); },
432
442
  })(importer)(config.joiner.array);
433
443
  };
434
444
  };
435
445
  };
436
- CheckerProgrammer.decode_object = function (config) { return function (importer) {
437
- var func = FeatureProgrammer_1.FeatureProgrammer.decode_object(config)(importer);
438
- return function (input, obj, explore) {
439
- obj.validated = true;
440
- return func(input, obj, explore);
446
+ var decode_tuple = function (project) {
447
+ return function (config) {
448
+ return function (importer) {
449
+ return function (input, tuple, explore, tagList, jsDocTags) {
450
+ if (tuple.recursive === false)
451
+ return decode_tuple_inline(project)(config)(importer)(input, tuple, explore, tagList, jsDocTags);
452
+ explore = __assign(__assign({}, explore), { source: "function", from: "array" });
453
+ return typescript_1.default.factory.createLogicalOr(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)), config.joiner.failure(input, tuple.name, explore));
454
+ };
455
+ };
441
456
  };
442
- }; };
457
+ };
458
+ var decode_tuple_inline = function (project) {
459
+ return function (config) {
460
+ return function (importer) {
461
+ return function (input, tuple, explore, tagList, jsDocTags) {
462
+ var binaries = tuple.elements
463
+ .filter(function (meta) { return meta.rest === null; })
464
+ .map(function (meta, index) {
465
+ return CheckerProgrammer.decode(project)(config)(importer)(typescript_1.default.factory.createElementAccessExpression(input, index), meta, __assign(__assign({}, explore), { from: "array", postfix: explore.postfix.length
466
+ ? "".concat(explore.postfix.slice(0, -1), "[").concat(index, "]\"")
467
+ : "\"[".concat(index, "]\"") }), tagList, jsDocTags);
468
+ });
469
+ var rest = tuple.elements.length && tuple.elements.at(-1).rest !== null
470
+ ? CheckerProgrammer.decode(project)(config)(importer)(typescript_1.default.factory.createCallExpression(IdentifierFactory_1.IdentifierFactory.access(input)("slice"), undefined, [
471
+ typescript_1.default.factory.createNumericLiteral(tuple.elements.length - 1),
472
+ ]), (0, wrap_metadata_rest_tuple_1.wrap_metadata_rest_tuple)(tuple.elements.at(-1).rest), __assign(__assign({}, explore), { start: tuple.elements.length - 1 }), tagList, jsDocTags)
473
+ : null;
474
+ var arrayLength = typescript_1.default.factory.createPropertyAccessExpression(input, "length");
475
+ return config.combiner(explore)("and")(input, __spreadArray(__spreadArray(__spreadArray([], __read((rest === null
476
+ ? tuple.elements.every(function (t) { return t.optional === false; })
477
+ ? [
478
+ {
479
+ combined: false,
480
+ expression: typescript_1.default.factory.createStrictEquality(arrayLength, typescript_1.default.factory.createNumericLiteral(tuple.elements.length)),
481
+ },
482
+ ]
483
+ : [
484
+ {
485
+ combined: false,
486
+ expression: typescript_1.default.factory.createLogicalAnd(typescript_1.default.factory.createLessThanEquals(typescript_1.default.factory.createNumericLiteral(tuple.elements.filter(function (t) {
487
+ return t.optional === false;
488
+ }).length), arrayLength), typescript_1.default.factory.createGreaterThanEquals(typescript_1.default.factory.createNumericLiteral(tuple.elements.length), arrayLength)),
489
+ },
490
+ ]
491
+ : [])), false), __read((config.joiner.tuple
492
+ ? [
493
+ {
494
+ expression: config.joiner.tuple(binaries),
495
+ combined: true,
496
+ },
497
+ ]
498
+ : binaries.map(function (expression) { return ({
499
+ expression: expression,
500
+ combined: true,
501
+ }); }))), false), __read((rest !== null
502
+ ? [
503
+ {
504
+ expression: rest,
505
+ combined: true,
506
+ },
507
+ ]
508
+ : [])), false), "[".concat(tuple.elements.map(function (t) { return t.getName(); }).join(", "), "]"));
509
+ };
510
+ };
511
+ };
512
+ };
443
513
  var explore_sets = function (project) {
444
514
  return function (config) {
445
515
  return function (importer) {
446
- return UnionExplorer_1.UnionExplorer.set({
447
- checker: CheckerProgrammer.decode(project)(config)(importer),
448
- decoder: decode_array(project)(config)(importer),
449
- empty: config.success,
450
- success: config.success,
451
- failure: function (input, expected, explore) {
452
- return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
453
- },
454
- });
516
+ return function (input, sets, explore, tags, jsDocTags) {
517
+ return typescript_1.default.factory.createCallExpression(UnionExplorer_1.UnionExplorer.set({
518
+ checker: CheckerProgrammer.decode(project)(config)(importer),
519
+ decoder: decode_array(project)(config)(importer),
520
+ empty: config.success,
521
+ success: config.success,
522
+ failure: function (input, expected, explore) {
523
+ return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
524
+ },
525
+ })([])(input, sets, explore, tags, jsDocTags), undefined, undefined);
526
+ };
455
527
  };
456
528
  };
457
529
  };
458
530
  var explore_maps = function (project) {
459
531
  return function (config) {
460
532
  return function (importer) {
461
- return UnionExplorer_1.UnionExplorer.map({
462
- checker: function (input, entry, explore) {
463
- var func = CheckerProgrammer.decode(project)(config)(importer);
464
- return typescript_1.default.factory.createLogicalAnd(func(typescript_1.default.factory.createElementAccessExpression(input, 0), entry[0], __assign(__assign({}, explore), { postfix: "".concat(explore.postfix, "[0]") }), [], []), func(typescript_1.default.factory.createElementAccessExpression(input, 1), entry[1], __assign(__assign({}, explore), { postfix: "".concat(explore.postfix, "[1]") }), [], []));
465
- },
466
- decoder: function (input, target, explore) {
467
- return decode_array(project)(config)(importer)(input, Metadata_1.Metadata.create({
468
- any: false,
469
- nullable: false,
470
- required: true,
471
- optional: false,
472
- functional: false,
473
- resolved: null,
474
- constants: [],
475
- atomics: [],
476
- templates: [],
477
- rest: null,
478
- arrays: [],
479
- tuples: [target],
480
- objects: [],
481
- natives: [],
482
- sets: [],
483
- maps: [],
484
- }), explore, [], []);
485
- },
486
- empty: config.success,
487
- success: config.success,
488
- failure: function (input, expected, explore) {
489
- return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
490
- },
491
- });
533
+ return function (input, maps, explore, tags, jsDocTags) {
534
+ return typescript_1.default.factory.createCallExpression(UnionExplorer_1.UnionExplorer.map({
535
+ checker: function (input, entry, explore) {
536
+ var func = CheckerProgrammer.decode(project)(config)(importer);
537
+ return typescript_1.default.factory.createLogicalAnd(func(typescript_1.default.factory.createElementAccessExpression(input, 0), entry[0], __assign(__assign({}, explore), { postfix: "".concat(explore.postfix, "[0]") }), [], []), func(typescript_1.default.factory.createElementAccessExpression(input, 1), entry[1], __assign(__assign({}, explore), { postfix: "".concat(explore.postfix, "[1]") }), [], []));
538
+ },
539
+ decoder: decode_array(project)(config)(importer),
540
+ empty: config.success,
541
+ success: config.success,
542
+ failure: function (input, expected, explore) {
543
+ return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
544
+ },
545
+ })([])(input, maps, explore, tags, jsDocTags), undefined, undefined);
546
+ };
492
547
  };
493
548
  };
494
549
  };
495
550
  var explore_tuples = function (project) {
496
551
  return function (config) {
497
552
  return function (importer) {
498
- return UnionExplorer_1.UnionExplorer.tuple({
499
- checker: (0, check_union_tuple_1.check_union_tuple)(project)(config)(importer),
500
- decoder: CheckerProgrammer.decode_tuple(project)(config)(importer)(true),
501
- empty: config.success,
502
- success: config.success,
503
- failure: function (input, expected, explore) {
504
- return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
505
- },
506
- });
553
+ return function (input, tuples, explore, tags, jsDocTags) {
554
+ return explore_array_like_union_types(config)(importer)(UnionExplorer_1.UnionExplorer.tuple({
555
+ checker: decode_tuple(project)(config)(importer),
556
+ decoder: decode_tuple(project)(config)(importer),
557
+ empty: config.success,
558
+ success: config.success,
559
+ failure: function (input, expected, explore) {
560
+ return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
561
+ },
562
+ }))(input, tuples, explore, tags, jsDocTags);
563
+ };
507
564
  };
508
565
  };
509
566
  };
510
- var explore_arrays = function (project, config, importer) {
511
- return UnionExplorer_1.UnionExplorer.array({
512
- checker: CheckerProgrammer.decode(project)(config)(importer),
513
- decoder: decode_array(project)(config)(importer),
514
- empty: config.success,
515
- success: config.success,
516
- failure: function (input, expected, explore) {
517
- return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
518
- },
519
- });
567
+ var explore_arrays = function (project) {
568
+ return function (config) {
569
+ return function (importer) {
570
+ return function (input, arrays, explore, tags, jsDocTags) {
571
+ return explore_array_like_union_types(config)(importer)(UnionExplorer_1.UnionExplorer.array({
572
+ checker: CheckerProgrammer.decode(project)(config)(importer),
573
+ decoder: decode_array(project)(config)(importer),
574
+ empty: config.success,
575
+ success: config.success,
576
+ failure: function (input, expected, explore) {
577
+ return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
578
+ },
579
+ }))(input, arrays, explore, tags, jsDocTags);
580
+ };
581
+ };
582
+ };
520
583
  };
521
- var explore_arrays_and_tuples = function (project, config, importer) {
522
- return UnionExplorer_1.UnionExplorer.array_or_tuple({
523
- checker: function (front, target, explore, tags, jsDocTags, array) {
524
- return Array.isArray(target)
525
- ? (0, check_union_tuple_1.check_union_tuple)(project)(config)(importer)(front, target, explore, tags, jsDocTags, array)
526
- : config.atomist(explore)({
527
- expression: CheckerProgrammer.decode(project)(config)(importer)(front, target, explore, tags, jsDocTags),
528
- tags: (0, check_array_length_1.check_array_length)(tags)(array),
529
- })(array);
530
- },
531
- decoder: function (input, target, explore, tags, jsDocTags) {
532
- return Array.isArray(target)
533
- ? CheckerProgrammer.decode_tuple(project)(config)(importer)(true)(input, target, explore, tags, jsDocTags)
534
- : decode_array(project)(config)(importer)(input, target, explore, tags, jsDocTags);
535
- },
536
- empty: config.success,
537
- success: config.success,
538
- failure: function (input, expected, explore) {
539
- return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
540
- },
541
- });
584
+ var explore_arrays_and_tuples = function (project) {
585
+ return function (config) {
586
+ return function (importer) {
587
+ return function (input, elements, explore, tags, jsDocTags) {
588
+ return explore_array_like_union_types(config)(importer)(UnionExplorer_1.UnionExplorer.array_or_tuple({
589
+ checker: function (front, target, explore, tags, jsDocTags, array) {
590
+ return target instanceof MetadataTuple_1.MetadataTuple
591
+ ? decode_tuple(project)(config)(importer)(front, target, explore, tags, jsDocTags)
592
+ : config.atomist(explore)({
593
+ expression: CheckerProgrammer.decode(project)(config)(importer)(front, target, explore, tags, jsDocTags),
594
+ tags: (0, check_array_length_1.check_array_length)(tags)(array),
595
+ })(array);
596
+ },
597
+ decoder: function (input, target, explore, tags, jsDocTags) {
598
+ return target instanceof MetadataTuple_1.MetadataTuple
599
+ ? decode_tuple(project)(config)(importer)(input, target, explore, tags, jsDocTags)
600
+ : decode_array(project)(config)(importer)(input, target, explore, tags, jsDocTags);
601
+ },
602
+ empty: config.success,
603
+ success: config.success,
604
+ failure: function (input, expected, explore) {
605
+ return typescript_1.default.factory.createReturnStatement(config.joiner.failure(input, expected, explore));
606
+ },
607
+ }))(input, elements, explore, tags, jsDocTags);
608
+ };
609
+ };
610
+ };
611
+ };
612
+ var explore_array_like_union_types = function (config) {
613
+ return function (importer) {
614
+ return function (factory) {
615
+ return function (input, elements, explore, tags, jsDocTags) {
616
+ var arrow = function (parameters) {
617
+ return function (explore) {
618
+ return function (input) {
619
+ return factory(parameters)(input, elements, explore, tags, jsDocTags);
620
+ };
621
+ };
622
+ };
623
+ if (elements.every(function (e) { return e.recursive === false; }))
624
+ typescript_1.default.factory.createCallExpression(arrow([])(explore)(input), undefined, []);
625
+ explore = __assign(__assign({}, explore), { source: "function", from: "array" });
626
+ return typescript_1.default.factory.createLogicalOr(typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier(importer.emplaceUnion(config.prefix, elements.map(function (e) { return e.name; }).join(" | "), function () {
627
+ 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"));
628
+ })), undefined, FeatureProgrammer_1.FeatureProgrammer.argumentsArray(config)(explore)(input)), config.joiner.failure(input, elements.map(function (e) { return e.name; }).join(" | "), explore));
629
+ };
630
+ };
631
+ };
542
632
  };
543
- var explore_objects = function (config) { return function (importer) {
544
- var objector = CheckerProgrammer.decode_object(config)(importer);
545
- return function (input, meta, explore) {
546
- if (meta.objects.length === 1)
547
- return objector(input, meta.objects[0], explore);
548
- return typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier(importer.useLocal("".concat(config.unioners).concat(meta.union_index))), undefined, FeatureProgrammer_1.FeatureProgrammer.get_object_arguments(config)(explore)(input));
633
+ var explore_objects = function (config) {
634
+ return function (importer) {
635
+ return function (input, meta, explore) {
636
+ return meta.objects.length === 1
637
+ ? CheckerProgrammer.decode_object(config)(importer)(input, meta.objects[0], explore)
638
+ : typescript_1.default.factory.createCallExpression(typescript_1.default.factory.createIdentifier(importer.useLocal("".concat(config.prefix, "u").concat(meta.union_index))), undefined, FeatureProgrammer_1.FeatureProgrammer.argumentsArray(config)(explore)(input));
639
+ };
549
640
  };
550
- }; };
641
+ };
551
642
  })(CheckerProgrammer = exports.CheckerProgrammer || (exports.CheckerProgrammer = {}));
552
643
  var create_add = function (binaries) {
553
644
  return function (defaultInput) {