typia 3.8.8 → 3.9.0-dev.20230603
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.
- package/lib/IRandomGenerator.d.ts +1 -0
- package/lib/factories/CommentFactory.js +2 -1
- package/lib/factories/CommentFactory.js.map +1 -1
- package/lib/factories/IdentifierFactory.js +2 -1
- package/lib/factories/IdentifierFactory.js.map +1 -1
- package/lib/factories/MetadataCollection.d.ts +22 -4
- package/lib/factories/MetadataCollection.js +121 -28
- package/lib/factories/MetadataCollection.js.map +1 -1
- package/lib/factories/MetadataFactory.d.ts +1 -0
- package/lib/factories/MetadataFactory.js +6 -48
- package/lib/factories/MetadataFactory.js.map +1 -1
- package/lib/factories/MetadataTagFactory.js +5 -3
- package/lib/factories/MetadataTagFactory.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_array.d.ts +5 -0
- package/lib/factories/internal/metadata/emplace_metadata_array.js +38 -0
- package/lib/factories/internal/metadata/emplace_metadata_array.js.map +1 -0
- package/lib/factories/internal/metadata/emplace_metadata_definition.d.ts +5 -0
- package/lib/factories/internal/metadata/emplace_metadata_definition.js +38 -0
- package/lib/factories/internal/metadata/emplace_metadata_definition.js.map +1 -0
- package/lib/factories/internal/metadata/emplace_metadata_object.js +4 -4
- package/lib/factories/internal/metadata/emplace_metadata_object.js.map +1 -1
- package/lib/factories/internal/metadata/emplace_metadata_tuple.d.ts +5 -0
- package/lib/factories/internal/metadata/emplace_metadata_tuple.js +58 -0
- package/lib/factories/internal/metadata/emplace_metadata_tuple.js.map +1 -0
- package/lib/factories/internal/metadata/explore_metadata.d.ts +1 -1
- package/lib/factories/internal/metadata/explore_metadata.js +11 -34
- package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata.d.ts +1 -1
- package/lib/factories/internal/metadata/iterate_metadata.js +5 -2
- package/lib/factories/internal/metadata/iterate_metadata.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_array.js +4 -5
- package/lib/factories/internal/metadata/iterate_metadata_array.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_collection.d.ts +2 -0
- package/lib/factories/internal/metadata/iterate_metadata_collection.js +151 -0
- package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -0
- package/lib/factories/internal/metadata/iterate_metadata_definition.d.ts +5 -0
- package/lib/factories/internal/metadata/iterate_metadata_definition.js +24 -0
- package/lib/factories/internal/metadata/iterate_metadata_definition.js.map +1 -0
- package/lib/factories/internal/metadata/iterate_metadata_object.js +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_object.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_sort.d.ts +3 -0
- package/lib/factories/internal/metadata/iterate_metadata_sort.js +156 -0
- package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -0
- package/lib/factories/internal/metadata/iterate_metadata_tuple.js +3 -26
- package/lib/factories/internal/metadata/iterate_metadata_tuple.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_union.js +3 -3
- package/lib/factories/internal/metadata/iterate_metadata_union.js.map +1 -1
- package/lib/metadata/IMetadata.d.ts +3 -2
- package/lib/metadata/IMetadataApplication.d.ts +2 -2
- package/lib/metadata/IMetadataArray.d.ts +8 -0
- package/lib/metadata/IMetadataArray.js +3 -0
- package/lib/metadata/IMetadataArray.js.map +1 -0
- package/lib/metadata/IMetadataCollection.d.ts +10 -0
- package/lib/metadata/IMetadataCollection.js +3 -0
- package/lib/metadata/IMetadataCollection.js.map +1 -0
- package/lib/metadata/IMetadataDefinition.d.ts +10 -0
- package/lib/metadata/IMetadataDefinition.js +3 -0
- package/lib/metadata/IMetadataDefinition.js.map +1 -0
- package/lib/metadata/IMetadataDictionary.js +3 -0
- package/lib/metadata/IMetadataDictionary.js.map +1 -0
- package/lib/metadata/IMetadataObject.d.ts +3 -0
- package/lib/metadata/IMetadataProperty.d.ts +1 -1
- package/lib/metadata/IMetadataTuple.d.ts +8 -0
- package/lib/metadata/IMetadataTuple.js +3 -0
- package/lib/metadata/IMetadataTuple.js.map +1 -0
- package/lib/metadata/Metadata.d.ts +24 -21
- package/lib/metadata/Metadata.js +323 -262
- package/lib/metadata/Metadata.js.map +1 -1
- package/lib/metadata/MetadataArray.d.ts +12 -0
- package/lib/metadata/MetadataArray.js +36 -0
- package/lib/metadata/MetadataArray.js.map +1 -0
- package/lib/metadata/MetadataDefinition.d.ts +16 -0
- package/lib/metadata/MetadataDefinition.js +39 -0
- package/lib/metadata/MetadataDefinition.js.map +1 -0
- package/lib/metadata/MetadataObject.d.ts +4 -0
- package/lib/metadata/MetadataObject.js +3 -5
- package/lib/metadata/MetadataObject.js.map +1 -1
- package/lib/metadata/MetadataProperty.d.ts +1 -1
- package/lib/metadata/MetadataProperty.js +3 -3
- package/lib/metadata/MetadataProperty.js.map +1 -1
- package/lib/metadata/MetadataTuple.d.ts +12 -0
- package/lib/metadata/MetadataTuple.js +36 -0
- package/lib/metadata/MetadataTuple.js.map +1 -0
- package/lib/programmers/ApplicationProgrammer.js +3 -3
- package/lib/programmers/ApplicationProgrammer.js.map +1 -1
- package/lib/programmers/AssertProgrammer.js +13 -21
- package/lib/programmers/AssertProgrammer.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.d.ts +6 -7
- package/lib/programmers/CheckerProgrammer.js +276 -185
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/CloneProgrammer.js +312 -204
- package/lib/programmers/CloneProgrammer.js.map +1 -1
- package/lib/programmers/FeatureProgrammer.d.ts +21 -27
- package/lib/programmers/FeatureProgrammer.js +60 -63
- package/lib/programmers/FeatureProgrammer.js.map +1 -1
- package/lib/programmers/IsProgrammer.d.ts +3 -3
- package/lib/programmers/IsProgrammer.js +43 -28
- package/lib/programmers/IsProgrammer.js.map +1 -1
- package/lib/programmers/LiteralsProgrammer.js +1 -0
- package/lib/programmers/LiteralsProgrammer.js.map +1 -1
- package/lib/programmers/PruneProgrammer.js +270 -176
- package/lib/programmers/PruneProgrammer.js.map +1 -1
- package/lib/programmers/RandomProgrammer.js +124 -32
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/StringifyProgrammer.js +462 -356
- package/lib/programmers/StringifyProgrammer.js.map +1 -1
- package/lib/programmers/ValidateProgrammer.js +9 -9
- package/lib/programmers/ValidateProgrammer.js.map +1 -1
- package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
- package/lib/programmers/helpers/FunctionImporeter.js +17 -2
- package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
- package/lib/programmers/helpers/RandomJoiner.d.ts +6 -1
- package/lib/programmers/helpers/RandomJoiner.js +11 -14
- package/lib/programmers/helpers/RandomJoiner.js.map +1 -1
- package/lib/programmers/helpers/UnionExplorer.d.ts +12 -10
- package/lib/programmers/helpers/UnionExplorer.js +47 -12
- package/lib/programmers/helpers/UnionExplorer.js.map +1 -1
- package/lib/programmers/helpers/UnionPredicator.js +1 -1
- package/lib/programmers/helpers/UnionPredicator.js.map +1 -1
- package/lib/programmers/helpers/disable_function_importer_declare.js +1 -0
- package/lib/programmers/helpers/disable_function_importer_declare.js.map +1 -1
- package/lib/programmers/internal/JSON_SCHEMA_PREFIX.d.ts +1 -1
- package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js +2 -2
- package/lib/programmers/internal/JSON_SCHEMA_PREFIX.js.map +1 -1
- package/lib/programmers/internal/application_array.js +41 -21
- package/lib/programmers/internal/application_array.js.map +1 -1
- package/lib/programmers/internal/application_definition.d.ts +5 -0
- package/lib/programmers/internal/application_definition.js +45 -0
- package/lib/programmers/internal/application_definition.js.map +1 -0
- package/lib/programmers/internal/application_native.js +14 -11
- package/lib/programmers/internal/application_native.js.map +1 -1
- package/lib/programmers/internal/application_object.js +19 -14
- package/lib/programmers/internal/application_object.js.map +1 -1
- package/lib/programmers/internal/application_schema.js +28 -31
- package/lib/programmers/internal/application_schema.js.map +1 -1
- package/lib/programmers/internal/application_tuple.js +34 -5
- package/lib/programmers/internal/application_tuple.js.map +1 -1
- package/lib/programmers/internal/check_union_array_like.js +54 -63
- package/lib/programmers/internal/check_union_array_like.js.map +1 -1
- package/lib/programmers/internal/feature_object_entries.js +2 -2
- package/lib/programmers/internal/feature_object_entries.js.map +1 -1
- package/lib/programmers/internal/wrap_metadata_rest_tuple.d.ts +2 -0
- package/lib/programmers/internal/wrap_metadata_rest_tuple.js +18 -0
- package/lib/programmers/internal/wrap_metadata_rest_tuple.js.map +1 -0
- package/lib/schemas/IJsonApplication.d.ts +0 -4
- package/lib/schemas/IJsonComponents.d.ts +16 -4
- package/lib/schemas/IJsonSchema.d.ts +1 -1
- package/lib/transformers/CallExpressionTransformer.js.map +1 -1
- package/lib/transformers/FileTransformer.js +3 -3
- package/lib/transformers/FileTransformer.js.map +1 -1
- package/lib/transformers/features/miscellaneous/ApplicationTransformer.js +1 -0
- package/lib/transformers/features/miscellaneous/ApplicationTransformer.js.map +1 -1
- package/lib/transformers/features/miscellaneous/MetadataTransformer.js +2 -1
- package/lib/transformers/features/miscellaneous/MetadataTransformer.js.map +1 -1
- package/lib/utils/ArrayUtil.d.ts +1 -1
- package/lib/utils/ArrayUtil.js +2 -1
- package/lib/utils/ArrayUtil.js.map +1 -1
- package/lib/utils/RandomGenerator.js +2 -3
- package/lib/utils/RandomGenerator.js.map +1 -1
- package/package.json +6 -1
- package/src/IRandomGenerator.ts +1 -0
- package/src/factories/CommentFactory.ts +2 -1
- package/src/factories/IdentifierFactory.ts +3 -1
- package/src/factories/MetadataCollection.ts +173 -34
- package/src/factories/MetadataFactory.ts +7 -29
- package/src/factories/MetadataTagFactory.ts +6 -3
- package/src/factories/internal/metadata/emplace_metadata_array.ts +34 -0
- package/src/factories/internal/metadata/emplace_metadata_definition.ts +35 -0
- package/src/factories/internal/metadata/emplace_metadata_object.ts +4 -4
- package/src/factories/internal/metadata/emplace_metadata_tuple.ts +50 -0
- package/src/factories/internal/metadata/explore_metadata.ts +18 -44
- package/src/factories/internal/metadata/iterate_metadata.ts +13 -3
- package/src/factories/internal/metadata/iterate_metadata_array.ts +7 -11
- package/src/factories/internal/metadata/iterate_metadata_collection.ts +130 -0
- package/src/factories/internal/metadata/iterate_metadata_definition.ts +34 -0
- package/src/factories/internal/metadata/iterate_metadata_object.ts +1 -0
- package/src/factories/internal/metadata/iterate_metadata_sort.ts +68 -0
- package/src/factories/internal/metadata/iterate_metadata_tuple.ts +7 -31
- package/src/factories/internal/metadata/iterate_metadata_union.ts +13 -2
- package/src/metadata/IMetadata.ts +3 -2
- package/src/metadata/IMetadataApplication.ts +2 -2
- package/src/metadata/IMetadataArray.ts +10 -0
- package/src/metadata/IMetadataCollection.ts +11 -0
- package/src/metadata/IMetadataDefinition.ts +12 -0
- package/src/metadata/IMetadataDictionary.ts +14 -0
- package/src/metadata/IMetadataObject.ts +2 -13
- package/src/metadata/IMetadataProperty.ts +1 -1
- package/src/metadata/IMetadataTuple.ts +10 -0
- package/src/metadata/Metadata.ts +473 -134
- package/src/metadata/MetadataArray.ts +52 -0
- package/src/metadata/MetadataDefinition.ts +65 -0
- package/src/metadata/MetadataObject.ts +7 -20
- package/src/metadata/MetadataProperty.ts +5 -5
- package/src/metadata/MetadataTuple.ts +53 -0
- package/src/programmers/ApplicationProgrammer.ts +1 -2
- package/src/programmers/AssertProgrammer.ts +45 -39
- package/src/programmers/CheckerProgrammer.ts +612 -331
- package/src/programmers/CloneProgrammer.ts +344 -138
- package/src/programmers/FeatureProgrammer.ts +110 -115
- package/src/programmers/IsProgrammer.ts +86 -52
- package/src/programmers/LiteralsProgrammer.ts +1 -0
- package/src/programmers/PruneProgrammer.ts +304 -101
- package/src/programmers/RandomProgrammer.ts +227 -61
- package/src/programmers/StringifyProgrammer.ts +374 -182
- package/src/programmers/ValidateProgrammer.ts +41 -44
- package/src/programmers/helpers/FunctionImporeter.ts +35 -11
- package/src/programmers/helpers/RandomJoiner.ts +25 -13
- package/src/programmers/helpers/UnionExplorer.ts +76 -50
- package/src/programmers/helpers/UnionPredicator.ts +1 -1
- package/src/programmers/helpers/disable_function_importer_declare.ts +5 -0
- package/src/programmers/internal/JSON_SCHEMA_PREFIX.ts +1 -1
- package/src/programmers/internal/application_array.ts +48 -16
- package/src/programmers/internal/application_definition.ts +45 -0
- package/src/programmers/internal/application_native.ts +15 -12
- package/src/programmers/internal/application_object.ts +17 -12
- package/src/programmers/internal/application_schema.ts +31 -65
- package/src/programmers/internal/application_tuple.ts +63 -13
- package/src/programmers/internal/check_union_array_like.ts +249 -191
- package/src/programmers/internal/feature_object_entries.ts +2 -2
- package/src/programmers/internal/wrap_metadata_rest_tuple.ts +16 -0
- package/src/schemas/IJsonApplication.ts +0 -5
- package/src/schemas/IJsonComponents.ts +17 -5
- package/src/schemas/IJsonSchema.ts +1 -1
- package/src/transformers/CallExpressionTransformer.ts +2 -0
- package/src/transformers/FileTransformer.ts +8 -8
- package/src/transformers/features/miscellaneous/ApplicationTransformer.ts +1 -0
- package/src/transformers/features/miscellaneous/MetadataTransformer.ts +2 -1
- package/src/utils/ArrayUtil.ts +3 -2
- package/src/utils/RandomGenerator.ts +3 -3
- package/lib/programmers/internal/check_union_tuple.js +0 -15
- package/lib/programmers/internal/check_union_tuple.js.map +0 -1
- package/src/programmers/internal/check_union_tuple.ts +0 -33
- /package/lib/{programmers/internal/check_union_tuple.d.ts → metadata/IMetadataDictionary.d.ts} +0 -0
|
@@ -4,12 +4,16 @@ 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 { StatementFactory } from "../factories/StatementFactory";
|
|
7
8
|
import { TypeFactory } from "../factories/TypeFactory";
|
|
8
9
|
import { ValueFactory } from "../factories/ValueFactory";
|
|
9
10
|
|
|
11
|
+
import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
|
|
10
12
|
import { IMetadataTag } from "../metadata/IMetadataTag";
|
|
11
13
|
import { Metadata } from "../metadata/Metadata";
|
|
14
|
+
import { MetadataArray } from "../metadata/MetadataArray";
|
|
12
15
|
import { MetadataObject } from "../metadata/MetadataObject";
|
|
16
|
+
import { MetadataTuple } from "../metadata/MetadataTuple";
|
|
13
17
|
|
|
14
18
|
import { IProject } from "../transformers/IProject";
|
|
15
19
|
|
|
@@ -29,6 +33,7 @@ import { UnionExplorer } from "./helpers/UnionExplorer";
|
|
|
29
33
|
import { check_native } from "./internal/check_native";
|
|
30
34
|
import { decode_union_object } from "./internal/decode_union_object";
|
|
31
35
|
import { feature_object_entries } from "./internal/feature_object_entries";
|
|
36
|
+
import { wrap_metadata_rest_tuple } from "./internal/wrap_metadata_rest_tuple";
|
|
32
37
|
|
|
33
38
|
export namespace StringifyProgrammer {
|
|
34
39
|
/* -----------------------------------------------------------
|
|
@@ -45,41 +50,96 @@ export namespace StringifyProgrammer {
|
|
|
45
50
|
export const write =
|
|
46
51
|
(project: IProject) => (modulo: ts.LeftHandSideExpression) => {
|
|
47
52
|
const importer: FunctionImporter = new FunctionImporter();
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
const config: FeatureProgrammer.IConfig =
|
|
54
|
+
configure(project)(importer);
|
|
55
|
+
|
|
56
|
+
return FeatureProgrammer.write(project)({
|
|
57
|
+
...config,
|
|
58
|
+
addition: (collection) => [
|
|
59
|
+
...IsProgrammer.write_function_statements(project)(
|
|
60
|
+
importer,
|
|
61
|
+
)(collection),
|
|
62
|
+
...importer.declare(modulo),
|
|
63
|
+
],
|
|
64
|
+
})(importer);
|
|
65
|
+
};
|
|
59
66
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
67
|
+
const write_array_functions =
|
|
68
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
69
|
+
(importer: FunctionImporter) =>
|
|
70
|
+
(collection: MetadataCollection): ts.VariableStatement[] =>
|
|
71
|
+
collection
|
|
72
|
+
.arrays()
|
|
73
|
+
.filter((a) => a.recursive)
|
|
74
|
+
.map((array, i) =>
|
|
75
|
+
StatementFactory.constant(
|
|
76
|
+
`${config.prefix}a${i}`,
|
|
77
|
+
ts.factory.createArrowFunction(
|
|
78
|
+
undefined,
|
|
79
|
+
undefined,
|
|
80
|
+
FeatureProgrammer.parameterDeclarations(config)(
|
|
81
|
+
TypeFactory.keyword("any"),
|
|
82
|
+
)(ts.factory.createIdentifier("input")),
|
|
83
|
+
TypeFactory.keyword("any"),
|
|
84
|
+
undefined,
|
|
85
|
+
decode_array_inline(config)(importer)(
|
|
86
|
+
ts.factory.createIdentifier("input"),
|
|
87
|
+
array,
|
|
88
|
+
{
|
|
89
|
+
tracable: config.trace,
|
|
90
|
+
source: "function",
|
|
91
|
+
from: "array",
|
|
92
|
+
postfix: "",
|
|
93
|
+
},
|
|
94
|
+
),
|
|
64
95
|
),
|
|
65
|
-
|
|
66
|
-
|
|
96
|
+
),
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
const write_tuple_functions =
|
|
100
|
+
(project: IProject) =>
|
|
101
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
102
|
+
(importer: FunctionImporter) =>
|
|
103
|
+
(collection: MetadataCollection): ts.VariableStatement[] =>
|
|
104
|
+
collection
|
|
105
|
+
.tuples()
|
|
106
|
+
.filter((t) => t.recursive)
|
|
107
|
+
.map((tuple, i) =>
|
|
108
|
+
StatementFactory.constant(
|
|
109
|
+
`${config.prefix}t${i}`,
|
|
110
|
+
ts.factory.createArrowFunction(
|
|
111
|
+
undefined,
|
|
112
|
+
undefined,
|
|
113
|
+
FeatureProgrammer.parameterDeclarations(config)(
|
|
114
|
+
TypeFactory.keyword("any"),
|
|
115
|
+
)(ts.factory.createIdentifier("input")),
|
|
116
|
+
TypeFactory.keyword("any"),
|
|
117
|
+
undefined,
|
|
118
|
+
decode_tuple_inline(project)(config)(importer)(
|
|
119
|
+
ts.factory.createIdentifier("input"),
|
|
120
|
+
tuple,
|
|
121
|
+
{
|
|
122
|
+
tracable: config.trace,
|
|
123
|
+
source: "function",
|
|
124
|
+
from: "array",
|
|
125
|
+
postfix: "",
|
|
126
|
+
},
|
|
127
|
+
),
|
|
67
128
|
),
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
})(importer);
|
|
71
|
-
};
|
|
129
|
+
),
|
|
130
|
+
);
|
|
72
131
|
|
|
73
132
|
/* -----------------------------------------------------------
|
|
74
133
|
DECODERS
|
|
75
134
|
----------------------------------------------------------- */
|
|
76
135
|
const decode =
|
|
77
|
-
(project: IProject
|
|
136
|
+
(project: IProject) =>
|
|
137
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
138
|
+
(importer: FunctionImporter) =>
|
|
78
139
|
(
|
|
79
140
|
input: ts.Expression,
|
|
80
141
|
meta: Metadata,
|
|
81
142
|
explore: FeatureProgrammer.IExplore,
|
|
82
|
-
tags: IMetadataTag[],
|
|
83
143
|
): ts.Expression => {
|
|
84
144
|
// ANY TYPE
|
|
85
145
|
if (meta.any === true)
|
|
@@ -135,22 +195,20 @@ export namespace StringifyProgrammer {
|
|
|
135
195
|
// toJSON() METHOD
|
|
136
196
|
if (meta.resolved !== null)
|
|
137
197
|
if (size === 1)
|
|
138
|
-
return decode_to_json(project
|
|
198
|
+
return decode_to_json(project)(config)(importer)(
|
|
139
199
|
input,
|
|
140
200
|
meta.resolved,
|
|
141
201
|
explore,
|
|
142
|
-
tags,
|
|
143
202
|
);
|
|
144
203
|
else
|
|
145
204
|
unions.push({
|
|
146
205
|
type: "resolved",
|
|
147
206
|
is: () => IsProgrammer.decode_to_json(false)(input),
|
|
148
207
|
value: () =>
|
|
149
|
-
decode_to_json(project
|
|
208
|
+
decode_to_json(project)(config)(importer)(
|
|
150
209
|
input,
|
|
151
210
|
meta.resolved!,
|
|
152
211
|
explore,
|
|
153
|
-
tags,
|
|
154
212
|
),
|
|
155
213
|
});
|
|
156
214
|
else if (meta.functional === true)
|
|
@@ -171,7 +229,7 @@ export namespace StringifyProgrammer {
|
|
|
171
229
|
unions.push({
|
|
172
230
|
type: "template literal",
|
|
173
231
|
is: () =>
|
|
174
|
-
IsProgrammer.decode(project
|
|
232
|
+
IsProgrammer.decode(project)(importer)(
|
|
175
233
|
input,
|
|
176
234
|
partial,
|
|
177
235
|
explore,
|
|
@@ -183,7 +241,6 @@ export namespace StringifyProgrammer {
|
|
|
183
241
|
input,
|
|
184
242
|
"string",
|
|
185
243
|
explore,
|
|
186
|
-
tags,
|
|
187
244
|
),
|
|
188
245
|
});
|
|
189
246
|
}
|
|
@@ -196,7 +253,7 @@ export namespace StringifyProgrammer {
|
|
|
196
253
|
unions.push({
|
|
197
254
|
type: "atomic",
|
|
198
255
|
is: () =>
|
|
199
|
-
IsProgrammer.decode(project
|
|
256
|
+
IsProgrammer.decode(project)(importer)(
|
|
200
257
|
input,
|
|
201
258
|
(() => {
|
|
202
259
|
const partial = Metadata.initialize();
|
|
@@ -212,14 +269,13 @@ export namespace StringifyProgrammer {
|
|
|
212
269
|
input,
|
|
213
270
|
constant.type,
|
|
214
271
|
explore,
|
|
215
|
-
tags,
|
|
216
272
|
),
|
|
217
273
|
});
|
|
218
274
|
else if (meta.templates.length === 0)
|
|
219
275
|
unions.push({
|
|
220
276
|
type: "const string",
|
|
221
277
|
is: () =>
|
|
222
|
-
IsProgrammer.decode(project
|
|
278
|
+
IsProgrammer.decode(project)(importer)(
|
|
223
279
|
input,
|
|
224
280
|
(() => {
|
|
225
281
|
const partial = Metadata.initialize();
|
|
@@ -244,7 +300,7 @@ export namespace StringifyProgrammer {
|
|
|
244
300
|
unions.push({
|
|
245
301
|
type: "atomic",
|
|
246
302
|
is: () =>
|
|
247
|
-
IsProgrammer.decode(project
|
|
303
|
+
IsProgrammer.decode(project)(importer)(
|
|
248
304
|
input,
|
|
249
305
|
(() => {
|
|
250
306
|
const partial = Metadata.initialize();
|
|
@@ -260,13 +316,12 @@ export namespace StringifyProgrammer {
|
|
|
260
316
|
input,
|
|
261
317
|
type,
|
|
262
318
|
explore,
|
|
263
|
-
tags,
|
|
264
319
|
),
|
|
265
320
|
});
|
|
266
321
|
|
|
267
322
|
// TUPLES
|
|
268
323
|
for (const tuple of meta.tuples) {
|
|
269
|
-
for (const child of tuple)
|
|
324
|
+
for (const child of tuple.elements)
|
|
270
325
|
if (StringifyPredicator.undefindable(meta))
|
|
271
326
|
throw new Error(
|
|
272
327
|
`Error on typia.stringify(): tuple cannot contain undefined value - (${child.getName()}).`,
|
|
@@ -274,7 +329,7 @@ export namespace StringifyProgrammer {
|
|
|
274
329
|
unions.push({
|
|
275
330
|
type: "tuple",
|
|
276
331
|
is: () =>
|
|
277
|
-
IsProgrammer.decode(project
|
|
332
|
+
IsProgrammer.decode(project)(importer)(
|
|
278
333
|
input,
|
|
279
334
|
(() => {
|
|
280
335
|
const partial = Metadata.initialize();
|
|
@@ -286,11 +341,10 @@ export namespace StringifyProgrammer {
|
|
|
286
341
|
[],
|
|
287
342
|
),
|
|
288
343
|
value: () =>
|
|
289
|
-
decode_tuple(project)(importer)(
|
|
344
|
+
decode_tuple(project)(config)(importer)(
|
|
290
345
|
input,
|
|
291
346
|
tuple,
|
|
292
347
|
explore,
|
|
293
|
-
tags,
|
|
294
348
|
),
|
|
295
349
|
});
|
|
296
350
|
}
|
|
@@ -298,30 +352,37 @@ export namespace StringifyProgrammer {
|
|
|
298
352
|
// ARRAYS
|
|
299
353
|
if (meta.arrays.length) {
|
|
300
354
|
for (const child of meta.arrays)
|
|
301
|
-
if (StringifyPredicator.undefindable(child))
|
|
355
|
+
if (StringifyPredicator.undefindable(child.value))
|
|
302
356
|
throw new Error(
|
|
303
|
-
`Error on typia.stringify(): array cannot contain undefined value (${child.getName()}).`,
|
|
357
|
+
`Error on typia.stringify(): array cannot contain undefined value (${child.value.getName()}).`,
|
|
304
358
|
);
|
|
305
|
-
const value: () => ts.Expression =
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
359
|
+
const value: () => ts.Expression =
|
|
360
|
+
meta.arrays.length === 1
|
|
361
|
+
? () =>
|
|
362
|
+
decode_array(config)(importer)(
|
|
363
|
+
input,
|
|
364
|
+
meta.arrays[0]!,
|
|
365
|
+
{
|
|
366
|
+
...explore,
|
|
367
|
+
from: "array",
|
|
368
|
+
},
|
|
369
|
+
)
|
|
370
|
+
: meta.arrays.some((elem) => elem.value.any)
|
|
371
|
+
? () =>
|
|
372
|
+
ts.factory.createCallExpression(
|
|
373
|
+
ts.factory.createIdentifier("JSON.stringify"),
|
|
374
|
+
undefined,
|
|
375
|
+
[input],
|
|
376
|
+
)
|
|
377
|
+
: () =>
|
|
378
|
+
explore_arrays(project)(config)(importer)(
|
|
379
|
+
input,
|
|
380
|
+
meta.arrays,
|
|
381
|
+
{
|
|
382
|
+
...explore,
|
|
383
|
+
from: "array",
|
|
384
|
+
},
|
|
385
|
+
);
|
|
325
386
|
|
|
326
387
|
unions.push({
|
|
327
388
|
type: "array",
|
|
@@ -342,7 +403,6 @@ export namespace StringifyProgrammer {
|
|
|
342
403
|
input,
|
|
343
404
|
native.toLowerCase() as Atomic.Literal,
|
|
344
405
|
explore,
|
|
345
|
-
tags,
|
|
346
406
|
)
|
|
347
407
|
: ts.factory.createStringLiteral("{}"),
|
|
348
408
|
});
|
|
@@ -385,17 +445,26 @@ export namespace StringifyProgrammer {
|
|
|
385
445
|
? (() => {
|
|
386
446
|
const obj: MetadataObject = meta.objects[0]!;
|
|
387
447
|
const entries: IExpressionEntry<ts.Expression>[] =
|
|
388
|
-
feature_object_entries
|
|
389
|
-
decoder:
|
|
448
|
+
feature_object_entries({
|
|
449
|
+
decoder: () =>
|
|
450
|
+
decode(project)(config)(importer),
|
|
390
451
|
trace: false,
|
|
391
452
|
path: false,
|
|
392
|
-
})(importer)(obj)(
|
|
453
|
+
})(importer)(obj)(
|
|
454
|
+
ts.factory.createAsExpression(
|
|
455
|
+
input,
|
|
456
|
+
TypeFactory.keyword("any"),
|
|
457
|
+
),
|
|
458
|
+
);
|
|
393
459
|
return StringifyJoiner.object(importer)(
|
|
394
|
-
|
|
460
|
+
ts.factory.createAsExpression(
|
|
461
|
+
input,
|
|
462
|
+
TypeFactory.keyword("any"),
|
|
463
|
+
),
|
|
395
464
|
entries,
|
|
396
465
|
);
|
|
397
466
|
})()
|
|
398
|
-
: explore_objects(importer)(input, meta, {
|
|
467
|
+
: explore_objects(config)(importer)(input, meta, {
|
|
399
468
|
...explore,
|
|
400
469
|
from: "object",
|
|
401
470
|
}),
|
|
@@ -438,61 +507,117 @@ export namespace StringifyProgrammer {
|
|
|
438
507
|
);
|
|
439
508
|
};
|
|
440
509
|
|
|
441
|
-
const decode_array = (project: IProject) => (importer: FunctionImporter) =>
|
|
442
|
-
FeatureProgrammer.decode_array(configure(project)(importer))(importer)(
|
|
443
|
-
StringifyJoiner.array,
|
|
444
|
-
);
|
|
445
|
-
|
|
446
510
|
const decode_object = (importer: FunctionImporter) =>
|
|
447
511
|
FeatureProgrammer.decode_object({
|
|
448
512
|
trace: false,
|
|
449
513
|
path: false,
|
|
450
|
-
|
|
514
|
+
prefix: PREFIX,
|
|
451
515
|
})(importer);
|
|
452
516
|
|
|
517
|
+
const decode_array =
|
|
518
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
519
|
+
(importer: FunctionImporter) =>
|
|
520
|
+
(
|
|
521
|
+
input: ts.Expression,
|
|
522
|
+
array: MetadataArray,
|
|
523
|
+
explore: FeatureProgrammer.IExplore,
|
|
524
|
+
) =>
|
|
525
|
+
array.recursive
|
|
526
|
+
? ts.factory.createCallExpression(
|
|
527
|
+
ts.factory.createIdentifier(
|
|
528
|
+
importer.useLocal(`${config.prefix}a${array.index}`),
|
|
529
|
+
),
|
|
530
|
+
undefined,
|
|
531
|
+
FeatureProgrammer.argumentsArray(config)({
|
|
532
|
+
...explore,
|
|
533
|
+
source: "function",
|
|
534
|
+
from: "array",
|
|
535
|
+
})(input),
|
|
536
|
+
)
|
|
537
|
+
: decode_array_inline(config)(importer)(input, array, explore);
|
|
538
|
+
|
|
539
|
+
const decode_array_inline =
|
|
540
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
541
|
+
(importer: FunctionImporter) =>
|
|
542
|
+
(
|
|
543
|
+
input: ts.Expression,
|
|
544
|
+
array: MetadataArray,
|
|
545
|
+
explore: FeatureProgrammer.IExplore,
|
|
546
|
+
) =>
|
|
547
|
+
FeatureProgrammer.decode_array(config)(importer)(
|
|
548
|
+
StringifyJoiner.array,
|
|
549
|
+
)(input, array, explore, [], []);
|
|
550
|
+
|
|
453
551
|
const decode_tuple =
|
|
454
552
|
(project: IProject) =>
|
|
553
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
554
|
+
(importer: FunctionImporter) =>
|
|
555
|
+
(
|
|
556
|
+
input: ts.Expression,
|
|
557
|
+
tuple: MetadataTuple,
|
|
558
|
+
explore: FeatureProgrammer.IExplore,
|
|
559
|
+
): ts.Expression =>
|
|
560
|
+
tuple.recursive
|
|
561
|
+
? ts.factory.createCallExpression(
|
|
562
|
+
ts.factory.createIdentifier(
|
|
563
|
+
importer.useLocal(`${config.prefix}t${tuple.index}`),
|
|
564
|
+
),
|
|
565
|
+
undefined,
|
|
566
|
+
FeatureProgrammer.argumentsArray(config)({
|
|
567
|
+
...explore,
|
|
568
|
+
source: "function",
|
|
569
|
+
})(input),
|
|
570
|
+
)
|
|
571
|
+
: decode_tuple_inline(project)(config)(importer)(
|
|
572
|
+
input,
|
|
573
|
+
tuple,
|
|
574
|
+
explore,
|
|
575
|
+
);
|
|
576
|
+
|
|
577
|
+
const decode_tuple_inline =
|
|
578
|
+
(project: IProject) =>
|
|
579
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
455
580
|
(importer: FunctionImporter) =>
|
|
456
581
|
(
|
|
457
582
|
input: ts.Expression,
|
|
458
|
-
tuple:
|
|
583
|
+
tuple: MetadataTuple,
|
|
459
584
|
explore: FeatureProgrammer.IExplore,
|
|
460
|
-
tags: IMetadataTag[],
|
|
461
585
|
): ts.Expression => {
|
|
462
|
-
const children: ts.Expression[] = tuple
|
|
586
|
+
const children: ts.Expression[] = tuple.elements
|
|
463
587
|
.filter((elem) => elem.rest === null)
|
|
464
588
|
.map((elem, index) =>
|
|
465
|
-
decode(project
|
|
589
|
+
decode(project)(config)(importer)(
|
|
466
590
|
ts.factory.createElementAccessExpression(input, index),
|
|
467
591
|
elem,
|
|
468
592
|
{
|
|
469
593
|
...explore,
|
|
470
594
|
from: "array",
|
|
595
|
+
postfix: explore.postfix.length
|
|
596
|
+
? `${explore.postfix.slice(0, -1)}[${index}]"`
|
|
597
|
+
: `"[${index}]"`,
|
|
471
598
|
},
|
|
472
|
-
tags,
|
|
473
599
|
),
|
|
474
600
|
);
|
|
475
601
|
const rest = (() => {
|
|
476
|
-
if (tuple.length === 0) return null;
|
|
477
|
-
const last = tuple
|
|
602
|
+
if (tuple.elements.length === 0) return null;
|
|
603
|
+
const last = tuple.elements.at(-1)!;
|
|
478
604
|
if (last.rest === null) return null;
|
|
479
605
|
|
|
480
|
-
const code = decode(project
|
|
606
|
+
const code = decode(project)(config)(importer)(
|
|
481
607
|
ts.factory.createCallExpression(
|
|
482
608
|
IdentifierFactory.access(input)("slice"),
|
|
483
609
|
undefined,
|
|
484
|
-
[
|
|
610
|
+
[
|
|
611
|
+
ts.factory.createNumericLiteral(
|
|
612
|
+
tuple.elements.length - 1,
|
|
613
|
+
),
|
|
614
|
+
],
|
|
485
615
|
),
|
|
486
|
-
(()
|
|
487
|
-
const wrapper: Metadata = Metadata.initialize();
|
|
488
|
-
wrapper.arrays.push(tuple[tuple.length - 1]!.rest!);
|
|
489
|
-
return wrapper;
|
|
490
|
-
})(),
|
|
616
|
+
wrap_metadata_rest_tuple(tuple.elements.at(-1)!.rest!),
|
|
491
617
|
{
|
|
492
618
|
...explore,
|
|
493
|
-
start: tuple.length - 1,
|
|
619
|
+
start: tuple.elements.length - 1,
|
|
494
620
|
},
|
|
495
|
-
tags,
|
|
496
621
|
);
|
|
497
622
|
return ts.factory.createCallExpression(
|
|
498
623
|
importer.use("rest"),
|
|
@@ -510,21 +635,13 @@ export namespace StringifyProgrammer {
|
|
|
510
635
|
input: ts.Expression,
|
|
511
636
|
type: string,
|
|
512
637
|
explore: FeatureProgrammer.IExplore,
|
|
513
|
-
tagList: IMetadataTag[],
|
|
514
638
|
) => {
|
|
515
639
|
if (type === "string")
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
].reduce((x, y) => ts.factory.createAdd(x, y));
|
|
522
|
-
else
|
|
523
|
-
return ts.factory.createCallExpression(
|
|
524
|
-
importer.use("string"),
|
|
525
|
-
undefined,
|
|
526
|
-
[input],
|
|
527
|
-
);
|
|
640
|
+
return ts.factory.createCallExpression(
|
|
641
|
+
importer.use("string"),
|
|
642
|
+
undefined,
|
|
643
|
+
[input],
|
|
644
|
+
);
|
|
528
645
|
else if (
|
|
529
646
|
type === "number" &&
|
|
530
647
|
OptionPredicator.numeric(project.options)
|
|
@@ -563,19 +680,19 @@ export namespace StringifyProgrammer {
|
|
|
563
680
|
input,
|
|
564
681
|
"string",
|
|
565
682
|
explore,
|
|
566
|
-
[],
|
|
567
683
|
);
|
|
568
684
|
};
|
|
569
685
|
|
|
570
686
|
const decode_to_json =
|
|
571
|
-
(project: IProject
|
|
687
|
+
(project: IProject) =>
|
|
688
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
689
|
+
(importer: FunctionImporter) =>
|
|
572
690
|
(
|
|
573
691
|
input: ts.Expression,
|
|
574
692
|
resolved: Metadata,
|
|
575
693
|
explore: FeatureProgrammer.IExplore,
|
|
576
|
-
tags: IMetadataTag[],
|
|
577
694
|
): ts.Expression => {
|
|
578
|
-
return decode(project
|
|
695
|
+
return decode(project)(config)(importer)(
|
|
579
696
|
ts.factory.createCallExpression(
|
|
580
697
|
IdentifierFactory.access(input)("toJSON"),
|
|
581
698
|
undefined,
|
|
@@ -583,7 +700,6 @@ export namespace StringifyProgrammer {
|
|
|
583
700
|
),
|
|
584
701
|
resolved,
|
|
585
702
|
explore,
|
|
586
|
-
tags,
|
|
587
703
|
);
|
|
588
704
|
};
|
|
589
705
|
|
|
@@ -595,35 +711,98 @@ export namespace StringifyProgrammer {
|
|
|
595
711
|
/* -----------------------------------------------------------
|
|
596
712
|
EXPLORERS
|
|
597
713
|
----------------------------------------------------------- */
|
|
598
|
-
const explore_arrays =
|
|
599
|
-
(project: IProject) => (importer: FunctionImporter) =>
|
|
600
|
-
UnionExplorer.array({
|
|
601
|
-
checker: IsProgrammer.decode(project, importer),
|
|
602
|
-
decoder: decode_array(project)(importer),
|
|
603
|
-
empty: ts.factory.createStringLiteral("[]"),
|
|
604
|
-
success: ts.factory.createTrue(),
|
|
605
|
-
failure: (input, expected) =>
|
|
606
|
-
create_throw_error(importer, input, expected),
|
|
607
|
-
});
|
|
608
|
-
|
|
609
714
|
const explore_objects =
|
|
715
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
610
716
|
(importer: FunctionImporter) =>
|
|
611
717
|
(
|
|
612
718
|
input: ts.Expression,
|
|
613
719
|
meta: Metadata,
|
|
614
720
|
explore: FeatureProgrammer.IExplore,
|
|
615
|
-
) =>
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
721
|
+
) =>
|
|
722
|
+
meta.objects.length === 1
|
|
723
|
+
? decode_object(importer)(input, meta.objects[0]!, explore)
|
|
724
|
+
: ts.factory.createCallExpression(
|
|
725
|
+
ts.factory.createIdentifier(
|
|
726
|
+
importer.useLocal(`${PREFIX}u${meta.union_index!}`),
|
|
727
|
+
),
|
|
728
|
+
undefined,
|
|
729
|
+
FeatureProgrammer.argumentsArray(config)(explore)(input),
|
|
730
|
+
);
|
|
731
|
+
|
|
732
|
+
const explore_arrays =
|
|
733
|
+
(project: IProject) =>
|
|
734
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
735
|
+
(importer: FunctionImporter) =>
|
|
736
|
+
(
|
|
737
|
+
input: ts.Expression,
|
|
738
|
+
elements: MetadataArray[],
|
|
739
|
+
explore: FeatureProgrammer.IExplore,
|
|
740
|
+
): ts.Expression =>
|
|
741
|
+
explore_array_like_union_types(config)(importer)(
|
|
742
|
+
UnionExplorer.array({
|
|
743
|
+
checker: IsProgrammer.decode(project)(importer),
|
|
744
|
+
decoder: decode_array(config)(importer),
|
|
745
|
+
empty: ts.factory.createStringLiteral("[]"),
|
|
746
|
+
success: ts.factory.createTrue(),
|
|
747
|
+
failure: (input, expected) =>
|
|
748
|
+
create_throw_error(importer)(expected)(input),
|
|
749
|
+
}),
|
|
750
|
+
)(input, elements, explore);
|
|
751
|
+
|
|
752
|
+
const explore_array_like_union_types =
|
|
753
|
+
(config: FeatureProgrammer.IConfig) =>
|
|
754
|
+
(importer: FunctionImporter) =>
|
|
755
|
+
<T extends MetadataArray | MetadataTuple>(
|
|
756
|
+
factory: (
|
|
757
|
+
parameters: ts.ParameterDeclaration[],
|
|
758
|
+
) => (
|
|
759
|
+
input: ts.Expression,
|
|
760
|
+
elements: T[],
|
|
761
|
+
explore: FeatureProgrammer.IExplore,
|
|
762
|
+
tags: IMetadataTag[],
|
|
763
|
+
jsDocTags: IJsDocTagInfo[],
|
|
764
|
+
) => ts.ArrowFunction,
|
|
765
|
+
) =>
|
|
766
|
+
(
|
|
767
|
+
input: ts.Expression,
|
|
768
|
+
elements: T[],
|
|
769
|
+
explore: FeatureProgrammer.IExplore,
|
|
770
|
+
): ts.Expression => {
|
|
771
|
+
const arrow =
|
|
772
|
+
(parameters: ts.ParameterDeclaration[]) =>
|
|
773
|
+
(explore: FeatureProgrammer.IExplore) =>
|
|
774
|
+
(input: ts.Expression): ts.ArrowFunction =>
|
|
775
|
+
factory(parameters)(input, elements, explore, [], []);
|
|
776
|
+
if (elements.every((e) => e.recursive === false))
|
|
777
|
+
ts.factory.createCallExpression(
|
|
778
|
+
arrow([])(explore)(input),
|
|
779
|
+
undefined,
|
|
780
|
+
[],
|
|
621
781
|
);
|
|
622
782
|
|
|
783
|
+
explore = {
|
|
784
|
+
...explore,
|
|
785
|
+
source: "function",
|
|
786
|
+
from: "array",
|
|
787
|
+
};
|
|
623
788
|
return ts.factory.createCallExpression(
|
|
624
|
-
ts.factory.createIdentifier(
|
|
789
|
+
ts.factory.createIdentifier(
|
|
790
|
+
importer.emplaceUnion(
|
|
791
|
+
config.prefix,
|
|
792
|
+
elements.map((e) => e.name).join(" | "),
|
|
793
|
+
() =>
|
|
794
|
+
arrow(
|
|
795
|
+
FeatureProgrammer.parameterDeclarations(config)(
|
|
796
|
+
TypeFactory.keyword("any"),
|
|
797
|
+
)(ts.factory.createIdentifier("input")),
|
|
798
|
+
)({
|
|
799
|
+
...explore,
|
|
800
|
+
postfix: "",
|
|
801
|
+
})(ts.factory.createIdentifier("input")),
|
|
802
|
+
),
|
|
803
|
+
),
|
|
625
804
|
undefined,
|
|
626
|
-
|
|
805
|
+
FeatureProgrammer.argumentsArray(config)(explore)(input),
|
|
627
806
|
);
|
|
628
807
|
};
|
|
629
808
|
|
|
@@ -703,7 +882,7 @@ export namespace StringifyProgrammer {
|
|
|
703
882
|
ts.factory.createReturnStatement(u.value()),
|
|
704
883
|
),
|
|
705
884
|
),
|
|
706
|
-
create_throw_error(importer
|
|
885
|
+
create_throw_error(importer)(expected)(input),
|
|
707
886
|
],
|
|
708
887
|
true,
|
|
709
888
|
);
|
|
@@ -711,27 +890,53 @@ export namespace StringifyProgrammer {
|
|
|
711
890
|
/* -----------------------------------------------------------
|
|
712
891
|
CONFIGURATIONS
|
|
713
892
|
----------------------------------------------------------- */
|
|
714
|
-
const
|
|
715
|
-
const UNIONERS = "$su";
|
|
893
|
+
const PREFIX = "$s";
|
|
716
894
|
|
|
717
895
|
const configure =
|
|
718
896
|
(project: IProject) =>
|
|
719
|
-
(importer: FunctionImporter): FeatureProgrammer.IConfig =>
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
897
|
+
(importer: FunctionImporter): FeatureProgrammer.IConfig => {
|
|
898
|
+
const config: FeatureProgrammer.IConfig = {
|
|
899
|
+
types: {
|
|
900
|
+
input: (type, name) =>
|
|
901
|
+
ts.factory.createTypeReferenceNode(
|
|
902
|
+
name ??
|
|
903
|
+
TypeFactory.getFullName(project.checker)(type),
|
|
904
|
+
),
|
|
905
|
+
output: () => TypeFactory.keyword("string"),
|
|
906
|
+
},
|
|
907
|
+
prefix: PREFIX,
|
|
908
|
+
trace: false,
|
|
909
|
+
path: false,
|
|
910
|
+
initializer,
|
|
911
|
+
decoder: () => decode(project)(config)(importer),
|
|
912
|
+
objector: {
|
|
913
|
+
checker: () => (input, meta, explore) =>
|
|
914
|
+
IsProgrammer.decode(project)(importer)(
|
|
915
|
+
input,
|
|
916
|
+
meta,
|
|
917
|
+
explore,
|
|
918
|
+
[],
|
|
919
|
+
[],
|
|
920
|
+
),
|
|
921
|
+
decoder: () => decode_object(importer),
|
|
922
|
+
joiner: StringifyJoiner.object(importer),
|
|
923
|
+
unionizer: decode_union_object(
|
|
924
|
+
IsProgrammer.decode_object(importer),
|
|
925
|
+
)(decode_object(importer))((exp) => exp)(
|
|
926
|
+
(value, expected) =>
|
|
927
|
+
create_throw_error(importer)(expected)(value),
|
|
724
928
|
),
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
929
|
+
failure: (input, expected) =>
|
|
930
|
+
create_throw_error(importer)(expected)(input),
|
|
931
|
+
},
|
|
932
|
+
generator: {
|
|
933
|
+
arrays: () => write_array_functions(config)(importer),
|
|
934
|
+
tuples: () =>
|
|
935
|
+
write_tuple_functions(project)(config)(importer),
|
|
936
|
+
},
|
|
937
|
+
};
|
|
938
|
+
return config;
|
|
939
|
+
};
|
|
735
940
|
|
|
736
941
|
const initializer: FeatureProgrammer.IConfig["initializer"] =
|
|
737
942
|
({ checker }) =>
|
|
@@ -740,6 +945,7 @@ export namespace StringifyProgrammer {
|
|
|
740
945
|
const meta: Metadata = MetadataFactory.analyze(checker)({
|
|
741
946
|
resolve: true,
|
|
742
947
|
constant: true,
|
|
948
|
+
absorb: true,
|
|
743
949
|
validate: (meta) => {
|
|
744
950
|
if (meta.atomics.find((str) => str === "bigint"))
|
|
745
951
|
throw new Error(NO_BIGINT);
|
|
@@ -748,45 +954,31 @@ export namespace StringifyProgrammer {
|
|
|
748
954
|
return [collection, meta];
|
|
749
955
|
};
|
|
750
956
|
|
|
751
|
-
const
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
[
|
|
777
|
-
ts.factory.createObjectLiteralExpression(
|
|
778
|
-
[
|
|
779
|
-
ts.factory.createPropertyAssignment(
|
|
780
|
-
"expected",
|
|
781
|
-
ts.factory.createStringLiteral(expected),
|
|
782
|
-
),
|
|
783
|
-
ts.factory.createPropertyAssignment("value", value),
|
|
784
|
-
],
|
|
785
|
-
true,
|
|
786
|
-
),
|
|
787
|
-
],
|
|
788
|
-
),
|
|
789
|
-
);
|
|
957
|
+
const create_throw_error =
|
|
958
|
+
(importer: FunctionImporter) =>
|
|
959
|
+
(expected: string) =>
|
|
960
|
+
(value: ts.Expression) =>
|
|
961
|
+
ts.factory.createExpressionStatement(
|
|
962
|
+
ts.factory.createCallExpression(
|
|
963
|
+
importer.use("throws"),
|
|
964
|
+
[],
|
|
965
|
+
[
|
|
966
|
+
ts.factory.createObjectLiteralExpression(
|
|
967
|
+
[
|
|
968
|
+
ts.factory.createPropertyAssignment(
|
|
969
|
+
"expected",
|
|
970
|
+
ts.factory.createStringLiteral(expected),
|
|
971
|
+
),
|
|
972
|
+
ts.factory.createPropertyAssignment(
|
|
973
|
+
"value",
|
|
974
|
+
value,
|
|
975
|
+
),
|
|
976
|
+
],
|
|
977
|
+
true,
|
|
978
|
+
),
|
|
979
|
+
],
|
|
980
|
+
),
|
|
981
|
+
);
|
|
790
982
|
}
|
|
791
983
|
|
|
792
984
|
interface IUnion {
|