typia 3.6.3 → 3.6.4

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 (138) hide show
  1. package/lib/functional/$is_uuid.js +1 -1
  2. package/lib/functional/$is_uuid.js.map +1 -1
  3. package/package.json +1 -1
  4. package/src/IRandomGenerator.ts +16 -16
  5. package/src/IValidation.ts +21 -21
  6. package/src/Primitive.ts +104 -104
  7. package/src/TypeGuardError.ts +36 -36
  8. package/src/executable/TypiaGenerateWizard.ts +87 -87
  9. package/src/executable/TypiaSetupWizard.ts +142 -142
  10. package/src/executable/setup/CommandExecutor.ts +8 -8
  11. package/src/executable/typia.ts +38 -38
  12. package/src/factories/CommentFactory.ts +10 -10
  13. package/src/factories/ExpressionFactory.ts +77 -77
  14. package/src/factories/IdentifierFactory.ts +73 -73
  15. package/src/factories/LiteralFactory.ts +44 -44
  16. package/src/factories/MetadataCollection.ts +122 -122
  17. package/src/factories/MetadataFactory.ts +51 -51
  18. package/src/factories/MetadataTagFactory.ts +265 -265
  19. package/src/factories/StatementFactory.ts +60 -60
  20. package/src/factories/TemplateFactory.ts +56 -56
  21. package/src/factories/TypeFactory.ts +129 -129
  22. package/src/factories/TypiaFileFactory.ts +117 -117
  23. package/src/factories/ValueFactory.ts +12 -12
  24. package/src/factories/internal/metadata/MetadataHelper.ts +12 -12
  25. package/src/factories/internal/metadata/explore_metadata.ts +92 -92
  26. package/src/factories/internal/metadata/iterate_metadata.ts +80 -80
  27. package/src/factories/internal/metadata/iterate_metadata_array.ts +29 -29
  28. package/src/factories/internal/metadata/iterate_metadata_atomic.ts +59 -59
  29. package/src/factories/internal/metadata/iterate_metadata_coalesce.ts +33 -33
  30. package/src/factories/internal/metadata/iterate_metadata_constant.ts +58 -58
  31. package/src/factories/internal/metadata/iterate_metadata_map.ts +41 -41
  32. package/src/factories/internal/metadata/iterate_metadata_native.ts +222 -222
  33. package/src/factories/internal/metadata/iterate_metadata_object.ts +48 -48
  34. package/src/factories/internal/metadata/iterate_metadata_resolve.ts +27 -27
  35. package/src/factories/internal/metadata/iterate_metadata_set.ts +33 -33
  36. package/src/factories/internal/metadata/iterate_metadata_template.ts +38 -38
  37. package/src/factories/internal/metadata/iterate_metadata_tuple.ts +45 -45
  38. package/src/factories/internal/metadata/iterate_metadata_union.ts +59 -59
  39. package/src/functional/$any.ts +3 -3
  40. package/src/functional/$every.ts +11 -11
  41. package/src/functional/$guard.ts +35 -35
  42. package/src/functional/$is_between.ts +7 -7
  43. package/src/functional/$is_email.ts +5 -5
  44. package/src/functional/$is_ipv4.ts +5 -5
  45. package/src/functional/$is_ipv6.ts +5 -5
  46. package/src/functional/$is_url.ts +5 -5
  47. package/src/functional/$is_uuid.ts +4 -5
  48. package/src/functional/$join.ts +50 -50
  49. package/src/functional/$number.ts +12 -12
  50. package/src/functional/$report.ts +15 -15
  51. package/src/functional/$rest.ts +3 -3
  52. package/src/functional/$string.ts +37 -37
  53. package/src/functional/$tail.ts +6 -6
  54. package/src/functional/Namespace.ts +121 -121
  55. package/src/index.ts +4 -4
  56. package/src/metadata/IJsDocTagInfo.ts +10 -10
  57. package/src/metadata/IMetadata.ts +25 -25
  58. package/src/metadata/IMetadataApplication.ts +7 -7
  59. package/src/metadata/IMetadataConstant.ts +16 -16
  60. package/src/metadata/IMetadataEntry.ts +6 -6
  61. package/src/metadata/IMetadataObject.ts +29 -29
  62. package/src/metadata/IMetadataProperty.ts +11 -11
  63. package/src/metadata/IMetadataTag.ts +113 -113
  64. package/src/metadata/Metadata.ts +534 -534
  65. package/src/metadata/MetadataConstant.ts +3 -3
  66. package/src/metadata/MetadataObject.ts +131 -131
  67. package/src/metadata/MetadataProperty.ts +64 -64
  68. package/src/programmers/ApplicationProgrammer.ts +55 -55
  69. package/src/programmers/IsProgrammer.ts +200 -200
  70. package/src/programmers/helpers/AtomicPredicator.ts +31 -31
  71. package/src/programmers/helpers/CloneJoiner.ts +134 -134
  72. package/src/programmers/helpers/FunctionImporeter.ts +55 -55
  73. package/src/programmers/helpers/IExpressionEntry.ts +12 -12
  74. package/src/programmers/helpers/OptionPredicator.ts +19 -19
  75. package/src/programmers/helpers/PruneJoiner.ts +52 -52
  76. package/src/programmers/helpers/RandomJoiner.ts +149 -149
  77. package/src/programmers/helpers/RandomRanger.ts +216 -216
  78. package/src/programmers/helpers/StringifyJoinder.ts +114 -114
  79. package/src/programmers/helpers/StringifyPredicator.ts +18 -18
  80. package/src/programmers/helpers/UnionExplorer.ts +274 -274
  81. package/src/programmers/helpers/UnionPredicator.ts +81 -81
  82. package/src/programmers/internal/application_array.ts +37 -37
  83. package/src/programmers/internal/application_boolean.ts +17 -17
  84. package/src/programmers/internal/application_constant.ts +29 -29
  85. package/src/programmers/internal/application_default.ts +17 -17
  86. package/src/programmers/internal/application_default_string.ts +32 -32
  87. package/src/programmers/internal/application_native.ts +29 -29
  88. package/src/programmers/internal/application_number.ts +70 -70
  89. package/src/programmers/internal/application_object.ts +153 -153
  90. package/src/programmers/internal/application_schema.ts +184 -184
  91. package/src/programmers/internal/application_string.ts +41 -41
  92. package/src/programmers/internal/application_templates.ts +27 -27
  93. package/src/programmers/internal/application_tuple.ts +29 -29
  94. package/src/programmers/internal/check_array.ts +22 -22
  95. package/src/programmers/internal/check_array_length.ts +44 -44
  96. package/src/programmers/internal/check_bigint.ts +64 -64
  97. package/src/programmers/internal/check_dynamic_properties.ts +197 -197
  98. package/src/programmers/internal/check_everything.ts +28 -28
  99. package/src/programmers/internal/check_native.ts +21 -21
  100. package/src/programmers/internal/check_number.ts +145 -145
  101. package/src/programmers/internal/check_object.ts +48 -48
  102. package/src/programmers/internal/check_string.ts +24 -24
  103. package/src/programmers/internal/check_string_tags.ts +63 -63
  104. package/src/programmers/internal/check_template.ts +50 -50
  105. package/src/programmers/internal/check_union_array_like.ts +260 -260
  106. package/src/programmers/internal/check_union_tuple.ts +33 -33
  107. package/src/programmers/internal/decode_union_object.ts +73 -73
  108. package/src/programmers/internal/feature_object_entries.ts +59 -59
  109. package/src/programmers/internal/metadata_to_pattern.ts +31 -31
  110. package/src/programmers/internal/prune_object_properties.ts +60 -60
  111. package/src/programmers/internal/stringify_dynamic_properties.ts +165 -165
  112. package/src/programmers/internal/stringify_native.ts +8 -8
  113. package/src/programmers/internal/stringify_regular_properties.ts +81 -81
  114. package/src/programmers/internal/template_to_pattern.ts +15 -15
  115. package/src/schemas/IJsonApplication.ts +9 -9
  116. package/src/schemas/IJsonComponents.ts +26 -26
  117. package/src/schemas/IJsonSchema.ts +127 -127
  118. package/src/transform.ts +21 -21
  119. package/src/transformers/CallExpressionTransformer.ts +172 -172
  120. package/src/transformers/ExpressionWithArgumentTransformer.ts +66 -66
  121. package/src/transformers/FileTransformer.ts +49 -49
  122. package/src/transformers/IProject.ts +11 -11
  123. package/src/transformers/ITransformOptions.ts +62 -62
  124. package/src/transformers/ImportTransformer.ts +60 -60
  125. package/src/transformers/NodeTransformer.ts +19 -19
  126. package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +120 -120
  127. package/src/transformers/features/miscellaneous/MetadataTransformer.ts +55 -55
  128. package/src/typings/Atomic.ts +17 -17
  129. package/src/typings/ClassProperties.ts +5 -5
  130. package/src/typings/OmitNever.ts +3 -3
  131. package/src/typings/SpecialFields.ts +3 -3
  132. package/src/typings/Writable.ts +11 -11
  133. package/src/utils/ArrayUtil.ts +49 -49
  134. package/src/utils/Escaper.ts +50 -50
  135. package/src/utils/MapUtil.ts +14 -14
  136. package/src/utils/PatternUtil.ts +30 -30
  137. package/src/utils/RandomGenerator.ts +90 -90
  138. package/src/utils/Singleton.ts +17 -17
