typia 5.0.0-dev.20230823 → 5.0.0-dev.2023084

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 (217) hide show
  1. package/lib/Primitive.d.ts +14 -12
  2. package/lib/Resolved.d.ts +46 -0
  3. package/lib/{schemas/metadata/IMetadataResolved.js → Resolved.js} +1 -1
  4. package/lib/Resolved.js.map +1 -0
  5. package/lib/factories/MetadataFactory.d.ts +1 -1
  6. package/lib/factories/MetadataTagFactory.js +10 -8
  7. package/lib/factories/MetadataTagFactory.js.map +1 -1
  8. package/lib/factories/ProtobufFactory.js +4 -3
  9. package/lib/factories/ProtobufFactory.js.map +1 -1
  10. package/lib/factories/internal/metadata/emend_metadata_atomics.js +6 -6
  11. package/lib/factories/internal/metadata/emend_metadata_atomics.js.map +1 -1
  12. package/lib/factories/internal/metadata/explore_metadata.js +3 -3
  13. package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
  14. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +1 -1
  15. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  16. package/lib/factories/internal/metadata/iterate_metadata_collection.js +6 -6
  17. package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
  18. package/lib/factories/internal/metadata/iterate_metadata_native.js +2 -10
  19. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  20. package/lib/factories/internal/metadata/iterate_metadata_resolve.js +6 -6
  21. package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_sort.js +2 -2
  23. package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
  24. package/lib/functional/$ProtobufWriter.js.map +1 -1
  25. package/lib/json.d.ts +15 -15
  26. package/lib/misc.d.ts +42 -42
  27. package/lib/module.d.ts +18 -17
  28. package/lib/module.js +1 -0
  29. package/lib/module.js.map +1 -1
  30. package/lib/programmers/AssertProgrammer.js +1 -1
  31. package/lib/programmers/AssertProgrammer.js.map +1 -1
  32. package/lib/programmers/CheckerProgrammer.js +7 -7
  33. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  34. package/lib/programmers/IsProgrammer.js +2 -2
  35. package/lib/programmers/IsProgrammer.js.map +1 -1
  36. package/lib/programmers/RandomProgrammer.js +311 -136
  37. package/lib/programmers/RandomProgrammer.js.map +1 -1
  38. package/lib/programmers/ValidateProgrammer.js +1 -1
  39. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  40. package/lib/programmers/helpers/AtomicPredicator.js +2 -2
  41. package/lib/programmers/helpers/AtomicPredicator.js.map +1 -1
  42. package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
  43. package/lib/programmers/helpers/FunctionImporeter.js +2 -1
  44. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  45. package/lib/programmers/helpers/ProtobufUtil.js +2 -2
  46. package/lib/programmers/helpers/ProtobufUtil.js.map +1 -1
  47. package/lib/programmers/helpers/StringifyPredicator.js +1 -2
  48. package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
  49. package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
  50. package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
  51. package/lib/programmers/internal/application_default_string.js +2 -2
  52. package/lib/programmers/internal/application_default_string.js.map +1 -1
  53. package/lib/programmers/internal/application_resolved.d.ts +2 -2
  54. package/lib/programmers/internal/application_resolved.js.map +1 -1
  55. package/lib/programmers/internal/application_schema.js +7 -7
  56. package/lib/programmers/internal/application_schema.js.map +1 -1
  57. package/lib/programmers/internal/metadata_to_pattern.js +4 -4
  58. package/lib/programmers/internal/metadata_to_pattern.js.map +1 -1
  59. package/lib/programmers/internal/stringify_dynamic_properties.js +2 -1
  60. package/lib/programmers/internal/stringify_dynamic_properties.js.map +1 -1
  61. package/lib/programmers/json/JsonStringifyProgrammer.js +20 -14
  62. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  63. package/lib/programmers/misc/MiscAssertCloneProgrammer.js +1 -1
  64. package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
  65. package/lib/programmers/misc/MiscCloneProgrammer.js +114 -33
  66. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  67. package/lib/programmers/misc/MiscIsCloneProgrammer.js +1 -1
  68. package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
  69. package/lib/programmers/misc/MiscLiteralsProgrammer.js +3 -3
  70. package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
  71. package/lib/programmers/misc/MiscPruneProgrammer.js +2 -2
  72. package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
  73. package/lib/programmers/misc/MiscValidateCloneProgrammer.js +1 -1
  74. package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
  75. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +3 -3
  76. package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
  77. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +3 -3
  78. package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
  79. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +1 -1
  80. package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
  81. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +2 -2
  82. package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
  83. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +1 -1
  84. package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
  85. package/lib/protobuf.d.ts +631 -10
  86. package/lib/protobuf.js +13 -13
  87. package/lib/protobuf.js.map +1 -1
  88. package/lib/schemas/metadata/IMetadata.d.ts +4 -4
  89. package/lib/schemas/metadata/IMetadataAtomic.d.ts +12 -0
  90. package/lib/schemas/metadata/IMetadataAtomic.js +3 -0
  91. package/lib/schemas/metadata/IMetadataAtomic.js.map +1 -0
  92. package/lib/schemas/metadata/{IMetadataResolved.d.ts → IMetadataEscaped.d.ts} +1 -1
  93. package/lib/schemas/metadata/IMetadataEscaped.js +3 -0
  94. package/lib/schemas/metadata/IMetadataEscaped.js.map +1 -0
  95. package/lib/schemas/metadata/Metadata.d.ts +4 -4
  96. package/lib/schemas/metadata/Metadata.js +64 -59
  97. package/lib/schemas/metadata/Metadata.js.map +1 -1
  98. package/lib/schemas/metadata/{MetadataResolved.d.ts → MetadataEscaped.d.ts} +3 -3
  99. package/lib/schemas/metadata/{MetadataResolved.js → MetadataEscaped.js} +11 -11
  100. package/lib/schemas/metadata/MetadataEscaped.js.map +1 -0
  101. package/lib/tags/ExclusiveMaximum.d.ts +8 -0
  102. package/lib/tags/ExclusiveMaximum.js +3 -0
  103. package/lib/tags/ExclusiveMaximum.js.map +1 -0
  104. package/lib/tags/ExclusiveMinimum.d.ts +8 -0
  105. package/lib/tags/ExclusiveMinimum.js +3 -0
  106. package/lib/tags/ExclusiveMinimum.js.map +1 -0
  107. package/lib/tags/Format.d.ts +8 -0
  108. package/lib/tags/Format.js +3 -0
  109. package/lib/tags/Format.js.map +1 -0
  110. package/lib/tags/MaxItems.d.ts +8 -0
  111. package/lib/tags/MaxItems.js +3 -0
  112. package/lib/tags/MaxItems.js.map +1 -0
  113. package/lib/tags/MaxLength.d.ts +8 -0
  114. package/lib/tags/MaxLength.js +3 -0
  115. package/lib/tags/MaxLength.js.map +1 -0
  116. package/lib/tags/Maximum.d.ts +8 -0
  117. package/lib/tags/Maximum.js +3 -0
  118. package/lib/tags/Maximum.js.map +1 -0
  119. package/lib/tags/MinItems.d.ts +8 -0
  120. package/lib/tags/MinItems.js +3 -0
  121. package/lib/tags/MinItems.js.map +1 -0
  122. package/lib/tags/MinLength.d.ts +8 -0
  123. package/lib/tags/MinLength.js +3 -0
  124. package/lib/tags/MinLength.js.map +1 -0
  125. package/lib/tags/Minimum.d.ts +8 -0
  126. package/lib/tags/Minimum.js +3 -0
  127. package/lib/tags/Minimum.js.map +1 -0
  128. package/lib/tags/MultipleOf.d.ts +8 -0
  129. package/lib/tags/MultipleOf.js +3 -0
  130. package/lib/tags/MultipleOf.js.map +1 -0
  131. package/lib/tags/Pattern.d.ts +8 -0
  132. package/lib/tags/Pattern.js +3 -0
  133. package/lib/tags/Pattern.js.map +1 -0
  134. package/lib/tags/TagBase.d.ts +10 -0
  135. package/lib/tags/TagBase.js +3 -0
  136. package/lib/tags/TagBase.js.map +1 -0
  137. package/lib/tags/Type.d.ts +13 -0
  138. package/lib/tags/Type.js +3 -0
  139. package/lib/tags/Type.js.map +1 -0
  140. package/lib/tags/index.d.ts +12 -0
  141. package/lib/tags/index.js +29 -0
  142. package/lib/tags/index.js.map +1 -0
  143. package/lib/transformers/features/json/JsonApplicationTransformer.js +2 -2
  144. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  145. package/lib/transformers/features/misc/MetadataTransformer.js +1 -1
  146. package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
  147. package/lib/utils/RandomGenerator.js +3 -2
  148. package/lib/utils/RandomGenerator.js.map +1 -1
  149. package/package.json +2 -1
  150. package/src/Primitive.ts +135 -131
  151. package/src/Resolved.ts +116 -0
  152. package/src/factories/MetadataFactory.ts +46 -46
  153. package/src/factories/MetadataTagFactory.ts +366 -364
  154. package/src/factories/ProtobufFactory.ts +268 -266
  155. package/src/factories/internal/metadata/emend_metadata_atomics.ts +35 -33
  156. package/src/factories/internal/metadata/explore_metadata.ts +38 -38
  157. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +63 -59
  158. package/src/factories/internal/metadata/iterate_metadata_collection.ts +133 -133
  159. package/src/factories/internal/metadata/iterate_metadata_native.ts +210 -219
  160. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -49
  161. package/src/factories/internal/metadata/iterate_metadata_sort.ts +69 -69
  162. package/src/functional/$ProtobufWriter.ts +151 -151
  163. package/src/json.ts +648 -648
  164. package/src/misc.ts +651 -651
  165. package/src/module.ts +709 -708
  166. package/src/programmers/AssertProgrammer.ts +281 -279
  167. package/src/programmers/CheckerProgrammer.ts +1174 -1173
  168. package/src/programmers/IsProgrammer.ts +241 -239
  169. package/src/programmers/RandomProgrammer.ts +874 -578
  170. package/src/programmers/ValidateProgrammer.ts +307 -305
  171. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  172. package/src/programmers/helpers/FunctionImporeter.ts +91 -89
  173. package/src/programmers/helpers/ProtobufUtil.ts +29 -29
  174. package/src/programmers/helpers/StringifyPredicator.ts +12 -13
  175. package/src/programmers/helpers/disable_function_importer_declare.ts +32 -27
  176. package/src/programmers/internal/application_default_string.ts +37 -33
  177. package/src/programmers/internal/application_resolved.ts +55 -55
  178. package/src/programmers/internal/application_schema.ts +157 -157
  179. package/src/programmers/internal/metadata_to_pattern.ts +34 -34
  180. package/src/programmers/internal/stringify_dynamic_properties.ts +171 -171
  181. package/src/programmers/json/JsonStringifyProgrammer.ts +995 -987
  182. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +71 -71
  183. package/src/programmers/misc/MiscCloneProgrammer.ts +775 -587
  184. package/src/programmers/misc/MiscIsCloneProgrammer.ts +78 -78
  185. package/src/programmers/misc/MiscLiteralsProgrammer.ts +64 -64
  186. package/src/programmers/misc/MiscPruneProgrammer.ts +544 -542
  187. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +85 -85
  188. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +75 -66
  189. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +673 -669
  190. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +814 -814
  191. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +85 -75
  192. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +75 -75
  193. package/src/protobuf.ts +881 -249
  194. package/src/schemas/metadata/IMetadata.ts +27 -28
  195. package/src/schemas/metadata/IMetadataAtomic.ts +13 -0
  196. package/src/schemas/metadata/{IMetadataResolved.ts → IMetadataEscaped.ts} +6 -6
  197. package/src/schemas/metadata/Metadata.ts +643 -637
  198. package/src/schemas/metadata/{MetadataResolved.ts → MetadataEscaped.ts} +51 -51
  199. package/src/tags/ExclusiveMaximum.ts +8 -0
  200. package/src/tags/ExclusiveMinimum.ts +8 -0
  201. package/src/tags/Format.ts +29 -0
  202. package/src/tags/MaxItems.ts +8 -0
  203. package/src/tags/MaxLength.ts +8 -0
  204. package/src/tags/Maximum.ts +8 -0
  205. package/src/tags/MinItems.ts +8 -0
  206. package/src/tags/MinLength.ts +8 -0
  207. package/src/tags/Minimum.ts +8 -0
  208. package/src/tags/MultipleOf.ts +10 -0
  209. package/src/tags/Pattern.ts +8 -0
  210. package/src/tags/TagBase.ts +17 -0
  211. package/src/tags/Type.ts +30 -0
  212. package/src/tags/index.ts +12 -0
  213. package/src/transformers/features/json/JsonApplicationTransformer.ts +111 -111
  214. package/src/transformers/features/misc/MetadataTransformer.ts +53 -53
  215. package/src/utils/RandomGenerator.ts +83 -81
  216. package/lib/schemas/metadata/IMetadataResolved.js.map +0 -1
  217. package/lib/schemas/metadata/MetadataResolved.js.map +0 -1
