typia 7.0.0-dev.20240916 → 7.0.0-dev.20240918

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 (170) hide show
  1. package/lib/factories/JsonMetadataFactory.d.ts +7 -1
  2. package/lib/factories/JsonMetadataFactory.js +17 -15
  3. package/lib/factories/JsonMetadataFactory.js.map +1 -1
  4. package/lib/factories/MetadataFactory.d.ts +14 -2
  5. package/lib/factories/MetadataFactory.js +287 -324
  6. package/lib/factories/MetadataFactory.js.map +1 -1
  7. package/lib/factories/ProtobufFactory.d.ts +8 -1
  8. package/lib/factories/ProtobufFactory.js +22 -17
  9. package/lib/factories/ProtobufFactory.js.map +1 -1
  10. package/lib/factories/internal/metadata/IMetadataIteratorProps.d.ts +13 -0
  11. package/lib/factories/internal/metadata/IMetadataIteratorProps.js +3 -0
  12. package/lib/factories/internal/metadata/IMetadataIteratorProps.js.map +1 -0
  13. package/lib/factories/internal/metadata/emplace_metadata_alias.d.ts +2 -4
  14. package/lib/factories/internal/metadata/emplace_metadata_alias.js +10 -18
  15. package/lib/factories/internal/metadata/emplace_metadata_alias.js.map +1 -1
  16. package/lib/factories/internal/metadata/emplace_metadata_array_type.d.ts +6 -3
  17. package/lib/factories/internal/metadata/emplace_metadata_array_type.js +10 -18
  18. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -1
  19. package/lib/factories/internal/metadata/emplace_metadata_object.d.ts +2 -4
  20. package/lib/factories/internal/metadata/emplace_metadata_object.js +171 -158
  21. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  22. package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +2 -3
  23. package/lib/factories/internal/metadata/emplace_metadata_tuple.js +26 -34
  24. package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -1
  25. package/lib/factories/internal/metadata/explore_metadata.d.ts +6 -3
  26. package/lib/factories/internal/metadata/explore_metadata.js +24 -21
  27. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata.d.ts +2 -5
  29. package/lib/factories/internal/metadata/iterate_metadata.js +27 -36
  30. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  31. package/lib/factories/internal/metadata/iterate_metadata_alias.d.ts +2 -5
  32. package/lib/factories/internal/metadata/iterate_metadata_alias.js +11 -19
  33. package/lib/factories/internal/metadata/iterate_metadata_alias.js.map +1 -1
  34. package/lib/factories/internal/metadata/iterate_metadata_array.d.ts +2 -5
  35. package/lib/factories/internal/metadata/iterate_metadata_array.js +59 -56
  36. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  37. package/lib/factories/internal/metadata/iterate_metadata_atomic.d.ts +4 -1
  38. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +3 -3
  39. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  40. package/lib/factories/internal/metadata/iterate_metadata_coalesce.d.ts +4 -1
  41. package/lib/factories/internal/metadata/iterate_metadata_coalesce.js +5 -5
  42. package/lib/factories/internal/metadata/iterate_metadata_coalesce.js.map +1 -1
  43. package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +4 -1
  44. package/lib/factories/internal/metadata/iterate_metadata_collection.js +119 -121
  45. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  46. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.d.ts +4 -1
  47. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js +7 -7
  48. package/lib/factories/internal/metadata/iterate_metadata_comment_tags.js.map +1 -1
  49. package/lib/factories/internal/metadata/iterate_metadata_constant.d.ts +2 -4
  50. package/lib/factories/internal/metadata/iterate_metadata_constant.js +39 -43
  51. package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -1
  52. package/lib/factories/internal/metadata/iterate_metadata_escape.d.ts +2 -5
  53. package/lib/factories/internal/metadata/iterate_metadata_escape.js +15 -23
  54. package/lib/factories/internal/metadata/iterate_metadata_escape.js.map +1 -1
  55. package/lib/factories/internal/metadata/iterate_metadata_function.d.ts +2 -5
  56. package/lib/factories/internal/metadata/iterate_metadata_function.js +43 -51
  57. package/lib/factories/internal/metadata/iterate_metadata_function.js.map +1 -1
  58. package/lib/factories/internal/metadata/iterate_metadata_intersection.d.ts +2 -5
  59. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +142 -152
  60. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  61. package/lib/factories/internal/metadata/iterate_metadata_map.d.ts +2 -5
  62. package/lib/factories/internal/metadata/iterate_metadata_map.js +15 -23
  63. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  64. package/lib/factories/internal/metadata/iterate_metadata_native.d.ts +2 -3
  65. package/lib/factories/internal/metadata/iterate_metadata_native.js +42 -36
  66. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  67. package/lib/factories/internal/metadata/iterate_metadata_object.d.ts +2 -5
  68. package/lib/factories/internal/metadata/iterate_metadata_object.js +12 -20
  69. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  70. package/lib/factories/internal/metadata/iterate_metadata_set.d.ts +2 -5
  71. package/lib/factories/internal/metadata/iterate_metadata_set.js +11 -19
  72. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  73. package/lib/factories/internal/metadata/iterate_metadata_sort.d.ts +4 -1
  74. package/lib/factories/internal/metadata/iterate_metadata_sort.js +112 -95
  75. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  76. package/lib/factories/internal/metadata/iterate_metadata_template.d.ts +2 -5
  77. package/lib/factories/internal/metadata/iterate_metadata_template.js +17 -25
  78. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  79. package/lib/factories/internal/metadata/iterate_metadata_tuple.d.ts +2 -4
  80. package/lib/factories/internal/metadata/iterate_metadata_tuple.js +9 -17
  81. package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
  82. package/lib/factories/internal/metadata/iterate_metadata_union.d.ts +2 -5
  83. package/lib/factories/internal/metadata/iterate_metadata_union.js +7 -15
  84. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  85. package/lib/programmers/CheckerProgrammer.js +11 -5
  86. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  87. package/lib/programmers/RandomProgrammer.js +18 -12
  88. package/lib/programmers/RandomProgrammer.js.map +1 -1
  89. package/lib/programmers/http/HttpFormDataProgrammer.js +12 -6
  90. package/lib/programmers/http/HttpFormDataProgrammer.js.map +1 -1
  91. package/lib/programmers/http/HttpHeadersProgrammer.js +12 -6
  92. package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
  93. package/lib/programmers/http/HttpParameterProgrammer.js +12 -6
  94. package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
  95. package/lib/programmers/http/HttpQueryProgrammer.js +14 -6
  96. package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
  97. package/lib/programmers/json/JsonStringifyProgrammer.js +6 -1
  98. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  99. package/lib/programmers/misc/MiscCloneProgrammer.js +18 -12
  100. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  101. package/lib/programmers/misc/MiscLiteralsProgrammer.js +21 -15
  102. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  103. package/lib/programmers/misc/MiscPruneProgrammer.js +11 -5
  104. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  105. package/lib/programmers/notations/NotationGeneralProgrammer.js +11 -5
  106. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  107. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +7 -1
  108. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  109. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +7 -1
  110. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  111. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +7 -1
  112. package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
  113. package/lib/transformers/features/json/JsonApplicationTransformer.js +12 -6
  114. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  115. package/lib/transformers/features/llm/LlmApplicationTransformer.js +13 -7
  116. package/lib/transformers/features/llm/LlmApplicationTransformer.js.map +1 -1
  117. package/lib/transformers/features/llm/LlmSchemaTransformer.js +12 -6
  118. package/lib/transformers/features/llm/LlmSchemaTransformer.js.map +1 -1
  119. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +12 -6
  120. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -1
  121. package/lib/transformers/features/reflect/ReflectNameTransformer.js +11 -5
  122. package/lib/transformers/features/reflect/ReflectNameTransformer.js.map +1 -1
  123. package/package.json +1 -1
  124. package/src/factories/JsonMetadataFactory.ts +21 -14
  125. package/src/factories/MetadataFactory.ts +269 -184
  126. package/src/factories/ProtobufFactory.ts +23 -16
  127. package/src/factories/internal/metadata/IMetadataIteratorProps.ts +16 -0
  128. package/src/factories/internal/metadata/emplace_metadata_alias.ts +22 -31
  129. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +26 -29
  130. package/src/factories/internal/metadata/emplace_metadata_object.ts +163 -144
  131. package/src/factories/internal/metadata/emplace_metadata_tuple.ts +39 -40
  132. package/src/factories/internal/metadata/explore_metadata.ts +22 -20
  133. package/src/factories/internal/metadata/iterate_metadata.ts +31 -80
  134. package/src/factories/internal/metadata/iterate_metadata_alias.ts +18 -24
  135. package/src/factories/internal/metadata/iterate_metadata_array.ts +51 -51
  136. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +6 -6
  137. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +8 -8
  138. package/src/factories/internal/metadata/iterate_metadata_collection.ts +128 -114
  139. package/src/factories/internal/metadata/iterate_metadata_comment_tags.ts +24 -22
  140. package/src/factories/internal/metadata/iterate_metadata_constant.ts +63 -63
  141. package/src/factories/internal/metadata/iterate_metadata_escape.ts +35 -40
  142. package/src/factories/internal/metadata/iterate_metadata_function.ts +70 -74
  143. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +182 -182
  144. package/src/factories/internal/metadata/iterate_metadata_map.ts +37 -36
  145. package/src/factories/internal/metadata/iterate_metadata_native.ts +56 -43
  146. package/src/factories/internal/metadata/iterate_metadata_object.ts +18 -24
  147. package/src/factories/internal/metadata/iterate_metadata_set.ts +24 -30
  148. package/src/factories/internal/metadata/iterate_metadata_sort.ts +71 -62
  149. package/src/factories/internal/metadata/iterate_metadata_template.ts +29 -31
  150. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +16 -27
  151. package/src/factories/internal/metadata/iterate_metadata_union.ts +16 -24
  152. package/src/programmers/CheckerProgrammer.ts +11 -8
  153. package/src/programmers/RandomProgrammer.ts +18 -15
  154. package/src/programmers/http/HttpFormDataProgrammer.ts +12 -9
  155. package/src/programmers/http/HttpHeadersProgrammer.ts +12 -9
  156. package/src/programmers/http/HttpParameterProgrammer.ts +12 -9
  157. package/src/programmers/http/HttpQueryProgrammer.ts +13 -9
  158. package/src/programmers/json/JsonStringifyProgrammer.ts +6 -4
  159. package/src/programmers/misc/MiscCloneProgrammer.ts +18 -15
  160. package/src/programmers/misc/MiscLiteralsProgrammer.ts +20 -17
  161. package/src/programmers/misc/MiscPruneProgrammer.ts +11 -8
  162. package/src/programmers/notations/NotationGeneralProgrammer.ts +11 -8
  163. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +7 -4
  164. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +7 -4
  165. package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +7 -4
  166. package/src/transformers/features/json/JsonApplicationTransformer.ts +12 -9
  167. package/src/transformers/features/llm/LlmApplicationTransformer.ts +13 -10
  168. package/src/transformers/features/llm/LlmSchemaTransformer.ts +12 -9
  169. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +12 -9
  170. package/src/transformers/features/reflect/ReflectNameTransformer.ts +11 -8
