typia 4.0.10-dev.20230615 → 4.0.10-dev.20230616
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/MetadataTagFactory.js +3 -3
- package/lib/factories/MetadataTagFactory.js.map +1 -1
- package/lib/factories/internal/metadata/explore_metadata.js +4 -2
- package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_collection.js +3 -3
- package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_resolve.js +9 -3
- package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_sort.js +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
- package/lib/metadata/IMetadata.d.ts +2 -1
- package/lib/metadata/IMetadataResolved.d.ts +5 -0
- package/lib/metadata/IMetadataResolved.js +3 -0
- package/lib/metadata/IMetadataResolved.js.map +1 -0
- package/lib/metadata/Metadata.d.ts +2 -1
- package/lib/metadata/Metadata.js +31 -24
- package/lib/metadata/Metadata.js.map +1 -1
- package/lib/metadata/MetadataArray.d.ts +4 -2
- package/lib/metadata/MetadataArray.js.map +1 -1
- package/lib/metadata/MetadataResolved.d.ts +12 -0
- package/lib/metadata/MetadataResolved.js +31 -0
- package/lib/metadata/MetadataResolved.js.map +1 -0
- package/lib/programmers/CloneProgrammer.js +1 -1
- package/lib/programmers/CloneProgrammer.js.map +1 -1
- package/lib/programmers/RandomProgrammer.js +1 -1
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/StringifyProgrammer.js +1 -1
- package/lib/programmers/StringifyProgrammer.js.map +1 -1
- package/lib/programmers/helpers/StringifyPredicator.js +1 -1
- package/lib/programmers/helpers/StringifyPredicator.js.map +1 -1
- package/lib/programmers/internal/application_resolved.d.ts +4 -0
- package/lib/programmers/internal/application_resolved.js +50 -0
- package/lib/programmers/internal/application_resolved.js.map +1 -0
- package/lib/programmers/internal/application_schema.js +28 -5
- package/lib/programmers/internal/application_schema.js.map +1 -1
- package/lib/transformers/features/miscellaneous/MetadataTransformer.js +1 -1
- package/lib/transformers/features/miscellaneous/MetadataTransformer.js.map +1 -1
- package/package.json +1 -1
- package/src/factories/MetadataTagFactory.ts +3 -3
- package/src/factories/internal/metadata/emend_metadata_atomics.ts +33 -33
- package/src/factories/internal/metadata/explore_metadata.ts +40 -37
- package/src/factories/internal/metadata/iterate_metadata.ts +85 -85
- package/src/factories/internal/metadata/iterate_metadata_alias.ts +30 -30
- package/src/factories/internal/metadata/iterate_metadata_collection.ts +3 -3
- package/src/factories/internal/metadata/iterate_metadata_intersection.ts +87 -87
- package/src/factories/internal/metadata/iterate_metadata_resolve.ts +49 -38
- package/src/factories/internal/metadata/iterate_metadata_sort.ts +2 -1
- package/src/factories/internal/metadata/iterate_metadata_union.ts +24 -24
- package/src/metadata/IMetadata.ts +2 -1
- package/src/metadata/IMetadataResolved.ts +6 -0
- package/src/metadata/Metadata.ts +17 -4
- package/src/metadata/MetadataArray.ts +4 -1
- package/src/metadata/MetadataResolved.ts +51 -0
- package/src/programmers/CloneProgrammer.ts +1 -1
- package/src/programmers/RandomProgrammer.ts +5 -1
- package/src/programmers/StringifyProgrammer.ts +983 -983
- package/src/programmers/helpers/PruneJoiner.ts +143 -143
- package/src/programmers/helpers/StringifyPredicator.ts +1 -1
- package/src/programmers/internal/application_resolved.ts +55 -0
- package/src/programmers/internal/application_schema.ts +7 -6
- package/src/transformers/features/miscellaneous/MetadataTransformer.ts +1 -1
|
@@ -1,37 +1,40 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { Metadata } from "../../../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
|
-
const out = (meta: Metadata) => {
|
|
22
|
-
if (options.validate) options.validate(meta);
|
|
23
|
-
return meta;
|
|
24
|
-
};
|
|
25
|
-
if (type === null) return out(meta);
|
|
26
|
-
|
|
27
|
-
// ITERATE TYPESCRIPT TYPES
|
|
28
|
-
iterate_metadata(checker)(options)(collection)(
|
|
29
|
-
meta,
|
|
30
|
-
type,
|
|
31
|
-
parentResolved,
|
|
32
|
-
aliased,
|
|
33
|
-
);
|
|
34
|
-
emend_metadata_atomics(meta);
|
|
35
|
-
if (meta.resolved)
|
|
36
|
-
|
|
37
|
-
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
|
|
3
|
+
import { Metadata } from "../../../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
|
+
const out = (meta: Metadata) => {
|
|
22
|
+
if (options.validate) options.validate(meta);
|
|
23
|
+
return meta;
|
|
24
|
+
};
|
|
25
|
+
if (type === null) return out(meta);
|
|
26
|
+
|
|
27
|
+
// ITERATE TYPESCRIPT TYPES
|
|
28
|
+
iterate_metadata(checker)(options)(collection)(
|
|
29
|
+
meta,
|
|
30
|
+
type,
|
|
31
|
+
parentResolved,
|
|
32
|
+
aliased,
|
|
33
|
+
);
|
|
34
|
+
emend_metadata_atomics(meta);
|
|
35
|
+
if (meta.resolved) {
|
|
36
|
+
emend_metadata_atomics(meta.resolved.original);
|
|
37
|
+
emend_metadata_atomics(meta.resolved.returns);
|
|
38
|
+
}
|
|
39
|
+
return out(meta);
|
|
40
|
+
};
|
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { Metadata } from "../../../metadata/Metadata";
|
|
4
|
-
|
|
5
|
-
// import { ArrayUtil } from "../../../utils/ArrayUtil";
|
|
6
|
-
import { MetadataCollection } from "../../MetadataCollection";
|
|
7
|
-
import { MetadataFactory } from "../../MetadataFactory";
|
|
8
|
-
import { iterate_metadata_alias } from "./iterate_metadata_alias";
|
|
9
|
-
import { iterate_metadata_array } from "./iterate_metadata_array";
|
|
10
|
-
import { iterate_metadata_atomic } from "./iterate_metadata_atomic";
|
|
11
|
-
import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
|
|
12
|
-
import { iterate_metadata_constant } from "./iterate_metadata_constant";
|
|
13
|
-
import { iterate_metadata_intersection } from "./iterate_metadata_intersection";
|
|
14
|
-
import { iterate_metadata_map } from "./iterate_metadata_map";
|
|
15
|
-
import { iterate_metadata_native } from "./iterate_metadata_native";
|
|
16
|
-
import { iterate_metadata_object } from "./iterate_metadata_object";
|
|
17
|
-
import { iterate_metadata_resolve } from "./iterate_metadata_resolve";
|
|
18
|
-
import { iterate_metadata_set } from "./iterate_metadata_set";
|
|
19
|
-
import { iterate_metadata_template } from "./iterate_metadata_template";
|
|
20
|
-
import { iterate_metadata_tuple } from "./iterate_metadata_tuple";
|
|
21
|
-
import { iterate_metadata_union } from "./iterate_metadata_union";
|
|
22
|
-
|
|
23
|
-
export const iterate_metadata =
|
|
24
|
-
(checker: ts.TypeChecker) =>
|
|
25
|
-
(options: MetadataFactory.IOptions) =>
|
|
26
|
-
(collection: MetadataCollection) =>
|
|
27
|
-
(
|
|
28
|
-
meta: Metadata,
|
|
29
|
-
type: ts.Type,
|
|
30
|
-
resolved: boolean,
|
|
31
|
-
aliased: boolean,
|
|
32
|
-
): void => {
|
|
33
|
-
if (type.isTypeParameter() === true)
|
|
34
|
-
throw new Error(
|
|
35
|
-
`Error on typia.MetadataFactory.generate(): non-specified generic argument on ${meta.getName()}.`,
|
|
36
|
-
);
|
|
37
|
-
// CHECK SPECIAL CASES
|
|
38
|
-
if (
|
|
39
|
-
(aliased !== true &&
|
|
40
|
-
iterate_metadata_alias(checker)(options)(collection)(
|
|
41
|
-
meta,
|
|
42
|
-
type,
|
|
43
|
-
)) ||
|
|
44
|
-
iterate_metadata_intersection(checker)(options)(collection)(
|
|
45
|
-
meta,
|
|
46
|
-
type,
|
|
47
|
-
resolved,
|
|
48
|
-
aliased,
|
|
49
|
-
) ||
|
|
50
|
-
iterate_metadata_union(checker)(options)(collection)(
|
|
51
|
-
meta,
|
|
52
|
-
type,
|
|
53
|
-
resolved,
|
|
54
|
-
) ||
|
|
55
|
-
iterate_metadata_resolve(checker)(options)(collection)(
|
|
56
|
-
meta,
|
|
57
|
-
type,
|
|
58
|
-
resolved,
|
|
59
|
-
aliased,
|
|
60
|
-
)
|
|
61
|
-
)
|
|
62
|
-
return;
|
|
63
|
-
|
|
64
|
-
// ITERATE CASES
|
|
65
|
-
iterate_metadata_coalesce(meta, type) ||
|
|
66
|
-
iterate_metadata_constant(checker)(options)(meta, type) ||
|
|
67
|
-
iterate_metadata_template(checker)(options)(collection)(
|
|
68
|
-
meta,
|
|
69
|
-
type,
|
|
70
|
-
) ||
|
|
71
|
-
iterate_metadata_atomic(meta, type) ||
|
|
72
|
-
iterate_metadata_tuple(checker)(options)(collection)(
|
|
73
|
-
meta,
|
|
74
|
-
type as ts.TupleType,
|
|
75
|
-
) ||
|
|
76
|
-
iterate_metadata_array(checker)(options)(collection)(meta, type) ||
|
|
77
|
-
iterate_metadata_native(checker)(meta, type) ||
|
|
78
|
-
iterate_metadata_map(checker)(options)(collection)(meta, type) ||
|
|
79
|
-
iterate_metadata_set(checker)(options)(collection)(meta, type) ||
|
|
80
|
-
iterate_metadata_object(checker)(options)(collection)(
|
|
81
|
-
meta,
|
|
82
|
-
type,
|
|
83
|
-
resolved,
|
|
84
|
-
);
|
|
85
|
-
};
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
|
|
3
|
+
import { Metadata } from "../../../metadata/Metadata";
|
|
4
|
+
|
|
5
|
+
// import { ArrayUtil } from "../../../utils/ArrayUtil";
|
|
6
|
+
import { MetadataCollection } from "../../MetadataCollection";
|
|
7
|
+
import { MetadataFactory } from "../../MetadataFactory";
|
|
8
|
+
import { iterate_metadata_alias } from "./iterate_metadata_alias";
|
|
9
|
+
import { iterate_metadata_array } from "./iterate_metadata_array";
|
|
10
|
+
import { iterate_metadata_atomic } from "./iterate_metadata_atomic";
|
|
11
|
+
import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
|
|
12
|
+
import { iterate_metadata_constant } from "./iterate_metadata_constant";
|
|
13
|
+
import { iterate_metadata_intersection } from "./iterate_metadata_intersection";
|
|
14
|
+
import { iterate_metadata_map } from "./iterate_metadata_map";
|
|
15
|
+
import { iterate_metadata_native } from "./iterate_metadata_native";
|
|
16
|
+
import { iterate_metadata_object } from "./iterate_metadata_object";
|
|
17
|
+
import { iterate_metadata_resolve } from "./iterate_metadata_resolve";
|
|
18
|
+
import { iterate_metadata_set } from "./iterate_metadata_set";
|
|
19
|
+
import { iterate_metadata_template } from "./iterate_metadata_template";
|
|
20
|
+
import { iterate_metadata_tuple } from "./iterate_metadata_tuple";
|
|
21
|
+
import { iterate_metadata_union } from "./iterate_metadata_union";
|
|
22
|
+
|
|
23
|
+
export const iterate_metadata =
|
|
24
|
+
(checker: ts.TypeChecker) =>
|
|
25
|
+
(options: MetadataFactory.IOptions) =>
|
|
26
|
+
(collection: MetadataCollection) =>
|
|
27
|
+
(
|
|
28
|
+
meta: Metadata,
|
|
29
|
+
type: ts.Type,
|
|
30
|
+
resolved: boolean,
|
|
31
|
+
aliased: boolean,
|
|
32
|
+
): void => {
|
|
33
|
+
if (type.isTypeParameter() === true)
|
|
34
|
+
throw new Error(
|
|
35
|
+
`Error on typia.MetadataFactory.generate(): non-specified generic argument on ${meta.getName()}.`,
|
|
36
|
+
);
|
|
37
|
+
// CHECK SPECIAL CASES
|
|
38
|
+
if (
|
|
39
|
+
(aliased !== true &&
|
|
40
|
+
iterate_metadata_alias(checker)(options)(collection)(
|
|
41
|
+
meta,
|
|
42
|
+
type,
|
|
43
|
+
)) ||
|
|
44
|
+
iterate_metadata_intersection(checker)(options)(collection)(
|
|
45
|
+
meta,
|
|
46
|
+
type,
|
|
47
|
+
resolved,
|
|
48
|
+
aliased,
|
|
49
|
+
) ||
|
|
50
|
+
iterate_metadata_union(checker)(options)(collection)(
|
|
51
|
+
meta,
|
|
52
|
+
type,
|
|
53
|
+
resolved,
|
|
54
|
+
) ||
|
|
55
|
+
iterate_metadata_resolve(checker)(options)(collection)(
|
|
56
|
+
meta,
|
|
57
|
+
type,
|
|
58
|
+
resolved,
|
|
59
|
+
aliased,
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
return;
|
|
63
|
+
|
|
64
|
+
// ITERATE CASES
|
|
65
|
+
iterate_metadata_coalesce(meta, type) ||
|
|
66
|
+
iterate_metadata_constant(checker)(options)(meta, type) ||
|
|
67
|
+
iterate_metadata_template(checker)(options)(collection)(
|
|
68
|
+
meta,
|
|
69
|
+
type,
|
|
70
|
+
) ||
|
|
71
|
+
iterate_metadata_atomic(meta, type) ||
|
|
72
|
+
iterate_metadata_tuple(checker)(options)(collection)(
|
|
73
|
+
meta,
|
|
74
|
+
type as ts.TupleType,
|
|
75
|
+
) ||
|
|
76
|
+
iterate_metadata_array(checker)(options)(collection)(meta, type) ||
|
|
77
|
+
iterate_metadata_native(checker)(meta, type) ||
|
|
78
|
+
iterate_metadata_map(checker)(options)(collection)(meta, type) ||
|
|
79
|
+
iterate_metadata_set(checker)(options)(collection)(meta, type) ||
|
|
80
|
+
iterate_metadata_object(checker)(options)(collection)(
|
|
81
|
+
meta,
|
|
82
|
+
type,
|
|
83
|
+
resolved,
|
|
84
|
+
);
|
|
85
|
+
};
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { Metadata } from "../../../metadata/Metadata";
|
|
4
|
-
import { MetadataAlias } from "../../../metadata/MetadataAlias";
|
|
5
|
-
|
|
6
|
-
import { ArrayUtil } from "../../../utils/ArrayUtil";
|
|
7
|
-
|
|
8
|
-
import { MetadataCollection } from "../../MetadataCollection";
|
|
9
|
-
import { MetadataFactory } from "../../MetadataFactory";
|
|
10
|
-
import { emplace_metadata_definition } from "./emplace_metadata_definition";
|
|
11
|
-
|
|
12
|
-
export const iterate_metadata_alias =
|
|
13
|
-
(checker: ts.TypeChecker) =>
|
|
14
|
-
(options: MetadataFactory.IOptions) =>
|
|
15
|
-
(collection: MetadataCollection) =>
|
|
16
|
-
(meta: Metadata, type: ts.Type): boolean => {
|
|
17
|
-
if (options.absorb !== false || type.aliasSymbol === undefined)
|
|
18
|
-
return false;
|
|
19
|
-
|
|
20
|
-
const node: ts.Declaration | undefined =
|
|
21
|
-
type.aliasSymbol.declarations?.[0];
|
|
22
|
-
if (node === undefined) return false;
|
|
23
|
-
|
|
24
|
-
// CONSTRUCT DEFINITION
|
|
25
|
-
const alias: MetadataAlias = emplace_metadata_definition(checker)(
|
|
26
|
-
options,
|
|
27
|
-
)(collection)(type, meta.nullable);
|
|
28
|
-
ArrayUtil.add(meta.aliases, alias, (elem) => elem.name === alias.name);
|
|
29
|
-
return true;
|
|
30
|
-
};
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
|
|
3
|
+
import { Metadata } from "../../../metadata/Metadata";
|
|
4
|
+
import { MetadataAlias } from "../../../metadata/MetadataAlias";
|
|
5
|
+
|
|
6
|
+
import { ArrayUtil } from "../../../utils/ArrayUtil";
|
|
7
|
+
|
|
8
|
+
import { MetadataCollection } from "../../MetadataCollection";
|
|
9
|
+
import { MetadataFactory } from "../../MetadataFactory";
|
|
10
|
+
import { emplace_metadata_definition } from "./emplace_metadata_definition";
|
|
11
|
+
|
|
12
|
+
export const iterate_metadata_alias =
|
|
13
|
+
(checker: ts.TypeChecker) =>
|
|
14
|
+
(options: MetadataFactory.IOptions) =>
|
|
15
|
+
(collection: MetadataCollection) =>
|
|
16
|
+
(meta: Metadata, type: ts.Type): boolean => {
|
|
17
|
+
if (options.absorb !== false || type.aliasSymbol === undefined)
|
|
18
|
+
return false;
|
|
19
|
+
|
|
20
|
+
const node: ts.Declaration | undefined =
|
|
21
|
+
type.aliasSymbol.declarations?.[0];
|
|
22
|
+
if (node === undefined) return false;
|
|
23
|
+
|
|
24
|
+
// CONSTRUCT DEFINITION
|
|
25
|
+
const alias: MetadataAlias = emplace_metadata_definition(checker)(
|
|
26
|
+
options,
|
|
27
|
+
)(collection)(type, meta.nullable);
|
|
28
|
+
ArrayUtil.add(meta.aliases, alias, (elem) => elem.name === alias.name);
|
|
29
|
+
return true;
|
|
30
|
+
};
|
|
@@ -56,7 +56,7 @@ const isArrayRecursive =
|
|
|
56
56
|
meta.maps.some((m) => isArrayRecursive(visited)(array)(m.value)) ||
|
|
57
57
|
meta.sets.some((s) => isArrayRecursive(visited)(array)(s)) ||
|
|
58
58
|
(meta.resolved !== null &&
|
|
59
|
-
isArrayRecursive(visited)(array)(meta.resolved)) ||
|
|
59
|
+
isArrayRecursive(visited)(array)(meta.resolved.returns)) ||
|
|
60
60
|
(meta.rest !== null && isArrayRecursive(visited)(array)(meta.rest))
|
|
61
61
|
);
|
|
62
62
|
};
|
|
@@ -84,7 +84,7 @@ const isTupleRecursive =
|
|
|
84
84
|
isTupleRecursive(visited)(tuple)(d.value),
|
|
85
85
|
) ||
|
|
86
86
|
(meta.resolved !== null &&
|
|
87
|
-
isTupleRecursive(visited)(tuple)(meta.resolved)) ||
|
|
87
|
+
isTupleRecursive(visited)(tuple)(meta.resolved.returns)) ||
|
|
88
88
|
(meta.rest !== null && isTupleRecursive(visited)(tuple)(meta.rest))
|
|
89
89
|
);
|
|
90
90
|
};
|
|
@@ -124,7 +124,7 @@ const isObjectRecursive =
|
|
|
124
124
|
) ||
|
|
125
125
|
meta.sets.some((value) => isObjectRecursive(visited)(obj)(value)) ||
|
|
126
126
|
(meta.resolved !== null &&
|
|
127
|
-
isObjectRecursive(visited)(obj)(meta.resolved)) ||
|
|
127
|
+
isObjectRecursive(visited)(obj)(meta.resolved.returns)) ||
|
|
128
128
|
(meta.rest !== null && isObjectRecursive(visited)(obj)(meta.rest))
|
|
129
129
|
);
|
|
130
130
|
};
|
|
@@ -1,87 +1,87 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { Metadata } from "../../../metadata/Metadata";
|
|
4
|
-
|
|
5
|
-
import { MetadataCollection } from "../../MetadataCollection";
|
|
6
|
-
import { MetadataFactory } from "../../MetadataFactory";
|
|
7
|
-
import { explore_metadata } from "./explore_metadata";
|
|
8
|
-
import { iterate_metadata } from "./iterate_metadata";
|
|
9
|
-
import { iterate_metadata_object } from "./iterate_metadata_object";
|
|
10
|
-
|
|
11
|
-
export const iterate_metadata_intersection =
|
|
12
|
-
(checker: ts.TypeChecker) =>
|
|
13
|
-
(options: MetadataFactory.IOptions) =>
|
|
14
|
-
(collection: MetadataCollection) =>
|
|
15
|
-
(
|
|
16
|
-
meta: Metadata,
|
|
17
|
-
type: ts.Type,
|
|
18
|
-
resolved: boolean,
|
|
19
|
-
aliased: boolean,
|
|
20
|
-
): boolean => {
|
|
21
|
-
if (!type.isIntersection()) return false;
|
|
22
|
-
|
|
23
|
-
// COSTRUCT FAKE METADATA LIST
|
|
24
|
-
const fakeCollection: MetadataCollection = new MetadataCollection();
|
|
25
|
-
const children: Metadata[] = [
|
|
26
|
-
...new Map(
|
|
27
|
-
type.types.map((t) => {
|
|
28
|
-
const m: Metadata = explore_metadata(checker)({
|
|
29
|
-
...options,
|
|
30
|
-
absorb: true,
|
|
31
|
-
})(fakeCollection)(t, resolved);
|
|
32
|
-
return [m.getName(), m] as const;
|
|
33
|
-
}),
|
|
34
|
-
).values(),
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
// ONLY ONE CHILD AFTER REMOVING DUPLICATES
|
|
38
|
-
if (children.length === 1) {
|
|
39
|
-
iterate_metadata(checker)(options)(collection)(
|
|
40
|
-
meta,
|
|
41
|
-
type.types[0]!,
|
|
42
|
-
resolved,
|
|
43
|
-
aliased,
|
|
44
|
-
);
|
|
45
|
-
return true;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// ONLY OBJECT TYPES -> MERGE
|
|
49
|
-
const object: boolean = children.every(
|
|
50
|
-
(c) => c.objects.length && c.objects.length === c.size(),
|
|
51
|
-
);
|
|
52
|
-
if (object)
|
|
53
|
-
return iterate_metadata_object(checker)(options)(collection)(
|
|
54
|
-
meta,
|
|
55
|
-
type,
|
|
56
|
-
resolved,
|
|
57
|
-
true,
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
// ABSORB TO ATOMIC (OR CONSTANT) TYPE
|
|
61
|
-
const atomics: Metadata[] = children.filter(
|
|
62
|
-
(c) =>
|
|
63
|
-
(c.atomics.length ? 1 : 0 + c.constants.length ? 1 : 0) ===
|
|
64
|
-
c.bucket(),
|
|
65
|
-
);
|
|
66
|
-
const objects: Metadata[] = children.filter(
|
|
67
|
-
(c) => c.objects.length && c.objects.length === c.size(),
|
|
68
|
-
);
|
|
69
|
-
if (
|
|
70
|
-
atomics.length === 0 ||
|
|
71
|
-
atomics.length + objects.length !== children.length
|
|
72
|
-
)
|
|
73
|
-
throw new Error(message(children));
|
|
74
|
-
|
|
75
|
-
const least: Metadata = atomics.reduce((x, y) => {
|
|
76
|
-
if (Metadata.covers(x, y)) return y;
|
|
77
|
-
else if (Metadata.covers(y, x)) return x;
|
|
78
|
-
throw new Error(message(children));
|
|
79
|
-
});
|
|
80
|
-
Object.assign(meta, Metadata.merge(meta, least));
|
|
81
|
-
return true;
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
const message = (children: Metadata[]) =>
|
|
85
|
-
`Error on typia.MetadataFactory.analyze(): nonsensible intersection type detected - ${children
|
|
86
|
-
.map((c) => c.getName())
|
|
87
|
-
.join(" & ")}.`;
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
|
|
3
|
+
import { Metadata } from "../../../metadata/Metadata";
|
|
4
|
+
|
|
5
|
+
import { MetadataCollection } from "../../MetadataCollection";
|
|
6
|
+
import { MetadataFactory } from "../../MetadataFactory";
|
|
7
|
+
import { explore_metadata } from "./explore_metadata";
|
|
8
|
+
import { iterate_metadata } from "./iterate_metadata";
|
|
9
|
+
import { iterate_metadata_object } from "./iterate_metadata_object";
|
|
10
|
+
|
|
11
|
+
export const iterate_metadata_intersection =
|
|
12
|
+
(checker: ts.TypeChecker) =>
|
|
13
|
+
(options: MetadataFactory.IOptions) =>
|
|
14
|
+
(collection: MetadataCollection) =>
|
|
15
|
+
(
|
|
16
|
+
meta: Metadata,
|
|
17
|
+
type: ts.Type,
|
|
18
|
+
resolved: boolean,
|
|
19
|
+
aliased: boolean,
|
|
20
|
+
): boolean => {
|
|
21
|
+
if (!type.isIntersection()) return false;
|
|
22
|
+
|
|
23
|
+
// COSTRUCT FAKE METADATA LIST
|
|
24
|
+
const fakeCollection: MetadataCollection = new MetadataCollection();
|
|
25
|
+
const children: Metadata[] = [
|
|
26
|
+
...new Map(
|
|
27
|
+
type.types.map((t) => {
|
|
28
|
+
const m: Metadata = explore_metadata(checker)({
|
|
29
|
+
...options,
|
|
30
|
+
absorb: true,
|
|
31
|
+
})(fakeCollection)(t, resolved);
|
|
32
|
+
return [m.getName(), m] as const;
|
|
33
|
+
}),
|
|
34
|
+
).values(),
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
// ONLY ONE CHILD AFTER REMOVING DUPLICATES
|
|
38
|
+
if (children.length === 1) {
|
|
39
|
+
iterate_metadata(checker)(options)(collection)(
|
|
40
|
+
meta,
|
|
41
|
+
type.types[0]!,
|
|
42
|
+
resolved,
|
|
43
|
+
aliased,
|
|
44
|
+
);
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ONLY OBJECT TYPES -> MERGE
|
|
49
|
+
const object: boolean = children.every(
|
|
50
|
+
(c) => c.objects.length && c.objects.length === c.size(),
|
|
51
|
+
);
|
|
52
|
+
if (object)
|
|
53
|
+
return iterate_metadata_object(checker)(options)(collection)(
|
|
54
|
+
meta,
|
|
55
|
+
type,
|
|
56
|
+
resolved,
|
|
57
|
+
true,
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
// ABSORB TO ATOMIC (OR CONSTANT) TYPE
|
|
61
|
+
const atomics: Metadata[] = children.filter(
|
|
62
|
+
(c) =>
|
|
63
|
+
(c.atomics.length ? 1 : 0 + c.constants.length ? 1 : 0) ===
|
|
64
|
+
c.bucket(),
|
|
65
|
+
);
|
|
66
|
+
const objects: Metadata[] = children.filter(
|
|
67
|
+
(c) => c.objects.length && c.objects.length === c.size(),
|
|
68
|
+
);
|
|
69
|
+
if (
|
|
70
|
+
atomics.length === 0 ||
|
|
71
|
+
atomics.length + objects.length !== children.length
|
|
72
|
+
)
|
|
73
|
+
throw new Error(message(children));
|
|
74
|
+
|
|
75
|
+
const least: Metadata = atomics.reduce((x, y) => {
|
|
76
|
+
if (Metadata.covers(x, y)) return y;
|
|
77
|
+
else if (Metadata.covers(y, x)) return x;
|
|
78
|
+
throw new Error(message(children));
|
|
79
|
+
});
|
|
80
|
+
Object.assign(meta, Metadata.merge(meta, least));
|
|
81
|
+
return true;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const message = (children: Metadata[]) =>
|
|
85
|
+
`Error on typia.MetadataFactory.analyze(): nonsensible intersection type detected - ${children
|
|
86
|
+
.map((c) => c.getName())
|
|
87
|
+
.join(" & ")}.`;
|
|
@@ -1,38 +1,49 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { Metadata } from "../../../metadata/Metadata";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
(
|
|
17
|
-
(
|
|
18
|
-
(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
|
|
3
|
+
import { Metadata } from "../../../metadata/Metadata";
|
|
4
|
+
import { MetadataResolved } from "../../../metadata/MetadataResolved";
|
|
5
|
+
|
|
6
|
+
import { Writable } from "../../../typings/Writable";
|
|
7
|
+
|
|
8
|
+
import { MetadataCollection } from "../../MetadataCollection";
|
|
9
|
+
import { MetadataFactory } from "../../MetadataFactory";
|
|
10
|
+
import { TypeFactory } from "../../TypeFactory";
|
|
11
|
+
import { iterate_metadata } from "./iterate_metadata";
|
|
12
|
+
|
|
13
|
+
// import { iterate_metadata_coalesce } from "./iterate_metadata_coalesce";
|
|
14
|
+
|
|
15
|
+
export const iterate_metadata_resolve =
|
|
16
|
+
(checker: ts.TypeChecker) =>
|
|
17
|
+
(options: MetadataFactory.IOptions) =>
|
|
18
|
+
(collection: MetadataCollection) =>
|
|
19
|
+
(
|
|
20
|
+
meta: Metadata,
|
|
21
|
+
type: ts.Type,
|
|
22
|
+
resolved: boolean,
|
|
23
|
+
aliased: boolean,
|
|
24
|
+
): boolean => {
|
|
25
|
+
if (options.resolve === false || resolved === true) return false;
|
|
26
|
+
|
|
27
|
+
const escaped: ts.Type | null = TypeFactory.resolve(checker)(type);
|
|
28
|
+
if (escaped === null) return false;
|
|
29
|
+
|
|
30
|
+
if (meta.resolved === null) {
|
|
31
|
+
Writable(meta).resolved = MetadataResolved.create({
|
|
32
|
+
original: Metadata.initialize(),
|
|
33
|
+
returns: Metadata.initialize(),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
iterate_metadata(checker)(options)(collection)(
|
|
37
|
+
meta.resolved!.original,
|
|
38
|
+
type,
|
|
39
|
+
true,
|
|
40
|
+
aliased,
|
|
41
|
+
);
|
|
42
|
+
iterate_metadata(checker)(options)(collection)(
|
|
43
|
+
meta.resolved!.returns,
|
|
44
|
+
escaped,
|
|
45
|
+
true,
|
|
46
|
+
aliased,
|
|
47
|
+
);
|
|
48
|
+
return true;
|
|
49
|
+
};
|
|
@@ -27,7 +27,8 @@ const iterate =
|
|
|
27
27
|
// ITERATE CHILDREN
|
|
28
28
|
for (const map of meta.maps) iterate(visited)(collection)(map.value);
|
|
29
29
|
for (const set of meta.sets) iterate(visited)(collection)(set);
|
|
30
|
-
if (meta.resolved !== null)
|
|
30
|
+
if (meta.resolved !== null)
|
|
31
|
+
iterate(visited)(collection)(meta.resolved.returns);
|
|
31
32
|
if (meta.rest !== null) iterate(visited)(collection)(meta.rest);
|
|
32
33
|
|
|
33
34
|
// SORT OBJECTS
|