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,87 +1,87 @@
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
- import { IProject } from "../../transformers/IProject";
8
-
9
- import { FeatureProgrammer } from "../FeatureProgrammer";
10
- import { ValidateProgrammer } from "../ValidateProgrammer";
11
- import { FunctionImporter } from "../helpers/FunctionImporter";
12
-
13
- export namespace JsonValidateParseProgrammer {
14
- export const decompose = (props: {
15
- project: IProject;
16
- modulo: ts.LeftHandSideExpression;
17
- importer: FunctionImporter;
18
- type: ts.Type;
19
- name?: string;
20
- }): FeatureProgrammer.IDecomposed => {
21
- const validate: FeatureProgrammer.IDecomposed =
22
- ValidateProgrammer.decompose({
23
- ...props,
24
- project: {
25
- ...props.project,
26
- options: {
27
- ...props.project.options,
28
- functional: false,
29
- numeric: false,
30
- },
31
- },
32
- equals: false,
33
- });
34
- return {
35
- functions: validate.functions,
36
- statements: [
37
- ...validate.statements,
38
- StatementFactory.constant("__validate", validate.arrow),
39
- ],
40
- arrow: ts.factory.createArrowFunction(
41
- undefined,
42
- undefined,
43
- [IdentifierFactory.parameter("input", TypeFactory.keyword("string"))],
44
- ts.factory.createTypeReferenceNode(
45
- `typia.IValidation<typia.Primitive<${
46
- props.name ??
47
- TypeFactory.getFullName(props.project.checker)(props.type)
48
- }>>`,
49
- ),
50
- undefined,
51
- ts.factory.createAsExpression(
52
- ts.factory.createCallExpression(
53
- ts.factory.createIdentifier("__validate"),
54
- undefined,
55
- [
56
- ts.factory.createCallExpression(
57
- ts.factory.createIdentifier("JSON.parse"),
58
- undefined,
59
- [ts.factory.createIdentifier("input")],
60
- ),
61
- ],
62
- ),
63
- ts.factory.createTypeReferenceNode("any"),
64
- ),
65
- ),
66
- };
67
- };
68
-
69
- export const write =
70
- (project: IProject) =>
71
- (modulo: ts.LeftHandSideExpression) =>
72
- (type: ts.Type, name?: string): ts.CallExpression => {
73
- const importer: FunctionImporter = new FunctionImporter(modulo.getText());
74
- const result: FeatureProgrammer.IDecomposed = decompose({
75
- project,
76
- modulo,
77
- importer,
78
- type,
79
- name,
80
- });
81
- return FeatureProgrammer.writeDecomposed({
82
- modulo,
83
- importer,
84
- result,
85
- });
86
- };
87
- }
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
+ import { IProject } from "../../transformers/IProject";
8
+
9
+ import { FeatureProgrammer } from "../FeatureProgrammer";
10
+ import { ValidateProgrammer } from "../ValidateProgrammer";
11
+ import { FunctionImporter } from "../helpers/FunctionImporter";
12
+
13
+ export namespace JsonValidateParseProgrammer {
14
+ export const decompose = (props: {
15
+ project: IProject;
16
+ modulo: ts.LeftHandSideExpression;
17
+ importer: FunctionImporter;
18
+ type: ts.Type;
19
+ name: string | undefined;
20
+ }): FeatureProgrammer.IDecomposed => {
21
+ const validate: FeatureProgrammer.IDecomposed =
22
+ ValidateProgrammer.decompose({
23
+ ...props,
24
+ project: {
25
+ ...props.project,
26
+ options: {
27
+ ...props.project.options,
28
+ functional: false,
29
+ numeric: false,
30
+ },
31
+ },
32
+ equals: false,
33
+ });
34
+ return {
35
+ functions: validate.functions,
36
+ statements: [
37
+ ...validate.statements,
38
+ StatementFactory.constant("__validate", validate.arrow),
39
+ ],
40
+ arrow: ts.factory.createArrowFunction(
41
+ undefined,
42
+ undefined,
43
+ [IdentifierFactory.parameter("input", TypeFactory.keyword("string"))],
44
+ ts.factory.createTypeReferenceNode(
45
+ `typia.IValidation<typia.Primitive<${
46
+ props.name ??
47
+ TypeFactory.getFullName(props.project.checker)(props.type)
48
+ }>>`,
49
+ ),
50
+ undefined,
51
+ ts.factory.createAsExpression(
52
+ ts.factory.createCallExpression(
53
+ ts.factory.createIdentifier("__validate"),
54
+ undefined,
55
+ [
56
+ ts.factory.createCallExpression(
57
+ ts.factory.createIdentifier("JSON.parse"),
58
+ undefined,
59
+ [ts.factory.createIdentifier("input")],
60
+ ),
61
+ ],
62
+ ),
63
+ ts.factory.createTypeReferenceNode("any"),
64
+ ),
65
+ ),
66
+ };
67
+ };
68
+
69
+ export const write =
70
+ (project: IProject) =>
71
+ (modulo: ts.LeftHandSideExpression) =>
72
+ (type: ts.Type, name?: string): ts.CallExpression => {
73
+ const importer: FunctionImporter = new FunctionImporter(modulo.getText());
74
+ const result: FeatureProgrammer.IDecomposed = decompose({
75
+ project,
76
+ modulo,
77
+ importer,
78
+ type,
79
+ name,
80
+ });
81
+ return FeatureProgrammer.writeDecomposed({
82
+ modulo,
83
+ importer,
84
+ result,
85
+ });
86
+ };
87
+ }
@@ -1,111 +1,111 @@
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
- import { IProject } from "../../transformers/IProject";
8
-
9
- import { FeatureProgrammer } from "../FeatureProgrammer";
10
- import { ValidateProgrammer } from "../ValidateProgrammer";
11
- import { FunctionImporter } from "../helpers/FunctionImporter";
12
- import { JsonStringifyProgrammer } from "./JsonStringifyProgrammer";
13
-
14
- export namespace JsonValidateStringifyProgrammer {
15
- export const decompose = (props: {
16
- project: IProject;
17
- modulo: ts.LeftHandSideExpression;
18
- importer: FunctionImporter;
19
- type: ts.Type;
20
- name?: string;
21
- }): FeatureProgrammer.IDecomposed => {
22
- const validate: FeatureProgrammer.IDecomposed =
23
- ValidateProgrammer.decompose({
24
- ...props,
25
- project: {
26
- ...props.project,
27
- options: {
28
- ...props.project.options,
29
- functional: false,
30
- numeric: true,
31
- },
32
- },
33
- equals: false,
34
- });
35
- const stringify: FeatureProgrammer.IDecomposed =
36
- JsonStringifyProgrammer.decompose({
37
- ...props,
38
- validated: true,
39
- });
40
- return {
41
- functions: {
42
- ...validate.functions,
43
- ...stringify.functions,
44
- },
45
- statements: [
46
- ...validate.statements,
47
- ...stringify.statements,
48
- StatementFactory.constant("__validate", validate.arrow),
49
- StatementFactory.constant("__stringify", stringify.arrow),
50
- ],
51
- arrow: ts.factory.createArrowFunction(
52
- undefined,
53
- undefined,
54
- [IdentifierFactory.parameter("input", TypeFactory.keyword("any"))],
55
- ts.factory.createTypeReferenceNode("typia.IValidation", [
56
- stringify.arrow.type ?? ts.factory.createTypeReferenceNode("string"),
57
- ]),
58
- undefined,
59
- ts.factory.createBlock([
60
- StatementFactory.constant(
61
- "result",
62
- ts.factory.createAsExpression(
63
- ts.factory.createCallExpression(
64
- ts.factory.createIdentifier("__validate"),
65
- undefined,
66
- [ts.factory.createIdentifier("input")],
67
- ),
68
- TypeFactory.keyword("any"),
69
- ),
70
- ),
71
- ts.factory.createIfStatement(
72
- ts.factory.createIdentifier("result.success"),
73
- ts.factory.createExpressionStatement(
74
- ts.factory.createBinaryExpression(
75
- ts.factory.createIdentifier("result.data"),
76
- ts.SyntaxKind.EqualsToken,
77
- ts.factory.createCallExpression(
78
- ts.factory.createIdentifier("__stringify"),
79
- undefined,
80
- [ts.factory.createIdentifier("input")],
81
- ),
82
- ),
83
- ),
84
- ),
85
- ts.factory.createReturnStatement(
86
- ts.factory.createIdentifier("result"),
87
- ),
88
- ]),
89
- ),
90
- };
91
- };
92
-
93
- export const write =
94
- (project: IProject) =>
95
- (modulo: ts.LeftHandSideExpression) =>
96
- (type: ts.Type, name?: string): ts.CallExpression => {
97
- const importer: FunctionImporter = new FunctionImporter(modulo.getText());
98
- const result: FeatureProgrammer.IDecomposed = decompose({
99
- project,
100
- modulo,
101
- importer,
102
- type,
103
- name,
104
- });
105
- return FeatureProgrammer.writeDecomposed({
106
- modulo,
107
- importer,
108
- result,
109
- });
110
- };
111
- }
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
+ import { IProject } from "../../transformers/IProject";
8
+
9
+ import { FeatureProgrammer } from "../FeatureProgrammer";
10
+ import { ValidateProgrammer } from "../ValidateProgrammer";
11
+ import { FunctionImporter } from "../helpers/FunctionImporter";
12
+ import { JsonStringifyProgrammer } from "./JsonStringifyProgrammer";
13
+
14
+ export namespace JsonValidateStringifyProgrammer {
15
+ export const decompose = (props: {
16
+ project: IProject;
17
+ modulo: ts.LeftHandSideExpression;
18
+ importer: FunctionImporter;
19
+ type: ts.Type;
20
+ name: string | undefined;
21
+ }): FeatureProgrammer.IDecomposed => {
22
+ const validate: FeatureProgrammer.IDecomposed =
23
+ ValidateProgrammer.decompose({
24
+ ...props,
25
+ project: {
26
+ ...props.project,
27
+ options: {
28
+ ...props.project.options,
29
+ functional: false,
30
+ numeric: true,
31
+ },
32
+ },
33
+ equals: false,
34
+ });
35
+ const stringify: FeatureProgrammer.IDecomposed =
36
+ JsonStringifyProgrammer.decompose({
37
+ ...props,
38
+ validated: true,
39
+ });
40
+ return {
41
+ functions: {
42
+ ...validate.functions,
43
+ ...stringify.functions,
44
+ },
45
+ statements: [
46
+ ...validate.statements,
47
+ ...stringify.statements,
48
+ StatementFactory.constant("__validate", validate.arrow),
49
+ StatementFactory.constant("__stringify", stringify.arrow),
50
+ ],
51
+ arrow: ts.factory.createArrowFunction(
52
+ undefined,
53
+ undefined,
54
+ [IdentifierFactory.parameter("input", TypeFactory.keyword("any"))],
55
+ ts.factory.createTypeReferenceNode("typia.IValidation", [
56
+ stringify.arrow.type ?? ts.factory.createTypeReferenceNode("string"),
57
+ ]),
58
+ undefined,
59
+ ts.factory.createBlock([
60
+ StatementFactory.constant(
61
+ "result",
62
+ ts.factory.createAsExpression(
63
+ ts.factory.createCallExpression(
64
+ ts.factory.createIdentifier("__validate"),
65
+ undefined,
66
+ [ts.factory.createIdentifier("input")],
67
+ ),
68
+ TypeFactory.keyword("any"),
69
+ ),
70
+ ),
71
+ ts.factory.createIfStatement(
72
+ ts.factory.createIdentifier("result.success"),
73
+ ts.factory.createExpressionStatement(
74
+ ts.factory.createBinaryExpression(
75
+ ts.factory.createIdentifier("result.data"),
76
+ ts.SyntaxKind.EqualsToken,
77
+ ts.factory.createCallExpression(
78
+ ts.factory.createIdentifier("__stringify"),
79
+ undefined,
80
+ [ts.factory.createIdentifier("input")],
81
+ ),
82
+ ),
83
+ ),
84
+ ),
85
+ ts.factory.createReturnStatement(
86
+ ts.factory.createIdentifier("result"),
87
+ ),
88
+ ]),
89
+ ),
90
+ };
91
+ };
92
+
93
+ export const write =
94
+ (project: IProject) =>
95
+ (modulo: ts.LeftHandSideExpression) =>
96
+ (type: ts.Type, name?: string): ts.CallExpression => {
97
+ const importer: FunctionImporter = new FunctionImporter(modulo.getText());
98
+ const result: FeatureProgrammer.IDecomposed = decompose({
99
+ project,
100
+ modulo,
101
+ importer,
102
+ type,
103
+ name,
104
+ });
105
+ return FeatureProgrammer.writeDecomposed({
106
+ modulo,
107
+ importer,
108
+ result,
109
+ });
110
+ };
111
+ }
@@ -1,87 +1,87 @@
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
- import { IProject } from "../../transformers/IProject";
8
-
9
- import { AssertProgrammer } from "../AssertProgrammer";
10
- import { FeatureProgrammer } from "../FeatureProgrammer";
11
- import { FunctionImporter } from "../helpers/FunctionImporter";
12
- import { MiscCloneProgrammer } from "./MiscCloneProgrammer";
13
-
14
- export namespace MiscAssertCloneProgrammer {
15
- export const decompose = (props: {
16
- project: IProject;
17
- importer: FunctionImporter;
18
- type: ts.Type;
19
- name: string | undefined;
20
- init: ts.Expression | undefined;
21
- }): FeatureProgrammer.IDecomposed => {
22
- const assert: FeatureProgrammer.IDecomposed = AssertProgrammer.decompose({
23
- ...props,
24
- equals: false,
25
- guard: false,
26
- });
27
- const clone: FeatureProgrammer.IDecomposed = MiscCloneProgrammer.decompose({
28
- ...props,
29
- validated: true,
30
- });
31
- return {
32
- functions: {
33
- ...assert.functions,
34
- ...clone.functions,
35
- },
36
- statements: [
37
- ...assert.statements,
38
- ...clone.statements,
39
- StatementFactory.constant("__assert", assert.arrow),
40
- StatementFactory.constant("__clone", clone.arrow),
41
- ],
42
- arrow: ts.factory.createArrowFunction(
43
- undefined,
44
- undefined,
45
- [
46
- IdentifierFactory.parameter("input", TypeFactory.keyword("any")),
47
- AssertProgrammer.Guardian.parameter(props.init),
48
- ],
49
- clone.arrow.type,
50
- undefined,
51
- ts.factory.createCallExpression(
52
- ts.factory.createIdentifier("__clone"),
53
- undefined,
54
- [
55
- ts.factory.createCallExpression(
56
- ts.factory.createIdentifier("__assert"),
57
- undefined,
58
- [
59
- ts.factory.createIdentifier("input"),
60
- AssertProgrammer.Guardian.identifier(),
61
- ],
62
- ),
63
- ],
64
- ),
65
- ),
66
- };
67
- };
68
-
69
- export const write =
70
- (project: IProject) =>
71
- (modulo: ts.LeftHandSideExpression) =>
72
- (type: ts.Type, name?: string, init?: ts.Expression): ts.CallExpression => {
73
- const importer: FunctionImporter = new FunctionImporter(modulo.getText());
74
- const result: FeatureProgrammer.IDecomposed = decompose({
75
- project,
76
- importer,
77
- type,
78
- name,
79
- init,
80
- });
81
- return FeatureProgrammer.writeDecomposed({
82
- modulo,
83
- importer,
84
- result,
85
- });
86
- };
87
- }
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
+ import { IProject } from "../../transformers/IProject";
8
+
9
+ import { AssertProgrammer } from "../AssertProgrammer";
10
+ import { FeatureProgrammer } from "../FeatureProgrammer";
11
+ import { FunctionImporter } from "../helpers/FunctionImporter";
12
+ import { MiscCloneProgrammer } from "./MiscCloneProgrammer";
13
+
14
+ export namespace MiscAssertCloneProgrammer {
15
+ export const decompose = (props: {
16
+ project: IProject;
17
+ importer: FunctionImporter;
18
+ type: ts.Type;
19
+ name: string | undefined;
20
+ init: ts.Expression | undefined;
21
+ }): FeatureProgrammer.IDecomposed => {
22
+ const assert: FeatureProgrammer.IDecomposed = AssertProgrammer.decompose({
23
+ ...props,
24
+ equals: false,
25
+ guard: false,
26
+ });
27
+ const clone: FeatureProgrammer.IDecomposed = MiscCloneProgrammer.decompose({
28
+ ...props,
29
+ validated: true,
30
+ });
31
+ return {
32
+ functions: {
33
+ ...assert.functions,
34
+ ...clone.functions,
35
+ },
36
+ statements: [
37
+ ...assert.statements,
38
+ ...clone.statements,
39
+ StatementFactory.constant("__assert", assert.arrow),
40
+ StatementFactory.constant("__clone", clone.arrow),
41
+ ],
42
+ arrow: ts.factory.createArrowFunction(
43
+ undefined,
44
+ undefined,
45
+ [
46
+ IdentifierFactory.parameter("input", TypeFactory.keyword("any")),
47
+ AssertProgrammer.Guardian.parameter(props.init),
48
+ ],
49
+ clone.arrow.type,
50
+ undefined,
51
+ ts.factory.createCallExpression(
52
+ ts.factory.createIdentifier("__clone"),
53
+ undefined,
54
+ [
55
+ ts.factory.createCallExpression(
56
+ ts.factory.createIdentifier("__assert"),
57
+ undefined,
58
+ [
59
+ ts.factory.createIdentifier("input"),
60
+ AssertProgrammer.Guardian.identifier(),
61
+ ],
62
+ ),
63
+ ],
64
+ ),
65
+ ),
66
+ };
67
+ };
68
+
69
+ export const write =
70
+ (project: IProject) =>
71
+ (modulo: ts.LeftHandSideExpression) =>
72
+ (type: ts.Type, name?: string, init?: ts.Expression): ts.CallExpression => {
73
+ const importer: FunctionImporter = new FunctionImporter(modulo.getText());
74
+ const result: FeatureProgrammer.IDecomposed = decompose({
75
+ project,
76
+ importer,
77
+ type,
78
+ name,
79
+ init,
80
+ });
81
+ return FeatureProgrammer.writeDecomposed({
82
+ modulo,
83
+ importer,
84
+ result,
85
+ });
86
+ };
87
+ }