@@ -1,134 +1,134 @@
1
- import ts from "typescript";
2
-
3
- import { StatementFactory } from "../../factories/StatementFactory";
4
- import { TypeFactory } from "../../factories/TypeFactory";
5
-
6
- import { MetadataObject } from "../../metadata/MetadataObject";
7
-
8
- import { Escaper } from "../../utils/Escaper";
9
-
10
- import { metadata_to_pattern } from "../internal/metadata_to_pattern";
11
- import { IExpressionEntry } from "./IExpressionEntry";
12
-
13
- export namespace CloneJoiner {
14
- export const object = (
15
- input: ts.Expression,
16
- entries: IExpressionEntry<ts.Expression>[],
17
- _obj: MetadataObject,
18
- ): ts.ConciseBody => {
19
- if (entries.length === 0) return ts.factory.createIdentifier("{}");
20
-
21
- const regular = entries.filter((e) => e.key.isSoleLiteral());
22
- const dynamic = entries.filter((e) => !e.key.isSoleLiteral());
23
- const literal = ts.factory.createObjectLiteralExpression(
24
- regular.map((entry) => {
25
- const str: string = entry.key.getSoleLiteral()!;
26
- return ts.factory.createPropertyAssignment(
27
- Escaper.variable(str)
28
- ? str
29
- : ts.factory.createStringLiteral(str),
30
- entry.expression,
31
- );
32
- }),
33
- true,
34
- );
35
- if (dynamic.length === 0) return literal;
36
-
37
- const key = ts.factory.createIdentifier("key");
38
- const value = ts.factory.createIdentifier("value");
39
- const output = ts.factory.createIdentifier("output");
40
-
41
- const statements: ts.Statement[] = dynamic.map((entry) =>
42
- ts.factory.createIfStatement(
43
- ts.factory.createCallExpression(
44
- ts.factory.createIdentifier(
45
- `RegExp(/${metadata_to_pattern(true)(
46
- entry.key,
47
- )}/).test`,
48
- ),
49
- undefined,
50
- [key],
51
- ),
52
- ts.factory.createBlock([
53
- ts.factory.createExpressionStatement(
54
- ts.factory.createBinaryExpression(
55
- ts.factory.createElementAccessExpression(
56
- output,
57
- key,
58
- ),
59
- ts.factory.createToken(ts.SyntaxKind.EqualsToken),
60
- entry.expression,
61
- ),
62
- ),
63
- ts.factory.createContinueStatement(),
64
- ]),
65
- ),
66
- );
67
-
68
- return ts.factory.createBlock([
69
- StatementFactory.constant(
70
- "output",
71
- ts.factory.createAsExpression(
72
- literal,
73
- TypeFactory.keyword("any"),
74
- ),
75
- ),
76
- ts.factory.createForOfStatement(
77
- undefined,
78
- ts.factory.createVariableDeclarationList(
79
- [
80
- ts.factory.createVariableDeclaration(
81
- ts.factory.createArrayBindingPattern([
82
- ts.factory.createBindingElement(
83
- undefined,
84
- undefined,
85
- key,
86
- undefined,
87
- ),
88
- ts.factory.createBindingElement(
89
- undefined,
90
- undefined,
91
- value,
92
- undefined,
93
- ),
94
- ]),
95
- undefined,
96
- undefined,
97
- undefined,
98
- ),
99
- ],
100
- ts.NodeFlags.Const,
101
- ),
102
- ts.factory.createCallExpression(
103
- ts.factory.createIdentifier("Object.entries"),
104
- undefined,
105
- [input],
106
- ),
107
- ts.factory.createBlock(statements),
108
- ),
109
- ts.factory.createReturnStatement(output),
110
- ]);
111
- };
112
-
113
- export const tuple = (
114
- children: ts.Expression[],
115
- rest: ts.Expression | null,
116
- ): ts.Expression => {
117
- return ts.factory.createAsExpression(
118
- ts.factory.createArrayLiteralExpression(
119
- rest === null
120
- ? children
121
- : [...children, ts.factory.createSpreadElement(rest)],
122
- true,
123
- ),
124
- TypeFactory.keyword("any"),
125
- );
126
- };
127
-
128
- export const array = (input: ts.Expression, arrow: ts.Expression) =>
129
- ts.factory.createCallExpression(
130
- ts.factory.createPropertyAccessExpression(input, "map"),
131
- undefined,
132
- [arrow],
133
- );
134
- }
1
+ import ts from "typescript";
2
+
3
+ import { StatementFactory } from "../../factories/StatementFactory";
4
+ import { TypeFactory } from "../../factories/TypeFactory";
5
+
6
+ import { MetadataObject } from "../../metadata/MetadataObject";
7
+
8
+ import { Escaper } from "../../utils/Escaper";
9
+
10
+ import { metadata_to_pattern } from "../internal/metadata_to_pattern";
11
+ import { IExpressionEntry } from "./IExpressionEntry";
12
+
13
+ export namespace CloneJoiner {
14
+ export const object = (
15
+ input: ts.Expression,
16
+ entries: IExpressionEntry<ts.Expression>[],
17
+ _obj: MetadataObject,
18
+ ): ts.ConciseBody => {
19
+ if (entries.length === 0) return ts.factory.createIdentifier("{}");
20
+
21
+ const regular = entries.filter((e) => e.key.isSoleLiteral());
22
+ const dynamic = entries.filter((e) => !e.key.isSoleLiteral());
23
+ const literal = ts.factory.createObjectLiteralExpression(
24
+ regular.map((entry) => {
25
+ const str: string = entry.key.getSoleLiteral()!;
26
+ return ts.factory.createPropertyAssignment(
27
+ Escaper.variable(str)
28
+ ? str
29
+ : ts.factory.createStringLiteral(str),
30
+ entry.expression,
31
+ );
32
+ }),
33
+ true,
34
+ );
35
+ if (dynamic.length === 0) return literal;
36
+
37
+ const key = ts.factory.createIdentifier("key");
38
+ const value = ts.factory.createIdentifier("value");
39
+ const output = ts.factory.createIdentifier("output");
40
+
41
+ const statements: ts.Statement[] = dynamic.map((entry) =>
42
+ ts.factory.createIfStatement(
43
+ ts.factory.createCallExpression(
44
+ ts.factory.createIdentifier(
45
+ `RegExp(/${metadata_to_pattern(true)(
46
+ entry.key,
47
+ )}/).test`,
48
+ ),
49
+ undefined,
50
+ [key],
51
+ ),
52
+ ts.factory.createBlock([
53
+ ts.factory.createExpressionStatement(
54
+ ts.factory.createBinaryExpression(
55
+ ts.factory.createElementAccessExpression(
56
+ output,
57
+ key,
58
+ ),
59
+ ts.factory.createToken(ts.SyntaxKind.EqualsToken),
60
+ entry.expression,
61
+ ),
62
+ ),
63
+ ts.factory.createContinueStatement(),
64
+ ]),
65
+ ),
66
+ );
67
+
68
+ return ts.factory.createBlock([
69
+ StatementFactory.constant(
70
+ "output",
71
+ ts.factory.createAsExpression(
72
+ literal,
73
+ TypeFactory.keyword("any"),
74
+ ),
75
+ ),
76
+ ts.factory.createForOfStatement(
77
+ undefined,
78
+ ts.factory.createVariableDeclarationList(
79
+ [
80
+ ts.factory.createVariableDeclaration(
81
+ ts.factory.createArrayBindingPattern([
82
+ ts.factory.createBindingElement(
83
+ undefined,
84
+ undefined,
85
+ key,
86
+ undefined,
87
+ ),
88
+ ts.factory.createBindingElement(
89
+ undefined,
90
+ undefined,
91
+ value,
92
+ undefined,
93
+ ),
94
+ ]),
95
+ undefined,
96
+ undefined,
97
+ undefined,
98
+ ),
99
+ ],
100
+ ts.NodeFlags.Const,
101
+ ),
102
+ ts.factory.createCallExpression(
103
+ ts.factory.createIdentifier("Object.entries"),
104
+ undefined,
105
+ [input],
106
+ ),
107
+ ts.factory.createBlock(statements),
108
+ ),
109
+ ts.factory.createReturnStatement(output),
110
+ ]);
111
+ };
112
+
113
+ export const tuple = (
114
+ children: ts.Expression[],
115
+ rest: ts.Expression | null,
116
+ ): ts.Expression => {
117
+ return ts.factory.createAsExpression(
118
+ ts.factory.createArrayLiteralExpression(
119
+ rest === null
120
+ ? children
121
+ : [...children, ts.factory.createSpreadElement(rest)],
122
+ true,
123
+ ),
124
+ TypeFactory.keyword("any"),
125
+ );
126
+ };
127
+
128
+ export const array = (input: ts.Expression, arrow: ts.Expression) =>
129
+ ts.factory.createCallExpression(
130
+ ts.factory.createPropertyAccessExpression(input, "map"),
131
+ undefined,
132
+ [arrow],
133
+ );
134
+ }
@@ -1,55 +1,55 @@
1
- import ts from "typescript";
2
-
3
- import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
- import { StatementFactory } from "../../factories/StatementFactory";
5
- import { TypeFactory } from "../../factories/TypeFactory";
6
-
7
- export class FunctionImporter {
8
- private readonly used_: Set<string> = new Set();
9
- private readonly local_: Set<string> = new Set();
10
- private sequence_: number = 0;
11
-
12
- public empty(): boolean {
13
- return this.used_.size === 0;
14
- }
15
-
16
- public use(name: string): ts.Identifier {
17
- this.used_.add(name);
18
- return ts.factory.createIdentifier("$" + name);
19
- }
20
-
21
- public useLocal(name: string): string {
22
- this.local_.add(name);
23
- return name;
24
- }
25
-
26
- public hasLocal(name: string): boolean {
27
- return this.local_.has(name);
28
- }
29
-
30
- public declare(modulo: ts.LeftHandSideExpression): ts.Statement[] {
31
- return [...this.used_].map((name) =>
32
- StatementFactory.constant(
33
- "$" + name,
34
- IdentifierFactory.join(
35
- ts.factory.createParenthesizedExpression(
36
- ts.factory.createAsExpression(
37
- modulo,
38
- TypeFactory.keyword("any"),
39
- ),
40
- ),
41
- name,
42
- ),
43
- ),
44
- );
45
- }
46
-
47
- public increment(): number {
48
- return ++this.sequence_;
49
- }
50
-
51
- public trace(): void {
52
- console.log(...this.used_);
53
- console.log(...this.local_);
54
- }
55
- }
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ export class FunctionImporter {
8
+ private readonly used_: Set<string> = new Set();
9
+ private readonly local_: Set<string> = new Set();
10
+ private sequence_: number = 0;
11
+
12
+ public empty(): boolean {
13
+ return this.used_.size === 0;
14
+ }
15
+
16
+ public use(name: string): ts.Identifier {
17
+ this.used_.add(name);
18
+ return ts.factory.createIdentifier("$" + name);
19
+ }
20
+
21
+ public useLocal(name: string): string {
22
+ this.local_.add(name);
23
+ return name;
24
+ }
25
+
26
+ public hasLocal(name: string): boolean {
27
+ return this.local_.has(name);
28
+ }
29
+
30
+ public declare(modulo: ts.LeftHandSideExpression): ts.Statement[] {
31
+ return [...this.used_].map((name) =>
32
+ StatementFactory.constant(
33
+ "$" + name,
34
+ IdentifierFactory.join(
35
+ ts.factory.createParenthesizedExpression(
36
+ ts.factory.createAsExpression(
37
+ modulo,
38
+ TypeFactory.keyword("any"),
39
+ ),
40
+ ),
41
+ name,
42
+ ),
43
+ ),
44
+ );
45
+ }
46
+
47
+ public increment(): number {
48
+ return ++this.sequence_;
49
+ }
50
+
51
+ public trace(): void {
52
+ console.log(...this.used_);
53
+ console.log(...this.local_);
54
+ }
55
+ }
@@ -1,12 +1,12 @@
1
- import ts from "typescript";
2
-
3
- import { Metadata } from "../../metadata/Metadata";
4
-
5
- export interface IExpressionEntry<
6
- Expression extends ts.ConciseBody = ts.ConciseBody,
7
- > {
8
- input: ts.Expression;
9
- key: Metadata;
10
- meta: Metadata;
11
- expression: Expression;
12
- }
1
+ import ts from "typescript";
2
+
3
+ import { Metadata } from "../../metadata/Metadata";
4
+
5
+ export interface IExpressionEntry<
6
+ Expression extends ts.ConciseBody = ts.ConciseBody,
7
+ > {
8
+ input: ts.Expression;
9
+ key: Metadata;
10
+ meta: Metadata;
11
+ expression: Expression;
12
+ }
@@ -1,19 +1,19 @@
1
- import { ITransformOptions } from "../../transformers/ITransformOptions";
2
-
3
- export namespace OptionPredicator {
4
- export function numeric(options: ITransformOptions): boolean {
5
- return finite(options) || options.numeric === true;
6
- }
7
-
8
- export function functional(options: ITransformOptions): boolean {
9
- return options.functional === true;
10
- }
11
-
12
- export function finite(options: ITransformOptions): boolean {
13
- return options.finite === true;
14
- }
15
-
16
- export function undefined(options: ITransformOptions): boolean {
17
- return options.undefined !== false;
18
- }
19
- }
1
+ import { ITransformOptions } from "../../transformers/ITransformOptions";
2
+
3
+ export namespace OptionPredicator {
4
+ export function numeric(options: ITransformOptions): boolean {
5
+ return finite(options) || options.numeric === true;
6
+ }
7
+
8
+ export function functional(options: ITransformOptions): boolean {
9
+ return options.functional === true;
10
+ }
11
+
12
+ export function finite(options: ITransformOptions): boolean {
13
+ return options.finite === true;
14
+ }
15
+
16
+ export function undefined(options: ITransformOptions): boolean {
17
+ return options.undefined !== false;
18
+ }
19
+ }
@@ -1,52 +1,52 @@
1
- import ts from "typescript";
2
-
3
- import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
-
5
- import { MetadataObject } from "../../metadata/MetadataObject";
6
-
7
- import { ArrayUtil } from "../../utils/ArrayUtil";
8
-
9
- import { prune_object_properties } from "../internal/prune_object_properties";
10
- import { IExpressionEntry } from "./IExpressionEntry";
11
-
12
- export namespace PruneJoiner {
13
- export const object = (
14
- _input: ts.Expression,
15
- entries: IExpressionEntry[],
16
- obj: MetadataObject,
17
- ): ts.ConciseBody => {
18
- const statements: ts.Statement[] = ArrayUtil.flat(
19
- entries.map((entry) =>
20
- ts.isBlock(entry.expression)
21
- ? [...entry.expression.statements]
22
- : [ts.factory.createExpressionStatement(entry.expression)],
23
- ),
24
- );
25
- statements.push(prune_object_properties(obj));
26
- return ts.factory.createBlock(statements, true);
27
- };
28
-
29
- export const array = (input: ts.Expression, arrow: ts.ArrowFunction) =>
30
- ts.factory.createCallExpression(
31
- IdentifierFactory.join(input, "forEach"),
32
- undefined,
33
- [arrow],
34
- );
35
-
36
- export const tuple = (
37
- children: ts.ConciseBody[],
38
- rest: ts.ConciseBody | null,
39
- ): ts.Block => {
40
- const entire: ts.ConciseBody[] = [...children];
41
- if (rest !== null) entire.push(rest);
42
-
43
- const statements: ts.Statement[] = ArrayUtil.flat(
44
- entire.map((elem) =>
45
- ts.isBlock(elem)
46
- ? [...elem.statements]
47
- : [ts.factory.createExpressionStatement(elem)],
48
- ),
49
- );
50
- return ts.factory.createBlock(statements, true);
51
- };
52
- }
1
+ import ts from "typescript";
2
+
3
+ import { IdentifierFactory } from "../../factories/IdentifierFactory";
4
+
5
+ import { MetadataObject } from "../../metadata/MetadataObject";
6
+
7
+ import { ArrayUtil } from "../../utils/ArrayUtil";
8
+
9
+ import { prune_object_properties } from "../internal/prune_object_properties";
10
+ import { IExpressionEntry } from "./IExpressionEntry";
11
+
12
+ export namespace PruneJoiner {
13
+ export const object = (
14
+ _input: ts.Expression,
15
+ entries: IExpressionEntry[],
16
+ obj: MetadataObject,
17
+ ): ts.ConciseBody => {
18
+ const statements: ts.Statement[] = ArrayUtil.flat(
19
+ entries.map((entry) =>
20
+ ts.isBlock(entry.expression)
21
+ ? [...entry.expression.statements]
22
+ : [ts.factory.createExpressionStatement(entry.expression)],
23
+ ),
24
+ );
25
+ statements.push(prune_object_properties(obj));
26
+ return ts.factory.createBlock(statements, true);
27
+ };
28
+
29
+ export const array = (input: ts.Expression, arrow: ts.ArrowFunction) =>
30
+ ts.factory.createCallExpression(
31
+ IdentifierFactory.join(input, "forEach"),
32
+ undefined,
33
+ [arrow],
34
+ );
35
+
36
+ export const tuple = (
37
+ children: ts.ConciseBody[],
38
+ rest: ts.ConciseBody | null,
39
+ ): ts.Block => {
40
+ const entire: ts.ConciseBody[] = [...children];
41
+ if (rest !== null) entire.push(rest);
42
+
43
+ const statements: ts.Statement[] = ArrayUtil.flat(
44
+ entire.map((elem) =>
45
+ ts.isBlock(elem)
46
+ ? [...elem.statements]
47
+ : [ts.factory.createExpressionStatement(elem)],
48
+ ),
49
+ );
50
+ return ts.factory.createBlock(statements, true);
51
+ };
52
+ }