@@ -1,10 +1,7 @@
1
1
  import ts from "typescript";
2
2
 
3
- import { Metadata } from "../../../schemas/metadata/Metadata";
4
-
5
- import { MetadataCollection } from "../../MetadataCollection";
6
- import { MetadataFactory } from "../../MetadataFactory";
7
3
  import { TypeFactory } from "../../TypeFactory";
4
+ import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
8
5
  import { iterate_metadata_alias } from "./iterate_metadata_alias";
9
6
  import { iterate_metadata_array } from "./iterate_metadata_array";
10
7
  import { iterate_metadata_atomic } from "./iterate_metadata_atomic";
@@ -21,80 +18,34 @@ import { iterate_metadata_template } from "./iterate_metadata_template";
21
18
  import { iterate_metadata_tuple } from "./iterate_metadata_tuple";
22
19
  import { iterate_metadata_union } from "./iterate_metadata_union";
23
20
 
24
- export const iterate_metadata =
25
- (checker: ts.TypeChecker) =>
26
- (options: MetadataFactory.IOptions) =>
27
- (collection: MetadataCollection) =>
28
- (errors: MetadataFactory.IError[]) =>
29
- (meta: Metadata, type: ts.Type, explore: MetadataFactory.IExplore): void => {
30
- if (type.isTypeParameter() === true) {
31
- errors.push({
32
- name: TypeFactory.getFullName(checker)(type),
33
- explore: { ...explore },
34
- messages: ["non-specified generic argument found."],
35
- });
36
- return;
37
- }
38
- // CHECK SPECIAL CASES
39
- else if (
40
- (explore.aliased !== true &&
41
- iterate_metadata_alias(checker)(options)(collection)(errors)(
42
- meta,
43
- type,
44
- explore,
45
- )) ||
46
- iterate_metadata_intersection(checker)(options)(collection)(errors)(
47
- meta,
48
- type,
49
- explore,
50
- ) ||
51
- iterate_metadata_union(checker)(options)(collection)(errors)(
52
- meta,
53
- type,
54
- explore,
55
- ) ||
56
- iterate_metadata_escape(checker)(options)(collection)(errors)(
57
- meta,
58
- type,
59
- explore,
60
- )
61
- )
62
- return;
21
+ export const iterate_metadata = (props: IMetadataIteratorProps): void => {
22
+ if (props.type.isTypeParameter() === true) {
23
+ props.errors.push({
24
+ name: TypeFactory.getFullName(props.checker)(props.type),
25
+ explore: { ...props.explore },
26
+ messages: ["non-specified generic argument found."],
27
+ });
28
+ return;
29
+ }
30
+ // CHECK SPECIAL CASES
31
+ else if (
32
+ (props.explore.aliased !== true && iterate_metadata_alias(props)) ||
33
+ iterate_metadata_intersection(props) ||
34
+ iterate_metadata_union(props) ||
35
+ iterate_metadata_escape(props)
36
+ )
37
+ return;
63
38
 
64
- // ITERATE CASES
65
- iterate_metadata_coalesce(meta, type) ||
66
- iterate_metadata_function(checker)(options)(collection)(errors)(
67
- meta,
68
- type,
69
- explore,
70
- ) ||
71
- iterate_metadata_constant(checker)(options)(meta, type) ||
72
- iterate_metadata_template(checker)(options)(collection)(errors)(
73
- meta,
74
- type,
75
- explore,
76
- ) ||
77
- iterate_metadata_atomic(meta, type) ||
78
- iterate_metadata_tuple(checker)(options)(collection)(errors)(
79
- meta,
80
- type as ts.TupleType,
81
- explore,
82
- ) ||
83
- iterate_metadata_array(checker)(options)(collection)(errors)(
84
- meta,
85
- type,
86
- explore,
87
- ) ||
88
- iterate_metadata_native(checker)(meta, type) ||
89
- iterate_metadata_map(checker)(options)(collection)(errors)(
90
- meta,
91
- type,
92
- explore,
93
- ) ||
94
- iterate_metadata_set(checker)(options)(collection)(errors)(
95
- meta,
96
- type,
97
- explore,
98
- ) ||
99
- iterate_metadata_object(checker)(options)(collection)(errors)(meta, type);
100
- };
39
+ // ITERATE CASES
40
+ iterate_metadata_coalesce(props) ||
41
+ iterate_metadata_function(props) ||
42
+ iterate_metadata_constant(props) ||
43
+ iterate_metadata_template(props) ||
44
+ iterate_metadata_atomic(props) ||
45
+ iterate_metadata_tuple(props as IMetadataIteratorProps<ts.TupleType>) ||
46
+ iterate_metadata_array(props) ||
47
+ iterate_metadata_native(props) ||
48
+ iterate_metadata_map(props) ||
49
+ iterate_metadata_set(props) ||
50
+ iterate_metadata_object(props);
51
+ };
@@ -1,34 +1,28 @@
1
1
  import ts from "typescript";
