typia 3.6.2 → 3.6.3

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 (205) hide show
  1. package/README.md +2 -1
  2. package/lib/factories/internal/metadata/emplace_metadata_object.js +8 -7
  3. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  4. package/lib/module.d.ts +2 -2
  5. package/package.json +1 -1
  6. package/src/IRandomGenerator.ts +16 -16
  7. package/src/IValidation.ts +21 -21
  8. package/src/Primitive.ts +104 -104
  9. package/src/TypeGuardError.ts +36 -36
  10. package/src/executable/TypiaGenerateWizard.ts +87 -87
  11. package/src/executable/TypiaSetupWizard.ts +142 -142
  12. package/src/executable/setup/ArgumentParser.ts +91 -91
  13. package/src/executable/setup/CommandExecutor.ts +8 -8
  14. package/src/executable/setup/FileRetriever.ts +33 -33
  15. package/src/executable/setup/PackageManager.ts +92 -92
  16. package/src/executable/setup/PluginConfigurator.ts +99 -99
  17. package/src/executable/typia.ts +38 -38
  18. package/src/factories/CommentFactory.ts +10 -10
  19. package/src/factories/ExpressionFactory.ts +77 -77
  20. package/src/factories/IdentifierFactory.ts +73 -73
  21. package/src/factories/LiteralFactory.ts +44 -44
  22. package/src/factories/MetadataCollection.ts +122 -122
  23. package/src/factories/MetadataFactory.ts +51 -51
  24. package/src/factories/MetadataTagFactory.ts +265 -265
  25. package/src/factories/StatementFactory.ts +60 -60
  26. package/src/factories/TemplateFactory.ts +56 -56
  27. package/src/factories/TypeFactory.ts +129 -129
  28. package/src/factories/TypiaFileFactory.ts +117 -117
  29. package/src/factories/ValueFactory.ts +12 -12
  30. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  31. package/src/factories/internal/metadata/emplace_metadata_object.ts +142 -140
  32. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  33. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  34. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  35. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  36. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  37. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  38. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  39. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  40. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  41. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  42. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  43. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  44. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  45. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  46. package/src/functional/$any.ts +3 -3
  47. package/src/functional/$every.ts +11 -11
  48. package/src/functional/$guard.ts +35 -35
  49. package/src/functional/$is_between.ts +7 -7
  50. package/src/functional/$is_email.ts +5 -5
  51. package/src/functional/$is_ipv4.ts +5 -5
  52. package/src/functional/$is_ipv6.ts +5 -5
  53. package/src/functional/$is_url.ts +5 -5
  54. package/src/functional/$is_uuid.ts +5 -5
  55. package/src/functional/$join.ts +50 -50
  56. package/src/functional/$number.ts +12 -12
  57. package/src/functional/$report.ts +15 -15
  58. package/src/functional/$rest.ts +3 -3
  59. package/src/functional/$string.ts +37 -37
  60. package/src/functional/$tail.ts +6 -6
  61. package/src/functional/Namespace.ts +121 -121
  62. package/src/index.ts +4 -4
  63. package/src/metadata/IJsDocTagInfo.ts +10 -10
  64. package/src/metadata/IMetadata.ts +25 -25
  65. package/src/metadata/IMetadataApplication.ts +7 -7
  66. package/src/metadata/IMetadataConstant.ts +16 -16
  67. package/src/metadata/IMetadataEntry.ts +6 -6
  68. package/src/metadata/IMetadataObject.ts +29 -29
  69. package/src/metadata/IMetadataProperty.ts +11 -11
  70. package/src/metadata/IMetadataTag.ts +113 -113
  71. package/src/metadata/Metadata.ts +534 -534
  72. package/src/metadata/MetadataConstant.ts +3 -3
  73. package/src/metadata/MetadataObject.ts +131 -131
  74. package/src/metadata/MetadataProperty.ts +64 -64
  75. package/src/module.ts +1946 -1946
  76. package/src/programmers/ApplicationProgrammer.ts +55 -55
  77. package/src/programmers/AssertCloneProgrammer.ts +70 -70
  78. package/src/programmers/AssertParseProgrammer.ts +65 -65
  79. package/src/programmers/AssertProgrammer.ts +232 -232
  80. package/src/programmers/AssertPruneProgrammer.ts +67 -67
  81. package/src/programmers/AssertStringifyProgrammer.ts +71 -71
  82. package/src/programmers/CheckerProgrammer.ts +893 -893
  83. package/src/programmers/CloneProgrammer.ts +386 -386
  84. package/src/programmers/FeatureProgrammer.ts +505 -505
  85. package/src/programmers/IsCloneProgrammer.ts +80 -80
  86. package/src/programmers/IsParseProgrammer.ts +74 -74
  87. package/src/programmers/IsProgrammer.ts +200 -200
  88. package/src/programmers/IsPruneProgrammer.ts +75 -75
  89. package/src/programmers/IsStringifyProgrammer.ts +81 -81
  90. package/src/programmers/PruneProgrammer.ts +341 -341
  91. package/src/programmers/RandomProgrammer.ts +391 -391
  92. package/src/programmers/StringifyProgrammer.ts +795 -795
  93. package/src/programmers/ValidateCloneProgrammer.ts +90 -90
  94. package/src/programmers/ValidateParseProgrammer.ts +69 -69
  95. package/src/programmers/ValidateProgrammer.ts +266 -266
  96. package/src/programmers/ValidatePruneProgrammer.ts +83 -83
  97. package/src/programmers/ValidateStringifyProgrammer.ts +89 -89
  98. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  99. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  100. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  101. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  102. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  103. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  104. package/src/programmers/helpers/RandomJoiner.ts +149 -149
  105. package/src/programmers/helpers/RandomRanger.ts +216 -216
  106. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  107. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  108. package/src/programmers/helpers/UnionExplorer.ts +274 -274
  109. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  110. package/src/programmers/internal/application_array.ts +37 -37
  111. package/src/programmers/internal/application_boolean.ts +17 -17
  112. package/src/programmers/internal/application_constant.ts +29 -29
  113. package/src/programmers/internal/application_default.ts +17 -17
  114. package/src/programmers/internal/application_default_string.ts +32 -32
  115. package/src/programmers/internal/application_native.ts +29 -29
  116. package/src/programmers/internal/application_number.ts +70 -70
  117. package/src/programmers/internal/application_object.ts +153 -153
  118. package/src/programmers/internal/application_schema.ts +184 -184
  119. package/src/programmers/internal/application_string.ts +41 -41
  120. package/src/programmers/internal/application_templates.ts +27 -27
  121. package/src/programmers/internal/application_tuple.ts +29 -29
  122. package/src/programmers/internal/check_array.ts +22 -22
  123. package/src/programmers/internal/check_array_length.ts +44 -44
  124. package/src/programmers/internal/check_bigint.ts +64 -64
  125. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  126. package/src/programmers/internal/check_everything.ts +28 -28
  127. package/src/programmers/internal/check_native.ts +21 -21
  128. package/src/programmers/internal/check_number.ts +145 -145
  129. package/src/programmers/internal/check_object.ts +48 -48
  130. package/src/programmers/internal/check_string.ts +24 -24
  131. package/src/programmers/internal/check_string_tags.ts +63 -63
  132. package/src/programmers/internal/check_template.ts +50 -50
  133. package/src/programmers/internal/check_union_array_like.ts +260 -260
  134. package/src/programmers/internal/check_union_tuple.ts +33 -33
  135. package/src/programmers/internal/decode_union_object.ts +73 -73
  136. package/src/programmers/internal/feature_object_entries.ts +59 -59
  137. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  138. package/src/programmers/internal/prune_object_properties.ts +60 -60
  139. package/src/programmers/internal/stringify_dynamic_properties.ts +165 -165
  140. package/src/programmers/internal/stringify_native.ts +8 -8
  141. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  142. package/src/programmers/internal/template_to_pattern.ts +15 -15
  143. package/src/schemas/IJsonApplication.ts +9 -9
  144. package/src/schemas/IJsonComponents.ts +26 -26
  145. package/src/schemas/IJsonSchema.ts +127 -127
  146. package/src/transform.ts +21 -21
  147. package/src/transformers/CallExpressionTransformer.ts +172 -172
  148. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  149. package/src/transformers/FileTransformer.ts +49 -49
  150. package/src/transformers/IProject.ts +11 -11
  151. package/src/transformers/ITransformOptions.ts +62 -62
  152. package/src/transformers/ImportTransformer.ts +60 -60
  153. package/src/transformers/NodeTransformer.ts +19 -19
  154. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +120 -120
  155. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  156. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  157. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  158. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  159. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  160. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  161. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  162. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  163. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  164. package/src/transformers/features/miscellaneous/CreateRandomGenerator.ts +42 -42
  165. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  166. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  167. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  168. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  169. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  170. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  171. package/src/transformers/features/miscellaneous/RandomTransformer.ts +48 -48
  172. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  173. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  174. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  175. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  176. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  177. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  178. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  179. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  180. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  181. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +9 -9
  182. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  183. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  184. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +11 -11
  185. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  186. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  187. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  188. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  189. package/src/transformers/features/validators/CreateAssertTransformer.ts +12 -12
  190. package/src/transformers/features/validators/CreateIsTransformer.ts +10 -10
  191. package/src/transformers/features/validators/CreateValidateTransformer.ts +12 -12
  192. package/src/transformers/features/validators/IsTransformer.ts +10 -10
  193. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
  194. package/src/transformers/internal/GenericTransformer.ts +99 -99
  195. package/src/typings/Atomic.ts +17 -17
  196. package/src/typings/ClassProperties.ts +5 -5
  197. package/src/typings/OmitNever.ts +3 -3
  198. package/src/typings/SpecialFields.ts +3 -3
  199. package/src/typings/Writable.ts +11 -11
  200. package/src/utils/ArrayUtil.ts +49 -49
  201. package/src/utils/Escaper.ts +50 -50
  202. package/src/utils/MapUtil.ts +14 -14
  203. package/src/utils/PatternUtil.ts +30 -30
  204. package/src/utils/RandomGenerator.ts +90 -90
  205. package/src/utils/Singleton.ts +17 -17
