typia 6.7.3-dev.20240808 → 6.8.0-dev.20240811

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 (109) hide show
  1. package/lib/factories/TypeFactory.d.ts +0 -2
  2. package/lib/factories/TypeFactory.js +4 -83
  3. package/lib/factories/TypeFactory.js.map +1 -1
  4. package/lib/factories/internal/metadata/emplace_metadata_array_type.js +1 -5
  5. package/lib/factories/internal/metadata/emplace_metadata_array_type.js.map +1 -1
  6. package/lib/factories/internal/metadata/emplace_metadata_object.js +3 -4
  7. package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
  8. package/lib/factories/internal/metadata/iterate_metadata.js +1 -2
  9. package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
  10. package/lib/factories/internal/metadata/iterate_metadata_array.js +1 -2
  11. package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
  12. package/lib/factories/internal/metadata/iterate_metadata_atomic.js +1 -1
  13. package/lib/factories/internal/metadata/iterate_metadata_atomic.js.map +1 -1
  14. package/lib/factories/internal/metadata/iterate_metadata_coalesce.js +1 -1
  15. package/lib/factories/internal/metadata/iterate_metadata_coalesce.js.map +1 -1
  16. package/lib/factories/internal/metadata/iterate_metadata_constant.js +2 -3
  17. package/lib/factories/internal/metadata/iterate_metadata_constant.js.map +1 -1
  18. package/lib/factories/internal/metadata/iterate_metadata_intersection.js +2 -3
  19. package/lib/factories/internal/metadata/iterate_metadata_intersection.js.map +1 -1
  20. package/lib/factories/internal/metadata/iterate_metadata_map.js +1 -1
  21. package/lib/factories/internal/metadata/iterate_metadata_map.js.map +1 -1
  22. package/lib/factories/internal/metadata/iterate_metadata_native.js +1 -1
  23. package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
  24. package/lib/factories/internal/metadata/iterate_metadata_object.js +2 -3
  25. package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
  26. package/lib/factories/internal/metadata/iterate_metadata_set.js +1 -1
  27. package/lib/factories/internal/metadata/iterate_metadata_set.js.map +1 -1
  28. package/lib/factories/internal/metadata/iterate_metadata_template.js +1 -1
  29. package/lib/factories/internal/metadata/iterate_metadata_template.js.map +1 -1
  30. package/lib/factories/internal/metadata/iterate_metadata_union.js +1 -2
  31. package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
  32. package/lib/programmers/internal/application_bigint.d.ts +1 -0
  33. package/lib/programmers/internal/application_bigint.js +14 -0
  34. package/lib/programmers/internal/application_bigint.js.map +1 -0
  35. package/lib/programmers/internal/application_v30_schema.js +10 -12
  36. package/lib/programmers/internal/application_v30_schema.js.map +1 -1
  37. package/lib/programmers/internal/application_v31_constant.js +3 -1
  38. package/lib/programmers/internal/application_v31_constant.js.map +1 -1
  39. package/lib/programmers/internal/application_v31_schema.js +10 -12
  40. package/lib/programmers/internal/application_v31_schema.js.map +1 -1
  41. package/lib/tags/Constant.d.ts +2 -2
  42. package/lib/tags/Default.d.ts +5 -1
  43. package/lib/tags/ExclusiveMaximum.d.ts +9 -5
  44. package/lib/tags/ExclusiveMinimum.d.ts +9 -5
  45. package/lib/tags/JsonSchemaPlugin.d.ts +1 -1
  46. package/lib/tags/Maximum.d.ts +8 -5
  47. package/lib/tags/Minimum.d.ts +8 -5
  48. package/lib/tags/MultipleOf.d.ts +7 -4
  49. package/lib/transformers/features/CreateRandomTransformer.js +1 -2
  50. package/lib/transformers/features/CreateRandomTransformer.js.map +1 -1
  51. package/lib/transformers/features/RandomTransformer.js +1 -2
  52. package/lib/transformers/features/RandomTransformer.js.map +1 -1
  53. package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -5
  54. package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
  55. package/lib/transformers/features/misc/MiscLiteralsTransformer.js +1 -2
  56. package/lib/transformers/features/misc/MiscLiteralsTransformer.js.map +1 -1
  57. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js +1 -2
  58. package/lib/transformers/features/protobuf/ProtobufMessageTransformer.js.map +1 -1
  59. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js +1 -2
  60. package/lib/transformers/features/reflect/ReflectMetadataTransformer.js.map +1 -1
  61. package/lib/transformers/internal/GenericTransformer.js +2 -3
  62. package/lib/transformers/internal/GenericTransformer.js.map +1 -1
  63. package/package.json +2 -2
  64. package/src/factories/CommentFactory.ts +79 -79
  65. package/src/factories/MetadataCollection.ts +274 -274
  66. package/src/factories/MetadataFactory.ts +272 -272
  67. package/src/factories/TypeFactory.ts +118 -190
  68. package/src/factories/internal/metadata/emplace_metadata_array_type.ts +42 -42
  69. package/src/factories/internal/metadata/emplace_metadata_object.ts +176 -179
  70. package/src/factories/internal/metadata/iterate_metadata.ts +94 -96
  71. package/src/factories/internal/metadata/iterate_metadata_array.ts +63 -64
  72. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +62 -62
  73. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  74. package/src/factories/internal/metadata/iterate_metadata_constant.ts +76 -77
  75. package/src/factories/internal/metadata/iterate_metadata_intersection.ts +213 -214
  76. package/src/factories/internal/metadata/iterate_metadata_map.ts +50 -50
  77. package/src/factories/internal/metadata/iterate_metadata_native.ts +220 -217
  78. package/src/factories/internal/metadata/iterate_metadata_object.ts +33 -34
  79. package/src/factories/internal/metadata/iterate_metadata_set.ts +41 -41
  80. package/src/factories/internal/metadata/iterate_metadata_template.ts +44 -44
  81. package/src/factories/internal/metadata/iterate_metadata_union.ts +27 -29
  82. package/src/programmers/internal/application_bigint.ts +25 -0
  83. package/src/programmers/internal/application_v30_alias.ts +52 -52
  84. package/src/programmers/internal/application_v30_object.ts +149 -149
  85. package/src/programmers/internal/application_v30_schema.ts +162 -159
  86. package/src/programmers/internal/application_v30_tuple.ts +33 -33
  87. package/src/programmers/internal/application_v31_constant.ts +4 -1
  88. package/src/programmers/internal/application_v31_schema.ts +159 -157
  89. package/src/programmers/json/JsonApplicationProgrammer.ts +82 -82
  90. package/src/tags/Constant.ts +2 -2
  91. package/src/tags/Default.ts +7 -3
  92. package/src/tags/ExclusiveMaximum.ts +12 -6
  93. package/src/tags/ExclusiveMinimum.ts +12 -6
  94. package/src/tags/JsonSchemaPlugin.ts +1 -1
  95. package/src/tags/Maximum.ts +9 -8
  96. package/src/tags/Minimum.ts +9 -8
  97. package/src/tags/MultipleOf.ts +9 -8
  98. package/src/transformers/FileTransformer.ts +91 -91
  99. package/src/transformers/features/CreateRandomTransformer.ts +40 -42
  100. package/src/transformers/features/RandomTransformer.ts +44 -46
  101. package/src/transformers/features/json/JsonApplicationTransformer.ts +124 -126
  102. package/src/transformers/features/misc/MiscLiteralsTransformer.ts +32 -34
  103. package/src/transformers/features/protobuf/ProtobufMessageTransformer.ts +33 -35
  104. package/src/transformers/features/reflect/ReflectMetadataTransformer.ts +62 -64
  105. package/src/transformers/internal/GenericTransformer.ts +2 -4
  106. package/lib/utils/TypePredicator.d.ts +0 -10
  107. package/lib/utils/TypePredicator.js +0 -36
  108. package/lib/utils/TypePredicator.js.map +0 -1
  109. package/src/utils/TypePredicator.ts +0 -32
