typia 6.7.0 → 6.7.1

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 (85) hide show
  1. package/lib/programmers/AssertProgrammer.d.ts +0 -1
  2. package/lib/programmers/AssertProgrammer.js.map +1 -1
  3. package/lib/programmers/CheckerProgrammer.d.ts +1 -1
  4. package/lib/programmers/FeatureProgrammer.d.ts +1 -1
  5. package/lib/programmers/IsProgrammer.d.ts +1 -1
  6. package/lib/programmers/RandomProgrammer.d.ts +10 -1
  7. package/lib/programmers/RandomProgrammer.js +62 -37
  8. package/lib/programmers/RandomProgrammer.js.map +1 -1
  9. package/lib/programmers/ValidateProgrammer.d.ts +1 -1
  10. package/lib/programmers/json/JsonIsParseProgrammer.d.ts +1 -1
  11. package/lib/programmers/json/JsonIsStringifyProgrammer.d.ts +1 -1
  12. package/lib/programmers/json/JsonStringifyProgrammer.d.ts +1 -1
  13. package/lib/programmers/json/JsonStringifyProgrammer.js +1 -3
  14. package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
  15. package/lib/programmers/json/JsonValidateParseProgrammer.d.ts +1 -1
  16. package/lib/programmers/json/JsonValidateStringifyProgrammer.d.ts +1 -1
  17. package/lib/programmers/misc/MiscCloneProgrammer.d.ts +1 -1
  18. package/lib/programmers/misc/MiscCloneProgrammer.js +33 -14
  19. package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
  20. package/lib/programmers/misc/MiscIsCloneProgrammer.d.ts +1 -1
  21. package/lib/programmers/misc/MiscIsPruneProgrammer.d.ts +1 -1
  22. package/lib/programmers/misc/MiscPruneProgrammer.d.ts +1 -1
  23. package/lib/programmers/misc/MiscValidateCloneProgrammer.d.ts +1 -1
  24. package/lib/programmers/misc/MiscValidatePruneProgrammer.d.ts +1 -1
  25. package/lib/programmers/notations/NotationGeneralProgrammer.d.ts +1 -1
  26. package/lib/programmers/notations/NotationGeneralProgrammer.js +30 -11
  27. package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
  28. package/lib/programmers/notations/NotationValidateGeneralProgrammer.d.ts +1 -1
  29. package/package.json +1 -1
  30. package/src/programmers/AssertProgrammer.ts +397 -398
  31. package/src/programmers/CheckerProgrammer.ts +1138 -1138
  32. package/src/programmers/FeatureProgrammer.ts +549 -549
  33. package/src/programmers/IsProgrammer.ts +1 -1
  34. package/src/programmers/RandomProgrammer.ts +112 -77
  35. package/src/programmers/ValidateProgrammer.ts +382 -382
  36. package/src/programmers/functional/FunctionalAssertFunctionProgrammer.ts +141 -141
  37. package/src/programmers/functional/FunctionalAssertParametersProgrammer.ts +108 -108
  38. package/src/programmers/functional/FunctionalAssertReturnProgrammer.ts +98 -98
  39. package/src/programmers/functional/FunctionalIsFunctionProgrammer.ts +72 -72
  40. package/src/programmers/functional/FunctionalIsParametersProgrammer.ts +101 -101
  41. package/src/programmers/functional/FunctionalIsReturnProgrammer.ts +106 -106
  42. package/src/programmers/functional/FunctionalValidateFunctionProgrammer.ts +123 -123
  43. package/src/programmers/functional/FunctionalValidateParametersProgrammer.ts +267 -267
  44. package/src/programmers/functional/FunctionalValidateReturnProgrammer.ts +126 -126
  45. package/src/programmers/helpers/FunctionImporter.ts +97 -97
  46. package/src/programmers/http/HttpAssertFormDataProgrammer.ts +91 -91
  47. package/src/programmers/http/HttpAssertHeadersProgrammer.ts +91 -91
  48. package/src/programmers/http/HttpAssertQueryProgrammer.ts +93 -93
  49. package/src/programmers/http/HttpFormDataProgrammer.ts +278 -278
  50. package/src/programmers/http/HttpHeadersProgrammer.ts +347 -347
  51. package/src/programmers/http/HttpIsFormDataProgrammer.ts +102 -102
  52. package/src/programmers/http/HttpIsHeadersProgrammer.ts +102 -102
  53. package/src/programmers/http/HttpIsQueryProgrammer.ts +104 -104
  54. package/src/programmers/http/HttpQueryProgrammer.ts +298 -298
  55. package/src/programmers/http/HttpValidateFormDataProgrammer.ts +85 -85
  56. package/src/programmers/http/HttpValidateHeadersProgrammer.ts +85 -85
  57. package/src/programmers/http/HttpValidateQueryProgrammer.ts +87 -87
  58. package/src/programmers/json/JsonAssertParseProgrammer.ts +96 -96
  59. package/src/programmers/json/JsonAssertStringifyProgrammer.ts +104 -104
  60. package/src/programmers/json/JsonIsParseProgrammer.ts +110 -110
  61. package/src/programmers/json/JsonIsStringifyProgrammer.ts +102 -102
  62. package/src/programmers/json/JsonStringifyProgrammer.ts +909 -910
  63. package/src/programmers/json/JsonValidateParseProgrammer.ts +87 -87
  64. package/src/programmers/json/JsonValidateStringifyProgrammer.ts +111 -111
  65. package/src/programmers/misc/MiscAssertCloneProgrammer.ts +87 -87
  66. package/src/programmers/misc/MiscAssertPruneProgrammer.ts +87 -87
  67. package/src/programmers/misc/MiscCloneProgrammer.ts +781 -759
  68. package/src/programmers/misc/MiscIsCloneProgrammer.ts +93 -93
  69. package/src/programmers/misc/MiscIsPruneProgrammer.ts +94 -94
  70. package/src/programmers/misc/MiscPruneProgrammer.ts +560 -560
  71. package/src/programmers/misc/MiscValidateCloneProgrammer.ts +104 -104
  72. package/src/programmers/misc/MiscValidatePruneProgrammer.ts +98 -98
  73. package/src/programmers/notations/NotationAssertGeneralProgrammer.ts +91 -91
  74. package/src/programmers/notations/NotationGeneralProgrammer.ts +709 -685
  75. package/src/programmers/notations/NotationIsGeneralProgrammer.ts +97 -97
  76. package/src/programmers/notations/NotationValidateGeneralProgrammer.ts +107 -107
  77. package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +91 -91
  78. package/src/programmers/protobuf/ProtobufAssertEncodeProgrammer.ts +95 -95
  79. package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +646 -646
  80. package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +852 -852
  81. package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +104 -104
  82. package/src/programmers/protobuf/ProtobufIsEncodeProgrammer.ts +93 -93
  83. package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +85 -85
  84. package/src/programmers/protobuf/ProtobufValidateEncodeProgrammer.ts +109 -109
  85. package/src/transformers/internal/GenericTransformer.ts +104 -104