@@ -1,153 +1,153 @@
1
- import { CommentFactory } from "../../factories/CommentFactory";
2
-
3
- import { IJsDocTagInfo } from "../../metadata/IJsDocTagInfo";
4
- import { Metadata } from "../../metadata/Metadata";
5
- import { MetadataObject } from "../../metadata/MetadataObject";
6
- import { IJsonComponents } from "../../schemas/IJsonComponents";
7
-
8
- import { PatternUtil } from "../../utils/PatternUtil";
9
-
10
- import { IJsonSchema } from "../../module";
11
- import { ApplicationProgrammer } from "../ApplicationProgrammer";
12
- import { application_schema } from "./application_schema";
13
- import { metadata_to_pattern } from "./metadata_to_pattern";
14
-
15
- /**
16
- * @internal
17
- */
18
- export const application_object =
19
- (options: ApplicationProgrammer.IOptions) =>
20
- (components: IJsonComponents) =>
21
- (key: string, obj: MetadataObject, nullable: boolean): void => {
22
- // TEMPORARY ASSIGNMENT
23
- if (components.schemas[key] !== undefined) return;
24
- components.schemas[key] = {} as any;
25
-
26
- // ITERATE PROPERTIES
27
- const properties: Record<string, any> = {};
28
- const extraMeta: ISuperfluous = {
29
- patternProperties: {},
30
- additionalProperties: undefined,
31
- };
32
- const required: string[] = [];
33
-
34
- for (const property of obj.properties) {
35
- if (
36
- property.value.functional === true &&
37
- property.value.nullable === false &&
38
- property.value.required === true &&
39
- property.value.size() === 0
40
- )
41
- continue;
42
-
43
- const key: string | null = property.key.getSoleLiteral();
44
- const schema: IJsonSchema | null = application_schema(options)(
45
- components,
46
- )(true)(property.value, {
47
- deprecated:
48
- !!property.jsDocTags.find(
49
- (tag) => tag.name === "deprecated",
50
- ) || undefined,
51
- title: (() => {
52
- const info: IJsDocTagInfo | undefined =
53
- property.jsDocTags.find((tag) => tag.name === "title");
54
- return info?.text?.length
55
- ? CommentFactory.generate(info.text)
56
- : undefined;
57
- })(),
58
- description: property.description,
59
- "x-typia-metaTags": property.tags.length
60
- ? property.tags
61
- : undefined,
62
- "x-typia-jsDocTags": property.jsDocTags.length
63
- ? property.jsDocTags
64
- : undefined,
65
- "x-typia-required": property.value.required,
66
- });
67
-
68
- if (schema === null) continue;
69
- else if (key !== null) {
70
- properties[key] = schema;
71
- if (property.value.required === true) required.push(key);
72
- } else {
73
- const pattern: string = metadata_to_pattern(true)(property.key);
74
- if (pattern === PatternUtil.STRING)
75
- extraMeta.additionalProperties = [property.value, schema];
76
- else
77
- extraMeta.patternProperties[pattern] = [
78
- property.value,
79
- schema,
80
- ];
81
- }
82
- }
83
-
84
- const extraProps = {
85
- additionalProperties: extraMeta.additionalProperties?.[1],
86
- patternProperties: (() => {
87
- if (Object.keys(extraMeta.patternProperties).length === 0)
88
- return undefined;
89
- const output: Record<string, IJsonSchema> = {};
90
- for (const [key, value] of Object.entries(
91
- extraMeta.patternProperties,
92
- ))
93
- output[key] = value[1];
94
- return output;
95
- })(),
96
- };
97
- const schema: IJsonComponents.IObject = {
98
- $id:
99
- options.purpose === "ajv"
100
- ? options.prefix + "/" + key
101
- : undefined,
102
- $recursiveAnchor:
103
- (options.purpose === "ajv" && obj.recursive) || undefined,
104
- type: "object",
105
- properties,
106
- nullable,
107
- required: required.length ? required : undefined,
108
- description: obj.description,
109
- "x-typia-jsDocTags": obj.jsDocTags,
110
- ...(options.purpose === "ajv"
111
- ? extraProps
112
- : {
113
- // swagger can't express patternProperties
114
- "x-typia-additionalProperties":
115
- extraProps.additionalProperties,
116
- "x-typia-patternProperties": extraProps.patternProperties,
117
- additionalProperties:
118
- join(options)(components)(extraMeta),
119
- }),
120
- };
121
- components.schemas[key] = schema;
122
- };
123
-
124
- const join =
125
- (options: ApplicationProgrammer.IOptions) =>
126
- (components: IJsonComponents) =>
127
- (extra: ISuperfluous): IJsonSchema | undefined => {
128
- // LIST UP METADATA
129
- const elements: [Metadata, IJsonSchema][] = Object.values(
130
- extra.patternProperties || {},
131
- );
132
- if (extra.additionalProperties)
133
- elements.push(extra.additionalProperties);
134
-
135
- // SHORT RETURN
136
- if (elements.length === 0) return undefined;
137
- else if (elements.length === 1) return elements[0]![1]!;
138
-
139
- // MERGE METADATA AND GENERATE VULNERABLE SCHEMA
140
- const meta: Metadata = elements
141
- .map((tuple) => tuple[0])
142
- .reduce((x, y) => Metadata.merge(x, y));
143
- return (
144
- application_schema(options)(components)(true)(meta, {
145
- "x-typia-required": false,
146
- }) ?? undefined
147
- );
148
- };
149
-
150
- interface ISuperfluous {
151
- additionalProperties?: [Metadata, IJsonSchema];
152
- patternProperties: Record<string, [Metadata, IJsonSchema]>;
153
- }
1
+ import { CommentFactory } from "../../factories/CommentFactory";
2
+
3
+ import { IJsDocTagInfo } from "../../metadata/IJsDocTagInfo";
4
+ import { Metadata } from "../../metadata/Metadata";
5
+ import { MetadataObject } from "../../metadata/MetadataObject";
6
+ import { IJsonComponents } from "../../schemas/IJsonComponents";
7
+
8
+ import { PatternUtil } from "../../utils/PatternUtil";
9
+
10
+ import { IJsonSchema } from "../../module";
11
+ import { ApplicationProgrammer } from "../ApplicationProgrammer";
12
+ import { application_schema } from "./application_schema";
13
+ import { metadata_to_pattern } from "./metadata_to_pattern";
14
+
15
+ /**
16
+ * @internal
17
+ */
18
+ export const application_object =
19
+ (options: ApplicationProgrammer.IOptions) =>
20
+ (components: IJsonComponents) =>
21
+ (key: string, obj: MetadataObject, nullable: boolean): void => {
22
+ // TEMPORARY ASSIGNMENT
23
+ if (components.schemas[key] !== undefined) return;
24
+ components.schemas[key] = {} as any;
25
+
26
+ // ITERATE PROPERTIES
27
+ const properties: Record<string, any> = {};
28
+ const extraMeta: ISuperfluous = {
29
+ patternProperties: {},
30
+ additionalProperties: undefined,
31
+ };
32
+ const required: string[] = [];
33
+
34
+ for (const property of obj.properties) {
35
+ if (
36
+ property.value.functional === true &&
37
+ property.value.nullable === false &&
38
+ property.value.required === true &&
39
+ property.value.size() === 0
40
+ )
41
+ continue;
42
+
43
+ const key: string | null = property.key.getSoleLiteral();
44
+ const schema: IJsonSchema | null = application_schema(options)(
45
+ components,
46
+ )(true)(property.value, {
47
+ deprecated:
48
+ !!property.jsDocTags.find(
49
+ (tag) => tag.name === "deprecated",
50
+ ) || undefined,
51
+ title: (() => {
52
+ const info: IJsDocTagInfo | undefined =
53
+ property.jsDocTags.find((tag) => tag.name === "title");
54
+ return info?.text?.length
55
+ ? CommentFactory.generate(info.text)
56
+ : undefined;
57
+ })(),
58
+ description: property.description,
59
+ "x-typia-metaTags": property.tags.length
60
+ ? property.tags
61
+ : undefined,
62
+ "x-typia-jsDocTags": property.jsDocTags.length
63
+ ? property.jsDocTags
64
+ : undefined,
65
+ "x-typia-required": property.value.required,
66
+ });
67
+
68
+ if (schema === null) continue;
69
+ else if (key !== null) {
70
+ properties[key] = schema;
71
+ if (property.value.required === true) required.push(key);
72
+ } else {
73
+ const pattern: string = metadata_to_pattern(true)(property.key);
74
+ if (pattern === PatternUtil.STRING)
75
+ extraMeta.additionalProperties = [property.value, schema];
76
+ else
77
+ extraMeta.patternProperties[pattern] = [
78
+ property.value,
79
+ schema,
80
+ ];
81
+ }
82
+ }
83
+
84
+ const extraProps = {
85
+ additionalProperties: extraMeta.additionalProperties?.[1],
86
+ patternProperties: (() => {
87
+ if (Object.keys(extraMeta.patternProperties).length === 0)
88
+ return undefined;
89
+ const output: Record<string, IJsonSchema> = {};
90
+ for (const [key, value] of Object.entries(
91
+ extraMeta.patternProperties,
92
+ ))
93
+ output[key] = value[1];
94
+ return output;
95
+ })(),
96
+ };
97
+ const schema: IJsonComponents.IObject = {
98
+ $id:
99
+ options.purpose === "ajv"
100
+ ? options.prefix + "/" + key
101
+ : undefined,
102
+ $recursiveAnchor:
103
+ (options.purpose === "ajv" && obj.recursive) || undefined,
104
+ type: "object",
105
+ properties,
106
+ nullable,
107
+ required: required.length ? required : undefined,
108
+ description: obj.description,
109
+ "x-typia-jsDocTags": obj.jsDocTags,
110
+ ...(options.purpose === "ajv"
111
+ ? extraProps
112
+ : {
113
+ // swagger can't express patternProperties
114
+ "x-typia-additionalProperties":
115
+ extraProps.additionalProperties,
116
+ "x-typia-patternProperties": extraProps.patternProperties,
117
+ additionalProperties:
118
+ join(options)(components)(extraMeta),
119
+ }),
120
+ };
121
+ components.schemas[key] = schema;
122
+ };
123
+
124
+ const join =
125
+ (options: ApplicationProgrammer.IOptions) =>
126
+ (components: IJsonComponents) =>
127
+ (extra: ISuperfluous): IJsonSchema | undefined => {
128
+ // LIST UP METADATA
129
+ const elements: [Metadata, IJsonSchema][] = Object.values(
130
+ extra.patternProperties || {},
131
+ );
132
+ if (extra.additionalProperties)
133
+ elements.push(extra.additionalProperties);
134
+
135
+ // SHORT RETURN
136
+ if (elements.length === 0) return undefined;
137
+ else if (elements.length === 1) return elements[0]![1]!;
138
+
139
+ // MERGE METADATA AND GENERATE VULNERABLE SCHEMA
140
+ const meta: Metadata = elements
141
+ .map((tuple) => tuple[0])
142
+ .reduce((x, y) => Metadata.merge(x, y));
143
+ return (
144
+ application_schema(options)(components)(true)(meta, {
145
+ "x-typia-required": false,
146
+ }) ?? undefined
147
+ );
148
+ };
149
+
150
+ interface ISuperfluous {
151
+ additionalProperties?: [Metadata, IJsonSchema];
152
+ patternProperties: Record<string, [Metadata, IJsonSchema]>;
153
+ }