typia 7.0.0-dev.20241011 → 7.0.0-dev.20241012

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 (250) hide show
  1. package/lib/factories/MetadataCollection.d.ts +4 -4
  2. package/lib/factories/MetadataCollection.js +6 -4
  3. package/lib/factories/MetadataCollection.js.map +1 -1
  4. package/lib/factories/MetadataFactory.d.ts +2 -2
  5. package/lib/factories/MetadataFactory.js +8 -2
  6. package/lib/factories/MetadataFactory.js.map +1 -1
  7. package/lib/factories/MetadataTypeTagFactory.d.ts +2 -2
  8. package/lib/factories/MetadataTypeTagFactory.js +6 -6
  9. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  10. package/lib/factories/MetadataTypeTagSchemaFactory.d.ts +2 -2
  11. package/lib/factories/MetadataTypeTagSchemaFactory.js +1 -1
  12. package/lib/factories/MetadataTypeTagSchemaFactory.js.map +1 -1
  13. package/lib/factories/ProtobufFactory.js +12 -22
  14. package/lib/factories/ProtobufFactory.js.map +1 -1
  15. package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +2 -2
  16. package/lib/factories/internal/metadata/iterate_metadata_collection.js +2 -1
  17. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  18. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -2
  19. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +5 -2
  20. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  21. package/lib/factories/internal/metadata/iterate_metadata_object.js +5 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata_sort.js +6 -2
  24. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  25. package/lib/internal/$ProtobufSizer.js +1 -8
  26. package/lib/internal/$ProtobufSizer.js.map +1 -1
  27. package/lib/json.d.ts +1 -1
  28. package/lib/module.d.ts +1 -1
  29. package/lib/module.js +1 -1
  30. package/lib/module.js.map +1 -1
  31. package/lib/programmers/CheckerProgrammer.d.ts +2 -2
  32. package/lib/programmers/CheckerProgrammer.js +5 -3
  33. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  34. package/lib/programmers/FeatureProgrammer.d.ts +5 -5
  35. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  36. package/lib/programmers/IsProgrammer.d.ts +2 -2
  37. package/lib/programmers/RandomProgrammer.js +1 -1
  38. package/lib/programmers/RandomProgrammer.js.map +1 -1
  39. package/lib/programmers/helpers/ProtobufUtil.d.ts +2 -2
  40. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  41. package/lib/programmers/helpers/PruneJoiner.d.ts +2 -2
  42. package/lib/programmers/helpers/RandomJoiner.d.ts +2 -2
  43. package/lib/programmers/helpers/UnionExplorer.d.ts +3 -3
  44. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  45. package/lib/programmers/helpers/UnionPredicator.d.ts +3 -3
  46. package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
  47. package/lib/programmers/http/HttpFormDataProgrammer.js +1 -1
  48. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  49. package/lib/programmers/http/HttpHeadersProgrammer.js +1 -1
  50. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  51. package/lib/programmers/http/HttpQueryProgrammer.js +2 -2
  52. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  53. package/lib/programmers/internal/application_union_discriminator.js +2 -2
  54. package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
  55. package/lib/programmers/internal/application_v30_alias.js +1 -1
  56. package/lib/programmers/internal/application_v30_alias.js.map +1 -1
  57. package/lib/programmers/internal/application_v30_schema.js +1 -1
  58. package/lib/programmers/internal/application_v30_schema.js.map +1 -1
  59. package/lib/programmers/internal/application_v31_alias.js +1 -1
  60. package/lib/programmers/internal/application_v31_alias.js.map +1 -1
  61. package/lib/programmers/internal/application_v31_schema.js +1 -1
  62. package/lib/programmers/internal/application_v31_schema.js.map +1 -1
  63. package/lib/programmers/internal/llm_schema_object.js +1 -1
  64. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  65. package/lib/programmers/internal/llm_schema_station.js +2 -2
  66. package/lib/programmers/internal/llm_schema_station.js.map +1 -1
  67. package/lib/programmers/internal/prune_object_properties.js.map +1 -1
  68. package/lib/programmers/json/JsonApplicationProgrammer.js +6 -5
  69. package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
  70. package/lib/programmers/json/JsonSchemasProgrammer.d.ts +1 -1
  71. package/lib/programmers/json/JsonStringifyProgrammer.js +3 -3
  72. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  73. package/lib/programmers/llm/LlmApplicationProgrammer.js +7 -6
  74. package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
  75. package/lib/programmers/llm/LlmSchemaProgrammer.js +1 -1
  76. package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
  77. package/lib/programmers/misc/MiscCloneProgrammer.js +1 -1
  78. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  79. package/lib/programmers/misc/MiscPruneProgrammer.js +1 -1
  80. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  81. package/lib/programmers/notations/NotationGeneralProgrammer.js +1 -1
  82. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  83. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +6 -6
  84. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  85. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +1 -1
  86. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  87. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +3 -3
  88. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  89. package/lib/schemas/json/IJsonSchemaCollection.js +3 -0
  90. package/lib/schemas/json/IJsonSchemaCollection.js.map +1 -0
  91. package/lib/schemas/metadata/IMetadata.d.ts +4 -1
  92. package/lib/schemas/metadata/IMetadataArray.d.ts +1 -2
  93. package/lib/schemas/metadata/IMetadataComponents.d.ts +2 -2
  94. package/lib/schemas/metadata/IMetadataDictionary.d.ts +2 -2
  95. package/lib/schemas/metadata/IMetadataObject.d.ts +2 -8
  96. package/lib/schemas/metadata/IMetadataObjectType.d.ts +11 -0
  97. package/lib/schemas/{json/IJsonSchemaList.js → metadata/IMetadataObjectType.js} +1 -1
  98. package/lib/schemas/metadata/IMetadataObjectType.js.map +1 -0
  99. package/lib/schemas/metadata/IMetadataTuple.d.ts +1 -2
  100. package/lib/schemas/metadata/Metadata.js +14 -15
  101. package/lib/schemas/metadata/Metadata.js.map +1 -1
  102. package/lib/schemas/metadata/MetadataArray.js +1 -1
  103. package/lib/schemas/metadata/MetadataArray.js.map +1 -1
  104. package/lib/schemas/metadata/MetadataComponents.d.ts +2 -2
  105. package/lib/schemas/metadata/MetadataComponents.js +2 -2
  106. package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
  107. package/lib/schemas/metadata/MetadataObject.d.ts +8 -12
  108. package/lib/schemas/metadata/MetadataObject.js +44 -82
  109. package/lib/schemas/metadata/MetadataObject.js.map +1 -1
  110. package/lib/schemas/metadata/MetadataObjectType.d.ts +20 -0
  111. package/lib/schemas/metadata/MetadataObjectType.js +106 -0
  112. package/lib/schemas/metadata/MetadataObjectType.js.map +1 -0
  113. package/lib/schemas/metadata/MetadataTuple.js +1 -1
  114. package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
  115. package/lib/transformers/TransformerError.js.map +1 -1
  116. package/package.json +2 -2
  117. package/src/executable/TypiaGenerateWizard.ts +83 -83
  118. package/src/executable/TypiaSetupWizard.ts +174 -174
  119. package/src/executable/setup/ArgumentParser.ts +42 -42
  120. package/src/executable/setup/FileRetriever.ts +19 -19
  121. package/src/executable/setup/PackageManager.ts +87 -87
  122. package/src/factories/IdentifierFactory.ts +89 -89
  123. package/src/factories/MetadataCollection.ts +280 -278
  124. package/src/factories/MetadataFactory.ts +11 -5
  125. package/src/factories/MetadataTypeTagFactory.ts +386 -385
  126. package/src/factories/MetadataTypeTagSchemaFactory.ts +82 -82
  127. package/src/factories/NumericRangeFactory.ts +72 -72
  128. package/src/factories/ProtobufFactory.ts +14 -28
  129. package/src/factories/StatementFactory.ts +90 -90
  130. package/src/factories/TemplateFactory.ts +64 -64
  131. package/src/factories/TypeFactory.ts +140 -140
  132. package/src/factories/internal/metadata/emplace_metadata_alias.ts +32 -32
  133. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +39 -39
  134. package/src/factories/internal/metadata/emplace_metadata_object.ts +2 -2
  135. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +56 -56
  136. package/src/factories/internal/metadata/explore_metadata.ts +30 -30
  137. package/src/factories/internal/metadata/iterate_metadata.ts +54 -54
  138. package/src/factories/internal/metadata/iterate_metadata_alias.ts +28 -28
  139. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -63
  140. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  141. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +28 -28
  142. package/src/factories/internal/metadata/iterate_metadata_collection.ts +4 -3
  143. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +2 -2
  144. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -76
  145. package/src/factories/internal/metadata/iterate_metadata_escape.ts +49 -49
  146. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +219 -216
  147. package/src/factories/internal/metadata/iterate_metadata_map.ts +52 -52
  148. package/src/factories/internal/metadata/iterate_metadata_native.ts +236 -236
  149. package/src/factories/internal/metadata/iterate_metadata_object.ts +35 -27
  150. package/src/factories/internal/metadata/iterate_metadata_set.ts +39 -39
  151. package/src/factories/internal/metadata/iterate_metadata_sort.ts +87 -83
  152. package/src/factories/internal/metadata/iterate_metadata_template.ts +42 -42
  153. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +26 -26
  154. package/src/factories/internal/metadata/iterate_metadata_union.ts +19 -19
  155. package/src/internal/$ProtobufSizer.ts +1 -7
  156. package/src/json.ts +1 -1
  157. package/src/module.ts +1 -1
  158. package/src/programmers/CheckerProgrammer.ts +7 -5
  159. package/src/programmers/FeatureProgrammer.ts +9 -6
  160. package/src/programmers/IsProgrammer.ts +2 -2
  161. package/src/programmers/RandomProgrammer.ts +3 -3
  162. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +72 -72
  163. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +113 -113
  164. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +116 -116
  165. package/src/programmers/functional/internal/FunctionalGeneralProgrammer.ts +34 -34
  166. package/src/programmers/helpers/AtomicPredicator.ts +35 -35
  167. package/src/programmers/helpers/CloneJoiner.ts +143 -143
  168. package/src/programmers/helpers/HttpMetadataUtil.ts +21 -21
  169. package/src/programmers/helpers/NotationJoiner.ts +144 -144
  170. package/src/programmers/helpers/ProtobufUtil.ts +125 -125
  171. package/src/programmers/helpers/PruneJoiner.ts +148 -148
  172. package/src/programmers/helpers/RandomJoiner.ts +2 -2
  173. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  174. package/src/programmers/helpers/UnionExplorer.ts +372 -372
  175. package/src/programmers/helpers/UnionPredicator.ts +79 -77
  176. package/src/programmers/http/HttpFormDataProgrammer.ts +3 -3
  177. package/src/programmers/http/HttpHeadersProgrammer.ts +3 -3
  178. package/src/programmers/http/HttpQueryProgrammer.ts +4 -4
  179. package/src/programmers/internal/application_array.ts +56 -56
  180. package/src/programmers/internal/application_bigint.ts +25 -25
  181. package/src/programmers/internal/application_boolean.ts +25 -25
  182. package/src/programmers/internal/application_escaped.ts +96 -96
  183. package/src/programmers/internal/application_number.ts +25 -25
  184. package/src/programmers/internal/application_plugin.ts +19 -19
  185. package/src/programmers/internal/application_string.ts +25 -25
  186. package/src/programmers/internal/application_templates.ts +64 -64
  187. package/src/programmers/internal/application_union_discriminator.ts +35 -35
  188. package/src/programmers/internal/application_v30_alias.ts +59 -59
  189. package/src/programmers/internal/application_v30_native.ts +29 -29
  190. package/src/programmers/internal/application_v30_object.ts +165 -165
  191. package/src/programmers/internal/application_v30_schema.ts +220 -220
  192. package/src/programmers/internal/application_v30_tuple.ts +33 -33
  193. package/src/programmers/internal/application_v31_alias.ts +47 -47
  194. package/src/programmers/internal/application_v31_constant.ts +29 -29
  195. package/src/programmers/internal/application_v31_native.ts +25 -25
  196. package/src/programmers/internal/application_v31_object.ts +147 -147
  197. package/src/programmers/internal/application_v31_schema.ts +215 -215
  198. package/src/programmers/internal/application_v31_tuple.ts +22 -22
  199. package/src/programmers/internal/check_array_length.ts +46 -46
  200. package/src/programmers/internal/check_bigint.ts +49 -49
  201. package/src/programmers/internal/check_everything.ts +23 -23
  202. package/src/programmers/internal/check_native.ts +27 -27
  203. package/src/programmers/internal/check_number.ts +111 -111
  204. package/src/programmers/internal/check_string.ts +49 -49
  205. package/src/programmers/internal/check_template.ts +48 -48
  206. package/src/programmers/internal/check_union_array_like.ts +334 -334
  207. package/src/programmers/internal/decode_union_object.ts +116 -116
  208. package/src/programmers/internal/feature_object_entries.ts +2 -2
  209. package/src/programmers/internal/llm_schema_array.ts +22 -22
  210. package/src/programmers/internal/llm_schema_escaped.ts +84 -84
  211. package/src/programmers/internal/llm_schema_object.ts +132 -132
  212. package/src/programmers/internal/llm_schema_station.ts +190 -190
  213. package/src/programmers/internal/metadata_to_pattern.ts +42 -42
  214. package/src/programmers/internal/postfix_of_tuple.ts +5 -5
  215. package/src/programmers/internal/prune_object_properties.ts +2 -2
  216. package/src/programmers/internal/stringify_dynamic_properties.ts +162 -162
  217. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  218. package/src/programmers/internal/template_to_pattern.ts +23 -23
  219. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +23 -23
  220. package/src/programmers/json/JsonApplicationProgrammer.ts +3 -3
  221. package/src/programmers/json/JsonSchemasProgrammer.ts +1 -1
  222. package/src/programmers/json/JsonStringifyProgrammer.ts +5 -5
  223. package/src/programmers/llm/LlmApplicationProgrammer.ts +4 -4
  224. package/src/programmers/llm/LlmSchemaProgrammer.ts +1 -1
  225. package/src/programmers/misc/MiscCloneProgrammer.ts +3 -3
  226. package/src/programmers/misc/MiscPruneProgrammer.ts +3 -3
  227. package/src/programmers/notations/NotationGeneralProgrammer.ts +3 -3
  228. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +11 -11
  229. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +8 -8
  230. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +201 -201
  231. package/src/schemas/json/{IJsonSchemaList.ts → IJsonSchemaCollection.ts} +22 -22
  232. package/src/schemas/metadata/IMetadata.ts +4 -1
  233. package/src/schemas/metadata/IMetadataArray.ts +1 -2
  234. package/src/schemas/metadata/IMetadataComponents.ts +2 -2
  235. package/src/schemas/metadata/IMetadataDictionary.ts +11 -11
  236. package/src/schemas/metadata/IMetadataObject.ts +6 -13
  237. package/src/schemas/metadata/IMetadataObjectType.ts +13 -0
  238. package/src/schemas/metadata/IMetadataTuple.ts +1 -2
  239. package/src/schemas/metadata/Metadata.ts +616 -616
  240. package/src/schemas/metadata/MetadataArray.ts +1 -1
  241. package/src/schemas/metadata/MetadataComponents.ts +98 -98
  242. package/src/schemas/metadata/MetadataObject.ts +48 -139
  243. package/src/schemas/metadata/MetadataObjectType.ts +149 -0
  244. package/src/schemas/metadata/MetadataTuple.ts +1 -1
  245. package/src/transformers/TransformerError.ts +8 -7
  246. package/src/transformers/features/json/JsonSchemasTransformer.ts +1 -1
  247. package/src/utils/MapUtil.ts +14 -14
  248. package/src/utils/NameEncoder.ts +32 -32
  249. package/lib/schemas/json/IJsonSchemaList.js.map +0 -1
  250. /package/lib/schemas/json/{IJsonSchemaList.d.ts → IJsonSchemaCollection.d.ts} +0 -0
