typia 5.2.6 → 5.2.7-dev.20231109
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/factories/ExpressionFactory.js +14 -16
- package/lib/factories/ExpressionFactory.js.map +1 -1
- package/lib/factories/JsonMetadataFactory.d.ts +1 -1
- package/lib/factories/JsonMetadataFactory.js +2 -2
- package/lib/factories/JsonMetadataFactory.js.map +1 -1
- package/lib/factories/LiteralFactory.js +2 -0
- package/lib/factories/LiteralFactory.js.map +1 -1
- package/lib/factories/MetadataFactory.d.ts +1 -1
- package/lib/factories/MetadataFactory.js +233 -168
- package/lib/factories/MetadataFactory.js.map +1 -1
- package/lib/factories/NumericRangeFactory.d.ts +2 -2
- package/lib/factories/NumericRangeFactory.js +41 -21
- package/lib/factories/NumericRangeFactory.js.map +1 -1
- package/lib/factories/ProtobufFactory.d.ts +1 -1
- package/lib/factories/ProtobufFactory.js +2 -2
- package/lib/factories/ProtobufFactory.js.map +1 -1
- package/lib/programmers/CheckerProgrammer.js +11 -16
- package/lib/programmers/CheckerProgrammer.js.map +1 -1
- package/lib/programmers/RandomProgrammer.js +1 -1
- package/lib/programmers/RandomProgrammer.js.map +1 -1
- package/lib/programmers/http/HttpHeadersProgrammer.js +1 -1
- package/lib/programmers/http/HttpHeadersProgrammer.js.map +1 -1
- package/lib/programmers/http/HttpParameterProgrammer.js +1 -1
- package/lib/programmers/http/HttpParameterProgrammer.js.map +1 -1
- package/lib/programmers/http/HttpQueryProgrammer.js +1 -1
- package/lib/programmers/http/HttpQueryProgrammer.js.map +1 -1
- package/lib/programmers/internal/application_array.js +8 -0
- package/lib/programmers/internal/application_array.js.map +1 -1
- package/lib/programmers/internal/application_number.js +8 -1
- package/lib/programmers/internal/application_number.js.map +1 -1
- package/lib/programmers/internal/application_string.js +8 -1
- package/lib/programmers/internal/application_string.js.map +1 -1
- package/lib/programmers/internal/check_array_length.js +7 -4
- package/lib/programmers/internal/check_array_length.js.map +1 -1
- package/lib/programmers/internal/check_bigint.js +7 -4
- package/lib/programmers/internal/check_bigint.js.map +1 -1
- package/lib/programmers/internal/check_number.js +7 -4
- package/lib/programmers/internal/check_number.js.map +1 -1
- package/lib/programmers/internal/check_string.js.map +1 -1
- package/lib/programmers/json/JsonAssertParseProgrammer.js +1 -1
- package/lib/programmers/json/JsonAssertParseProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonIsParseProgrammer.js +1 -1
- package/lib/programmers/json/JsonIsParseProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonStringifyProgrammer.js +3 -8
- package/lib/programmers/json/JsonStringifyProgrammer.js.map +1 -1
- package/lib/programmers/json/JsonValidateParseProgrammer.js +1 -1
- package/lib/programmers/json/JsonValidateParseProgrammer.js.map +1 -1
- package/lib/programmers/misc/MiscCloneProgrammer.js +19 -24
- package/lib/programmers/misc/MiscCloneProgrammer.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 +11 -16
- package/lib/programmers/misc/MiscPruneProgrammer.js.map +1 -1
- package/lib/programmers/notations/NotationGeneralProgrammer.js +11 -16
- package/lib/programmers/notations/NotationGeneralProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js +1 -1
- package/lib/programmers/protobuf/ProtobufDecodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js +38 -42
- package/lib/programmers/protobuf/ProtobufEncodeProgrammer.js.map +1 -1
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.d.ts +1 -1
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js +22 -25
- package/lib/programmers/protobuf/ProtobufMessageProgrammer.js.map +1 -1
- package/lib/schemas/json/IJsonSchema.d.ts +1 -0
- package/lib/schemas/metadata/Metadata.js +1 -6
- package/lib/schemas/metadata/Metadata.js.map +1 -1
- package/lib/schemas/metadata/MetadataAtomic.d.ts +2 -0
- package/lib/schemas/metadata/MetadataAtomic.js +15 -0
- package/lib/schemas/metadata/MetadataAtomic.js.map +1 -1
- package/lib/transformers/features/json/JsonApplicationTransformer.d.ts +1 -1
- package/lib/transformers/features/json/JsonApplicationTransformer.js +4 -5
- package/lib/transformers/features/json/JsonApplicationTransformer.js.map +1 -1
- package/lib/transformers/features/misc/MetadataTransformer.d.ts +1 -1
- package/lib/transformers/features/misc/MetadataTransformer.js +3 -4
- package/lib/transformers/features/misc/MetadataTransformer.js.map +1 -1
- package/package.json +2 -2
- package/src/Primitive.ts +135 -135
- package/src/executable/TypiaSetupWizard.ts +142 -142
- package/src/executable/setup/CommandExecutor.ts +8 -8
- package/src/factories/ExpressionFactory.ts +12 -13
- package/src/factories/JsonMetadataFactory.ts +53 -50
- package/src/factories/LiteralFactory.ts +2 -0
- package/src/factories/MetadataCollection.ts +282 -282
- package/src/factories/MetadataFactory.ts +48 -18
- package/src/factories/NumericRangeFactory.ts +56 -17
- package/src/factories/ProtobufFactory.ts +5 -2
- package/src/factories/internal/metadata/emplace_metadata_object.ts +178 -178
- package/src/functional/$stoll.ts +8 -8
- package/src/functional/Namespace.ts +168 -168
- package/src/programmers/AssertProgrammer.ts +322 -322
- package/src/programmers/CheckerProgrammer.ts +16 -17
- package/src/programmers/IsProgrammer.ts +258 -258
- package/src/programmers/RandomProgrammer.ts +4 -1
- package/src/programmers/ValidateProgrammer.ts +350 -350
- package/src/programmers/helpers/AtomicPredicator.ts +31 -31
- package/src/programmers/http/HttpHeadersProgrammer.ts +4 -1
- package/src/programmers/http/HttpParameterProgrammer.ts +4 -1
- package/src/programmers/http/HttpQueryProgrammer.ts +4 -1
- package/src/programmers/internal/application_array.ts +8 -0
- package/src/programmers/internal/application_number.ts +8 -1
- package/src/programmers/internal/application_string.ts +8 -1
- package/src/programmers/internal/check_array_length.ts +5 -2
- package/src/programmers/internal/check_bigint.ts +5 -2
- package/src/programmers/internal/check_dynamic_key.ts +178 -178
- package/src/programmers/internal/check_dynamic_properties.ts +202 -202
- package/src/programmers/internal/check_number.ts +5 -2
- package/src/programmers/internal/check_object.ts +62 -62
- package/src/programmers/internal/check_string.ts +0 -1
- package/src/programmers/json/JsonAssertParseProgrammer.ts +1 -0
- package/src/programmers/json/JsonIsParseProgrammer.ts +1 -0
- package/src/programmers/json/JsonStringifyProgrammer.ts +959 -960
- package/src/programmers/json/JsonValidateParseProgrammer.ts +1 -0
- package/src/programmers/misc/MiscCloneProgrammer.ts +787 -786
- package/src/programmers/misc/MiscLiteralsProgrammer.ts +4 -1
- package/src/programmers/misc/MiscPruneProgrammer.ts +549 -548
- package/src/programmers/notations/NotationGeneralProgrammer.ts +717 -716
- package/src/programmers/protobuf/ProtobufDecodeProgrammer.ts +1 -0
- package/src/programmers/protobuf/ProtobufEncodeProgrammer.ts +872 -882
- package/src/programmers/protobuf/ProtobufMessageProgrammer.ts +21 -21
- package/src/schemas/json/IJsonSchema.ts +1 -0
- package/src/schemas/metadata/IMetadataTypeTag.ts +7 -0
- package/src/schemas/metadata/Metadata.ts +1 -6
- package/src/schemas/metadata/MetadataAtomic.ts +17 -0
- package/src/transform.ts +35 -35
- package/src/transformers/features/json/JsonApplicationTransformer.ts +7 -4
- package/src/transformers/features/misc/MetadataTransformer.ts +6 -3
|
@@ -16,27 +16,27 @@ import { NameEncoder } from "../../utils/NameEncoder";
|
|
|
16
16
|
import { ProtobufUtil } from "../helpers/ProtobufUtil";
|
|
17
17
|
|
|
18
18
|
export namespace ProtobufMessageProgrammer {
|
|
19
|
-
export const write =
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
19
|
+
export const write = (project: IProject) => (type: ts.Type) => {
|
|
20
|
+
// PARSE TARGET TYPE
|
|
21
|
+
const collection: MetadataCollection = new MetadataCollection();
|
|
22
|
+
ProtobufFactory.metadata("message")(project.checker, project.context)(
|
|
23
|
+
collection,
|
|
24
|
+
)(type);
|
|
25
|
+
|
|
26
|
+
// STRINGIFY
|
|
27
|
+
const hierarchies: Map<string, Hierarchy> = new Map();
|
|
28
|
+
for (const obj of collection.objects())
|
|
29
|
+
if (is_dynamic_object(obj) === false) emplace(hierarchies)(obj);
|
|
30
|
+
|
|
31
|
+
const content: string =
|
|
32
|
+
`syntax = "proto3";\n\n` +
|
|
33
|
+
[...hierarchies.values()]
|
|
34
|
+
.map((hier) => write_hierarchy(hier))
|
|
35
|
+
.join("\n\n");
|
|
36
|
+
|
|
37
|
+
// RETURNS
|
|
38
|
+
return ts.factory.createStringLiteral(content);
|
|
39
|
+
};
|
|
40
40
|
|
|
41
41
|
const emplace = (dict: Map<string, Hierarchy>) => (obj: MetadataObject) => {
|
|
42
42
|
const accessors: string[] = obj.name.split(".");
|
|
@@ -72,6 +72,7 @@ export namespace IJsonSchema {
|
|
|
72
72
|
minItems?: undefined | (number & Type<"uint32">);
|
|
73
73
|
maxItems?: undefined | (number & Type<"uint32">);
|
|
74
74
|
"x-typia-tuple"?: undefined | ITuple;
|
|
75
|
+
"x-typia-typeTags"?: undefined | IMetadataTypeTag[];
|
|
75
76
|
}
|
|
76
77
|
export interface ITuple extends ISignificant<"array"> {
|
|
77
78
|
items: IJsonSchema[];
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type ts from "typescript";
|
|
2
|
+
|
|
1
3
|
export interface IMetadataTypeTag {
|
|
2
4
|
target: "boolean" | "bigint" | "number" | "string" | "array";
|
|
3
5
|
name: string;
|
|
@@ -5,4 +7,9 @@ export interface IMetadataTypeTag {
|
|
|
5
7
|
value: any;
|
|
6
8
|
validate: string | undefined;
|
|
7
9
|
exclusive: boolean | string[];
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
predicate?: (input: ts.Expression) => ts.Expression;
|
|
8
15
|
}
|
|
@@ -119,12 +119,7 @@ export class Metadata {
|
|
|
119
119
|
nullable: this.nullable,
|
|
120
120
|
functional: this.functional,
|
|
121
121
|
|
|
122
|
-
atomics: this.atomics.map((a) =>
|
|
123
|
-
MetadataAtomic.create({
|
|
124
|
-
type: a.type,
|
|
125
|
-
tags: a.tags.map((r) => r.slice()),
|
|
126
|
-
}),
|
|
127
|
-
),
|
|
122
|
+
atomics: this.atomics.map((a) => a.toJSON()),
|
|
128
123
|
constants: this.constants.map((c) => ({
|
|
129
124
|
type: c.type,
|
|
130
125
|
values: c.values.slice() as any,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ClassProperties } from "../../typings/ClassProperties";
|
|
2
2
|
|
|
3
|
+
import { IMetadataAtomic } from "./IMetadataAtomic";
|
|
3
4
|
import { IMetadataTypeTag } from "./IMetadataTypeTag";
|
|
4
5
|
|
|
5
6
|
export class MetadataAtomic {
|
|
@@ -39,4 +40,20 @@ export class MetadataAtomic {
|
|
|
39
40
|
return `(${this.type} & (${rows.join(" | ")}))`;
|
|
40
41
|
})());
|
|
41
42
|
}
|
|
43
|
+
|
|
44
|
+
public toJSON(): IMetadataAtomic {
|
|
45
|
+
return {
|
|
46
|
+
type: this.type,
|
|
47
|
+
tags: this.tags.map((row) =>
|
|
48
|
+
row.map((tag) => ({
|
|
49
|
+
target: tag.target,
|
|
50
|
+
name: tag.name,
|
|
51
|
+
kind: tag.kind,
|
|
52
|
+
value: tag.value,
|
|
53
|
+
validate: tag.validate,
|
|
54
|
+
exclusive: tag.exclusive,
|
|
55
|
+
})),
|
|
56
|
+
),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
42
59
|
}
|
package/src/transform.ts
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
|
-
|
|
3
|
-
import { FileTransformer } from "./transformers/FileTransformer";
|
|
4
|
-
import { IProject } from "./transformers/IProject";
|
|
5
|
-
import { ITransformOptions } from "./transformers/ITransformOptions";
|
|
6
|
-
|
|
7
|
-
export const transform = (
|
|
8
|
-
program: ts.Program,
|
|
9
|
-
options: ITransformOptions | undefined,
|
|
10
|
-
extras: IProject["extras"],
|
|
11
|
-
): ts.TransformerFactory<ts.SourceFile> => {
|
|
12
|
-
const compilerOptions: ts.CompilerOptions = program.getCompilerOptions();
|
|
13
|
-
const strict: boolean =
|
|
14
|
-
compilerOptions.strictNullChecks !== undefined
|
|
15
|
-
? !!compilerOptions.strictNullChecks
|
|
16
|
-
: !!compilerOptions.strict;
|
|
17
|
-
if (strict === false)
|
|
18
|
-
extras.addDiagnostic({
|
|
19
|
-
category: ts.DiagnosticCategory.Error,
|
|
20
|
-
code: "(typia)" as any,
|
|
21
|
-
file: undefined,
|
|
22
|
-
start: undefined,
|
|
23
|
-
length: undefined,
|
|
24
|
-
messageText: "strict mode is required.",
|
|
25
|
-
});
|
|
26
|
-
return FileTransformer.transform({
|
|
27
|
-
program,
|
|
28
|
-
compilerOptions,
|
|
29
|
-
checker: program.getTypeChecker(),
|
|
30
|
-
printer: ts.createPrinter(),
|
|
31
|
-
options: options ?? {},
|
|
32
|
-
extras,
|
|
33
|
-
});
|
|
34
|
-
};
|
|
35
|
-
export default transform;
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
|
|
3
|
+
import { FileTransformer } from "./transformers/FileTransformer";
|
|
4
|
+
import { IProject } from "./transformers/IProject";
|
|
5
|
+
import { ITransformOptions } from "./transformers/ITransformOptions";
|
|
6
|
+
|
|
7
|
+
export const transform = (
|
|
8
|
+
program: ts.Program,
|
|
9
|
+
options: ITransformOptions | undefined,
|
|
10
|
+
extras: IProject["extras"],
|
|
11
|
+
): ts.TransformerFactory<ts.SourceFile> => {
|
|
12
|
+
const compilerOptions: ts.CompilerOptions = program.getCompilerOptions();
|
|
13
|
+
const strict: boolean =
|
|
14
|
+
compilerOptions.strictNullChecks !== undefined
|
|
15
|
+
? !!compilerOptions.strictNullChecks
|
|
16
|
+
: !!compilerOptions.strict;
|
|
17
|
+
if (strict === false)
|
|
18
|
+
extras.addDiagnostic({
|
|
19
|
+
category: ts.DiagnosticCategory.Error,
|
|
20
|
+
code: "(typia)" as any,
|
|
21
|
+
file: undefined,
|
|
22
|
+
start: undefined,
|
|
23
|
+
length: undefined,
|
|
24
|
+
messageText: "strict mode is required.",
|
|
25
|
+
});
|
|
26
|
+
return FileTransformer.transform({
|
|
27
|
+
program,
|
|
28
|
+
compilerOptions,
|
|
29
|
+
checker: program.getTypeChecker(),
|
|
30
|
+
printer: ts.createPrinter(),
|
|
31
|
+
options: options ?? {},
|
|
32
|
+
extras,
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
export default transform;
|
|
@@ -17,7 +17,7 @@ import { TransformerError } from "../../TransformerError";
|
|
|
17
17
|
|
|
18
18
|
export namespace JsonApplicationTransformer {
|
|
19
19
|
export const transform =
|
|
20
|
-
(
|
|
20
|
+
(project: IProject) =>
|
|
21
21
|
(expression: ts.CallExpression): ts.Expression => {
|
|
22
22
|
if (!expression.typeArguments?.length)
|
|
23
23
|
throw new TransformerError({
|
|
@@ -36,7 +36,7 @@ export namespace JsonApplicationTransformer {
|
|
|
36
36
|
|
|
37
37
|
// GET TYPES
|
|
38
38
|
const types: ts.Type[] = top.elements.map((child) =>
|
|
39
|
-
checker.getTypeFromTypeNode(child as ts.TypeNode),
|
|
39
|
+
project.checker.getTypeFromTypeNode(child as ts.TypeNode),
|
|
40
40
|
);
|
|
41
41
|
if (types.some((t) => t.isTypeParameter()))
|
|
42
42
|
throw new TransformerError({
|
|
@@ -46,7 +46,7 @@ export namespace JsonApplicationTransformer {
|
|
|
46
46
|
|
|
47
47
|
// ADDITIONAL PARAMETERS
|
|
48
48
|
const purpose: "swagger" | "ajv" = get_parameter(
|
|
49
|
-
checker,
|
|
49
|
+
project.checker,
|
|
50
50
|
"Purpose",
|
|
51
51
|
expression.typeArguments[1],
|
|
52
52
|
(str) => str === "swagger" || str === "ajv",
|
|
@@ -62,7 +62,10 @@ export namespace JsonApplicationTransformer {
|
|
|
62
62
|
});
|
|
63
63
|
const results: ValidationPipe<Metadata, MetadataFactory.IError>[] =
|
|
64
64
|
types.map((type) =>
|
|
65
|
-
MetadataFactory.analyze(
|
|
65
|
+
MetadataFactory.analyze(
|
|
66
|
+
project.checker,
|
|
67
|
+
project.context,
|
|
68
|
+
)({
|
|
66
69
|
escape: true,
|
|
67
70
|
constant: true,
|
|
68
71
|
absorb: false,
|
|
@@ -12,7 +12,7 @@ import { TransformerError } from "../../TransformerError";
|
|
|
12
12
|
|
|
13
13
|
export namespace MetadataTransformer {
|
|
14
14
|
export const transform =
|
|
15
|
-
(
|
|
15
|
+
(project: IProject) =>
|
|
16
16
|
(expression: ts.CallExpression): ts.Expression => {
|
|
17
17
|
if (!expression.typeArguments?.length)
|
|
18
18
|
throw new TransformerError({
|
|
@@ -28,7 +28,7 @@ export namespace MetadataTransformer {
|
|
|
28
28
|
|
|
29
29
|
// GET TYPES
|
|
30
30
|
const types: ts.Type[] = top.elements.map((child) =>
|
|
31
|
-
checker.getTypeFromTypeNode(child as ts.TypeNode),
|
|
31
|
+
project.checker.getTypeFromTypeNode(child as ts.TypeNode),
|
|
32
32
|
);
|
|
33
33
|
if (types.some((t) => t.isTypeParameter()))
|
|
34
34
|
throw new TransformerError({
|
|
@@ -39,7 +39,10 @@ export namespace MetadataTransformer {
|
|
|
39
39
|
// METADATA
|
|
40
40
|
const collection: MetadataCollection = new MetadataCollection();
|
|
41
41
|
const metadatas: Array<Metadata> = types.map((type) => {
|
|
42
|
-
const result = MetadataFactory.analyze(
|
|
42
|
+
const result = MetadataFactory.analyze(
|
|
43
|
+
project.checker,
|
|
44
|
+
project.context,
|
|
45
|
+
)({
|
|
43
46
|
escape: true,
|
|
44
47
|
constant: true,
|
|
45
48
|
absorb: true,
|