typia 3.8.8 → 3.9.0-dev.20230603

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 (233) hide show
  1. package/lib/IRandomGenerator.d.ts +1 -0
  2. package/lib/factories/CommentFactory.js +2 -1
  3. package/lib/factories/CommentFactory.js.map +1 -1
  4. package/lib/factories/IdentifierFactory.js +2 -1
  5. package/lib/factories/IdentifierFactory.js.map +1 -1
  6. package/lib/factories/MetadataCollection.d.ts +22 -4
  7. package/lib/factories/MetadataCollection.js +121 -28
  8. package/lib/factories/MetadataCollection.js.map +1 -1
  9. package/lib/factories/MetadataFactory.d.ts +1 -0
  10. package/lib/factories/MetadataFactory.js +6 -48
  11. package/lib/factories/MetadataFactory.js.map +1 -1
  12. package/lib/factories/MetadataTagFactory.js +5 -3
  13. package/lib/factories/MetadataTagFactory.js.map +1 -1
  14. package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +5 -0
  15. package/lib/factories/internal/metadata/emplace_metadata_array.js +38 -0
  16. package/lib/factories/internal/metadata/emplace_metadata_array.js.map +1 -0
  17. package/lib/factories/internal/metadata/emplace_metadata_definition.d.ts +5 -0
  18. package/lib/factories/internal/metadata/emplace_metadata_definition.js +38 -0
  19. package/lib/factories/internal/metadata/emplace_metadata_definition.js.map +1 -0
  20. package/lib/factories/internal/metadata/emplace_metadata_object.js +4 -4
  21. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  22. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +5 -0
  23. package/lib/factories/internal/metadata/emplace_metadata_tuple.js +58 -0
  24. package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -0
  25. package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -1
  26. package/lib/factories/internal/metadata/explore_metadata.js +11 -34
  27. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata.d.ts +1 -1
  29. package/lib/factories/internal/metadata/iterate_metadata.js +5 -2
  30. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  31. package/lib/factories/internal/metadata/iterate_metadata_array.js +4 -5
  32. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  33. package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +2 -0
  34. package/lib/factories/internal/metadata/iterate_metadata_collection.js +151 -0
  35. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -0
  36. package/lib/factories/internal/metadata/iterate_metadata_definition.d.ts +5 -0
  37. package/lib/factories/internal/metadata/iterate_metadata_definition.js +24 -0
  38. package/lib/factories/internal/metadata/iterate_metadata_definition.js.map +1 -0
  39. package/lib/factories/internal/metadata/iterate_metadata_object.js +1 -1
  40. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  41. package/lib/factories/internal/metadata/iterate_metadata_sort.d.ts +3 -0
  42. package/lib/factories/internal/metadata/iterate_metadata_sort.js +156 -0
  43. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -0
  44. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +3 -26
  45. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  46. package/lib/factories/internal/metadata/iterate_metadata_union.js +3 -3
  47. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  48. package/lib/metadata/IMetadata.d.ts +3 -2
  49. package/lib/metadata/IMetadataApplication.d.ts +2 -2
  50. package/lib/metadata/IMetadataArray.d.ts +8 -0
  51. package/lib/metadata/IMetadataArray.js +3 -0
  52. package/lib/metadata/IMetadataArray.js.map +1 -0
  53. package/lib/metadata/IMetadataCollection.d.ts +10 -0
  54. package/lib/metadata/IMetadataCollection.js +3 -0
  55. package/lib/metadata/IMetadataCollection.js.map +1 -0
  56. package/lib/metadata/IMetadataDefinition.d.ts +10 -0
  57. package/lib/metadata/IMetadataDefinition.js +3 -0
  58. package/lib/metadata/IMetadataDefinition.js.map +1 -0
  59. package/lib/metadata/IMetadataDictionary.js +3 -0
  60. package/lib/metadata/IMetadataDictionary.js.map +1 -0
  61. package/lib/metadata/IMetadataObject.d.ts +3 -0
  62. package/lib/metadata/IMetadataProperty.d.ts +1 -1
  63. package/lib/metadata/IMetadataTuple.d.ts +8 -0
  64. package/lib/metadata/IMetadataTuple.js +3 -0
  65. package/lib/metadata/IMetadataTuple.js.map +1 -0
  66. package/lib/metadata/Metadata.d.ts +24 -21
  67. package/lib/metadata/Metadata.js +323 -262
  68. package/lib/metadata/Metadata.js.map +1 -1
  69. package/lib/metadata/MetadataArray.d.ts +12 -0
  70. package/lib/metadata/MetadataArray.js +36 -0
  71. package/lib/metadata/MetadataArray.js.map +1 -0
  72. package/lib/metadata/MetadataDefinition.d.ts +16 -0
  73. package/lib/metadata/MetadataDefinition.js +39 -0
  74. package/lib/metadata/MetadataDefinition.js.map +1 -0
  75. package/lib/metadata/MetadataObject.d.ts +4 -0
  76. package/lib/metadata/MetadataObject.js +3 -5
  77. package/lib/metadata/MetadataObject.js.map +1 -1
  78. package/lib/metadata/MetadataProperty.d.ts +1 -1
  79. package/lib/metadata/MetadataProperty.js +3 -3
  80. package/lib/metadata/MetadataProperty.js.map +1 -1
  81. package/lib/metadata/MetadataTuple.d.ts +12 -0
  82. package/lib/metadata/MetadataTuple.js +36 -0
  83. package/lib/metadata/MetadataTuple.js.map +1 -0
  84. package/lib/programmers/ApplicationProgrammer.js +3 -3
  85. package/lib/programmers/ApplicationProgrammer.js.map +1 -1
  86. package/lib/programmers/AssertProgrammer.js +13 -21
  87. package/lib/programmers/AssertProgrammer.js.map +1 -1
  88. package/lib/programmers/CheckerProgrammer.d.ts +6 -7
  89. package/lib/programmers/CheckerProgrammer.js +276 -185
  90. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  91. package/lib/programmers/CloneProgrammer.js +312 -204
  92. package/lib/programmers/CloneProgrammer.js.map +1 -1
  93. package/lib/programmers/FeatureProgrammer.d.ts +21 -27
  94. package/lib/programmers/FeatureProgrammer.js +60 -63
  95. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  96. package/lib/programmers/IsProgrammer.d.ts +3 -3
  97. package/lib/programmers/IsProgrammer.js +43 -28
  98. package/lib/programmers/IsProgrammer.js.map +1 -1
  99. package/lib/programmers/LiteralsProgrammer.js +1 -0
  100. package/lib/programmers/LiteralsProgrammer.js.map +1 -1
  101. package/lib/programmers/PruneProgrammer.js +270 -176
  102. package/lib/programmers/PruneProgrammer.js.map +1 -1
  103. package/lib/programmers/RandomProgrammer.js +124 -32
  104. package/lib/programmers/RandomProgrammer.js.map +1 -1
  105. package/lib/programmers/StringifyProgrammer.js +462 -356
  106. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  107. package/lib/programmers/ValidateProgrammer.js +9 -9
  108. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  109. package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
  110. package/lib/programmers/helpers/FunctionImporeter.js +17 -2
  111. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  112. package/lib/programmers/helpers/RandomJoiner.d.ts +6 -1
  113. package/lib/programmers/helpers/RandomJoiner.js +11 -14
  114. package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
  115. package/lib/programmers/helpers/UnionExplorer.d.ts +12 -10
  116. package/lib/programmers/helpers/UnionExplorer.js +47 -12
  117. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  118. package/lib/programmers/helpers/UnionPredicator.js +1 -1
  119. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  120. package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
  121. package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
  122. package/lib/programmers/internal/JSON_SCHEMA_PREFIX.d.ts +1 -1
  123. package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js +2 -2
  124. package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js.map +1 -1
  125. package/lib/programmers/internal/application_array.js +41 -21
  126. package/lib/programmers/internal/application_array.js.map +1 -1
  127. package/lib/programmers/internal/application_definition.d.ts +5 -0
  128. package/lib/programmers/internal/application_definition.js +45 -0
  129. package/lib/programmers/internal/application_definition.js.map +1 -0
  130. package/lib/programmers/internal/application_native.js +14 -11
  131. package/lib/programmers/internal/application_native.js.map +1 -1
  132. package/lib/programmers/internal/application_object.js +19 -14
  133. package/lib/programmers/internal/application_object.js.map +1 -1
  134. package/lib/programmers/internal/application_schema.js +28 -31
  135. package/lib/programmers/internal/application_schema.js.map +1 -1
  136. package/lib/programmers/internal/application_tuple.js +34 -5
  137. package/lib/programmers/internal/application_tuple.js.map +1 -1
  138. package/lib/programmers/internal/check_union_array_like.js +54 -63
  139. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  140. package/lib/programmers/internal/feature_object_entries.js +2 -2
  141. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  142. package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +2 -0
  143. package/lib/programmers/internal/wrap_metadata_rest_tuple.js +18 -0
  144. package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -0
  145. package/lib/schemas/IJsonApplication.d.ts +0 -4
  146. package/lib/schemas/IJsonComponents.d.ts +16 -4
  147. package/lib/schemas/IJsonSchema.d.ts +1 -1
  148. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  149. package/lib/transformers/FileTransformer.js +3 -3
  150. package/lib/transformers/FileTransformer.js.map +1 -1
  151. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +1 -0
  152. package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
  153. package/lib/transformers/features/miscellaneous/MetadataTransformer.js +2 -1
  154. package/lib/transformers/features/miscellaneous/MetadataTransformer.js.map +1 -1
  155. package/lib/utils/ArrayUtil.d.ts +1 -1
  156. package/lib/utils/ArrayUtil.js +2 -1
  157. package/lib/utils/ArrayUtil.js.map +1 -1
  158. package/lib/utils/RandomGenerator.js +2 -3
  159. package/lib/utils/RandomGenerator.js.map +1 -1
  160. package/package.json +6 -1
  161. package/src/IRandomGenerator.ts +1 -0
  162. package/src/factories/CommentFactory.ts +2 -1
  163. package/src/factories/IdentifierFactory.ts +3 -1
  164. package/src/factories/MetadataCollection.ts +173 -34
  165. package/src/factories/MetadataFactory.ts +7 -29
  166. package/src/factories/MetadataTagFactory.ts +6 -3
  167. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -0
  168. package/src/factories/internal/metadata/emplace_metadata_definition.ts +35 -0
  169. package/src/factories/internal/metadata/emplace_metadata_object.ts +4 -4
  170. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -0
  171. package/src/factories/internal/metadata/explore_metadata.ts +18 -44
  172. package/src/factories/internal/metadata/iterate_metadata.ts +13 -3
  173. package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -11
  174. package/src/factories/internal/metadata/iterate_metadata_collection.ts +130 -0
  175. package/src/factories/internal/metadata/iterate_metadata_definition.ts +34 -0
  176. package/src/factories/internal/metadata/iterate_metadata_object.ts +1 -0
  177. package/src/factories/internal/metadata/iterate_metadata_sort.ts +68 -0
  178. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -31
  179. package/src/factories/internal/metadata/iterate_metadata_union.ts +13 -2
  180. package/src/metadata/IMetadata.ts +3 -2
  181. package/src/metadata/IMetadataApplication.ts +2 -2
  182. package/src/metadata/IMetadataArray.ts +10 -0
  183. package/src/metadata/IMetadataCollection.ts +11 -0
  184. package/src/metadata/IMetadataDefinition.ts +12 -0
  185. package/src/metadata/IMetadataDictionary.ts +14 -0
  186. package/src/metadata/IMetadataObject.ts +2 -13
  187. package/src/metadata/IMetadataProperty.ts +1 -1
  188. package/src/metadata/IMetadataTuple.ts +10 -0
  189. package/src/metadata/Metadata.ts +473 -134
  190. package/src/metadata/MetadataArray.ts +52 -0
  191. package/src/metadata/MetadataDefinition.ts +65 -0
  192. package/src/metadata/MetadataObject.ts +7 -20
  193. package/src/metadata/MetadataProperty.ts +5 -5
  194. package/src/metadata/MetadataTuple.ts +53 -0
  195. package/src/programmers/ApplicationProgrammer.ts +1 -2
  196. package/src/programmers/AssertProgrammer.ts +45 -39
  197. package/src/programmers/CheckerProgrammer.ts +612 -331
  198. package/src/programmers/CloneProgrammer.ts +344 -138
  199. package/src/programmers/FeatureProgrammer.ts +110 -115
  200. package/src/programmers/IsProgrammer.ts +86 -52
  201. package/src/programmers/LiteralsProgrammer.ts +1 -0
  202. package/src/programmers/PruneProgrammer.ts +304 -101
  203. package/src/programmers/RandomProgrammer.ts +227 -61
  204. package/src/programmers/StringifyProgrammer.ts +374 -182
  205. package/src/programmers/ValidateProgrammer.ts +41 -44
  206. package/src/programmers/helpers/FunctionImporeter.ts +35 -11
  207. package/src/programmers/helpers/RandomJoiner.ts +25 -13
  208. package/src/programmers/helpers/UnionExplorer.ts +76 -50
  209. package/src/programmers/helpers/UnionPredicator.ts +1 -1
  210. package/src/programmers/helpers/disable_function_importer_declare.ts +5 -0
  211. package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
  212. package/src/programmers/internal/application_array.ts +48 -16
  213. package/src/programmers/internal/application_definition.ts +45 -0
  214. package/src/programmers/internal/application_native.ts +15 -12
  215. package/src/programmers/internal/application_object.ts +17 -12
  216. package/src/programmers/internal/application_schema.ts +31 -65
  217. package/src/programmers/internal/application_tuple.ts +63 -13
  218. package/src/programmers/internal/check_union_array_like.ts +249 -191
  219. package/src/programmers/internal/feature_object_entries.ts +2 -2
  220. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -0
  221. package/src/schemas/IJsonApplication.ts +0 -5
  222. package/src/schemas/IJsonComponents.ts +17 -5
  223. package/src/schemas/IJsonSchema.ts +1 -1
  224. package/src/transformers/CallExpressionTransformer.ts +2 -0
  225. package/src/transformers/FileTransformer.ts +8 -8
  226. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +1 -0
  227. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +2 -1
  228. package/src/utils/ArrayUtil.ts +3 -2
  229. package/src/utils/RandomGenerator.ts +3 -3
  230. package/lib/programmers/internal/check_union_tuple.js +0 -15
  231. package/lib/programmers/internal/check_union_tuple.js.map +0 -1
  232. package/src/programmers/internal/check_union_tuple.ts +0 -33
  233. /package/lib/{programmers/internal/check_union_tuple.d.ts → metadata/IMetadataDictionary.d.ts} +0 -0
