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
|
@@ -9,6 +9,7 @@ import { ValueFactory } from "../factories/ValueFactory";
|
|
|
9
9
|
import { IJsDocTagInfo } from "../metadata/IJsDocTagInfo";
|
|
10
10
|
import { IMetadataTag } from "../metadata/IMetadataTag";
|
|
11
11
|
import { Metadata } from "../metadata/Metadata";
|
|
12
|
+
import { MetadataArray } from "../metadata/MetadataArray";
|
|
12
13
|
import { MetadataObject } from "../metadata/MetadataObject";
|
|
13
14
|
|
|
14
15
|
import { IProject } from "../transformers/IProject";
|
|
@@ -27,14 +28,9 @@ export namespace FeatureProgrammer {
|
|
|
27
28
|
types: IConfig.ITypes;
|
|
28
29
|
|
|
29
30
|
/**
|
|
30
|
-
* Prefix name of functions for specific
|
|
31
|
+
* Prefix name of internal functions for specific types.
|
|
31
32
|
*/
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Prefix name of functions for union object types.
|
|
36
|
-
*/
|
|
37
|
-
unioners: string;
|
|
33
|
+
prefix: string;
|
|
38
34
|
|
|
39
35
|
/**
|
|
40
36
|
* Whether to archive access path or not.
|
|
@@ -58,7 +54,7 @@ export namespace FeatureProgrammer {
|
|
|
58
54
|
/**
|
|
59
55
|
* Decoder, station of every types.
|
|
60
56
|
*/
|
|
61
|
-
decoder: Decoder<Metadata, Output>;
|
|
57
|
+
decoder: () => Decoder<Metadata, Output>;
|
|
62
58
|
|
|
63
59
|
/**
|
|
64
60
|
* Object configurator.
|
|
@@ -68,7 +64,7 @@ export namespace FeatureProgrammer {
|
|
|
68
64
|
/**
|
|
69
65
|
* Generator of functions for object types.
|
|
70
66
|
*/
|
|
71
|
-
generator
|
|
67
|
+
generator: IConfig.IGenerator;
|
|
72
68
|
}
|
|
73
69
|
export namespace IConfig {
|
|
74
70
|
export interface ITypes {
|
|
@@ -80,12 +76,12 @@ export namespace FeatureProgrammer {
|
|
|
80
76
|
/**
|
|
81
77
|
* Type checker when union object type comes.
|
|
82
78
|
*/
|
|
83
|
-
checker: Decoder<Metadata, ts.Expression>;
|
|
79
|
+
checker: () => Decoder<Metadata, ts.Expression>;
|
|
84
80
|
|
|
85
81
|
/**
|
|
86
82
|
* Decoder, function call expression generator of specific typed objects.
|
|
87
83
|
*/
|
|
88
|
-
decoder: Decoder<MetadataObject, ts.Expression>;
|
|
84
|
+
decoder: () => Decoder<MetadataObject, ts.Expression>;
|
|
89
85
|
|
|
90
86
|
/**
|
|
91
87
|
* Joiner of expressions from properties.
|
|
@@ -174,23 +170,16 @@ export namespace FeatureProgrammer {
|
|
|
174
170
|
type?: ts.TypeNode;
|
|
175
171
|
}
|
|
176
172
|
export interface IGenerator {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
functors(col: MetadataCollection): ts.VariableStatement[];
|
|
182
|
-
|
|
183
|
-
/**
|
|
184
|
-
*
|
|
185
|
-
* @param col
|
|
186
|
-
*/
|
|
187
|
-
unioners(col: MetadataCollection): ts.VariableStatement[];
|
|
173
|
+
objects?(): (col: MetadataCollection) => ts.VariableStatement[];
|
|
174
|
+
unions?(): (col: MetadataCollection) => ts.VariableStatement[];
|
|
175
|
+
arrays(): (col: MetadataCollection) => ts.VariableStatement[];
|
|
176
|
+
tuples(): (col: MetadataCollection) => ts.VariableStatement[];
|
|
188
177
|
}
|
|
189
178
|
}
|
|
190
179
|
|
|
191
180
|
export interface IExplore {
|
|
192
181
|
tracable: boolean;
|
|
193
|
-
source: "top" | "
|
|
182
|
+
source: "top" | "function";
|
|
194
183
|
from: "top" | "array" | "object";
|
|
195
184
|
postfix: string;
|
|
196
185
|
start?: number;
|
|
@@ -212,7 +201,7 @@ export namespace FeatureProgrammer {
|
|
|
212
201
|
/* -----------------------------------------------------------
|
|
213
202
|
GENERATORS
|
|
214
203
|
----------------------------------------------------------- */
|
|
215
|
-
export const
|
|
204
|
+
export const write =
|
|
216
205
|
(project: IProject) =>
|
|
217
206
|
(config: IConfig) =>
|
|
218
207
|
(importer: FunctionImporter) =>
|
|
@@ -220,7 +209,7 @@ export namespace FeatureProgrammer {
|
|
|
220
209
|
const [collection, meta] = config.initializer(project)(type);
|
|
221
210
|
|
|
222
211
|
// ITERATE OVER ALL METADATA
|
|
223
|
-
const output: ts.ConciseBody = config.decoder(
|
|
212
|
+
const output: ts.ConciseBody = config.decoder()(
|
|
224
213
|
ValueFactory.INPUT(),
|
|
225
214
|
meta,
|
|
226
215
|
{
|
|
@@ -234,12 +223,17 @@ export namespace FeatureProgrammer {
|
|
|
234
223
|
);
|
|
235
224
|
|
|
236
225
|
// RETURNS THE OPTIMAL ARROW FUNCTION
|
|
237
|
-
const
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
226
|
+
const functions = {
|
|
227
|
+
objects: (
|
|
228
|
+
config.generator.objects?.() ??
|
|
229
|
+
write_object_functions(config)(importer)
|
|
230
|
+
)(collection),
|
|
231
|
+
unions: (
|
|
232
|
+
config.generator.unions?.() ?? write_union_functions(config)
|
|
233
|
+
)(collection),
|
|
234
|
+
arrays: config.generator.arrays()(collection),
|
|
235
|
+
tuples: config.generator.tuples()(collection),
|
|
236
|
+
};
|
|
243
237
|
const added: ts.Statement[] = (config.addition ?? (() => []))(
|
|
244
238
|
collection,
|
|
245
239
|
);
|
|
@@ -247,7 +241,7 @@ export namespace FeatureProgrammer {
|
|
|
247
241
|
return ts.factory.createArrowFunction(
|
|
248
242
|
undefined,
|
|
249
243
|
undefined,
|
|
250
|
-
|
|
244
|
+
parameterDeclarations(config)(config.types.input(type, name))(
|
|
251
245
|
ValueFactory.INPUT(),
|
|
252
246
|
),
|
|
253
247
|
config.types.output(type, name),
|
|
@@ -255,11 +249,17 @@ export namespace FeatureProgrammer {
|
|
|
255
249
|
ts.factory.createBlock(
|
|
256
250
|
[
|
|
257
251
|
...added,
|
|
258
|
-
...
|
|
259
|
-
importer.hasLocal(`${config.
|
|
252
|
+
...functions.objects.filter((_, i) =>
|
|
253
|
+
importer.hasLocal(`${config.prefix}o${i}`),
|
|
254
|
+
),
|
|
255
|
+
...functions.unions.filter((_, i) =>
|
|
256
|
+
importer.hasLocal(`${config.prefix}u${i}`),
|
|
260
257
|
),
|
|
261
|
-
...
|
|
262
|
-
importer.hasLocal(`${config.
|
|
258
|
+
...functions.arrays.filter((_, i) =>
|
|
259
|
+
importer.hasLocal(`${config.prefix}a${i}`),
|
|
260
|
+
),
|
|
261
|
+
...functions.tuples.filter((_, i) =>
|
|
262
|
+
importer.hasLocal(`${config.prefix}t${i}`),
|
|
263
263
|
),
|
|
264
264
|
...(ts.isBlock(output)
|
|
265
265
|
? output.statements
|
|
@@ -270,7 +270,7 @@ export namespace FeatureProgrammer {
|
|
|
270
270
|
);
|
|
271
271
|
};
|
|
272
272
|
|
|
273
|
-
export const
|
|
273
|
+
export const write_object_functions =
|
|
274
274
|
(config: IConfig) =>
|
|
275
275
|
(importer: FunctionImporter) =>
|
|
276
276
|
(collection: MetadataCollection) =>
|
|
@@ -278,45 +278,37 @@ export namespace FeatureProgrammer {
|
|
|
278
278
|
.objects()
|
|
279
279
|
.map((obj, i) =>
|
|
280
280
|
StatementFactory.constant(
|
|
281
|
-
`${config.
|
|
282
|
-
|
|
281
|
+
`${config.prefix}o${i}`,
|
|
282
|
+
ts.factory.createArrowFunction(
|
|
283
|
+
undefined,
|
|
284
|
+
undefined,
|
|
285
|
+
parameterDeclarations(config)(
|
|
286
|
+
TypeFactory.keyword("any"),
|
|
287
|
+
)(ValueFactory.INPUT()),
|
|
288
|
+
config.objector.type ?? TypeFactory.keyword("any"),
|
|
289
|
+
undefined,
|
|
290
|
+
config.objector.joiner(
|
|
291
|
+
ts.factory.createIdentifier("input"),
|
|
292
|
+
feature_object_entries(config)(importer)(obj)(
|
|
293
|
+
ts.factory.createIdentifier("input"),
|
|
294
|
+
),
|
|
295
|
+
obj,
|
|
296
|
+
),
|
|
297
|
+
),
|
|
283
298
|
),
|
|
284
299
|
);
|
|
285
300
|
|
|
286
|
-
export const
|
|
287
|
-
(config: IConfig) =>
|
|
288
|
-
(importer: FunctionImporter) =>
|
|
289
|
-
(collection: MetadataCollection) =>
|
|
301
|
+
export const write_union_functions =
|
|
302
|
+
(config: IConfig) => (collection: MetadataCollection) =>
|
|
290
303
|
collection
|
|
291
304
|
.unions()
|
|
292
305
|
.map((union, i) =>
|
|
293
306
|
StatementFactory.constant(
|
|
294
|
-
|
|
307
|
+
`${config.prefix}u${i}`,
|
|
295
308
|
write_union(config)(union),
|
|
296
309
|
),
|
|
297
310
|
);
|
|
298
311
|
|
|
299
|
-
const write_object =
|
|
300
|
-
(config: IConfig) =>
|
|
301
|
-
(importer: FunctionImporter) =>
|
|
302
|
-
(obj: MetadataObject) =>
|
|
303
|
-
ts.factory.createArrowFunction(
|
|
304
|
-
undefined,
|
|
305
|
-
undefined,
|
|
306
|
-
PARAMETERS(config)(TypeFactory.keyword("any"))(
|
|
307
|
-
ValueFactory.INPUT(),
|
|
308
|
-
),
|
|
309
|
-
config.objector.type ?? TypeFactory.keyword("any"),
|
|
310
|
-
undefined,
|
|
311
|
-
config.objector.joiner(
|
|
312
|
-
ts.factory.createIdentifier("input"),
|
|
313
|
-
feature_object_entries(config)(importer)(obj)(
|
|
314
|
-
ts.factory.createIdentifier("input"),
|
|
315
|
-
),
|
|
316
|
-
obj,
|
|
317
|
-
),
|
|
318
|
-
);
|
|
319
|
-
|
|
320
312
|
const write_union = (config: IConfig) => {
|
|
321
313
|
const explorer = UnionExplorer.object(config);
|
|
322
314
|
const input = ValueFactory.INPUT();
|
|
@@ -325,7 +317,7 @@ export namespace FeatureProgrammer {
|
|
|
325
317
|
ts.factory.createArrowFunction(
|
|
326
318
|
undefined,
|
|
327
319
|
undefined,
|
|
328
|
-
|
|
320
|
+
parameterDeclarations(config)(TypeFactory.keyword("any"))(
|
|
329
321
|
ValueFactory.INPUT(),
|
|
330
322
|
),
|
|
331
323
|
TypeFactory.keyword("any"),
|
|
@@ -335,7 +327,7 @@ export namespace FeatureProgrammer {
|
|
|
335
327
|
meta,
|
|
336
328
|
{
|
|
337
329
|
tracable: config.path || config.trace,
|
|
338
|
-
source: "
|
|
330
|
+
source: "function",
|
|
339
331
|
from: "object",
|
|
340
332
|
postfix: "",
|
|
341
333
|
},
|
|
@@ -349,7 +341,7 @@ export namespace FeatureProgrammer {
|
|
|
349
341
|
DECODERS
|
|
350
342
|
----------------------------------------------------------- */
|
|
351
343
|
export const decode_array =
|
|
352
|
-
(config: Pick<IConfig, "trace" | "path" | "decoder">) =>
|
|
344
|
+
(config: Pick<IConfig, "trace" | "path" | "decoder" | "prefix">) =>
|
|
353
345
|
(importer: FunctionImporter) =>
|
|
354
346
|
(
|
|
355
347
|
combiner: (
|
|
@@ -372,7 +364,7 @@ export namespace FeatureProgrammer {
|
|
|
372
364
|
|
|
373
365
|
return (
|
|
374
366
|
input: ts.Expression,
|
|
375
|
-
|
|
367
|
+
array: MetadataArray,
|
|
376
368
|
explore: IExplore,
|
|
377
369
|
metaTags: IMetadataTag[],
|
|
378
370
|
jsDocTags: IJsDocTagInfo[],
|
|
@@ -389,14 +381,14 @@ export namespace FeatureProgrammer {
|
|
|
389
381
|
],
|
|
390
382
|
undefined,
|
|
391
383
|
undefined,
|
|
392
|
-
config.decoder(
|
|
384
|
+
config.decoder()(
|
|
393
385
|
ValueFactory.INPUT("elem"),
|
|
394
|
-
|
|
386
|
+
array.value,
|
|
395
387
|
{
|
|
396
388
|
tracable: explore.tracable,
|
|
397
389
|
source: explore.source,
|
|
398
390
|
from: "array",
|
|
399
|
-
postfix:
|
|
391
|
+
postfix: index(explore.start ?? null)(
|
|
400
392
|
explore.postfix,
|
|
401
393
|
)(rand),
|
|
402
394
|
},
|
|
@@ -409,18 +401,33 @@ export namespace FeatureProgrammer {
|
|
|
409
401
|
};
|
|
410
402
|
|
|
411
403
|
export const decode_object =
|
|
412
|
-
(config: Pick<IConfig, "trace" | "path" | "
|
|
404
|
+
(config: Pick<IConfig, "trace" | "path" | "prefix">) =>
|
|
413
405
|
(importer: FunctionImporter) =>
|
|
414
406
|
(input: ts.Expression, obj: MetadataObject, explore: IExplore) =>
|
|
415
407
|
ts.factory.createCallExpression(
|
|
416
408
|
ts.factory.createIdentifier(
|
|
417
|
-
importer.useLocal(`${config.
|
|
409
|
+
importer.useLocal(`${config.prefix}o${obj.index}`),
|
|
418
410
|
),
|
|
419
411
|
undefined,
|
|
420
|
-
|
|
412
|
+
argumentsArray(config)(explore)(input),
|
|
421
413
|
);
|
|
422
414
|
|
|
423
|
-
|
|
415
|
+
/* -----------------------------------------------------------
|
|
416
|
+
UTILITIES FOR INTERNAL FUNCTIONS
|
|
417
|
+
----------------------------------------------------------- */
|
|
418
|
+
export const index =
|
|
419
|
+
(start: number | null) => (prev: string) => (rand: string) => {
|
|
420
|
+
const tail: string =
|
|
421
|
+
start !== null
|
|
422
|
+
? `"[" + (${start} + _index${rand}) + "]"`
|
|
423
|
+
: `"[" + _index${rand} + "]"`;
|
|
424
|
+
if (prev === "") return tail;
|
|
425
|
+
else if (prev[prev.length - 1] === `"`)
|
|
426
|
+
return prev.substring(0, prev.length - 1) + tail.substring(1);
|
|
427
|
+
return prev + ` + ${tail}`;
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
export const argumentsArray =
|
|
424
431
|
(config: Pick<IConfig, "path" | "trace">) =>
|
|
425
432
|
(explore: FeatureProgrammer.IExplore) => {
|
|
426
433
|
const tail: ts.Expression[] =
|
|
@@ -433,7 +440,7 @@ export namespace FeatureProgrammer {
|
|
|
433
440
|
? `_path + ${explore.postfix}`
|
|
434
441
|
: "_path",
|
|
435
442
|
),
|
|
436
|
-
explore.source === "
|
|
443
|
+
explore.source === "function"
|
|
437
444
|
? ts.factory.createIdentifier(
|
|
438
445
|
`${explore.tracable} && _exceptionable`,
|
|
439
446
|
)
|
|
@@ -450,7 +457,7 @@ export namespace FeatureProgrammer {
|
|
|
450
457
|
),
|
|
451
458
|
]
|
|
452
459
|
: [
|
|
453
|
-
explore.source === "
|
|
460
|
+
explore.source === "function"
|
|
454
461
|
? ts.factory.createIdentifier(
|
|
455
462
|
`${explore.tracable} && _exceptionable`,
|
|
456
463
|
)
|
|
@@ -460,41 +467,29 @@ export namespace FeatureProgrammer {
|
|
|
460
467
|
];
|
|
461
468
|
return (input: ts.Expression) => [input, ...tail];
|
|
462
469
|
};
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
const INDEX_SYMBOL =
|
|
466
|
-
(start: number | null) => (prev: string) => (rand: string) => {
|
|
467
|
-
const tail: string =
|
|
468
|
-
start !== null
|
|
469
|
-
? `"[" + (${start} + _index${rand}) + "]"`
|
|
470
|
-
: `"[" + _index${rand} + "]"`;
|
|
471
|
-
if (prev === "") return tail;
|
|
472
|
-
else if (prev[prev.length - 1] === `"`)
|
|
473
|
-
return prev.substring(0, prev.length - 1) + tail.substring(1);
|
|
474
|
-
return prev + ` + ${tail}`;
|
|
475
|
-
};
|
|
476
470
|
|
|
477
|
-
const
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
471
|
+
export const parameterDeclarations =
|
|
472
|
+
(props: Pick<CheckerProgrammer.IConfig, "path" | "trace">) =>
|
|
473
|
+
(type: ts.TypeNode) => {
|
|
474
|
+
const tail: ts.ParameterDeclaration[] = [];
|
|
475
|
+
if (props.path)
|
|
476
|
+
tail.push(
|
|
477
|
+
IdentifierFactory.parameter(
|
|
478
|
+
"_path",
|
|
479
|
+
TypeFactory.keyword("string"),
|
|
480
|
+
),
|
|
481
|
+
);
|
|
482
|
+
if (props.trace)
|
|
483
|
+
tail.push(
|
|
484
|
+
IdentifierFactory.parameter(
|
|
485
|
+
"_exceptionable",
|
|
486
|
+
TypeFactory.keyword("boolean"),
|
|
487
|
+
ts.factory.createTrue(),
|
|
488
|
+
),
|
|
489
|
+
);
|
|
490
|
+
return (input: ts.Identifier): ts.ParameterDeclaration[] => [
|
|
491
|
+
IdentifierFactory.parameter(input, type),
|
|
492
|
+
...tail,
|
|
493
|
+
];
|
|
494
|
+
};
|
|
495
|
+
}
|
|
@@ -2,6 +2,8 @@ import ts from "typescript";
|
|
|
2
2
|
|
|
3
3
|
import { ExpressionFactory } from "../factories/ExpressionFactory";
|
|
4
4
|
import { IdentifierFactory } from "../factories/IdentifierFactory";
|
|
5
|
+
import { MetadataCollection } from "../factories/MetadataCollection";
|
|
6
|
+
import { TypeFactory } from "../factories/TypeFactory";
|
|
5
7
|
import { ValueFactory } from "../factories/ValueFactory";
|
|
6
8
|
|
|
7
9
|
import { MetadataObject } from "../metadata/MetadataObject";
|
|
@@ -20,8 +22,7 @@ export namespace IsProgrammer {
|
|
|
20
22
|
export const configure =
|
|
21
23
|
(options?: Partial<CONFIG.IOptions>) =>
|
|
22
24
|
(importer: FunctionImporter): CheckerProgrammer.IConfig => ({
|
|
23
|
-
|
|
24
|
-
unioners: "$iu",
|
|
25
|
+
prefix: "$i",
|
|
25
26
|
trace: false,
|
|
26
27
|
path: false,
|
|
27
28
|
equals: !!options?.object,
|
|
@@ -107,7 +108,7 @@ export namespace IsProgrammer {
|
|
|
107
108
|
(modulo: ts.LeftHandSideExpression, disable?: boolean) =>
|
|
108
109
|
(equals: boolean) => {
|
|
109
110
|
const importer: FunctionImporter =
|
|
110
|
-
disable ===
|
|
111
|
+
disable === <any>{}
|
|
111
112
|
? disable_function_importer_declare(new FunctionImporter())
|
|
112
113
|
: new FunctionImporter();
|
|
113
114
|
|
|
@@ -128,65 +129,98 @@ export namespace IsProgrammer {
|
|
|
128
129
|
addition: () => importer.declare(modulo),
|
|
129
130
|
};
|
|
130
131
|
|
|
131
|
-
config.decoder =
|
|
132
|
-
|
|
133
|
-
target.size() === 1 &&
|
|
134
|
-
target.objects.length === 1 &&
|
|
135
|
-
target.required === true &&
|
|
136
|
-
target.nullable === false
|
|
137
|
-
) {
|
|
138
|
-
// ONLY WHEN OBJECT WITH SOME ATOMIC PROPERTIES
|
|
139
|
-
const obj: MetadataObject = target.objects[0]!;
|
|
132
|
+
config.decoder =
|
|
133
|
+
() => (input, target, explore, tags, jsDocTags) => {
|
|
140
134
|
if (
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
)
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
135
|
+
target.size() === 1 &&
|
|
136
|
+
target.objects.length === 1 &&
|
|
137
|
+
target.required === true &&
|
|
138
|
+
target.nullable === false
|
|
139
|
+
) {
|
|
140
|
+
// ONLY WHEN OBJECT WITH SOME ATOMIC PROPERTIES
|
|
141
|
+
const obj: MetadataObject = target.objects[0]!;
|
|
142
|
+
if (
|
|
143
|
+
obj._Is_simple() &&
|
|
144
|
+
(equals === false ||
|
|
145
|
+
OptionPredicator.undefined(project.options) ===
|
|
146
|
+
false)
|
|
147
|
+
)
|
|
148
|
+
return ts.factory.createLogicalAnd(
|
|
149
|
+
ExpressionFactory.isObject({
|
|
150
|
+
checkNull: true,
|
|
151
|
+
checkArray: false,
|
|
152
|
+
})(input),
|
|
153
|
+
config.joiner.object(
|
|
154
|
+
ts.factory.createAsExpression(
|
|
155
|
+
input,
|
|
156
|
+
TypeFactory.keyword("any"),
|
|
157
|
+
),
|
|
158
|
+
feature_object_entries(config as any)(
|
|
159
|
+
importer,
|
|
160
|
+
)(obj)(
|
|
161
|
+
ts.factory.createAsExpression(
|
|
162
|
+
input,
|
|
163
|
+
TypeFactory.keyword("any"),
|
|
164
|
+
),
|
|
165
|
+
),
|
|
166
|
+
),
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
return CheckerProgrammer.decode(project)(config)(importer)(
|
|
170
|
+
input,
|
|
171
|
+
target,
|
|
172
|
+
explore,
|
|
173
|
+
tags,
|
|
174
|
+
jsDocTags,
|
|
175
|
+
);
|
|
176
|
+
};
|
|
167
177
|
|
|
168
178
|
// GENERATE CHECKER
|
|
169
179
|
return CheckerProgrammer.write(project)(config)(importer);
|
|
170
180
|
};
|
|
171
181
|
|
|
172
|
-
export const
|
|
173
|
-
(project: IProject) =>
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
);
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
182
|
+
export const write_function_statements =
|
|
183
|
+
(project: IProject) =>
|
|
184
|
+
(importer: FunctionImporter) =>
|
|
185
|
+
(collection: MetadataCollection) => {
|
|
186
|
+
const config = configure()(importer);
|
|
187
|
+
const objects =
|
|
188
|
+
CheckerProgrammer.write_object_functions(project)(config)(
|
|
189
|
+
importer,
|
|
190
|
+
)(collection);
|
|
191
|
+
const unions =
|
|
192
|
+
CheckerProgrammer.write_union_functions(project)(config)(
|
|
193
|
+
importer,
|
|
194
|
+
)(collection);
|
|
195
|
+
const arrays =
|
|
196
|
+
CheckerProgrammer.write_array_functions(project)(config)(
|
|
197
|
+
importer,
|
|
198
|
+
)(collection);
|
|
199
|
+
const tuples =
|
|
200
|
+
CheckerProgrammer.write_tuple_functions(project)(config)(
|
|
201
|
+
importer,
|
|
202
|
+
)(collection);
|
|
203
|
+
|
|
204
|
+
return [
|
|
205
|
+
...objects.filter((_, i) =>
|
|
206
|
+
importer.hasLocal(`${config.prefix}o${i}`),
|
|
207
|
+
),
|
|
208
|
+
...unions.filter((_, i) =>
|
|
209
|
+
importer.hasLocal(`${config.prefix}u${i}`),
|
|
210
|
+
),
|
|
211
|
+
...arrays.filter((_, i) =>
|
|
212
|
+
importer.hasLocal(`${config.prefix}a${i}`),
|
|
213
|
+
),
|
|
214
|
+
...tuples.filter((_, i) =>
|
|
215
|
+
importer.hasLocal(`${config.prefix}t${i}`),
|
|
216
|
+
),
|
|
217
|
+
];
|
|
218
|
+
};
|
|
185
219
|
|
|
186
220
|
/* -----------------------------------------------------------
|
|
187
221
|
DECODERS
|
|
188
222
|
----------------------------------------------------------- */
|
|
189
|
-
export const decode = (project: IProject
|
|
223
|
+
export const decode = (project: IProject) => (importer: FunctionImporter) =>
|
|
190
224
|
CheckerProgrammer.decode(project)(configure()(importer))(importer);
|
|
191
225
|
|
|
192
226
|
export const decode_object = (importer: FunctionImporter) =>
|