typia 3.5.3 → 3.6.0-dev.20230219

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 (132) hide show
  1. package/README.md +3 -1
  2. package/lib/executable/TypiaGenerateWizard.d.ts +8 -0
  3. package/lib/executable/TypiaGenerateWizard.js +182 -0
  4. package/lib/executable/TypiaGenerateWizard.js.map +1 -0
  5. package/lib/executable/TypiaSetupWizard.d.ts +8 -0
  6. package/lib/executable/TypiaSetupWizard.js +218 -0
  7. package/lib/executable/TypiaSetupWizard.js.map +1 -0
  8. package/lib/executable/setup/ArgumentParser.d.ts +7 -0
  9. package/lib/executable/setup/ArgumentParser.js +155 -0
  10. package/lib/executable/setup/ArgumentParser.js.map +1 -0
  11. package/lib/executable/{internal → setup}/CommandExecutor.d.ts +0 -0
  12. package/lib/executable/{internal → setup}/CommandExecutor.js +0 -0
  13. package/lib/executable/setup/CommandExecutor.js.map +1 -0
  14. package/lib/executable/{internal → setup}/PackageManager.d.ts +0 -0
  15. package/lib/executable/{internal → setup}/PackageManager.js +0 -0
  16. package/lib/executable/setup/PackageManager.js.map +1 -0
  17. package/lib/executable/setup/PluginConfigurator.d.ts +5 -0
  18. package/lib/executable/{internal → setup}/PluginConfigurator.js +0 -0
  19. package/lib/executable/setup/PluginConfigurator.js.map +1 -0
  20. package/lib/executable/typia.js +13 -57
  21. package/lib/executable/typia.js.map +1 -1
  22. package/lib/factories/IdentifierFactory.d.ts +1 -1
  23. package/lib/factories/IdentifierFactory.js +3 -3
  24. package/lib/factories/IdentifierFactory.js.map +1 -1
  25. package/lib/factories/TypeFactory.d.ts +1 -0
  26. package/lib/factories/TypeFactory.js +15 -0
  27. package/lib/factories/TypeFactory.js.map +1 -1
  28. package/lib/generate/TypiaGenerator.d.ts +8 -0
  29. package/lib/generate/TypiaGenerator.js +211 -0
  30. package/lib/generate/TypiaGenerator.js.map +1 -0
  31. package/lib/module.d.ts +14 -8
  32. package/lib/module.js +2 -1
  33. package/lib/module.js.map +1 -1
  34. package/lib/programmers/AssertCloneProgrammer.js +8 -2
  35. package/lib/programmers/AssertCloneProgrammer.js.map +1 -1
  36. package/lib/programmers/AssertParseProgrammer.js +7 -1
  37. package/lib/programmers/AssertParseProgrammer.js.map +1 -1
  38. package/lib/programmers/AssertProgrammer.js +6 -2
  39. package/lib/programmers/AssertProgrammer.js.map +1 -1
  40. package/lib/programmers/AssertPruneProgrammer.js +5 -1
  41. package/lib/programmers/AssertPruneProgrammer.js.map +1 -1
  42. package/lib/programmers/AssertStringifyProgrammer.js +5 -1
  43. package/lib/programmers/AssertStringifyProgrammer.js.map +1 -1
  44. package/lib/programmers/CheckerProgrammer.js +8 -1
  45. package/lib/programmers/CheckerProgrammer.js.map +1 -1
  46. package/lib/programmers/CloneProgrammer.js +13 -0
  47. package/lib/programmers/CloneProgrammer.js.map +1 -1
  48. package/lib/programmers/FeatureProgrammer.d.ts +6 -1
  49. package/lib/programmers/FeatureProgrammer.js +35 -26
  50. package/lib/programmers/FeatureProgrammer.js.map +1 -1
  51. package/lib/programmers/IsCloneProgrammer.js +10 -1
  52. package/lib/programmers/IsCloneProgrammer.js.map +1 -1
  53. package/lib/programmers/IsParseProgrammer.js +8 -2
  54. package/lib/programmers/IsParseProgrammer.js.map +1 -1
  55. package/lib/programmers/IsProgrammer.js +1 -1
  56. package/lib/programmers/IsProgrammer.js.map +1 -1
  57. package/lib/programmers/IsPruneProgrammer.js +5 -1
  58. package/lib/programmers/IsPruneProgrammer.js.map +1 -1
  59. package/lib/programmers/IsStringifyProgrammer.js +8 -1
  60. package/lib/programmers/IsStringifyProgrammer.js.map +1 -1
  61. package/lib/programmers/PruneProgrammer.js +8 -0
  62. package/lib/programmers/PruneProgrammer.js.map +1 -1
  63. package/lib/programmers/RandomProgrammer.js +4 -3
  64. package/lib/programmers/RandomProgrammer.js.map +1 -1
  65. package/lib/programmers/StringifyProgrammer.js +9 -1
  66. package/lib/programmers/StringifyProgrammer.js.map +1 -1
  67. package/lib/programmers/ValidateCloneProgrammer.js +10 -2
  68. package/lib/programmers/ValidateCloneProgrammer.js.map +1 -1
  69. package/lib/programmers/ValidateParseProgrammer.js +9 -1
  70. package/lib/programmers/ValidateParseProgrammer.js.map +1 -1
  71. package/lib/programmers/ValidateProgrammer.js +12 -4
  72. package/lib/programmers/ValidateProgrammer.js.map +1 -1
  73. package/lib/programmers/ValidatePruneProgrammer.js +7 -1
  74. package/lib/programmers/ValidatePruneProgrammer.js.map +1 -1
  75. package/lib/programmers/ValidateStringifyProgrammer.js +8 -2
  76. package/lib/programmers/ValidateStringifyProgrammer.js.map +1 -1
  77. package/lib/programmers/helpers/FunctionImporeter.js +2 -1
  78. package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
  79. package/lib/programmers/internal/check_everything.js +4 -1
  80. package/lib/programmers/internal/check_everything.js.map +1 -1
  81. package/lib/programmers/internal/check_union_array_like.js +4 -1
  82. package/lib/programmers/internal/check_union_array_like.js.map +1 -1
  83. package/lib/programmers/internal/feature_object_entries.d.ts +2 -1
  84. package/lib/programmers/internal/feature_object_entries.js +28 -23
  85. package/lib/programmers/internal/feature_object_entries.js.map +1 -1
  86. package/lib/transformers/CallExpressionTransformer.js +4 -1
  87. package/lib/transformers/CallExpressionTransformer.js.map +1 -1
  88. package/package.json +1 -1
  89. package/src/executable/TypiaGenerateWizard.ts +86 -0
  90. package/src/executable/{internal/ArgumentParser.ts → TypiaSetupWizard.ts} +58 -60
  91. package/src/executable/setup/ArgumentParser.ts +89 -0
  92. package/src/executable/{internal → setup}/CommandExecutor.ts +0 -0
  93. package/src/executable/{internal → setup}/PackageManager.ts +0 -0
  94. package/src/executable/{internal → setup}/PluginConfigurator.ts +3 -3
  95. package/src/executable/typia.ts +15 -49
  96. package/src/factories/IdentifierFactory.ts +3 -2
  97. package/src/factories/TypeFactory.ts +28 -0
  98. package/src/generate/TypiaGenerator.ts +126 -0
  99. package/src/module.ts +23 -11
  100. package/src/programmers/AssertCloneProgrammer.ts +22 -3
  101. package/src/programmers/AssertParseProgrammer.ts +14 -2
  102. package/src/programmers/AssertProgrammer.ts +15 -213
  103. package/src/programmers/AssertPruneProgrammer.ts +9 -2
  104. package/src/programmers/AssertStringifyProgrammer.ts +12 -2
  105. package/src/programmers/CheckerProgrammer.ts +15 -2
  106. package/src/programmers/CloneProgrammer.ts +14 -0
  107. package/src/programmers/FeatureProgrammer.ts +64 -26
  108. package/src/programmers/IsCloneProgrammer.ts +17 -2
  109. package/src/programmers/IsParseProgrammer.ts +18 -3
  110. package/src/programmers/IsProgrammer.ts +3 -1
  111. package/src/programmers/IsPruneProgrammer.ts +16 -2
  112. package/src/programmers/IsStringifyProgrammer.ts +15 -2
  113. package/src/programmers/PruneProgrammer.ts +7 -0
  114. package/src/programmers/RandomProgrammer.ts +15 -1
  115. package/src/programmers/StringifyProgrammer.ts +8 -1
  116. package/src/programmers/ValidateCloneProgrammer.ts +23 -6
  117. package/src/programmers/ValidateParseProgrammer.ts +16 -2
  118. package/src/programmers/ValidateProgrammer.ts +44 -5
  119. package/src/programmers/ValidatePruneProgrammer.ts +14 -2
  120. package/src/programmers/ValidateStringifyProgrammer.ts +21 -6
  121. package/src/programmers/helpers/FunctionImporeter.ts +10 -1
  122. package/src/programmers/internal/check_everything.ts +8 -5
  123. package/src/programmers/internal/check_union_array_like.ts +7 -1
  124. package/src/programmers/internal/feature_object_entries.ts +6 -1
  125. package/src/transformers/CallExpressionTransformer.ts +8 -1
  126. package/lib/executable/internal/ArgumentParser.d.ts +0 -9
  127. package/lib/executable/internal/ArgumentParser.js +0 -266
  128. package/lib/executable/internal/ArgumentParser.js.map +0 -1
  129. package/lib/executable/internal/CommandExecutor.js.map +0 -1
  130. package/lib/executable/internal/PackageManager.js.map +0 -1
  131. package/lib/executable/internal/PluginConfigurator.d.ts +0 -5
  132. package/lib/executable/internal/PluginConfigurator.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import ts from "typescript";