@@ -1,38 +1,38 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../schemas/metadata/Metadata";
4
-
5
- import { MetadataCollection } from "../../MetadataCollection";
6
- import { MetadataFactory } from "../../MetadataFactory";
7
- import { emend_metadata_atomics } from "./emend_metadata_atomics";
8
- import { iterate_metadata } from "./iterate_metadata";
9
-
10
- export const explore_metadata =
11
- (checker: ts.TypeChecker) =>
12
- (options: MetadataFactory.IOptions) =>
13
- (collection: MetadataCollection) =>
14
- (
15
- type: ts.Type | null,
16
- parentResolved: boolean,
17
- aliased: boolean = false,
18
- ): Metadata => {
19
- // CONSTRUCT METADATA
20
- const meta: Metadata = Metadata.initialize(parentResolved);
21
- collection.entire_.add(meta);
22
-
23
- if (type === null) return meta;
24
-
25
- // ITERATE TYPESCRIPT TYPES
26
- iterate_metadata(checker)(options)(collection)(
27
- meta,
28
- type,
29
- parentResolved,
30
- aliased,
31
- );
32
- emend_metadata_atomics(meta);
33
- if (meta.resolved) {
34
- emend_metadata_atomics(meta.resolved.original);
35
- emend_metadata_atomics(meta.resolved.returns);
36
- }
37
- return meta;
38
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../schemas/metadata/Metadata";
4
+
5
+ import { MetadataCollection } from "../../MetadataCollection";
6
+ import { MetadataFactory } from "../../MetadataFactory";
7
+ import { emend_metadata_atomics } from "./emend_metadata_atomics";
8
+ import { iterate_metadata } from "./iterate_metadata";
9
+
10
+ export const explore_metadata =
11
+ (checker: ts.TypeChecker) =>
12
+ (options: MetadataFactory.IOptions) =>
13
+ (collection: MetadataCollection) =>
14
+ (
15
+ type: ts.Type | null,
16
+ parentResolved: boolean,
17
+ aliased: boolean = false,
18
+ ): Metadata => {
19
+ // CONSTRUCT METADATA
20
+ const meta: Metadata = Metadata.initialize(parentResolved);
21
+ collection.entire_.add(meta);
22
+
23
+ if (type === null) return meta;
24
+
25
+ // ITERATE TYPESCRIPT TYPES
26
+ iterate_metadata(checker)(options)(collection)(
27
+ meta,
28
+ type,
29
+ parentResolved,
30
+ aliased,
31
+ );
32
+ emend_metadata_atomics(meta);
33
+ if (meta.escaped) {
34
+ emend_metadata_atomics(meta.escaped.original);
35
+ emend_metadata_atomics(meta.escaped.returns);
36
+ }
37
+ return meta;
38
+ };
@@ -1,59 +1,63 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../schemas/metadata/Metadata";
4
-
5
- import { Atomic } from "../../../typings/Atomic";
6
-
7
- import { ArrayUtil } from "../../../utils/ArrayUtil";
8
-
9
- const same = (type: ts.Type | null) => {
10
- if (type === null) return () => false;
11
- return (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
12
- };
13
-
14
- export const iterate_metadata_atomic = (
15
- meta: Metadata,
16
- type: ts.Type,
17
- ): boolean => {
18
- // PREPARE INTERNAL FUNCTIONS
19
- const filter = same(type);
20
- const check = (info: IAtomicInfo) => {
21
- if (filter(info.atomic) || filter(info.literal)) {
22
- ArrayUtil.add(meta.atomics, info.name);
23
- return true;
24
- }
25
- return false;
26
- };
27
-
28
- // CHECK EACH TYPES
29
- return ATOMICS.some((info) => check(info));
30
- };
31
-
32
- const ATOMICS: IAtomicInfo[] = [
33
- {
34
- name: "boolean",
35
- atomic: ts.TypeFlags.BooleanLike,
36
- literal: ts.TypeFlags.BooleanLiteral,
37
- },
38
- {
39
- name: "number",
40
- atomic: ts.TypeFlags.NumberLike,
41
- literal: ts.TypeFlags.NumberLiteral,
42
- },
43
- {
44
- name: "bigint",
45
- atomic: ts.TypeFlags.BigInt,
46
- literal: ts.TypeFlags.BigIntLiteral,
47
- },
48
- {
49
- name: "string",
50
- atomic: ts.TypeFlags.StringLike,
51
- literal: ts.TypeFlags.StringLiteral,
52
- },
53
- ];
54
-
55
- interface IAtomicInfo {
56
- name: Atomic.Literal;
57
- atomic: ts.TypeFlags;
58
- literal: ts.TypeFlags;
59
- }
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../schemas/metadata/Metadata";
4
+
5
+ import { Atomic } from "../../../typings/Atomic";
6
+
7
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
8
+
9
+ const same = (type: ts.Type | null) => {
10
+ if (type === null) return () => false;
11
+ return (flag: ts.TypeFlags) => (type.getFlags() & flag) !== 0;
12
+ };
13
+
14
+ export const iterate_metadata_atomic = (
15
+ meta: Metadata,
16
+ type: ts.Type,
17
+ ): boolean => {
18
+ // PREPARE INTERNAL FUNCTIONS
19
+ const filter = same(type);
20
+ const check = (info: IAtomicInfo) => {
21
+ if (filter(info.atomic) || filter(info.literal)) {
22
+ ArrayUtil.add(
23
+ meta.atomics,
24
+ { type: info.name, tags: [] },
25
+ (x, y) => x.type === y.type,
26
+ );
27
+ return true;
28
+ }
29
+ return false;
30
+ };
31
+
32
+ // CHECK EACH TYPES
33
+ return ATOMICS.some((info) => check(info));
34
+ };
35
+
36
+ const ATOMICS: IAtomicInfo[] = [
37
+ {
38
+ name: "boolean",
39
+ atomic: ts.TypeFlags.BooleanLike,
40
+ literal: ts.TypeFlags.BooleanLiteral,
41
+ },
42
+ {
43
+ name: "number",
44
+ atomic: ts.TypeFlags.NumberLike,
45
+ literal: ts.TypeFlags.NumberLiteral,
46
+ },
47
+ {
48
+ name: "bigint",
49
+ atomic: ts.TypeFlags.BigInt,
50
+ literal: ts.TypeFlags.BigIntLiteral,
51
+ },
52
+ {
53
+ name: "string",
54
+ atomic: ts.TypeFlags.StringLike,
55
+ literal: ts.TypeFlags.StringLiteral,
56
+ },
57
+ ];
58
+
59
+ interface IAtomicInfo {
60
+ name: Atomic.Literal;
61
+ atomic: ts.TypeFlags;
62
+ literal: ts.TypeFlags;
63
+ }
@@ -1,133 +1,133 @@
1
- import { Metadata } from "../../../schemas/metadata/Metadata";
2
- import { MetadataArray } from "../../../schemas/metadata/MetadataArray";
3
- import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
4
- import { MetadataTuple } from "../../../schemas/metadata/MetadataTuple";
5
-
6
- import { MetadataCollection } from "../../MetadataCollection";
7
- import { iterate_metadata_tag } from "./iterate_metadata_tag";
8
-
9
- export const iterate_metadata_collection = (
10
- collection: MetadataCollection,
11
- ): void => {
12
- for (const array of collection.arrays())
13
- if (array.recursive === null)
14
- collection.setArrayRecursive(
15
- array,
16
- isArrayRecursive(new Set())(array)(array.value),
17
- );
18
- for (const tuple of collection.tuples())
19
- if (tuple.recursive === null) {
20
- const visited: Set<Metadata> = new Set();
21
- collection.setTupleRecursive(
22
- tuple,
23
- tuple.elements.some(isTupleRecursive(visited)(tuple)),
24
- );
25
- }
26
- for (const obj of collection.objects()) {
27
- iterate_metadata_tag(obj);
28
- if (obj.recursive === null) {
29
- const visited: Set<Metadata> = new Set();
30
- collection.setObjectRecursive(
31
- obj,
32
- obj.properties.some((p) =>
33
- isObjectRecursive(visited)(obj)(p.value),
34
- ),
35
- );
36
- }
37
- }
38
- };
39
-
40
- const isArrayRecursive =
41
- (visited: Set<Metadata>) =>
42
- (array: MetadataArray) =>
43
- (meta: Metadata): boolean => {
44
- if (visited.has(meta)) return false;
45
- visited.add(meta);
46
-
47
- return (
48
- meta.arrays.some(
49
- (a) => a === array || isArrayRecursive(visited)(array)(a.value),
50
- ) ||
51
- meta.aliases.some((alias) =>
52
- isArrayRecursive(visited)(array)(alias.value),
53
- ) ||
54
- meta.tuples.some(
55
- (t) =>
56
- !t.recursive &&
57
- t.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.resolved !== null &&
62
- isArrayRecursive(visited)(array)(meta.resolved.returns)) ||
63
- (meta.rest !== null && isArrayRecursive(visited)(array)(meta.rest))
64
- );
65
- };
66
-
67
- const isTupleRecursive =
68
- (visited: Set<Metadata>) =>
69
- (tuple: MetadataTuple) =>
70
- (meta: Metadata): boolean => {
71
- if (visited.has(meta)) return false;
72
- visited.add(meta);
73
-
74
- return (
75
- meta.tuples.some(
76
- (t) =>
77
- t === tuple ||
78
- t.elements.some((e) => isTupleRecursive(visited)(tuple)(e)),
79
- ) ||
80
- meta.arrays.some(
81
- (a) =>
82
- !a.recursive && isTupleRecursive(visited)(tuple)(a.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.resolved !== null &&
90
- isTupleRecursive(visited)(tuple)(meta.resolved.returns)) ||
91
- (meta.rest !== null && isTupleRecursive(visited)(tuple)(meta.rest))
92
- );
93
- };
94
-
95
- const isObjectRecursive =
96
- (visited: Set<Metadata>) =>
97
- (obj: MetadataObject) =>
98
- (meta: Metadata): boolean => {
99
- if (visited.has(meta)) return false;
100
-
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.recursive &&
116
- isObjectRecursive(visited)(obj)(array.value),
117
- ) ||
118
- meta.tuples.some(
119
- (tuple) =>
120
- !tuple.recursive &&
121
- tuple.elements.some((elem) =>
122
- isObjectRecursive(visited)(obj)(elem),
123
- ),
124
- ) ||
125
- meta.maps.some((map) =>
126
- isObjectRecursive(visited)(obj)(map.value),
127
- ) ||
128
- meta.sets.some((value) => isObjectRecursive(visited)(obj)(value)) ||
129
- (meta.resolved !== null &&
130
- isObjectRecursive(visited)(obj)(meta.resolved.returns)) ||
131
- (meta.rest !== null && isObjectRecursive(visited)(obj)(meta.rest))
132
- );
133
- };
1
+ import { Metadata } from "../../../schemas/metadata/Metadata";
2
+ import { MetadataArray } from "../../../schemas/metadata/MetadataArray";
3
+ import { MetadataObject } from "../../../schemas/metadata/MetadataObject";
4
+ import { MetadataTuple } from "../../../schemas/metadata/MetadataTuple";
5
+
6
+ import { MetadataCollection } from "../../MetadataCollection";
7
+ import { iterate_metadata_tag } from "./iterate_metadata_tag";
8
+
9
+ export const iterate_metadata_collection = (
10
+ collection: MetadataCollection,
11
+ ): void => {
12
+ for (const array of collection.arrays())
13
+ if (array.recursive === null)
14
+ collection.setArrayRecursive(
15
+ array,
16
+ isArrayRecursive(new Set())(array)(array.value),
17
+ );
18
+ for (const tuple of collection.tuples())
19
+ if (tuple.recursive === null) {
20
+ const visited: Set<Metadata> = new Set();
21
+ collection.setTupleRecursive(
22
+ tuple,
23
+ tuple.elements.some(isTupleRecursive(visited)(tuple)),
24
+ );
25
+ }
26
+ for (const obj of collection.objects()) {
27
+ iterate_metadata_tag(obj);
28
+ if (obj.recursive === null) {
29
+ const visited: Set<Metadata> = new Set();
30
+ collection.setObjectRecursive(
31
+ obj,
32
+ obj.properties.some((p) =>
33
+ isObjectRecursive(visited)(obj)(p.value),
34
+ ),
35
+ );
36
+ }
37
+ }
38
+ };
39
+
40
+ const isArrayRecursive =
41
+ (visited: Set<Metadata>) =>
42
+ (array: MetadataArray) =>
43
+ (meta: Metadata): boolean => {
44
+ if (visited.has(meta)) return false;
45
+ visited.add(meta);
46
+
47
+ return (
48
+ meta.arrays.some(
49
+ (a) => a === array || isArrayRecursive(visited)(array)(a.value),
50
+ ) ||
51
+ meta.aliases.some((alias) =>
52
+ isArrayRecursive(visited)(array)(alias.value),
53
+ ) ||
54
+ meta.tuples.some(
55
+ (t) =>
56
+ !t.recursive &&
57
+ t.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
+ };
66
+
67
+ const isTupleRecursive =
68
+ (visited: Set<Metadata>) =>
69
+ (tuple: MetadataTuple) =>
70
+ (meta: Metadata): boolean => {
71
+ if (visited.has(meta)) return false;
72
+ visited.add(meta);
73
+
74
+ return (
75
+ meta.tuples.some(
76
+ (t) =>
77
+ t === tuple ||
78
+ t.elements.some((e) => isTupleRecursive(visited)(tuple)(e)),
79
+ ) ||
80
+ meta.arrays.some(
81
+ (a) =>
82
+ !a.recursive && isTupleRecursive(visited)(tuple)(a.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
+ };
94
+
95
+ const isObjectRecursive =
96
+ (visited: Set<Metadata>) =>
97
+ (obj: MetadataObject) =>
98
+ (meta: Metadata): boolean => {
99
+ if (visited.has(meta)) return false;
100
+
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.recursive &&
116
+ isObjectRecursive(visited)(obj)(array.value),
117
+ ) ||
118
+ meta.tuples.some(
119
+ (tuple) =>
120
+ !tuple.recursive &&
121
+ tuple.elements.some((elem) =>
122
+ isObjectRecursive(visited)(obj)(elem),
123
+ ),
124
+ ) ||
125
+ meta.maps.some((map) =>
126
+ isObjectRecursive(visited)(obj)(map.value),
127
+ ) ||
128
+ meta.sets.some((value) => isObjectRecursive(visited)(obj)(value)) ||
129
+ (meta.escaped !== null &&
130
+ isObjectRecursive(visited)(obj)(meta.escaped.returns)) ||
131
+ (meta.rest !== null && isObjectRecursive(visited)(obj)(meta.rest))
132
+ );
133
+ };