2
2
 
3
- import { Metadata } from "../../../schemas/metadata/Metadata";
4
3
  import { MetadataAlias } from "../../../schemas/metadata/MetadataAlias";
5
4
 
6
5
  import { ArrayUtil } from "../../../utils/ArrayUtil";
7
6
 
8
- import { MetadataCollection } from "../../MetadataCollection";
9
- import { MetadataFactory } from "../../MetadataFactory";
7
+ import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
10
8
  import { emplace_metadata_alias } from "./emplace_metadata_alias";
11
9
 
12
- export const iterate_metadata_alias =
13
- (checker: ts.TypeChecker) =>
14
- (options: MetadataFactory.IOptions) =>
15
- (collection: MetadataCollection) =>
16
- (errors: MetadataFactory.IError[]) =>
17
- (
18
- meta: Metadata,
19
- type: ts.Type,
20
- explore: MetadataFactory.IExplore,
21
- ): boolean => {
22
- if (options.absorb !== false || type.aliasSymbol === undefined)
23
- return false;
10
+ export const iterate_metadata_alias = (
11
+ props: IMetadataIteratorProps,
12
+ ): boolean => {
13
+ if (props.options.absorb !== false || props.type.aliasSymbol === undefined)
14
+ return false;
24
15
 
25
- const node: ts.Declaration | undefined = type.aliasSymbol.declarations?.[0];
26
- if (node === undefined) return false;
16
+ const node: ts.Declaration | undefined =
17
+ props.type.aliasSymbol.declarations?.[0];
18
+ if (node === undefined) return false;
27
19
 
28
- // CONSTRUCT DEFINITION
29
- const alias: MetadataAlias = emplace_metadata_alias(checker)(options)(
30
- collection,
31
- )(errors)(type, meta.nullable, explore);
32
- ArrayUtil.add(meta.aliases, alias, (elem) => elem.name === alias.name);
33
- return true;
34
- };
20
+ // CONSTRUCT DEFINITION
21
+ const alias: MetadataAlias = emplace_metadata_alias(props);
22
+ ArrayUtil.add(
23
+ props.metadata.aliases,
24
+ alias,
25
+ (elem) => elem.name === alias.name,
26
+ );
27
+ return true;
28
+ };
@@ -1,63 +1,63 @@
1
1
  import ts from "typescript";