2
2
 
3
3
  import { IdentifierFactory } from "../factories/IdentifierFactory";
4
+ import { TypeFactory } from "../factories/TypeFactory";
4
5
 
5
6
  // import { StatementFactory } from "../factories/StatementFactory";
6
7
  import { IProject } from "../transformers/IProject";
@@ -11,217 +12,6 @@ import { FunctionImporter } from "./helpers/FunctionImporeter";
11
12
  import { OptionPredicator } from "./helpers/OptionPredicator";
12
13
  import { check_object } from "./internal/check_object";
13
14
 
14
- // /* -----------------------------------------------------------
15
- // ASSERT V2 -> USE (NULL OR ERROR) CONDITION
16
- // ----------------------------------------------------------- */
17
- // export namespace AssertProgrammerV2 {
18
- // export const generate =
19
- // (
20
- // project: IProject,
21
- // modulo: ts.LeftHandSideExpression,
22
- // equals: boolean = false,
23
- // ) =>
24
- // (type: ts.Type) => {
25
- // const importer: FunctionImporter = new FunctionImporter();
26
- // const guardV2: ts.Expression = importer.use("guardV2");
27
-
28
- // const program: ts.ArrowFunction = CheckerProgrammer.generate(
29
- // project,
30
- // {
31
- // functors: "$ao",
32
- // unioners: "$au",
33
- // path: true,
34
- // trace: true,
35
- // numeric: OptionPredicator.numeric(project.options),
36
- // equals,
37
- // combiner,
38
- // joiner: joiner(equals)(importer),
39
- // success: ts.factory.createNull(),
40
- // },
41
- // importer,
42
- // )(type);
43
-
44
- // return ts.factory.createArrowFunction(
45
- // undefined,
46
- // undefined,
47
- // [IdentifierFactory.parameter("input")],
48
- // undefined,
49
- // undefined,
50
- // ts.factory.createBlock(
51
- // [
52
- // ...importer.declare(modulo),
53
- // StatementFactory.constant(
54
- // "error",
55
- // ts.factory.createCallExpression(
56
- // program,
57
- // undefined,
58
- // [
59
- // ValueFactory.INPUT(),
60
- // ts.factory.createStringLiteral("$input"),
61
- // ],
62
- // ),
63
- // ),
64
- // ts.factory.createIfStatement(
65
- // ts.factory.createStrictInequality(
66
- // ts.factory.createNull(),
67
- // ts.factory.createIdentifier("error"),
68
- // ),
69
- // ts.factory.createThrowStatement(
70
- // ts.factory.createCallExpression(
71
- // guardV2,
72
- // undefined,
73
- // [ts.factory.createIdentifier("error")],
74
- // ),
75
- // ),
76
- // ),
77
- // ts.factory.createReturnStatement(ValueFactory.INPUT()),
78
- // ],
79
- // true,
80
- // ),
81
- // );
82
- // };
83
-
84
- // const combiner: CheckerProgrammer.IConfig.Combiner = (
85
- // explore: CheckerProgrammer.IExplore,
86
- // ) => {
87
- // const path: string = explore.postfix
88
- // ? `path + ${explore.postfix}`
89
- // : "path";
90
- // return (logic) => (input, binaries, expected) =>
91
- // binaries
92
- // .map((binary) =>
93
- // binary.combined
94
- // ? binary.expression
95
- // : ts.factory.createParenthesizedExpression(
96
- // ts.factory.createConditionalExpression(
97
- // binary.expression,
98
- // undefined,
99
- // ts.factory.createNull(),
100
- // undefined,
101
- // create_exception_props(
102
- // ts.factory.createIdentifier(path),
103
- // expected,
104
- // input,
105
- // ),
106
- // ),
107
- // ),
108
- // )
109
- // .reduce(
110
- // logic === "and"
111
- // ? ts.factory.createLogicalOr
112
- // : ts.factory.createLogicalAnd,
113
- // );
114
- // };
115
-
116
- // const assert_object = (equals: boolean) => (importer: FunctionImporter) =>
117
- // check_object({
118
- // equals,
119
- // assert: true,
120
- // reduce: ts.factory.createLogicalOr,
121
- // positive: ts.factory.createNull(),
122
- // superfluous: (value) =>
123
- // create_exception_props(
124
- // ts.factory.createAdd(
125
- // ts.factory.createIdentifier("path"),
126
- // ts.factory.createCallExpression(
127
- // importer.use("join"),
128
- // undefined,
129
- // [ts.factory.createIdentifier("key")],
130
- // ),
131
- // ),
132
- // "undefined",
133
- // value,
134
- // ),
135
- // entries: importer.use("every"),
136
- // halt: (expr) =>
137
- // ts.factory.createConditionalExpression(
138
- // ts.factory.createStrictEquality(
139
- // ts.factory.createFalse(),
140
- // ts.factory.createIdentifier("exceptionable"),
141
- // ),
142
- // undefined,
143
- // ts.factory.createNull(),
144
- // undefined,
145
- // expr,
146
- // ),
147
- // });
148
-
149
- // const joiner =
150
- // (equals: boolean) =>
151
- // (importer: FunctionImporter): CheckerProgrammer.IConfig.IJoiner => ({
152
- // object: assert_object(equals)(importer),
153
- // array: (input, arrow) =>
154
- // ts.factory.createCallExpression(
155
- // importer.use("every"),
156
- // undefined,
157
- // [input, arrow],
158
- // ),
159
- // failure: (value, expected, explore) =>
160
- // create_exception_props(
161
- // ts.factory.createIdentifier(
162
- // explore?.postfix ? `path + ${explore.postfix}` : "path",
163
- // ),
164
- // expected,
165
- // value,
166
- // ),
167
- // is: (exp) =>
168
- // ts.factory.createStrictEquality(
169
- // ts.factory.createNull(),
170
- // ts.factory.createParenthesizedExpression(exp),
171
- // ),
172
- // required: (value) =>
173
- // ts.factory.createConditionalExpression(
174
- // value,
175
- // undefined,
176
- // ts.factory.createNull(),
177
- // undefined,
178
- // create_exception_props(
179
- // ts.factory.createStringLiteral(""),
180
- // "not undefined",
181
- // value,
182
- // ),
183
- // ),
184
- // full: equals
185
- // ? undefined
186
- // : (condition) => (input, expected) =>
187
- // ts.factory.createConditionalExpression(
188
- // ts.factory.createStrictEquality(
189
- // ts.factory.createNull(),
190
- // condition,
191
- // ),
192
- // undefined,
193
- // ts.factory.createNull(),
194
- // undefined,
195
- // create_exception_props(
196
- // ts.factory.createIdentifier("path"),
197
- // expected,
198
- // input,
199
- // ),
200
- // ),
201
- // });
202
-
203
- // function create_exception_props(
204
- // path: ts.Expression,
205
- // expected: string,
206
- // value: ts.Expression,
207
- // ): ts.ObjectLiteralExpression {
208
- // return ts.factory.createObjectLiteralExpression(
209
- // [
210
- // ts.factory.createPropertyAssignment("path", path),
211
- // ts.factory.createPropertyAssignment(
212
- // "expected",
213
- // ts.factory.createStringLiteral(expected),
214
- // ),
215
- // ts.factory.createPropertyAssignment("value", value),
216
- // ],
217
- // true,
218
- // );
219
- // }
220
- // }
221
-
222
- /* -----------------------------------------------------------
223
- ASSERT V3 -> (CONDITION OR THROW(exceptable): FALSE)
224
- ----------------------------------------------------------- */
225
15
  export namespace AssertProgrammer {
226
16
  export const generate =
227
17
  (
@@ -250,7 +40,12 @@ export namespace AssertProgrammer {
250
40
  return ts.factory.createArrowFunction(
251
41
  undefined,
252
42
  undefined,
253
- [IdentifierFactory.parameter("input")],
43
+ [
44
+ IdentifierFactory.parameter(
45
+ "input",
46
+ TypeFactory.keyword("any"),
47
+ ),
48
+ ],
254
49
  undefined,
255
50
  undefined,
256
51
  ts.factory.createBlock(
@@ -268,7 +63,14 @@ export namespace AssertProgrammer {
268
63
  ),
269
64
  ),
270
65
  ts.factory.createReturnStatement(
271
- ts.factory.createIdentifier("input"),
66
+ ts.factory.createAsExpression(
67
+ ts.factory.createIdentifier("input"),
68
+ project.checker.typeToTypeNode(
69
+ type,
70
+ undefined,
71
+ undefined,
72
+ ) ?? TypeFactory.keyword("any"),
73
+ ),
272
74
  ),
273
75
  ],
274
76
  true,
@@ -2,6 +2,7 @@ import ts from "typescript";
2
2
 
3
3
  import { IdentifierFactory } from "../factories/IdentifierFactory";
4
4
  import { StatementFactory } from "../factories/StatementFactory";
5
+ import { TypeFactory } from "../factories/TypeFactory";
5
6
 
6
7
  import { IProject } from "../transformers/IProject";
7
8
 
@@ -15,8 +16,14 @@ export namespace AssertPruneProgrammer {
15
16
  ts.factory.createArrowFunction(
16
17
  undefined,
17
18
  undefined,
18
- [IdentifierFactory.parameter("input")],
19
- undefined,
19
+ [
20
+ IdentifierFactory.parameter(
21
+ "input",
22
+ TypeFactory.keyword("any"),
23
+ ),
24
+ ],
25
+ project.checker.typeToTypeNode(type, undefined, undefined) ??
26
+ TypeFactory.keyword("any"),
20
27
  undefined,
21
28
  ts.factory.createBlock([
22
29
  StatementFactory.constant(
@@ -2,6 +2,7 @@ import ts from "typescript";
2
2
 
3
3
  import { IdentifierFactory } from "../factories/IdentifierFactory";
4
4
  import { StatementFactory } from "../factories/StatementFactory";
5
+ import { TypeFactory } from "../factories/TypeFactory";
5
6
 
6
7
  import { IProject } from "../transformers/IProject";
7
8
 
@@ -15,8 +16,17 @@ export namespace AssertStringifyProgrammer {
15
16
  ts.factory.createArrowFunction(
16
17
  undefined,
17
18
  undefined,
18
- [IdentifierFactory.parameter("input")],
19
- undefined,
19
+ [
20
+ IdentifierFactory.parameter(
21
+ "input",
22
+ project.checker.typeToTypeNode(
23
+ type,
24
+ undefined,
25
+ undefined,
26
+ ) ?? TypeFactory.keyword("any"),
27
+ ),
28
+ ],
29
+ TypeFactory.keyword("string"),
20
30
  undefined,
21
31
  ts.factory.createBlock([
22
32
  StatementFactory.constant(
@@ -4,6 +4,7 @@ import { ExpressionFactory } from "../factories/ExpressionFactory";
4
4
  import { IdentifierFactory } from "../factories/IdentifierFactory";
5
5
  import { MetadataCollection } from "../factories/MetadataCollection";
6
6
  import { MetadataFactory } from "../factories/MetadataFactory";
7
+ import { TypeFactory } from "../factories/TypeFactory";
7
8
  import { ValueFactory } from "../factories/ValueFactory";
8
9
 
9
10
  import { IMetadataTag } from "../metadata/IMetadataTag";
@@ -106,8 +107,7 @@ export namespace CheckerProgrammer {
106
107
  config: IConfig,
107
108
  importer: FunctionImporter,
108
109
  ) =>
109
- FeatureProgrammer.generate_functors(
110
- CONFIG(project, config, importer),
110
+ FeatureProgrammer.generate_functors(CONFIG(project, config, importer))(
111
111
  importer,
112
112
  );
113
113
 
@@ -126,6 +126,19 @@ export namespace CheckerProgrammer {
126
126
  importer: FunctionImporter,
127
127
  ): FeatureProgrammer.IConfig {
128
128
  const output: FeatureProgrammer.IConfig = {
129
+ types: {
130
+ input: () => TypeFactory.keyword("any"),
131
+ output: (type) =>
132
+ ts.factory.createTypePredicateNode(
133
+ undefined,
134
+ "input",
135
+ project.checker.typeToTypeNode(
136
+ type,
137
+ undefined,
138
+ undefined,
139
+ ),
140
+ ),
141
+ },
129
142
  trace: config.trace,
130
143
  path: config.path,
131
144
  functors: config.functors,
@@ -4,6 +4,7 @@ import { ExpressionFactory } from "../factories/ExpressionFactory";
4
4
  import { IdentifierFactory } from "../factories/IdentifierFactory";
5
5
  import { MetadataCollection } from "../factories/MetadataCollection";
6
6
  import { MetadataFactory } from "../factories/MetadataFactory";
7
+ import { TypeFactory } from "../factories/TypeFactory";
7
8
 
8
9
  import { Metadata } from "../metadata/Metadata";
9
10
 
@@ -288,6 +289,19 @@ export namespace CloneProgrammer {
288
289
  project: IProject,
289
290
  importer: FunctionImporter,
290
291
  ): FeatureProgrammer.IConfig => ({
292
+ types: {
293
+ input: (type) =>
294
+ project.checker.typeToTypeNode(type, undefined, undefined) ??
295
+ TypeFactory.keyword("any"),
296
+ output: (type) =>
297
+ ts.factory.createTypeReferenceNode("typia.Primitive", [
298
+ project.checker.typeToTypeNode(
299
+ type,
300
+ undefined,
301
+ undefined,
302
+ ) ?? TypeFactory.keyword("any"),
303
+ ]),
304
+ },
291
305
  functors: FUNCTORS,
292
306
  unioners: UNIONERS,
293
307
  trace: false,
@@ -3,6 +3,7 @@ import ts from "typescript";
3
3
  import { IdentifierFactory } from "../factories/IdentifierFactory";
4
4
  import { MetadataCollection } from "../factories/MetadataCollection";
5
5
  import { StatementFactory } from "../factories/StatementFactory";
6
+ import { TypeFactory } from "../factories/TypeFactory";
6
7
  import { ValueFactory } from "../factories/ValueFactory";
7
8
 
8
9
  import { IMetadataTag } from "../metadata/IMetadataTag";
@@ -22,6 +23,8 @@ export namespace FeatureProgrammer {
22
23
  PARAMETERS
23
24
  ----------------------------------------------------------- */
24
25
  export interface IConfig<Output extends ts.ConciseBody = ts.ConciseBody> {
26
+ types: IConfig.ITypes;
27
+
25
28
  /**
26
29
  * Prefix name of functions for specific object types.
27
30
  */
@@ -66,6 +69,11 @@ export namespace FeatureProgrammer {
66
69
  generator?: Partial<IConfig.IGenerator>;
67
70
  }
68
71
  export namespace IConfig {
72
+ export interface ITypes {
73
+ input: (type: ts.Type) => ts.TypeNode;
74
+ output: (type: ts.Type) => ts.TypeNode;
75
+ }
76
+
69
77
  export interface IObjector {
70
78
  /**
71
79
  * Type checker when union object type comes.
@@ -234,7 +242,7 @@ export namespace FeatureProgrammer {
234
242
  const functors: ts.VariableStatement[] =
235
243
  config.generator?.functors !== undefined
236
244
  ? config.generator.functors(collection)
237
- : generate_functors(config, importer)(collection);
245
+ : generate_functors(config)(importer)(collection);
238
246
  const unioners: ts.VariableStatement[] =
239
247
  config.generator?.unioners !== undefined
240
248
  ? config.generator.unioners(collection)
@@ -244,8 +252,10 @@ export namespace FeatureProgrammer {
244
252
  return ts.factory.createArrowFunction(
245
253
  undefined,
246
254
  undefined,
247
- PARAMETERS(config)(ValueFactory.INPUT()),
248
- undefined,
255
+ PARAMETERS(config)(config.types.input(type))(
256
+ ValueFactory.INPUT(),
257
+ ),
258
+ config.types.output(type),
249
259
  undefined,
250
260
  ts.factory.createBlock(
251
261
  [
@@ -262,14 +272,15 @@ export namespace FeatureProgrammer {
262
272
  };
263
273
 
264
274
  export const generate_functors =
265
- (config: IConfig, importer: FunctionImporter) =>
275
+ (config: IConfig) =>
276
+ (importer: FunctionImporter) =>
266
277
  (collection: MetadataCollection) =>
267
278
  collection
268
279
  .objects()
269
280
  .map((obj, i) =>
270
281
  StatementFactory.constant(
271
282
  `${config.functors}${i}`,
272
- generate_object(config, importer)(obj),
283
+ generate_object(config)(importer)(obj),
273
284
  ),
274
285
  );
275
286
 
@@ -284,24 +295,26 @@ export namespace FeatureProgrammer {
284
295
  ),
285
296
  );
286
297
 
287
- function generate_object(config: IConfig, importer: FunctionImporter) {
288
- if (config.path === true) importer.use("join");
289
- return (obj: MetadataObject) =>
298
+ const generate_object =
299
+ (config: IConfig) =>
300
+ (importer: FunctionImporter) =>
301
+ (obj: MetadataObject) =>
290
302
  ts.factory.createArrowFunction(
291
303
  undefined,
292
304
  undefined,
293
- PARAMETERS(config)(ValueFactory.INPUT()),
305
+ PARAMETERS(config)(TypeFactory.keyword("any"))(
306
+ ValueFactory.INPUT(),
307
+ ),
294
308
  undefined,
295
309
  undefined,
296
310
  config.objector.joiner(
297
311
  ts.factory.createIdentifier("input"),
298
- feature_object_entries(config)(obj)(
312
+ feature_object_entries(config)(importer)(obj)(
299
313
  ts.factory.createIdentifier("input"),
300
314
  ),
301
315
  obj,
302
316
  ),
303
317
  );
304
- }
305
318
 
306
319
  function generate_union(config: IConfig) {
307
320
  const explorer = UnionExplorer.object(config);
@@ -311,7 +324,9 @@ export namespace FeatureProgrammer {
311
324
  ts.factory.createArrowFunction(
312
325
  undefined,
313
326
  undefined,
314
- PARAMETERS(config)(ValueFactory.INPUT()),
327
+ PARAMETERS(config)(TypeFactory.keyword("any"))(
328
+ ValueFactory.INPUT(),
329
+ ),
315
330
  undefined,
316
331
  undefined,
317
332
  explorer(
@@ -343,7 +358,12 @@ export namespace FeatureProgrammer {
343
358
  const rand: string = importer.increment().toString();
344
359
  const tail =
345
360
  config.path || config.trace
346
- ? [IdentifierFactory.parameter("index" + rand)]
361
+ ? [
362
+ IdentifierFactory.parameter(
363
+ "index" + rand,
364
+ TypeFactory.keyword("number"),
365
+ ),
366
+ ]
347
367
  : [];
348
368
 
349
369
  return (
@@ -355,7 +375,13 @@ export namespace FeatureProgrammer {
355
375
  const arrow: ts.ArrowFunction = ts.factory.createArrowFunction(
356
376
  undefined,
357
377
  undefined,
358
- [IdentifierFactory.parameter("elem"), ...tail],
378
+ [
379
+ IdentifierFactory.parameter(
380
+ "elem",
381
+ TypeFactory.keyword("any"),
382
+ ),
383
+ ...tail,
384
+ ],
359
385
  undefined,
360
386
  undefined,
361
387
  config.decoder(
@@ -438,15 +464,27 @@ const INDEX_SYMBOL =
438
464
  return prev.substring(0, prev.length - 1) + tail.substring(1);
439
465
  return prev + ` + ${tail}`;
440
466
  };
441
- const PARAMETERS = (
442
- props: Pick<CheckerProgrammer.IConfig, "path" | "trace">,
443
- ) => {
444
- const tail: ts.ParameterDeclaration[] = [];
445
- if (props.path) tail.push(IdentifierFactory.parameter("path"));
446
- if (props.trace) tail.push(IdentifierFactory.parameter("exceptionable"));
447
-
448
- return (input: ts.Identifier) => [
449
- IdentifierFactory.parameter(input),
450
- ...tail,
451
- ];
452
- };
467
+ const PARAMETERS =
468
+ (props: Pick<CheckerProgrammer.IConfig, "path" | "trace">) =>
469
+ (type: ts.TypeNode) => {
470
+ const tail: ts.ParameterDeclaration[] = [];
471
+ if (props.path)
472
+ tail.push(
473
+ IdentifierFactory.parameter(
474
+ "path",
475
+ TypeFactory.keyword("string"),
476
+ ),
477
+ );
478
+ if (props.trace)
479
+ tail.push(
480
+ IdentifierFactory.parameter(
481
+ "exceptionable",
482
+ TypeFactory.keyword("boolean"),
483
+ ),
484
+ );
485
+
486
+ return (input: ts.Identifier) => [
487
+ IdentifierFactory.parameter(input, type),
488
+ ...tail,
489
+ ];
490
+ };
@@ -2,6 +2,7 @@ import ts from "typescript";
2
2
 
3
3
  import { IdentifierFactory } from "../factories/IdentifierFactory";
4
4
  import { StatementFactory } from "../factories/StatementFactory";
5
+ import { TypeFactory } from "../factories/TypeFactory";
5
6
 
6
7
  import { IProject } from "../transformers/IProject";
7
8
 
@@ -15,8 +16,22 @@ export namespace IsCloneProgrammer {
15
16
  ts.factory.createArrowFunction(
16
17
  undefined,
17
18
  undefined,
18
- [IdentifierFactory.parameter("input")],
19
- undefined,
19
+ [
20
+ IdentifierFactory.parameter(
21
+ "input",
22
+ TypeFactory.keyword("any"),
23
+ ),
24
+ ],
25
+ ts.factory.createUnionTypeNode([
26
+ ts.factory.createTypeReferenceNode("typia.Primitive", [
27
+ project.checker.typeToTypeNode(
28
+ type,
29
+ undefined,
30
+ undefined,
31
+ ) ?? TypeFactory.keyword("any"),
32
+ ]),
33
+ ts.factory.createLiteralTypeNode(ts.factory.createNull()),
34
+ ]),
20
35
  undefined,
21
36
  ts.factory.createBlock([
22
37
  StatementFactory.constant(
@@ -2,6 +2,7 @@ import ts from "typescript";
2
2
 
3
3
  import { IdentifierFactory } from "../factories/IdentifierFactory";
4
4
  import { StatementFactory } from "../factories/StatementFactory";
5
+ import { TypeFactory } from "../factories/TypeFactory";
5
6
 
6
7
  import { IProject } from "../transformers/IProject";
7
8
 
@@ -14,8 +15,19 @@ export namespace IsParseProgrammer {
14
15
  ts.factory.createArrowFunction(
15
16
  undefined,
16
17
  undefined,
17
- [IdentifierFactory.parameter("input")],
18
- undefined,
18
+ [
19
+ IdentifierFactory.parameter(
20
+ "input",
21
+ TypeFactory.keyword("any"),
22
+ ),
23
+ ],
24
+ ts.factory.createTypeReferenceNode("typia.Primitive", [
25
+ project.checker.typeToTypeNode(
26
+ type,
27
+ undefined,
28
+ undefined,
29
+ ) ?? TypeFactory.keyword("any"),
30
+ ]),
19
31
  undefined,
20
32
  ts.factory.createBlock([
21
33
  StatementFactory.constant(
@@ -51,7 +63,10 @@ export namespace IsParseProgrammer {
51
63
  [ts.factory.createIdentifier("input")],
52
64
  ),
53
65
  undefined,
54
- ts.factory.createIdentifier("input"),
66
+ ts.factory.createAsExpression(
67
+ ts.factory.createIdentifier("input"),
68
+ TypeFactory.keyword("any"),
69
+ ),
55
70
  undefined,
56
71
  ts.factory.createNull(),
57
72
  ),
@@ -126,7 +126,9 @@ export namespace IsProgrammer {
126
126
  }),
127
127
  config.joiner.object(
128
128
  input,
129
- feature_object_entries(config as any)(obj)(input),
129
+ feature_object_entries(config as any)(importer)(
130
+ obj,
131
+ )(input),
130
132
  ),
131
133
  );
132
134
  }
@@ -2,6 +2,7 @@ import ts from "typescript";
2
2
 
3
3
  import { IdentifierFactory } from "../factories/IdentifierFactory";
4
4
  import { StatementFactory } from "../factories/StatementFactory";
5
+ import { TypeFactory } from "../factories/TypeFactory";
5
6
 
6
7
  import { IProject } from "../transformers/IProject";
7
8
 
@@ -15,8 +16,21 @@ export namespace IsPruneProgrammer {
15
16
  ts.factory.createArrowFunction(
16
17
  undefined,
17
18
  undefined,
18
- [IdentifierFactory.parameter("input")],
19
- undefined,
19
+ [
20
+ IdentifierFactory.parameter(
21
+ "input",
22
+ TypeFactory.keyword("any"),
23
+ ),
24
+ ],
25
+ ts.factory.createTypePredicateNode(
26
+ undefined,
27
+ "input",
28
+ project.checker.typeToTypeNode(
29
+ type,
30
+ undefined,
31
+ undefined,
32
+ ) ?? TypeFactory.keyword("any"),
33
+ ),
20
34
  undefined,
21
35
  ts.factory.createBlock([
22
36
  StatementFactory.constant(