typia 5.2.6 → 5.3.0-dev.20231112

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 (202) hide show
  1. package/lib/factories/ExpressionFactory.js +14 -16
  2. package/lib/factories/ExpressionFactory.js.map +1 -1
  3. package/lib/factories/JsonMetadataFactory.d.ts +1 -1
  4. package/lib/factories/JsonMetadataFactory.js +2 -2
  5. package/lib/factories/JsonMetadataFactory.js.map +1 -1
  6. package/lib/factories/LiteralFactory.js +2 -0
  7. package/lib/factories/LiteralFactory.js.map +1 -1
  8. package/lib/factories/MetadataCollection.d.ts +2 -2
  9. package/lib/factories/MetadataFactory.d.ts +1 -1
  10. package/lib/factories/MetadataFactory.js +236 -170
  11. package/lib/factories/MetadataFactory.js.map +1 -1
  12. package/lib/factories/NumericRangeFactory.d.ts +2 -2
  13. package/lib/factories/NumericRangeFactory.js +41 -21
  14. package/lib/factories/NumericRangeFactory.js.map +1 -1
  15. package/lib/factories/ProtobufFactory.d.ts +1 -1
  16. package/lib/factories/ProtobufFactory.js +2 -2
  17. package/lib/factories/ProtobufFactory.js.map +1 -1
  18. package/lib/factories/internal/metadata/MetadataHelper.js +3 -2
  19. package/lib/factories/internal/metadata/MetadataHelper.js.map +1 -1
  20. package/lib/factories/internal/metadata/iterate_metadata_constant.js +13 -8
  21. package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +8 -5
  23. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  24. package/lib/functional/$from.d.ts +3 -0
  25. package/lib/functional/$from.js +9 -0
  26. package/lib/functional/$from.js.map +1 -0
  27. package/lib/functional/Namespace.js +7 -0
  28. package/lib/functional/Namespace.js.map +1 -1
  29. package/lib/module.d.ts +1 -0
  30. package/lib/module.js +2 -5
  31. package/lib/module.js.map +1 -1
  32. package/lib/programmers/CheckerProgrammer.js +11 -16
  33. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  34. package/lib/programmers/RandomProgrammer.js +1 -1
  35. package/lib/programmers/RandomProgrammer.js.map +1 -1
  36. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  37. package/lib/programmers/http/HttpHeadersProgrammer.js +1 -1
  38. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  39. package/lib/programmers/http/HttpParameterProgrammer.js +1 -1
  40. package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
  41. package/lib/programmers/http/HttpQueryProgrammer.js +1 -1
  42. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  43. package/lib/programmers/internal/application_array.js +8 -0
  44. package/lib/programmers/internal/application_array.js.map +1 -1
  45. package/lib/programmers/internal/application_number.js +8 -1
  46. package/lib/programmers/internal/application_number.js.map +1 -1
  47. package/lib/programmers/internal/application_string.js +8 -1
  48. package/lib/programmers/internal/application_string.js.map +1 -1
  49. package/lib/programmers/internal/check_array_length.js +7 -4
  50. package/lib/programmers/internal/check_array_length.js.map +1 -1
  51. package/lib/programmers/internal/check_bigint.js +7 -4
  52. package/lib/programmers/internal/check_bigint.js.map +1 -1
  53. package/lib/programmers/internal/check_number.js +7 -4
  54. package/lib/programmers/internal/check_number.js.map +1 -1
  55. package/lib/programmers/internal/check_string.js +7 -4
  56. package/lib/programmers/internal/check_string.js.map +1 -1
  57. package/lib/programmers/internal/metadata_to_pattern.js +3 -1
  58. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  59. package/lib/programmers/json/JsonAssertParseProgrammer.js +1 -1
  60. package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
  61. package/lib/programmers/json/JsonIsParseProgrammer.js +1 -1
  62. package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
  63. package/lib/programmers/json/JsonStringifyProgrammer.js +3 -8
  64. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  65. package/lib/programmers/json/JsonValidateParseProgrammer.js +1 -1
  66. package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
  67. package/lib/programmers/misc/MiscCloneProgrammer.js +19 -24
  68. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  69. package/lib/programmers/misc/MiscLiteralsProgrammer.js +1 -1
  70. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  71. package/lib/programmers/misc/MiscPruneProgrammer.js +11 -16
  72. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  73. package/lib/programmers/notations/NotationGeneralProgrammer.js +11 -16
  74. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  75. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +1 -1
  76. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  77. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +38 -42
  78. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  79. package/lib/programmers/protobuf/ProtobufMessageProgrammer.d.ts +1 -1
  80. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +22 -25
  81. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  82. package/lib/reflect.d.ts +3 -0
  83. package/lib/reflect.js +13 -0
  84. package/lib/reflect.js.map +1 -0
  85. package/lib/schemas/json/IJsonSchema.d.ts +1 -0
  86. package/lib/schemas/metadata/IMetadataApplication.d.ts +2 -2
  87. package/lib/schemas/metadata/{IMetadataCollection.d.ts → IMetadataComponents.d.ts} +1 -1
  88. package/lib/schemas/metadata/{IMetadataCollection.js → IMetadataComponents.js} +1 -1
  89. package/lib/schemas/metadata/IMetadataComponents.js.map +1 -0
  90. package/lib/schemas/metadata/IMetadataConstant.d.ts +1 -1
  91. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +2 -2
  92. package/lib/schemas/metadata/Metadata.d.ts +2 -2
  93. package/lib/schemas/metadata/Metadata.js +82 -173
  94. package/lib/schemas/metadata/Metadata.js.map +1 -1
  95. package/lib/schemas/metadata/MetadataAlias.js +1 -1
  96. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  97. package/lib/schemas/metadata/MetadataApplication.d.ts +13 -0
  98. package/lib/schemas/metadata/MetadataApplication.js +30 -0
  99. package/lib/schemas/metadata/MetadataApplication.js.map +1 -0
  100. package/lib/schemas/metadata/MetadataArrayType.js +1 -1
  101. package/lib/schemas/metadata/MetadataArrayType.js.map +1 -1
  102. package/lib/schemas/metadata/MetadataAtomic.d.ts +3 -0
  103. package/lib/schemas/metadata/MetadataAtomic.js +42 -0
  104. package/lib/schemas/metadata/MetadataAtomic.js.map +1 -1
  105. package/lib/schemas/metadata/MetadataComponents.d.ts +16 -0
  106. package/lib/schemas/metadata/MetadataComponents.js +151 -0
  107. package/lib/schemas/metadata/MetadataComponents.js.map +1 -0
  108. package/lib/schemas/metadata/MetadataConstant.d.ts +9 -1
  109. package/lib/schemas/metadata/MetadataConstant.js +29 -0
  110. package/lib/schemas/metadata/MetadataConstant.js.map +1 -1
  111. package/lib/schemas/metadata/MetadataEscaped.js +4 -4
  112. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -1
  113. package/lib/schemas/metadata/MetadataObject.js +2 -2
  114. package/lib/schemas/metadata/MetadataObject.js.map +1 -1
  115. package/lib/schemas/metadata/MetadataProperty.js +4 -4
  116. package/lib/schemas/metadata/MetadataProperty.js.map +1 -1
  117. package/lib/schemas/metadata/MetadataTupleType.js +1 -1
  118. package/lib/schemas/metadata/MetadataTupleType.js.map +1 -1
  119. package/lib/transformers/CallExpressionTransformer.js +5 -2
  120. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  121. package/lib/transformers/features/json/JsonApplicationTransformer.d.ts +1 -1
  122. package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -5
  123. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  124. package/lib/transformers/features/reflect/ReflectMetadataTransformer.d.ts +5 -0
  125. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +58 -0
  126. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -0
  127. package/package.json +2 -2
  128. package/src/Primitive.ts +135 -135
  129. package/src/executable/TypiaSetupWizard.ts +142 -142
  130. package/src/executable/setup/CommandExecutor.ts +8 -8
  131. package/src/factories/ExpressionFactory.ts +12 -13
  132. package/src/factories/JsonMetadataFactory.ts +53 -50
  133. package/src/factories/LiteralFactory.ts +2 -0
  134. package/src/factories/MetadataCollection.ts +282 -282
  135. package/src/factories/MetadataFactory.ts +55 -22
  136. package/src/factories/NumericRangeFactory.ts +56 -17
  137. package/src/factories/ProtobufFactory.ts +5 -2
  138. package/src/factories/internal/metadata/MetadataHelper.ts +7 -4
  139. package/src/factories/internal/metadata/emplace_metadata_object.ts +178 -178
  140. package/src/factories/internal/metadata/iterate_metadata_constant.ts +10 -8
  141. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +9 -8
  142. package/src/functional/$from.ts +5 -0
  143. package/src/functional/$stoll.ts +8 -8
  144. package/src/functional/Namespace.ts +175 -168
  145. package/src/module.ts +1 -19
  146. package/src/programmers/AssertProgrammer.ts +322 -322
  147. package/src/programmers/CheckerProgrammer.ts +16 -17
  148. package/src/programmers/IsProgrammer.ts +258 -258
  149. package/src/programmers/RandomProgrammer.ts +4 -1
  150. package/src/programmers/ValidateProgrammer.ts +350 -350
  151. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  152. package/src/programmers/helpers/ProtobufUtil.ts +3 -2
  153. package/src/programmers/http/HttpHeadersProgrammer.ts +4 -1
  154. package/src/programmers/http/HttpParameterProgrammer.ts +4 -1
  155. package/src/programmers/http/HttpQueryProgrammer.ts +4 -1
  156. package/src/programmers/internal/application_array.ts +8 -0
  157. package/src/programmers/internal/application_number.ts +8 -1
  158. package/src/programmers/internal/application_string.ts +8 -1
  159. package/src/programmers/internal/check_array_length.ts +5 -2
  160. package/src/programmers/internal/check_bigint.ts +5 -2
  161. package/src/programmers/internal/check_dynamic_key.ts +178 -178
  162. package/src/programmers/internal/check_dynamic_properties.ts +202 -202
  163. package/src/programmers/internal/check_number.ts +5 -2
  164. package/src/programmers/internal/check_object.ts +62 -62
  165. package/src/programmers/internal/check_string.ts +5 -3
  166. package/src/programmers/internal/metadata_to_pattern.ts +3 -1
  167. package/src/programmers/json/JsonAssertParseProgrammer.ts +1 -0
  168. package/src/programmers/json/JsonIsParseProgrammer.ts +1 -0
  169. package/src/programmers/json/JsonStringifyProgrammer.ts +959 -960
  170. package/src/programmers/json/JsonValidateParseProgrammer.ts +1 -0
  171. package/src/programmers/misc/MiscCloneProgrammer.ts +787 -786
  172. package/src/programmers/misc/MiscLiteralsProgrammer.ts +4 -1
  173. package/src/programmers/misc/MiscPruneProgrammer.ts +549 -548
  174. package/src/programmers/notations/NotationGeneralProgrammer.ts +717 -716
  175. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +1 -0
  176. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +872 -882
  177. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +21 -21
  178. package/src/reflect.ts +24 -0
  179. package/src/schemas/json/IJsonSchema.ts +1 -0
  180. package/src/schemas/metadata/IMetadataApplication.ts +2 -2
  181. package/src/schemas/metadata/{IMetadataCollection.ts → IMetadataComponents.ts} +1 -1
  182. package/src/schemas/metadata/IMetadataConstant.ts +1 -1
  183. package/src/schemas/metadata/IMetadataTypeTag.ts +9 -2
  184. package/src/schemas/metadata/Metadata.ts +18 -91
  185. package/src/schemas/metadata/MetadataAlias.ts +1 -1
  186. package/src/schemas/metadata/MetadataApplication.ts +44 -0
  187. package/src/schemas/metadata/MetadataArrayType.ts +1 -1
  188. package/src/schemas/metadata/MetadataAtomic.ts +44 -0
  189. package/src/schemas/metadata/MetadataComponents.ts +98 -0
  190. package/src/schemas/metadata/MetadataConstant.ts +44 -1
  191. package/src/schemas/metadata/MetadataEscaped.ts +4 -4
  192. package/src/schemas/metadata/MetadataObject.ts +2 -2
  193. package/src/schemas/metadata/MetadataProperty.ts +4 -7
  194. package/src/schemas/metadata/MetadataTupleType.ts +1 -1
  195. package/src/transform.ts +35 -35
  196. package/src/transformers/CallExpressionTransformer.ts +5 -2
  197. package/src/transformers/features/json/JsonApplicationTransformer.ts +7 -4
  198. package/src/transformers/features/{misc/MetadataTransformer.ts → reflect/ReflectMetadataTransformer.ts} +25 -8
  199. package/lib/schemas/metadata/IMetadataCollection.js.map +0 -1
  200. package/lib/transformers/features/misc/MetadataTransformer.d.ts +0 -5
  201. package/lib/transformers/features/misc/MetadataTransformer.js +0 -55
  202. package/lib/transformers/features/misc/MetadataTransformer.js.map +0 -1