2
2
 
3
- import { Metadata } from "../../../schemas/metadata/Metadata";
4
3
  import { MetadataArray } from "../../../schemas/metadata/MetadataArray";
5
4
  import { MetadataArrayType } from "../../../schemas/metadata/MetadataArrayType";
6
5
 
7
6
  import { ArrayUtil } from "../../../utils/ArrayUtil";
8
7
 
9
- import { MetadataCollection } from "../../MetadataCollection";
10
- import { MetadataFactory } from "../../MetadataFactory";
8
+ import { IMetadataIteratorProps } from "./IMetadataIteratorProps";
11
9
  import { emplace_metadata_array_type } from "./emplace_metadata_array_type";
12
10
 
13
- export const iterate_metadata_array =
14
- (checker: ts.TypeChecker) =>
15
- (options: MetadataFactory.IOptions) =>
16
- (collection: MetadataCollection) =>
17
- (errors: MetadataFactory.IError[]) =>
18
- (
19
- meta: Metadata,
20
- alias: ts.Type,
21
- explore: MetadataFactory.IExplore,
22
- ): boolean => {
23
- const array: ts.Type | null =
24
- checker.isArrayType(alias) === false
25
- ? find_array_extended(checker)(new Map())(alias)
26
- : alias;
27
- if (array === null) return false;
11
+ export const iterate_metadata_array = (
12
+ props: IMetadataIteratorProps,
13
+ ): boolean => {
14
+ const array: ts.Type | null =
15
+ props.checker.isArrayType(props.type) === false
16
+ ? find_array_extended({
17
+ checker: props.checker,
18
+ memory: new Map(),
19
+ type: props.type,
20
+ })
21
+ : props.type;
22
+ if (array === null) return false;
28
23
 
29
- const arrayType: MetadataArrayType = emplace_metadata_array_type(checker)(
30
- options,
31
- )(collection)(errors)(alias, array, meta.nullable, explore);
32
- ArrayUtil.add(
33
- meta.arrays,
34
- MetadataArray.create({
35
- type: arrayType,
36
- tags: [],
37
- }),
38
- (elem) => elem.type.name === arrayType.name,
39
- );
40
- return true;
41
- };
24
+ const arrayType: MetadataArrayType = emplace_metadata_array_type({
25
+ ...props,
26
+ array,
27
+ });
28
+ ArrayUtil.add(
29
+ props.metadata.arrays,
30
+ MetadataArray.create({
31
+ type: arrayType,
32
+ tags: [],
33
+ }),
34
+ (elem) => elem.type.name === arrayType.name,
35
+ );
36
+ return true;
37
+ };
42
38
 