@@ -1,98 +1,98 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
- import { StatementFactory } from "../../factories/StatementFactory";
5
-
6
- import { IProject } from "../../transformers/IProject";
7
-
8
- import { AssertProgrammer } from "../AssertProgrammer";
9
- import { FunctionalAssertFunctionProgrammer } from "./FunctionalAssertFunctionProgrammer";
10
- import { FunctionalGeneralProgrammer } from "./internal/FunctionalGeneralProgrammer";
11
-
12
- export namespace FunctionAssertReturnProgrammer {
13
- export const write =
14
- (project: IProject) =>
15
- (modulo: ts.LeftHandSideExpression) =>
16
- (equals: boolean) =>
17
- (
18
- expression: ts.Expression,
19
- declaration: ts.FunctionDeclaration,
20
- init?: ts.Expression,
21
- ): ts.CallExpression => {
22
- const wrapper = FunctionalAssertFunctionProgrammer.errorFactoryWrapper(
23
- modulo,
24
- )(declaration.parameters)(init);
25
- const result = decompose(project)(modulo)(equals)(
26
- expression,
27
- declaration,
28
- wrapper.name,
29
- );
30
- return ExpressionFactory.selfCall(
31
- ts.factory.createBlock(
32
- [
33
- wrapper.variable,
34
- ...result.functions,
35
- ts.factory.createReturnStatement(
36
- ts.factory.createArrowFunction(
37
- result.async
38
- ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
39
- : undefined,
40
- undefined,
41
- declaration.parameters,
42
- declaration.type,
43
- undefined,
44
- result.value,
45
- ),
46
- ),
47
- ],
48
- true,
49
- ),
50
- );
51
- };
52
-
53
- export const decompose =
54
- (project: IProject) =>
55
- (modulo: ts.LeftHandSideExpression) =>
56
- (equals: boolean) =>
57
- (
58
- expression: ts.Expression,
59
- declaration: ts.FunctionDeclaration,
60
- wrapper: string,
61
- ): {
62
- async: boolean;
63
- functions: ts.Statement[];
64
- value: ts.Expression;
65
- } => {
66
- const { type, async } = FunctionalGeneralProgrammer.getReturnType(
67
- project.checker,
68
- )(declaration);
69
- const caller: ts.CallExpression = ts.factory.createCallExpression(
70
- expression,
71
- undefined,
72
- declaration.parameters.map((p) =>
73
- ts.factory.createIdentifier(p.name.getText()),
74
- ),
75
- );
76
- return {
77
- async,
78
- functions: [
79
- StatementFactory.constant(
80
- "__assert_return",
81
- AssertProgrammer.write(project)(modulo)(equals)(
82
- type,
83
- undefined,
84
- FunctionalAssertFunctionProgrammer.hookPath({
85
- wrapper,
86
- replacer: "$input.return",
87
- }),
88
- ),
89
- ),
90
- ],
91
- value: ts.factory.createCallExpression(
92
- ts.factory.createIdentifier("__assert_return"),
93
- undefined,
94
- [async ? ts.factory.createAwaitExpression(caller) : caller],
95
- ),
96
- };
97
- };
98
- }
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+
6
+ import { IProject } from "../../transformers/IProject";
7
+
8
+ import { AssertProgrammer } from "../AssertProgrammer";
9
+ import { FunctionalAssertFunctionProgrammer } from "./FunctionalAssertFunctionProgrammer";
10
+ import { FunctionalGeneralProgrammer } from "./internal/FunctionalGeneralProgrammer";
11
+
12
+ export namespace FunctionAssertReturnProgrammer {
13
+ export const write =
14
+ (project: IProject) =>
15
+ (modulo: ts.LeftHandSideExpression) =>
16
+ (equals: boolean) =>
17
+ (
18
+ expression: ts.Expression,
19
+ declaration: ts.FunctionDeclaration,
20
+ init?: ts.Expression,
21
+ ): ts.CallExpression => {
22
+ const wrapper = FunctionalAssertFunctionProgrammer.errorFactoryWrapper(
23
+ modulo,
24
+ )(declaration.parameters)(init);
25
+ const result = decompose(project)(modulo)(equals)(
26
+ expression,
27
+ declaration,
28
+ wrapper.name,
29
+ );
30
+ return ExpressionFactory.selfCall(
31
+ ts.factory.createBlock(
32
+ [
33
+ wrapper.variable,
34
+ ...result.functions,
35
+ ts.factory.createReturnStatement(
36
+ ts.factory.createArrowFunction(
37
+ result.async
38
+ ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
39
+ : undefined,
40
+ undefined,
41
+ declaration.parameters,
42
+ declaration.type,
43
+ undefined,
44
+ result.value,
45
+ ),
46
+ ),
47
+ ],
48
+ true,
49
+ ),
50
+ );
51
+ };
52
+
53
+ export const decompose =
54
+ (project: IProject) =>
55
+ (modulo: ts.LeftHandSideExpression) =>
56
+ (equals: boolean) =>
57
+ (
58
+ expression: ts.Expression,
59
+ declaration: ts.FunctionDeclaration,
60
+ wrapper: string,
61
+ ): {
62
+ async: boolean;
63
+ functions: ts.Statement[];
64
+ value: ts.Expression;
65
+ } => {
66
+ const { type, async } = FunctionalGeneralProgrammer.getReturnType(
67
+ project.checker,
68
+ )(declaration);
69
+ const caller: ts.CallExpression = ts.factory.createCallExpression(
70
+ expression,
71
+ undefined,
72
+ declaration.parameters.map((p) =>
73
+ ts.factory.createIdentifier(p.name.getText()),
74
+ ),
75
+ );
76
+ return {
77
+ async,
78
+ functions: [
79
+ StatementFactory.constant(
80
+ "__assert_return",
81
+ AssertProgrammer.write(project)(modulo)(equals)(
82
+ type,
83
+ undefined,
84
+ FunctionalAssertFunctionProgrammer.hookPath({
85
+ wrapper,
86
+ replacer: "$input.return",
87
+ }),
88
+ ),
89
+ ),
90
+ ],
91
+ value: ts.factory.createCallExpression(
92
+ ts.factory.createIdentifier("__assert_return"),
93
+ undefined,
94
+ [async ? ts.factory.createAwaitExpression(caller) : caller],
95
+ ),
96
+ };
97
+ };
98
+ }
@@ -1,72 +1,72 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
-
5
- import { IProject } from "../../transformers/IProject";
6
-
7
- import { FunctionalIsParametersProgrammer } from "./FunctionalIsParametersProgrammer";
8
- import { FunctionalIsReturnProgrammer } from "./FunctionalIsReturnProgrammer";
9
-
10
- export namespace FunctionalIsFunctionProgrammer {
11
- export const write =
12
- (project: IProject) =>
13
- (modulo: ts.LeftHandSideExpression) =>
14
- (equals: boolean) =>
15
- (
16
- expression: ts.Expression,
17
- declaration: ts.FunctionDeclaration,
18
- ): ts.CallExpression => {
19
- const p =
20
- FunctionalIsParametersProgrammer.decompose(project)(modulo)(equals)(
21
- declaration,
22
- );
23
- const r = FunctionalIsReturnProgrammer.decompose(project)(modulo)(equals)(
24
- expression,
25
- declaration,
26
- );
27
- return ExpressionFactory.selfCall(
28
- ts.factory.createBlock(
29
- [
30
- ...p.functions,
31
- ...r.functions,
32
- ts.factory.createReturnStatement(
33
- ts.factory.createArrowFunction(
34
- r.async
35
- ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
36
- : undefined,
37
- undefined,
38
- declaration.parameters,
39
- getReturnTypeNode(declaration, r.async),
40
- undefined,
41
- ts.factory.createBlock(
42
- [...p.statements, ...r.statements],
43
- true,
44
- ),
45
- ),
46
- ),
47
- ],
48
- true,
49
- ),
50
- );
51
- };
52
-
53
- export const getReturnTypeNode = (
54
- declaration: ts.FunctionDeclaration,
55
- async: boolean,
56
- ): ts.TypeNode | undefined =>
57
- declaration.type
58
- ? async
59
- ? !!(declaration.type! as ts.TypeReferenceNode).typeArguments?.[0]
60
- ? ts.factory.createTypeReferenceNode("Promise", [
61
- ts.factory.createUnionTypeNode([
62
- (declaration.type! as ts.TypeReferenceNode).typeArguments![0]!,
63
- ts.factory.createTypeReferenceNode("null"),
64
- ]),
65
- ])
66
- : undefined
67
- : ts.factory.createUnionTypeNode([
68
- declaration.type,
69
- ts.factory.createTypeReferenceNode("null"),
70
- ])
71
- : undefined;
72
- }
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+
5
+ import { IProject } from "../../transformers/IProject";
6
+
7
+ import { FunctionalIsParametersProgrammer } from "./FunctionalIsParametersProgrammer";
8
+ import { FunctionalIsReturnProgrammer } from "./FunctionalIsReturnProgrammer";
9
+
10
+ export namespace FunctionalIsFunctionProgrammer {
11
+ export const write =
12
+ (project: IProject) =>
13
+ (modulo: ts.LeftHandSideExpression) =>
14
+ (equals: boolean) =>
15
+ (
16
+ expression: ts.Expression,
17
+ declaration: ts.FunctionDeclaration,
18
+ ): ts.CallExpression => {
19
+ const p =
20
+ FunctionalIsParametersProgrammer.decompose(project)(modulo)(equals)(
21
+ declaration,
22
+ );
23
+ const r = FunctionalIsReturnProgrammer.decompose(project)(modulo)(equals)(
24
+ expression,
25
+ declaration,
26
+ );
27
+ return ExpressionFactory.selfCall(
28
+ ts.factory.createBlock(
29
+ [
30
+ ...p.functions,
31
+ ...r.functions,
32
+ ts.factory.createReturnStatement(
33
+ ts.factory.createArrowFunction(
34
+ r.async
35
+ ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
36
+ : undefined,
37
+ undefined,
38
+ declaration.parameters,
39
+ getReturnTypeNode(declaration, r.async),
40
+ undefined,
41
+ ts.factory.createBlock(
42
+ [...p.statements, ...r.statements],
43
+ true,
44
+ ),
45
+ ),
46
+ ),
47
+ ],
48
+ true,
49
+ ),
50
+ );
51
+ };
52
+
53
+ export const getReturnTypeNode = (
54
+ declaration: ts.FunctionDeclaration,
55
+ async: boolean,
56
+ ): ts.TypeNode | undefined =>
57
+ declaration.type
58
+ ? async
59
+ ? !!(declaration.type! as ts.TypeReferenceNode).typeArguments?.[0]
60
+ ? ts.factory.createTypeReferenceNode("Promise", [
61
+ ts.factory.createUnionTypeNode([
62
+ (declaration.type! as ts.TypeReferenceNode).typeArguments![0]!,
63
+ ts.factory.createTypeReferenceNode("null"),
64
+ ]),
65
+ ])
66
+ : undefined
67
+ : ts.factory.createUnionTypeNode([
68
+ declaration.type,
69
+ ts.factory.createTypeReferenceNode("null"),
70
+ ])
71
+ : undefined;
72
+ }
@@ -1,101 +1,101 @@
1
- import ts from "typescript";
2
-
3
- import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
- import { StatementFactory } from "../../factories/StatementFactory";
5
- import { TypeFactory } from "../../factories/TypeFactory";
6
-
7
- import { IProject } from "../../transformers/IProject";
8
-
9
- import { IsProgrammer } from "../IsProgrammer";
10
- import { FunctionalIsFunctionProgrammer } from "./FunctionalIsFunctionProgrammer";
11
- import { FunctionalGeneralProgrammer } from "./internal/FunctionalGeneralProgrammer";
12
-
13
- export namespace FunctionalIsParametersProgrammer {
14
- export const write =
15
- (project: IProject) =>
16
- (modulo: ts.LeftHandSideExpression) =>
17
- (equals: boolean) =>
18
- (
19
- expression: ts.Expression,
20
- declaration: ts.FunctionDeclaration,
21
- ): ts.CallExpression => {
22
- const { async } = FunctionalGeneralProgrammer.getReturnType(
23
- project.checker,
24
- )(declaration);
25
- const result = decompose(project)(modulo)(equals)(declaration);
26
- return ExpressionFactory.selfCall(
27
- ts.factory.createBlock(
28
- [
29
- ...result.functions,
30
- ts.factory.createReturnStatement(
31
- ts.factory.createArrowFunction(
32
- async
33
- ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
34
- : undefined,
35
- undefined,
36
- declaration.parameters,
37
- FunctionalIsFunctionProgrammer.getReturnTypeNode(
38
- declaration,
39
- async,
40
- ),
41
- undefined,
42
- ts.factory.createBlock(
43
- [
44
- ...result.statements,
45
- ts.factory.createReturnStatement(
46
- ts.factory.createCallExpression(
47
- expression,
48
- undefined,
49
- declaration.parameters.map((p) =>
50
- ts.factory.createIdentifier(p.name.getText()),
51
- ),
52
- ),
53
- ),
54
- ],
55
- true,
56
- ),
57
- ),
58
- ),
59
- ],
60
- true,
61
- ),
62
- );
63
- };
64
-
65
- export const decompose =
66
- (project: IProject) =>
67
- (modulo: ts.LeftHandSideExpression) =>
68
- (equals: boolean) =>
69
- (
70
- declaration: ts.FunctionDeclaration,
71
- ): {
72
- functions: ts.Statement[];
73
- statements: ts.Statement[];
74
- } => ({
75
- functions: declaration.parameters.map((p, i) =>
76
- StatementFactory.constant(
77
- `__is_param_${i}`,
78
- IsProgrammer.write(project)(modulo)(equals)(
79
- project.checker.getTypeFromTypeNode(
80
- p.type ?? TypeFactory.keyword("any"),
81
- ),
82
- ),
83
- ),
84
- ),
85
- statements: declaration.parameters
86
- .map((p, i) => [
87
- ts.factory.createIfStatement(
88
- ts.factory.createStrictEquality(
89
- ts.factory.createFalse(),
90
- ts.factory.createCallExpression(
91
- ts.factory.createIdentifier(`__is_param_${i}`),
92
- undefined,
93
- [ts.factory.createIdentifier(p.name.getText())],
94
- ),
95
- ),
96
- ts.factory.createReturnStatement(ts.factory.createNull()),
97
- ),
98
- ])
99
- .flat(),
100
- });
101
- }
1
+ import ts from "typescript";
2
+
3
+ import { ExpressionFactory } from "../../factories/ExpressionFactory";
4
+ import { StatementFactory } from "../../factories/StatementFactory";
5
+ import { TypeFactory } from "../../factories/TypeFactory";
6
+
7
+ import { IProject } from "../../transformers/IProject";
8
+
9
+ import { IsProgrammer } from "../IsProgrammer";
10
+ import { FunctionalIsFunctionProgrammer } from "./FunctionalIsFunctionProgrammer";
11
+ import { FunctionalGeneralProgrammer } from "./internal/FunctionalGeneralProgrammer";
12
+
13
+ export namespace FunctionalIsParametersProgrammer {
14
+ export const write =
15
+ (project: IProject) =>
16
+ (modulo: ts.LeftHandSideExpression) =>
17
+ (equals: boolean) =>
18
+ (
19
+ expression: ts.Expression,
20
+ declaration: ts.FunctionDeclaration,
21
+ ): ts.CallExpression => {
22
+ const { async } = FunctionalGeneralProgrammer.getReturnType(
23
+ project.checker,
24
+ )(declaration);
25
+ const result = decompose(project)(modulo)(equals)(declaration);
26
+ return ExpressionFactory.selfCall(
27
+ ts.factory.createBlock(
28
+ [
29
+ ...result.functions,
30
+ ts.factory.createReturnStatement(
31
+ ts.factory.createArrowFunction(
32
+ async
33
+ ? [ts.factory.createModifier(ts.SyntaxKind.AsyncKeyword)]
34
+ : undefined,
35
+ undefined,
36
+ declaration.parameters,
37
+ FunctionalIsFunctionProgrammer.getReturnTypeNode(
38
+ declaration,
39
+ async,
40
+ ),
41
+ undefined,
42
+ ts.factory.createBlock(
43
+ [
44
+ ...result.statements,
45
+ ts.factory.createReturnStatement(
46
+ ts.factory.createCallExpression(
47
+ expression,
48
+ undefined,
49
+ declaration.parameters.map((p) =>
50
+ ts.factory.createIdentifier(p.name.getText()),
51
+ ),
52
+ ),
53
+ ),
54
+ ],
55
+ true,
56
+ ),
57
+ ),
58
+ ),
59
+ ],
60
+ true,
61
+ ),
62
+ );
63
+ };
64
+
65
+ export const decompose =
66
+ (project: IProject) =>
67
+ (modulo: ts.LeftHandSideExpression) =>
68
+ (equals: boolean) =>
69
+ (
70
+ declaration: ts.FunctionDeclaration,
71
+ ): {
72
+ functions: ts.Statement[];
73
+ statements: ts.Statement[];
74
+ } => ({
75
+ functions: declaration.parameters.map((p, i) =>
76
+ StatementFactory.constant(
77
+ `__is_param_${i}`,
78
+ IsProgrammer.write(project)(modulo)(equals)(
79
+ project.checker.getTypeFromTypeNode(
80
+ p.type ?? TypeFactory.keyword("any"),
81
+ ),
82
+ ),
83
+ ),
84
+ ),
85
+ statements: declaration.parameters
86
+ .map((p, i) => [
87
+ ts.factory.createIfStatement(
88
+ ts.factory.createStrictEquality(
89
+ ts.factory.createFalse(),
90
+ ts.factory.createCallExpression(
91
+ ts.factory.createIdentifier(`__is_param_${i}`),
92
+ undefined,
93
+ [ts.factory.createIdentifier(p.name.getText())],
94
+ ),
95
+ ),
96
+ ts.factory.createReturnStatement(ts.factory.createNull()),
97
+ ),
98
+ ])
99
+ .flat(),
100
+ });
101
+ }