typia 3.6.5 → 3.6.6

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 (203) hide show
  1. package/lib/module.d.ts +1 -1
  2. package/lib/programmers/internal/application_number.js +1 -1
  3. package/package.json +1 -1
  4. package/src/IRandomGenerator.ts +16 -16
  5. package/src/IValidation.ts +21 -21
  6. package/src/Primitive.ts +104 -104
  7. package/src/TypeGuardError.ts +36 -36
  8. package/src/executable/TypiaGenerateWizard.ts +87 -87
  9. package/src/executable/TypiaSetupWizard.ts +142 -142
  10. package/src/executable/setup/ArgumentParser.ts +91 -91
  11. package/src/executable/setup/CommandExecutor.ts +8 -8
  12. package/src/executable/setup/FileRetriever.ts +33 -33
  13. package/src/executable/setup/PackageManager.ts +92 -92
  14. package/src/executable/setup/PluginConfigurator.ts +99 -99
  15. package/src/executable/typia.ts +38 -38
  16. package/src/factories/CommentFactory.ts +10 -10
  17. package/src/factories/ExpressionFactory.ts +77 -77
  18. package/src/factories/IdentifierFactory.ts +73 -73
  19. package/src/factories/LiteralFactory.ts +44 -44
  20. package/src/factories/MetadataCollection.ts +122 -122
  21. package/src/factories/MetadataFactory.ts +51 -51
  22. package/src/factories/MetadataTagFactory.ts +265 -265
  23. package/src/factories/StatementFactory.ts +60 -60
  24. package/src/factories/TemplateFactory.ts +56 -56
  25. package/src/factories/TypeFactory.ts +129 -129
  26. package/src/factories/TypiaFileFactory.ts +117 -117
  27. package/src/factories/ValueFactory.ts +12 -12
  28. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  29. package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -142
  30. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  31. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  32. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  33. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  34. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  35. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  36. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  37. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  38. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  39. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  40. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  41. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  42. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  43. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  44. package/src/functional/$any.ts +3 -3
  45. package/src/functional/$every.ts +11 -11
  46. package/src/functional/$guard.ts +35 -35
  47. package/src/functional/$is_between.ts +7 -7
  48. package/src/functional/$is_email.ts +5 -5
  49. package/src/functional/$is_ipv4.ts +5 -5
  50. package/src/functional/$is_ipv6.ts +5 -5
  51. package/src/functional/$is_url.ts +5 -5
  52. package/src/functional/$is_uuid.ts +5 -5
  53. package/src/functional/$join.ts +50 -50
  54. package/src/functional/$number.ts +12 -12
  55. package/src/functional/$report.ts +15 -15
  56. package/src/functional/$rest.ts +3 -3
  57. package/src/functional/$string.ts +37 -37
  58. package/src/functional/$tail.ts +6 -6
  59. package/src/functional/Namespace.ts +121 -121
  60. package/src/index.ts +4 -4
  61. package/src/metadata/IJsDocTagInfo.ts +10 -10
  62. package/src/metadata/IMetadata.ts +25 -25
  63. package/src/metadata/IMetadataApplication.ts +7 -7
  64. package/src/metadata/IMetadataConstant.ts +16 -16
  65. package/src/metadata/IMetadataEntry.ts +6 -6
  66. package/src/metadata/IMetadataObject.ts +29 -29
  67. package/src/metadata/IMetadataProperty.ts +11 -11
  68. package/src/metadata/IMetadataTag.ts +113 -113
  69. package/src/metadata/Metadata.ts +534 -534
  70. package/src/metadata/MetadataConstant.ts +3 -3
  71. package/src/metadata/MetadataObject.ts +131 -131
  72. package/src/metadata/MetadataProperty.ts +64 -64
  73. package/src/module.ts +1946 -1946
  74. package/src/programmers/ApplicationProgrammer.ts +55 -55
  75. package/src/programmers/AssertCloneProgrammer.ts +70 -70
  76. package/src/programmers/AssertParseProgrammer.ts +65 -65
  77. package/src/programmers/AssertProgrammer.ts +232 -232
  78. package/src/programmers/AssertPruneProgrammer.ts +67 -67
  79. package/src/programmers/AssertStringifyProgrammer.ts +71 -71
  80. package/src/programmers/CheckerProgrammer.ts +893 -893
  81. package/src/programmers/CloneProgrammer.ts +386 -386
  82. package/src/programmers/FeatureProgrammer.ts +505 -505
  83. package/src/programmers/IsCloneProgrammer.ts +80 -80
  84. package/src/programmers/IsParseProgrammer.ts +74 -74
  85. package/src/programmers/IsProgrammer.ts +200 -200
  86. package/src/programmers/IsPruneProgrammer.ts +75 -75
  87. package/src/programmers/IsStringifyProgrammer.ts +81 -81
  88. package/src/programmers/PruneProgrammer.ts +341 -341
  89. package/src/programmers/RandomProgrammer.ts +391 -391
  90. package/src/programmers/StringifyProgrammer.ts +795 -795
  91. package/src/programmers/ValidateCloneProgrammer.ts +90 -90
  92. package/src/programmers/ValidateParseProgrammer.ts +69 -69
  93. package/src/programmers/ValidateProgrammer.ts +266 -266
  94. package/src/programmers/ValidatePruneProgrammer.ts +83 -83
  95. package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
  96. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  97. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  98. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  99. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  100. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  101. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  102. package/src/programmers/helpers/RandomJoiner.ts +149 -149
  103. package/src/programmers/helpers/RandomRanger.ts +216 -216
  104. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  105. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  106. package/src/programmers/helpers/UnionExplorer.ts +274 -274
  107. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  108. package/src/programmers/internal/application_array.ts +37 -37
  109. package/src/programmers/internal/application_boolean.ts +17 -17
  110. package/src/programmers/internal/application_constant.ts +29 -29
  111. package/src/programmers/internal/application_default.ts +17 -17
  112. package/src/programmers/internal/application_default_string.ts +32 -32
  113. package/src/programmers/internal/application_native.ts +29 -29
  114. package/src/programmers/internal/application_number.ts +70 -70
  115. package/src/programmers/internal/application_object.ts +153 -153
  116. package/src/programmers/internal/application_schema.ts +184 -184
  117. package/src/programmers/internal/application_string.ts +41 -41
  118. package/src/programmers/internal/application_templates.ts +27 -27
  119. package/src/programmers/internal/application_tuple.ts +29 -29
  120. package/src/programmers/internal/check_array.ts +22 -22
  121. package/src/programmers/internal/check_array_length.ts +44 -44
  122. package/src/programmers/internal/check_bigint.ts +64 -64
  123. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  124. package/src/programmers/internal/check_everything.ts +28 -28
  125. package/src/programmers/internal/check_native.ts +21 -21
  126. package/src/programmers/internal/check_number.ts +145 -145
  127. package/src/programmers/internal/check_object.ts +48 -48
  128. package/src/programmers/internal/check_string.ts +24 -24
  129. package/src/programmers/internal/check_string_tags.ts +63 -63
  130. package/src/programmers/internal/check_template.ts +50 -50
  131. package/src/programmers/internal/check_union_array_like.ts +260 -260
  132. package/src/programmers/internal/check_union_tuple.ts +33 -33
  133. package/src/programmers/internal/decode_union_object.ts +73 -73
  134. package/src/programmers/internal/feature_object_entries.ts +59 -59
  135. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  136. package/src/programmers/internal/prune_object_properties.ts +60 -60
  137. package/src/programmers/internal/stringify_dynamic_properties.ts +165 -165
  138. package/src/programmers/internal/stringify_native.ts +8 -8
  139. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  140. package/src/programmers/internal/template_to_pattern.ts +15 -15
  141. package/src/schemas/IJsonApplication.ts +9 -9
  142. package/src/schemas/IJsonComponents.ts +26 -26
  143. package/src/schemas/IJsonSchema.ts +127 -127
  144. package/src/transform.ts +21 -21
  145. package/src/transformers/CallExpressionTransformer.ts +172 -172
  146. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  147. package/src/transformers/FileTransformer.ts +49 -49
  148. package/src/transformers/IProject.ts +11 -11
  149. package/src/transformers/ITransformOptions.ts +62 -62
  150. package/src/transformers/ImportTransformer.ts +60 -60
  151. package/src/transformers/NodeTransformer.ts +19 -19
  152. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +120 -120
  153. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  154. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  155. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  156. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  157. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  158. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  159. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  160. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  161. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  162. package/src/transformers/features/miscellaneous/CreateRandomGenerator.ts +42 -42
  163. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  164. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  165. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  166. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  167. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  168. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  169. package/src/transformers/features/miscellaneous/RandomTransformer.ts +48 -48
  170. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  171. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  172. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  173. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  174. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  175. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  176. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  177. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  178. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  179. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
  180. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  181. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  182. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
  183. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  184. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  185. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  186. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  187. package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
  188. package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
  189. package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
  190. package/src/transformers/features/validators/IsTransformer.ts +10 -10
  191. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  192. package/src/transformers/internal/GenericTransformer.ts +99 -99
  193. package/src/typings/Atomic.ts +17 -17
  194. package/src/typings/ClassProperties.ts +5 -5
  195. package/src/typings/OmitNever.ts +3 -3
  196. package/src/typings/SpecialFields.ts +3 -3
  197. package/src/typings/Writable.ts +11 -11
  198. package/src/utils/ArrayUtil.ts +49 -49
  199. package/src/utils/Escaper.ts +50 -50
  200. package/src/utils/MapUtil.ts +14 -14
  201. package/src/utils/PatternUtil.ts +30 -30
  202. package/src/utils/RandomGenerator.ts +90 -90
  203. package/src/utils/Singleton.ts +17 -17
