typia 5.0.0-dev.20230822 → 5.0.0-dev.20230823-2
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/README.md +1 -1
- package/lib/Primitive.d.ts +14 -12
- package/lib/Resolved.d.ts +46 -0
- package/lib/{schemas/metadata/IMetadataResolved.js → Resolved.js} +1 -1
- package/lib/Resolved.js.map +1 -0
- package/lib/factories/MetadataFactory.d.ts +1 -1
- package/lib/factories/MetadataTagFactory.js +6 -6
- package/lib/factories/MetadataTagFactory.js.map +1 -1
- package/lib/factories/ProtobufFactory.js +2 -2
- package/lib/factories/ProtobufFactory.js.map +1 -1
- package/lib/factories/internal/metadata/explore_metadata.js +3 -3
- package/lib/factories/internal/metadata/explore_metadata.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_collection.js +6 -6
- package/lib/factories/internal/metadata/iterate_metadata_collection.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_native.js +2 -10
- package/lib/factories/internal/metadata/iterate_metadata_native.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_resolve.js +6 -6
- package/lib/factories/internal/metadata/iterate_metadata_resolve.js.map +1 -1
- package/lib/factories/internal/metadata/iterate_metadata_sort.js +2 -2
- package/lib/factories/internal/metadata/iterate_metadata_sort.js.map +1 -1
- package/lib/functional/$ProtobufWriter.js.map +1 -1
- package/lib/json.d.ts +15 -15
- package/lib/misc.d.ts +42 -42
- package/lib/module.d.ts +18 -17
- package/lib/module.js +1 -0
- package/lib/module.js.map +1 -1
- package/lib/programmers/AssertProgrammer.js +1 -1
- package/lib/programmers/AssertProgrammer.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.js +1 -1
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/IsProgrammer.js +2 -2
- package/lib/programmers/IsProgrammer.js.map +1 -1
- package/lib/programmers/RandomProgrammer.js +307 -132
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/ValidateProgrammer.js +1 -1
- package/lib/programmers/ValidateProgrammer.js.map +1 -1
- package/lib/programmers/helpers/FunctionImporeter.d.ts +2 -0
- package/lib/programmers/helpers/FunctionImporeter.js +2 -1
- package/lib/programmers/helpers/FunctionImporeter.js.map +1 -1
- package/lib/programmers/helpers/StringifyPredicator.js +1 -2
- package/lib/programmers/helpers/StringifyPredicator.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/application_resolved.d.ts +2 -2
- package/lib/programmers/internal/application_resolved.js.map +1 -1
- package/lib/programmers/internal/application_schema.js +2 -2
- package/lib/programmers/internal/application_schema.js.map +1 -1
- package/lib/programmers/json/JsonStringifyProgrammer.js +4 -4
- package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscAssertCloneProgrammer.js +1 -1
- package/lib/programmers/misc/MiscAssertCloneProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscCloneProgrammer.js +114 -33
- package/lib/programmers/misc/MiscCloneProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscIsCloneProgrammer.js +1 -1
- package/lib/programmers/misc/MiscIsCloneProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscLiteralsProgrammer.js +1 -1
- package/lib/programmers/misc/MiscLiteralsProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscPruneProgrammer.js +2 -2
- package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscValidateCloneProgrammer.js +1 -1
- package/lib/programmers/misc/MiscValidateCloneProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js +3 -3
- package/lib/programmers/protobuf/ProtobufAssertDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +15 -10
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +8 -6
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js +2 -2
- package/lib/programmers/protobuf/ProtobufIsDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js +1 -1
- package/lib/programmers/protobuf/ProtobufValidateDecodeProgrammer.js.map +1 -1
- package/lib/protobuf.d.ts +631 -10
- package/lib/protobuf.js +13 -13
- package/lib/protobuf.js.map +1 -1
- package/lib/schemas/metadata/IMetadata.d.ts +2 -2
- package/lib/schemas/metadata/{IMetadataResolved.d.ts → IMetadataEscaped.d.ts} +1 -1
- package/lib/schemas/metadata/IMetadataEscaped.js +3 -0
- package/lib/schemas/metadata/IMetadataEscaped.js.map +1 -0
- package/lib/schemas/metadata/Metadata.d.ts +2 -2
- package/lib/schemas/metadata/Metadata.js +15 -15
- package/lib/schemas/metadata/Metadata.js.map +1 -1
- package/lib/schemas/metadata/{MetadataResolved.d.ts → MetadataEscaped.d.ts} +3 -3
- package/lib/schemas/metadata/{MetadataResolved.js → MetadataEscaped.js} +11 -11
- package/lib/schemas/metadata/MetadataEscaped.js.map +1 -0
- package/lib/transformers/features/json/JsonApplicationTransformer.js +1 -1
- package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
- package/lib/transformers/features/misc/MetadataTransformer.js +1 -1
- package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
- package/lib/utils/RandomGenerator.js +3 -2
- package/lib/utils/RandomGenerator.js.map +1 -1
- package/package.json +2 -1
- package/src/Primitive.ts +19 -15
- package/src/Resolved.ts +116 -0
- package/src/factories/MetadataFactory.ts +1 -1
- package/src/factories/MetadataTagFactory.ts +6 -6
- package/src/factories/ProtobufFactory.ts +2 -2
- package/src/factories/internal/metadata/explore_metadata.ts +3 -3
- package/src/factories/internal/metadata/iterate_metadata_collection.ts +6 -6
- package/src/factories/internal/metadata/iterate_metadata_native.ts +0 -9
- package/src/factories/internal/metadata/iterate_metadata_resolve.ts +6 -6
- package/src/factories/internal/metadata/iterate_metadata_sort.ts +2 -2
- package/src/functional/$ProtobufWriter.ts +1 -2
- package/src/json.ts +15 -15
- package/src/misc.ts +42 -42
- package/src/module.ts +18 -17
- package/src/programmers/AssertProgrammer.ts +3 -1
- package/src/programmers/CheckerProgrammer.ts +1 -1
- package/src/programmers/IsProgrammer.ts +4 -2
- package/src/programmers/RandomProgrammer.ts +322 -26
- package/src/programmers/ValidateProgrammer.ts +3 -1
- package/src/programmers/helpers/FunctionImporeter.ts +2 -0
- package/src/programmers/helpers/StringifyPredicator.ts +1 -2
- package/src/programmers/helpers/disable_function_importer_declare.ts +6 -1
- package/src/programmers/internal/application_resolved.ts +2 -2
- package/src/programmers/internal/application_schema.ts +2 -2
- package/src/programmers/json/JsonStringifyProgrammer.ts +6 -4
- package/src/programmers/misc/MiscAssertCloneProgrammer.ts +1 -1
- package/src/programmers/misc/MiscCloneProgrammer.ts +229 -41
- package/src/programmers/misc/MiscIsCloneProgrammer.ts +1 -1
- package/src/programmers/misc/MiscLiteralsProgrammer.ts +1 -1
- package/src/programmers/misc/MiscPruneProgrammer.ts +4 -2
- package/src/programmers/misc/MiscValidateCloneProgrammer.ts +1 -1
- package/src/programmers/protobuf/ProtobufAssertDecodeProgrammer.ts +18 -9
- package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +45 -25
- package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +15 -13
- package/src/programmers/protobuf/ProtobufIsDecodeProgrammer.ts +12 -2
- package/src/programmers/protobuf/ProtobufValidateDecodeProgrammer.ts +2 -2
- package/src/protobuf.ts +663 -31
- package/src/schemas/metadata/IMetadata.ts +2 -2
- package/src/schemas/metadata/{IMetadataResolved.ts → IMetadataEscaped.ts} +1 -1
- package/src/schemas/metadata/Metadata.ts +17 -20
- package/src/schemas/metadata/{MetadataResolved.ts → MetadataEscaped.ts} +9 -9
- package/src/transformers/features/json/JsonApplicationTransformer.ts +1 -1
- package/src/transformers/features/misc/MetadataTransformer.ts +1 -1
- package/src/utils/RandomGenerator.ts +4 -2
- package/lib/schemas/metadata/IMetadataResolved.js.map +0 -1
- package/lib/schemas/metadata/MetadataResolved.js.map +0 -1
package/src/module.ts
CHANGED
|
@@ -8,7 +8,7 @@ import { MapUtil } from "./utils/MapUtil";
|
|
|
8
8
|
import { CustomValidatorMap } from "./CustomValidatorMap";
|
|
9
9
|
import { IRandomGenerator } from "./IRandomGenerator";
|
|
10
10
|
import { IValidation } from "./IValidation";
|
|
11
|
-
import {
|
|
11
|
+
import { Resolved } from "./Resolved";
|
|
12
12
|
|
|
13
13
|
export * as json from "./json";
|
|
14
14
|
export * as protobuf from "./protobuf";
|
|
@@ -20,6 +20,7 @@ export * from "./schemas/json/IJsonSchema";
|
|
|
20
20
|
export * from "./IRandomGenerator";
|
|
21
21
|
export * from "./IValidation";
|
|
22
22
|
export * from "./Primitive";
|
|
23
|
+
export * from "./Resolved";
|
|
23
24
|
export * from "./TypeGuardError";
|
|
24
25
|
|
|
25
26
|
/**
|
|
@@ -461,7 +462,7 @@ export function random(generator?: Partial<IRandomGenerator>): never;
|
|
|
461
462
|
*
|
|
462
463
|
* @author Jeongho Nam - https://github.com/samchon
|
|
463
464
|
*/
|
|
464
|
-
export function random<T>(generator?: Partial<IRandomGenerator>):
|
|
465
|
+
export function random<T>(generator?: Partial<IRandomGenerator>): Resolved<T>;
|
|
465
466
|
|
|
466
467
|
/**
|
|
467
468
|
* @internal
|
|
@@ -494,8 +495,8 @@ export function metadata(): never {
|
|
|
494
495
|
/**
|
|
495
496
|
* Creates a reusable {@link assert} function.
|
|
496
497
|
*
|
|
497
|
-
* @danger You
|
|
498
|
-
* @
|
|
498
|
+
* @danger You must configure the generic argument `T`
|
|
499
|
+
* @returns Nothing until you configure the generic argument `T`
|
|
499
500
|
* @throws compile error
|
|
500
501
|
*
|
|
501
502
|
* @author Jeongho Nam - https://github.com/samchon
|
|
@@ -523,8 +524,8 @@ Object.assign(createAssert, assert);
|
|
|
523
524
|
/**
|
|
524
525
|
* Creates a reusable {@link is} function.
|
|
525
526
|
*
|
|
526
|
-
* @danger You
|
|
527
|
-
* @
|
|
527
|
+
* @danger You must configure the generic argument `T`
|
|
528
|
+
* @returns Nothing until you configure the generic argument `T`
|
|
528
529
|
* @throws compile error
|
|
529
530
|
*
|
|
530
531
|
* @author Jeongho Nam - https://github.com/samchon
|
|
@@ -552,8 +553,8 @@ Object.assign(createIs, is);
|
|
|
552
553
|
/**
|
|
553
554
|
* Creates a reusable {@link validate} function.
|
|
554
555
|
*
|
|
555
|
-
* @danger You
|
|
556
|
-
* @
|
|
556
|
+
* @danger You must configure the generic argument `T`
|
|
557
|
+
* @returns Nothing until you configure the generic argument `T`
|
|
557
558
|
* @throws compile error
|
|
558
559
|
*
|
|
559
560
|
* @author Jeongho Nam - https://github.com/samchon
|
|
@@ -581,8 +582,8 @@ Object.assign(createValidate, validate);
|
|
|
581
582
|
/**
|
|
582
583
|
* Creates a reusable {@link assertEquals} function.
|
|
583
584
|
*
|
|
584
|
-
* @danger You
|
|
585
|
-
* @
|
|
585
|
+
* @danger You must configure the generic argument `T`
|
|
586
|
+
* @returns Nothing until you configure the generic argument `T`
|
|
586
587
|
* @throws compile error
|
|
587
588
|
*
|
|
588
589
|
* @author Jeongho Nam - https://github.com/samchon
|
|
@@ -610,8 +611,8 @@ Object.assign(createAssertEquals, assertEquals);
|
|
|
610
611
|
/**
|
|
611
612
|
* Creates a reusable {@link equals} function.
|
|
612
613
|
*
|
|
613
|
-
* @danger You
|
|
614
|
-
* @
|
|
614
|
+
* @danger You must configure the generic argument `T`
|
|
615
|
+
* @returns Nothing until you configure the generic argument `T`
|
|
615
616
|
* @throws compile error
|
|
616
617
|
*
|
|
617
618
|
* @author Jeongho Nam - https://github.com/samchon
|
|
@@ -639,8 +640,8 @@ Object.assign(createEquals, equals);
|
|
|
639
640
|
/**
|
|
640
641
|
* Creates a reusable {@link validateEquals} function.
|
|
641
642
|
*
|
|
642
|
-
* @danger You
|
|
643
|
-
* @
|
|
643
|
+
* @danger You must configure the generic argument `T`
|
|
644
|
+
* @returns Nothing until you configure the generic argument `T`
|
|
644
645
|
* @throws compile error
|
|
645
646
|
*
|
|
646
647
|
* @author Jeongho Nam - https://github.com/samchon
|
|
@@ -668,9 +669,9 @@ Object.assign(createValidateEquals, validateEquals);
|
|
|
668
669
|
/**
|
|
669
670
|
* Creates a reusable {@link random} function.
|
|
670
671
|
*
|
|
671
|
-
* @danger You
|
|
672
|
+
* @danger You must configure the generic argument `T`
|
|
672
673
|
* @param generator Random data generator
|
|
673
|
-
* @
|
|
674
|
+
* @returns Nothing until you configure the generic argument `T`
|
|
674
675
|
* @throws compile error
|
|
675
676
|
*
|
|
676
677
|
* @author Jeongho Nam - https://github.com/samchon
|
|
@@ -688,7 +689,7 @@ export function createRandom(generator?: Partial<IRandomGenerator>): never;
|
|
|
688
689
|
*/
|
|
689
690
|
export function createRandom<T>(
|
|
690
691
|
generator?: Partial<IRandomGenerator>,
|
|
691
|
-
): () =>
|
|
692
|
+
): () => Resolved<T>;
|
|
692
693
|
|
|
693
694
|
/**
|
|
694
695
|
* @internal
|
|
@@ -18,7 +18,9 @@ export namespace AssertProgrammer {
|
|
|
18
18
|
(modulo: ts.LeftHandSideExpression) =>
|
|
19
19
|
(equals: boolean) =>
|
|
20
20
|
(type: ts.Type, name?: string) => {
|
|
21
|
-
const importer: FunctionImporter = new FunctionImporter(
|
|
21
|
+
const importer: FunctionImporter = new FunctionImporter(
|
|
22
|
+
modulo.getText(),
|
|
23
|
+
);
|
|
22
24
|
const is = IsProgrammer.write(project)(modulo, true)(equals)(
|
|
23
25
|
type,
|
|
24
26
|
name ?? TypeFactory.getFullName(project.checker)(type),
|
|
@@ -215,7 +215,7 @@ export namespace CheckerProgrammer {
|
|
|
215
215
|
const collection: MetadataCollection =
|
|
216
216
|
new MetadataCollection();
|
|
217
217
|
const meta: Metadata = MetadataFactory.analyze(checker)({
|
|
218
|
-
|
|
218
|
+
escape: false,
|
|
219
219
|
constant: true,
|
|
220
220
|
absorb: true,
|
|
221
221
|
})(collection)(type);
|
|
@@ -97,8 +97,10 @@ export namespace IsProgrammer {
|
|
|
97
97
|
(equals: boolean) => {
|
|
98
98
|
const importer: FunctionImporter =
|
|
99
99
|
disable === <any>{}
|
|
100
|
-
? disable_function_importer_declare(
|
|
101
|
-
|
|
100
|
+
? disable_function_importer_declare(
|
|
101
|
+
new FunctionImporter(modulo.getText()),
|
|
102
|
+
)
|
|
103
|
+
: new FunctionImporter(modulo.getText());
|
|
102
104
|
|
|
103
105
|
// CONFIGURATION
|
|
104
106
|
const config: CheckerProgrammer.IConfig = {
|
|
@@ -27,15 +27,27 @@ export namespace RandomProgrammer {
|
|
|
27
27
|
(project: IProject) =>
|
|
28
28
|
(modulo: ts.LeftHandSideExpression) =>
|
|
29
29
|
(init?: ts.Expression) => {
|
|
30
|
-
const importer: FunctionImporter = new FunctionImporter(
|
|
30
|
+
const importer: FunctionImporter = new FunctionImporter(
|
|
31
|
+
modulo.getText(),
|
|
32
|
+
);
|
|
31
33
|
return (type: ts.Type, name?: string) => {
|
|
32
34
|
// INITIALIZE METADATA
|
|
33
35
|
const collection: MetadataCollection = new MetadataCollection();
|
|
34
36
|
const meta: Metadata = MetadataFactory.analyze(project.checker)(
|
|
35
37
|
{
|
|
36
|
-
|
|
38
|
+
escape: false,
|
|
37
39
|
constant: true,
|
|
38
40
|
absorb: true,
|
|
41
|
+
validate: (meta) => {
|
|
42
|
+
if (meta.natives.some((n) => n === "WeakSet"))
|
|
43
|
+
throw new Error(
|
|
44
|
+
`Error on ${modulo.getText()}(): WeakSet is not supported.`,
|
|
45
|
+
);
|
|
46
|
+
else if (meta.natives.some((n) => n === "WeakMap"))
|
|
47
|
+
throw new Error(
|
|
48
|
+
`Error on ${modulo.getText()}(): WeakMap is not supported.`,
|
|
49
|
+
);
|
|
50
|
+
},
|
|
39
51
|
},
|
|
40
52
|
)(collection)(type);
|
|
41
53
|
|
|
@@ -67,7 +79,7 @@ export namespace RandomProgrammer {
|
|
|
67
79
|
),
|
|
68
80
|
],
|
|
69
81
|
ts.factory.createTypeReferenceNode(
|
|
70
|
-
`typia.
|
|
82
|
+
`typia.Resolved<${
|
|
71
83
|
name ??
|
|
72
84
|
TypeFactory.getFullName(project.checker)(type)
|
|
73
85
|
}>`,
|
|
@@ -223,7 +235,7 @@ export namespace RandomProgrammer {
|
|
|
223
235
|
);
|
|
224
236
|
|
|
225
237
|
// NULL COALESCING
|
|
226
|
-
if (meta.isRequired() === false)
|
|
238
|
+
if (meta.isRequired() === false || meta.functional === true)
|
|
227
239
|
expressions.push(ts.factory.createIdentifier("undefined"));
|
|
228
240
|
if (meta.nullable === true)
|
|
229
241
|
expressions.push(ts.factory.createNull());
|
|
@@ -240,17 +252,17 @@ export namespace RandomProgrammer {
|
|
|
240
252
|
if (atomic === "boolean")
|
|
241
253
|
expressions.push(decode_boolean(importer));
|
|
242
254
|
else if (atomic === "number")
|
|
243
|
-
expressions.push(decode_number(importer)(tags
|
|
255
|
+
expressions.push(decode_number(importer)(tags, comments));
|
|
244
256
|
else if (atomic === "string")
|
|
245
|
-
expressions.push(decode_string(importer)(tags
|
|
257
|
+
expressions.push(decode_string(importer)(tags, comments));
|
|
246
258
|
else if (atomic === "bigint")
|
|
247
|
-
expressions.push(decode_bigint(importer)(tags
|
|
259
|
+
expressions.push(decode_bigint(importer)(tags, comments));
|
|
248
260
|
|
|
249
261
|
// INSTANCE TYPES
|
|
250
|
-
if (meta.
|
|
262
|
+
if (meta.escaped)
|
|
251
263
|
expressions.push(
|
|
252
264
|
decode(importer)(explore)(
|
|
253
|
-
meta.
|
|
265
|
+
meta.escaped.returns,
|
|
254
266
|
tags,
|
|
255
267
|
comments,
|
|
256
268
|
),
|
|
@@ -266,17 +278,19 @@ export namespace RandomProgrammer {
|
|
|
266
278
|
for (const o of meta.objects)
|
|
267
279
|
expressions.push(decode_object(importer)(explore)(o));
|
|
268
280
|
for (const native of meta.natives)
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
expressions.push(
|
|
278
|
-
|
|
279
|
-
|
|
281
|
+
expressions.push(
|
|
282
|
+
decode_native(importer)(native, tags, comments),
|
|
283
|
+
);
|
|
284
|
+
for (const set of meta.sets)
|
|
285
|
+
expressions.push(
|
|
286
|
+
decode_set(importer)(explore)(set, tags, comments),
|
|
287
|
+
);
|
|
288
|
+
for (const map of meta.maps)
|
|
289
|
+
expressions.push(
|
|
290
|
+
decode_map(importer)(explore)(map, tags, comments),
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
// PICK UP A TYPE
|
|
280
294
|
if (expressions.length === 1) return expressions[0]!;
|
|
281
295
|
return ts.factory.createCallExpression(
|
|
282
296
|
ts.factory.createCallExpression(
|
|
@@ -329,8 +343,7 @@ export namespace RandomProgrammer {
|
|
|
329
343
|
|
|
330
344
|
const decode_number =
|
|
331
345
|
(importer: FunctionImporter) =>
|
|
332
|
-
(tags: IMetadataTag[]) =>
|
|
333
|
-
(comments: ICommentTag[]): ts.Expression => {
|
|
346
|
+
(tags: IMetadataTag[], comments: ICommentTag[]): ts.Expression => {
|
|
334
347
|
const type = tags.find(
|
|
335
348
|
(t) =>
|
|
336
349
|
t.kind === "type" &&
|
|
@@ -378,8 +391,7 @@ export namespace RandomProgrammer {
|
|
|
378
391
|
|
|
379
392
|
const decode_bigint =
|
|
380
393
|
(importer: FunctionImporter) =>
|
|
381
|
-
(tags: IMetadataTag[]) =>
|
|
382
|
-
(comments: ICommentTag[]): ts.Expression =>
|
|
394
|
+
(tags: IMetadataTag[], comments: ICommentTag[]): ts.Expression =>
|
|
383
395
|
random_custom(COALESCE(importer))("bigint")(comments)(
|
|
384
396
|
RandomRanger.number({
|
|
385
397
|
type: tags.find(
|
|
@@ -407,8 +419,7 @@ export namespace RandomProgrammer {
|
|
|
407
419
|
|
|
408
420
|
const decode_string =
|
|
409
421
|
(importer: FunctionImporter) =>
|
|
410
|
-
(tags: IMetadataTag[]) =>
|
|
411
|
-
(comments: ICommentTag[]): ts.Expression =>
|
|
422
|
+
(tags: IMetadataTag[], comments: ICommentTag[]): ts.Expression =>
|
|
412
423
|
random_custom(COALESCE(importer))("string")(comments)(
|
|
413
424
|
(() => {
|
|
414
425
|
for (const t of tags)
|
|
@@ -555,6 +566,290 @@ export namespace RandomProgrammer {
|
|
|
555
566
|
]
|
|
556
567
|
: undefined,
|
|
557
568
|
);
|
|
569
|
+
|
|
570
|
+
/* -----------------------------------------------------------
|
|
571
|
+
NATIVE CLASSES
|
|
572
|
+
----------------------------------------------------------- */
|
|
573
|
+
const decode_set =
|
|
574
|
+
(importer: FunctionImporter) =>
|
|
575
|
+
(explore: IExplore) =>
|
|
576
|
+
(meta: Metadata, tags: IMetadataTag[], comments: ICommentTag[]) =>
|
|
577
|
+
ts.factory.createNewExpression(
|
|
578
|
+
ts.factory.createIdentifier("Set"),
|
|
579
|
+
undefined,
|
|
580
|
+
[
|
|
581
|
+
decode_array(importer)(explore)(
|
|
582
|
+
MetadataArray.create({
|
|
583
|
+
value: meta,
|
|
584
|
+
recursive: false,
|
|
585
|
+
index: null,
|
|
586
|
+
nullables: [],
|
|
587
|
+
name: `Set<${meta.getName()}>`,
|
|
588
|
+
}),
|
|
589
|
+
tags,
|
|
590
|
+
comments,
|
|
591
|
+
),
|
|
592
|
+
],
|
|
593
|
+
);
|
|
594
|
+
|
|
595
|
+
const decode_map =
|
|
596
|
+
(importer: FunctionImporter) =>
|
|
597
|
+
(explore: IExplore) =>
|
|
598
|
+
(m: Metadata.Entry, tags: IMetadataTag[], comments: ICommentTag[]) =>
|
|
599
|
+
ts.factory.createNewExpression(
|
|
600
|
+
ts.factory.createIdentifier("Map"),
|
|
601
|
+
undefined,
|
|
602
|
+
[
|
|
603
|
+
decode_array(importer)(explore)(
|
|
604
|
+
MetadataArray.create({
|
|
605
|
+
name: `Map<${m.key.getName()}, ${m.value.getName()}>`,
|
|
606
|
+
index: null,
|
|
607
|
+
recursive: false,
|
|
608
|
+
nullables: [],
|
|
609
|
+
value: Metadata.create({
|
|
610
|
+
...Metadata.initialize(),
|
|
611
|
+
tuples: [
|
|
612
|
+
(() => {
|
|
613
|
+
const tuple = MetadataTuple.create({
|
|
614
|
+
name: `[${m.key.getName()}, ${m.value.getName()}]`,
|
|
615
|
+
index: null,
|
|
616
|
+
recursive: false,
|
|
617
|
+
nullables: [],
|
|
618
|
+
elements: [m.key, m.value],
|
|
619
|
+
});
|
|
620
|
+
tuple.of_map = true;
|
|
621
|
+
return tuple;
|
|
622
|
+
})(),
|
|
623
|
+
],
|
|
624
|
+
}),
|
|
625
|
+
}),
|
|
626
|
+
tags,
|
|
627
|
+
comments,
|
|
628
|
+
),
|
|
629
|
+
],
|
|
630
|
+
);
|
|
631
|
+
|
|
632
|
+
const decode_native =
|
|
633
|
+
(importer: FunctionImporter) =>
|
|
634
|
+
(
|
|
635
|
+
type: string,
|
|
636
|
+
tags: IMetadataTag[],
|
|
637
|
+
comments: ICommentTag[],
|
|
638
|
+
): ts.Expression => {
|
|
639
|
+
if (type === "Boolean") return decode_boolean(importer);
|
|
640
|
+
else if (type === "Number")
|
|
641
|
+
return decode_number(importer)(tags, comments);
|
|
642
|
+
else if (type === "String")
|
|
643
|
+
return decode_string(importer)(tags, comments);
|
|
644
|
+
else if (type === "Date") return decode_native_date(importer);
|
|
645
|
+
else if (
|
|
646
|
+
type === "Uint8Array" ||
|
|
647
|
+
type === "Uint8ClampedArray" ||
|
|
648
|
+
type === "Uint16Array" ||
|
|
649
|
+
type === "Uint32Array" ||
|
|
650
|
+
type === "BigUint64Array" ||
|
|
651
|
+
type === "Int8Array" ||
|
|
652
|
+
type === "Int16Array" ||
|
|
653
|
+
type === "Int32Array" ||
|
|
654
|
+
type === "BigInt64Array" ||
|
|
655
|
+
type === "Float32Array" ||
|
|
656
|
+
type === "Float64Array"
|
|
657
|
+
)
|
|
658
|
+
return decode_native_byte_array(importer)(type);
|
|
659
|
+
else if (type === "ArrayBuffer" || type === "SharedArrayBuffer")
|
|
660
|
+
return decode_native_array_buffer(importer)(type);
|
|
661
|
+
else if (type === "DataView")
|
|
662
|
+
return decode_native_data_view(importer);
|
|
663
|
+
else
|
|
664
|
+
return ts.factory.createNewExpression(
|
|
665
|
+
ts.factory.createIdentifier(type),
|
|
666
|
+
undefined,
|
|
667
|
+
[],
|
|
668
|
+
);
|
|
669
|
+
};
|
|
670
|
+
|
|
671
|
+
const decode_native_date = (importer: FunctionImporter) =>
|
|
672
|
+
ts.factory.createNewExpression(
|
|
673
|
+
ts.factory.createIdentifier("Date"),
|
|
674
|
+
undefined,
|
|
675
|
+
[
|
|
676
|
+
ts.factory.createCallExpression(
|
|
677
|
+
COALESCE(importer)("datetime"),
|
|
678
|
+
undefined,
|
|
679
|
+
[],
|
|
680
|
+
),
|
|
681
|
+
],
|
|
682
|
+
);
|
|
683
|
+
|
|
684
|
+
const decode_native_byte_array =
|
|
685
|
+
(importer: FunctionImporter) =>
|
|
686
|
+
(
|
|
687
|
+
type:
|
|
688
|
+
| "Uint8Array"
|
|
689
|
+
| "Uint8ClampedArray"
|
|
690
|
+
| "Uint16Array"
|
|
691
|
+
| "Uint32Array"
|
|
692
|
+
| "BigUint64Array"
|
|
693
|
+
| "Int8Array"
|
|
694
|
+
| "Int16Array"
|
|
695
|
+
| "Int32Array"
|
|
696
|
+
| "BigInt64Array"
|
|
697
|
+
| "Float32Array"
|
|
698
|
+
| "Float64Array",
|
|
699
|
+
): ts.Expression => {
|
|
700
|
+
new BigInt64Array();
|
|
701
|
+
const [minimum, maximum]: [number, number] = (() => {
|
|
702
|
+
if (type === "Uint8Array" || type === "Uint8ClampedArray")
|
|
703
|
+
return [0, 255];
|
|
704
|
+
else if (type === "Uint16Array") return [0, 65535];
|
|
705
|
+
else if (type === "Uint32Array") return [0, 4294967295];
|
|
706
|
+
else if (type === "BigUint64Array")
|
|
707
|
+
return [0, 18446744073709551615];
|
|
708
|
+
else if (type === "Int8Array") return [-128, 127];
|
|
709
|
+
else if (type === "Int16Array") return [-32768, 32767];
|
|
710
|
+
else if (type === "Int32Array")
|
|
711
|
+
return [-2147483648, 2147483647];
|
|
712
|
+
else if (type === "BigInt64Array")
|
|
713
|
+
return [-9223372036854775808, 9223372036854775807];
|
|
714
|
+
else if (type === "Float32Array")
|
|
715
|
+
return [-1.175494351e38, 3.4028235e38];
|
|
716
|
+
return [Number.MIN_VALUE, Number.MAX_VALUE];
|
|
717
|
+
})();
|
|
718
|
+
const literal =
|
|
719
|
+
type === "BigInt64Array" || type === "BigUint64Array"
|
|
720
|
+
? ExpressionFactory.bigint
|
|
721
|
+
: ts.factory.createNumericLiteral;
|
|
722
|
+
return ts.factory.createNewExpression(
|
|
723
|
+
ts.factory.createIdentifier(type),
|
|
724
|
+
[],
|
|
725
|
+
[
|
|
726
|
+
ts.factory.createCallExpression(
|
|
727
|
+
COALESCE(importer)("array"),
|
|
728
|
+
undefined,
|
|
729
|
+
[
|
|
730
|
+
ts.factory.createArrowFunction(
|
|
731
|
+
undefined,
|
|
732
|
+
undefined,
|
|
733
|
+
[],
|
|
734
|
+
TypeFactory.keyword("any"),
|
|
735
|
+
undefined,
|
|
736
|
+
ts.factory.createCallExpression(
|
|
737
|
+
COALESCE(importer)(
|
|
738
|
+
type === "Float32Array" ||
|
|
739
|
+
type === "Float64Array"
|
|
740
|
+
? "number"
|
|
741
|
+
: type === "BigInt64Array" ||
|
|
742
|
+
type === "BigUint64Array"
|
|
743
|
+
? "bigint"
|
|
744
|
+
: "integer",
|
|
745
|
+
),
|
|
746
|
+
undefined,
|
|
747
|
+
[literal(minimum), literal(maximum)],
|
|
748
|
+
),
|
|
749
|
+
),
|
|
750
|
+
],
|
|
751
|
+
),
|
|
752
|
+
],
|
|
753
|
+
);
|
|
754
|
+
};
|
|
755
|
+
|
|
756
|
+
const decode_native_array_buffer =
|
|
757
|
+
(importer: FunctionImporter) =>
|
|
758
|
+
(type: "ArrayBuffer" | "SharedArrayBuffer"): ts.Expression =>
|
|
759
|
+
type === "ArrayBuffer"
|
|
760
|
+
? IdentifierFactory.access(
|
|
761
|
+
decode_native_byte_array(importer)("Uint8Array"),
|
|
762
|
+
)("buffer")
|
|
763
|
+
: ExpressionFactory.selfCall(
|
|
764
|
+
ts.factory.createBlock(
|
|
765
|
+
[
|
|
766
|
+
StatementFactory.constant(
|
|
767
|
+
"length",
|
|
768
|
+
ts.factory.createCallExpression(
|
|
769
|
+
COALESCE(importer)("integer"),
|
|
770
|
+
undefined,
|
|
771
|
+
[],
|
|
772
|
+
),
|
|
773
|
+
),
|
|
774
|
+
StatementFactory.constant(
|
|
775
|
+
"buffer",
|
|
776
|
+
ts.factory.createNewExpression(
|
|
777
|
+
ts.factory.createIdentifier(
|
|
778
|
+
"SharedArrayBuffer",
|
|
779
|
+
),
|
|
780
|
+
[],
|
|
781
|
+
[ts.factory.createIdentifier("length")],
|
|
782
|
+
),
|
|
783
|
+
),
|
|
784
|
+
StatementFactory.constant(
|
|
785
|
+
"bytes",
|
|
786
|
+
ts.factory.createNewExpression(
|
|
787
|
+
ts.factory.createIdentifier("Uint8Array"),
|
|
788
|
+
[],
|
|
789
|
+
[ts.factory.createIdentifier("buffer")],
|
|
790
|
+
),
|
|
791
|
+
),
|
|
792
|
+
ts.factory.createExpressionStatement(
|
|
793
|
+
ts.factory.createCallExpression(
|
|
794
|
+
IdentifierFactory.access(
|
|
795
|
+
ts.factory.createIdentifier("bytes"),
|
|
796
|
+
)("set"),
|
|
797
|
+
undefined,
|
|
798
|
+
[
|
|
799
|
+
ts.factory.createCallExpression(
|
|
800
|
+
COALESCE(importer)("array"),
|
|
801
|
+
undefined,
|
|
802
|
+
[
|
|
803
|
+
ts.factory.createArrowFunction(
|
|
804
|
+
undefined,
|
|
805
|
+
undefined,
|
|
806
|
+
[],
|
|
807
|
+
TypeFactory.keyword(
|
|
808
|
+
"any",
|
|
809
|
+
),
|
|
810
|
+
undefined,
|
|
811
|
+
ts.factory.createCallExpression(
|
|
812
|
+
COALESCE(importer)(
|
|
813
|
+
"integer",
|
|
814
|
+
),
|
|
815
|
+
undefined,
|
|
816
|
+
[
|
|
817
|
+
ts.factory.createNumericLiteral(
|
|
818
|
+
0,
|
|
819
|
+
),
|
|
820
|
+
ts.factory.createNumericLiteral(
|
|
821
|
+
255,
|
|
822
|
+
),
|
|
823
|
+
],
|
|
824
|
+
),
|
|
825
|
+
),
|
|
826
|
+
ts.factory.createIdentifier(
|
|
827
|
+
"length",
|
|
828
|
+
),
|
|
829
|
+
],
|
|
830
|
+
),
|
|
831
|
+
ts.factory.createNumericLiteral(0),
|
|
832
|
+
],
|
|
833
|
+
),
|
|
834
|
+
),
|
|
835
|
+
ts.factory.createReturnStatement(
|
|
836
|
+
ts.factory.createIdentifier("buffer"),
|
|
837
|
+
),
|
|
838
|
+
],
|
|
839
|
+
true,
|
|
840
|
+
),
|
|
841
|
+
);
|
|
842
|
+
|
|
843
|
+
const decode_native_data_view = (importer: FunctionImporter) =>
|
|
844
|
+
ts.factory.createNewExpression(
|
|
845
|
+
ts.factory.createIdentifier("DataView"),
|
|
846
|
+
[],
|
|
847
|
+
[
|
|
848
|
+
IdentifierFactory.access(
|
|
849
|
+
decode_native_byte_array(importer)("Uint8Array"),
|
|
850
|
+
)("buffer"),
|
|
851
|
+
],
|
|
852
|
+
);
|
|
558
853
|
}
|
|
559
854
|
|
|
560
855
|
type Atomic = boolean | number | string | bigint;
|
|
@@ -568,6 +863,7 @@ const PREFIX = {
|
|
|
568
863
|
array: (i: number) => `$ra${i}`,
|
|
569
864
|
tuple: (i: number) => `$rt${i}`,
|
|
570
865
|
};
|
|
866
|
+
|
|
571
867
|
const COALESCE = (importer: FunctionImporter) => (name: string) =>
|
|
572
868
|
ExpressionFactory.coalesce(
|
|
573
869
|
ts.factory.createPropertyAccessChain(
|
|
@@ -19,7 +19,9 @@ export namespace ValidateProgrammer {
|
|
|
19
19
|
(modulo: ts.LeftHandSideExpression) =>
|
|
20
20
|
(equals: boolean) =>
|
|
21
21
|
(type: ts.Type, name?: string) => {
|
|
22
|
-
const importer: FunctionImporter = new FunctionImporter(
|
|
22
|
+
const importer: FunctionImporter = new FunctionImporter(
|
|
23
|
+
modulo.getText(),
|
|
24
|
+
);
|
|
23
25
|
|
|
24
26
|
const is = IsProgrammer.write(project)(modulo, true)(equals)(
|
|
25
27
|
type,
|
|
@@ -6,8 +6,7 @@ export namespace StringifyPredicator {
|
|
|
6
6
|
|
|
7
7
|
export const undefindable = (meta: Metadata): boolean =>
|
|
8
8
|
meta.isRequired() === false ||
|
|
9
|
-
(meta.
|
|
10
|
-
meta.resolved.returns.isRequired() === false);
|
|
9
|
+
(meta.escaped !== null && meta.escaped.returns.isRequired() === false);
|
|
11
10
|
|
|
12
11
|
const ESCAPED = ['"', "\\", "\b", "\f", "\n", "\n", "\r", "\t"];
|
|
13
12
|
}
|
|
@@ -7,6 +7,7 @@ export const disable_function_importer_declare = (
|
|
|
7
7
|
): FunctionImporter => disable(importer) as FunctionImporter;
|
|
8
8
|
|
|
9
9
|
const disable = (importer: FunctionImporter): MethodOnly<FunctionImporter> => ({
|
|
10
|
+
method: importer.method,
|
|
10
11
|
empty: (): boolean => importer.empty(),
|
|
11
12
|
use: (name: string): ts.Identifier => importer.use(name),
|
|
12
13
|
useLocal: (name: string): string => importer.useLocal(name),
|
|
@@ -23,5 +24,9 @@ const disable = (importer: FunctionImporter): MethodOnly<FunctionImporter> => ({
|
|
|
23
24
|
});
|
|
24
25
|
|
|
25
26
|
type MethodOnly<T> = {
|
|
26
|
-
[P in keyof T]: T[P] extends Function
|
|
27
|
+
[P in keyof T]: T[P] extends Function
|
|
28
|
+
? T[P]
|
|
29
|
+
: P extends "method"
|
|
30
|
+
? T[P]
|
|
31
|
+
: never;
|
|
27
32
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Metadata } from "../../schemas/metadata/Metadata";
|
|
2
|
-
import {
|
|
2
|
+
import { MetadataEscaped } from "../../schemas/metadata/MetadataEscaped";
|
|
3
3
|
|
|
4
4
|
import { IJsonComponents, IJsonSchema } from "../../module";
|
|
5
5
|
import { JsonApplicationProgrammer } from "../json/JsonApplicationProgrammer";
|
|
@@ -9,7 +9,7 @@ export const application_resolved =
|
|
|
9
9
|
(options: JsonApplicationProgrammer.IOptions) =>
|
|
10
10
|
<BlockNever extends boolean>(blockNever: BlockNever) =>
|
|
11
11
|
(components: IJsonComponents) =>
|
|
12
|
-
(resolved:
|
|
12
|
+
(resolved: MetadataEscaped) =>
|
|
13
13
|
(attribute: IJsonSchema.IAttribute): IJsonSchema[] => {
|
|
14
14
|
const output = application_schema(options)(blockNever)(components)(
|
|
15
15
|
resolved.returns,
|
|
@@ -58,10 +58,10 @@ export const application_schema =
|
|
|
58
58
|
: (schema: IJsonSchema) => union.push(schema);
|
|
59
59
|
|
|
60
60
|
// toJSON() METHOD
|
|
61
|
-
if (meta.
|
|
61
|
+
if (meta.escaped !== null)
|
|
62
62
|
union.push(
|
|
63
63
|
...application_resolved(options)(blockNever)(components)(
|
|
64
|
-
meta.
|
|
64
|
+
meta.escaped,
|
|
65
65
|
)(attribute),
|
|
66
66
|
);
|
|
67
67
|
|