@@ -1,190 +1,118 @@
1
- import ts from "typescript";
2
-
3
- import { TypePredicator } from "../utils/TypePredicator";
4
-
5
- import { Resolved } from "../Resolved";
6
-
7
- export namespace TypeFactory {
8
- export const isFunction = (type: ts.Type): boolean =>
9
- getFunction(type) !== null;
10
-
11
- const getFunction = (type: ts.Type) => {
12
- const node = type.symbol?.declarations?.[0];
13
- if (node === undefined) return null;
14
-
15
- return ts.isFunctionLike(node)
16
- ? node
17
- : ts.isPropertyAssignment(node) || ts.isPropertyDeclaration(node)
18
- ? ts.isFunctionLike(node.initializer)
19
- ? node.initializer
20
- : null
21
- : null;
22
- };
23
-
24
- export const getReturnType =
25
- (checker: ts.TypeChecker) =>
26
- (type: ts.Type) =>
27
- (name: string): ts.Type | null => {
28
- // FIND TO-JSON METHOD
29
- const symbol: ts.Symbol | undefined = checker.getPropertyOfType(
30
- type,
31
- name,
32
- );
33
- if (!symbol) return null;
34
- else if (!symbol.valueDeclaration) return null;
35
-
36
- // GET FUNCTION DECLARATION
37
- const functor: ts.Type = checker.getTypeOfSymbolAtLocation(
38
- symbol,
39
- symbol.valueDeclaration,
40
- );
41
-
42
- // RETURNS THE RETURN-TYPE
43
- const signature: ts.Signature | undefined = checker.getSignaturesOfType(
44
- functor,
45
- ts.SignatureKind.Call,
46
- )[0];
47
- return signature ? signature.getReturnType() : null;
48
- };
49
-
50
- export const getFullName =
51
- (checker: ts.TypeChecker) =>
52
- (type: ts.Type, symbol?: ts.Symbol): string => {
53
- // PRIMITIVE
54
- symbol ??= type.aliasSymbol ?? type.symbol;
55
- if (symbol === undefined) return checker.typeToString(type);
56
-
57
- // UNION OR INTERSECT
58
- if (
59
- type.aliasSymbol === undefined &&
60
- TypePredicator.isUnionOrIntersection(type)
61
- ) {
62
- const joiner: string = TypePredicator.isIntersection(type)
63
- ? " & "
64
- : " | ";
65
- return type.types
66
- .map((child) => getFullName(checker)(child))
67
- .join(joiner);
68
- }
69
-
70
- //----
71
- // SPECIALIZATION
72
- //----
73
- const name: string = get_name(symbol);
74
-
75
- // CHECK GENERIC
76
- const generic: readonly ts.Type[] = type.aliasSymbol
77
- ? type.aliasTypeArguments || []
78
- : checker.getTypeArguments(type as ts.TypeReference);
79
- return generic.length
80
- ? name === "Promise"
81
- ? getFullName(checker)(generic[0]!)
82
- : `${name}<${generic
83
- .map((child) => getFullName(checker)(child))
84
- .join(", ")}>`
85
- : name;
86
- };
87
-
88
- const explore_name =
89
- (decl: ts.Node) =>
90
- (name: string): string =>
91
- ts.isModuleBlock(decl)
92
- ? explore_name(decl.parent.parent)(
93
- `${decl.parent.name.getFullText().trim()}.${name}`,
94
- )
95
- : name;
96
-
97
- const get_name = (symbol: ts.Symbol): string => {
98
- const parent = symbol.getDeclarations()?.[0]?.parent;
99
- return parent
100
- ? explore_name(parent)(symbol.escapedName.toString())
101
- : "__type";
102
- };
103
-
104
- export const keyword = (
105
- type:
106
- | "void"
107
- | "any"
108
- | "unknown"
109
- | "boolean"
110
- | "number"
111
- | "bigint"
112
- | "string",
113
- ) => {
114
- return ts.factory.createKeywordTypeNode(
115
- type === "void"
116
- ? ts.SyntaxKind.VoidKeyword
117
- : type === "any"
118
- ? ts.SyntaxKind.AnyKeyword
119
- : type === "unknown"
120
- ? ts.SyntaxKind.UnknownKeyword
121
- : type === "boolean"
122
- ? ts.SyntaxKind.BooleanKeyword
123
- : type === "number"
124
- ? ts.SyntaxKind.NumberKeyword
125
- : type === "bigint"
126
- ? ts.SyntaxKind.BigIntKeyword
127
- : ts.SyntaxKind.StringKeyword,
128
- );
129
- };
130
-
131
- export const clone = (type: ts.Type): Resolved<ts.Type> =>
132
- cloneType(type, 0, new Set());
133
- }
134
-
135
- const cloneType = (x: any, depth: number, visited: Set<object>): any => {
136
- if (x === undefined || depth > 4) return undefined;
137
- else if (typeof x === "object")
138
- if (x === null) return null;
139
- else if (Array.isArray(x))
140
- return x.map((y) => cloneType(y, depth + 1, visited));
141
- else {
142
- visited.add(x);
143
- const entries = (() => {
144
- try {
145
- return Object.entries(x);
146
- } catch {
147
- return undefined;
148
- }
149
- })();
150
- if (entries === undefined) return undefined;
151
- return Object.fromEntries(
152
- entries
153
- .filter(
154
- ([k, y]) =>
155
- k !== "parent" &&
156
- typeof y !== "function" &&
157
- !(typeof y === "object" && y !== null && visited.has(y) === true),
158
- )
159
- .map(([k, y]) => {
160
- // if (typeof y === "object" && y !== null) console.log(k, get_uid(y));
161
- return [k, cloneType(y, depth + 1, visited)];
162
- }),
163
- );
164
- }
165
- return x;
166
- };
167
-
168
- // function get_uid(obj: object | null | undefined): number {
169
- // // NO UID EXISTS, THEN ISSUE ONE.
170
- // if (obj instanceof Object) {
171
- // if (obj.hasOwnProperty("__get_m_iUID") === false) {
172
- // const uid: number = ++__s_iUID;
173
- // Object.defineProperty(obj, "__get_m_iUID", {
174
- // value: function (): number {
175
- // return uid;
176
- // },
177
- // });
178
- // }
179
-
180
- // // RETURNS
181
- // return (obj as IObject).__get_m_iUID();
182
- // } else if (obj === undefined) return -1;
183
- // // is null
184
- // else return 0;
185
- // }
186
-
187
- // interface IObject {
188
- // readonly __get_m_iUID: () => number;
189
- // }
190
- // let __s_iUID: number = 0;
1
+ import ts from "typescript";
2
+
3
+ export namespace TypeFactory {
4
+ export const isFunction = (type: ts.Type): boolean =>
5
+ getFunction(type) !== null;
6
+
7
+ const getFunction = (type: ts.Type) => {
8
+ const node = type.symbol?.declarations?.[0];
9
+ if (node === undefined) return null;
10
+
11
+ return ts.isFunctionLike(node)
12
+ ? node
13
+ : ts.isPropertyAssignment(node) || ts.isPropertyDeclaration(node)
14
+ ? ts.isFunctionLike(node.initializer)
15
+ ? node.initializer
16
+ : null
17
+ : null;
18
+ };
19
+
20
+ export const getReturnType =
21
+ (checker: ts.TypeChecker) =>
22
+ (type: ts.Type) =>
23
+ (name: string): ts.Type | null => {
24
+ // FIND TO-JSON METHOD
25
+ const symbol: ts.Symbol | undefined = type.getProperty(name);
26
+ if (!symbol) return null;
27
+ else if (!symbol.valueDeclaration) return null;
28
+
29
+ // GET FUNCTION DECLARATION
30
+ const functor: ts.Type = checker.getTypeOfSymbolAtLocation(
31
+ symbol,
32
+ symbol.valueDeclaration,
33
+ );
34
+
35
+ // RETURNS THE RETURN-TYPE
36
+ const signature: ts.Signature | undefined = checker.getSignaturesOfType(
37
+ functor,
38
+ ts.SignatureKind.Call,
39
+ )[0];
40
+ return signature ? signature.getReturnType() : null;
41
+ };
42
+
43
+ export const getFullName =
44
+ (checker: ts.TypeChecker) =>
45
+ (type: ts.Type, symbol?: ts.Symbol): string => {
46
+ // PRIMITIVE
47
+ symbol ??= type.aliasSymbol ?? type.getSymbol();
48
+ if (symbol === undefined) return checker.typeToString(type);
49
+
50
+ // UNION OR INTERSECT
51
+ if (type.aliasSymbol === undefined && type.isUnionOrIntersection()) {
52
+ const joiner: string = type.isIntersection() ? " & " : " | ";
53
+ return type.types
54
+ .map((child) => getFullName(checker)(child))
55
+ .join(joiner);
56
+ }
57
+
58
+ //----
59
+ // SPECIALIZATION
60
+ //----
61
+ const name: string = get_name(symbol);
62
+
63
+ // CHECK GENERIC
64
+ const generic: readonly ts.Type[] = type.aliasSymbol
65
+ ? type.aliasTypeArguments || []
66
+ : checker.getTypeArguments(type as ts.TypeReference);
67
+ return generic.length
68
+ ? name === "Promise"
69
+ ? getFullName(checker)(generic[0]!)
70
+ : `${name}<${generic
71
+ .map((child) => getFullName(checker)(child))
72
+ .join(", ")}>`
73
+ : name;
74
+ };
75
+
76
+ const explore_name =
77
+ (decl: ts.Node) =>
78
+ (name: string): string =>
79
+ ts.isModuleBlock(decl)
80
+ ? explore_name(decl.parent.parent)(
81
+ `${decl.parent.name.getFullText().trim()}.${name}`,
82
+ )
83
+ : name;
84
+
85
+ const get_name = (symbol: ts.Symbol): string => {
86
+ const parent = symbol.getDeclarations()?.[0]?.parent;
87
+ return parent
88
+ ? explore_name(parent)(symbol.escapedName.toString())
89
+ : "__type";
90
+ };
91
+
92
+ export const keyword = (
93
+ type:
94
+ | "void"
95
+ | "any"
96
+ | "unknown"
97
+ | "boolean"
98
+ | "number"
99
+ | "bigint"
100
+ | "string",
101
+ ) => {
102
+ return ts.factory.createKeywordTypeNode(
103
+ type === "void"
104
+ ? ts.SyntaxKind.VoidKeyword
105
+ : type === "any"
106
+ ? ts.SyntaxKind.AnyKeyword
107
+ : type === "unknown"
108
+ ? ts.SyntaxKind.UnknownKeyword
109
+ : type === "boolean"
110
+ ? ts.SyntaxKind.BooleanKeyword
111
+ : type === "number"
112
+ ? ts.SyntaxKind.NumberKeyword
113
+ : type === "bigint"
114
+ ? ts.SyntaxKind.BigIntKeyword
115
+ : ts.SyntaxKind.StringKeyword,
116
+ );
117
+ };
118
+ }
@@ -1,42 +1,42 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../../schemas/metadata/Metadata";
4
- import { MetadataArrayType } from "../../../schemas/metadata/MetadataArrayType";
5
-
6
- import { ArrayUtil } from "../../../utils/ArrayUtil";
7
-
8
- import { MetadataCollection } from "../../MetadataCollection";
9
- import { MetadataFactory } from "../../MetadataFactory";
10
- import { explore_metadata } from "./explore_metadata";
11
-
12
- export const emplace_metadata_array_type =
13
- (checker: ts.TypeChecker) =>
14
- (options: MetadataFactory.IOptions) =>
15
- (collection: MetadataCollection) =>
16
- (errors: MetadataFactory.IError[]) =>
17
- (
18
- aliasType: ts.Type,
19
- arrayType: ts.Type,
20
- nullable: boolean,
21
- explore: MetadataFactory.IExplore,
22
- ): MetadataArrayType => {
23
- // CHECK EXISTENCE
24
- const [array, newbie, setValue] = collection.emplaceArray(
25
- checker,
26
- aliasType,
27
- );
28
- ArrayUtil.add(array.nullables, nullable);
29
- if (newbie === false) return array;
30
-
31
- // CONSTRUCT VALUE TYPE
32
- const value: Metadata = explore_metadata(checker)(options)(collection)(
33
- errors,
34
- )(checker.getIndexTypeOfType(arrayType, ts.IndexKind.Number)!, {
35
- ...explore,
36
- escaped: false,
37
- aliased: false,
38
- });
39
- setValue(value);
40
-
41
- return array;
42
- };
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../../schemas/metadata/Metadata";
4
+ import { MetadataArrayType } from "../../../schemas/metadata/MetadataArrayType";
5
+
6
+ import { ArrayUtil } from "../../../utils/ArrayUtil";
7
+
8
+ import { MetadataCollection } from "../../MetadataCollection";
9
+ import { MetadataFactory } from "../../MetadataFactory";
10
+ import { explore_metadata } from "./explore_metadata";
11
+
12
+ export const emplace_metadata_array_type =
13
+ (checker: ts.TypeChecker) =>
14
+ (options: MetadataFactory.IOptions) =>
15
+ (collection: MetadataCollection) =>
16
+ (errors: MetadataFactory.IError[]) =>
17
+ (
18
+ aliasType: ts.Type,
19
+ arrayType: ts.Type,
20
+ nullable: boolean,
21
+ explore: MetadataFactory.IExplore,
22
+ ): MetadataArrayType => {
23
+ // CHECK EXISTENCE
24
+ const [array, newbie, setValue] = collection.emplaceArray(
25
+ checker,
26
+ aliasType,
27
+ );
28
+ ArrayUtil.add(array.nullables, nullable);
29
+ if (newbie === false) return array;
30
+
31
+ // CONSTRUCT VALUE TYPE
32
+ const value: Metadata = explore_metadata(checker)(options)(collection)(
33
+ errors,
34
+ )(arrayType.getNumberIndexType()!, {
35
+ ...explore,
36
+ escaped: false,
37
+ aliased: false,
38
+ });
39
+ setValue(value);
40
+
41
+ return array;
42
+ };