typia 7.0.0-dev.20241011-2 → 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.
- package/lib/factories/MetadataCollection.d.ts +4 -4
- package/lib/factories/MetadataCollection.js +6 -4
- package/lib/factories/MetadataCollection.js.map +1 -1
- package/lib/factories/MetadataFactory.d.ts +2 -2
- package/lib/factories/MetadataFactory.js +8 -2
- package/lib/factories/MetadataFactory.js.map +1 -1
- package/lib/factories/MetadataTypeTagFactory.d.ts +2 -2
- package/lib/factories/MetadataTypeTagFactory.js +6 -6
- package/lib/factories/MetadataTypeTagFactory.js.map +1 -1
- package/lib/factories/MetadataTypeTagSchemaFactory.d.ts +2 -2
- package/lib/factories/MetadataTypeTagSchemaFactory.js +1 -1
- package/lib/factories/MetadataTypeTagSchemaFactory.js.map +1 -1
- package/lib/factories/ProtobufFactory.js +12 -12
- package/lib/factories/ProtobufFactory.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +2 -2
- package/lib/factories/internal/metadata/iterate_metadata_collection.js +2 -1
- package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +2 -2
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js +5 -2
- package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_object.js +5 -1
- package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_sort.js +6 -2
- package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.d.ts +2 -2
- package/lib/programmers/CheckerProgrammer.js +5 -3
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/FeatureProgrammer.d.ts +5 -5
- package/lib/programmers/FeatureProgrammer.js.map +1 -1
- package/lib/programmers/IsProgrammer.d.ts +2 -2
- package/lib/programmers/RandomProgrammer.js +1 -1
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/helpers/ProtobufUtil.d.ts +2 -2
- package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
- package/lib/programmers/helpers/PruneJoiner.d.ts +2 -2
- package/lib/programmers/helpers/RandomJoiner.d.ts +2 -2
- package/lib/programmers/helpers/UnionExplorer.d.ts +3 -3
- package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
- package/lib/programmers/helpers/UnionPredicator.d.ts +3 -3
- package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
- package/lib/programmers/http/HttpFormDataProgrammer.js +1 -1
- package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
- package/lib/programmers/http/HttpHeadersProgrammer.js +1 -1
- package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
- package/lib/programmers/http/HttpQueryProgrammer.js +2 -2
- package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
- package/lib/programmers/internal/application_union_discriminator.js +2 -2
- package/lib/programmers/internal/application_union_discriminator.js.map +1 -1
- package/lib/programmers/internal/application_v30_alias.js +1 -1
- package/lib/programmers/internal/application_v30_alias.js.map +1 -1
- package/lib/programmers/internal/application_v30_schema.js +1 -1
- package/lib/programmers/internal/application_v30_schema.js.map +1 -1
- package/lib/programmers/internal/application_v31_alias.js +1 -1
- package/lib/programmers/internal/application_v31_alias.js.map +1 -1
- package/lib/programmers/internal/application_v31_schema.js +1 -1
- package/lib/programmers/internal/application_v31_schema.js.map +1 -1
- package/lib/programmers/internal/llm_schema_station.js +2 -2
- package/lib/programmers/internal/llm_schema_station.js.map +1 -1
- package/lib/programmers/internal/prune_object_properties.js.map +1 -1
- package/lib/programmers/json/JsonApplicationProgrammer.js +6 -5
- package/lib/programmers/json/JsonApplicationProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonStringifyProgrammer.js +3 -3
- package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
- package/lib/programmers/llm/LlmApplicationProgrammer.js +7 -6
- package/lib/programmers/llm/LlmApplicationProgrammer.js.map +1 -1
- package/lib/programmers/llm/LlmSchemaProgrammer.js +1 -1
- package/lib/programmers/llm/LlmSchemaProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscCloneProgrammer.js +1 -1
- package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscPruneProgrammer.js +1 -1
- package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
- package/lib/programmers/notations/NotationGeneralProgrammer.js +1 -1
- package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +6 -6
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +1 -1
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +3 -3
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
- package/lib/schemas/metadata/IMetadata.d.ts +4 -1
- package/lib/schemas/metadata/IMetadataArray.d.ts +1 -2
- package/lib/schemas/metadata/IMetadataComponents.d.ts +2 -2
- package/lib/schemas/metadata/IMetadataDictionary.d.ts +2 -2
- package/lib/schemas/metadata/IMetadataObject.d.ts +2 -8
- package/lib/schemas/metadata/IMetadataObjectType.d.ts +11 -0
- package/lib/schemas/metadata/IMetadataObjectType.js +3 -0
- package/lib/schemas/metadata/IMetadataObjectType.js.map +1 -0
- package/lib/schemas/metadata/IMetadataTuple.d.ts +1 -2
- package/lib/schemas/metadata/Metadata.js +14 -15
- package/lib/schemas/metadata/Metadata.js.map +1 -1
- package/lib/schemas/metadata/MetadataArray.js +1 -1
- package/lib/schemas/metadata/MetadataArray.js.map +1 -1
- package/lib/schemas/metadata/MetadataComponents.d.ts +2 -2
- package/lib/schemas/metadata/MetadataComponents.js +2 -2
- package/lib/schemas/metadata/MetadataComponents.js.map +1 -1
- package/lib/schemas/metadata/MetadataObject.d.ts +8 -12
- package/lib/schemas/metadata/MetadataObject.js +44 -82
- package/lib/schemas/metadata/MetadataObject.js.map +1 -1
- package/lib/schemas/metadata/MetadataObjectType.d.ts +20 -0
- package/lib/schemas/metadata/MetadataObjectType.js +106 -0
- package/lib/schemas/metadata/MetadataObjectType.js.map +1 -0
- package/lib/schemas/metadata/MetadataTuple.js +1 -1
- package/lib/schemas/metadata/MetadataTuple.js.map +1 -1
- package/lib/transformers/TransformerError.js.map +1 -1
- package/package.json +1 -1
- package/src/factories/MetadataCollection.ts +12 -10
- package/src/factories/MetadataFactory.ts +11 -5
- package/src/factories/MetadataTypeTagFactory.ts +13 -12
- package/src/factories/MetadataTypeTagSchemaFactory.ts +4 -4
- package/src/factories/ProtobufFactory.ts +14 -14
- package/src/factories/internal/metadata/emplace_metadata_object.ts +2 -2
- package/src/factories/internal/metadata/iterate_metadata_collection.ts +4 -3
- package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +2 -2
- package/src/factories/internal/metadata/iterate_metadata_intersection.ts +5 -2
- package/src/factories/internal/metadata/iterate_metadata_object.ts +10 -2
- package/src/factories/internal/metadata/iterate_metadata_sort.ts +6 -2
- package/src/programmers/CheckerProgrammer.ts +7 -5
- package/src/programmers/FeatureProgrammer.ts +9 -6
- package/src/programmers/IsProgrammer.ts +2 -2
- package/src/programmers/RandomProgrammer.ts +3 -3
- package/src/programmers/helpers/ProtobufUtil.ts +2 -2
- package/src/programmers/helpers/PruneJoiner.ts +2 -2
- package/src/programmers/helpers/RandomJoiner.ts +2 -2
- package/src/programmers/helpers/UnionExplorer.ts +4 -4
- package/src/programmers/helpers/UnionPredicator.ts +5 -3
- package/src/programmers/http/HttpFormDataProgrammer.ts +3 -3
- package/src/programmers/http/HttpHeadersProgrammer.ts +3 -3
- package/src/programmers/http/HttpQueryProgrammer.ts +4 -4
- package/src/programmers/internal/application_union_discriminator.ts +2 -2
- package/src/programmers/internal/application_v30_alias.ts +1 -1
- package/src/programmers/internal/application_v30_object.ts +3 -3
- package/src/programmers/internal/application_v30_schema.ts +1 -1
- package/src/programmers/internal/application_v31_alias.ts +1 -1
- package/src/programmers/internal/application_v31_object.ts +3 -3
- package/src/programmers/internal/application_v31_schema.ts +1 -1
- package/src/programmers/internal/decode_union_object.ts +4 -4
- package/src/programmers/internal/feature_object_entries.ts +2 -2
- package/src/programmers/internal/llm_schema_object.ts +2 -2
- package/src/programmers/internal/llm_schema_station.ts +2 -2
- package/src/programmers/internal/prune_object_properties.ts +2 -2
- package/src/programmers/json/JsonApplicationProgrammer.ts +3 -3
- package/src/programmers/json/JsonStringifyProgrammer.ts +5 -5
- package/src/programmers/llm/LlmApplicationProgrammer.ts +4 -4
- package/src/programmers/llm/LlmSchemaProgrammer.ts +1 -1
- package/src/programmers/misc/MiscCloneProgrammer.ts +3 -3
- package/src/programmers/misc/MiscPruneProgrammer.ts +3 -3
- package/src/programmers/notations/NotationGeneralProgrammer.ts +3 -3
- package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +11 -11
- package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +8 -8
- package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +8 -8
- package/src/schemas/metadata/IMetadata.ts +4 -1
- package/src/schemas/metadata/IMetadataArray.ts +1 -2
- package/src/schemas/metadata/IMetadataComponents.ts +2 -2
- package/src/schemas/metadata/IMetadataDictionary.ts +2 -2
- package/src/schemas/metadata/IMetadataObject.ts +6 -13
- package/src/schemas/metadata/IMetadataObjectType.ts +13 -0
- package/src/schemas/metadata/IMetadataTuple.ts +1 -2
- package/src/schemas/metadata/Metadata.ts +16 -16
- package/src/schemas/metadata/MetadataArray.ts +1 -1
- package/src/schemas/metadata/MetadataComponents.ts +3 -3
- package/src/schemas/metadata/MetadataObject.ts +26 -117
- package/src/schemas/metadata/MetadataObjectType.ts +149 -0
- package/src/schemas/metadata/MetadataTuple.ts +1 -1
- package/src/transformers/TransformerError.ts +8 -7
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Metadata } from "../schemas/metadata/Metadata";
|
|
2
|
-
import {
|
|
2
|
+
import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
|
|
3
3
|
|
|
4
4
|
export namespace MetadataTypeTagSchemaFactory {
|
|
5
5
|
export const object = (props: {
|
|
6
6
|
report: (msg: string) => false;
|
|
7
|
-
object:
|
|
7
|
+
object: MetadataObjectType;
|
|
8
8
|
}): object | undefined => {
|
|
9
9
|
if (props.object.recursive) {
|
|
10
10
|
props.report(`${props.object.name} has recursive type`);
|
|
@@ -31,7 +31,7 @@ export namespace MetadataTypeTagSchemaFactory {
|
|
|
31
31
|
|
|
32
32
|
const iterate = (props: {
|
|
33
33
|
report: (message: string) => false;
|
|
34
|
-
object:
|
|
34
|
+
object: MetadataObjectType;
|
|
35
35
|
key: string;
|
|
36
36
|
metadata: Metadata;
|
|
37
37
|
}): any => {
|
|
@@ -75,7 +75,7 @@ export namespace MetadataTypeTagSchemaFactory {
|
|
|
75
75
|
} else if (props.metadata.objects.length)
|
|
76
76
|
return object({
|
|
77
77
|
report: props.report,
|
|
78
|
-
object: props.metadata.objects[0]
|
|
78
|
+
object: props.metadata.objects[0]!.type,
|
|
79
79
|
});
|
|
80
80
|
else props.report(`${props.object.name}.${props.key} has non-literal type`);
|
|
81
81
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
|
|
3
3
|
import { Metadata } from "../schemas/metadata/Metadata";
|
|
4
|
-
import {
|
|
4
|
+
import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
|
|
5
5
|
|
|
6
6
|
import { ProtobufUtil } from "../programmers/helpers/ProtobufUtil";
|
|
7
7
|
|
|
@@ -53,7 +53,7 @@ export namespace ProtobufFactory {
|
|
|
53
53
|
const onlyObject: boolean =
|
|
54
54
|
meta.size() === 1 &&
|
|
55
55
|
meta.objects.length === 1 &&
|
|
56
|
-
meta.objects[0]!.properties.every((p) => p.key.isSoleLiteral()) &&
|
|
56
|
+
meta.objects[0]!.type.properties.every((p) => p.key.isSoleLiteral()) &&
|
|
57
57
|
meta.isRequired() === true &&
|
|
58
58
|
meta.nullable === false;
|
|
59
59
|
if (onlyObject === false)
|
|
@@ -133,7 +133,7 @@ export namespace ProtobufFactory {
|
|
|
133
133
|
a.type.value.maps.length ||
|
|
134
134
|
(a.type.value.objects.length &&
|
|
135
135
|
a.type.value.objects.some(
|
|
136
|
-
(o) => ProtobufUtil.isStaticObject(o) === false,
|
|
136
|
+
(o) => ProtobufUtil.isStaticObject(o.type) === false,
|
|
137
137
|
)),
|
|
138
138
|
)
|
|
139
139
|
)
|
|
@@ -147,7 +147,7 @@ export namespace ProtobufFactory {
|
|
|
147
147
|
// EMPTY PROPERTY
|
|
148
148
|
if (
|
|
149
149
|
meta.objects.length &&
|
|
150
|
-
meta.objects.some((obj) => obj.properties.length === 0)
|
|
150
|
+
meta.objects.some((obj) => obj.type.properties.length === 0)
|
|
151
151
|
)
|
|
152
152
|
noSupport("empty object type");
|
|
153
153
|
// MULTIPLE DYNAMIC KEY TYPED PROPERTIES
|
|
@@ -155,7 +155,7 @@ export namespace ProtobufFactory {
|
|
|
155
155
|
meta.objects.length &&
|
|
156
156
|
meta.objects.some(
|
|
157
157
|
(obj) =>
|
|
158
|
-
obj.properties.filter((p) => !p.key.isSoleLiteral()).length > 1,
|
|
158
|
+
obj.type.properties.filter((p) => !p.key.isSoleLiteral()).length > 1,
|
|
159
159
|
)
|
|
160
160
|
)
|
|
161
161
|
noSupport(
|
|
@@ -166,8 +166,8 @@ export namespace ProtobufFactory {
|
|
|
166
166
|
meta.objects.length &&
|
|
167
167
|
meta.objects.some(
|
|
168
168
|
(obj) =>
|
|
169
|
-
obj.properties.some((p) => p.key.isSoleLiteral()) &&
|
|
170
|
-
obj.properties.some((p) => !p.key.isSoleLiteral()),
|
|
169
|
+
obj.type.properties.some((p) => p.key.isSoleLiteral()) &&
|
|
170
|
+
obj.type.properties.some((p) => !p.key.isSoleLiteral()),
|
|
171
171
|
)
|
|
172
172
|
)
|
|
173
173
|
noSupport(
|
|
@@ -176,15 +176,15 @@ export namespace ProtobufFactory {
|
|
|
176
176
|
// DYNAMIC OBJECT, BUT PROPERTY VALUE TYPE IS ARRAY
|
|
177
177
|
if (
|
|
178
178
|
meta.objects.length &&
|
|
179
|
-
isDynamicObject(meta.objects[0]
|
|
180
|
-
meta.objects[0]!.properties.some((p) => !!p.value.arrays.length)
|
|
179
|
+
isDynamicObject(meta.objects[0]!.type) &&
|
|
180
|
+
meta.objects[0]!.type.properties.some((p) => !!p.value.arrays.length)
|
|
181
181
|
)
|
|
182
182
|
noSupport("dynamic object with array value type");
|
|
183
|
-
// UNION WITH DYNAMIC
|
|
183
|
+
// UNION WITH DYNAMIC OBJECTa
|
|
184
184
|
if (
|
|
185
185
|
meta.size() > 1 &&
|
|
186
186
|
meta.objects.length &&
|
|
187
|
-
isDynamicObject(meta.objects[0]
|
|
187
|
+
isDynamicObject(meta.objects[0]!.type)
|
|
188
188
|
)
|
|
189
189
|
noSupport("union type with dynamic object type");
|
|
190
190
|
// UNION IN DYNAMIC PROPERTY VALUE
|
|
@@ -192,8 +192,8 @@ export namespace ProtobufFactory {
|
|
|
192
192
|
meta.objects.length &&
|
|
193
193
|
meta.objects.some(
|
|
194
194
|
(obj) =>
|
|
195
|
-
isDynamicObject(obj) &&
|
|
196
|
-
obj.properties.some((p) => ProtobufUtil.isUnion(p.value)),
|
|
195
|
+
isDynamicObject(obj.type) &&
|
|
196
|
+
obj.type.properties.some((p) => ProtobufUtil.isUnion(p.value)),
|
|
197
197
|
)
|
|
198
198
|
)
|
|
199
199
|
noSupport("union type in dynamic property");
|
|
@@ -231,7 +231,7 @@ export namespace ProtobufFactory {
|
|
|
231
231
|
};
|
|
232
232
|
}
|
|
233
233
|
|
|
234
|
-
const isDynamicObject = (obj:
|
|
234
|
+
const isDynamicObject = (obj: MetadataObjectType): boolean =>
|
|
235
235
|
obj.properties[0]!.key.isSoleLiteral() === false;
|
|
236
236
|
|
|
237
237
|
const BANNED_NATIVE_TYPES: Map<string, string | null> = new Map([
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
|
|
3
3
|
import { Metadata } from "../../../schemas/metadata/Metadata";
|
|
4
|
-
import {
|
|
4
|
+
import { MetadataObjectType } from "../../../schemas/metadata/MetadataObjectType";
|
|
5
5
|
import { MetadataProperty } from "../../../schemas/metadata/MetadataProperty";
|
|
6
6
|
|
|
7
7
|
import { Writable } from "../../../typings/Writable";
|
|
@@ -16,7 +16,7 @@ import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
|
|
|
16
16
|
|
|
17
17
|
export const emplace_metadata_object = (
|
|
18
18
|
props: IMetadataIteratorProps,
|
|
19
|
-
):
|
|
19
|
+
): MetadataObjectType => {
|
|
20
20
|
// EMPLACE OBJECT
|
|
21
21
|
const [obj, newbie] = props.collection.emplace(props.checker, props.type);
|
|
22
22
|
ArrayUtil.add(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Metadata } from "../../../schemas/metadata/Metadata";
|
|
2
2
|
import { MetadataArrayType } from "../../../schemas/metadata/MetadataArrayType";
|
|
3
|
-
import {
|
|
3
|
+
import { MetadataObjectType } from "../../../schemas/metadata/MetadataObjectType";
|
|
4
4
|
import { MetadataTupleType } from "../../../schemas/metadata/MetadataTupleType";
|
|
5
5
|
|
|
6
6
|
import { MetadataCollection } from "../../MetadataCollection";
|
|
@@ -114,7 +114,7 @@ const isTupleRecursive = (props: {
|
|
|
114
114
|
|
|
115
115
|
const isObjectRecursive = (props: {
|
|
116
116
|
visited: Set<Metadata>;
|
|
117
|
-
object:
|
|
117
|
+
object: MetadataObjectType;
|
|
118
118
|
metadata: Metadata;
|
|
119
119
|
}): boolean => {
|
|
120
120
|
if (props.visited.has(props.metadata)) return false;
|
|
@@ -128,7 +128,8 @@ const isObjectRecursive = (props: {
|
|
|
128
128
|
return (
|
|
129
129
|
props.metadata.objects.some(
|
|
130
130
|
(o) =>
|
|
131
|
-
props.object === o ||
|
|
131
|
+
props.object === o.type ||
|
|
132
|
+
o.type.properties.some((prop) => next(prop.value)),
|
|
132
133
|
) ||
|
|
133
134
|
props.metadata.aliases.some((alias) => next(alias.value)) ||
|
|
134
135
|
props.metadata.arrays.some(
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MetadataObjectType } from "../../../schemas/metadata/MetadataObjectType";
|
|
2
2
|
|
|
3
3
|
import { MetadataCommentTagFactory } from "../../MetadataCommentTagFactory";
|
|
4
4
|
import { MetadataFactory } from "../../MetadataFactory";
|
|
5
5
|
|
|
6
6
|
export const iterate_metadata_comment_tags = (props: {
|
|
7
7
|
errors: MetadataFactory.IError[];
|
|
8
|
-
object:
|
|
8
|
+
object: MetadataObjectType;
|
|
9
9
|
}) => {
|
|
10
10
|
if (props.object.tagged_ === true) return;
|
|
11
11
|
props.object.tagged_ = true;
|
|
@@ -99,7 +99,7 @@ export const iterate_metadata_intersection = (
|
|
|
99
99
|
c.isRequired() === true &&
|
|
100
100
|
c.objects.length &&
|
|
101
101
|
c.objects.length === c.size() &&
|
|
102
|
-
c.objects.every((o) => o.properties.every((p) => p.value.optional)),
|
|
102
|
+
c.objects.every((o) => o.type.properties.every((p) => p.value.optional)),
|
|
103
103
|
);
|
|
104
104
|
const arrays: Set<string> = new Set(
|
|
105
105
|
individuals.map(([c]) => c.arrays.map((a) => a.type.name)).flat(),
|
|
@@ -188,7 +188,10 @@ export const iterate_metadata_intersection = (
|
|
|
188
188
|
const tags: IMetadataTypeTag[] = MetadataTypeTagFactory.analyze({
|
|
189
189
|
errors: props.errors,
|
|
190
190
|
type: target,
|
|
191
|
-
objects: objects
|
|
191
|
+
objects: objects
|
|
192
|
+
.map((om) => om.objects)
|
|
193
|
+
.flat()
|
|
194
|
+
.map((om) => om.type),
|
|
192
195
|
explore: props.explore,
|
|
193
196
|
});
|
|
194
197
|
if (tags.length)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
|
|
3
3
|
import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
|
|
4
|
+
import { MetadataObjectType } from "../../../schemas/metadata/MetadataObjectType";
|
|
4
5
|
|
|
5
6
|
import { ArrayUtil } from "../../../utils/ArrayUtil";
|
|
6
7
|
|
|
@@ -21,7 +22,14 @@ export const iterate_metadata_object = (
|
|
|
21
22
|
return false;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
|
-
const obj:
|
|
25
|
-
ArrayUtil.add(
|
|
25
|
+
const obj: MetadataObjectType = emplace_metadata_object(props);
|
|
26
|
+
ArrayUtil.add(
|
|
27
|
+
props.metadata.objects,
|
|
28
|
+
MetadataObject.create({
|
|
29
|
+
type: obj,
|
|
30
|
+
tags: [],
|
|
31
|
+
}),
|
|
32
|
+
(elem) => elem.type.name === obj.name,
|
|
33
|
+
);
|
|
26
34
|
return true;
|
|
27
35
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Metadata } from "../../../schemas/metadata/Metadata";
|
|
2
|
-
import {
|
|
2
|
+
import { MetadataObjectType } from "../../../schemas/metadata/MetadataObjectType";
|
|
3
3
|
|
|
4
4
|
import { MetadataCollection } from "../../MetadataCollection";
|
|
5
5
|
|
|
@@ -45,7 +45,11 @@ const iterate = (props: {
|
|
|
45
45
|
// SORT OBJECTS
|
|
46
46
|
if (props.metadata.objects.length > 1) {
|
|
47
47
|
props.metadata.objects.sort((x, y) =>
|
|
48
|
-
|
|
48
|
+
MetadataObjectType.covers(x.type, y.type)
|
|
49
|
+
? -1
|
|
50
|
+
: MetadataObjectType.covers(y.type, x.type)
|
|
51
|
+
? 1
|
|
52
|
+
: 0,
|
|
49
53
|
);
|
|
50
54
|
props.metadata.union_index = props.collection.getUnionIndex(props.metadata);
|
|
51
55
|
}
|
|
@@ -11,7 +11,7 @@ import { ValueFactory } from "../factories/ValueFactory";
|
|
|
11
11
|
import { Metadata } from "../schemas/metadata/Metadata";
|
|
12
12
|
import { MetadataArray } from "../schemas/metadata/MetadataArray";
|
|
13
13
|
import { MetadataConstant } from "../schemas/metadata/MetadataConstant";
|
|
14
|
-
import {
|
|
14
|
+
import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
|
|
15
15
|
import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
|
|
16
16
|
import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
|
|
17
17
|
|
|
@@ -810,13 +810,15 @@ export namespace CheckerProgrammer {
|
|
|
810
810
|
head: ExpressionFactory.isObject({
|
|
811
811
|
checkNull: true,
|
|
812
812
|
checkArray: props.metadata.objects.some((obj) =>
|
|
813
|
-
obj.properties.every(
|
|
813
|
+
obj.type.properties.every(
|
|
814
814
|
(prop) => !prop.key.isSoleLiteral() || !prop.value.isRequired(),
|
|
815
815
|
),
|
|
816
816
|
),
|
|
817
817
|
input: props.input,
|
|
818
818
|
}),
|
|
819
|
-
expected: props.metadata.objects
|
|
819
|
+
expected: props.metadata.objects
|
|
820
|
+
.map((obj) => obj.type.name)
|
|
821
|
+
.join(" | "),
|
|
820
822
|
body: explore_objects({
|
|
821
823
|
config: props.config,
|
|
822
824
|
functor: props.functor,
|
|
@@ -944,7 +946,7 @@ export namespace CheckerProgrammer {
|
|
|
944
946
|
export const decode_object = (props: {
|
|
945
947
|
config: IConfig;
|
|
946
948
|
functor: FunctionProgrammer;
|
|
947
|
-
object:
|
|
949
|
+
object: MetadataObjectType;
|
|
948
950
|
input: ts.Expression;
|
|
949
951
|
explore: IExplore;
|
|
950
952
|
}) => {
|
|
@@ -1581,7 +1583,7 @@ export namespace CheckerProgrammer {
|
|
|
1581
1583
|
? decode_object({
|
|
1582
1584
|
config: props.config,
|
|
1583
1585
|
functor: props.functor,
|
|
1584
|
-
object: props.metadata.objects[0]
|
|
1586
|
+
object: props.metadata.objects[0]!.type,
|
|
1585
1587
|
input: props.input,
|
|
1586
1588
|
explore: props.explore,
|
|
1587
1589
|
})
|
|
@@ -8,7 +8,7 @@ import { ValueFactory } from "../factories/ValueFactory";
|
|
|
8
8
|
|
|
9
9
|
import { Metadata } from "../schemas/metadata/Metadata";
|
|
10
10
|
import { MetadataArray } from "../schemas/metadata/MetadataArray";
|
|
11
|
-
import {
|
|
11
|
+
import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
|
|
12
12
|
|
|
13
13
|
import { ITypiaContext } from "../transformers/ITypiaContext";
|
|
14
14
|
|
|
@@ -94,7 +94,7 @@ export namespace FeatureProgrammer {
|
|
|
94
94
|
*/
|
|
95
95
|
decoder: (props: {
|
|
96
96
|
input: ts.Expression;
|
|
97
|
-
object:
|
|
97
|
+
object: MetadataObjectType;
|
|
98
98
|
explore: IExplore;
|
|
99
99
|
}) => ts.Expression;
|
|
100
100
|
|
|
@@ -104,7 +104,7 @@ export namespace FeatureProgrammer {
|
|
|
104
104
|
joiner(props: {
|
|
105
105
|
entries: IExpressionEntry<Output>[];
|
|
106
106
|
input?: ts.Expression;
|
|
107
|
-
object?:
|
|
107
|
+
object?: MetadataObjectType;
|
|
108
108
|
}): ts.ConciseBody;
|
|
109
109
|
|
|
110
110
|
/**
|
|
@@ -114,7 +114,7 @@ export namespace FeatureProgrammer {
|
|
|
114
114
|
* the `decoder` function of the specified object type.
|
|
115
115
|
*/
|
|
116
116
|
unionizer: (props: {
|
|
117
|
-
objects:
|
|
117
|
+
objects: MetadataObjectType[];
|
|
118
118
|
input: ts.Expression;
|
|
119
119
|
explore: IExplore;
|
|
120
120
|
}) => ts.Expression;
|
|
@@ -440,7 +440,10 @@ export namespace FeatureProgrammer {
|
|
|
440
440
|
}),
|
|
441
441
|
);
|
|
442
442
|
|
|
443
|
-
const write_union = (props: {
|
|
443
|
+
const write_union = (props: {
|
|
444
|
+
config: IConfig;
|
|
445
|
+
objects: MetadataObjectType[];
|
|
446
|
+
}) =>
|
|
444
447
|
ts.factory.createArrowFunction(
|
|
445
448
|
undefined,
|
|
446
449
|
undefined,
|
|
@@ -521,7 +524,7 @@ export namespace FeatureProgrammer {
|
|
|
521
524
|
export const decode_object = (props: {
|
|
522
525
|
config: Pick<IConfig, "trace" | "path" | "prefix">;
|
|
523
526
|
functor: FunctionProgrammer;
|
|
524
|
-
object:
|
|
527
|
+
object: MetadataObjectType;
|
|
525
528
|
input: ts.Expression;
|
|
526
529
|
explore: IExplore;
|
|
527
530
|
}) =>
|
|
@@ -6,7 +6,7 @@ import { MetadataCollection } from "../factories/MetadataCollection";
|
|
|
6
6
|
import { ValueFactory } from "../factories/ValueFactory";
|
|
7
7
|
|
|
8
8
|
import { Metadata } from "../schemas/metadata/Metadata";
|
|
9
|
-
import {
|
|
9
|
+
import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
|
|
10
10
|
|
|
11
11
|
import { IProgrammerProps } from "../transformers/IProgrammerProps";
|
|
12
12
|
import { ITypiaContext } from "../transformers/ITypiaContext";
|
|
@@ -237,7 +237,7 @@ export namespace IsProgrammer {
|
|
|
237
237
|
export const decode_object = (props: {
|
|
238
238
|
context: ITypiaContext;
|
|
239
239
|
functor: FunctionProgrammer;
|
|
240
|
-
object:
|
|
240
|
+
object: MetadataObjectType;
|
|
241
241
|
input: ts.Expression;
|
|
242
242
|
explore: FeatureProgrammer.IExplore;
|
|
243
243
|
}) =>
|
|
@@ -15,7 +15,7 @@ import { Metadata } from "../schemas/metadata/Metadata";
|
|
|
15
15
|
import { MetadataArray } from "../schemas/metadata/MetadataArray";
|
|
16
16
|
import { MetadataArrayType } from "../schemas/metadata/MetadataArrayType";
|
|
17
17
|
import { MetadataAtomic } from "../schemas/metadata/MetadataAtomic";
|
|
18
|
-
import {
|
|
18
|
+
import { MetadataObjectType } from "../schemas/metadata/MetadataObjectType";
|
|
19
19
|
import { MetadataTemplate } from "../schemas/metadata/MetadataTemplate";
|
|
20
20
|
import { MetadataTuple } from "../schemas/metadata/MetadataTuple";
|
|
21
21
|
import { MetadataTupleType } from "../schemas/metadata/MetadataTupleType";
|
|
@@ -408,7 +408,7 @@ export namespace RandomProgrammer {
|
|
|
408
408
|
expressions.push(
|
|
409
409
|
decode_object({
|
|
410
410
|
...props,
|
|
411
|
-
object,
|
|
411
|
+
object: object.type,
|
|
412
412
|
}),
|
|
413
413
|
);
|
|
414
414
|
for (const name of props.metadata.natives)
|
|
@@ -661,7 +661,7 @@ export namespace RandomProgrammer {
|
|
|
661
661
|
const decode_object = (props: {
|
|
662
662
|
functor: FunctionProgrammer;
|
|
663
663
|
explore: IExplore;
|
|
664
|
-
object:
|
|
664
|
+
object: MetadataObjectType;
|
|
665
665
|
}) =>
|
|
666
666
|
ts.factory.createCallExpression(
|
|
667
667
|
ts.factory.createIdentifier(
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { IMetadataTypeTag } from "../../schemas/metadata/IMetadataTypeTag";
|
|
2
2
|
import { Metadata } from "../../schemas/metadata/Metadata";
|
|
3
|
-
import {
|
|
3
|
+
import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
|
|
4
4
|
|
|
5
5
|
import { ProtobufAtomic } from "../../typings/ProtobufAtomic";
|
|
6
6
|
|
|
7
7
|
export namespace ProtobufUtil {
|
|
8
|
-
export const isStaticObject = (obj:
|
|
8
|
+
export const isStaticObject = (obj: MetadataObjectType): boolean =>
|
|
9
9
|
obj.properties.length >= 1 &&
|
|
10
10
|
obj.properties.every((p) => p.key.isSoleLiteral());
|
|
11
11
|
|
|
@@ -2,7 +2,7 @@ import ts from "typescript";
|
|
|
2
2
|
|
|
3
3
|
import { IdentifierFactory } from "../../factories/IdentifierFactory";
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
|
|
6
6
|
|
|
7
7
|
import { metadata_to_pattern } from "../internal/metadata_to_pattern";
|
|
8
8
|
import { prune_object_properties } from "../internal/prune_object_properties";
|
|
@@ -12,7 +12,7 @@ export namespace PruneJoiner {
|
|
|
12
12
|
export const object = (props: {
|
|
13
13
|
input: ts.Expression;
|
|
14
14
|
entries: IExpressionEntry[];
|
|
15
|
-
object:
|
|
15
|
+
object: MetadataObjectType;
|
|
16
16
|
}): ts.ConciseBody => {
|
|
17
17
|
// PREPARE ASSETS
|
|
18
18
|
const regular = props.entries.filter((entry) => entry.key.isSoleLiteral());
|
|
@@ -8,7 +8,7 @@ import { LiteralFactory } from "../../factories/LiteralFactory";
|
|
|
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 {
|
|
11
|
+
import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
|
|
12
12
|
import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
|
|
13
13
|
import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
|
|
14
14
|
import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
|
|
@@ -88,7 +88,7 @@ export namespace RandomJoiner {
|
|
|
88
88
|
|
|
89
89
|
export const object = (props: {
|
|
90
90
|
decode: Decoder;
|
|
91
|
-
object:
|
|
91
|
+
object: MetadataObjectType;
|
|
92
92
|
}): ts.ConciseBody => {
|
|
93
93
|
if (props.object.properties.length === 0) return LiteralFactory.write({});
|
|
94
94
|
|
|
@@ -6,7 +6,7 @@ import { IdentifierFactory } from "../../factories/IdentifierFactory";
|
|
|
6
6
|
import { Metadata } from "../../schemas/metadata/Metadata";
|
|
7
7
|
import { MetadataArray } from "../../schemas/metadata/MetadataArray";
|
|
8
8
|
import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
|
|
9
|
-
import {
|
|
9
|
+
import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
|
|
10
10
|
import { MetadataTuple } from "../../schemas/metadata/MetadataTuple";
|
|
11
11
|
import { MetadataTupleType } from "../../schemas/metadata/MetadataTupleType";
|
|
12
12
|
|
|
@@ -22,7 +22,7 @@ export namespace UnionExplorer {
|
|
|
22
22
|
explore: FeatureProgrammer.IExplore;
|
|
23
23
|
}): ts.Expression;
|
|
24
24
|
}
|
|
25
|
-
export type ObjectCombiner = Decoder<
|
|
25
|
+
export type ObjectCombiner = Decoder<MetadataObjectType[]>;
|
|
26
26
|
|
|
27
27
|
/* -----------------------------------------------------------
|
|
28
28
|
OBJECT
|
|
@@ -30,7 +30,7 @@ export namespace UnionExplorer {
|
|
|
30
30
|
export const object = (props: {
|
|
31
31
|
config: FeatureProgrammer.IConfig;
|
|
32
32
|
level?: number;
|
|
33
|
-
objects:
|
|
33
|
+
objects: MetadataObjectType[];
|
|
34
34
|
input: ts.Expression;
|
|
35
35
|
explore: FeatureProgrammer.IExplore;
|
|
36
36
|
}): ts.Expression => {
|
|
@@ -64,7 +64,7 @@ export namespace UnionExplorer {
|
|
|
64
64
|
})
|
|
65
65
|
: condition;
|
|
66
66
|
}
|
|
67
|
-
const remained:
|
|
67
|
+
const remained: MetadataObjectType[] = props.objects.filter(
|
|
68
68
|
(t) => specList.find((s) => s.object === t) === undefined,
|
|
69
69
|
);
|
|
70
70
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Metadata } from "../../schemas/metadata/Metadata";
|
|
2
|
-
import {
|
|
2
|
+
import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
|
|
3
3
|
import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
|
|
4
4
|
|
|
5
5
|
import { ArrayUtil } from "../../utils/ArrayUtil";
|
|
@@ -8,12 +8,14 @@ import { MapUtil } from "../../utils/MapUtil";
|
|
|
8
8
|
export namespace UnionPredicator {
|
|
9
9
|
export interface ISpecialized {
|
|
10
10
|
index: number;
|
|
11
|
-
object:
|
|
11
|
+
object: MetadataObjectType;
|
|
12
12
|
property: MetadataProperty;
|
|
13
13
|
neighbour: boolean;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export const object = (
|
|
16
|
+
export const object = (
|
|
17
|
+
objects: MetadataObjectType[],
|
|
18
|
+
): Array<ISpecialized> => {
|
|
17
19
|
// PROPERTY MATRIX
|
|
18
20
|
const matrix: Map<string, Array<MetadataProperty | null>> = new Map();
|
|
19
21
|
for (const obj of objects)
|
|
@@ -8,7 +8,7 @@ import { TypeFactory } from "../../factories/TypeFactory";
|
|
|
8
8
|
|
|
9
9
|
import { Metadata } from "../../schemas/metadata/Metadata";
|
|
10
10
|
import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
|
|
11
|
-
import {
|
|
11
|
+
import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
|
|
12
12
|
import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
|
|
13
13
|
|
|
14
14
|
import { IProgrammerProps } from "../../transformers/IProgrammerProps";
|
|
@@ -52,7 +52,7 @@ export namespace HttpFormDataProgrammer {
|
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
// DO TRANSFORM
|
|
55
|
-
const object:
|
|
55
|
+
const object: MetadataObjectType = result.data.objects[0]!.type;
|
|
56
56
|
const statements: ts.Statement[] = decode_object({
|
|
57
57
|
context: props.context,
|
|
58
58
|
object,
|
|
@@ -160,7 +160,7 @@ export namespace HttpFormDataProgrammer {
|
|
|
160
160
|
|
|
161
161
|
const decode_object = (props: {
|
|
162
162
|
context: ITypiaContext;
|
|
163
|
-
object:
|
|
163
|
+
object: MetadataObjectType;
|
|
164
164
|
}): ts.Statement[] => {
|
|
165
165
|
// const input: ts.Identifier = ts.factory.createIdentifier("input");
|
|
166
166
|
const output: ts.Identifier = ts.factory.createIdentifier("output");
|
|
@@ -9,7 +9,7 @@ import { TypeFactory } from "../../factories/TypeFactory";
|
|
|
9
9
|
|
|
10
10
|
import { Metadata } from "../../schemas/metadata/Metadata";
|
|
11
11
|
import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
|
|
12
|
-
import {
|
|
12
|
+
import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
|
|
13
13
|
import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
|
|
14
14
|
|
|
15
15
|
import { IProgrammerProps } from "../../transformers/IProgrammerProps";
|
|
@@ -56,7 +56,7 @@ export namespace HttpHeadersProgrammer {
|
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
// DO TRANSFORM
|
|
59
|
-
const object:
|
|
59
|
+
const object: MetadataObjectType = result.data.objects[0]!.type;
|
|
60
60
|
const statements: ts.Statement[] = decode_object({
|
|
61
61
|
context: props.context,
|
|
62
62
|
object,
|
|
@@ -204,7 +204,7 @@ export namespace HttpHeadersProgrammer {
|
|
|
204
204
|
|
|
205
205
|
const decode_object = (props: {
|
|
206
206
|
context: ITypiaContext;
|
|
207
|
-
object:
|
|
207
|
+
object: MetadataObjectType;
|
|
208
208
|
}): ts.Statement[] => {
|
|
209
209
|
const output: ts.Identifier = ts.factory.createIdentifier("output");
|
|
210
210
|
const optionals: string[] = [];
|
|
@@ -8,7 +8,7 @@ import { TypeFactory } from "../../factories/TypeFactory";
|
|
|
8
8
|
|
|
9
9
|
import { Metadata } from "../../schemas/metadata/Metadata";
|
|
10
10
|
import { MetadataArrayType } from "../../schemas/metadata/MetadataArrayType";
|
|
11
|
-
import {
|
|
11
|
+
import { MetadataObjectType } from "../../schemas/metadata/MetadataObjectType";
|
|
12
12
|
import { MetadataProperty } from "../../schemas/metadata/MetadataProperty";
|
|
13
13
|
|
|
14
14
|
import { IProgrammerProps } from "../../transformers/IProgrammerProps";
|
|
@@ -60,7 +60,7 @@ export namespace HttpQueryProgrammer {
|
|
|
60
60
|
});
|
|
61
61
|
|
|
62
62
|
// DO TRANSFORM
|
|
63
|
-
const object:
|
|
63
|
+
const object: MetadataObjectType = result.data.objects[0]!.type;
|
|
64
64
|
const statements: ts.Statement[] = decode_object({
|
|
65
65
|
context: props.context,
|
|
66
66
|
object,
|
|
@@ -130,7 +130,7 @@ export namespace HttpQueryProgrammer {
|
|
|
130
130
|
const everyPropertiesAreOptional: boolean =
|
|
131
131
|
meta.size() === 1 &&
|
|
132
132
|
meta.objects.length === 1 &&
|
|
133
|
-
meta.objects[0]!.properties.every(
|
|
133
|
+
meta.objects[0]!.type.properties.every(
|
|
134
134
|
(p) => p.value.isRequired() === false,
|
|
135
135
|
);
|
|
136
136
|
if (everyPropertiesAreOptional === false)
|
|
@@ -179,7 +179,7 @@ export namespace HttpQueryProgrammer {
|
|
|
179
179
|
|
|
180
180
|
const decode_object = (props: {
|
|
181
181
|
context: ITypiaContext;
|
|
182
|
-
object:
|
|
182
|
+
object: MetadataObjectType;
|
|
183
183
|
}): ts.Statement[] => {
|
|
184
184
|
const input: ts.Identifier = ts.factory.createIdentifier("input");
|
|
185
185
|
const output: ts.Identifier = ts.factory.createIdentifier("output");
|
|
@@ -10,11 +10,11 @@ export const application_union_discriminator = (
|
|
|
10
10
|
if (
|
|
11
11
|
metadata.size() === 0 ||
|
|
12
12
|
metadata.size() !== metadata.objects.length ||
|
|
13
|
-
metadata.objects.some((o) => o.isLiteral()) === true
|
|
13
|
+
metadata.objects.some((o) => o.type.isLiteral()) === true
|
|
14
14
|
)
|
|
15
15
|
return undefined;
|
|
16
16
|
const specialized: UnionPredicator.ISpecialized[] = UnionPredicator.object(
|
|
17
|
-
metadata.objects,
|
|
17
|
+
metadata.objects.map((o) => o.type),
|
|
18
18
|
);
|
|
19
19
|
const meet: boolean =
|
|
20
20
|
specialized.length === metadata.objects.length &&
|
|
@@ -20,7 +20,7 @@ export const application_v30_alias = <BlockNever extends boolean>(props: {
|
|
|
20
20
|
}): OpenApiV3.IJsonSchema.IReference => {
|
|
21
21
|
if (props.alias.value.size() === 1 && props.alias.value.objects.length === 1)
|
|
22
22
|
return application_v30_object({
|
|
23
|
-
object: props.alias.value.objects[0]
|
|
23
|
+
object: props.alias.value.objects[0]!.type,
|
|
24
24
|
components: props.components,
|
|
25
25
|
nullable: props.nullable,
|
|
26
26
|
}) as OpenApiV3.IJsonSchema.IReference;
|