@@ -1,25 +1,25 @@
1
- import { OpenApi } from "@samchon/openapi";
2
-
3
- /**
4
- * @internal
5
- */
6
- export const application_v31_native = (props: {
7
- components: OpenApi.IComponents;
8
- name: string;
9
- }): OpenApi.IJsonSchema => {
10
- if (props.name === "Blob" || props.name === "File")
11
- return {
12
- type: "string",
13
- format: "binary",
14
- };
15
- if (props.components.schemas?.[props.name] === undefined) {
16
- props.components.schemas ??= {};
17
- props.components.schemas[props.name] ??= {
18
- type: "object",
19
- properties: {},
20
- };
21
- }
22
- return {
23
- $ref: `#/components/schemas/${props.name}`,
24
- };
25
- };
1
+ import { OpenApi } from "@samchon/openapi";
2
+
3
+ /**
4
+ * @internal
5
+ */
6
+ export const application_v31_native = (props: {
7
+ components: OpenApi.IComponents;
8
+ name: string;
9
+ }): OpenApi.IJsonSchema => {
10
+ if (props.name === "Blob" || props.name === "File")
11
+ return {
12
+ type: "string",
13
+ format: "binary",
14
+ };
15
+ if (props.components.schemas?.[props.name] === undefined) {
16
+ props.components.schemas ??= {};
17
+ props.components.schemas[props.name] ??= {
18
+ type: "object",
19
+ properties: {},
20
+ };
21
+ }
22
+ return {
23
+ $ref: `#/components/schemas/${props.name}`,
24
+ };
25
+ };
@@ -1,147 +1,147 @@
1
- import { OpenApi, OpenApiV3 } from "@samchon/openapi";
2
-
3
- import { CommentFactory } from "../../factories/CommentFactory";
4
-
5
- import { IJsDocTagInfo } from "../../schemas/metadata/IJsDocTagInfo";
6
- import { Metadata } from "../../schemas/metadata/Metadata";
7
- import { MetadataObject } from "../../schemas/metadata/MetadataObject";
8
-
9
- import { PatternUtil } from "../../utils/PatternUtil";
10
-
11
- import { application_description } from "./application_description";
12
- import { application_title } from "./application_title";
13
- import { application_v31_schema } from "./application_v31_schema";
14
- import { metadata_to_pattern } from "./metadata_to_pattern";
15
-
16
- /**
17
- * @internal
18
- */
19
- export const application_v31_object = (props: {
20
- components: OpenApi.IComponents;
21
- object: MetadataObject;
22
- }): OpenApi.IJsonSchema.IReference | OpenApi.IJsonSchema.IObject => {
23
- if (props.object.isLiteral() === true) return create_object_schema(props);
24
-
25
- const key: string = props.object.name;
26
- const $ref: string = `#/components/schemas/${key}`;
27
- if (props.components.schemas?.[key] !== undefined) return { $ref };
28
-
29
- const lazy: OpenApiV3.IJsonSchema = {};
30
- props.components.schemas ??= {};
31
- props.components.schemas[key] = lazy;
32
- Object.assign(lazy, create_object_schema(props));
33
- return { $ref };
34
- };
35
-
36
- /**
37
- * @internal
38
- */
39
- const create_object_schema = (props: {
40
- components: OpenApi.IComponents;
41
- object: MetadataObject;
42
- }): OpenApi.IJsonSchema.IObject => {
43
- // ITERATE PROPERTIES
44
- const properties: Record<string, any> = {};
45
- const extraMeta: ISuperfluous = {
46
- patternProperties: {},
47
- additionalProperties: undefined,
48
- };
49
- const required: string[] = [];
50
-
51
- for (const property of props.object.properties) {
52
- if (
53
- // FUNCTIONAL TYPE
54
- property.value.functions.length &&
55
- property.value.nullable === false &&
56
- property.value.isRequired() === true &&
57
- property.value.size() === 0
58
- )
59
- continue;
60
- else if (property.jsDocTags.find((tag) => tag.name === "hidden")) continue; // THE HIDDEN TAG
61
-
62
- const key: string | null = property.key.getSoleLiteral();
63
- const schema: OpenApi.IJsonSchema | null = application_v31_schema({
64
- blockNever: true,
65
- components: props.components,
66
- attribute: {
67
- deprecated:
68
- property.jsDocTags.some((tag) => tag.name === "deprecated") ||
69
- undefined,
70
- title: application_title(property),
71
- description: application_description(property),
72
- },
73
- metadata: property.value,
74
- });
75
-
76
- if (schema === null) continue;
77
- if (key !== null) {
78
- properties[key] = schema;
79
- if (property.value.isRequired() === true) required.push(key);
80
- } else {
81
- const pattern: string = metadata_to_pattern({
82
- top: true,
83
- metadata: property.key,
84
- });
85
- if (pattern === PatternUtil.STRING)
86
- extraMeta.additionalProperties = [property.value, schema];
87
- else extraMeta.patternProperties[pattern] = [property.value, schema];
88
- }
89
- }
90
-
91
- return {
92
- type: "object",
93
- properties,
94
- required: required.length ? required : undefined,
95
- title: (() => {
96
- const info: IJsDocTagInfo | undefined = props.object.jsDocTags.find(
97
- (tag) => tag.name === "title",
98
- );
99
- return info?.text?.length ? CommentFactory.merge(info.text) : undefined;
100
- })(),
101
- description: application_description(props.object),
102
- additionalProperties: join({
103
- components: props.components,
104
- extra: extraMeta,
105
- }),
106
- };
107
- };
108
-
109
- /**
110
- * @internal
111
- */
112
- const join = (props: {
113
- components: OpenApi.IComponents;
114
- extra: ISuperfluous;
115
- }): OpenApi.IJsonSchema | undefined => {
116
- // LIST UP METADATA
117
- const elements: [Metadata, OpenApi.IJsonSchema][] = Object.values(
118
- props.extra.patternProperties || {},
119
- );
120
- if (props.extra.additionalProperties)
121
- elements.push(props.extra.additionalProperties);
122
-
123
- // SHORT RETURN
124
- if (elements.length === 0) return undefined;
125
- else if (elements.length === 1) return elements[0]![1]!;
126
-
127
- // MERGE METADATA AND GENERATE VULNERABLE SCHEMA
128
- const metadata: Metadata = elements
129
- .map((tuple) => tuple[0])
130
- .reduce((x, y) => Metadata.merge(x, y));
131
- return (
132
- application_v31_schema({
133
- blockNever: true,
134
- components: props.components,
135
- attribute: {},
136
- metadata,
137
- }) ?? undefined
138
- );
139
- };
140
-
141
- /**
142
- * @internal
143
- */
144
- interface ISuperfluous {
145
- additionalProperties?: undefined | [Metadata, OpenApi.IJsonSchema];
146
- patternProperties: Record<string, [Metadata, OpenApi.IJsonSchema]>;
147
- }
1
+ import { OpenApi, OpenApiV3 } from "@samchon/openapi";
2
+
3
+ import { CommentFactory } from "../../factories/CommentFactory";
4
+
5
+ import { IJsDocTagInfo } from "../../schemas/metadata/IJsDocTagInfo";
6
+ import { Metadata } from "../../schemas/metadata/Metadata";
7
+ import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
8
+
9
+ import { PatternUtil } from "../../utils/PatternUtil";
10
+
11
+ import { application_description } from "./application_description";
12
+ import { application_title } from "./application_title";
13
+ import { application_v31_schema } from "./application_v31_schema";
14
+ import { metadata_to_pattern } from "./metadata_to_pattern";
15
+
16
+ /**
17
+ * @internal
18
+ */
19
+ export const application_v31_object = (props: {
20
+ components: OpenApi.IComponents;
21
+ object: MetadataObjectType;
22
+ }): OpenApi.IJsonSchema.IReference | OpenApi.IJsonSchema.IObject => {
23
+ if (props.object.isLiteral() === true) return create_object_schema(props);
24
+
25
+ const key: string = props.object.name;
26
+ const $ref: string = `#/components/schemas/${key}`;
27
+ if (props.components.schemas?.[key] !== undefined) return { $ref };
28
+
29
+ const lazy: OpenApiV3.IJsonSchema = {};
30
+ props.components.schemas ??= {};
31
+ props.components.schemas[key] = lazy;
32
+ Object.assign(lazy, create_object_schema(props));
33
+ return { $ref };
34
+ };
35
+
36
+ /**
37
+ * @internal
38
+ */
39
+ const create_object_schema = (props: {
40
+ components: OpenApi.IComponents;
41
+ object: MetadataObjectType;
42
+ }): OpenApi.IJsonSchema.IObject => {
43
+ // ITERATE PROPERTIES
44
+ const properties: Record<string, any> = {};
45
+ const extraMeta: ISuperfluous = {
46
+ patternProperties: {},
47
+ additionalProperties: undefined,
48
+ };
49
+ const required: string[] = [];
50
+
51
+ for (const property of props.object.properties) {
52
+ if (
53
+ // FUNCTIONAL TYPE
54
+ property.value.functions.length &&
55
+ property.value.nullable === false &&
56
+ property.value.isRequired() === true &&
57
+ property.value.size() === 0
58
+ )
59
+ continue;
60
+ else if (property.jsDocTags.find((tag) => tag.name === "hidden")) continue; // THE HIDDEN TAG
61
+
62
+ const key: string | null = property.key.getSoleLiteral();
63
+ const schema: OpenApi.IJsonSchema | null = application_v31_schema({
64
+ blockNever: true,
65
+ components: props.components,
66
+ attribute: {
67
+ deprecated:
68
+ property.jsDocTags.some((tag) => tag.name === "deprecated") ||
69
+ undefined,
70
+ title: application_title(property),
71
+ description: application_description(property),
72
+ },
73
+ metadata: property.value,
74
+ });
75
+
76
+ if (schema === null) continue;
77
+ if (key !== null) {
78
+ properties[key] = schema;
79
+ if (property.value.isRequired() === true) required.push(key);
80
+ } else {
81
+ const pattern: string = metadata_to_pattern({
82
+ top: true,
83
+ metadata: property.key,
84
+ });
85
+ if (pattern === PatternUtil.STRING)
86
+ extraMeta.additionalProperties = [property.value, schema];
87
+ else extraMeta.patternProperties[pattern] = [property.value, schema];
88
+ }
89
+ }
90
+
91
+ return {
92
+ type: "object",
93
+ properties,
94
+ required: required.length ? required : undefined,
95
+ title: (() => {
96
+ const info: IJsDocTagInfo | undefined = props.object.jsDocTags.find(
97
+ (tag) => tag.name === "title",
98
+ );
99
+ return info?.text?.length ? CommentFactory.merge(info.text) : undefined;
100
+ })(),
101
+ description: application_description(props.object),
102
+ additionalProperties: join({
103
+ components: props.components,
104
+ extra: extraMeta,
105
+ }),
106
+ };
107
+ };
108
+
109
+ /**
110
+ * @internal
111
+ */
112
+ const join = (props: {
113
+ components: OpenApi.IComponents;
114
+ extra: ISuperfluous;
115
+ }): OpenApi.IJsonSchema | undefined => {
116
+ // LIST UP METADATA
117
+ const elements: [Metadata, OpenApi.IJsonSchema][] = Object.values(
118
+ props.extra.patternProperties || {},
119
+ );
120
+ if (props.extra.additionalProperties)
121
+ elements.push(props.extra.additionalProperties);
122
+
123
+ // SHORT RETURN
124
+ if (elements.length === 0) return undefined;
125
+ else if (elements.length === 1) return elements[0]![1]!;
126
+
127
+ // MERGE METADATA AND GENERATE VULNERABLE SCHEMA
128
+ const metadata: Metadata = elements
129
+ .map((tuple) => tuple[0])
130
+ .reduce((x, y) => Metadata.merge(x, y));
131
+ return (
132
+ application_v31_schema({
133
+ blockNever: true,
134
+ components: props.components,
135
+ attribute: {},
136
+ metadata,
137
+ }) ?? undefined
138
+ );
139
+ };
140
+
141
+ /**
142
+ * @internal
143
+ */
144
+ interface ISuperfluous {
145
+ additionalProperties?: undefined | [Metadata, OpenApi.IJsonSchema];
146
+ patternProperties: Record<string, [Metadata, OpenApi.IJsonSchema]>;
147
+ }