@@ -5,6 +5,8 @@ import { StatementFactory } from "../../factories/StatementFactory";
5
5
  import { TypeFactory } from "../../factories/TypeFactory";
6
6
 
7
7
  import { IMetadataTag } from "../../metadata/IMetadataTag";
8
+ import { MetadataArray } from "../../metadata/MetadataArray";
9
+ import { MetadataTuple } from "../../metadata/MetadataTuple";
8
10
 
9
11
  import { CheckerProgrammer } from "../CheckerProgrammer";
10
12
  import { FeatureProgrammer } from "../FeatureProgrammer";
@@ -14,228 +16,275 @@ import { UnionExplorer } from "../helpers/UnionExplorer";
14
16
  * @internal
15
17
  */
16
18
  export const check_union_array_like =
17
- <T>(accessor: check_union_array_like.IAccessor<T>) =>
18
- (props: check_union_array_like.IProps<T>) =>
19
+ <Origin, Category extends MetadataArray | MetadataTuple, Element>(
20
+ accessor: check_union_array_like.IAccessor<Origin, Category, Element>,
21
+ ) =>
22
+ (props: check_union_array_like.IProps<Category, Element>) =>
23
+ (parameters: ts.ParameterDeclaration[]) =>
19
24
  (
20
25
  input: ts.Expression,
21
- targets: T[],
26
+ origins: Origin[],
22
27
  explore: FeatureProgrammer.IExplore,
23
28
  tags: IMetadataTag[],
24
29
  jsDocTags: ts.JSDocTagInfo[],
25
- ) => {
30
+ ): ts.ArrowFunction => {
26
31
  // ONLY ONE TYPE
32
+ const targets: Array<Category> = origins.map(accessor.transform);
27
33
  if (targets.length === 1)
28
- return props.decoder(
29
- accessor.array(input),
30
- targets[0]!,
31
- explore,
32
- tags,
33
- jsDocTags,
34
- );
35
-
36
- //----
37
- // LIST UP VARIABLES
38
- //----
39
- // TUPLES
40
- const tupleListVariable: ts.VariableStatement =
41
- StatementFactory.constant(
42
- "tupleList",
43
- ts.factory.createArrayLiteralExpression(
44
- targets.map((meta) =>
45
- ts.factory.createArrayLiteralExpression([
46
- ts.factory.createArrowFunction(
47
- undefined,
48
- undefined,
49
- [
50
- IdentifierFactory.parameter(
51
- "top",
52
- TypeFactory.keyword("any"),
53
- ),
54
- ],
55
- undefined,
56
- undefined,
57
- props.checker(
58
- ts.factory.createIdentifier("top"),
59
- meta,
60
- {
61
- ...explore,
62
- tracable: false,
63
- postfix: `"[0]"`,
64
- },
65
- tags,
66
- jsDocTags,
67
- input,
68
- ),
69
- ),
70
- ts.factory.createArrowFunction(
71
- undefined,
72
- undefined,
73
- [
74
- IdentifierFactory.parameter(
75
- "top",
76
- TypeFactory.keyword("any"),
77
- ),
78
- ],
79
- undefined,
80
- undefined,
81
- props.decoder(
82
- ts.factory.createIdentifier("top"),
83
- meta,
84
- {
85
- ...explore,
86
- tracable: true,
87
- },
88
- tags,
89
- jsDocTags,
90
- ),
91
- ),
92
- ]),
93
- ),
34
+ return ts.factory.createArrowFunction(
35
+ undefined,
36
+ undefined,
37
+ parameters,
38
+ undefined,
39
+ undefined,
40
+ props.decoder(
41
+ accessor.array(input),
42
+ targets[0]!,
43
+ explore,
44
+ tags,
45
+ jsDocTags,
94
46
  ),
95
47
  );
96
48
 
97
- // FILTERED TUPLES
98
- const filteredVariable = StatementFactory.constant(
99
- "filtered",
100
- ts.factory.createCallExpression(
101
- ts.factory.createIdentifier("tupleList.filter"),
102
- undefined,
49
+ const array = ts.factory.createIdentifier("array");
50
+ const top = ts.factory.createIdentifier("top");
51
+
52
+ const statements: ts.Statement[] = [];
53
+ const tupleList: MetadataTuple[] = targets.filter(
54
+ (t) => t instanceof MetadataTuple,
55
+ ) as MetadataTuple[];
56
+ const arrayList: MetadataArray[] = targets.filter(
57
+ (t) => t instanceof MetadataArray,
58
+ ) as MetadataArray[];
59
+
60
+ const predicate = (meta: Category): ts.ArrayLiteralExpression =>
61
+ ts.factory.createArrayLiteralExpression(
103
62
  [
104
63
  ts.factory.createArrowFunction(
105
64
  undefined,
106
65
  undefined,
107
- [IdentifierFactory.parameter("tuple")],
66
+ [
67
+ IdentifierFactory.parameter(
68
+ "top",
69
+ meta instanceof MetadataArray
70
+ ? TypeFactory.keyword("any")
71
+ : ts.factory.createTypeReferenceNode(
72
+ "any[]",
73
+ ),
74
+ ),
75
+ ],
76
+ TypeFactory.keyword("any"),
108
77
  undefined,
78
+ props.checker(
79
+ ts.factory.createIdentifier("top"),
80
+ accessor.element(meta),
81
+ {
82
+ ...explore,
83
+ tracable: false,
84
+ postfix:
85
+ meta instanceof MetadataArray
86
+ ? `"[0]"`
87
+ : "",
88
+ },
89
+ tags,
90
+ jsDocTags,
91
+ array,
92
+ ),
93
+ ),
94
+ ts.factory.createArrowFunction(
109
95
  undefined,
110
- ts.factory.createStrictEquality(
111
- props.success,
112
- ts.factory.createCallExpression(
113
- ts.factory.createIdentifier("tuple[0]"),
114
- undefined,
115
- [ts.factory.createIdentifier("front")],
96
+ undefined,
97
+ [
98
+ IdentifierFactory.parameter(
99
+ "entire",
100
+ ts.factory.createTypeReferenceNode("any[]"),
116
101
  ),
102
+ ],
103
+ TypeFactory.keyword("any"),
104
+ undefined,
105
+ props.decoder(
106
+ ts.factory.createIdentifier("entire"),
107
+ meta,
108
+ {
109
+ ...explore,
110
+ tracable: true,
111
+ },
112
+ tags,
113
+ jsDocTags,
117
114
  ),
118
115
  ),
119
116
  ],
120
- ),
121
- );
122
-
123
- //----
124
- // STATEMENTS
125
- //----
126
- // ONLY ONE TYPE
127
- const uniqueStatement = ts.factory.createIfStatement(
128
- ts.factory.createStrictEquality(
129
- ts.factory.createNumericLiteral(1),
130
- ts.factory.createIdentifier("filtered.length"),
131
- ),
132
- ts.factory.createReturnStatement(
133
- ts.factory.createCallExpression(
134
- ts.factory.createIdentifier(`filtered[0][1]`),
117
+ true,
118
+ );
119
+ const iterate =
120
+ (init: string) =>
121
+ (from: ts.Expression) =>
122
+ (stmt: ts.Statement): ts.ForOfStatement =>
123
+ ts.factory.createForOfStatement(
135
124
  undefined,
136
- [accessor.array(input)],
137
- ),
138
- ),
139
- );
125
+ ts.factory.createVariableDeclarationList(
126
+ [ts.factory.createVariableDeclaration(init)],
127
+ ts.NodeFlags.Const,
128
+ ),
129
+ from,
130
+ stmt,
131
+ );
140
132
 
141
- // UNION TYPE
142
- const forOfStatement = ts.factory.createForOfStatement(
143
- undefined,
144
- ts.factory.createVariableDeclarationList(
145
- [ts.factory.createVariableDeclaration("tuple")],
146
- ts.NodeFlags.Const,
147
- ),
148
- // StatementFactory.variable(ts.NodeFlags.Const, "tuple"),
149
- ts.factory.createIdentifier("filtered"),
150
- ts.factory.createIfStatement(
151
- ts.factory.createCallExpression(
152
- IdentifierFactory.access(
153
- ts.factory.createIdentifier("array"),
154
- )("every"),
155
- undefined,
156
- [
157
- ts.factory.createArrowFunction(
158
- undefined,
133
+ if (tupleList.length)
134
+ statements.push(
135
+ StatementFactory.constant("array", accessor.array(input)),
136
+ StatementFactory.constant(
137
+ "tuplePredicators",
138
+ ts.factory.createArrayLiteralExpression(
139
+ tupleList.map((x) => predicate(x as Category)),
140
+ true,
141
+ ),
142
+ ),
143
+ iterate("pred")(
144
+ ts.factory.createIdentifier("tuplePredicators"),
145
+ )(
146
+ ts.factory.createIfStatement(
147
+ ts.factory.createCallExpression(
148
+ ts.factory.createIdentifier("pred[0]"),
159
149
  undefined,
160
- [
161
- IdentifierFactory.parameter(
162
- "value",
163
- TypeFactory.keyword("any"),
150
+ [array],
151
+ ),
152
+ ts.factory.createReturnStatement(
153
+ ts.factory.createCallExpression(
154
+ ts.factory.createIdentifier(`pred[1]`),
155
+ undefined,
156
+ [array],
157
+ ),
158
+ ),
159
+ ),
160
+ ),
161
+ );
162
+ if (arrayList.length) {
163
+ if (tupleList.length === 0)
164
+ statements.push(
165
+ StatementFactory.constant("array", accessor.array(input)),
166
+ );
167
+ statements.push(
168
+ StatementFactory.constant("top", accessor.front(input)),
169
+ ts.factory.createIfStatement(
170
+ ts.factory.createStrictEquality(
171
+ ts.factory.createNumericLiteral(0),
172
+ accessor.size(input),
173
+ ),
174
+ ts.isReturnStatement(props.empty)
175
+ ? props.empty
176
+ : ts.factory.createReturnStatement(props.empty),
177
+ ),
178
+ StatementFactory.constant(
179
+ "arrayPredicators",
180
+ ts.factory.createArrayLiteralExpression(
181
+ arrayList.map((x) => predicate(x as Category)),
182
+ true,
183
+ ),
184
+ ),
185
+ StatementFactory.constant(
186
+ "passed",
187
+ ts.factory.createCallExpression(
188
+ IdentifierFactory.access(
189
+ ts.factory.createIdentifier("arrayPredicators"),
190
+ )("filter"),
191
+ undefined,
192
+ [
193
+ ts.factory.createArrowFunction(
194
+ undefined,
195
+ undefined,
196
+ [IdentifierFactory.parameter("pred")],
197
+ undefined,
198
+ undefined,
199
+ ts.factory.createCallExpression(
200
+ ts.factory.createIdentifier("pred[0]"),
201
+ undefined,
202
+ [top],
164
203
  ),
165
- ],
166
- undefined,
204
+ ),
205
+ ],
206
+ ),
207
+ ),
208
+ ts.factory.createIfStatement(
209
+ ts.factory.createStrictEquality(
210
+ ts.factory.createNumericLiteral(1),
211
+ ts.factory.createIdentifier("passed.length"),
212
+ ),
213
+ ts.factory.createReturnStatement(
214
+ ts.factory.createCallExpression(
215
+ ts.factory.createIdentifier(`passed[0][1]`),
167
216
  undefined,
168
- ts.factory.createStrictEquality(
169
- props.success,
217
+ [array],
218
+ ),
219
+ ),
220
+ ts.factory.createIfStatement(
221
+ ts.factory.createLessThan(
222
+ ts.factory.createNumericLiteral(1),
223
+ ts.factory.createIdentifier("passed.length"),
224
+ ),
225
+ iterate("pred")(ts.factory.createIdentifier("passed"))(
226
+ ts.factory.createIfStatement(
170
227
  ts.factory.createCallExpression(
171
- ts.factory.createIdentifier("tuple[0]"),
228
+ IdentifierFactory.access(array)("every"),
172
229
  undefined,
173
- [ts.factory.createIdentifier("value")],
230
+ [
231
+ ts.factory.createArrowFunction(
232
+ undefined,
233
+ undefined,
234
+ [
235
+ IdentifierFactory.parameter(
236
+ "value",
237
+ TypeFactory.keyword("any"),
238
+ ),
239
+ ],
240
+ undefined,
241
+ undefined,
242
+ ts.factory.createStrictEquality(
243
+ props.success,
244
+ ts.factory.createCallExpression(
245
+ ts.factory.createIdentifier(
246
+ "pred[0]",
247
+ ),
248
+ undefined,
249
+ [
250
+ ts.factory.createIdentifier(
251
+ "value",
252
+ ),
253
+ ],
254
+ ),
255
+ ),
256
+ ),
257
+ ],
258
+ ),
259
+ ts.factory.createReturnStatement(
260
+ ts.factory.createCallExpression(
261
+ ts.factory.createIdentifier(`pred[1]`),
262
+ undefined,
263
+ [ts.factory.createIdentifier("array")],
264
+ ),
174
265
  ),
175
266
  ),
176
267
  ),
177
- ],
178
- ),
179
- ts.factory.createReturnStatement(
180
- ts.factory.createCallExpression(
181
- ts.factory.createIdentifier(`tuple[1]`),
182
- undefined,
183
- [ts.factory.createIdentifier("array")],
184
268
  ),
185
269
  ),
186
- ),
187
- );
188
- const unionStatement = ts.factory.createIfStatement(
189
- ts.factory.createLessThan(
190
- ts.factory.createNumericLiteral(1),
191
- ts.factory.createIdentifier("filtered.length"),
192
- ),
193
- forOfStatement,
194
- );
195
-
196
- const block = [
197
- // ARRAY.LENGTH := 0
198
- ...(accessor.size !== null
199
- ? [
200
- ts.factory.createIfStatement(
201
- ts.factory.createStrictEquality(
202
- ts.factory.createNumericLiteral(0),
203
- accessor.size(input),
204
- ),
205
- ts.isReturnStatement(props.empty)
206
- ? props.empty
207
- : ts.factory.createReturnStatement(props.empty),
208
- ),
209
- ]
210
- : []),
211
-
212
- // UNION PREDICATORS
213
- tupleListVariable,
214
- StatementFactory.constant("front", accessor.front(input)),
215
- filteredVariable,
216
- uniqueStatement,
217
-
218
- // CONDITIONAL STATEMENTS
219
- StatementFactory.constant("array", accessor.array(input)),
220
- unionStatement,
270
+ );
271
+ }
272
+ statements.push(
221
273
  props.failure(
222
274
  input,
223
- `(${targets.map((t) => accessor.name(t)).join(" | ")})`,
275
+ `(${targets
276
+ .map((t) => accessor.name(t, accessor.element(t)))
277
+ .join(" | ")})`,
224
278
  explore,
225
279
  ),
226
- ];
227
-
228
- return ts.factory.createCallExpression(
229
- ts.factory.createArrowFunction(
230
- undefined,
231
- undefined,
232
- [],
233
- undefined,
234
- undefined,
235
- ts.factory.createBlock(block, true),
236
- ),
280
+ );
281
+ return ts.factory.createArrowFunction(
282
+ undefined,
283
+ undefined,
284
+ parameters,
237
285
  undefined,
238
286
  undefined,
287
+ ts.factory.createBlock(statements, true),
239
288
  );
240
289
  };
241
290
 
@@ -243,16 +292,19 @@ export const check_union_array_like =
243
292
  * @internal
244
293
  */
245
294
  export namespace check_union_array_like {
246
- export interface IProps<T> {
295
+ export interface IProps<
296
+ Category extends MetadataArray | MetadataTuple,
297
+ Element,
298
+ > {
247
299
  checker(
248
300
  front: ts.Expression,
249
- target: T,
301
+ target: Element,
250
302
  explore: FeatureProgrammer.IExplore,
251
303
  tags: IMetadataTag[],
252
304
  jsDocTags: ts.JSDocTagInfo[],
253
- array: ts.Expression,
305
+ container: ts.Expression,
254
306
  ): ts.Expression;
255
- decoder: UnionExplorer.Decoder<T>;
307
+ decoder: UnionExplorer.Decoder<Category>;
256
308
  empty: ts.ReturnStatement | ts.Expression;
257
309
  success: ts.Expression;
258
310
  failure(
@@ -262,10 +314,16 @@ export namespace check_union_array_like {
262
314
  ): ts.Statement;
263
315
  }
264
316
 
265
- export interface IAccessor<T> {
266
- name(target: T): string;
317
+ export interface IAccessor<
318
+ Origin,
319
+ Category extends MetadataArray | MetadataTuple,
320
+ Element,
321
+ > {
322
+ transform(origin: Origin): Category;
323
+ element(meta: Category): Element;
324
+ name(meta: Category, elem: Element): string;
267
325
  front(input: ts.Expression): ts.Expression;
268
326
  array(input: ts.Expression): ts.Expression;
269
- size: null | ((input: ts.Expression) => ts.Expression);
327
+ size(input: ts.Expression): ts.Expression;
270
328
  }
271
329
  }
@@ -41,12 +41,12 @@ export const feature_object_entries =
41
41
  input: propInput,
42
42
  key: prop.key,
43
43
  meta: prop.value,
44
- expression: config.decoder(
44
+ expression: config.decoder()(
45
45
  propInput,
46
46
  prop.value,
47
47
  {
48
48
  tracable: config.path || config.trace,
49
- source: "object",
49
+ source: "function",
50
50
  from: "object",
51
51
  postfix:
52
52
  sole !== null
@@ -0,0 +1,16 @@
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { MetadataArray } from "../../metadata/MetadataArray";
3
+
4
+ export const wrap_metadata_rest_tuple = (rest: Metadata) => {
5
+ const wrapper: Metadata = Metadata.initialize();
6
+ wrapper.arrays.push(
7
+ MetadataArray.create({
8
+ name: `...${rest.getName()}`,
9
+ value: rest,
10
+ nullables: [],
11
+ recursive: false,
12
+ index: null,
13
+ }),
14
+ );
15
+ return wrapper;
16
+ };
@@ -5,9 +5,4 @@ export interface IJsonApplication {
5
5
  schemas: IJsonSchema[];
6
6
  components: IJsonComponents;
7
7
  purpose: "swagger" | "ajv";
8
-
9
- /**
10
- * @deprecated Always "#/components/schemas"
11
- */
12
- prefix: string;
13
8
  }
@@ -3,16 +3,23 @@ import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
3
3
  import { IJsonSchema } from "./IJsonSchema";
4
4
 
5
5
  export interface IJsonComponents {
6
- schemas: Record<string, IJsonComponents.IObject>;
6
+ objects?: Record<string, IJsonComponents.IObject>;
7
+ definitions?: Record<string, IJsonComponents.IDefinition>;
8
+ arrays?: Record<string, IJsonComponents.IArray>;
9
+ tuples?: Record<string, IJsonComponents.ITuple | IJsonComponents.IArray>;
7
10
  }
8
11
  export namespace IJsonComponents {
12
+ export interface IArray extends IJsonSchema.IArray {
13
+ $id?: string;
14
+ $recursiveAnchor?: true;
15
+ }
16
+ export interface ITuple extends IJsonSchema.ITuple {
17
+ $id?: string;
18
+ $recursiveAnchor?: true;
19
+ }
9
20
  export interface IObject {
10
- /**
11
- * Used only when ajv mode.
12
- */
13
21
  $id?: string;
14
22
  $recursiveAnchor?: boolean;
15
-
16
23
  type: "object";
17
24
 
18
25
  /**
@@ -30,4 +37,9 @@ export namespace IJsonComponents {
30
37
  "x-typia-patternProperties"?: Record<string, IJsonSchema>;
31
38
  "x-typia-additionalProperties"?: IJsonSchema;
32
39
  }
40
+
41
+ export type IDefinition = IJsonSchema & {
42
+ $id?: string;
43
+ $recursiveAnchor?: boolean;
44
+ };
33
45
  }
@@ -95,6 +95,7 @@ export namespace IJsonSchema {
95
95
  }
96
96
  export interface ITuple extends ISignificant<"array"> {
97
97
  items: IJsonSchema[];
98
+ "x-typia-rest": boolean;
98
99
  }
99
100
  export interface IReference extends IAttribute {
100
101
  $ref: string;
@@ -129,6 +130,5 @@ export namespace IJsonSchema {
129
130
  "x-typia-jsDocTags"?: IJsDocTagInfo[];
130
131
  "x-typia-required"?: boolean;
131
132
  "x-typia-optional"?: boolean;
132
- "x-typia-rest"?: boolean;
133
133
  }
134
134
  }
@@ -78,6 +78,8 @@ export namespace CallExpressionTransformer {
78
78
  const functor: (() => Task) | undefined = FUNCTORS[name];
79
79
  if (functor === undefined) return expression;
80
80
 
81
+ // console.log(expression.getSourceFile().fileName);
82
+
81
83
  // RETURNS WITH TRANSFORMATION
82
84
  return functor()(project)(expression.expression)(expression);
83
85
  };
@@ -7,14 +7,14 @@ export namespace FileTransformer {
7
7
  export const transform =
8
8
  (project: IProject) =>
9
9
  (context: ts.TransformationContext) =>
10
- (file: ts.SourceFile): ts.SourceFile =>
11
- file.isDeclarationFile
12
- ? file
13
- : ts.visitEachChild(
14
- file,
15
- (node) => iterate_node(project)(context)(node),
16
- context,
17
- );
10
+ (file: ts.SourceFile): ts.SourceFile => {
11
+ if (file.isDeclarationFile) return file;
12
+ return ts.visitEachChild(
13
+ file,
14
+ (node) => iterate_node(project)(context)(node),
15
+ context,
16
+ );
17
+ };
18
18
 
19
19
  const iterate_node =
20
20
  (project: IProject) =>
@@ -54,6 +54,7 @@ export namespace ApplicationTransformer {
54
54
  MetadataFactory.analyze(checker)({
55
55
  resolve: true,
56
56
  constant: true,
57
+ absorb: false,
57
58
  validate: (meta) => {
58
59
  if (meta.atomics.find((str) => str === "bigint"))
59
60
  throw new Error(NO_BIGIT);
@@ -35,13 +35,14 @@ export namespace MetadataTransformer {
35
35
  MetadataFactory.analyze(checker)({
36
36
  resolve: false,
37
37
  constant: true,
38
+ absorb: true,
38
39
  })(collection)(type),
39
40
  );
40
41
 
41
42
  // CONVERT TO PRIMITIVE TYPE
42
43
  const app: IMetadataApplication = {
43
44
  metadatas: metadatas.map((metadata) => metadata.toJSON()),
44
- collection: collection.objects().map((obj) => obj.toJSON()),
45
+ collection: collection.toJSON(),
45
46
  };
46
47
  return LiteralFactory.generate(app);
47
48
  };