@@ -1,202 +1,202 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
- import { IdentifierFactory } from "../../factories/IdentifierFactory";
5
- import { StatementFactory } from "../../factories/StatementFactory";
6
-
7
- import { IProject } from "../../transformers/IProject";
8
-
9
- import { FunctionImporter } from "../helpers/FunctionImporeter";
10
- import { IExpressionEntry } from "../helpers/IExpressionEntry";
11
- import { check_dynamic_key } from "./check_dynamic_key";
12
- import { check_everything } from "./check_everything";
13
- import { check_object } from "./check_object";
14
-
15
- /**
16
- * @internal
17
- */
18
- export const check_dynamic_properties =
19
- (props: check_object.IProps) =>
20
- (project: IProject) =>
21
- (importer: FunctionImporter) =>
22
- (
23
- input: ts.Expression,
24
- regular: IExpressionEntry<ts.Expression>[],
25
- dynamic: IExpressionEntry<ts.Expression>[],
26
- ): ts.Expression => {
27
- const length = IdentifierFactory.access(
28
- ts.factory.createCallExpression(
29
- ts.factory.createIdentifier("Object.keys"),
30
- undefined,
31
- [input],
32
- ),
33
- )("length");
34
- const left: ts.Expression | null =
35
- props.equals === true && dynamic.length === 0
36
- ? props.undefined === true ||
37
- regular.every((r) => r.meta.isRequired())
38
- ? ts.factory.createStrictEquality(
39
- ExpressionFactory.number(
40
- regular.filter((r) => r.meta.isRequired()).length,
41
- ),
42
- length,
43
- )
44
- : ts.factory.createCallExpression(
45
- importer.use("is_between"),
46
- [],
47
- [
48
- length,
49
- ExpressionFactory.number(
50
- regular.filter((r) => r.meta.isRequired())
51
- .length,
52
- ),
53
- ExpressionFactory.number(regular.length),
54
- ],
55
- )
56
- : null;
57
- if (
58
- props.undefined === false &&
59
- left !== null &&
60
- regular.every((r) => r.meta.isRequired())
61
- )
62
- return left;
63
-
64
- const criteria = props.entries
65
- ? ts.factory.createCallExpression(props.entries, undefined, [
66
- ts.factory.createCallExpression(
67
- ts.factory.createIdentifier("Object.keys"),
68
- undefined,
69
- [input],
70
- ),
71
- check_dynamic_property(props)(project)(importer)(
72
- input,
73
- regular,
74
- dynamic,
75
- ),
76
- ])
77
- : ts.factory.createCallExpression(
78
- IdentifierFactory.access(
79
- ts.factory.createCallExpression(
80
- ts.factory.createIdentifier("Object.keys"),
81
- undefined,
82
- [input],
83
- ),
84
- )(props.assert ? "every" : "map"),
85
- undefined,
86
- [
87
- check_dynamic_property(props)(project)(importer)(
88
- input,
89
- regular,
90
- dynamic,
91
- ),
92
- ],
93
- );
94
- const right: ts.Expression = (props.halt || ((elem) => elem))(
95
- props.assert ? criteria : check_everything(criteria),
96
- );
97
- return left
98
- ? (props.undefined
99
- ? ts.factory.createLogicalOr
100
- : ts.factory.createLogicalAnd)(left, right)
101
- : right;
102
- };
103
-
104
- const check_dynamic_property =
105
- (props: check_object.IProps) =>
106
- (project: IProject) =>
107
- (importer: FunctionImporter) =>
108
- (
109
- input: ts.Expression,
110
- regular: IExpressionEntry<ts.Expression>[],
111
- dynamic: IExpressionEntry<ts.Expression>[],
112
- ) => {
113
- //----
114
- // IF CONDITIONS
115
- //----
116
- // PREPARE ASSETS
117
- const key = ts.factory.createIdentifier("key");
118
- const value = ts.factory.createIdentifier("value");
119
-
120
- const statements: ts.Statement[] = [];
121
- const add = (exp: ts.Expression, output: ts.Expression) =>
122
- statements.push(
123
- ts.factory.createIfStatement(
124
- exp,
125
- ts.factory.createReturnStatement(output),
126
- ),
127
- );
128
-
129
- // GATHER CONDITIONS
130
- if (regular.length) add(is_regular_property(regular), props.positive);
131
- statements.push(
132
- StatementFactory.constant(
133
- "value",
134
- ts.factory.createElementAccessExpression(input, key),
135
- ),
136
- );
137
- if (props.undefined === true)
138
- add(
139
- ts.factory.createStrictEquality(
140
- ts.factory.createIdentifier("undefined"),
141
- value,
142
- ),
143
- props.positive,
144
- );
145
-
146
- for (const entry of dynamic)
147
- add(
148
- check_dynamic_key(project)(importer)(key, entry.key),
149
- entry.expression,
150
- );
151
-
152
- //----
153
- // FUNCTION BODY
154
- //----
155
- // CLOSURE BLOCK
156
- const block: ts.Block = ts.factory.createBlock(
157
- [
158
- ...statements,
159
- ts.factory.createReturnStatement(
160
- props.equals === true
161
- ? props.superfluous(value)
162
- : props.positive,
163
- ),
164
- ],
165
- true,
166
- );
167
-
168
- // RETURNS
169
- return ts.factory.createArrowFunction(
170
- undefined,
171
- undefined,
172
- [IdentifierFactory.parameter("key")],
173
- undefined,
174
- undefined,
175
- block,
176
- );
177
- };
178
-
179
- const is_regular_property = (regular: IExpressionEntry[]) =>
180
- ts.factory.createCallExpression(
181
- IdentifierFactory.access(
182
- ts.factory.createArrayLiteralExpression(
183
- regular.map((entry) =>
184
- ts.factory.createStringLiteral(entry.key.getSoleLiteral()!),
185
- ),
186
- ),
187
- )("some"),
188
- undefined,
189
- [
190
- ts.factory.createArrowFunction(
191
- undefined,
192
- undefined,
193
- [IdentifierFactory.parameter("prop")],
194
- undefined,
195
- undefined,
196
- ts.factory.createStrictEquality(
197
- ts.factory.createIdentifier("key"),
198
- ts.factory.createIdentifier("prop"),
199
- ),
200
- ),
201
- ],
202
- );
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
5
+ import { StatementFactory } from "../../factories/StatementFactory";
6
+
7
+ import { IProject } from "../../transformers/IProject";
8
+
9
+ import { FunctionImporter } from "../helpers/FunctionImporeter";
10
+ import { IExpressionEntry } from "../helpers/IExpressionEntry";
11
+ import { check_dynamic_key } from "./check_dynamic_key";
12
+ import { check_everything } from "./check_everything";
13
+ import { check_object } from "./check_object";
14
+
15
+ /**
16
+ * @internal
17
+ */
18
+ export const check_dynamic_properties =
19
+ (props: check_object.IProps) =>
20
+ (project: IProject) =>
21
+ (importer: FunctionImporter) =>
22
+ (
23
+ input: ts.Expression,
24
+ regular: IExpressionEntry<ts.Expression>[],
25
+ dynamic: IExpressionEntry<ts.Expression>[],
26
+ ): ts.Expression => {
27
+ const length = IdentifierFactory.access(
28
+ ts.factory.createCallExpression(
29
+ ts.factory.createIdentifier("Object.keys"),
30
+ undefined,
31
+ [input],
32
+ ),
33
+ )("length");
34
+ const left: ts.Expression | null =
35
+ props.equals === true && dynamic.length === 0
36
+ ? props.undefined === true ||
37
+ regular.every((r) => r.meta.isRequired())
38
+ ? ts.factory.createStrictEquality(
39
+ ExpressionFactory.number(
40
+ regular.filter((r) => r.meta.isRequired()).length,
41
+ ),
42
+ length,
43
+ )
44
+ : ts.factory.createCallExpression(
45
+ importer.use("is_between"),
46
+ [],
47
+ [
48
+ length,
49
+ ExpressionFactory.number(
50
+ regular.filter((r) => r.meta.isRequired())
51
+ .length,
52
+ ),
53
+ ExpressionFactory.number(regular.length),
54
+ ],
55
+ )
56
+ : null;
57
+ if (
58
+ props.undefined === false &&
59
+ left !== null &&
60
+ regular.every((r) => r.meta.isRequired())
61
+ )
62
+ return left;
63
+
64
+ const criteria = props.entries
65
+ ? ts.factory.createCallExpression(props.entries, undefined, [
66
+ ts.factory.createCallExpression(
67
+ ts.factory.createIdentifier("Object.keys"),
68
+ undefined,
69
+ [input],
70
+ ),
71
+ check_dynamic_property(props)(project)(importer)(
72
+ input,
73
+ regular,
74
+ dynamic,
75
+ ),
76
+ ])
77
+ : ts.factory.createCallExpression(
78
+ IdentifierFactory.access(
79
+ ts.factory.createCallExpression(
80
+ ts.factory.createIdentifier("Object.keys"),
81
+ undefined,
82
+ [input],
83
+ ),
84
+ )(props.assert ? "every" : "map"),
85
+ undefined,
86
+ [
87
+ check_dynamic_property(props)(project)(importer)(
88
+ input,
89
+ regular,
90
+ dynamic,
91
+ ),
92
+ ],
93
+ );
94
+ const right: ts.Expression = (props.halt || ((elem) => elem))(
95
+ props.assert ? criteria : check_everything(criteria),
96
+ );
97
+ return left
98
+ ? (props.undefined
99
+ ? ts.factory.createLogicalOr
100
+ : ts.factory.createLogicalAnd)(left, right)
101
+ : right;
102
+ };
103
+
104
+ const check_dynamic_property =
105
+ (props: check_object.IProps) =>
106
+ (project: IProject) =>
107
+ (importer: FunctionImporter) =>
108
+ (
109
+ input: ts.Expression,
110
+ regular: IExpressionEntry<ts.Expression>[],
111
+ dynamic: IExpressionEntry<ts.Expression>[],
112
+ ) => {
113
+ //----
114
+ // IF CONDITIONS
115
+ //----
116
+ // PREPARE ASSETS
117
+ const key = ts.factory.createIdentifier("key");
118
+ const value = ts.factory.createIdentifier("value");
119
+
120
+ const statements: ts.Statement[] = [];
121
+ const add = (exp: ts.Expression, output: ts.Expression) =>
122
+ statements.push(
123
+ ts.factory.createIfStatement(
124
+ exp,
125
+ ts.factory.createReturnStatement(output),
126
+ ),
127
+ );
128
+
129
+ // GATHER CONDITIONS
130
+ if (regular.length) add(is_regular_property(regular), props.positive);
131
+ statements.push(
132
+ StatementFactory.constant(
133
+ "value",
134
+ ts.factory.createElementAccessExpression(input, key),
135
+ ),
136
+ );
137
+ if (props.undefined === true)
138
+ add(
139
+ ts.factory.createStrictEquality(
140
+ ts.factory.createIdentifier("undefined"),
141
+ value,
142
+ ),
143
+ props.positive,
144
+ );
145
+
146
+ for (const entry of dynamic)
147
+ add(
148
+ check_dynamic_key(project)(importer)(key, entry.key),
149
+ entry.expression,
150
+ );
151
+
152
+ //----
153
+ // FUNCTION BODY
154
+ //----
155
+ // CLOSURE BLOCK
156
+ const block: ts.Block = ts.factory.createBlock(
157
+ [
158
+ ...statements,
159
+ ts.factory.createReturnStatement(
160
+ props.equals === true
161
+ ? props.superfluous(value)
162
+ : props.positive,
163
+ ),
164
+ ],
165
+ true,
166
+ );
167
+
168
+ // RETURNS
169
+ return ts.factory.createArrowFunction(
170
+ undefined,
171
+ undefined,
172
+ [IdentifierFactory.parameter("key")],
173
+ undefined,
174
+ undefined,
175
+ block,
176
+ );
177
+ };
178
+
179
+ const is_regular_property = (regular: IExpressionEntry[]) =>
180
+ ts.factory.createCallExpression(
181
+ IdentifierFactory.access(
182
+ ts.factory.createArrayLiteralExpression(
183
+ regular.map((entry) =>
184
+ ts.factory.createStringLiteral(entry.key.getSoleLiteral()!),
185
+ ),
186
+ ),
187
+ )("some"),
188
+ undefined,
189
+ [
190
+ ts.factory.createArrowFunction(
191
+ undefined,
192
+ undefined,
193
+ [IdentifierFactory.parameter("prop")],
194
+ undefined,
195
+ undefined,
196
+ ts.factory.createStrictEquality(
197
+ ts.factory.createIdentifier("key"),
198
+ ts.factory.createIdentifier("prop"),
199
+ ),
200
+ ),
201
+ ],
202
+ );
@@ -101,8 +101,11 @@ const check_numeric_type_tags =
101
101
  ]),