43
- const find_array_extended =
44
- (checker: ts.TypeChecker) =>
45
- (memory: Map<ts.Type, ts.Type | null>) =>
46
- (type: ts.Type): ts.Type | null => {
47
- const cached = memory.get(type);
48
- if (cached !== undefined) return null;
39
+ const find_array_extended = (props: {
40
+ checker: ts.TypeChecker;
41
+ memory: Map<ts.Type, ts.Type | null>;
42
+ type: ts.Type;
43
+ }): ts.Type | null => {
44
+ const cached = props.memory.get(props.type);
45
+ if (cached !== undefined) return null;
49
46
 
50
- memory.set(type, null);
51
- const res: ts.Type | null = (() => {
52
- if (type.isClassOrInterface() === false) return null;
53
- for (const t of type.resolvedBaseTypes ?? [])
54
- if (checker.isArrayType(t)) return t;
55
- else {
56
- const res: ts.Type | null = find_array_extended(checker)(memory)(t);
57
- if (res !== null) return res;
58
- }
59
- return null;
60
- })();
61
- memory.set(type, res);
62
- return res;
63
- };
47
+ props.memory.set(props.type, null);
48
+ const res: ts.Type | null = (() => {
49
+ if (props.type.isClassOrInterface() === false) return null;
50
+ for (const t of props.type.resolvedBaseTypes ?? [])
51
+ if (props.checker.isArrayType(t)) return t;
52
+ else {
53
+ const res: ts.Type | null = find_array_extended({
54
+ ...props,
55
+ type: t,
56
+ });
57
+ if (res !== null) return res;
58
+ }
59
+ return null;
60
+ })();
61
+ props.memory.set(props.type, res);
62
+ return res;
63
+ };
@@ -10,16 +10,16 @@ const same = (type: ts.Type | null) => {
10
10
  return (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
11
11
  };
12
12
 
13
- export const iterate_metadata_atomic = (
14
- meta: Metadata,
15
- type: ts.Type,
16
- ): boolean => {
13
+ export const iterate_metadata_atomic = (props: {
14
+ metadata: Metadata;
15
+ type: ts.Type;
16
+ }): boolean => {
17
17
  // PREPARE INTERNAL FUNCTIONS
18
- const filter = same(type);
18
+ const filter = same(props.type);
19
19
  const check = (info: IAtomicInfo) => {
20
20
  if (filter(info.atomic) || filter(info.literal)) {
21
21
  ArrayUtil.add(
22
- meta.atomics,
22
+ props.metadata.atomics,
23
23
  MetadataAtomic.create({ type: info.name, tags: [] }),
24
24
  (x, y) => x.type === y.type,
25
25
  );
@@ -4,16 +4,16 @@ import { Metadata } from "../../../schemas/metadata/Metadata";
4
4
 
5
5
  import { Writable } from "../../../typings/Writable";
6
6
 
7
- export const iterate_metadata_coalesce = (
8
- meta: Metadata,
9
- type: ts.Type,
10
- ): boolean => {
11
- const filter = (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
7
+ export const iterate_metadata_coalesce = (props: {
8
+ metadata: Metadata;
9
+ type: ts.Type;
10
+ }): boolean => {
11
+ const filter = (flag: ts.TypeFlags) => (props.type.getFlags() & flag) !== 0;
12
12
  if (filter(ts.TypeFlags.Unknown) || filter(ts.TypeFlags.Any)) {
13
- Writable(meta).any = true;
13
+ Writable(props.metadata).any = true;
14
14
  return true;
15
15
  } else if (filter(ts.TypeFlags.Null)) {
16
- Writable(meta).nullable = true;
16
+ Writable(props.metadata).nullable = true;
17
17
  return true;
18
18
  } else if (
19
19
  filter(ts.TypeFlags.Undefined) ||
@@ -21,7 +21,7 @@ export const iterate_metadata_coalesce = (
21
21
  filter(ts.TypeFlags.Void) ||
22
22
  filter(ts.TypeFlags.VoidLike)
23
23
  ) {
24
- Writable(meta).required = false;
24
+ Writable(props.metadata).required = false;
25
25
  return true;
26
26
  }
27
27
  return false;
@@ -7,125 +7,139 @@ import { MetadataCollection } from "../../MetadataCollection";
7
7
  import { MetadataFactory } from "../../MetadataFactory";
8
8
  import { iterate_metadata_comment_tags } from "./iterate_metadata_comment_tags";
9
9
 
10
- export const iterate_metadata_collection =
11
- (errors: MetadataFactory.IError[]) =>
12
- (collection: MetadataCollection): void => {
13
- for (const array of collection.arrays())
14
- if (array.recursive === null)
15
- collection.setArrayRecursive(
10
+ export const iterate_metadata_collection = (props: {
11
+ errors: MetadataFactory.IError[];
12
+ collection: MetadataCollection;
13
+ }): void => {
14
+ for (const array of props.collection.arrays())
15
+ if (array.recursive === null)
16
+ props.collection.setArrayRecursive(
17
+ array,
18
+ isArrayRecursive({
19
+ visited: new Set(),
16
20
  array,
17
- isArrayRecursive(new Set())(array)(array.value),
18
- );
19
- for (const tuple of collection.tuples())
20
- if (tuple.recursive === null) {
21
- const visited: Set<Metadata> = new Set();
22
- collection.setTupleRecursive(
23
- tuple,
24
- tuple.elements.some(isTupleRecursive(visited)(tuple)),
25
- );
26
- }
27
- for (const obj of collection.objects()) {
28
- iterate_metadata_comment_tags(errors)(obj);
29
- if (obj.recursive === null) {
30
- const visited: Set<Metadata> = new Set();
31
- collection.setObjectRecursive(
32
- obj,
33
- obj.properties.some((p) => isObjectRecursive(visited)(obj)(p.value)),
34
- );
35
- }
21
+ metadata: array.value,
22
+ }),
23
+ );
24
+ for (const tuple of props.collection.tuples())
25
+ if (tuple.recursive === null) {
26
+ const visited: Set<Metadata> = new Set();
27
+ props.collection.setTupleRecursive(
28
+ tuple,
29
+ tuple.elements.some((e) =>
30
+ isTupleRecursive({
31
+ visited,
32
+ tuple,
33
+ metadata: e,
34
+ }),
35
+ ),
36
+ );
36
37
  }
37
- };
38
+ for (const object of props.collection.objects()) {
39
+ iterate_metadata_comment_tags({
40
+ errors: props.errors,
41
+ object,
42
+ });
43
+ if (object.recursive === null) {
44
+ const visited: Set<Metadata> = new Set();
45
+ props.collection.setObjectRecursive(
46
+ object,
47
+ object.properties.some((p) =>
48
+ isObjectRecursive({
49
+ visited,
50
+ object,
51
+ metadata: p.value,
52
+ }),
53
+ ),
54
+ );
55
+ }
56
+ }
57
+ };
38
58
 
39
- const isArrayRecursive =
40
- (visited: Set<Metadata>) =>
41
- (array: MetadataArrayType) =>
42
- (meta: Metadata): boolean => {
43
- if (visited.has(meta)) return false;
44
- visited.add(meta);
59
+ const isArrayRecursive = (props: {
60
+ visited: Set<Metadata>;
61
+ array: MetadataArrayType;
62
+ metadata: Metadata;
63
+ }): boolean => {
64
+ if (props.visited.has(props.metadata)) return false;
65
+ props.visited.add(props.metadata);
45
66
 
46
- return (
47
- meta.arrays.some(
48
- (a) =>
49
- a.type === array || isArrayRecursive(visited)(array)(a.type.value),
50
- ) ||
51
- meta.aliases.some((alias) =>
52
- isArrayRecursive(visited)(array)(alias.value),
53
- ) ||
54
- meta.tuples.some(
55
- (t) =>
56
- !t.type.recursive &&
57
- t.type.elements.some((e) => isArrayRecursive(visited)(array)(e)),
58
- ) ||
59
- meta.maps.some((m) => isArrayRecursive(visited)(array)(m.value)) ||
60
- meta.sets.some((s) => isArrayRecursive(visited)(array)(s)) ||
61
- (meta.escaped !== null &&
62
- isArrayRecursive(visited)(array)(meta.escaped.returns)) ||
63
- (meta.rest !== null && isArrayRecursive(visited)(array)(meta.rest))
64
- );
65
- };
67
+ const next = (metadata: Metadata): boolean =>
68
+ isArrayRecursive({
69
+ ...props,
70
+ metadata,
71
+ });
72
+ return (
73
+ props.metadata.arrays.some(
74
+ (a) => a.type === props.array || next(a.type.value),
75
+ ) ||
76
+ props.metadata.aliases.some((alias) => next(alias.value)) ||
77
+ props.metadata.tuples.some(
78
+ (t) => !t.type.recursive && t.type.elements.some(next),
79
+ ) ||
80
+ props.metadata.maps.some((m) => next(m.value)) ||
81
+ props.metadata.sets.some(next) ||
82
+ (props.metadata.escaped !== null && next(props.metadata.escaped.returns)) ||
83
+ (props.metadata.rest !== null && next(props.metadata.rest))
84
+ );
85
+ };
66
86
 
67
- const isTupleRecursive =
68
- (visited: Set<Metadata>) =>
69
- (tuple: MetadataTupleType) =>
70
- (meta: Metadata): boolean => {
71
- if (visited.has(meta)) return false;
72
- visited.add(meta);
87
+ const isTupleRecursive = (props: {
88
+ visited: Set<Metadata>;
89
+ tuple: MetadataTupleType;
90
+ metadata: Metadata;
91
+ }): boolean => {
92
+ if (props.visited.has(props.metadata)) return false;
93
+ props.visited.add(props.metadata);
73
94
 
74
- return (
75
- meta.tuples.some(
76
- (t) =>
77
- t.type === tuple ||
78
- t.type.elements.some((e) => isTupleRecursive(visited)(tuple)(e)),
79
- ) ||
80
- meta.arrays.some(
81
- (a) =>
82
- !a.type.recursive && isTupleRecursive(visited)(tuple)(a.type.value),
83
- ) ||
84
- meta.maps.some((m) => isTupleRecursive(visited)(tuple)(m.value)) ||
85
- meta.sets.some((s) => isTupleRecursive(visited)(tuple)(s)) ||
86
- meta.aliases.some((alias) =>
87
- isTupleRecursive(visited)(tuple)(alias.value),
88
- ) ||
89
- (meta.escaped !== null &&
90
- isTupleRecursive(visited)(tuple)(meta.escaped.returns)) ||
91
- (meta.rest !== null && isTupleRecursive(visited)(tuple)(meta.rest))
92
- );
93
- };
95
+ const next = (metadata: Metadata): boolean =>
96
+ isTupleRecursive({
97
+ ...props,
98
+ metadata,
99
+ });
100
+ return (
101
+ props.metadata.tuples.some(
102
+ (t) => t.type === props.tuple || t.type.elements.some(next),
103
+ ) ||
104
+ props.metadata.arrays.some(
105
+ (a) => !a.type.recursive && next(a.type.value),
106
+ ) ||
107
+ props.metadata.maps.some((m) => next(m.value)) ||
108
+ props.metadata.sets.some((s) => next(s)) ||
109
+ props.metadata.aliases.some((alias) => next(alias.value)) ||
110
+ (props.metadata.escaped !== null && next(props.metadata.escaped.returns)) ||
111
+ (props.metadata.rest !== null && next(props.metadata.rest))
112
+ );
113
+ };
94
114
 
95
- const isObjectRecursive =
96
- (visited: Set<Metadata>) =>
97
- (obj: MetadataObject) =>
98
- (meta: Metadata): boolean => {
99
- if (visited.has(meta)) return false;
115
+ const isObjectRecursive = (props: {
116
+ visited: Set<Metadata>;
117
+ object: MetadataObject;
118
+ metadata: Metadata;
119
+ }): boolean => {
120
+ if (props.visited.has(props.metadata)) return false;
121
+ props.visited.add(props.metadata);
100
122
 
101
- visited.add(meta);
102
- return (
103
- meta.objects.some(
104
- (o) =>
105
- obj === o ||
106
- o.properties.some((prop) =>
107
- isObjectRecursive(visited)(obj)(prop.value),
108
- ),
109
- ) ||
110
- meta.aliases.some((alias) =>
111
- isObjectRecursive(visited)(obj)(alias.value),
112
- ) ||
113
- meta.arrays.some(
114
- (array) =>
115
- !array.type.recursive &&
116
- isObjectRecursive(visited)(obj)(array.type.value),
117
- ) ||
118
- meta.tuples.some(
119
- (tuple) =>
120
- !tuple.type.recursive &&
121
- tuple.type.elements.some((elem) =>
122
- isObjectRecursive(visited)(obj)(elem),
123
- ),
124
- ) ||
125
- meta.maps.some((map) => isObjectRecursive(visited)(obj)(map.value)) ||
126
- meta.sets.some((value) => isObjectRecursive(visited)(obj)(value)) ||
127
- (meta.escaped !== null &&
128
- isObjectRecursive(visited)(obj)(meta.escaped.returns)) ||
129
- (meta.rest !== null && isObjectRecursive(visited)(obj)(meta.rest))
130
- );
131
- };
123
+ const next = (metadata: Metadata): boolean =>
124
+ isObjectRecursive({
125
+ ...props,
126
+ metadata,
127
+ });
128
+ return (
129
+ props.metadata.objects.some(
130
+ (o) =>
131
+ props.object === o || o.properties.some((prop) => next(prop.value)),
132
+ ) ||
133
+ props.metadata.aliases.some((alias) => next(alias.value)) ||
134
+ props.metadata.arrays.some(
135
+ (array) => !array.type.recursive && next(array.type.value),
136
+ ) ||
137
+ props.metadata.tuples.some(
138
+ (tuple) => !tuple.type.recursive && tuple.type.elements.some(next),
139
+ ) ||
140
+ props.metadata.maps.some((map) => next(map.value)) ||
141
+ props.metadata.sets.some(next) ||
142
+ (props.metadata.escaped !== null && next(props.metadata.escaped.returns)) ||
143
+ (props.metadata.rest !== null && next(props.metadata.rest))
144
+ );
145
+ };
@@ -3,26 +3,28 @@ import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
3
3
  import { MetadataCommentTagFactory } from "../../MetadataCommentTagFactory";
4
4
  import { MetadataFactory } from "../../MetadataFactory";
5
5
 
6
- export const iterate_metadata_comment_tags =
7
- (errors: MetadataFactory.IError[]) => (object: MetadataObject) => {
8
- if (object.tagged_ === true) return;
9
- object.tagged_ = true;
6
+ export const iterate_metadata_comment_tags = (props: {
7
+ errors: MetadataFactory.IError[];
8
+ object: MetadataObject;
9
+ }) => {
10
+ if (props.object.tagged_ === true) return;
11
+ props.object.tagged_ = true;
10
12
 
11
- for (const property of object.properties) {
12
- MetadataCommentTagFactory.analyze(errors)(property.value)(
13
- property.jsDocTags,
14
- {
15
- top: false,
16
- object,
17
- property: property.key.isSoleLiteral()
18
- ? property.key.getSoleLiteral()!
19
- : {},
20
- parameter: null,
21
- nested: null,
22
- aliased: false,
23
- escaped: false,
24
- output: false,
25
- },
26
- );
27
- }
28
- };
13
+ for (const property of props.object.properties) {
14
+ MetadataCommentTagFactory.analyze(props.errors)(property.value)(
15
+ property.jsDocTags,
16
+ {
17
+ top: false,
18
+ object: props.object,
19
+ property: property.key.isSoleLiteral()
20
+ ? property.key.getSoleLiteral()!
21
+ : {},
22
+ parameter: null,
23
+ nested: null,
24
+ aliased: false,
25
+ escaped: false,
26
+ output: false,
27
+ },
28
+ );
29
+ }
30
+ };