typia 7.0.0-dev.20241012 → 7.0.0-dev.20241018

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 (236) hide show
  1. package/lib/factories/JsonMetadataFactory.js +3 -2
  2. package/lib/factories/JsonMetadataFactory.js.map +1 -1
  3. package/lib/factories/MetadataCollection.d.ts +3 -3
  4. package/lib/factories/MetadataCollection.js +2 -2
  5. package/lib/factories/MetadataCollection.js.map +1 -1
  6. package/lib/factories/MetadataFactory.d.ts +2 -2
  7. package/lib/factories/MetadataFactory.js +3 -3
  8. package/lib/factories/MetadataFactory.js.map +1 -1
  9. package/lib/factories/MetadataTypeTagFactory.d.ts +3 -2
  10. package/lib/factories/MetadataTypeTagFactory.js +26 -3
  11. package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
  12. package/lib/factories/ProtobufFactory.js +829 -156
  13. package/lib/factories/ProtobufFactory.js.map +1 -1
  14. package/lib/factories/internal/metadata/IMetadataIteratorProps.d.ts +1 -0
  15. package/lib/factories/internal/metadata/MetadataHelper.js +1 -1
  16. package/lib/factories/internal/metadata/MetadataHelper.js.map +1 -1
  17. package/lib/factories/internal/metadata/emplace_metadata_alias.d.ts +2 -2
  18. package/lib/factories/internal/metadata/emplace_metadata_object.js +5 -5
  19. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  20. package/lib/factories/internal/metadata/explore_metadata.js +2 -0
  21. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  22. package/lib/factories/internal/metadata/iterate_metadata.js +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  24. package/lib/factories/internal/metadata/iterate_metadata_alias.js +8 -2
  25. package/lib/factories/internal/metadata/iterate_metadata_alias.js.map +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata_collection.js +6 -6
  27. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +262 -137
  29. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  30. package/lib/factories/internal/metadata/iterate_metadata_map.js +4 -2
  31. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  32. package/lib/factories/internal/metadata/iterate_metadata_native.js +27 -11
  33. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  34. package/lib/factories/internal/metadata/iterate_metadata_set.js +8 -1
  35. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  36. package/lib/factories/internal/metadata/iterate_metadata_sort.js +1 -1
  37. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_template.js +1 -1
  39. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  40. package/lib/programmers/CheckerProgrammer.js +5 -5
  41. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  42. package/lib/programmers/RandomProgrammer.js +12 -12
  43. package/lib/programmers/RandomProgrammer.js.map +1 -1
  44. package/lib/programmers/helpers/AtomicPredicator.js +3 -3
  45. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  46. package/lib/programmers/helpers/ProtobufUtil.d.ts +5 -4
  47. package/lib/programmers/helpers/ProtobufUtil.js +215 -92
  48. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  49. package/lib/programmers/helpers/UnionExplorer.d.ts +4 -2
  50. package/lib/programmers/helpers/UnionExplorer.js +1 -1
  51. package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
  52. package/lib/programmers/http/HttpFormDataProgrammer.js +6 -6
  53. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  54. package/lib/programmers/internal/application_escaped.js +2 -2
  55. package/lib/programmers/internal/application_escaped.js.map +1 -1
  56. package/lib/programmers/internal/application_v30_alias.js +13 -8
  57. package/lib/programmers/internal/application_v30_alias.js.map +1 -1
  58. package/lib/programmers/internal/application_v30_native.js +17 -10
  59. package/lib/programmers/internal/application_v30_native.js.map +1 -1
  60. package/lib/programmers/internal/application_v30_object.js +16 -6
  61. package/lib/programmers/internal/application_v30_object.js.map +1 -1
  62. package/lib/programmers/internal/application_v30_schema.js +24 -17
  63. package/lib/programmers/internal/application_v30_schema.js.map +1 -1
  64. package/lib/programmers/internal/application_v31_alias.js +12 -11
  65. package/lib/programmers/internal/application_v31_alias.js.map +1 -1
  66. package/lib/programmers/internal/application_v31_native.js +17 -10
  67. package/lib/programmers/internal/application_v31_native.js.map +1 -1
  68. package/lib/programmers/internal/application_v31_object.js +13 -6
  69. package/lib/programmers/internal/application_v31_object.js.map +1 -1
  70. package/lib/programmers/internal/application_v31_schema.js +23 -16
  71. package/lib/programmers/internal/application_v31_schema.js.map +1 -1
  72. package/lib/programmers/internal/check_dynamic_key.js +4 -4
  73. package/lib/programmers/internal/check_dynamic_key.js.map +1 -1
  74. package/lib/programmers/internal/check_native.js +3 -3
  75. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  76. package/lib/programmers/internal/llm_schema_escaped.js +2 -2
  77. package/lib/programmers/internal/llm_schema_escaped.js.map +1 -1
  78. package/lib/programmers/internal/llm_schema_object.js +18 -14
  79. package/lib/programmers/internal/llm_schema_object.js.map +1 -1
  80. package/lib/programmers/internal/llm_schema_station.js +8 -8
  81. package/lib/programmers/internal/llm_schema_station.js.map +1 -1
  82. package/lib/programmers/json/JsonSchemasProgrammer.js +5 -5
  83. package/lib/programmers/json/JsonSchemasProgrammer.js.map +1 -1
  84. package/lib/programmers/json/JsonStringifyProgrammer.js +18 -17
  85. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  86. package/lib/programmers/llm/LlmSchemaProgrammer.js +6 -6
  87. package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
  88. package/lib/programmers/misc/MiscCloneProgrammer.js +7 -5
  89. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  90. package/lib/programmers/misc/MiscPruneProgrammer.js +1 -1
  91. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  92. package/lib/programmers/notations/NotationGeneralProgrammer.js +6 -4
  93. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  94. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +15 -12
  95. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  96. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +6 -4
  97. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  98. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +51 -34
  99. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  100. package/lib/schemas/metadata/IMetadata.d.ts +14 -18
  101. package/lib/schemas/metadata/IMetadataAlias.d.ts +2 -7
  102. package/lib/schemas/metadata/IMetadataAliasType.d.ts +10 -0
  103. package/lib/schemas/metadata/IMetadataAliasType.js +3 -0
  104. package/lib/schemas/metadata/IMetadataAliasType.js.map +1 -0
  105. package/lib/schemas/metadata/IMetadataComponents.d.ts +2 -2
  106. package/lib/schemas/metadata/IMetadataConstantValue.d.ts +1 -1
  107. package/lib/schemas/metadata/IMetadataDictionary.d.ts +2 -2
  108. package/lib/schemas/metadata/IMetadataMap.d.ts +7 -0
  109. package/lib/schemas/metadata/{IMetadataEntry.js → IMetadataMap.js} +1 -1
  110. package/lib/schemas/metadata/IMetadataMap.js.map +1 -0
  111. package/lib/schemas/metadata/IMetadataNative.d.ts +5 -0
  112. package/lib/schemas/metadata/IMetadataNative.js +3 -0
  113. package/lib/schemas/metadata/IMetadataNative.js.map +1 -0
  114. package/lib/schemas/metadata/IMetadataSet.d.ts +6 -0
  115. package/lib/schemas/metadata/IMetadataSet.js +3 -0
  116. package/lib/schemas/metadata/IMetadataSet.js.map +1 -0
  117. package/lib/schemas/metadata/IMetadataTemplate.d.ts +1 -1
  118. package/lib/schemas/metadata/IMetadataTypeTag.d.ts +1 -1
  119. package/lib/schemas/metadata/Metadata.d.ts +6 -9
  120. package/lib/schemas/metadata/Metadata.js +136 -98
  121. package/lib/schemas/metadata/Metadata.js.map +1 -1
  122. package/lib/schemas/metadata/MetadataAlias.d.ts +8 -11
  123. package/lib/schemas/metadata/MetadataAlias.js +48 -33
  124. package/lib/schemas/metadata/MetadataAlias.js.map +1 -1
  125. package/lib/schemas/metadata/MetadataAliasType.d.ts +16 -0
  126. package/lib/schemas/metadata/MetadataAliasType.js +51 -0
  127. package/lib/schemas/metadata/MetadataAliasType.js.map +1 -0
  128. package/lib/schemas/metadata/MetadataComponents.d.ts +2 -2
  129. package/lib/schemas/metadata/MetadataComponents.js +2 -2
  130. package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
  131. package/lib/schemas/metadata/MetadataConstantValue.d.ts +1 -1
  132. package/lib/schemas/metadata/MetadataMap.d.ts +14 -0
  133. package/lib/schemas/metadata/MetadataMap.js +66 -0
  134. package/lib/schemas/metadata/MetadataMap.js.map +1 -0
  135. package/lib/schemas/metadata/MetadataNative.d.ts +12 -0
  136. package/lib/schemas/metadata/MetadataNative.js +65 -0
  137. package/lib/schemas/metadata/MetadataNative.js.map +1 -0
  138. package/lib/schemas/metadata/MetadataSet.d.ts +13 -0
  139. package/lib/schemas/metadata/MetadataSet.js +64 -0
  140. package/lib/schemas/metadata/MetadataSet.js.map +1 -0
  141. package/lib/schemas/metadata/MetadataTemplate.d.ts +1 -1
  142. package/lib/tags/Example.d.ts +2 -2
  143. package/lib/tags/Examples.d.ts +2 -2
  144. package/lib/tags/JsonSchemaPlugin.d.ts +1 -1
  145. package/lib/tags/Sequence.d.ts +9 -0
  146. package/lib/tags/Sequence.js +3 -0
  147. package/lib/tags/Sequence.js.map +1 -0
  148. package/lib/tags/TagBase.d.ts +1 -1
  149. package/lib/tags/index.d.ts +1 -0
  150. package/lib/tags/index.js +1 -0
  151. package/lib/tags/index.js.map +1 -1
  152. package/package.json +1 -1
  153. package/src/factories/JsonMetadataFactory.ts +5 -2
  154. package/src/factories/MetadataCollection.ts +6 -6
  155. package/src/factories/MetadataFactory.ts +7 -7
  156. package/src/factories/MetadataTypeTagFactory.ts +31 -6
  157. package/src/factories/ProtobufFactory.ts +494 -176
  158. package/src/factories/internal/metadata/IMetadataIteratorProps.ts +1 -0
  159. package/src/factories/internal/metadata/MetadataHelper.ts +1 -1
  160. package/src/factories/internal/metadata/emplace_metadata_alias.ts +2 -2
  161. package/src/factories/internal/metadata/emplace_metadata_object.ts +5 -5
  162. package/src/factories/internal/metadata/explore_metadata.ts +1 -0
  163. package/src/factories/internal/metadata/iterate_metadata.ts +1 -1
  164. package/src/factories/internal/metadata/iterate_metadata_alias.ts +9 -4
  165. package/src/factories/internal/metadata/iterate_metadata_collection.ts +6 -6
  166. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +163 -181
  167. package/src/factories/internal/metadata/iterate_metadata_map.ts +5 -2
  168. package/src/factories/internal/metadata/iterate_metadata_native.ts +20 -2
  169. package/src/factories/internal/metadata/iterate_metadata_set.ts +27 -11
  170. package/src/factories/internal/metadata/iterate_metadata_sort.ts +1 -1
  171. package/src/factories/internal/metadata/iterate_metadata_template.ts +1 -3
  172. package/src/programmers/CheckerProgrammer.ts +9 -7
  173. package/src/programmers/RandomProgrammer.ts +16 -14
  174. package/src/programmers/helpers/AtomicPredicator.ts +3 -3
  175. package/src/programmers/helpers/ProtobufUtil.ts +146 -43
  176. package/src/programmers/helpers/UnionExplorer.ts +62 -62
  177. package/src/programmers/http/HttpFormDataProgrammer.ts +10 -6
  178. package/src/programmers/internal/application_escaped.ts +2 -2
  179. package/src/programmers/internal/application_v30_alias.ts +18 -12
  180. package/src/programmers/internal/application_v30_native.ts +22 -12
  181. package/src/programmers/internal/application_v30_object.ts +23 -8
  182. package/src/programmers/internal/application_v30_schema.ts +31 -34
  183. package/src/programmers/internal/application_v31_alias.ts +16 -13
  184. package/src/programmers/internal/application_v31_native.ts +22 -12
  185. package/src/programmers/internal/application_v31_object.ts +19 -8
  186. package/src/programmers/internal/application_v31_schema.ts +26 -29
  187. package/src/programmers/internal/check_dynamic_key.ts +4 -4
  188. package/src/programmers/internal/check_native.ts +4 -4
  189. package/src/programmers/internal/check_union_array_like.ts +2 -1
  190. package/src/programmers/internal/llm_schema_escaped.ts +2 -2
  191. package/src/programmers/internal/llm_schema_object.ts +21 -18
  192. package/src/programmers/internal/llm_schema_station.ts +9 -11
  193. package/src/programmers/json/JsonSchemasProgrammer.ts +5 -5
  194. package/src/programmers/json/JsonStringifyProgrammer.ts +5 -5
  195. package/src/programmers/llm/LlmSchemaProgrammer.ts +6 -6
  196. package/src/programmers/misc/MiscCloneProgrammer.ts +11 -7
  197. package/src/programmers/misc/MiscPruneProgrammer.ts +1 -1
  198. package/src/programmers/notations/NotationGeneralProgrammer.ts +10 -6
  199. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +14 -7
  200. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +11 -8
  201. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +45 -20
  202. package/src/schemas/metadata/IMetadata.ts +35 -39
  203. package/src/schemas/metadata/IMetadataAlias.ts +6 -12
  204. package/src/schemas/metadata/IMetadataAliasType.ts +12 -0
  205. package/src/schemas/metadata/IMetadataArray.ts +6 -6
  206. package/src/schemas/metadata/IMetadataComponents.ts +11 -11
  207. package/src/schemas/metadata/IMetadataConstantValue.ts +1 -1
  208. package/src/schemas/metadata/IMetadataDictionary.ts +2 -2
  209. package/src/schemas/metadata/IMetadataMap.ts +8 -0
  210. package/src/schemas/metadata/IMetadataNative.ts +6 -0
  211. package/src/schemas/metadata/IMetadataObjectType.ts +13 -13
  212. package/src/schemas/metadata/IMetadataSet.ts +7 -0
  213. package/src/schemas/metadata/IMetadataTemplate.ts +7 -7
  214. package/src/schemas/metadata/IMetadataTuple.ts +6 -6
  215. package/src/schemas/metadata/IMetadataTypeTag.ts +16 -16
  216. package/src/schemas/metadata/Metadata.ts +100 -47
  217. package/src/schemas/metadata/MetadataAlias.ts +46 -61
  218. package/src/schemas/metadata/MetadataAliasType.ts +63 -0
  219. package/src/schemas/metadata/MetadataArray.ts +49 -49
  220. package/src/schemas/metadata/MetadataComponents.ts +3 -3
  221. package/src/schemas/metadata/MetadataConstantValue.ts +1 -1
  222. package/src/schemas/metadata/MetadataMap.ts +48 -0
  223. package/src/schemas/metadata/MetadataNative.ts +44 -0
  224. package/src/schemas/metadata/MetadataProperty.ts +5 -0
  225. package/src/schemas/metadata/MetadataSet.ts +45 -0
  226. package/src/schemas/metadata/MetadataTemplate.ts +80 -80
  227. package/src/schemas/metadata/MetadataTuple.ts +32 -32
  228. package/src/tags/Example.ts +24 -17
  229. package/src/tags/Examples.ts +16 -16
  230. package/src/tags/JsonSchemaPlugin.ts +8 -8
  231. package/src/tags/Sequence.ts +10 -0
  232. package/src/tags/TagBase.ts +82 -76
  233. package/src/tags/index.ts +1 -0
  234. package/lib/schemas/metadata/IMetadataEntry.d.ts +0 -5
  235. package/lib/schemas/metadata/IMetadataEntry.js.map +0 -1
  236. package/src/schemas/metadata/IMetadataEntry.ts +0 -6
