typia 4.1.7 → 4.1.8-dev.20230726

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 (161) hide show
  1. package/lib/metadata/Metadata.js +4 -2
  2. package/lib/metadata/Metadata.js.map +1 -1
  3. package/package.json +2 -2
  4. package/src/factories/MetadataCollection.ts +255 -255
  5. package/src/factories/MetadataFactory.ts +30 -30
  6. package/src/factories/MetadataTagFactory.ts +355 -355
  7. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  8. package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
  9. package/src/factories/internal/metadata/emplace_metadata_alias.ts +40 -40
  10. package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -34
  11. package/src/factories/internal/metadata/emplace_metadata_object.ts +136 -136
  12. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -50
  13. package/src/factories/internal/metadata/explore_metadata.ts +40 -40
  14. package/src/factories/internal/metadata/iterate_metadata.ts +81 -81
  15. package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
  16. package/src/factories/internal/metadata/iterate_metadata_array.ts +24 -24
  17. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  18. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  19. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  20. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  21. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +83 -83
  22. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  23. package/src/factories/internal/metadata/iterate_metadata_native.ts +219 -219
  24. package/src/factories/internal/metadata/iterate_metadata_object.ts +43 -43
  25. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  26. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  27. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  28. package/src/factories/internal/metadata/iterate_metadata_tag.ts +31 -31
  29. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  30. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +24 -24
  31. package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
  32. package/src/functional/$number.ts +12 -12
  33. package/src/metadata/ICommentTag.ts +4 -4
  34. package/src/metadata/IJsDocTagInfo.ts +10 -10
  35. package/src/metadata/IMetadata.ts +28 -28
  36. package/src/metadata/IMetadataAlias.ts +14 -14
  37. package/src/metadata/IMetadataApplication.ts +7 -7
  38. package/src/metadata/IMetadataArray.ts +10 -10
  39. package/src/metadata/IMetadataCollection.ts +11 -11
  40. package/src/metadata/IMetadataConstant.ts +16 -16
  41. package/src/metadata/IMetadataDictionary.ts +14 -14
  42. package/src/metadata/IMetadataEntry.ts +6 -6
  43. package/src/metadata/IMetadataObject.ts +18 -18
  44. package/src/metadata/IMetadataProperty.ts +11 -11
  45. package/src/metadata/IMetadataResolved.ts +6 -6
  46. package/src/metadata/IMetadataTag.ts +105 -105
  47. package/src/metadata/IMetadataTuple.ts +10 -10
  48. package/src/metadata/Metadata.ts +605 -603
  49. package/src/metadata/MetadataAlias.ts +66 -66
  50. package/src/metadata/MetadataArray.ts +55 -55
  51. package/src/metadata/MetadataConstant.ts +3 -3
  52. package/src/metadata/MetadataObject.ts +129 -129
  53. package/src/metadata/MetadataProperty.ts +64 -64
  54. package/src/metadata/MetadataResolved.ts +51 -51
  55. package/src/metadata/MetadataTuple.ts +53 -53
  56. package/src/module.ts +2038 -2038
  57. package/src/programmers/ApplicationProgrammer.ts +47 -47
  58. package/src/programmers/AssertCloneProgrammer.ts +71 -71
  59. package/src/programmers/AssertParseProgrammer.ts +66 -66
  60. package/src/programmers/AssertPruneProgrammer.ts +68 -68
  61. package/src/programmers/AssertStringifyProgrammer.ts +66 -66
  62. package/src/programmers/CheckerProgrammer.ts +1182 -1182
  63. package/src/programmers/CloneProgrammer.ts +587 -587
  64. package/src/programmers/FeatureProgrammer.ts +495 -495
  65. package/src/programmers/IsCloneProgrammer.ts +78 -78
  66. package/src/programmers/IsParseProgrammer.ts +72 -72
  67. package/src/programmers/IsProgrammer.ts +239 -239
  68. package/src/programmers/IsPruneProgrammer.ts +73 -73
  69. package/src/programmers/IsStringifyProgrammer.ts +76 -76
  70. package/src/programmers/LiteralsProgrammer.ts +63 -63
  71. package/src/programmers/PruneProgrammer.ts +542 -542
  72. package/src/programmers/RandomProgrammer.ts +581 -581
  73. package/src/programmers/StringifyProgrammer.ts +978 -978
  74. package/src/programmers/ValidateCloneProgrammer.ts +85 -85
  75. package/src/programmers/ValidateParseProgrammer.ts +70 -70
  76. package/src/programmers/ValidatePruneProgrammer.ts +78 -78
  77. package/src/programmers/ValidateStringifyProgrammer.ts +84 -84
  78. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  79. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  80. package/src/programmers/helpers/PruneJoiner.ts +143 -143
  81. package/src/programmers/helpers/RandomJoiner.ts +173 -173
  82. package/src/programmers/helpers/RandomRanger.ts +216 -216
  83. package/src/programmers/helpers/StringifyPredicator.ts +13 -13
  84. package/src/programmers/helpers/UnionExplorer.ts +301 -301
  85. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  86. package/src/programmers/internal/application_alias.ts +66 -66
  87. package/src/programmers/internal/application_array.ts +30 -30
  88. package/src/programmers/internal/application_constant.ts +26 -26
  89. package/src/programmers/internal/application_default.ts +17 -17
  90. package/src/programmers/internal/application_default_string.ts +33 -33
  91. package/src/programmers/internal/application_native.ts +39 -39
  92. package/src/programmers/internal/application_number.ts +74 -74
  93. package/src/programmers/internal/application_object.ts +162 -162
  94. package/src/programmers/internal/application_resolved.ts +55 -55
  95. package/src/programmers/internal/application_schema.ts +157 -157
  96. package/src/programmers/internal/application_string.ts +44 -44
  97. package/src/programmers/internal/application_templates.ts +25 -25
  98. package/src/programmers/internal/application_tuple.ts +57 -57
  99. package/src/programmers/internal/check_array.ts +30 -30
  100. package/src/programmers/internal/check_array_length.ts +35 -35
  101. package/src/programmers/internal/check_bigint.ts +82 -82
  102. package/src/programmers/internal/check_custom.ts +31 -31
  103. package/src/programmers/internal/check_number.ts +177 -177
  104. package/src/programmers/internal/check_string.ts +25 -25
  105. package/src/programmers/internal/check_string_tags.ts +67 -67
  106. package/src/programmers/internal/check_template.ts +56 -56
  107. package/src/programmers/internal/check_union_array_like.ts +329 -329
  108. package/src/programmers/internal/decode_union_object.ts +73 -73
  109. package/src/programmers/internal/feature_object_entries.ts +63 -63
  110. package/src/programmers/internal/get_comment_tags.ts +23 -23
  111. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  112. package/src/programmers/internal/prune_object_properties.ts +60 -60
  113. package/src/programmers/internal/random_custom.ts +29 -29
  114. package/src/programmers/internal/stringify_regular_properties.ts +83 -83
  115. package/src/programmers/internal/template_to_pattern.ts +15 -15
  116. package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -16
  117. package/src/schemas/IJsonApplication.ts +8 -8
  118. package/src/schemas/IJsonComponents.ts +33 -33
  119. package/src/schemas/IJsonSchema.ts +133 -133
  120. package/src/transformers/CallExpressionTransformer.ts +179 -179
  121. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +104 -104
  122. package/src/transformers/features/miscellaneous/AssertCloneTransformer.ts +9 -9
  123. package/src/transformers/features/miscellaneous/AssertPruneTransformer.ts +9 -9
  124. package/src/transformers/features/miscellaneous/CloneTransformer.ts +9 -9
  125. package/src/transformers/features/miscellaneous/CreateAssertCloneTransformer.ts +9 -9
  126. package/src/transformers/features/miscellaneous/CreateAssertPruneTransformer.ts +9 -9
  127. package/src/transformers/features/miscellaneous/CreateCloneTransformer.ts +9 -9
  128. package/src/transformers/features/miscellaneous/CreateIsCloneTransformer.ts +9 -9
  129. package/src/transformers/features/miscellaneous/CreateIsPruneTransformer.ts +9 -9
  130. package/src/transformers/features/miscellaneous/CreatePruneTransformer.ts +9 -9
  131. package/src/transformers/features/miscellaneous/CreateRandomTransformer.ts +39 -39
  132. package/src/transformers/features/miscellaneous/CreateValidateCloneTransformer.ts +9 -9
  133. package/src/transformers/features/miscellaneous/CreateValidatePruneTransformer.ts +9 -9
  134. package/src/transformers/features/miscellaneous/IsCloneTransformer.ts +9 -9
  135. package/src/transformers/features/miscellaneous/IsPruneTransformer.ts +9 -9
  136. package/src/transformers/features/miscellaneous/LiteralsTransformer.ts +28 -28
  137. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +53 -53
  138. package/src/transformers/features/miscellaneous/PruneTransformer.ts +9 -9
  139. package/src/transformers/features/miscellaneous/RandomTransformer.ts +42 -42
  140. package/src/transformers/features/miscellaneous/ValidateCloneTransformer.ts +9 -9
  141. package/src/transformers/features/miscellaneous/ValidatePruneTransformer.ts +9 -9
  142. package/src/transformers/features/parsers/AssertParseTransformer.ts +9 -9
  143. package/src/transformers/features/parsers/CreateAssertParseTransformer.ts +9 -9
  144. package/src/transformers/features/parsers/CreateIsParseTransformer.ts +9 -9
  145. package/src/transformers/features/parsers/CreateValidateParseTransformer.ts +9 -9
  146. package/src/transformers/features/parsers/IsParseTransformer.ts +9 -9
  147. package/src/transformers/features/parsers/ValidateParseTransformer.ts +9 -9
  148. package/src/transformers/features/stringifiers/AssertStringifyTransformer.ts +10 -10
  149. package/src/transformers/features/stringifiers/CreateAssertStringifyTransformer.ts +12 -12
  150. package/src/transformers/features/stringifiers/CreateIsStringifyTransformer.ts +9 -9
  151. package/src/transformers/features/stringifiers/CreateStringifyTransformer.ts +9 -9
  152. package/src/transformers/features/stringifiers/CreateValidateStringifyProgrammer.ts +12 -12
  153. package/src/transformers/features/stringifiers/IsStringifyTransformer.ts +9 -9
  154. package/src/transformers/features/stringifiers/StringifyTransformer.ts +9 -9
  155. package/src/transformers/features/stringifiers/ValidateStringifyTransformer.ts +10 -10
  156. package/src/transformers/features/validators/AssertTransformer.ts +11 -11
  157. package/src/transformers/features/validators/CreateAssertTransformer.ts +13 -13
  158. package/src/transformers/features/validators/CreateIsTransformer.ts +11 -11
  159. package/src/transformers/features/validators/CreateValidateTransformer.ts +13 -13
  160. package/src/transformers/features/validators/IsTransformer.ts +11 -11
  161. package/src/transformers/features/validators/ValidateTransformer.ts +11 -11