102
102
  ...row.map((tag) => ({
103
103
  expected: `number & ${tag.name}`,
104
- expression: ExpressionFactory.transpile(project.context)(
105
- tag.validate!,
104
+ expression: (
105
+ tag.predicate ??
106
+ ExpressionFactory.transpile(project.context)(
107
+ tag.validate!,
108
+ )
106
109
  )(input),
107
110
  })),
108
111
  ]);
@@ -1,62 +1,62 @@
1
- import ts from "typescript";
2
-
3
- import { IProject } from "../../transformers/IProject";
4
-
5
- import { FunctionImporter } from "../helpers/FunctionImporeter";
6
- import { IExpressionEntry } from "../helpers/IExpressionEntry";
7
- import { check_dynamic_properties } from "./check_dynamic_properties";
8
- import { check_everything } from "./check_everything";
9
-
10
- /**
11
- * @internal
12
- */
13
- export const check_object =
14
- (props: check_object.IProps) =>
15
- (project: IProject) =>
16
- (importer: FunctionImporter) =>
17
- (input: ts.Expression, entries: IExpressionEntry<ts.Expression>[]) => {
18
- // PREPARE ASSETS
19
- const regular = entries.filter((entry) => entry.key.isSoleLiteral());
20
- const dynamic = entries.filter((entry) => !entry.key.isSoleLiteral());
21
- const flags: ts.Expression[] = regular.map((entry) => entry.expression);
22
-
23
- // REGULAR WITHOUT DYNAMIC PROPERTIES
24
- if (props.equals === false && dynamic.length === 0)
25
- return regular.length === 0 ? props.positive : reduce(props)(flags);
26
-
27
- // CHECK DYNAMIC PROPERTIES
28
- flags.push(
29
- check_dynamic_properties(props)(project)(importer)(
30
- input,
31
- regular,
32
- dynamic,
33
- ),
34
- );
35
- return reduce(props)(flags);
36
- };
37
-
38
- /**
39
- * @internal
40
- */
41
- export namespace check_object {
42
- export interface IProps {
43
- equals: boolean;
44
- assert: boolean;
45
- undefined: boolean;
46
- halt?: undefined | ((exp: ts.Expression) => ts.Expression);
47
- reduce: (a: ts.Expression, b: ts.Expression) => ts.Expression;
48
- positive: ts.Expression;
49
- superfluous: (value: ts.Expression) => ts.Expression;
50
- entries?: undefined | ts.Identifier;
51
- }
52
- }
53
-
54
- /**
55
- * @internal
56
- */
57
- const reduce = (props: check_object.IProps) => (expressions: ts.Expression[]) =>
58
- props.assert
59
- ? expressions.reduce(props.reduce)
60
- : check_everything(
61
- ts.factory.createArrayLiteralExpression(expressions),
62
- );
1
+ import ts from "typescript";
2
+
3
+ import { IProject } from "../../transformers/IProject";
4
+
5
+ import { FunctionImporter } from "../helpers/FunctionImporeter";
6
+ import { IExpressionEntry } from "../helpers/IExpressionEntry";
7
+ import { check_dynamic_properties } from "./check_dynamic_properties";
8
+ import { check_everything } from "./check_everything";
9
+
10
+ /**
11
+ * @internal
12
+ */
13
+ export const check_object =
14
+ (props: check_object.IProps) =>
15
+ (project: IProject) =>
16
+ (importer: FunctionImporter) =>
17
+ (input: ts.Expression, entries: IExpressionEntry<ts.Expression>[]) => {
18
+ // PREPARE ASSETS
19
+ const regular = entries.filter((entry) => entry.key.isSoleLiteral());
20
+ const dynamic = entries.filter((entry) => !entry.key.isSoleLiteral());
21
+ const flags: ts.Expression[] = regular.map((entry) => entry.expression);
22
+
23
+ // REGULAR WITHOUT DYNAMIC PROPERTIES
24
+ if (props.equals === false && dynamic.length === 0)
25
+ return regular.length === 0 ? props.positive : reduce(props)(flags);
26
+
27
+ // CHECK DYNAMIC PROPERTIES
28
+ flags.push(
29
+ check_dynamic_properties(props)(project)(importer)(
30
+ input,
31
+ regular,
32
+ dynamic,
33
+ ),
34
+ );
35
+ return reduce(props)(flags);
36
+ };
37
+
38
+ /**
39
+ * @internal
40
+ */
41
+ export namespace check_object {
42
+ export interface IProps {
43
+ equals: boolean;
44
+ assert: boolean;
45
+ undefined: boolean;
46
+ halt?: undefined | ((exp: ts.Expression) => ts.Expression);
47
+ reduce: (a: ts.Expression, b: ts.Expression) => ts.Expression;
48
+ positive: ts.Expression;
49
+ superfluous: (value: ts.Expression) => ts.Expression;
50
+ entries?: undefined | ts.Identifier;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * @internal
56
+ */
57
+ const reduce = (props: check_object.IProps) => (expressions: ts.Expression[]) =>
58
+ props.assert
59
+ ? expressions.reduce(props.reduce)
60
+ : check_everything(
61
+ ts.factory.createArrayLiteralExpression(expressions),
62
+ );
@@ -17,7 +17,6 @@ export const check_string =
17
17
  (input: ts.Expression): ICheckEntry => {
18
18
  const conditions: ICheckEntry.ICondition[][] =
19
19
  check_string_type_tags(project)(atomic)(input);
20
-
21
20
  return {
22
21
  expected: atomic.getName(),
23
22
  expression: ts.factory.createStrictEquality(
@@ -41,8 +40,11 @@ const check_string_type_tags =
41
40
  .map((row) =>
42
41
  row.map((tag) => ({
43
42
  expected: `string & ${tag.name}`,
44
- expression: ExpressionFactory.transpile(project.context)(
45
- tag.validate!,
43
+ expression: (
44
+ tag.predicate ??
45
+ ExpressionFactory.transpile(project.context)(
46
+ tag.validate!,
47
+ )
46
48
  )(input),
47
49
  })),
48
50
  );
@@ -18,7 +18,9 @@ export const metadata_to_pattern =
18
18
  meta.constants.map((c) => {
19
19
  if (c.type !== "string")
20
20
  return c.values.map((v) => v.toString());
21
- return c.values.map((str) => PatternUtil.escape(str));
21
+ return (c.values as string[]).map((str) =>
22
+ PatternUtil.escape(str),
23
+ );
22
24
  }),
23
25
  );
24
26
  for (const a of meta.atomics)
@@ -16,6 +16,7 @@ export namespace JsonAssertParseProgrammer {
16
16
  (type: ts.Type, name?: string): ts.ArrowFunction => {
17
17
  JsonMetadataFactory.analyze(`typia.json.${modulo.getText()}`)(
18
18
  project.checker,
19
+ project.context,
19
20
  )(type);
20
21
  return ts.factory.createArrowFunction(
21
22
  undefined,
@@ -16,6 +16,7 @@ export namespace JsonIsParseProgrammer {
16
16
  (type: ts.Type, name?: string): ts.ArrowFunction => {
17
17
  JsonMetadataFactory.analyze(`typia.json.${modulo.getText()}`)(
18
18
  project.checker,
19
+ project.context,
19
20
  )(type);
20
21
  return ts.factory.createArrowFunction(
21
22
  undefined,