@@ -1,184 +1,184 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
- import { IJsonComponents } from "../../schemas/IJsonComponents";
3
- import { IJsonSchema } from "../../schemas/IJsonSchema";
4
-
5
- import { ApplicationProgrammer } from "../ApplicationProgrammer";
6
- import { AtomicPredicator } from "../helpers/AtomicPredicator";
7
- import { application_array } from "./application_array";
8
- import { application_boolean } from "./application_boolean";
9
- import { application_constant } from "./application_constant";
10
- import { application_native } from "./application_native";
11
- import { application_number } from "./application_number";
12
- import { application_object } from "./application_object";
13
- import { application_string } from "./application_string";
14
- import { application_templates } from "./application_templates";
15
- import { application_tuple } from "./application_tuple";
16
-
17
- /**
18
- * @internal
19
- */
20
- export const application_schema =
21
- (options: ApplicationProgrammer.IOptions) =>
22
- (components: IJsonComponents) =>
23
- <BlockNever extends boolean>(blockNever: BlockNever) =>
24
- (
25
- meta: Metadata,
26
- attribute: IJsonSchema.IAttribute,
27
- ): BlockNever extends true ? IJsonSchema | null : IJsonSchema => {
28
- // VULNERABLE CASE
29
- if (meta.any === true) return {};
30
- else if (meta.nullable && meta.empty())
31
- return { type: "null", ...attribute };
32
-
33
- //----
34
- // GATHER UNION SCHEMAS
35
- //----
36
- const union: IJsonSchema[] = [];
37
-
38
- // toJSON() METHOD
39
- if (meta.resolved !== null) {
40
- const resolved = application_schema(options)(components)(
41
- blockNever,
42
- )(meta.resolved, attribute);
43
- if (resolved !== null) union.push(resolved);
44
- }
45
-
46
- // ATOMIC TYPES
47
- if (meta.templates.length && AtomicPredicator.template(meta))
48
- union.push(application_templates(meta, attribute));
49
- for (const constant of meta.constants)
50
- if (constant.type === "bigint") throw new Error(NO_BIGINT);
51
- else if (
52
- (constant.type === "string" && meta.templates.length) ||
53
- AtomicPredicator.constant(meta)(constant.type) === false
54
- )
55
- continue;
56
- else
57
- union.push(
58
- application_constant(constant, meta.nullable, attribute),
59
- );
60
- for (const type of meta.atomics)
61
- if (type === "bigint") throw new Error(NO_BIGINT);
62
- else if (AtomicPredicator.atomic(meta)(type) === false) continue;
63
- else
64
- union.push(
65
- type === "string"
66
- ? application_string(meta, attribute)
67
- : type === "boolean"
68
- ? application_boolean(meta.nullable, attribute)
69
- : application_number(meta.nullable, attribute),
70
- );
71
-
72
- // ARRAY
73
- for (const schema of meta.arrays.values())
74
- union.push(
75
- application_array(options)(components)()(
76
- schema,
77
- meta.nullable,
78
- attribute,
79
- ),
80
- );
81
-
82
- // TUPLE
83
- for (const items of meta.tuples) {
84
- const tuple: IJsonSchema.ITuple = application_tuple(options)(
85
- components,
86
- )(items, meta.nullable, attribute);
87
- if (options.purpose === "swagger" && items.length === 0)
88
- throw new Error(
89
- "Error on typia.application(): swagger does not support zero length tuple type.",
90
- );
91
- else if (
92
- options.purpose === "ajv" &&
93
- !items[items.length - 1]?.rest
94
- )
95
- union.push(tuple);
96
- else {
97
- // SWAGGER DOES NOT SUPPORT TUPLE TYPE YET
98
- const merged: Metadata = items.reduce((x, y) =>
99
- Metadata.merge(x, y),
100
- );
101
- union.push(
102
- application_array(options)(components)(tuple)(
103
- merged,
104
- merged?.nullable || false,
105
- attribute,
106
- ),
107
- );
108
- }
109
- }
110
-
111
- // NATIVES
112
- for (const native of meta.natives)
113
- if (AtomicPredicator.native(native))
114
- union.push(
115
- native === "String"
116
- ? application_string(meta, attribute)
117
- : native === "Boolean"
118
- ? application_boolean(meta.nullable, attribute)
119
- : application_number(meta.nullable, attribute),
120
- );
121
- else
122
- union.push(
123
- application_native(options)(components)(native)(
124
- meta.nullable,
125
- attribute,
126
- ),
127
- );
128
- if (meta.sets.length)
129
- union.push(
130
- application_native(options)(components)(`Set`)(
131
- meta.nullable,
132
- attribute,
133
- ),
134
- );
135
- if (meta.maps.length)
136
- union.push(
137
- application_native(options)(components)(`Map`)(
138
- meta.nullable,
139
- attribute,
140
- ),
141
- );
142
-
143
- // OBJECT
144
- for (const obj of meta.objects) {
145
- const key: string = obj.name + (meta.nullable ? ".Nullable" : "");
146
- application_object(options)(components)(key, obj, meta.nullable);
147
- union.push(
148
- (options.purpose === "ajv" && obj.recursive
149
- ? recursive
150
- : reference)(`${options.prefix}/${key}`, attribute),
151
- );
152
- }
153
-
154
- //----
155
- // RETURNS
156
- //----
157
- if (union.length === 0) return blockNever === true ? null! : {};
158
- else if (union.length === 1) return union[0]!;
159
- return { oneOf: union, ...attribute };
160
- };
161
-
162
- /**
163
- * @internal
164
- */
165
- const reference = (
166
- $ref: string,
167
- attribute: IJsonSchema.IAttribute,
168
- ): IJsonSchema.IReference => ({
169
- $ref,
170
- ...attribute,
171
- });
172
-
173
- /**
174
- * @internal
175
- */
176
- const recursive = (
177
- $recursiveRef: string,
178
- attribute: IJsonSchema.IAttribute,
179
- ): IJsonSchema.IRecursiveReference => ({
180
- $recursiveRef,
181
- ...attribute,
182
- });
183
-
184
- const NO_BIGINT = "Error on typia.application(): does not allow bigint type.";
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { IJsonComponents } from "../../schemas/IJsonComponents";
3
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
4
+
5
+ import { ApplicationProgrammer } from "../ApplicationProgrammer";
6
+ import { AtomicPredicator } from "../helpers/AtomicPredicator";
7
+ import { application_array } from "./application_array";
8
+ import { application_boolean } from "./application_boolean";
9
+ import { application_constant } from "./application_constant";
10
+ import { application_native } from "./application_native";
11
+ import { application_number } from "./application_number";
12
+ import { application_object } from "./application_object";
13
+ import { application_string } from "./application_string";
14
+ import { application_templates } from "./application_templates";
15
+ import { application_tuple } from "./application_tuple";
16
+
17
+ /**
18
+ * @internal
19
+ */
20
+ export const application_schema =
21
+ (options: ApplicationProgrammer.IOptions) =>
22
+ (components: IJsonComponents) =>
23
+ <BlockNever extends boolean>(blockNever: BlockNever) =>
24
+ (
25
+ meta: Metadata,
26
+ attribute: IJsonSchema.IAttribute,
27
+ ): BlockNever extends true ? IJsonSchema | null : IJsonSchema => {
28
+ // VULNERABLE CASE
29
+ if (meta.any === true) return {};
30
+ else if (meta.nullable && meta.empty())
31
+ return { type: "null", ...attribute };
32
+
33
+ //----
34
+ // GATHER UNION SCHEMAS
35
+ //----
36
+ const union: IJsonSchema[] = [];
37
+
38
+ // toJSON() METHOD
39
+ if (meta.resolved !== null) {
40
+ const resolved = application_schema(options)(components)(
41
+ blockNever,
42
+ )(meta.resolved, attribute);
43
+ if (resolved !== null) union.push(resolved);
44
+ }
45
+
46
+ // ATOMIC TYPES
47
+ if (meta.templates.length && AtomicPredicator.template(meta))
48
+ union.push(application_templates(meta, attribute));
49
+ for (const constant of meta.constants)
50
+ if (constant.type === "bigint") throw new Error(NO_BIGINT);
51
+ else if (
52
+ (constant.type === "string" && meta.templates.length) ||
53
+ AtomicPredicator.constant(meta)(constant.type) === false
54
+ )
55
+ continue;
56
+ else
57
+ union.push(
58
+ application_constant(constant, meta.nullable, attribute),
59
+ );
60
+ for (const type of meta.atomics)
61
+ if (type === "bigint") throw new Error(NO_BIGINT);
62
+ else if (AtomicPredicator.atomic(meta)(type) === false) continue;
63
+ else
64
+ union.push(
65
+ type === "string"
66
+ ? application_string(meta, attribute)
67
+ : type === "boolean"
68
+ ? application_boolean(meta.nullable, attribute)
69
+ : application_number(meta.nullable, attribute),
70
+ );
71
+
72
+ // ARRAY
73
+ for (const schema of meta.arrays.values())
74
+ union.push(
75
+ application_array(options)(components)()(
76
+ schema,
77
+ meta.nullable,
78
+ attribute,
79
+ ),
80
+ );
81
+
82
+ // TUPLE
83
+ for (const items of meta.tuples) {
84
+ const tuple: IJsonSchema.ITuple = application_tuple(options)(
85
+ components,
86
+ )(items, meta.nullable, attribute);
87
+ if (options.purpose === "swagger" && items.length === 0)
88
+ throw new Error(
89
+ "Error on typia.application(): swagger does not support zero length tuple type.",
90
+ );
91
+ else if (
92
+ options.purpose === "ajv" &&
93
+ !items[items.length - 1]?.rest
94
+ )
95
+ union.push(tuple);
96
+ else {
97
+ // SWAGGER DOES NOT SUPPORT TUPLE TYPE YET
98
+ const merged: Metadata = items.reduce((x, y) =>
99
+ Metadata.merge(x, y),
100
+ );
101
+ union.push(
102
+ application_array(options)(components)(tuple)(
103
+ merged,
104
+ merged?.nullable || false,
105
+ attribute,
106
+ ),
107
+ );
108
+ }
109
+ }
110
+
111
+ // NATIVES
112
+ for (const native of meta.natives)
113
+ if (AtomicPredicator.native(native))
114
+ union.push(
115
+ native === "String"
116
+ ? application_string(meta, attribute)
117
+ : native === "Boolean"
118
+ ? application_boolean(meta.nullable, attribute)
119
+ : application_number(meta.nullable, attribute),
120
+ );
121
+ else
122
+ union.push(
123
+ application_native(options)(components)(native)(
124
+ meta.nullable,
125
+ attribute,
126
+ ),
127
+ );
128
+ if (meta.sets.length)
129
+ union.push(
130
+ application_native(options)(components)(`Set`)(
131
+ meta.nullable,
132
+ attribute,
133
+ ),
134
+ );
135
+ if (meta.maps.length)
136
+ union.push(
137
+ application_native(options)(components)(`Map`)(
138
+ meta.nullable,
139
+ attribute,
140
+ ),
141
+ );
142
+
143
+ // OBJECT
144
+ for (const obj of meta.objects) {
145
+ const key: string = obj.name + (meta.nullable ? ".Nullable" : "");
146
+ application_object(options)(components)(key, obj, meta.nullable);
147
+ union.push(
148
+ (options.purpose === "ajv" && obj.recursive
149
+ ? recursive
150
+ : reference)(`${options.prefix}/${key}`, attribute),
151
+ );
152
+ }
153
+
154
+ //----
155
+ // RETURNS
156
+ //----
157
+ if (union.length === 0) return blockNever === true ? null! : {};
158
+ else if (union.length === 1) return union[0]!;
159
+ return { oneOf: union, ...attribute };
160
+ };
161
+
162
+ /**
163
+ * @internal
164
+ */
165
+ const reference = (
166
+ $ref: string,
167
+ attribute: IJsonSchema.IAttribute,
168
+ ): IJsonSchema.IReference => ({
169
+ $ref,
170
+ ...attribute,
171
+ });
172
+
173
+ /**
174
+ * @internal
175
+ */
176
+ const recursive = (
177
+ $recursiveRef: string,
178
+ attribute: IJsonSchema.IAttribute,
179
+ ): IJsonSchema.IRecursiveReference => ({
180
+ $recursiveRef,
181
+ ...attribute,
182
+ });
183
+
184
+ const NO_BIGINT = "Error on typia.application(): does not allow bigint type.";
@@ -1,41 +1,41 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
- import { IJsonSchema } from "../../schemas/IJsonSchema";
3
-
4
- import { application_default_string } from "./application_default_string";
5
-
6
- /**
7
- * @internal
8
- */
9
- export const application_string = (
10
- meta: Metadata,
11
- attribute: IJsonSchema.IAttribute,
12
- ): IJsonSchema.IString => {
13
- const output: IJsonSchema.IString = {
14
- type: "string",
15
- nullable: meta.nullable,
16
- ...attribute,
17
- };
18
-
19
- // FORMAT TAG OF METADATA
20
- const formatJsdocTag = attribute["x-typia-jsDocTags"]?.find(
21
- (tag) => tag.name === "format",
22
- );
23
- if (formatJsdocTag?.text?.length)
24
- output.format = formatJsdocTag?.text.map((t) => t.text).join(" ");
25
-
26
- // REGULAR TAGS COMPATIBLE WITH JSON-SCHEMA
27
- for (const tag of attribute["x-typia-metaTags"] || []) {
28
- // RANGE
29
- if (tag.kind === "minLength") output.minLength = tag.value;
30
- else if (tag.kind === "maxLength") output.maxLength = tag.value;
31
- // FORMAT AND PATTERN
32
- else if (tag.kind === "format") output.format = tag.value;
33
- else if (tag.kind === "pattern") output.pattern = tag.value;
34
- }
35
-
36
- // DEFAULT CONFIGURATION
37
- output.default = application_default_string(meta, attribute)(output);
38
-
39
- // RETURNS
40
- return output;
41
- };
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
3
+
4
+ import { application_default_string } from "./application_default_string";
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export const application_string = (
10
+ meta: Metadata,
11
+ attribute: IJsonSchema.IAttribute,
12
+ ): IJsonSchema.IString => {
13
+ const output: IJsonSchema.IString = {
14
+ type: "string",
15
+ nullable: meta.nullable,
16
+ ...attribute,
17
+ };
18
+
19
+ // FORMAT TAG OF METADATA
20
+ const formatJsdocTag = attribute["x-typia-jsDocTags"]?.find(
21
+ (tag) => tag.name === "format",
22
+ );
23
+ if (formatJsdocTag?.text?.length)
24
+ output.format = formatJsdocTag?.text.map((t) => t.text).join(" ");
25
+
26
+ // REGULAR TAGS COMPATIBLE WITH JSON-SCHEMA
27
+ for (const tag of attribute["x-typia-metaTags"] || []) {
28
+ // RANGE
29
+ if (tag.kind === "minLength") output.minLength = tag.value;
30
+ else if (tag.kind === "maxLength") output.maxLength = tag.value;
31
+ // FORMAT AND PATTERN
32
+ else if (tag.kind === "format") output.format = tag.value;
33
+ else if (tag.kind === "pattern") output.pattern = tag.value;
34
+ }
35
+
36
+ // DEFAULT CONFIGURATION
37
+ output.default = application_default_string(meta, attribute)(output);
38
+
39
+ // RETURNS
40
+ return output;
41
+ };
@@ -1,27 +1,27 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
- import { IJsonSchema } from "../../schemas/IJsonSchema";
3
-
4
- import { application_default_string } from "./application_default_string";
5
- import { metadata_to_pattern } from "./metadata_to_pattern";
6
-
7
- /**
8
- * @internal
9
- */
10
- export const application_templates = (
11
- meta: Metadata,
12
- attribute: IJsonSchema.IAttribute,
13
- ): IJsonSchema.IString => {
14
- // CONSTRUCT PATTERN
15
- const output: IJsonSchema.IString = {
16
- type: "string",
17
- nullable: meta.nullable,
18
- ...attribute,
19
- };
20
- output.pattern = metadata_to_pattern(true)(meta);
21
-
22
- // DEFAULT VALUE
23
- output.default = application_default_string(meta, attribute)(output);
24
-
25
- // RETURNS
26
- return output;
27
- };
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
3
+
4
+ import { application_default_string } from "./application_default_string";
5
+ import { metadata_to_pattern } from "./metadata_to_pattern";
6
+
7
+ /**
8
+ * @internal
9
+ */
10
+ export const application_templates = (
11
+ meta: Metadata,
12
+ attribute: IJsonSchema.IAttribute,
13
+ ): IJsonSchema.IString => {
14
+ // CONSTRUCT PATTERN
15
+ const output: IJsonSchema.IString = {
16
+ type: "string",
17
+ nullable: meta.nullable,
18
+ ...attribute,
19
+ };
20
+ output.pattern = metadata_to_pattern(true)(meta);
21
+
22
+ // DEFAULT VALUE
23
+ output.default = application_default_string(meta, attribute)(output);
24
+
25
+ // RETURNS
26
+ return output;
27
+ };
@@ -1,29 +1,29 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
- import { IJsonComponents } from "../../schemas/IJsonComponents";
3
- import { IJsonSchema } from "../../schemas/IJsonSchema";
4
-
5
- import { ApplicationProgrammer } from "../ApplicationProgrammer";
6
- import { application_schema } from "./application_schema";
7
-
8
- /**
9
- * @internal
10
- */
11
- export const application_tuple =
12
- (options: ApplicationProgrammer.IOptions) =>
13
- (components: IJsonComponents) =>
14
- (
15
- items: Array<Metadata>,
16
- nullable: boolean,
17
- attribute: IJsonSchema.IAttribute,
18
- ): IJsonSchema.ITuple => ({
19
- type: "array",
20
- items: items.map((meta, i) =>
21
- application_schema(options)(components)(false)(meta.rest ?? meta, {
22
- ...attribute,
23
- "x-typia-rest":
24
- i === items.length - 1 ? meta.rest !== null : undefined,
25
- }),
26
- ),
27
- nullable,
28
- ...attribute,
29
- });
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { IJsonComponents } from "../../schemas/IJsonComponents";
3
+ import { IJsonSchema } from "../../schemas/IJsonSchema";
4
+
5
+ import { ApplicationProgrammer } from "../ApplicationProgrammer";
6
+ import { application_schema } from "./application_schema";
7
+
8
+ /**
9
+ * @internal
10
+ */
11
+ export const application_tuple =
12
+ (options: ApplicationProgrammer.IOptions) =>
13
+ (components: IJsonComponents) =>
14
+ (
15
+ items: Array<Metadata>,
16
+ nullable: boolean,
17
+ attribute: IJsonSchema.IAttribute,
18
+ ): IJsonSchema.ITuple => ({
19
+ type: "array",
20
+ items: items.map((meta, i) =>
21
+ application_schema(options)(components)(false)(meta.rest ?? meta, {
22
+ ...attribute,
23
+ "x-typia-rest":
24
+ i === items.length - 1 ? meta.rest !== null : undefined,
25
+ }),
26
+ ),
27
+ nullable,
28
+ ...attribute,
29
+ });
@@ -1,22 +1,22 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
-
5
- import { IMetadataTag } from "../../metadata/IMetadataTag";
6
-
7
- import { check_array_length } from "./check_array_length";
8
-
9
- /**
10
- * @internal
11
- */
12
- export function check_array(
13
- input: ts.Expression,
14
- tagList: IMetadataTag[],
15
- ): ts.Expression {
16
- const conditions: ts.Expression[] = [ExpressionFactory.isArray(input)];
17
-
18
- const length: ts.Expression | null = check_array_length(input, tagList);
19
- if (length !== null) conditions.push(length);
20
-
21
- return conditions.reduce((x, y) => ts.factory.createLogicalAnd(x, y));
22
- }
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+
5
+ import { IMetadataTag } from "../../metadata/IMetadataTag";
6
+
7
+ import { check_array_length } from "./check_array_length";
8
+
9
+ /**
10
+ * @internal
11
+ */
12
+ export function check_array(
13
+ input: ts.Expression,
14
+ tagList: IMetadataTag[],
15
+ ): ts.Expression {
16
+ const conditions: ts.Expression[] = [ExpressionFactory.isArray(input)];
17
+
18
+ const length: ts.Expression | null = check_array_length(input, tagList);
19
+ if (length !== null) conditions.push(length);
20
+
21
+ return conditions.reduce((x, y) => ts.factory.createLogicalAnd(x, y));
22
+ }