@@ -1,83 +1,83 @@
1
- import ts from "typescript";
2
-
3
- import { TemplateFactory } from "../../factories/TemplateFactory";
4
- import { ValueFactory } from "../../factories/ValueFactory";
5
-
6
- import { Metadata } from "../../metadata/Metadata";
7
-
8
- import { IExpressionEntry } from "../helpers/IExpressionEntry";
9
-
10
- /**
11
- * @internal
12
- */
13
- export const stringify_regular_properties = (
14
- regular: IExpressionEntry<ts.Expression>[],
15
- dynamic: IExpressionEntry<ts.Expression>[],
16
- ): ts.Expression[] => {
17
- const output: ts.Expression[] = [];
18
-
19
- regular.sort((x, y) => sequence(x.meta) - sequence(y.meta));
20
- regular.forEach((entry, index) => {
21
- // BASE ELEMENTS
22
- const key: string = entry.key.getSoleLiteral()!;
23
- const base: ts.Expression[] = [
24
- ts.factory.createStringLiteral(`${JSON.stringify(key)}:`),
25
- entry.expression,
26
- ];
27
- if (index !== regular.length - 1 || dynamic.length !== 0)
28
- base.push(ts.factory.createStringLiteral(`,`));
29
-
30
- const empty: boolean =
31
- (entry.meta.isRequired() === false &&
32
- entry.meta.nullable === false &&
33
- entry.meta.size() === 0) ||
34
- (entry.meta.functional &&
35
- entry.meta.nullable === false &&
36
- entry.meta.size() === 1);
37
-
38
- if (empty === true) return;
39
- else if (
40
- entry.meta.isRequired() === false ||
41
- entry.meta.functional === true ||
42
- entry.meta.any === true
43
- )
44
- output.push(
45
- ts.factory.createConditionalExpression(
46
- (() => {
47
- const conditions: ts.BinaryExpression[] = [];
48
- if (entry.meta.isRequired() === false || entry.meta.any)
49
- conditions.push(
50
- ts.factory.createStrictEquality(
51
- ts.factory.createIdentifier("undefined"),
52
- entry.input,
53
- ),
54
- );
55
- if (entry.meta.functional || entry.meta.any)
56
- conditions.push(
57
- ts.factory.createStrictEquality(
58
- ts.factory.createStringLiteral("function"),
59
- ValueFactory.TYPEOF(entry.input),
60
- ),
61
- );
62
- return conditions.length === 1
63
- ? conditions[0]!
64
- : conditions.reduce((x, y) =>
65
- ts.factory.createLogicalOr(x, y),
66
- );
67
- })(),
68
- undefined,
69
- ts.factory.createStringLiteral(""),
70
- undefined,
71
- TemplateFactory.generate(base),
72
- ),
73
- );
74
- else output.push(...base);
75
- });
76
- return output;
77
- };
78
-
79
- /**
80
- * @internal
81
- */
82
- const sequence = (meta: Metadata): number =>
83
- meta.any || !meta.isRequired() || meta.functional ? 0 : 1;
1
+ import ts from "typescript";
2
+
3
+ import { TemplateFactory } from "../../factories/TemplateFactory";
4
+ import { ValueFactory } from "../../factories/ValueFactory";
5
+
6
+ import { Metadata } from "../../metadata/Metadata";
7
+
8
+ import { IExpressionEntry } from "../helpers/IExpressionEntry";
9
+
10
+ /**
11
+ * @internal
12
+ */
13
+ export const stringify_regular_properties = (
14
+ regular: IExpressionEntry<ts.Expression>[],
15
+ dynamic: IExpressionEntry<ts.Expression>[],
16
+ ): ts.Expression[] => {
17
+ const output: ts.Expression[] = [];
18
+
19
+ regular.sort((x, y) => sequence(x.meta) - sequence(y.meta));
20
+ regular.forEach((entry, index) => {
21
+ // BASE ELEMENTS
22
+ const key: string = entry.key.getSoleLiteral()!;
23
+ const base: ts.Expression[] = [
24
+ ts.factory.createStringLiteral(`${JSON.stringify(key)}:`),
25
+ entry.expression,
26
+ ];
27
+ if (index !== regular.length - 1 || dynamic.length !== 0)
28
+ base.push(ts.factory.createStringLiteral(`,`));
29
+
30
+ const empty: boolean =
31
+ (entry.meta.isRequired() === false &&
32
+ entry.meta.nullable === false &&
33
+ entry.meta.size() === 0) ||
34
+ (entry.meta.functional &&
35
+ entry.meta.nullable === false &&
36
+ entry.meta.size() === 1);
37
+
38
+ if (empty === true) return;
39
+ else if (
40
+ entry.meta.isRequired() === false ||
41
+ entry.meta.functional === true ||
42
+ entry.meta.any === true
43
+ )
44
+ output.push(
45
+ ts.factory.createConditionalExpression(
46
+ (() => {
47
+ const conditions: ts.BinaryExpression[] = [];
48
+ if (entry.meta.isRequired() === false || entry.meta.any)
49
+ conditions.push(
50
+ ts.factory.createStrictEquality(
51
+ ts.factory.createIdentifier("undefined"),
52
+ entry.input,
53
+ ),
54
+ );
55
+ if (entry.meta.functional || entry.meta.any)
56
+ conditions.push(
57
+ ts.factory.createStrictEquality(
58
+ ts.factory.createStringLiteral("function"),
59
+ ValueFactory.TYPEOF(entry.input),
60
+ ),
61
+ );
62
+ return conditions.length === 1
63
+ ? conditions[0]!
64
+ : conditions.reduce((x, y) =>
65
+ ts.factory.createLogicalOr(x, y),
66
+ );
67
+ })(),
68
+ undefined,
69
+ ts.factory.createStringLiteral(""),
70
+ undefined,
71
+ TemplateFactory.generate(base),
72
+ ),
73
+ );
74
+ else output.push(...base);
75
+ });
76
+ return output;
77
+ };
78
+
79
+ /**
80
+ * @internal
81
+ */
82
+ const sequence = (meta: Metadata): number =>
83
+ meta.any || !meta.isRequired() || meta.functional ? 0 : 1;
@@ -1,15 +1,15 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
-
3
- import { PatternUtil } from "../../utils/PatternUtil";
4
-
5
- import { metadata_to_pattern } from "./metadata_to_pattern";
6
-
7
- /**
8
- * @internal
9
- */
10
- export const template_to_pattern = (top: boolean) => (template: Metadata[]) => {
11
- const pattern: string = template
12
- .map((meta) => metadata_to_pattern(false)(meta))
13
- .join("");
14
- return top ? PatternUtil.fix(pattern) : pattern;
15
- };
1
+ import { Metadata } from "../../metadata/Metadata";
2
+
3
+ import { PatternUtil } from "../../utils/PatternUtil";
4
+
5
+ import { metadata_to_pattern } from "./metadata_to_pattern";
6
+
7
+ /**
8
+ * @internal
9
+ */
10
+ export const template_to_pattern = (top: boolean) => (template: Metadata[]) => {
11
+ const pattern: string = template
12
+ .map((meta) => metadata_to_pattern(false)(meta))
13
+ .join("");
14
+ return top ? PatternUtil.fix(pattern) : pattern;
15
+ };
@@ -1,16 +1,16 @@
1
- import { Metadata } from "../../metadata/Metadata";
2
- import { MetadataArray } from "../../metadata/MetadataArray";
3
-
4
- export const wrap_metadata_rest_tuple = (rest: Metadata) => {
5
- const wrapper: Metadata = Metadata.initialize();
6
- wrapper.arrays.push(
7
- MetadataArray.create({
8
- name: `...${rest.getName()}`,
9
- value: rest,
10
- nullables: [],
11
- recursive: false,
12
- index: null,
13
- }),
14
- );
15
- return wrapper;
16
- };
1
+ import { Metadata } from "../../metadata/Metadata";
2
+ import { MetadataArray } from "../../metadata/MetadataArray";
3
+
4
+ export const wrap_metadata_rest_tuple = (rest: Metadata) => {
5
+ const wrapper: Metadata = Metadata.initialize();
6
+ wrapper.arrays.push(
7
+ MetadataArray.create({
8
+ name: `...${rest.getName()}`,
9
+ value: rest,
10
+ nullables: [],
11
+ recursive: false,
12
+ index: null,
13
+ }),
14
+ );
15
+ return wrapper;
16
+ };
@@ -1,8 +1,8 @@
1
- import { IJsonComponents } from "./IJsonComponents";
2
- import { IJsonSchema } from "./IJsonSchema";
3
-
4
- export interface IJsonApplication {
5
- schemas: IJsonSchema[];
6
- components: IJsonComponents;
7
- purpose: "swagger" | "ajv";
8
- }
1
+ import { IJsonComponents } from "./IJsonComponents";
2
+ import { IJsonSchema } from "./IJsonSchema";
3
+
4
+ export interface IJsonApplication {
5
+ schemas: IJsonSchema[];
6
+ components: IJsonComponents;
7
+ purpose: "swagger" | "ajv";
8
+ }
@@ -1,33 +1,33 @@
1
- import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
2
-
3
- import { IJsonSchema } from "./IJsonSchema";
4
-
5
- export interface IJsonComponents {
6
- schemas?: Record<string, IJsonComponents.IObject | IJsonComponents.IAlias>;
7
- }
8
- export namespace IJsonComponents {
9
- export interface IObject {
10
- $id?: string;
11
- type: "object";
12
-
13
- /**
14
- * Only when swagger mode.
15
- */
16
- nullable?: boolean;
17
-
18
- properties: Record<string, IJsonSchema>;
19
- patternProperties?: Record<string, IJsonSchema>;
20
- additionalProperties?: IJsonSchema;
21
-
22
- required?: string[];
23
- description?: string;
24
- "x-typia-jsDocTags"?: IJsDocTagInfo[];
25
- "x-typia-patternProperties"?: Record<string, IJsonSchema>;
26
- "x-typia-additionalProperties"?: IJsonSchema;
27
- }
28
-
29
- export type IAlias = IJsonSchema & {
30
- $id?: string;
31
- $recursiveAnchor?: boolean;
32
- };
33
- }
1
+ import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
2
+
3
+ import { IJsonSchema } from "./IJsonSchema";
4
+
5
+ export interface IJsonComponents {
6
+ schemas?: Record<string, IJsonComponents.IObject | IJsonComponents.IAlias>;
7
+ }
8
+ export namespace IJsonComponents {
9
+ export interface IObject {
10
+ $id?: string;
11
+ type: "object";
12
+
13
+ /**
14
+ * Only when swagger mode.
15
+ */
16
+ nullable?: boolean;
17
+
18
+ properties: Record<string, IJsonSchema>;
19
+ patternProperties?: Record<string, IJsonSchema>;
20
+ additionalProperties?: IJsonSchema;
21
+
22
+ required?: string[];
23
+ description?: string;
24
+ "x-typia-jsDocTags"?: IJsDocTagInfo[];
25
+ "x-typia-patternProperties"?: Record<string, IJsonSchema>;
26
+ "x-typia-additionalProperties"?: IJsonSchema;
27
+ }
28
+
29
+ export type IAlias = IJsonSchema & {
30
+ $id?: string;
31
+ $recursiveAnchor?: boolean;
32
+ };
33
+ }
@@ -1,133 +1,133 @@
1
- import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
2
- import { IMetadataTag } from "../metadata/IMetadataTag";
3
-
4
- import { Atomic } from "../typings/Atomic";
5
-
6
- export type IJsonSchema = IJsonSchema.Known | IJsonSchema.IUnknown;
7
- export namespace IJsonSchema {
8
- export type Known =
9
- | IEnumeration<"boolean">
10
- | IEnumeration<"number">
11
- | IEnumeration<"string">
12
- | IBoolean
13
- | IInteger
14
- | INumber
15
- | IString
16
- | IArray
17
- | ITuple
18
- | IOneOf
19
- | IReference
20
- | INullOnly;
21
-
22
- export interface IUnknown extends IAttribute {
23
- type?: undefined;
24
- }
25
-
26
- /* -----------------------------------------------------------
27
- ATOMICS
28
- ----------------------------------------------------------- */
29
- export interface IEnumeration<
30
- Literal extends Exclude<Atomic.Literal, "bigint">,
31
- > extends IAtomic<Literal> {
32
- enum: Array<Atomic.Mapper[Literal]>;
33
- }
34
- export interface IAtomic<Literal extends Exclude<Atomic.Literal, "bigint">>
35
- extends ISignificant<Literal> {
36
- default?: Atomic.Mapper[Literal];
37
- }
38
- export interface IString extends IAtomic<"string"> {
39
- /**
40
- * @type uint
41
- */
42
- minLength?: number;
43
- /**
44
- * @type uint
45
- */
46
- maxLength?: number;
47
- pattern?: string;
48
- format?: string;
49
- }
50
- export interface INumber extends IAtomic<"number"> {
51
- minimum?: number;
52
- maximum?: number;
53
- exclusiveMinimum?: boolean;
54
- exclusiveMaximum?: boolean;
55
- multipleOf?: number;
56
- }
57
- export interface IInteger extends IAtomic<"integer"> {
58
- /**
59
- * @type int
60
- */
61
- minimum?: number;
62
- /**
63
- * @type int
64
- */
65
- maximum?: number;
66
- exclusiveMinimum?: boolean;
67
- exclusiveMaximum?: boolean;
68
- /**
69
- * @type int
70
- */
71
- multipleOf?: number;
72
- }
73
- export interface IBoolean extends IAtomic<"boolean"> {}
74
-
75
- /* -----------------------------------------------------------
76
- OBJECTS
77
- ----------------------------------------------------------- */
78
- export interface IArray extends ISignificant<"array"> {
79
- items: IJsonSchema;
80
- /**
81
- * @type uint
82
- */
83
- minItems?: number;
84
- /**
85
- * @type uint
86
- */
87
- maxItems?: number;
88
- "x-typia-tuple"?: ITuple;
89
- }
90
- export interface ITuple extends ISignificant<"array"> {
91
- items: IJsonSchema[];
92
- /**
93
- * @type uint
94
- */
95
- minItems: number;
96
- /**
97
- * @type uint
98
- */
99
- maxItems?: number;
100
- }
101
- export interface IReference extends IAttribute {
102
- $ref: string;
103
- }
104
- export interface INullOnly extends IAttribute {
105
- type: "null";
106
- }
107
-
108
- /* -----------------------------------------------------------
109
- MISCELLANEOUS
110
- ----------------------------------------------------------- */
111
- export interface IOneOf extends IAttribute {
112
- oneOf: IJsonSchema[];
113
- }
114
-
115
- export interface ISignificant<Literal extends string> extends IAttribute {
116
- type: Literal;
117
-
118
- /**
119
- * Only when swagger mode.
120
- */
121
- nullable?: boolean;
122
- }
123
- export interface IAttribute {
124
- deprecated?: boolean;
125
- title?: string;
126
- description?: string;
127
- "x-typia-metaTags"?: IMetadataTag[];
128
- "x-typia-jsDocTags"?: IJsDocTagInfo[];
129
- "x-typia-required"?: boolean;
130
- "x-typia-optional"?: boolean;
131
- "x-typia-rest"?: boolean;
132
- }
133
- }
1
+ import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
2
+ import { IMetadataTag } from "../metadata/IMetadataTag";
3
+
4
+ import { Atomic } from "../typings/Atomic";
5
+
6
+ export type IJsonSchema = IJsonSchema.Known | IJsonSchema.IUnknown;
7
+ export namespace IJsonSchema {
8
+ export type Known =
9
+ | IEnumeration<"boolean">
10
+ | IEnumeration<"number">
11
+ | IEnumeration<"string">
12
+ | IBoolean
13
+ | IInteger
14
+ | INumber
15
+ | IString
16
+ | IArray
17
+ | ITuple
18
+ | IOneOf
19
+ | IReference
20
+ | INullOnly;
21
+
22
+ export interface IUnknown extends IAttribute {
23
+ type?: undefined;
24
+ }
25
+
26
+ /* -----------------------------------------------------------
27
+ ATOMICS
28
+ ----------------------------------------------------------- */
29
+ export interface IEnumeration<
30
+ Literal extends Exclude<Atomic.Literal, "bigint">,
31
+ > extends IAtomic<Literal> {
32
+ enum: Array<Atomic.Mapper[Literal]>;
33
+ }
34
+ export interface IAtomic<Literal extends Exclude<Atomic.Literal, "bigint">>
35
+ extends ISignificant<Literal> {
36
+ default?: Atomic.Mapper[Literal];
37
+ }
38
+ export interface IString extends IAtomic<"string"> {
39
+ /**
40
+ * @type uint
41
+ */
42
+ minLength?: number;
43
+ /**
44
+ * @type uint
45
+ */
46
+ maxLength?: number;
47
+ pattern?: string;
48
+ format?: string;
49
+ }
50
+ export interface INumber extends IAtomic<"number"> {
51
+ minimum?: number;
52
+ maximum?: number;
53
+ exclusiveMinimum?: boolean;
54
+ exclusiveMaximum?: boolean;
55
+ multipleOf?: number;
56
+ }
57
+ export interface IInteger extends IAtomic<"integer"> {
58
+ /**
59
+ * @type int
60
+ */
61
+ minimum?: number;
62
+ /**
63
+ * @type int
64
+ */
65
+ maximum?: number;
66
+ exclusiveMinimum?: boolean;
67
+ exclusiveMaximum?: boolean;
68
+ /**
69
+ * @type int
70
+ */
71
+ multipleOf?: number;
72
+ }
73
+ export interface IBoolean extends IAtomic<"boolean"> {}
74
+
75
+ /* -----------------------------------------------------------
76
+ OBJECTS
77
+ ----------------------------------------------------------- */
78
+ export interface IArray extends ISignificant<"array"> {
79
+ items: IJsonSchema;
80
+ /**
81
+ * @type uint
82
+ */
83
+ minItems?: number;
84
+ /**
85
+ * @type uint
86
+ */
87
+ maxItems?: number;
88
+ "x-typia-tuple"?: ITuple;
89
+ }
90
+ export interface ITuple extends ISignificant<"array"> {
91
+ items: IJsonSchema[];
92
+ /**
93
+ * @type uint
94
+ */
95
+ minItems: number;
96
+ /**
97
+ * @type uint
98
+ */
99
+ maxItems?: number;
100
+ }
101
+ export interface IReference extends IAttribute {
102
+ $ref: string;
103
+ }
104
+ export interface INullOnly extends IAttribute {
105
+ type: "null";
106
+ }
107
+
108
+ /* -----------------------------------------------------------
109
+ MISCELLANEOUS
110
+ ----------------------------------------------------------- */
111
+ export interface IOneOf extends IAttribute {
112
+ oneOf: IJsonSchema[];
113
+ }
114
+
115
+ export interface ISignificant<Literal extends string> extends IAttribute {
116
+ type: Literal;
117
+
118
+ /**
119
+ * Only when swagger mode.
120
+ */
121
+ nullable?: boolean;
122
+ }
123
+ export interface IAttribute {
124
+ deprecated?: boolean;
125
+ title?: string;
126
+ description?: string;
127
+ "x-typia-metaTags"?: IMetadataTag[];
128
+ "x-typia-jsDocTags"?: IJsDocTagInfo[];
129
+ "x-typia-required"?: boolean;
130
+ "x-typia-optional"?: boolean;
131
+ "x-typia-rest"?: boolean;
132
+ }
133
+ }