@@ -61,7 +61,7 @@ const is_date = (props: {
61
61
  props.visited.add(props.metadata);
62
62
 
63
63
  return (
64
- props.metadata.natives.some((name) => name === "Date") ||
64
+ props.metadata.natives.some((native) => native.name === "Date") ||
65
65
  props.metadata.arrays.some((array) =>
66
66
  is_date({
67
67
  visited: props.visited,
@@ -79,7 +79,7 @@ const is_date = (props: {
79
79
  props.metadata.aliases.some((alias) =>
80
80
  is_date({
81
81
  visited: props.visited,
82
- metadata: alias.value,
82
+ metadata: alias.type.value,
83
83
  }),
84
84
  )
85
85
  );
@@ -6,6 +6,7 @@ import { IJsDocTagInfo } from "../../schemas/metadata/IJsDocTagInfo";
6
6
  import { MetadataAlias } from "../../schemas/metadata/MetadataAlias";
7
7
 
8
8
  import { application_description } from "./application_description";
9
+ import { application_plugin } from "./application_plugin";
9
10
  import { application_v30_object } from "./application_v30_object";
10
11
  import { application_v30_schema } from "./application_v30_schema";
11
12
 
@@ -17,15 +18,18 @@ export const application_v30_alias = <BlockNever extends boolean>(props: {
17
18
  components: OpenApiV3.IComponents;
18
19
  alias: MetadataAlias;
19
20
  nullable: boolean;
20
- }): OpenApiV3.IJsonSchema.IReference => {
21
- if (props.alias.value.size() === 1 && props.alias.value.objects.length === 1)
21
+ }): OpenApiV3.IJsonSchema.IReference[] => {
22
+ if (
23
+ props.alias.type.value.size() === 1 &&
24
+ props.alias.type.value.objects.length === 1
25
+ )
22
26
  return application_v30_object({
23
- object: props.alias.value.objects[0]!.type,
27
+ object: props.alias.type.value.objects[0]!,
24
28
  components: props.components,
25
29
  nullable: props.nullable,
26
- }) as OpenApiV3.IJsonSchema.IReference;
30
+ }) as OpenApiV3.IJsonSchema.IReference[];
27
31
 
28
- const key: string = `${props.alias.name}${props.nullable ? ".Nullable" : ""}`;
32
+ const key: string = `${props.alias.type.name}${props.nullable ? ".Nullable" : ""}`;
29
33
  const $ref: string = `#/components/schemas/${key}`;
30
34
 
31
35
  if (props.components.schemas?.[key] === undefined) {
@@ -39,21 +43,23 @@ export const application_v30_alias = <BlockNever extends boolean>(props: {
39
43
  components: props.components,
40
44
  attribute: {
41
45
  deprecated:
42
- props.alias.jsDocTags.some((tag) => tag.name === "deprecated") ||
46
+ props.alias.type.jsDocTags.some((tag) => tag.name === "deprecated") ||
43
47
  undefined,
44
48
  title: (() => {
45
- const info: IJsDocTagInfo | undefined = props.alias.jsDocTags.find(
46
- (tag) => tag.name === "title",
47
- );
49
+ const info: IJsDocTagInfo | undefined =
50
+ props.alias.type.jsDocTags.find((tag) => tag.name === "title");
48
51
  return info?.text?.length
49
52
  ? CommentFactory.merge(info.text)
50
53
  : undefined;
51
54
  })(),
52
- description: application_description(props.alias),
55
+ description: application_description(props.alias.type),
53
56
  },
54
- metadata: props.alias.value,
57
+ metadata: props.alias.type.value,
55
58
  });
56
59
  if (schema !== null) Object.assign(props.components.schemas[key]!, schema);
57
60
  }
58
- return { $ref };
61
+ return application_plugin({
62
+ schema: { $ref },
63
+ tags: props.alias.tags,
64
+ });
59
65
  };
@@ -1,20 +1,27 @@
1
1
  import { OpenApiV3 } from "@samchon/openapi";
2
2
 
3
+ import { MetadataNative } from "../../schemas/metadata/MetadataNative";
4
+
5
+ import { application_plugin } from "./application_plugin";
6
+
3
7
  /**
4
8
  * @internal
5
9
  */
6
10
  export const application_v30_native = (props: {
7
11
  components: OpenApiV3.IComponents;
8
- name: string;
12
+ native: MetadataNative;
9
13
  nullable: boolean;
10
- }): OpenApiV3.IJsonSchema => {
11
- if (props.name === "Blob" || props.name === "File")
12
- return {
13
- type: "string",
14
- format: "binary",
15
- nullable: props.nullable,
16
- };
17
- const key: string = `${props.name}${props.nullable ? ".Nullable" : ""}`;
14
+ }): OpenApiV3.IJsonSchema[] => {
15
+ if (props.native.name === "Blob" || props.native.name === "File")
16
+ return application_plugin({
17
+ schema: {
18
+ type: "string",
19
+ format: "binary",
20
+ nullable: props.nullable,
21
+ },
22
+ tags: props.native.tags,
23
+ });
24
+ const key: string = `${props.native.name}${props.nullable ? ".Nullable" : ""}`;
18
25
  if (props.components.schemas?.[key] === undefined) {
19
26
  props.components.schemas ??= {};
20
27
  props.components.schemas[key] ??= {
@@ -23,7 +30,10 @@ export const application_v30_native = (props: {
23
30
  nullable: props.nullable,
24
31
  };
25
32
  }
26
- return {
27
- $ref: `#/components/schemas/${key}`,
28
- };
33
+ return application_plugin({
34
+ schema: {
35
+ $ref: `#/components/schemas/${key}`,
36
+ },
37
+ tags: props.native.tags,
38
+ });
29
39
  };
@@ -4,11 +4,12 @@ import { CommentFactory } from "../../factories/CommentFactory";
4
4
 
5
5
  import { IJsDocTagInfo } from "../../schemas/metadata/IJsDocTagInfo";
6
6
  import { Metadata } from "../../schemas/metadata/Metadata";
7
- import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
7
+ import { MetadataObject } from "../../schemas/metadata/MetadataObject";
8
8
 
9
9
  import { PatternUtil } from "../../utils/PatternUtil";
10
10
 
11
11
  import { application_description } from "./application_description";
12
+ import { application_plugin } from "./application_plugin";
12
13
  import { application_v30_schema } from "./application_v30_schema";
13
14
  import { metadata_to_pattern } from "./metadata_to_pattern";
14
15
 
@@ -17,12 +18,26 @@ import { metadata_to_pattern } from "./metadata_to_pattern";
17
18
  */
18
19
  export const application_v30_object = (props: {
19
20
  components: OpenApiV3.IComponents;
20
- object: MetadataObjectType;
21
+ object: MetadataObject;
22
+ nullable: boolean;
23
+ }): Array<OpenApiV3.IJsonSchema.IReference | OpenApiV3.IJsonSchema.IObject> =>
24
+ application_plugin({
25
+ schema: emplace_object(props),
26
+ tags: props.object.tags,
27
+ });
28
+
29
+ /**
30
+ * @internal
31
+ */
32
+ const emplace_object = (props: {
33
+ components: OpenApiV3.IComponents;
34
+ object: MetadataObject;
21
35
  nullable: boolean;
22
36
  }): OpenApiV3.IJsonSchema.IReference | OpenApiV3.IJsonSchema.IObject => {
23
- if (props.object.isLiteral() === true) return create_object_schema(props);
37
+ if (props.object.type.isLiteral() === true)
38
+ return create_object_schema(props);
24
39
 
25
- const key: string = `${props.object.name}${props.nullable ? ".Nullable" : ""}`;
40
+ const key: string = `${props.object.type.name}${props.nullable ? ".Nullable" : ""}`;
26
41
  const $ref: string = `#/components/schemas/${key}`;
27
42
  if (props.components.schemas?.[key] !== undefined) return { $ref };
28
43
 
@@ -38,7 +53,7 @@ export const application_v30_object = (props: {
38
53
  */
39
54
  const create_object_schema = (props: {
40
55
  components: OpenApiV3.IComponents;
41
- object: MetadataObjectType;
56
+ object: MetadataObject;
42
57
  nullable: boolean;
43
58
  }): OpenApiV3.IJsonSchema.IObject => {
44
59
  // ITERATE PROPERTIES
@@ -49,7 +64,7 @@ const create_object_schema = (props: {
49
64
  };
50
65
  const required: string[] = [];
51
66
 
52
- for (const property of props.object.properties) {
67
+ for (const property of props.object.type.properties) {
53
68
  if (
54
69
  // FUNCTIONAL TYPE
55
70
  property.value.functions.length &&
@@ -111,12 +126,12 @@ const create_object_schema = (props: {
111
126
  nullable: props.nullable,
112
127
  required: required.length ? required : undefined,
113
128
  title: (() => {
114
- const info: IJsDocTagInfo | undefined = props.object.jsDocTags.find(
129
+ const info: IJsDocTagInfo | undefined = props.object.type.jsDocTags.find(
115
130
  (tag) => tag.name === "title",
116
131
  );
117
132
  return info?.text?.length ? CommentFactory.merge(info.text) : undefined;
118
133
  })(),
119
- description: application_description(props.object),
134
+ description: application_description(props.object.type),
120
135
  additionalProperties: join({
121
136
  components: props.components,
122
137
  extra: extraMeta,
@@ -2,6 +2,7 @@ import { OpenApiV3 } from "@samchon/openapi";
2
2
 
3
3
  import { Metadata } from "../../schemas/metadata/Metadata";
4
4
  import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
5
+ import { MetadataNative } from "../../schemas/metadata/MetadataNative";
5
6
 
6
7
  import { AtomicPredicator } from "../helpers/AtomicPredicator";
7
8
  import { application_array } from "./application_array";
@@ -70,7 +71,7 @@ export const application_v30_schema = <BlockNever extends boolean>(props: {
70
71
  props.metadata.templates.length &&
71
72
  AtomicPredicator.template(props.metadata)
72
73
  )
73
- application_templates(props.metadata).map(insert);
74
+ application_templates(props.metadata).forEach(insert);
74
75
  for (const constant of props.metadata.constants)
75
76
  if (
76
77
  AtomicPredicator.constant({
@@ -112,8 +113,8 @@ export const application_v30_schema = <BlockNever extends boolean>(props: {
112
113
 
113
114
  // NATIVES
114
115
  for (const native of props.metadata.natives)
115
- if (AtomicPredicator.native(native)) {
116
- const type: string = native.toLowerCase();
116
+ if (AtomicPredicator.native(native.name)) {
117
+ const type: string = native.name.toLowerCase();
117
118
  if (props.metadata.atomics.some((a) => a.type === type)) continue;
118
119
  else if (type === "boolean")
119
120
  insert(
@@ -152,50 +153,46 @@ export const application_v30_schema = <BlockNever extends boolean>(props: {
152
153
  )[0]!,
153
154
  );
154
155
  } else
155
- insert(
156
- application_v30_native({
157
- name: native,
158
- components: props.components,
159
- nullable: props.metadata.nullable,
160
- }),
161
- );
162
- if (props.metadata.sets.length)
163
- insert(
164
156
  application_v30_native({
165
- name: "Set",
157
+ native,
166
158
  components: props.components,
167
159
  nullable: props.metadata.nullable,
160
+ }).forEach(insert);
161
+ if (props.metadata.sets.length)
162
+ application_v30_native({
163
+ native: MetadataNative.create({
164
+ name: "Set",
165
+ tags: [],
168
166
  }),
169
- );
167
+ components: props.components,
168
+ nullable: props.metadata.nullable,
169
+ }).forEach(insert);
170
170
  if (props.metadata.maps.length)
171
- insert(
172
- application_v30_native({
171
+ application_v30_native({
172
+ native: MetadataNative.create({
173
173
  name: "Map",
174
- components: props.components,
175
- nullable: props.metadata.nullable,
174
+ tags: [],
176
175
  }),
177
- );
176
+ components: props.components,
177
+ nullable: props.metadata.nullable,
178
+ }).forEach(insert);
178
179
 
179
180
  // OBJECT
180
181
  for (const object of props.metadata.objects)
181
- insert(
182
- application_v30_object({
183
- object: object.type,
184
- components: props.components,
185
- nullable: props.metadata.nullable,
186
- }),
187
- );
182
+ application_v30_object({
183
+ object,
184
+ components: props.components,
185
+ nullable: props.metadata.nullable,
186
+ }).forEach(insert);
188
187
 
189
188
  // ALIASES
190
189
  for (const alias of props.metadata.aliases)
191
- insert(
192
- application_v30_alias({
193
- alias,
194
- blockNever: props.blockNever,
195
- components: props.components,
196
- nullable: props.metadata.nullable,
197
- }),
198
- );
190
+ application_v30_alias({
191
+ alias,
192
+ blockNever: props.blockNever,
193
+ components: props.components,
194
+ nullable: props.metadata.nullable,
195
+ }).forEach(insert);
199
196
 
200
197
  //----
201
198
  // RETURNS
@@ -14,18 +14,21 @@ export const application_v31_alias = <BlockNever extends boolean>(props: {
14
14
  blockNever: BlockNever;
15
15
  components: OpenApi.IComponents;
16
16
  alias: MetadataAlias;
17
- }): OpenApi.IJsonSchema.IReference => {
18
- if (props.alias.value.size() === 1 && props.alias.value.objects.length === 1)
17
+ }): OpenApi.IJsonSchema.IReference[] => {
18
+ if (
19
+ props.alias.type.value.size() === 1 &&
20
+ props.alias.type.value.objects.length === 1
21
+ )
19
22
  return application_v31_object({
20
23
  components: props.components,
21
- object: props.alias.value.objects[0]!.type,
22
- }) as OpenApi.IJsonSchema.IReference;
24
+ object: props.alias.type.value.objects[0]!,
25
+ }) as OpenApi.IJsonSchema.IReference[];
23
26
 
24
- const $ref: string = `#/components/schemas/${props.alias.name}`;
25
- if (props.components.schemas?.[props.alias.name] === undefined) {
27
+ const $ref: string = `#/components/schemas/${props.alias.type.name}`;
28
+ if (props.components.schemas?.[props.alias.type.name] === undefined) {
26
29
  // TEMPORARY ASSIGNMENT
27
30
  props.components.schemas ??= {};
28
- props.components.schemas[props.alias.name] = {};
31
+ props.components.schemas[props.alias.type.name] = {};
29
32
 
30
33
  // GENERATE SCHEMA
31
34
  const schema: OpenApi.IJsonSchema | null = application_v31_schema({
@@ -33,15 +36,15 @@ export const application_v31_alias = <BlockNever extends boolean>(props: {
33
36
  components: props.components,
34
37
  attribute: {
35
38
  deprecated:
36
- props.alias.jsDocTags.some((tag) => tag.name === "deprecated") ||
39
+ props.alias.type.jsDocTags.some((tag) => tag.name === "deprecated") ||
37
40
  undefined,
38
- title: application_title(props.alias),
39
- description: application_description(props.alias),
41
+ title: application_title(props.alias.type),
42
+ description: application_description(props.alias.type),
40
43
  },
41
- metadata: props.alias.value,
44
+ metadata: props.alias.type.value,
42
45
  });
43
46
  if (schema !== null)
44
- Object.assign(props.components.schemas[props.alias.name]!, schema);
47
+ Object.assign(props.components.schemas[props.alias.type.name]!, schema);
45
48
  }
46
- return { $ref };
49
+ return [{ $ref }];
47
50
  };
@@ -1,25 +1,35 @@
1
1
  import { OpenApi } from "@samchon/openapi";
2
2
 
3
+ import { MetadataNative } from "../../schemas/metadata/MetadataNative";
4
+
5
+ import { application_plugin } from "./application_plugin";
6
+
3
7
  /**
4
8
  * @internal
5
9
  */
6
10
  export const application_v31_native = (props: {
7
11
  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) {
12
+ native: MetadataNative;
13
+ }): OpenApi.IJsonSchema[] => {
14
+ if (props.native.name === "Blob" || props.native.name === "File")
15
+ return application_plugin({
16
+ schema: {
17
+ type: "string",
18
+ format: "binary",
19
+ },
20
+ tags: props.native.tags,
21
+ });
22
+ if (props.components.schemas?.[props.native.name] === undefined) {
16
23
  props.components.schemas ??= {};
17
- props.components.schemas[props.name] ??= {
24
+ props.components.schemas[props.native.name] ??= {
18
25
  type: "object",
19
26
  properties: {},
20
27
  };
21
28
  }
22
- return {
23
- $ref: `#/components/schemas/${props.name}`,
24
- };
29
+ return application_plugin({
30
+ schema: {
31
+ $ref: `#/components/schemas/${props.native.name}`,
32
+ },
33
+ tags: props.native.tags,
34
+ });
25
35
  };
@@ -4,11 +4,12 @@ import { CommentFactory } from "../../factories/CommentFactory";
4
4
 
5
5
  import { IJsDocTagInfo } from "../../schemas/metadata/IJsDocTagInfo";
6
6
  import { Metadata } from "../../schemas/metadata/Metadata";
7
- import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
7
+ import { MetadataObject } from "../../schemas/metadata/MetadataObject";
8
8
 
9
9
  import { PatternUtil } from "../../utils/PatternUtil";
10
10
 
11
11
  import { application_description } from "./application_description";
12
+ import { application_plugin } from "./application_plugin";
12
13
  import { application_title } from "./application_title";
13
14
  import { application_v31_schema } from "./application_v31_schema";
14
15
  import { metadata_to_pattern } from "./metadata_to_pattern";
@@ -18,11 +19,21 @@ import { metadata_to_pattern } from "./metadata_to_pattern";
18
19
  */
19
20
  export const application_v31_object = (props: {
20
21
  components: OpenApi.IComponents;
21
- object: MetadataObjectType;
22
+ object: MetadataObject;
23
+ }): Array<OpenApi.IJsonSchema.IReference | OpenApi.IJsonSchema.IObject> =>
24
+ application_plugin({
25
+ schema: emplace_object(props),
26
+ tags: props.object.tags,
27
+ });
28
+
29
+ const emplace_object = (props: {
30
+ components: OpenApi.IComponents;
31
+ object: MetadataObject;
22
32
  }): OpenApi.IJsonSchema.IReference | OpenApi.IJsonSchema.IObject => {
23
- if (props.object.isLiteral() === true) return create_object_schema(props);
33
+ if (props.object.type.isLiteral() === true)
34
+ return create_object_schema(props);
24
35
 
25
- const key: string = props.object.name;
36
+ const key: string = props.object.type.name;
26
37
  const $ref: string = `#/components/schemas/${key}`;
27
38
  if (props.components.schemas?.[key] !== undefined) return { $ref };
28
39
 
@@ -38,7 +49,7 @@ export const application_v31_object = (props: {
38
49
  */
39
50
  const create_object_schema = (props: {
40
51
  components: OpenApi.IComponents;
41
- object: MetadataObjectType;
52
+ object: MetadataObject;
42
53
  }): OpenApi.IJsonSchema.IObject => {
43
54
  // ITERATE PROPERTIES
44
55
  const properties: Record<string, any> = {};
@@ -48,7 +59,7 @@ const create_object_schema = (props: {
48
59
  };
49
60
  const required: string[] = [];
50
61
 
51
- for (const property of props.object.properties) {
62
+ for (const property of props.object.type.properties) {
52
63
  if (
53
64
  // FUNCTIONAL TYPE
54
65
  property.value.functions.length &&
@@ -93,12 +104,12 @@ const create_object_schema = (props: {
93
104
  properties,
94
105
  required: required.length ? required : undefined,
95
106
  title: (() => {
96
- const info: IJsDocTagInfo | undefined = props.object.jsDocTags.find(
107
+ const info: IJsDocTagInfo | undefined = props.object.type.jsDocTags.find(
97
108
  (tag) => tag.name === "title",
98
109
  );
99
110
  return info?.text?.length ? CommentFactory.merge(info.text) : undefined;
100
111
  })(),
101
- description: application_description(props.object),
112
+ description: application_description(props.object.type),
102
113
  additionalProperties: join({
103
114
  components: props.components,
104
115
  extra: extraMeta,
@@ -2,6 +2,7 @@ import { OpenApi } from "@samchon/openapi";
2
2
 
3
3
  import { Metadata } from "../../schemas/metadata/Metadata";
4
4
  import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
5
+ import { MetadataNative } from "../../schemas/metadata/MetadataNative";
5
6
 
6
7
  import { AtomicPredicator } from "../helpers/AtomicPredicator";
7
8
  import { application_array } from "./application_array";
@@ -112,8 +113,8 @@ export const application_v31_schema = <BlockNever extends boolean>(props: {
112
113
 
113
114
  // NATIVES
114
115
  for (const native of props.metadata.natives)
115
- if (AtomicPredicator.native(native)) {
116
- const type: string = native.toLowerCase();
116
+ if (AtomicPredicator.native(native.name)) {
117
+ const type: string = native.name.toLowerCase();
117
118
  if (props.metadata.atomics.some((a) => a.type === type)) continue;
118
119
  else if (type === "boolean")
119
120
  insert(
@@ -152,45 +153,41 @@ export const application_v31_schema = <BlockNever extends boolean>(props: {
152
153
  )[0]! as any,
153
154
  );
154
155
  } else
155
- insert(
156
- application_v31_native({
157
- components: props.components,
158
- name: native,
159
- }),
160
- );
161
- if (props.metadata.sets.length)
162
- insert(
163
156
  application_v31_native({
164
- name: "Set",
165
157
  components: props.components,
158
+ native,
159
+ }).forEach(insert);
160
+ if (props.metadata.sets.length)
161
+ application_v31_native({
162
+ native: MetadataNative.create({
163
+ name: "Set",
164
+ tags: [],
166
165
  }),
167
- );
166
+ components: props.components,
167
+ }).forEach(insert);
168
168
  if (props.metadata.maps.length)
169
- insert(
170
- application_v31_native({
169
+ application_v31_native({
170
+ native: MetadataNative.create({
171
171
  name: "Map",
172
- components: props.components,
172
+ tags: [],
173
173
  }),
174
- );
174
+ components: props.components,
175
+ }).forEach(insert);
175
176
 
176
177
  // OBJECT
177
178
  for (const object of props.metadata.objects)
178
- insert(
179
- application_v31_object({
180
- components: props.components,
181
- object: object.type,
182
- }),
183
- );
179
+ application_v31_object({
180
+ components: props.components,
181
+ object,
182
+ }).forEach(insert);
184
183
 
185
184
  // ALIASES
186
185
  for (const alias of props.metadata.aliases)
187
- insert(
188
- application_v31_alias({
189
- alias,
190
- blockNever: props.blockNever,
191
- components: props.components,
192
- }),
193
- );
186
+ application_v31_alias({
187
+ alias,
188
+ blockNever: props.blockNever,
189
+ components: props.components,
190
+ }).forEach(insert);
194
191
 
195
192
  //----
196
193
  // RETURNS
@@ -28,7 +28,7 @@ export const check_dynamic_key = (props: {
28
28
  .length === 0,
29
29
  )) ||
30
30
  (props.metadata.natives.length !== 0 &&
31
- props.metadata.natives.some((type) => type === "String"))
31
+ props.metadata.natives.some((native) => native.name === "String"))
32
32
  )
33
33
  return ts.factory.createTrue();
34
34
 
@@ -135,7 +135,7 @@ export const check_dynamic_key = (props: {
135
135
 
136
136
  // NATIVES
137
137
  for (const native of props.metadata.natives)
138
- if (native === "Boolean")
138
+ if (native.name === "Boolean")
139
139
  conditions.push(
140
140
  ts.factory.createLogicalOr(
141
141
  ts.factory.createStrictEquality(
@@ -148,7 +148,7 @@ export const check_dynamic_key = (props: {
148
148
  ),
149
149
  ),
150
150
  );
151
- else if (native === "BigInt")
151
+ else if (native.name === "BigInt")
152
152
  conditions.push(
153
153
  ts.factory.createCallExpression(
154
154
  props.context.importer.internal("isBigintString"),
@@ -156,7 +156,7 @@ export const check_dynamic_key = (props: {
156
156
  [props.input],
157
157
  ),
158
158
  );
159
- else if (native === "Number")
159
+ else if (native.name === "Number")
160
160
  conditions.push(
161
161
  ts.factory.createStrictEquality(
162
162
  ts.factory.createFalse(),
@@ -6,14 +6,14 @@ import { ExpressionFactory } from "../../factories/ExpressionFactory";
6
6
  * @internal
7
7
  */
8
8
  export const check_native = (props: {
9
- type: string;
9
+ name: string;
10
10
  input: ts.Expression;
11
11
  }): ts.Expression => {
12
- const instanceOf = ExpressionFactory.isInstanceOf(props.type, props.input);
13
- return ATOMIC_LIKE.has(props.type)
12
+ const instanceOf = ExpressionFactory.isInstanceOf(props.name, props.input);
13
+ return ATOMIC_LIKE.has(props.name)
14
14
  ? ts.factory.createLogicalOr(
15
15
  ts.factory.createStrictEquality(
16
- ts.factory.createStringLiteral(props.type.toLowerCase()),
16
+ ts.factory.createStringLiteral(props.name.toLowerCase()),
17
17
  ts.factory.createTypeOfExpression(props.input),
18
18
  ),
19
19
  instanceOf,
@@ -8,6 +8,7 @@ import { TypeFactory } from "../../factories/TypeFactory";
8
8
  import { Metadata } from "../../schemas/metadata/Metadata";
9
9
  import { MetadataArray } from "../../schemas/metadata/MetadataArray";
10
10
  import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
11
+ import { MetadataMap } from "../../schemas/metadata/MetadataMap";
11
12
  import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
12
13
 
13
14
  import { CheckerProgrammer } from "../CheckerProgrammer";
@@ -18,7 +19,7 @@ import { UnionExplorer } from "../helpers/UnionExplorer";
18
19
  * @internal
19
20
  */
20
21
  export const check_union_array_like = <
21
- Origin extends Metadata | MetadataArray | MetadataTuple | Metadata.Entry,
22
+ Origin extends Metadata | MetadataArray | MetadataTuple | MetadataMap,
22
23
  Category extends MetadataArray | MetadataTuple,
23
24
  Element,
24
25
  >(props: {
@@ -59,7 +59,7 @@ const is_date = (props: {
59
59
  props.visited.add(props.metadata);
60
60
 
61
61
  return (
62
- props.metadata.natives.some((name) => name === "Date") ||
62
+ props.metadata.natives.some((native) => native.name === "Date") ||
63
63
  props.metadata.arrays.some((array) =>
64
64
  is_date({
65
65
  visited: props.visited,
@@ -77,7 +77,7 @@ const is_date = (props: {
77
77
  props.metadata.aliases.some((alias) =>
78
78
  is_date({
79
79
  visited: props.visited,
80
- metadata: alias.value,
80
+ metadata: alias.type.value,
81
81
  }),
82
82
  )
83
83
  );