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,132 +1,132 @@
1
- import { ILlmSchema } 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 { llm_schema_station } from "./llm_schema_station";
13
- import { metadata_to_pattern } from "./metadata_to_pattern";
14
-
15
- /**
16
- * @internal
17
- */
18
- export const llm_schema_object = (props: {
19
- object: MetadataObject;
20
- nullable: boolean;
21
- }): ILlmSchema.IObject => {
22
- // ITERATE PROPERTIES
23
- const properties: Record<string, any> = {};
24
- const extraMeta: ISuperfluous = {
25
- patternProperties: {},
26
- additionalProperties: undefined,
27
- };
28
- const required: string[] = [];
29
-
30
- for (const property of props.object.properties) {
31
- if (
32
- // FUNCTIONAL TYPE
33
- property.value.functions.length &&
34
- property.value.nullable === false &&
35
- property.value.isRequired() === true &&
36
- property.value.size() === 0
37
- )
38
- continue;
39
- else if (property.jsDocTags.find((tag) => tag.name === "hidden")) continue; // THE HIDDEN TAG
40
-
41
- const key: string | null = property.key.getSoleLiteral();
42
- const schema: ILlmSchema | null = llm_schema_station({
43
- blockNever: true,
44
- attribute: {
45
- deprecated:
46
- property.jsDocTags.some((tag) => tag.name === "deprecated") ||
47
- undefined,
48
- title: (() => {
49
- const info: IJsDocTagInfo | undefined = property.jsDocTags.find(
50
- (tag) => tag.name === "title",
51
- );
52
- if (info?.text?.length) return CommentFactory.merge(info.text);
53
- else if (!property.description?.length) return undefined;
54
-
55
- const index: number = property.description.indexOf("\n");
56
- const top: string = (
57
- index === -1
58
- ? property.description
59
- : property.description.substring(0, index)
60
- ).trim();
61
- return top.endsWith(".")
62
- ? top.substring(0, top.length - 1)
63
- : undefined;
64
- })(),
65
- description: application_description(property),
66
- },
67
- metadata: property.value,
68
- });
69
-
70
- if (schema === null) continue;
71
- if (key !== null) {
72
- properties[key] = schema;
73
- if (property.value.isRequired() === true) required.push(key);
74
- } else {
75
- const pattern: string = metadata_to_pattern({
76
- top: true,
77
- metadata: property.key,
78
- });
79
- if (pattern === PatternUtil.STRING)
80
- extraMeta.additionalProperties = [property.value, schema];
81
- else extraMeta.patternProperties[pattern] = [property.value, schema];
82
- }
83
- }
84
-
85
- return {
86
- type: "object",
87
- properties,
88
- nullable: props.nullable,
89
- required: required.length ? required : undefined,
90
- title: (() => {
91
- const info: IJsDocTagInfo | undefined = props.object.jsDocTags.find(
92
- (tag) => tag.name === "title",
93
- );
94
- return info?.text?.length ? CommentFactory.merge(info.text) : undefined;
95
- })(),
96
- description: application_description(props.object),
97
- additionalProperties: join(extraMeta),
98
- };
99
- };
100
-
101
- /**
102
- * @internal
103
- */
104
- const join = (extra: ISuperfluous): ILlmSchema | undefined => {
105
- // LIST UP METADATA
106
- const elements: [Metadata, ILlmSchema][] = Object.values(
107
- extra.patternProperties || {},
108
- );
109
- if (extra.additionalProperties) elements.push(extra.additionalProperties);
110
-
111
- // SHORT RETURN
112
- if (elements.length === 0) return undefined;
113
- else if (elements.length === 1) return elements[0]![1]!;
114
-
115
- // MERGE METADATA AND GENERATE VULNERABLE SCHEMA
116
- const meta: Metadata = elements
117
- .map((tuple) => tuple[0])
118
- .reduce((x, y) => Metadata.merge(x, y));
119
- return llm_schema_station({
120
- blockNever: true,
121
- attribute: {},
122
- metadata: meta,
123
- });
124
- };
125
-
126
- /**
127
- * @internal
128
- */
129
- interface ISuperfluous {
130
- additionalProperties?: undefined | [Metadata, ILlmSchema];
131
- patternProperties: Record<string, [Metadata, ILlmSchema]>;
132
- }
1
+ import { ILlmSchema } 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 { llm_schema_station } from "./llm_schema_station";
13
+ import { metadata_to_pattern } from "./metadata_to_pattern";
14
+
15
+ /**
16
+ * @internal
17
+ */
18
+ export const llm_schema_object = (props: {
19
+ object: MetadataObjectType;
20
+ nullable: boolean;
21
+ }): ILlmSchema.IObject => {
22
+ // ITERATE PROPERTIES
23
+ const properties: Record<string, any> = {};
24
+ const extraMeta: ISuperfluous = {
25
+ patternProperties: {},
26
+ additionalProperties: undefined,
27
+ };
28
+ const required: string[] = [];
29
+
30
+ for (const property of props.object.properties) {
31
+ if (
32
+ // FUNCTIONAL TYPE
33
+ property.value.functions.length &&
34
+ property.value.nullable === false &&
35
+ property.value.isRequired() === true &&
36
+ property.value.size() === 0
37
+ )
38
+ continue;
39
+ else if (property.jsDocTags.find((tag) => tag.name === "hidden")) continue; // THE HIDDEN TAG
40
+
41
+ const key: string | null = property.key.getSoleLiteral();
42
+ const schema: ILlmSchema | null = llm_schema_station({
43
+ blockNever: true,
44
+ attribute: {
45
+ deprecated:
46
+ property.jsDocTags.some((tag) => tag.name === "deprecated") ||
47
+ undefined,
48
+ title: (() => {
49
+ const info: IJsDocTagInfo | undefined = property.jsDocTags.find(
50
+ (tag) => tag.name === "title",
51
+ );
52
+ if (info?.text?.length) return CommentFactory.merge(info.text);
53
+ else if (!property.description?.length) return undefined;
54
+
55
+ const index: number = property.description.indexOf("\n");
56
+ const top: string = (
57
+ index === -1
58
+ ? property.description
59
+ : property.description.substring(0, index)
60
+ ).trim();
61
+ return top.endsWith(".")
62
+ ? top.substring(0, top.length - 1)
63
+ : undefined;
64
+ })(),
65
+ description: application_description(property),
66
+ },
67
+ metadata: property.value,
68
+ });
69
+
70
+ if (schema === null) continue;
71
+ if (key !== null) {
72
+ properties[key] = schema;
73
+ if (property.value.isRequired() === true) required.push(key);
74
+ } else {
75
+ const pattern: string = metadata_to_pattern({
76
+ top: true,
77
+ metadata: property.key,
78
+ });
79
+ if (pattern === PatternUtil.STRING)
80
+ extraMeta.additionalProperties = [property.value, schema];
81
+ else extraMeta.patternProperties[pattern] = [property.value, schema];
82
+ }
83
+ }
84
+
85
+ return {
86
+ type: "object",
87
+ properties,
88
+ nullable: props.nullable,
89
+ required: required.length ? required : undefined,
90
+ title: (() => {
91
+ const info: IJsDocTagInfo | undefined = props.object.jsDocTags.find(
92
+ (tag) => tag.name === "title",
93
+ );
94
+ return info?.text?.length ? CommentFactory.merge(info.text) : undefined;
95
+ })(),
96
+ description: application_description(props.object),
97
+ additionalProperties: join(extraMeta),
98
+ };
99
+ };
100
+
101
+ /**
102
+ * @internal
103
+ */
104
+ const join = (extra: ISuperfluous): ILlmSchema | false => {
105
+ // LIST UP METADATA
106
+ const elements: [Metadata, ILlmSchema][] = Object.values(
107
+ extra.patternProperties || {},
108
+ );
109
+ if (extra.additionalProperties) elements.push(extra.additionalProperties);
110
+
111
+ // SHORT RETURN
112
+ if (elements.length === 0) return false;
113
+ else if (elements.length === 1) return elements[0]![1]!;
114
+
115
+ // MERGE METADATA AND GENERATE VULNERABLE SCHEMA
116
+ const meta: Metadata = elements
117
+ .map((tuple) => tuple[0])
118
+ .reduce((x, y) => Metadata.merge(x, y));
119
+ return llm_schema_station({
120
+ blockNever: true,
121
+ attribute: {},
122
+ metadata: meta,
123
+ });
124
+ };
125
+
126
+ /**
127
+ * @internal
128
+ */
129
+ interface ISuperfluous {
130
+ additionalProperties?: undefined | [Metadata, ILlmSchema];
131
+ patternProperties: Record<string, [Metadata, ILlmSchema]>;
132
+ }
@@ -1,190 +1,190 @@
1
- import { ILlmSchema } from "@samchon/openapi";
2
-
3
- import { Metadata } from "../../schemas/metadata/Metadata";
4
- import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
5
-
6
- import { AtomicPredicator } from "../helpers/AtomicPredicator";
7
- import { application_bigint } from "./application_bigint";
8
- import { application_boolean } from "./application_boolean";
9
- import { application_number } from "./application_number";
10
- import { application_string } from "./application_string";
11
- import { application_templates } from "./application_templates";
12
- import { application_v30_constant } from "./application_v30_constant";
13
- import { llm_schema_array } from "./llm_schema_array";
14
- import { llm_schema_escaped } from "./llm_schema_escaped";
15
- import { llm_schema_native } from "./llm_schema_native";
16
- import { llm_schema_object } from "./llm_schema_object";
17
- import { llm_schema_tuple } from "./llm_schema_tuple";
18
-
19
- /**
20
- * @internal
21
- */
22
- export const llm_schema_station = (props: {
23
- metadata: Metadata;
24
- blockNever: boolean;
25
- attribute: ILlmSchema.__IAttribute;
26
- }): ILlmSchema => {
27
- // VULNERABLE CASE
28
- if (props.metadata.any === true)
29
- return {
30
- ...props.attribute,
31
- type: undefined,
32
- };
33
- else if (props.metadata.nullable === true && props.metadata.empty() === true)
34
- return {
35
- ...props.attribute,
36
- type: "null",
37
- };
38
-
39
- //----
40
- // GATHER UNION SCHEMAS
41
- //----
42
- const union: ILlmSchema[] = [];
43
- const insert = props.metadata.nullable
44
- ? (schema: ILlmSchema) =>
45
- union.push({
46
- ...schema,
47
- nullable: (schema as ILlmSchema.__ISignificant<any>).type
48
- ? true
49
- : undefined,
50
- } as ILlmSchema)
51
- : (schema: ILlmSchema) => union.push(schema);
52
-
53
- // toJSON() METHOD
54
- if (props.metadata.escaped !== null)
55
- llm_schema_escaped(props.metadata.escaped).forEach(insert);
56
-
57
- // ATOMIC TYPES
58
- if (
59
- props.metadata.templates.length &&
60
- AtomicPredicator.template(props.metadata)
61
- )
62
- application_templates<"3.0">(props.metadata).map(insert);
63
- for (const constant of props.metadata.constants)
64
- if (
65
- AtomicPredicator.constant({
66
- metadata: props.metadata,
67
- name: constant.type,
68
- }) === false
69
- )
70
- continue;
71
- else insert(application_v30_constant(constant));
72
- for (const a of props.metadata.atomics)
73
- if (a.type === "boolean") application_boolean<"3.0">(a).forEach(insert);
74
- else if (a.type === "bigint") application_bigint<"3.0">(a).forEach(insert);
75
- else if (a.type === "number") application_number<"3.0">(a).forEach(insert);
76
- else if (a.type === "string") application_string<"3.0">(a).forEach(insert);
77
-
78
- // ARRAY
79
- for (const array of props.metadata.arrays)
80
- if (array.type.recursive)
81
- throw new Error(
82
- "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive array type.",
83
- );
84
- else llm_schema_array(array).forEach(insert);
85
-
86
- // TUPLE
87
- for (const tuple of props.metadata.tuples)
88
- if (tuple.type.recursive)
89
- throw new Error(
90
- "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive tuple type.",
91
- );
92
- else
93
- insert(
94
- llm_schema_tuple({
95
- tuple,
96
- attribute: props.attribute,
97
- }),
98
- );
99
-
100
- // NATIVES
101
- for (const native of props.metadata.natives)
102
- if (AtomicPredicator.native(native)) {
103
- const type: string = native.toLowerCase();
104
- if (props.metadata.atomics.some((a) => a.type === type)) continue;
105
- else if (type === "boolean")
106
- insert(
107
- application_boolean<"3.0">(
108
- MetadataAtomic.create({
109
- type: "boolean",
110
- tags: [],
111
- }),
112
- )[0]!,
113
- );
114
- else if (type === "bigint")
115
- insert(
116
- application_bigint(
117
- MetadataAtomic.create({
118
- type: "bigint",
119
- tags: [],
120
- }),
121
- )[0]!,
122
- );
123
- else if (type === "number")
124
- insert(
125
- application_number(
126
- MetadataAtomic.create({
127
- type: "number",
128
- tags: [],
129
- }),
130
- )[0]!,
131
- );
132
- else if (type === "string")
133
- insert(
134
- application_string(
135
- MetadataAtomic.create({
136
- type: "string",
137
- tags: [],
138
- }),
139
- )[0]!,
140
- );
141
- } else insert(llm_schema_native(native));
142
- if (props.metadata.sets.length) insert(llm_schema_native("Set"));
143
- if (props.metadata.maps.length) insert(llm_schema_native("Map"));
144
-
145
- // OBJECT
146
- for (const object of props.metadata.objects)
147
- if (object.recursive)
148
- throw new Error(
149
- "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive object type.",
150
- );
151
- else
152
- insert(
153
- llm_schema_object({
154
- object,
155
- nullable: props.metadata.nullable,
156
- }),
157
- );
158
-
159
- // ALIASES
160
- for (const alias of props.metadata.aliases)
161
- if (alias.recursive)
162
- throw new Error(
163
- "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive alias type.",
164
- );
165
- else
166
- insert(
167
- llm_schema_station({
168
- ...props,
169
- metadata: alias.value,
170
- }),
171
- );
172
-
173
- //----
174
- // RETURNS
175
- //----
176
- if (union.length === 0 && props.blockNever === true) return null!;
177
- const schema: ILlmSchema =
178
- union.length === 0
179
- ? { type: undefined }
180
- : union.length === 1
181
- ? union[0]!
182
- : { oneOf: union };
183
- return {
184
- ...schema,
185
- ...props.attribute,
186
- title: props.attribute.title ?? schema.title,
187
- description: props.attribute.description ?? schema.description,
188
- deprecated: props.attribute.deprecated ?? schema.deprecated,
189
- };
190
- };
1
+ import { ILlmSchema } from "@samchon/openapi";
2
+
3
+ import { Metadata } from "../../schemas/metadata/Metadata";
4
+ import { MetadataAtomic } from "../../schemas/metadata/MetadataAtomic";
5
+
6
+ import { AtomicPredicator } from "../helpers/AtomicPredicator";
7
+ import { application_bigint } from "./application_bigint";
8
+ import { application_boolean } from "./application_boolean";
9
+ import { application_number } from "./application_number";
10
+ import { application_string } from "./application_string";
11
+ import { application_templates } from "./application_templates";
12
+ import { application_v30_constant } from "./application_v30_constant";
13
+ import { llm_schema_array } from "./llm_schema_array";
14
+ import { llm_schema_escaped } from "./llm_schema_escaped";
15
+ import { llm_schema_native } from "./llm_schema_native";
16
+ import { llm_schema_object } from "./llm_schema_object";
17
+ import { llm_schema_tuple } from "./llm_schema_tuple";
18
+
19
+ /**
20
+ * @internal
21
+ */
22
+ export const llm_schema_station = (props: {
23
+ metadata: Metadata;
24
+ blockNever: boolean;
25
+ attribute: ILlmSchema.__IAttribute;
26
+ }): ILlmSchema => {
27
+ // VULNERABLE CASE
28
+ if (props.metadata.any === true)
29
+ return {
30
+ ...props.attribute,
31
+ type: undefined,
32
+ };
33
+ else if (props.metadata.nullable === true && props.metadata.empty() === true)
34
+ return {
35
+ ...props.attribute,
36
+ type: "null",
37
+ };
38
+
39
+ //----
40
+ // GATHER UNION SCHEMAS
41
+ //----
42
+ const union: ILlmSchema[] = [];
43
+ const insert = props.metadata.nullable
44
+ ? (schema: ILlmSchema) =>
45
+ union.push({
46
+ ...schema,
47
+ nullable: (schema as ILlmSchema.__ISignificant<any>).type
48
+ ? true
49
+ : undefined,
50
+ } as ILlmSchema)
51
+ : (schema: ILlmSchema) => union.push(schema);
52
+
53
+ // toJSON() METHOD
54
+ if (props.metadata.escaped !== null)
55
+ llm_schema_escaped(props.metadata.escaped).forEach(insert);
56
+
57
+ // ATOMIC TYPES
58
+ if (
59
+ props.metadata.templates.length &&
60
+ AtomicPredicator.template(props.metadata)
61
+ )
62
+ application_templates<"3.0">(props.metadata).map(insert);
63
+ for (const constant of props.metadata.constants)
64
+ if (
65
+ AtomicPredicator.constant({
66
+ metadata: props.metadata,
67
+ name: constant.type,
68
+ }) === false
69
+ )
70
+ continue;
71
+ else insert(application_v30_constant(constant));
72
+ for (const a of props.metadata.atomics)
73
+ if (a.type === "boolean") application_boolean<"3.0">(a).forEach(insert);
74
+ else if (a.type === "bigint") application_bigint<"3.0">(a).forEach(insert);
75
+ else if (a.type === "number") application_number<"3.0">(a).forEach(insert);
76
+ else if (a.type === "string") application_string<"3.0">(a).forEach(insert);
77
+
78
+ // ARRAY
79
+ for (const array of props.metadata.arrays)
80
+ if (array.type.recursive)
81
+ throw new Error(
82
+ "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive array type.",
83
+ );
84
+ else llm_schema_array(array).forEach(insert);
85
+
86
+ // TUPLE
87
+ for (const tuple of props.metadata.tuples)
88
+ if (tuple.type.recursive)
89
+ throw new Error(
90
+ "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive tuple type.",
91
+ );
92
+ else
93
+ insert(
94
+ llm_schema_tuple({
95
+ tuple,
96
+ attribute: props.attribute,
97
+ }),
98
+ );
99
+
100
+ // NATIVES
101
+ for (const native of props.metadata.natives)
102
+ if (AtomicPredicator.native(native)) {
103
+ const type: string = native.toLowerCase();
104
+ if (props.metadata.atomics.some((a) => a.type === type)) continue;
105
+ else if (type === "boolean")
106
+ insert(
107
+ application_boolean<"3.0">(
108
+ MetadataAtomic.create({
109
+ type: "boolean",
110
+ tags: [],
111
+ }),
112
+ )[0]!,
113
+ );
114
+ else if (type === "bigint")
115
+ insert(
116
+ application_bigint(
117
+ MetadataAtomic.create({
118
+ type: "bigint",
119
+ tags: [],
120
+ }),
121
+ )[0]!,
122
+ );
123
+ else if (type === "number")
124
+ insert(
125
+ application_number(
126
+ MetadataAtomic.create({
127
+ type: "number",
128
+ tags: [],
129
+ }),
130
+ )[0]!,
131
+ );
132
+ else if (type === "string")
133
+ insert(
134
+ application_string(
135
+ MetadataAtomic.create({
136
+ type: "string",
137
+ tags: [],
138
+ }),
139
+ )[0]!,
140
+ );
141
+ } else insert(llm_schema_native(native));
142
+ if (props.metadata.sets.length) insert(llm_schema_native("Set"));
143
+ if (props.metadata.maps.length) insert(llm_schema_native("Map"));
144
+
145
+ // OBJECT
146
+ for (const object of props.metadata.objects)
147
+ if (object.type.recursive)
148
+ throw new Error(
149
+ "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive object type.",
150
+ );
151
+ else
152
+ insert(
153
+ llm_schema_object({
154
+ object: object.type,
155
+ nullable: props.metadata.nullable,
156
+ }),
157
+ );
158
+
159
+ // ALIASES
160
+ for (const alias of props.metadata.aliases)
161
+ if (alias.recursive)
162
+ throw new Error(
163
+ "Error on LlmSchemaProgrammer.write(): LLM schema does not allow recursive alias type.",
164
+ );
165
+ else
166
+ insert(
167
+ llm_schema_station({
168
+ ...props,
169
+ metadata: alias.value,
170
+ }),
171
+ );
172
+
173
+ //----
174
+ // RETURNS
175
+ //----
176
+ if (union.length === 0 && props.blockNever === true) return null!;
177
+ const schema: ILlmSchema =
178
+ union.length === 0
179
+ ? { type: undefined }
180
+ : union.length === 1
181
+ ? union[0]!
182
+ : { oneOf: union };
183
+ return {
184
+ ...schema,
185
+ ...props.attribute,
186
+ title: props.attribute.title ?? schema.title,
187
+ description: props.attribute.description ?? schema.description,
188
+ deprecated: props.attribute.deprecated ?? schema.deprecated,
189
+ };
190
+ };